private void deneme_Load(object sender, EventArgs e) { DatabaseHelper = StaticHelper.InitializeDatabase(Constants.DatabaseConfigFileLocation); ModbusAnalogSignal signal = new ModbusAnalogSignal(); if (DatabaseHelper != null) { TemporaryValues.stations = DatabaseHelper.GetAllStationsInfoWithDeviceInfo(); TemporaryValues.archivePeriods = DatabaseHelper.GetArchivePeriods(); TemporaryValues.dataTypes = DatabaseHelper.GetAllDataTypes(); TemporaryValues.statusTexts = DatabaseHelper.GetAllStatusTexts(); } propertyGrid1.SelectedObject = signal; }
private void DeleteSignal(ModbusAnalogSignal analogSignal) { DialogResult result = MessageBox.Show($"İşleme devam ederseniz {analogSignal.Identification} sinyali ve bu sinyale ait diğer tüm kayıtlar silinecektir.\nİşleme devam etmek istiyor musunuz? ", Constants.MessageBoxHeader, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (result == DialogResult.OK) { if (DBHelper_AddNewOrUpdateAnalogSignalForm.DeleteAnalogSignal(analogSignal.ID)) { MessageBox.Show($"{analogSignal.Identification} adlı sinyal ve bu sinyale ait tüm kayıtlar başarılı bir şekilde silinmiştir.", Constants.MessageBoxHeader, MessageBoxButtons.OK, MessageBoxIcon.Information); Log.Instance.Info($"{this.GetType().Name}: {analogSignal.Identification} adlı sinyal ve bu sinyale ait tüm kayıtlar silinmiştir."); } else { MessageBox.Show($"{analogSignal.Identification} adlı silinirken bir hata oluştu. Bazı verileri kaybetmiş olabilirsiniz.\nAyrıntılı bilgi için log dosyasını kontrol ediniz.", Constants.MessageBoxHeader, MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
public frm_AddNewOrUpdateModbusAnalogSignal(ModbusAnalogSignal analogSignal) { InitializeDatabase(); InitializeComponent(); ID = DBHelper_AddNewOrUpdateAnalogSignalForm.GetNextAnalogSignalID(); AddComponents(); InitializeControlProperties(); this.Text = "Analog Sinyal Güncelle"; this.btn_OK.Text = "Güncelle"; this.analogSignal = analogSignal; UpdateControlsWithSignalInfo(); }
private object CreateAnalogSignal(Device device) { Signal signal; List <Signal> signals; List <Signal> signalsContainName_YeniSinyal; switch (device.ID) { case 1: // ModbusTCP signal = new ModbusAnalogSignal(); break; case 2: // SNMP signal = new Signal(); break; default: signal = new Signal(); break; } signals = dbHelper.GetDeviceAnalogSignalsInfo <Signal>(device); // Cihaz içerisinde aynı tipteki sinyaller aynı identification'ı alamazlar. // 'Yeni Sinyal' isimli başka bir sinyal varsa yeni oluşturulucak sinyalin ismi 'Yeni Sinyalx' olarak değiştiriliyor. // x => Sayı signalsContainName_YeniSinyal = signals.Where((s) => s.Name.Contains("Yeni Sinyal")).ToList(); if (signalsContainName_YeniSinyal.Count > 0) { signal.Name = "Yeni Sinyal" + signalsContainName_YeniSinyal.Count.ToString(); } // Sinyal ID'si oluşturuluyor signal.ID = dbHelper.GetNextAnalogSignalID(); // İstasyon ve cihaz bilgileri sinyale atanıyor. signal.DeviceName = device.Name; signal.deviceID = device.ID; signal.StationName = TemporaryValues.stations.Find((s) => s.ID == device.StationID).Name; // ID sıfırdan büyük ise başarılı bir şekilde veritabanından yeni ID değeri okunmuştur. // ID sıfır ise yeni ID değeri alınamamıştır ve sinyal oluşturulmaz. return(signal.ID > 0 ? signal : null); }
private void dgv_AnalogValues_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) { string signalIdentification = dgv_AnalogValues.Rows[e.RowIndex].Cells[0].Value.ToString(); string protocol_id = dgv_AnalogValues.Rows[e.RowIndex].Cells["protocol_id"].Value.ToString(); switch (protocol_id) { // ModbusTCP case "1": ModbusAnalogSignal analogSignal = DBHelper_OnlineValues.GetAnalogSignalsInfoByIdentification <ModbusAnalogSignal>(signalIdentification); if (analogSignal != null) { frm_AddNewOrUpdateModbusAnalogSignal frm_UpdateAnalogSignal = new frm_AddNewOrUpdateModbusAnalogSignal(analogSignal); frm_UpdateAnalogSignal.ShowDialog(); } else { MessageBox.Show("Modus analog sinyal bilgileri veritabanından okunamadı.\nAyrıntılı bilgi için log dosyasına bakınız.", Constants.MessageBoxHeader, MessageBoxButtons.OK, MessageBoxIcon.Error); } break; case "2": MessageBox.Show("SNMP updade signal Not implemented"); //SNMPAnalogSignal analogSignal = // DBHelper_OnlineValues.GetSignalsInfoByIdentification<SNMPAnalogSignal>(signalIdentification); //if (analogSignal != null) //{ // frm_AddNewOrUpdateModbusAnalogSignal frm_UpdateAnalogSignal = new frm_AddNewOrUpdateModbusAnalogSignal(analogSignal); // frm_UpdateAnalogSignal.ShowDialog(); //} //else //{ // MessageBox.Show("SNMP analog sinyal bilgileri veritabanından okunamadı.\nAyrıntılı bilgi için log dosyasına bakınız.", Constants.MessageBoxHeader, MessageBoxButtons.OK, MessageBoxIcon.Error); //} break; default: Log.Instance.Error("{0}: Sinyala ait protocol bilgisi bulunamadı", this.GetType().Name); break; } }
/// <summary> /// Analog sinyalleri okur. /// </summary> /// <param name="_device">Device</param> /// <param name="_numberOfFirstSignal">The number of first signal.</param> /// <param name="_totalSignalCount">Okunacak toplam sinyal sayısı</param> /// <returns></returns> /// <exception cref="Exception">ModbusServer Hata: Yanlış tanımlanan adres veya Function Code bulundu</exception> private List <ModbusAnalogSignal> ReadAnalogSignalsValuesFromModbusDevice(ModbusTCPDevice _device, int _numberOfFirstSignal, int _totalSignalCount) { List <AnalogSignal> _valueChangedAnalogSignals = new List <AnalogSignal>(); ModbusAnalogSignal _firstSignal = _device.AnalogSignals[_numberOfFirstSignal]; ushort[] words = { }; ushort wordCount = TotalWordCount(_device.AnalogSignals, _numberOfFirstSignal, _totalSignalCount); // Function Code'un 3 ve ya 4 olduğunda yapılan işlemler if (_firstSignal.FunctionCode == 3 || _firstSignal.FunctionCode == 4) { try { switch (_firstSignal.FunctionCode) { case 3: words = master.ReadHoldingRegisters(_device.SlaveID, _firstSignal.Address, wordCount); break; case 4: words = master.ReadInputRegisters(_device.SlaveID, _firstSignal.Address, wordCount); break; default: break; } // Okunan degerler ile eski degerler karsılastırılıyor. Sinyalin degeri değişmiş ise sinyal OnBinarySignalsValueCanged // eventine gonderilmek üzere bufferValueChangedSignals listesine ekleniyor. ushort currentWordNumber = 0; for (int k = 0; k < _totalSignalCount; k++) { int currentSignalNo = _numberOfFirstSignal + k; switch (_device.AnalogSignals[currentSignalNo].WordCount) { // Sinyal 16 bitlik bir analog sinyal ise; case 1: if (_device.AnalogSignals[currentSignalNo].CurrentValue != words[currentWordNumber]) { _device.AnalogSignals[currentSignalNo].CurrentValue = words[currentWordNumber]; _device.AnalogSignals[currentSignalNo].TimeTag = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); _valueChangedAnalogSignals.Add(_device.AnalogSignals[currentSignalNo]); } currentWordNumber++; break; // Sinyal 32 bitlik bir analog sinyal ise; case 2: UInt32 _valueFromDevice = Convert.ToUInt32(words[currentWordNumber]) + Convert.ToUInt32(words[currentWordNumber + 1]) * 65536; if (_device.AnalogSignals[currentSignalNo].CurrentValue != _valueFromDevice) { _device.AnalogSignals[currentSignalNo].CurrentValue = _valueFromDevice; _device.AnalogSignals[currentSignalNo].TimeTag = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); _valueChangedAnalogSignals.Add(_device.AnalogSignals[currentSignalNo]); } currentWordNumber += 2; break; default: Log.Instance.Error("ModbusTCPMaster Hata: Sinyal içerisinde beklenmedik word sayısı"); break; } } } catch (Exception e) { if (e.Source.Equals("System")) { // System tarafından gönderilen exception mesajı sinyal okuyamama ile ilgili bir exception değilse bu exceptionu üst methoda gönderir if (e.HResult != -2146232800) { throw e; } } // if (_device.Connected) { Log.Instance.Error("{0}: {1}-{2} adlı device haberleşme hatası => {3} ", this.GetType().Name, _device.ID, _device.Name, e.Message); _device.Connected = false; OnDeviceConnectionStateChanged(_device); throw e; } } } // Function Code tanımsız oldugunda yaplan işlemler else { Log.Instance.Error("{0} Hata: Yanlış tanımlanan adres veya geçersiz function Code bulundu", this.GetType().Name); } // Okuma işlemi bittiğinde bufferValueChangedSignals listesine sinyal eklenmişse event çağrılır. if (_valueChangedAnalogSignals.Count > 0) { OnAnyAnalogSignalValueChanged(_valueChangedAnalogSignals); } return(_device.AnalogSignals); }