WB7 + EKF PRO-Screen + Счетчик Меркурий

Столкнулся с проблемой отображения значений на сенсорной HMI панели от EKF.

Дано:
WB 7
EKF PRO-Screen 7E
Меркурий 230 ART-00 PQRSIDN

Для отображения различных данный на EKF PRO-Screen у меня создано устройство с протоколом Modbus. Мне необходимо было отображать данные с счетчика на HMI панель, чтоб не открывать ГРЩ. Значения счетчика не укладываются в 16-ть бит, следовательно я поставил “32-битное целое число без знака”.

С самого счетчика, я получаю значение в числовом виде:
image
image
Через правило, я убрал точку, чтоб было целое число.

defineRule("EKF control panel consumption", {   
  whenChanged: ["mercury230ar02_22/Total consumption"],
  then: function () {
  dev["wb-modbus-1-1/Total_consumption"] = dev["mercury230ar02_22/Total consumption"]*1000;
}});

И вижу, что на HMI отправляется целое число:
image

В настройке драйвера устройств, я прописываю,:

  • дополняю необходимый множитель.

Далее, я перехожу в настройки самой HMI панели и произвожу схожие манипуляции:


Это всё для отображения на панели.

Но, по каким-то причинам, возможно из-за угла кривизны моих рук, отображение на самой HMI панели происходит не корректно.


Либо выдает много цифр:

Подскажите, где я не прав и как победить данный недуг?

Заранее спасибо!

Добрый день.

А вот это - зачем, для чего? То есть драйвер получив 0x4f38e разделит его на множитель и попробует записать 32-битное 0x135762b0 (324494000). Ну, естественно оно и выведется.
То есть - чуть непонятно что и где должно по задумке преобразовываться.

Апеллируя кучей разной документации, я пришел к выводу, что для отображения на HMI панели числового значения, предоставляемого одним из датчиков/счетчиков и т.д., мне необходимо создать отдельный канал для этого числового показателя.

Вот я и создал канал, который, по моим соображениям, должен брать значение «полного потребления» и передавать его на HMI панель.

Я пытался напрямую передавать, что отлично работает с 16-ти битными значениями. На стороне WB я ставлю “16-ти битное целое” и на стороне HMI панели, я тоже ставлю “16-ти битное целое” и всё работает отлично. Но в случае с счетчиком, мне необходимо более “длинное” число для отображение и сделать по аналогии с 16-ти битами, не получилось.

Какое значение нужно записать в регистр, чтобы оно отобразилось “как надо”?

Мне нужно отображать ровно то, что я вижу во вкладке “устройства”. Это картинка 1.
324.470 и такое же значение, я мечтаю, чтоб отображалось на HMI панели.

Запишите пожалуйста в регистр панели значение с помощью modbus_client - ну и покажите.

Не совсем понял указаний.

В программе настройки самой панели записать значение или в “настройке драйвера serial-устройств” на самом WB?

Нет, запишите в регистр панели (нужное) значение с помощью Утилита «modbus_client» — Wiren Board
Я пока не совсем понимаю - какое именно значение требуется записать в регистр.

Мне нужно взять вот это значение
image
а потом, я под него создаю канал


далее, смотрю, как он отображается во вкладке “Устройства” на стороне WB
image

у меня логика была такая: если мы на панель отправляем 32 битное, то должны полученное от счетчика сначала преобразовать в целое и потом отправлять указывая в настройках, что оно идет со множителем.

Как описал выше - значение будет разделено на множитель и записано в регистр. Отсюда вопрос - какое значение нужно записать в регистр HMI для того чтобыы оно отобразилось так, как требуется?

Вот в этом и вопрос:)

Я не понимаю, почему HMI панель не может “скушать” эти данные и выводить информацию - корректно.

Описал сам алгоритм моих действий и логику. Вдруг, ошибку допустил и хотел просить у Вас подсказки.

Судя по документации - это зависит от того проекта, который загружен в панель.
То есть каждый регистр описывается в панели отдельно и его формат зависит от настроек, заданных при его создании.

Соответственно - нужно посмотреть в нем, как именно вы сконфигурировали множитель (если сконфигурирован) и/или формат ожидаемого значения.
Или альтарнативный путь, как и предлагал ранее - запишите в регистр несколько (разных) значений - и оцените как они отображаются. Это, пожалуй проще, например я никогда не имел дела с этими панелями.

Подскажите, где мне в моей панели, посмотреть ответ на данный вопрос? Наверное, из-за необразованности, я не до конца понимаю, что требуется.

Извиняюсь за глупый вопрос.

Судя по документации - это зависит от того проекта, который загружен в панель.
То есть каждый регистр описывается в панели отдельно и его формат зависит от настроек, заданных при его создании.

Соответственно - нужно посмотреть в нем, как именно вы сконфигурировали множитель (если сконфигурирован) и/или формат ожидаемого значения.
Или альтарнативный путь, как и предлагал ранее - запишите в регистр несколько (разных) значений - и оцените как они отображаются. Это, пожалуй проще, например я никогда не имел дела с этими панелями.

Да, Вы полностью правы. Какая у меня была последовательность по настройке данной панели. Учитывая, что “общение” происходит через RS485 и панель находится в режиме SLAVE.
Опишу на примере вывода показаний входного напряжение контроллера на экран.

  1. Захожу в НАСТРОЙКИ → Драйвер SERIAL устройств → Создаю устройство с протоколом Modbus.
  2. Создаю канал “G1_Volt” и даю ему адрес. Так же, прописываю настройки:
  3. В настройках ставлю множитель, чтоб у меня было корректное отображение.

  1. Переходим к настройке самой панели, тут мы дублируем настройки, указанные в самом WB.
  • в графическом редакторе рисуется цифровой дисплей, где нам нужно отображать показания входного напряжения.
  • открываем настройки данного цифрового дисплея и указываем адрес, от куда берется информация

Видим, что мы присвоили адрес, который прописывали в настройках на стороне WB, так же прописали, что это 16-ти битное число и добавили разделитель (множитель).

  1. осталось дело за малым, это написать правило, которое соединит одно с другим:
defineRule("EKF control panel HW monitor", {   
  whenChanged: ["wb-adc/Vin"],
  then: function () {
  dev["wb-modbus-1-1/G1_volt"] = dev["wb-adc/Vin"];
}});

И все начинает работать. Видим наши заветные 24.4 В.

Которые соответствуют показаниям во вкладке “устройство” на стороне самого WB.


Но, выводить показания счетчика по такой же схеме - не получилось, так как 16-ти бит мало, нужно 32. А когда меняется 32 без знака на стороне WB и 32, так же без знака, на стороне панели, то всё рушится и панель выдает либо кривое число, либо вообще звездочки.

Что будет если записать в этои регистры значение 0x0? (в младший регистр) А если 0xff?
Ну - опять же, я не понимаю, что

описываете.
32 бита - это два рагистра, какое значение нужно в них записать при текущей настройке преобразования в панели чтобы получить искомое?

В данном случае, мне нужно записать число, выдаваемого счетчиком.
/devices/mercury230ar02_22/controls/Total consumption

В 16 оно не влезает и нужно использовать 32.

Два регистра. В младшем, например биты 0-15, в старшем 16-31.
Как значение, приведенное на скриншоте надо привести в дум регистрам? Что именно ожидает панель? Мне кажется что мы двигаемся по кругу в разговоре - вы не хотите ответить на вопрос.