This is topic Отрицательные значения в 16-разрядном источнике Modbus in forum TRACE MODE 7 бесплатная базовая версия / TRACE MODE 7 free basic version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/60/t/000059.html

Posted by tikotsky (Участник № / Member № 4209) on :
 
Читаю регистр из сети Modbus в виде 16-разрядного целого числа. Команда - R_1InReg(4), но возможный прототип канала - только ANALOG-32. При привязывании этого источника к аналоговому каналу в случае отрицательного значения на источнике значение в канале интерпретируется как беззнаковое, то есть в районе 65500. Если источник копируется в промежуточный канал, а после этого привязан к входному аргументу программы вида INT (не получается входной аргумент программы привязать непосредственно к источнику), то преобразование из INT в REAL происходит корректно. Можно ли решить данную проблему напрямую, без промежуточного канала и программы?
 
Posted by Nico (Участник № / Member № 5342) on :
 
Возможные привязки к каналам:
из HELPЖ
DISCRETE INPUT с (56, nBits)=16 или 32 – чтение 1 регистра (16 бит); групповой запрос по таким каналам строится автоматически. Если формат канала DISCRETE – 1∼∼F1(%ld,%hd), то полученное значение интерпретируется как целое со знаком.

ANALOG INPUT c (56, nBits)=Float или Double – чтение 1 регистра (16 бит), полученное значение интерпретируется как целое без знака.
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
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.
Если значение дискретное, то можно сразу получить знаковое число.
Если число аналоговое (с плавающей запятой), то его придется масштабировать (через свойства этого же канала)

[ 18.12.2023, 15:19: Сообщение отредактировал / Message edited by АдАстра. Техподдержка ]
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2