M340 Modbus RTU


1. Аппаратная реализация последовательных интерфейсов в М340.

Стандартные последовательные интерфейсы (serial links) реализованы в М340 интегрированными каналами в некоторых CPU и каналами модулей NOM.
Интегрированные последовательные каналы CPU реализуют физическое подключение RJ45, который совмещает два интерфейса RS-232 и RS-485, которые тем не менее не могут работать одновременно.
На рисунке 1 показана распиновка разъема. Как видно, интерфейс RS-232-C реализован частично, однако достаточно для нуль-модемного соединения и для работы с большинством современных модемов. Кроме сигналов RS-232 и RS-485 порт также может обеспечить питанием 5В устройство, подключенное к порту (например, некоторые панели XBT Magelis).

Подключение к RS-485 осуществляется через контакты 4 (D1+) и 5 (D0-). 


Встроенные в CPU порты RS232 и RS485 гальванически не изолированы. По этому, максимальная длина линии по RS485 порядка 30 м (в связи с возможными разными потенциалами земель). Для использования длинных линий связи (порядка километра) необходимо использовать гальванически развязанные повторители, например TWD XCAISO.
На рисунке 2 показана схема реализации соединения по RS485. При реализации Modbus Master на М340 (конфигурируется в UNITY PRO), на нем автоматически реализуется защитное смещение линии (поляризация), путем подключения источника питания 5В на линию через резисторы Rp (так называемые PullUp и PullDownd). Терминаторы линии реализовываются сторонними средствами или через встроенные в аксессуары подключения (ответвительные коробки, Modbus-hubs, и т.д.).

При подключении к RS485 разрешаются ответвления от общей линии связи (до 15 м). Таким образом наиболее недорогой вариант подключения – использования UTP/FTP для ответвления, с одной стороны обжав для RJ-45, с другой – подключив к клеммнику-ответвителю.




Ни рисунке 3 показана распиновка портов модуля NOM. Верхний разъем (port 0) обеспечивает полноценное подключение к RS232, port1 и port2 к гальванически изолированному RS485. Тем не менее, модуль рассчитан на одновременную работу только 2-х каналов: 0-й канал для работы с port0 или port1, и 1-й канал – для работы с port2.



В таблице 1 показана суммарная информация по возможностям последовательных каналов М340. Они поддерживают несколько протоколов:
Modbus Serial (RTU/ASCII) как в режиме Master так и Slave;
безпротокольный символьный режим передачи (Character Mode), при котором всю обработку символьной последовательности берет на себя пользовательская программа.





2. М340 как Modbus Server (Modbus Slave) .

 
Об основах Moвbus можно прочитать тут: https://sites.google.com/site/fieldbusbook/seti/modbus/modbuseducation
CPU M340 имеют встроенный Modbus Server: обработка запросов проводится автоматически на уровне операционной системы. Это означает, что достаточно сконфигурировать канал на режим Modbus Slave, и Modbus Master сможет считывать и записывать данные с/в М340, используя стандартные Modbus-запросы.
В таблице 2 указан перечень Modbus функций, поддерживаемых М340, и данные, к которым осуществляется доступ (Modbus Mapping). Как видно вся регистровая область ложится (отображается, Mapping) на %MW а битовая на %M. Таким образом, считывая функцией 03 (Read Holding Registers) или 04 (Read Input Registers) 6-й регистр (начиная с 0) вы обращаетесь все равно к %MW6.


Конфигурирование порта М340 производится в проекте UNITY PRO. На рисунке 4 показано окно настройки встроенного последовательного порта CPU. Для такого совмещенного порта выбирается интерфейс (RS232 или RS485) и остальные настройки физической линии. Для режима Modbus Slave выбирается соответствующая опция Type=Slave, и номер - Slave Number.



 3. М340 как Modbus Client (Modbus Master) .

