АСУТП по-домашнему

Вкусная АСУ на малине, секреты приготовления

#1 2017-03-02 17:31:17

Puhov
Administrator
Зарегистрирован: 2016-09-20

Работа по протоколу Modbus

Протокол Modbus давно и прочно обосновался в сфере автоматизации, позволяя находить недорогие и надёжные решения построения сетей распределённого ввода-вывода. Подключить к ПЛК датчик или исполнительный механизм, удалённый на десятки и сотни метров - не проблема при огромном ассортименте на рынке modbus-совместимых устройств. Поэтому modbus поддержан в TargetPI в полном объёме.

Как известно, устройства в сети modbus работают в режиме запрос-ответ. Запрашивающее устройство называется ведущим или мастером. Устройство, отвечающее на запрос мастера называется подчинённым.
TargetPI поддерживает одновременную работу как в роли ведущего, так и в роли подчинённого. Режим ведомого поддержан только по протоколу Modbus-TCP, режим мастера возможен по всем протоколам Modbus (RTU/ASCII/TCP).
Режим ведомого допускает множественные подключения, т.е. количество одновременно подключенных мастеров не ограничено.

Ведомый

В этой роли ПЛК отвечает на запросы чтения и записи регистров. Регистрами являются 1-битовые (Discrete input и Coil) или 16-разрядные (Input и Holding Registers) переменные, которые привязываются к переменным ISaGRAF через механизм назначения сетевых адресов.

  • Переменные ISaGRAF булевского типа привязываются к 1-битовым регистрам modbus. Так, если некоторой переменной bool1 присвоить в словаре сетевой адрес 1, то со стороны modbus она будет доступна как 1-битовый регистр с адресом 1, причем доступ к ней возможен как к Coil так и к Discrete Input (т.е. в данном случае команда чтения DiscreteInput 1 и команды чтения/записи Coil 1 будут обращаться к одной и той же переменной bool1 ).

  • 32-битные переменные типа ANA и REAL привязываются к 16-разрядным регистрам modbus. В виду того, что разрядность не совпадает, каждая такая переменная отображается на два регистра. Поэтому в словаре ISaGRAF таким переменным следует присваивать только четные адреса (начиная с адреса 2, т.к. адрес 0 отключает переменую от modbus). Таким образом, если некоторой переменной ana1 присвоен адрес 2, то она будет доступна как регистры с адресами 2(мл.16 бит) и 3(ст.16 бит), причем доступ к ней возможен как к регистрам типа Input, так и к регистрам типа Holding. Вышесказанное справедливо и для переменных типа REAL.

В демонстрационном проекте rpi_demo(программа mbtcp) сетевые адреса присвоены булевским переменным bool00...bool09 (адреса 101H...10AH) и аналоговым переменным int00...int09(адреса 2...18). Этого достаточно для включения режима Ведомый.

Мастер

Роль ведущего поддержана набором функциональных блоков. Наример, в rpi_demo ф.блок mbRdRiTc читает регистры подчинённого устройства с адресами 2...18, причём в роли подчинённого выступает сам проект rpi_demo. Таким образом, ф.блок mbRdRiTc считывает  по протоколу modbus-TCP собственные внутренние переменные проекта ana0...ana9  (что с практической точки зрения бесполезно, но вполне показательно).

Raspberry PI не имеет встроенного интерфейса rs485 и для работы по последовательным линиям требуется внешний адаптер  Вполне подходящим решением может быть такое устройство:
адаптер usb-rs485

Не в сети

Быстрый ответ

Введите сообщение и нажмите «Отправить»

Подвал раздела