Exemple #1
0
        public ModbusRTUSettings GetCurrentSettings(string settingsFilePath)
        {
            ModbusRTUSettings currentSettings = null;
            BinaryFormatter   binaryFormatter = new BinaryFormatter();

            try
            {
                FileStream fileStream = new FileStream(settingsFilePath, FileMode.Open);
                currentSettings = (ModbusRTUSettings)binaryFormatter.Deserialize(fileStream); // получаем текущие настройки подключения
                fileStream.Dispose();
            }
            catch (FileNotFoundException exception)
            {
                SettingsFileNotFoundError?.Invoke($"В директории \"Settings\" отсутствует файл настроек {ModbusRTUSettingsFileName} \n\n Подробнее о возникшей исключительной ситуации: \n\n {exception.Message}");
            }
            catch (System.Runtime.Serialization.SerializationException exception)
            {
                SettingsFileReadingError?.Invoke($"Возникла ошибка при десериализации объекта настроек программы из файла настроек {ModbusRTUSettingsFileName} \n\n Подробнее о возникшей исключительной ситуации: \n\n {exception.Message}");
            }
            catch (Exception exception)
            {
                SettingsFileReadingError?.Invoke($"Возникла ошибка при считывании настроек программы из файла настроек {ModbusRTUSettingsFileName} \n\n Подробнее о возникшей исключительной ситуации: \n\n {exception.Message}");
            }

            return(currentSettings);
        }
Exemple #2
0
        private void SettingsButtonSave_Click(object sender, RoutedEventArgs e)
        {
            //ПРОВЕРКА НА ПУСТЫЕ ПОЛЯ НАСТРОЕК
            if (portName_ComboBox.Text == "" && pollingInterval_ComboBox.Text == "")
            {
                MessageBox.Show("Вы не выбрали COM-порт и интервал опроса устройства", "Ошибка!");
            }
            if (portName_ComboBox.Text == "" && pollingInterval_ComboBox.Text != "")
            {
                MessageBox.Show("Вы не выбрали COM-порт", "Ошибка!");
            }
            if (pollingInterval_ComboBox.Text == "" && portName_ComboBox.Text != "")
            {
                MessageBox.Show("Вы не выбрали интервал опроса устройства", "Ошибка!");
            }

            //СОХРАНЕНИЕ НАСТРОЕК
            if (portName_ComboBox.Text != "" && pollingInterval_ComboBox.Text != "")
            {
                ModbusRTUSettings newSettings = new ModbusRTUSettings(portName_ComboBox.Text, int.Parse(pollingInterval_ComboBox.Text));
                newSettings.SaveSettings(newSettings, newSettings.ModbusRTUSettingsFilePath);

                SavingSuccess?.Invoke();
                this.Close();
            }
        }
Exemple #3
0
        public void GetCurrentSettings()
        {
            ModbusRTUSettings currentSettings = GetCurrentSettings(this.ModbusRTUSettingsFilePath);

            this.PortName        = currentSettings.PortName;
            this.PollingInterval = currentSettings.PollingInterval;
        }
Exemple #4
0
        // Объявляем событие "не получен ответ от SLAVE-устройства"
        // public event ModbusRTUEventHandler ResponseError;

        /// <summary>
        /// Конструктор класса ModbusRTU
        /// </summary>
        /// <param name="modbusRTUSettings">Экземпляр класса ModbusRTUSettings</param>
        public ModbusRTU(ModbusRTUSettings modbusRTUSettings)
        {
            Modbus_Message = new List <byte>();

            // КОНФИГУРИРОВАНИЕ COM-ПОРТА
            SerialPort              = new SerialPort(modbusRTUSettings.PortName, modbusRTUSettings.BaudRate, modbusRTUSettings.Parity, modbusRTUSettings.DataBits, modbusRTUSettings.StopBits);
            SerialPort.Handshake    = modbusRTUSettings.Handshake;       // Аппаратное рукопожатие
            SerialPort.ReadTimeout  = modbusRTUSettings.ReadTimeout;     // Время ожидания ответа устройства на COM-порт
            SerialPort.WriteTimeout = modbusRTUSettings.WriteTimeout;    // Время ожидания записи данных в COM-порт
            SilentInterval          = modbusRTUSettings.SilentInterval;  // Гарантированный интервал тишины после отправки данных устройству после которого устройство начинает обработку запроса
            ResponseTimeout         = modbusRTUSettings.ResponseTimeout; // Интервал после которого начинается считывание поступивших данных на COM порт или вызывается исключение TimeoutException
        }
