Перейти к содержимому
Черновик: материал сгенерирован и ещё не вычитан.

Подключение по Modbus

Прибор работает по Modbus в двух ролях:

  • Мастер — сам опрашивает подключённые устройства и складывает значения регистров в теги. Настраивается в разделе настроек, отдельный алгоритм не нужен.
  • Сервер (slave) — отдаёт свои данные стороннему клиенту: ПЛК, SCADA, OPC-серверу. Реализуется алгоритмами EasyLogic — по последовательной линии или по TCP поверх Wi-Fi.

Устройства подключаются к RS-485 или к одному из портов RS-232. При подключении RS-485-устройств к порту RS-232 нужен внешний преобразователь интерфейсов. Контакт GND прибора соединяется с «минусом» подключаемого устройства.

Типовая схема подключения устройств Modbus

Задайте тип периферии, допускающий Modbus:

RS485FN 8 — Modbus
RS485FN 9 — ДУТ и Modbus

Для RS-232 тип периферии — «Нет». Полный перечень значений RS485FN — в статье «Датчики уровня топлива».

Все устройства на одной шине должны быть настроены единообразно: 8 бит данных, одинаковые скорость, стоповые биты и контроль чётности, режим передачи RTU, адреса из диапазона 1…247.

Про сам порт RS-485 — распиновку, скорости, совместное использование — читайте в статье «Последовательные порты».

⚙ Открыть настройки цифровых портов

В разделе настроек откройте Modbus и нажмите «+»«Добавить устройство». Поддерживается до 10 устройств.

ПолеДиапазонКоманда
ПортRS-232[0], RS-232[1], RS-485PORT=
Адрес устройства1…247ADDRESS=
РежимRTU / ASCIIMODE=
Скоростьдо 921600 бодSPEED=
Биты данных5…8DATABITS=
Стоп-биты1 или 2STOPBITS=
Чётностьнет / нечётная / чётнаяPARITY=
Таймаут ответа10…65535 мсRES_TIMEOUT=
Период опроса0…5000 мс, 0 = отключёнINTER_REQ_DELAY=

Период опроса — минимальный интервал между стартами запросов к этому устройству. Допустимый диапазон — 0…5000 мс. Ноль означает «без задержки»: прибор опрашивает устройство так часто, как позволяет шина.

Не задавайте период опроса больше 5000 мс. Поле ввода сейчас принимает значения до 60000 мс, но прибор такие настройки не примет — устройство останется с прежним периодом.

⚙ Открыть настройки Modbus

Из терминала то же самое делается командой:

MDEV<n> PORT=,ADDRESS=,MODE=,SPEED=,DATABITS=,STOPBITS=,PARITY=,RES_TIMEOUT=,INTER_REQ_DELAY=

где <n> — номер слота 0…9. MDEV<n> без параметров возвращает текущие настройки. Адрес 0 удаляет устройство — вместе с ним удаляются и все привязанные к нему регистры.

Список настроенных устройств: MDEVLIST — отвечает строками вида <порт>,<адрес>,<битовая маска регистров>, разделёнными ;.

На все устройства вместе доступно 64 регистра. Регистр описывается адресом, типом и способом интерпретации данных:

ПолеЗначенияКоманда
Адрес регистраREGADDR=
Тип регистраDO (дискретный выход), DI (дискретный вход), AO (аналоговый выход), AI (аналоговый вход)REGTYPE=
Тип данныхбит, int8, int16, int32, float32DATATYPE=
Знаковый0 / 1SIGNED=
Порядок байтов0 / 1END=
Перестановка слов0 / 1SWAP=
Тег0 — не назначен, иначе 1…64TAGNUM=
Комментарийдо 10 символовCOMMENT=

Команда:

MDEV<n>R<m> REGADDR=,REGTYPE=,DATATYPE=,SIGNED=,END=,SWAP=,TAGNUM=,COMMENT=

<m> — номер слота регистра 0…63. Регистр привязывается к устройству тем, в контексте какого MDEV<n> он задан.

Чтобы значения уходили на сервер, отметьте назначенные теги Modbus в основном пакете.

⚙ Открыть настройки протокола

Состояние устройства:

MDEV<n>STATUS
MDEV0STATUS:STATE=0,REQUESTS=1024,ERRORS=3;
STATEЗначение
0Всё в порядке
1Есть ошибки связи либо не созданы регистры
2Устройство не отвечает ни на один запрос

Значения регистров устройства:

MDEV<n>STATE

Ответ — список пар <значение>,<код результата> по всем 64 слотам, разделённых ;; заполнены только слоты, привязанные к этому устройству. Значения всех типов, кроме int32, передаются умноженными на 100.

