Работа с Modbus RTU сервером в CoDeSys 3.5

Версия драйвера 3.5.12.40

Для работы сервера Modbus RTU в проект программы контроллера необходимо добавить устройство Mega12NW_mbRTU_server, которое устанавливается в репозиторий устройств с помощью файла Mega12NW_mbRTU_server.devdesc.xml. В настройках соотнесения выбрать Вкл.2 (всегда в задаче цикла шины), для постоянного выполнения программы драйвера.

В драйвере поддерживается работа по следующим типам данных:

  1. Write_Coils
  2. Write_Holding_Registers
  3. Read_Coil_Status
  4. Read_Input_Status
  5. Read_Holding_Registers
  6. Read_Input_Registers

Под каждый тип выделено по 1024 адреса. Для передачи данных из драйвера в программу CoDeSys используются Write_Coils и Write_Holding_Registers. Соответсвенно для передачи данных из CoDeSys в драйвер используются остальные четрые типа.

Для настройки COM-портов необходимо использовать следующие переменные:

  1. COM# Baudrate – скорость порта, бит/c;
  2. COM# Parity – четность, 0 – None 1 – Odd 2 – Even;
  3. COM# Data bits – биты данных;
  4. COM# Stop bits – стоповые биты;
  5. Slave ID – Modbus адрес сервера

Настройки портов по умолчанию:

Baudrate – 115200 бит/c, Parity – 0 (None), Data bits – 8, Stop bits – 1, Slave ID – 3.


Версия драйвера 3.5.12.41

Начиная с версии 3.5.12.41 работа с Modbus RTU сервером осуществляется через драйвер последовательного порта (см. Работа с драйвером последовательного порта в CoDeSys 3.5).

Для работы с Modbus RTU Slave необходимо в проект программы контроллера добавить устройство Mega12NW_Modbus_RTU_Slave, которое устанавливается в репозиторий устройств с помощью файла Mega12NW_Modbus_RTU_Slave.devdesc.xml. В настройках соотнесения выбрать Вкл.2 (всегда в задаче цикла шины) для постоянного выполнения программы драйвера.

Для добавления сервера в проект необходимо в программе объявить переменную типа DWORD как экземпляр элемента массива MODBUS_RTU_SERVER_V3_5_12_41 из библиотеки Mega12NW_ModbusRTU_Server, и привязать её к каналу ModBusRTUSlave во вкладке «Соотнесение входов/выходов» драйвера (Рисунок 3.7.9.2).

Далее необходимо объявить экземпляр функционального блока SET_MODBUS_ADDRESS_OFFSETS с соответствующими входными данными:

Для добавления N регистров в сервер необходимо объявить массив размера N функциональных блоков соответствующего типа (mbRTU_ADD_COIL_STATUS_REG, mbRTU_ADD_INPUT_STATUS_REG, mbRTU_ADD_HOLDING_REG или mbRTU_ADD_INPUT_REG). Во входных данных в slave_index указать индекс сервера.

На рисунке 3.7.9.1 представлен пример объявления Modbus RTU сервера с 1000 регистров каждого типа, с Modbus адресом 15.

Рисунок 3.7.9.1 – Добавление Modbus RTU сервера

Рисунок 3.7.9.2 – Привязка сервера к каналу драйвера

Для того чтобы обратиться к значению регистра, необходимо использовать атрибут value объявленного ФБ (Рисунок 3.7.9.3).

Рисунок 3.7.9.3 – Пример записи в Holding и Input регистры


Версия драйвера 3.5.12.42

Работа с Modbus RTU Slave осуществляется через драйвер последовательного порта (см. п.п. 3.7.8).

Для корректной работы драйвера в проект должна быть добавлена библиотека Mega12NW_drivers v2.0.

Для добавления сервера в проект необходимо во вкладке «Соотнесение входов/выходов» драйвера к каналу ModBusRTUSlave привязать элемент массива MODBUS_RTU_SLAVE из библиотеки Mega12NW_drivers (Рисунок 3.7.9.4, 3.7.9.5).

Рисунок 3.7.9.4 – Привязка переменной через Ассистент ввода

Рисунок 3.7.9.5 – Привязка переменной к каналу драйвера

При конфигурации RTU сервера, на входе slave_index необходимо указать соответствующий индекс массива MODBUS_RTU_SLAVE, который привязан к каналу драйвера (Рисунок 3.7.9.6). В данном примере конфигурация Modbus RTU Slave на 1000 регистров каждого типа со смещением 0.

Рисунок 3.7.9.6 – Конфигурация Modbus RTU Slave