Стартовая страница › Форумы › Вопросы без категории › оперативное изменение Modbus-регистра
- В этой теме 16 ответов, 3 участника, последнее обновление 5 лет, 11 месяцев назад сделано Mikhail.
-
АвторСообщения
-
01.05.2018 в 23:22 #9066litmiУчастник
Здравствуйте! Есть необходимость считываемое значение (это уставка) из регистра Modbus-оборудования увеличивать/уменьшать время от времени оператором и соответственно записывать в регистр измененное значение. Считанное из регистра значение отображается на мониторе динамической надписью. Полагаю, должны быть две кнопки: увеличение значения и уменьшение значения, два канала управления. Как правильно реализовать такое управление уставкой? Поделитесь опытом, кто такое управление реализовывал.
02.05.2018 в 10:44 #9076MikhailМодераторДобрый день!
Вы хотите, чтобы кнопки увеличения и уменьшения значения изменяли установку на заданную величину? Не будет ли удобнее явно ввести значение уставки?
Если делать 2 кнопки, то потребуется 2 канала управления, чтобы понимать, какую кнопку нажали. В каждом канале необходимо придумать формулы, которые будут в результате выдавать новое значение уставки, которое будет отправляться в Коммуникатор и на прибор.02.05.2018 в 11:44 #9078litmiУчастникДа, я предполагал по нажатию кнопки изменять отображаемое значение с заданным шагом и сразу же по команде изменять значение регистра в приборе. А как «явно ввести значение уставки»? Отображать набор кнопок с соответствующими уставками?
03.05.2018 в 18:31 #9094MikhailМодераторЯвно — в канале управления не указывать набор значений, тогда откроется окно для ввода значения команды.
05.05.2018 в 21:33 #9118litmiУчастникЗдравствуйте!
Вот где оказывается собака зарыта! Нужно «не указывать набор значений»! Где бы об этом почитать (и о другом тоже). Да, у меня получилось всплывающее окно, но только после того как в «Редакторе схем» в свойствах компонента в пункте «Действие» я выбрал «Отправить команду», а не «Отправить команду сразу». Но тут же возникли вопросы. Моя отображаемая уставка это число с десятичным знаком после запятой, а вводить во всплывшем окне можно только целые числа. Ну, ладно, можно инструкцию написать оператору при вводе уставки. Потом я подумал о защите от дурака. А вдруг оператор лишний нолик, к примеру, наберет и кликнет «ввести». Неприятности могут быть.
Я вернулся к двум кнопкам — увеличение (+) и уменьшение(-) уставки с шагом 0,1. В свойствах динамического рисунка (имитатор кнопки) в «Действие» выбрано «Отправить команду сразу». Входной канал уставки №3000. В его описании занесена формула Cnl/10, формат отображения D.D . В первом канале управления (увеличение уставки) указал формулу Val(3000) >= 2.7 ? Val(3000)*10 : Val(3000)*10+1, где 2,7 — это максимум уставки для ввода, т.е. увеличить уставку выше 2,7 оператор не сможет. Во втором канале управления (уменьшение уставки) указал формулу Val(3000) <= 1.8 ? Val(3000)*10 : Val(3000)*10-1, где 1,8 — это минимум уставки для ввода, т.е. уменьшить уставку ниже 1,8 оператор не сможет. При однократном кликании на кнопку (+) или (-) через несколько секунд отображаемое значение уставки (и регистр КП) изменится на 0,1.
Пока у меня такое решение. Покритикуйте, если будет желание.06.05.2018 в 08:26 #9119manjey73Участникчисла с плавающей точкой можно вводить, правда на новой версии не пробовал, но ранее точно работало.
06.05.2018 в 09:52 #9120litmiУчастникчисла с плавающей точкой вводить можно. по крайней мере не ругается система, но оборудование запятую не воспринимает. Может быть в формуле канала управление введенное значение умножить на 10 и соответственно ограничения по вводимому значению поставить?
06.05.2018 в 10:47 #9121manjey73Участникlitmi оборудование не понимает скорее всего посылку double, так как сама scada работает только с этим форматом, чтобы отправить float, надо применять формулу для преобразования и правильного расположения байт при отправке.
Причина скорее всего в этом.
06.05.2018 в 15:01 #9123MikhailМодераторВещественные числа можно вводить как с запятой так с точкой.
Защиту от некорректного ввода можно сделать на уровне формул — либо ставить максимум (минимум) уставки, либо игнорировать такую команду.
Если уставка не принимается устройством, нужно смотреть в Коммуникаторе, какие пакеты передаются в команде. Драйвер Модбас по умолчанию отрезает дробную часть, насколько я помню, т.к. протокол работает с целыми 2-байтными числами.07.05.2018 в 15:20 #9137litmiУчастникСовершенно верно, оборудование воспринимает только целую часть. Т.е. мне надо введенное в окне число умножить на 10 (формула в канале управления), чтобы число стало целым, но я не знаю как обозначается это число. Во входных каналах это Cnl, а здесь как?
07.05.2018 в 15:23 #9140manjey73УчастникCmd*10 в канале управления.
07.05.2018 в 15:43 #9142litmiУчастникда, я тоже только что нашел Cmd, спасибо за сверхоперативное подтверждение.
07.05.2018 в 16:47 #9143litmiУчастникКак можно «игнорировать такую команду» если введено плохое число? Ведь я использую свою функцию для ограничения вводимых чисел, если число хорошее, то return Cmd*10, а если плохое, то какой же мне return делать? Значение входного канала?
07.05.2018 в 16:52 #9144manjey73Участникdouble.NaN наверное, тогда сервер должен игнорировать отправку команды
07.05.2018 в 18:26 #9153MikhailМодераторДа, верно.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.