Тема / Topic: Отрицательные значения в 16-разрядном источнике Modbus
tikotsky
Junior Member / Новичок
Участник № / Member № 4209
отправлено / posted
Читаю регистр из сети Modbus в виде 16-разрядного целого числа. Команда - R_1InReg(4), но возможный прототип канала - только ANALOG-32. При привязывании этого источника к аналоговому каналу в случае отрицательного значения на источнике значение в канале интерпретируется как беззнаковое, то есть в районе 65500. Если источник копируется в промежуточный канал, а после этого привязан к входному аргументу программы вида INT (не получается входной аргумент программы привязать непосредственно к источнику), то преобразование из INT в REAL происходит корректно. Можно ли решить данную проблему напрямую, без промежуточного канала и программы?
Сообщения / Posts 1 | Из / From: Russia
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
Возможные привязки к каналам: из HELPЖ DISCRETE INPUT с (56, nBits)=16 или 32 – чтение 1 регистра (16 бит); групповой запрос по таким каналам строится автоматически. Если формат канала DISCRETE – 1∼∼F1(%ld,%hd), то полученное значение интерпретируется как целое со знаком.
ANALOG INPUT c (56, nBits)=Float или Double – чтение 1 регистра (16 бит), полученное значение интерпретируется как целое без знака.
Сообщения / Posts 879 | Из / From: Россия
| IP / IP: IP адрес / IP address |
quote:Отправитель / Originally posted by tikotsky: Читаю регистр из сети Modbus в виде 16-разрядного целого числа. Команда - R_1InReg(4), но возможный прототип канала - только ANALOG-32.
Здравствуйте. Прототип канала Вы можете задать самостоятельно. Нажмите на Analog-32 и выберите из списка то, что Вам необходимо.
quote:Отправитель / Originally posted by tikotsky: Читаю регистр из сети Modbus ... При привязывании этого источника к аналоговому каналу в случае отрицательного значения на источнике значение в канале интерпретируется как беззнаковое, то есть в районе 65500...
В протоколе ModBus нет отрицательных чисел. Есть только беззнаковые. Это "источник данных" может знать, что число отрицательное. И это же должен знать "получатель", что бы значение от ModBus интерпретировать как отрицательное. Но сам ModBus будет считать его беззнаковым.
quote:Отправитель / Originally posted by tikotsky: Можно ли решить данную проблему напрямую, без промежуточного канала и программы?
Возможно все. Внимательно читайте ответ от Nico. Если значение дискретное, то можно сразу получить знаковое число. Если число аналоговое (с плавающей запятой), то его придется масштабировать (через свойства этого же канала)