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); }
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(); } }
public void GetCurrentSettings() { ModbusRTUSettings currentSettings = GetCurrentSettings(this.ModbusRTUSettingsFilePath); this.PortName = currentSettings.PortName; this.PollingInterval = currentSettings.PollingInterval; }
// Объявляем событие "не получен ответ от 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 }
public SettingsWindow() { InitializeComponent(); Loaded += SettingsWindow_Loaded; CurrentModbusRTUSettings = new ModbusRTUSettings(); CurrentModbusRTUSettings.SettingsFileNotFoundError += this.ShowSettingsError; // Подписываемся на событие "не найден файл настроек" CurrentModbusRTUSettings.SettingsFileReadingError += this.ShowSettingsError; // Подписываемся на событие "ошибка при чтении файла настроек" this.SavingSuccess += this.ShowSettingsSavingSuccess; // Подписываемся на событие "успешное сохранение настроек" CurrentModbusRTUSettings.GetCurrentSettings(); }
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(); } }
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}"); } }
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); } }