Exemple #5
0
        public SettingsWindow()
        {
            InitializeComponent();
            Loaded += SettingsWindow_Loaded;

            CurrentModbusRTUSettings = new ModbusRTUSettings();

            CurrentModbusRTUSettings.SettingsFileNotFoundError += this.ShowSettingsError; // Подписываемся на событие "не найден файл настроек"
            CurrentModbusRTUSettings.SettingsFileReadingError  += this.ShowSettingsError; // Подписываемся на событие "ошибка при чтении файла настроек"
            this.SavingSuccess += this.ShowSettingsSavingSuccess;                         // Подписываемся на событие "успешное сохранение настроек"

            CurrentModbusRTUSettings.GetCurrentSettings();
        }
Exemple #6
0
        private void SettingsButtonSave_Click(object sender, RoutedEventArgs e)
        {
            //ПРОВЕРКА НА ПУСТЫЕ ПОЛЯ НАСТРОЕК
            if (portName_ComboBox.Text == "" || pollingInterval_ComboBox.Text == "" || slaveAddress_ComboBox.Text == "")
            {
                MessageBox.Show("Заполните все поля настроек", "Ошибка!");
            }

            //СОХРАНЕНИЕ НАСТРОЕК
            if (portName_ComboBox.Text != "" && pollingInterval_ComboBox.Text != "" && slaveAddress_ComboBox.Text != "")
            {
                ModbusRTUSettings newSettings = new ModbusRTUSettings(portName_ComboBox.Text, int.Parse(pollingInterval_ComboBox.Text), (byte)int.Parse(slaveAddress_ComboBox.Text));
                newSettings.SaveSettings(newSettings, newSettings.ModbusRTUSettingsFilePath);

                SavingSuccess?.Invoke();
                this.Close();
            }
        }
Exemple #7
0
        public void SaveSettings(ModbusRTUSettings settings, string settingsFilePath)
        {
            BinaryFormatter binaryFormatter = new BinaryFormatter();

            try
            {
                FileStream fileStream = new FileStream(settingsFilePath, FileMode.OpenOrCreate);
                binaryFormatter.Serialize(fileStream, settings); // сериализация объекта
                fileStream.Dispose();
            }
            catch (System.Runtime.Serialization.SerializationException exception)
            {
                SettingsFileReadingError?.Invoke($"Возникла ошибка при сериализации объекта настроек программы в файл настроек {ModbusRTUSettingsFileName} \n\n Подробнее о возникшей исключительной ситуации: \n\n {exception.Message}");
            }
            catch (Exception exception)
            {
                SettingsFileReadingError?.Invoke($"Возникла ошибка при сериализации объекта настроек программы в файл настроек {ModbusRTUSettingsFileName} \n\n Подробнее о возникшей исключительной ситуации: \n\n {exception.Message}");
            }
        }
Exemple #8
0
        private void Start_measurement()
        {
            if (Modbus == null)
            {
                CurrentModbusRTUSettings = new ModbusRTUSettings();                              // Создаем объект настроек
                CurrentModbusRTUSettings.SettingsFileNotFoundError += this.DisplayErrorOccurred; // Подписываемся на обработчик события "не найден файл настроек"
                CurrentModbusRTUSettings.SettingsFileReadingError  += this.DisplayErrorOccurred; // Подписываемся на обработчик события "ошибка при чтении файла настроек"

                CurrentModbusRTUSettings.GetCurrentSettings();                                   // Считываем настройки из файла настроек

                Modbus = new ModbusRTU(CurrentModbusRTUSettings);                                // Создаем объект ModbusRTU

                // Modbus.DeviceNotRespondingError += this.DisplayErrorOccurred; // Подписываемся на обработчик события "Устройство не отвечает"
                Modbus.SerialPortOpeningError += this.DisplayErrorOccurred;            // Подписываемся на обработчик события "Ошибка открытия порта"
                Modbus.RequestSent            += this.DisplayRequestMessageInConsole;  // Подписываемся на обработчик события "Отправлена команда"
                Modbus.ResponseReceived       += this.DisplayResponseMessageInConsole; // Подписываемся на обработчик события "Получен ответ"
                Modbus.CRC_Error  += this.ProcessMissedResult;
                Modbus.SlaveError += this.ProcessMissedResult;
                Modbus.DeviceNotRespondingError += this.ProcessMissedResult;

                // Создаем функцию обратного вызова по таймеру
                Timer = new Timer(new TimerCallback(GetSlaveState), null, 0, CurrentModbusRTUSettings.PollingInterval * 1000);
            }
        }