Коды результата совпадают с кодами исключений Modbus (см. ниже), плюс внутренние: 30 — внутренняя ошибка, 31 — ошибка CRC, 32 — адрес или код функции в ответе не совпадают с запросом.

Кнопка «Режим реальных данных» переводит выбранное устройство в учащённый опрос, чтобы значения регистров в таблице обновлялись на глазах. Это же делает команда:

MREALTIMEMODE <0|1>,<номер устройства>

Режим включается для одного устройства: включение на новом слоте автоматически выключает предыдущий.

Кнопки «Изм.» / «Отпр.» в таблице регистров записывают значение в устройство. Команда:

SETMREG <слот устройства>,<слот регистра>,<значение>

Значение — вещественное число; прибор передаёт его умноженным на 100. Команда ничего не отвечает: результат виден по обновлённому значению регистра.

SENDMCUSTOM PORT=,SPEED=,DATABITS=,STOPBITS=,PARITY=,TIMEOUT=,REQ=

Отправляет в порт готовый Modbus-кадр (до 100 символов в REQ=) и возвращает ответ устройства либо SLAVE ERROR. Скорость — 1200…921600, биты данных — 7 или 8. Полезно, когда нужно проверить устройство, не заводя под него слот.

⚙ Открыть терминал команд

Прибор как Modbus-сервер по последовательной линии

Заголовок раздела «Прибор как Modbus-сервер по последовательной линии»

Алгоритм отвечает на запросы клиента, подключённого к RS-232[0], RS-232[1] или RS-485, отдавая регистры прибора.

  • Формат передачи — единый для всей сети Modbus: 8 бит данных, по умолчанию 19200 бит/с, 1 стоповый бит, с контролем чётности;
  • режим передачи — RTU;
  • адрес сервера (прибора) — из диапазона 1…247.
  1. Тип периферии: для RS-485 — «Отключён», для RS-232 — «Нет». Примените настройки.
  2. Загрузите алгоритм: SCRIPT galileosky/modbusSerialServer (либо файл modbusSerialServer.bin в разделе EasyLogic).
  3. Перезагрузите прибор.

Настройки по умолчанию: порт RS-232[0], 19200 бит/с, 1 стоповый бит, контроль чётности; адрес сервера 1, таймаут 1000 мс, межкадровый интервал 50 мс.

На Galileosky 10 и на 7x с прошивки 41 изменённые настройки сохраняются в энергонезависимой памяти и восстанавливаются после перезагрузки. На более ранних прошивках 7x они живут только до перезагрузки — там алгоритм ждёт конфигурационные команды 5 секунд после старта, и постоянные настройки приходится подавать вспомогательным алгоритмом.

КомандаНазначение
MBSS 1,<m>Режим диагностики: 0 — обычный, 1 — расширенный. Ответ a.diag=<m>
MBSS 2Текущие параметры порта: pn=,br=,sb=,pa=
MBSS 3,<n>,<b>,<s>,<p>Задать параметры порта
MBSS 4Текущие настройки сервера: ad=,to=,if=
MBSS 5,<a>,<t>,<i>Задать настройки сервера
MBSS 6Состояние: rs= результат последней обработки, cd= код исключения, tm= Unix-время

Параметры порта: n — 0 (RS-232[0], по умолчанию), 1 (RS-232[1]), 2 (RS-485); b — скорость, по умолчанию 19200; s — 1 или 2 стоповых бита; p — чётность: 0 без проверки, 1 контроль нечётности, 2 контроль чётности (по умолчанию).

Настройки сервера: a — адрес 1…247 (по умолчанию 1); t — таймаут чтения запроса клиента, мс (по умолчанию 1000); i — межкадровый интервал, мс (по умолчанию 50).

Неверный номер команды даёт ответ cmd?.

Межкадровый интервал по умолчанию выше расчётного по стандарту — так приём стабилен на скорости 19200. Значение i=0 включает расчёт по стандарту, но тогда стабильный приём достигается только на 4800 бит/с и ниже. Межсимвольный интервал рассчитывается автоматически.

Расширенный режим диагностики нагружает прибор — выключайте его сразу после поиска неисправности.

Алгоритм обслуживает клиентов Modbus TCP по Wi-Fi и одновременно работает шлюзом Modbus TCP → Modbus RTU: запросы с Unit ID 0…247 он перекладывает в последовательный порт, а ответы возвращает клиенту.

Доступно на 7x Wi-Fi Hub с прошивки 44.4 и на Galileosky 10.

Одновременно обслуживается до 3 клиентов; при подключении четвёртого самое старое соединение разрывается.

Топология подключения по Modbus TCP

  • IP-адрес прибора, полученный по DHCP;
  • Unit ID самого прибора — 255;
  • Unit ID устройств за шлюзом — 1…247.

