示例#1
0
        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();
        }
示例#4
0
        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;
            }
        }
示例#6
0
        /// <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);
        }