3.1.Общие принципы. CPU M340 поддерживают на уровне операционной системы формирование клиентских функций Modbus: 1, 2, 3, 4, 15 и 16. Их инициация проводится с приложения пользователя функциями READ_VAR и WRITE_VAR (см. таблицу 3). То есть, например, если нужно считать Input Registers (Modbus функция 4) необходимо в программе контроллера вызвать функцию READ_VAR с параметром OBJ=‘%IW’.


 Остальные клиентские функции Modbus формируются и обрабатываются программным путем, с использованием функции DATA_EXCH. В этом случае операционная система формирует кадр на основании APDU, сформированного функцией DATA_EXCH, добавляя туда:
для Modbus RTU/ASCII: № Slave, CRC/LRC;
для Modbus/TCP: MBAP заголовок. 



Пример реализации формирования и обработки запроса Modbus функции 23 (1716 - Read/Write Multiple Registers) дан по ссылке
https://sites.google.com/site/fieldbusbook/seti/modbus/funkcia17hex-ctenie-zapis

Ниже рассмотрим примеры реализации Modbus Client с использованием READ_VAR и WRITE_VAR.

3.2.Постановка задачи. На рисунке 5 показана постановка задачи.




 3.3.Конфигурирование порта. На рисунке 6 показаны настройки встроенного порта M340 Master:

- Answer Delay – время ожидания ответа от Slave
- Number of retries – количество повторов, если ответ не приходит


 3.4.Функции и коммуникационные параметры. Для реализации данной задачи используются 3 коммуникационные функции:
- ADDM – преобразует символьную строку адреса в массив, понятный для коммуникационных функций;
- READ_VAR – мультипротокольная функция для чтения;
- WRITE_VAR – мультипротокольная функция для записи; 
Большинство коммуникационных функций в качестве аргумента принимают массив Management Parameters (GEST) из 4-х INT, с помощью которого управляют функцией и контролируют ее выполнение:


Activity Bit (0-й бит 0-го слова) – выставляется в 1 при старте функции, и возвращается в 0 при окончании обработки. Следующий вызов функции следует проводить только после окончания предыдущей обработки. Второе слово (1-е с нуля) предназначено для проверки результата обработки. При удачной обработке там будут нули.
Третье слово (2-е начиная с 0) предназначено для определения таймаута (в сотнях миллисекунд). Для Modbus RTU указывать не принципиально, так как тайм-аут контролируется CPU и настраивается в порте.
4-е слово возвращает количество полученных байт.

3.5.Программная реализация.
Первоначально создадим 6 переменных (рисунок 7)



Часть программы для реализации функции чтения показана на рисунке 8. Для запуска функции READ_VAR используется условие по «И» команды read_strt=1 и нулевого бита активности (rdpara[0].0=0). Всегда используйте бит активности в условии запуска, это предотвратит «затопление» передатчика. Сразу же после вызова функции команда запуска обнуляется (для упрощения теста программы).

Функция ADDM преобразует адрес ‘0.0.0.2’ (читай 0-е шасси, 0-й модуль (CPU), 0-й канал (встроенный последовательный порт CPU) и 2-й номер Slave) в нужный массив, который подается на вход ADR коммуникационной функции.

Тип OBJ указан ‘%IW’, это означает что для чтения будет использоваться Modbus функция 04 (Read Input Registers). Если бы был указан ‘%MW’, то для чтения использовалась бы функция 03 (Read Holding Registers). Следует отметить, что M340 как Slave на оба типа запроса одинаково отдаст значение переменных %MW (см. таблицу 2).

Начальный регистр NUM=100, количество NB=10. Прочитанные значения регистров будут помещены в DATARD. Этот массив может быть больше или равно количества принимаемых байт. Массив rdpara используется для контроля за выполнением функции. 


Часть программы для реализации функции записи показана на рисунке 9. Все параметры и принцип вызова аналогично как для функции чтения, отличие только в том, что значения для записи помещаются в массив DATAWR.

 Конфигурация и отладка в Unity Pro на канале YouTube:

Обсуждение на форуме Шнейдер Электрик Украина








 
 





























Comments