оперативное изменение Modbus-регистра

Стартовая страница Форумы Вопросы без категории оперативное изменение Modbus-регистра

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Автор
    Сообщения
  • #9066
    litmi
    Участник

    Здравствуйте! Есть необходимость считываемое значение (это уставка) из регистра Modbus-оборудования увеличивать/уменьшать время от времени оператором и соответственно записывать в регистр измененное значение. Считанное из регистра значение отображается на мониторе динамической надписью. Полагаю, должны быть две кнопки: увеличение значения и уменьшение значения, два канала управления. Как правильно реализовать такое управление уставкой? Поделитесь опытом, кто такое управление реализовывал.

    #9076
    Mikhail
    Модератор

    Добрый день!
    Вы хотите, чтобы кнопки увеличения и уменьшения значения изменяли установку на заданную величину? Не будет ли удобнее явно ввести значение уставки?
    Если делать 2 кнопки, то потребуется 2 канала управления, чтобы понимать, какую кнопку нажали. В каждом канале необходимо придумать формулы, которые будут в результате выдавать новое значение уставки, которое будет отправляться в Коммуникатор и на прибор.

    #9078
    litmi
    Участник

    Да, я предполагал по нажатию кнопки изменять отображаемое значение с заданным шагом и сразу же по команде изменять значение регистра в приборе. А как «явно ввести значение уставки»? Отображать набор кнопок с соответствующими уставками?

    #9094
    Mikhail
    Модератор

    Явно — в канале управления не указывать набор значений, тогда откроется окно для ввода значения команды.

    #9118
    litmi
    Участник

    Здравствуйте!
    Вот где оказывается собака зарыта! Нужно «не указывать набор значений»! Где бы об этом почитать (и о другом тоже). Да, у меня получилось всплывающее окно, но только после того как в «Редакторе схем» в свойствах компонента в пункте «Действие» я выбрал «Отправить команду», а не «Отправить команду сразу». Но тут же возникли вопросы. Моя отображаемая уставка это число с десятичным знаком после запятой, а вводить во всплывшем окне можно только целые числа. Ну, ладно, можно инструкцию написать оператору при вводе уставки. Потом я подумал о защите от дурака. А вдруг оператор лишний нолик, к примеру, наберет и кликнет «ввести». Неприятности могут быть.
    Я вернулся к двум кнопкам — увеличение (+) и уменьшение(-) уставки с шагом 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.
    Пока у меня такое решение. Покритикуйте, если будет желание.

    #9119
    manjey73
    Участник

    числа с плавающей точкой можно вводить, правда на новой версии не пробовал, но ранее точно работало.

    #9120
    litmi
    Участник

    числа с плавающей точкой вводить можно. по крайней мере не ругается система, но оборудование запятую не воспринимает. Может быть в формуле канала управление введенное значение умножить на 10 и соответственно ограничения по вводимому значению поставить?

    #9121
    manjey73
    Участник

    litmi оборудование не понимает скорее всего посылку double, так как сама scada работает только с этим форматом, чтобы отправить float, надо применять формулу для преобразования и правильного расположения байт при отправке.

    Причина скорее всего в этом.

    #9123
    Mikhail
    Модератор

    Вещественные числа можно вводить как с запятой так с точкой.
    Защиту от некорректного ввода можно сделать на уровне формул — либо ставить максимум (минимум) уставки, либо игнорировать такую команду.
    Если уставка не принимается устройством, нужно смотреть в Коммуникаторе, какие пакеты передаются в команде. Драйвер Модбас по умолчанию отрезает дробную часть, насколько я помню, т.к. протокол работает с целыми 2-байтными числами.

    #9137
    litmi
    Участник

    Совершенно верно, оборудование воспринимает только целую часть. Т.е. мне надо введенное в окне число умножить на 10 (формула в канале управления), чтобы число стало целым, но я не знаю как обозначается это число. Во входных каналах это Cnl, а здесь как?

    #9140
    manjey73
    Участник

    Cmd*10 в канале управления.

    #9142
    litmi
    Участник

    да, я тоже только что нашел Cmd, спасибо за сверхоперативное подтверждение.

    #9143
    litmi
    Участник

    Как можно «игнорировать такую команду» если введено плохое число? Ведь я использую свою функцию для ограничения вводимых чисел, если число хорошее, то return Cmd*10, а если плохое, то какой же мне return делать? Значение входного канала?

    #9144
    manjey73
    Участник

    double.NaN наверное, тогда сервер должен игнорировать отправку команды

    #9153
    Mikhail
    Модератор

    Да, верно.

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Вы должны авторизироваться для ответа в этой теме.