PDA

Просмотр полной версии : Modbus



Андрей_Б.
21.01.2020, 16:08
Добрый день!
Контроллер мзта мс12 по rs485 циклически посылает данные в сом-порт №2 СПК-110 в формате шины Modbus. Но СПК не желает их принимать.
Ошибок не выдаёт, но и значения в регистрах не появляются.
46777
46778
46779

Для проверки поступления данных написал код для прямой работы с портом, используя ФБ COM_CONTROL и COM.Read.
Настройки порта:

fb_COMcontrol_2
(
xOpen := xOpen2,
xClose := xClose2,
uiPortNumber := 2,
udiBaudrate := 9600,
uiParity := COM.PARITY.NONE,
uiByteSize := 8,
uiStopBits := COM.STOPBIT.ONESTOPBIT
);

Читает: 01 10 FF FF 00 01 02 00 02 3C 91
Расшифровка:
46780

Вопрос: почему modbus-устройство не захватывает даые?

Евгений Кислов
21.01.2020, 17:57
Добрый день.
Если вы пытаетесь одновременно использовать Modbus Slave в дереве проекта и ФБ COM_CONTROL / COM.Read - то так не получится.
С портом может единовременно работать только кто-то один.

Судя по пакету - мс12 выполняет запись в 65535 регистр. В Modbus Slave в дереве проекта по умолчанию нумерация регистров начинается с нуля, и регистра с таким номером просто нет (но начальный адрес можно изменить в настройках слэйва).

Если вы завтра утром организуете подключение по TeamViewer - то я постараюсь помочь вам разобраться с настройкой обмена.

Андрей_Б.
21.01.2020, 20:15
Спасибо за подсказку, разобрался, всё получилось.
Пакет modbus расшифровывал онлайн, адрес FFFF должен был смутить...
Интересный факт: в МЗТА есть параметр "Адрес первой ячейки" - поставил равным 1, в пакете modbus он вставляется как 0 и в СПК тоже идёт как 0.. Что-то, воля ваша, с этим МЗТА не так..

ASo
21.01.2020, 21:16
Для modbus это нормально.
В некоторых случаях регистры нумеруются с 1, который соответствует адресу 0.

melky
22.01.2020, 09:46
Не, это не с МЗТА не так что-то, просто как производитель надумал, так и сделал. У кого-то первым 0, у кого-то 1. Так же как и перестановка байт у разных производителей разные, ну это уже другая история, скорее связана с типом процессора, микроконтроллера и отказ от перестановки в нем, чтобы работало быстрее.

Андрей_Б.
27.01.2020, 11:27
Нормально для номеров регистров. Но параметр называется: "Адрес первой ячейки"!