Прибор и клиент должны быть в одной сети Wi-Fi. В настройках DHCP точки доступа желательно закрепить за MAC-адресом прибора статический IP; MAC виден в разделе «Устройство».

  1. Настройте Wi-Fi прибора в режиме клиента.
  2. Тип периферии порта, к которому подключены устройства за шлюзом: для RS-485 — «Фотокамера Galileosky и ДУТ», «Только обработчики RS485 в EasyLogic», «Обработчик фотокамеры в EasyLogic и ДУТ», «Modbus» или «ДУТ и Modbus»; для RS-232 — «Нет».
  3. Загрузите алгоритм: SCRIPT galileosky/modbustcpserver (либо файл modbustcpserver.bin в разделе EasyLogic).
  4. Перезагрузите прибор.

Настройки шлюза по умолчанию: RS-485, 19200 бит/с, 1 стоповый бит, контроль чётности, таймаут 1000 мс, межкадровый интервал 50 мс. Изменённые настройки сохраняются в энергонезависимой памяти.

КомандаНазначение
MBTS 1,<m>Режим диагностики: 0 — обычный, 1 — расширенный
MBTS 2Текущий TCP-порт: tport=
MBTS 3,<p>Задать TCP-порт (по умолчанию 502)
MBTS 4Количество подключённых клиентов: cl=
MBTS 5Настройки шлюза: gw=,pn=,br=,sb=,pa=,to=,if=
MBTS 6,<gw>,<pn>,<br>,<sb>,<pa>,<to>,<if>Задать настройки шлюза
MBTS 7Идёт ли обмен по последовательной линии: ex= 0 или 1

gw — активация шлюза: 0 выключен, 1 включён (по умолчанию). При выключенном шлюзе все запросы независимо от Unit ID считаются адресованными самому прибору и в последовательную линию не уходят.

to — время ожидания начала ответа устройства за шлюзом. Остальные параметры — как у MBSS.

КодЗначение
1Успешно
2Получен запрос, адресованный другому устройству
−1Истекло время ожидания ответа
−2Ошибка передачи данных
−3Ошибка входных данных
−4Получен код исключения
КодЗначение
1Код функции не может быть обработан
2Адрес регистра недоступен
3Недопустимое значение или количество регистров
4Невосстанавливаемая ошибка устройства — как правило, нужна его перезагрузка
5Устройство приняло запрос и обрабатывает его — возможно, стоит увеличить таймаут
6Устройство занято, повторите запрос позже
7Ошибка программирования
8Ошибка расширенной памяти устройства
10Шлюз: путь недоступен, не настроен или перегружен
11Шлюз: нет ответа от целевого устройства

Сообщения видны в разделе «Диагностика» при включённой опции «Диагностика алгоритмов и скриптов».

Обычный режим:

  • p.Init! — порт инициализирован (MBSS);
  • p.Init? — ошибка инициализации порта: неверные параметры или не хватило памяти. Если параметры верные, перезагрузите прибор. На устаревших прошивках сообщение повторяется постоянно и означает, что прошивку нужно обновить;
  • mbtsrvinit — инициализация TCP-сервера (MBTS);
  • res=<n>,exc=<n> — результат операции и код исключения;
  • gw res=<n>,exc=<n> — то же для обмена с устройствами за шлюзом;
  • w.p?k=<n> — ошибка записи настроек, возможно неисправна энергонезависимая память.

Расширенный режим печатает ход обработки каждого запроса: mbProcRdI (чтение дискретных входов), mbProcRc (чтение дискретных выходов и внутренних битов), mbProcRr (чтение аналоговых регистров), mb r<n>f<n> (чтение количества значений со стартового адреса), mbProcW1c и mbProcWnC (запись одного и нескольких бит), mb wc<n>=<n>, mb w<n>f<n>:, mbsSh/mbtSh (вызов обработчика), mbsSsE/mbtSsE (отправка исключения), mbsSsR/mbtSsR (отправка ответа). Для TCP дополнительно: mbt_sGr (получение запроса), con=<n>,h=<n> (обмен с клиентом, h >= 0 — соединение установлено), no clt, rcv <n> bts, sent <n> bts, mbt_sGrP (обработка запроса шлюзу), mbsCcr (отправка запроса устройству за шлюзом), mbs_sD (отправка данных в порт).

⚙ Открыть запись лога

Когда прибор работает Modbus-сервером, клиент читает его данные по фиксированной карте регистров: координаты, напряжение питания, состояние входов и выходов, показания подключённой периферии. Карта одинакова для последовательного и для TCP-сервера.

Полный перечень регистров — в отдельном справочнике.


См. также: Датчики уровня топлива · Датчики температуры и влажности · Алгоритмы идентификации · Последовательные порты RS-232 и RS-485