Подмодуль ModbusRTUMaster. Добавление и конфигурирование ModbusRequest. ======================================================================= В данном уроке рассмотрим подключение ModbusRTUMaster. Как говорилось ранее, ПЛК BRIC имеет возможность обращаться к slave-устройствам в качестве мастера. Для реализации нам потребуется программа Modbus Slave. Добавим подмодуль ModbusRTUMaster. Рассмотрим подробнее элементы подмодуля. .. csv-table:: Элементы ModbusRTUMaster :header: "Элемент","Описание" :widths: 20, 50 :align: center "Serial_Port", "Выбор последовательного порта: * RS_232_UART * RS_485_1_UART * RS_485_2_UART * RS_485_IMMO_UART" "Baud_Rate", "Выбор скорости передачи: * 1200 * 2400 * 4800 * 9600 * 14400 * 19200 * 28800 * 38400 * 56000 * 57600 * 76800 * 115200 * DEFAULT_BAUD_RATE" "Data_bits", "Выбор количества байт данных: * 7 * 8 * 9" "Parity", "Выбор паритета: * even (четный) * odd (нечетный) * none (без проверки)" "Stop_Bits", "Выбор количества стоп-битов: * 1 * 2" "Invocation_Rate_in_ms", "Скорость вызова, мс" .. seealso:: Подробнее можно узнать по ссылке_ .. _ссылке: https://bric-beremiz.readthedocs.io/ru/latest/attachment_g.html В нашем уроке мы выберем настройки, представленные на риcунке ниже. .. figure:: img/7.png :align: center :width: 600 То есть, порт мы выбираем RS_485_1, скорость передачи данных - 115200, количество битов данных - 8, без проверки на четность/нечетность, с количеством стоповых битов - 1. Далее мы добавим субмодуль ModbusRequest. .. figure:: img/8.png :align: center :width: 600 Рассмотрим подробнее элементы ModbusRequest. .. csv-table:: Элементы ModbusRequest :header: "Элемент","Описание" :widths: 20, 50 :align: center "Function", "Выбор функции: * ReadCoils — Функция используется для получения состояний определенного количества реле, начиная с указанного в запросе. Состояние одного реле при этом передается одним битом. Если бит установлен в 1 – реле включено, если 0 – реле отключено. * ReadInputDiscretes — Функция используется для получения состояний определенного количества дискретных входов, начиная с указанного в запросе. Состояние одного входа при этом передается одним битом. Если бит установлен в 1 – вход замкнут, если 0 – вход разомкнут. * ReadHoldingRegisters — Функция используется для чтения указанного количества 2–Байтных регистров. * ReadInputRegisters — Функция используется для получения состояний определенного количества 2–Байтных регистров, хранящих состояние дискретных входов, начиная с указанного в запросе. Значение одного регистра передается двумя байтами. * WriteSingleСoil — Функция используется для включения/отключения одного реле. Требуемое состояние реле передается двумя байтами. * WriteSingleRegister — Функция выполняет запись нового значения в указанный регистр. * WriteMultipleCoils — Функция используется для групповой установки состояний определенного количества реле, начиная с указанного. Состояние одного реле при этом передается одним битом. Если бит установлен в 0 – реле отключено, если 1 – реле включено. * WriteMultipleRegisters — Функция выполняет запись новых значений в указанные регистры" "Slave_Modbus_address", "Выбор адреса slave-устройства (0-255)" "Regs_number", "Выбор количества регистров (1-1600)" "Start_Address", "Выбор начального адреса (0 - 65535)" "Timeout_in_ms", "Выбор времени, необходимое для ответа slave–устройству, мс" Для нашего урока мы определим настройки, представленные ниже. .. figure:: img/gif4.gif :align: center :width: 600 Будет произведено чтение 2-байтных регистров начиная с адреса 5000 slave–устройства по Modbus-адресу 10. Напишем программу на языке FBD. Определим глобальную переменную *mdb_read* формата *WORD* и локальную переменную *local_word*. Данная программа будет фиктивной, так как основную функцию на себя возьмет ModbusRTUMaster. .. figure:: img/9.png :align: center :width: 600 Заходим в глобальные настройки проекта. Можно заметить, что после добавления подмодуля ModbusRTUMaster автоматически добавились его регистры. В разделе "Documentation" можно увидеть параметры регистров. .. figure:: img/10.png :align: center :width: 600 .. note:: Если в разделе "Documentation" прописать "noweb" - данный регистр не будет отображаться в WEB-странице контроллера Данные регистры - это ничто иное как параметры ModbusRequest. Если оставить поля пустыми в разделе "Documentation", то есть возможность менять параметры ModbusRequest через WEB-страницу контроллера. Мы с вами так и поступим. .. csv-table:: :header: "Регистр","Описание" :widths: 20, 50 :align: center "modbus_request_MF_function", "Выбор функции" "modbus_request_MF_slave_address", "Выбор адреса slave-устройства" "modbus_request_MF_regs_number", "Выбор количества регистров" "modbus_request_MF_start_address", "Выбор начального адреса" "modbus_request_MF_enable", "Проверка состояния ModbusRequest" "modbus_request_MF_error_counter", "Счетчик количества ошибок прием-передачи данных" "modbus_request_MF_success_counter", "Счетчик количества удачных прием-передачи данных" Далее мы назначим Modbus-адрес для переменной *mdb_read*. Для этого нажимаем по полю "Location" и вводим значение %IW1.0.0.0. .. tip:: Для того, чтобы не ошибиться с адресом есть возможность выбора путем нажатия на три точки в "Location". .. figure:: img/gif5.gif :align: center :width: 600 Наша программа готова, выполняем компилляцию и загружаем в ПЛК BRIC. Выполняем подключение преобразователя интерфейсов USB-HART/RS-485. Также запустим приложение Modbus Slave с настройками, представленными ниже. .. figure:: img/11.png :align: center .. figure:: img/12.png :align: center .. figure:: img/gif8.gif :align: center :width: 600 Далее запускаем автоматическое инкрементирование регистра по адресу 5000. .. figure:: img/gif6.gif :align: center Заходим в WEB-страницу контроллера, открываем вкладку "User" и видим изменение "MDB_READ" в соответствии с инкрементируемой величиной. Также показаны детали ModbusRequest. .. figure:: img/gif7.gif :align: center :width: 600