Thread Content
У нас существует система, которая взаимодействует с DCS по протоколу MODBUS. DCS — это система централизованного управления JX-300XP. Проблема заключается в следующем: данные, передаваемые другой системой, бывают двухбайтными и четырехбайтными. Двухбайтные данные обрабатываются корректно, но четырехбайтные данные не могут быть правильно интерпретированы. Проблема в основном ясна: речь идет о адресе регистра, который был предоставлен собеседником; это 32-битная четырехбайтовая переменная. Однако DCS не может напрямую считывать четырехбайтовые переменные. Как можно это решить?
Если речь идет о 32 битах, то это должны быть действительные числа. В системе собеседника они преобразуются в 16-битные целые числа, а затем снова преобразуются обратно на стороне центрального контроллера.
В протоколе Modbus не определен тип данных 32 бита; указаны только регистры размером 16 бит. Поэтому необходимо самостоятельно написать код для решения этой проблемы, будь то на стороне слейва или мастера — в любом случае придется сами разобраться с типом данных
Вполне возможно, что высокие 16 бит и низкие 16 бит слова поменялись местами. Можно преобразовать числа с плавающей точкой в 16-битные целые числа на слэйв-узле, или же на мастер-узле обменять местами высокими и низкими 16 битами
Сделайте сканирование с помощью Modbus, чтобы определить тип данных. Возможно, это будет 64-битный тип double; в некоторых системах значения, хранящиеся для накопления, действительно имеют формат double. Например, в расчетниках расхода Daniel значения, хранящиеся для накопления, имеют именно такой тип. Как правило, числа с плавающей точкой занимают 4 байта, а порядок их размещения обычно соответствует последовательностям 1234/3412/2143/4321 и т. п. . . . Особенно плохо, когда тошнит. . . . В PLC Siemens при использовании модуля связи Modbus формат чисел с плавающей точкой — 3412, а для обычных чисел — 1234
Посмотрите в руководстве DCS, как определяются типы данных: у некоторых они называются real, у других — dword
Автор поста и все участники форума используют протокол MODBUS. При использовании протокола MODBUS_RTU можно передавать по n элементов данных за одну операцию. Каково максимальное значение для n? То есть, сколько данных может передаваться за один раз через MODBUS_RTU? n не может быть бесконечным, иначе передача данных никогда не закончится.