This is topic Modbus чтение отрицательного значения из регистра in forum TRACE MODE 7 профессиональная версия / TRACE MODE 7 professional version at Форум TRACE MODE: техническая поддержка.


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

Posted by ViktorMaleika (Участник № / Member № 9669) on :
 
Здравствуйте.
После нового релиза снова поднимаю этот вопрос, надеюсь появилось адекватное решение, а не через канал call. У меня есть регистр modbus, к примеру holding 1, он отображает температуру от - 500 до 500 (что соответствует -50.0 до 50.0 градусов). Соответственно это 16 bit signed (int 16).Как правильно сделать источник, чтобы он отображал отрицательную температуру? Перепробовал все форматы (246). Каналы создавал типа int(16), uint(16), real. Всегда когда температура становится меньше нуля, показания начинаются от 65535 и на уменьшение.
 
Posted by Nico (Участник № / Member № 5342) on :
 
канал ANALOG на который заведен источник MODDBUS
c командой(305) R_1HReg или R_1InReg
далее сами масштабируете
 
Posted by ViktorMaleika (Участник № / Member № 9669) on :
 
Не работает. Вычитывается цифра в районе 65000. Если у вас работает, напишите пожалуйста что вы указываете в источниках (какой тип канала у вас выбран) и непосредственно в МРВ в свойствах аналогового канала какой формат выбран
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
Можно сразу читать каналом Analog (см. Справочная Система Источники - Net/RS - Modbus - Команды)

ANALOG INPUT c (56, nBits)=Float или Double – чтение 1 регистра (16 бит). Полученное значение интерпретируется как целое без знака (если нижний предел (27, LL) канала ANALOG неотрицательный) или как целое со знаком (если (27, LL) < 0).
 
Posted by ViktorMaleika (Участник № / Member № 9669) on :
 
Это не работает для групповых запросов. Например я групповым запросом вычитываю 100 R-1HReg(3), int(16). Некоторые из них имеют отрицательное значение. Канал CALL.CGR который создался при перетаскивании из источников в проект, в своих аргументах отображает отрицательные значения. Но если к такому аргументу привязать аналоговый источник (даже с LL(27)=-100) он всё равно не отображает отрицательное значение.
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
Здравствуйте!
Это не работает для групповых запросов.
Работает.
Групповой запрос можно сделать через Call (грубо говоря, вручную).
Но так же, групповой запрос создается автоматически (если это возможно).

Т.е., Вам достаточно вместо Вашего Call.CGR (допустим на 10 аргументов) сделать 10 числовых каналов. Будет все тот же групповой запрос (если в источниках не стоит флаг 310)
 
Posted by ViktorMaleika (Участник № / Member № 9669) on :
 
Я в источниках создаю групповой запрос:
R1_HReg(3) адрес (91) = 100, число аргументов (378) = 100, прототип канала (246) = CHGR, перетаскиваю этот запрос в RTM, там создастся Call.CGR на 100 атрибутов. Далее из этих атрибутов я создам 100 каналов.
Это равнозначно тому что:
я в источниках создам 100 источников R1_HReg(3)_1 адрес (91) = 100, R1_HReg(3)_2 адрес (91) = 101...R1_HReg(3)_100 адрес (91) = 200, перетащу их в RTM, из этого создастся 100 каналов, т.е. в итоге эти мои 100 источников будут вычитываться одним групповым запросом?
Ну или не по 100 а по 64 т.к. в инструкции:
quote:
разница адресов переменных в канале и базовом канале не должна превышать максимально допустимую величину (DELTAMAX):
для регистров – 64 (для двойных регистров – 32);
для битов – 64.

И тогда в принципе использовать атрибуты число аргументов (378)>0 и прототип канала (246) = CHGR практически нет необходимости?
 
Posted by Nico (Участник № / Member № 5342) on :
 
- да
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2