Цитата Сообщение от zendo057 Посмотреть сообщение
Как тогда понять пост 3,Long указали Dword и все ОК
Не так там написано!
В конфигурации указал 32bit input module (тип DWORD) и всё стало ОК!
Ключевая фраза здесь -32bit input module
Просто в конфигурации ПЛК для модбас мастера, в нужном нам модуле 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 получаются правильными без дополнительных телодвижений.