Подключаю СИ30 по Modbus RTU к ПЛК100. Как в конфигурации (Universal Modbus Device) в CoDeSys 2.3 правильно задать опрос текущего значения? Оно имеет тип Long. Что нужно выбирать для этого регистра?
Подключаю СИ30 по Modbus RTU к ПЛК100. Как в конфигурации (Universal Modbus Device) в CoDeSys 2.3 правильно задать опрос текущего значения? Оно имеет тип Long. Что нужно выбирать для этого регистра?
Выбрать REAL
REAL не работает. В конфигурации указал 32bit input module (тип DWORD) и всё стало ОК!
а Long никогда и не был Real. так что чуть сбили вас с толку.
Я ещё пока не пробовал читать Master OPC Universal Modbus server-ом. Настроил для режима slave как 4 byte (DWORD). Завтра проверю.
Unsigned - без знаковый, long - 32 бита
Это DWord или UDINT,
Захват-1.png
А просто long, будет целое 32 битное со знаком, т.е. DINT.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Не так там написано!
Ключевая фраза здесь -32bit input moduleВ конфигурации указал 32bit input module (тип DWORD) и всё стало ОК!
Просто в конфигурации ПЛК для модбас мастера, в нужном нам модуле 32bit input, тип переменной жестко забит как DWORD и изменить его нельзя.
Для 32 битных типов данных в КДС существуют типы DWORD, DINT, UDINT.
Для без знаковых целых чисел это DWORD и UDINT (0..4294967295), а для целых чисел со знаком - DINT(-2147483648..2147483647)
А для чисел со знаком (тип DINT) используется представление в дополнительном коде. Старший, 31 бит, используется для указания знака числа. Если значение 31 бита равно 0, то в остальных разрядах записано положительное число, совпадающее с прямым кодом.
По этому пока по сети приходят числа от 0 до 2147483647, то в конфигурации в переменной в Modbus увидите это же число. Но как только придет отрицательное число, то в переменной в Modbus увидите это число в дополнительном коде, например не "-30", а "4294967266" или не "-5", а "4294967291".
Потому, что дополнительный код для "-5" это 0хFFFFFFFB, а это без знаковое число "4294967291".
Но волноваться не стоит. Это никак не влияет на результат использования такого числа в программе. Из-за неявного преобразования типов результаты арифметических операций и операции присваивания с использованием DWORD в правой части выражений вместо DINT получаются правильными без дополнительных телодвижений.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg