Столкнулся с проблемой отображения значений на сенсорной HMI панели от EKF.
Дано:
WB 7
EKF PRO-Screen 7E
Меркурий 230 ART-00 PQRSIDN
Для отображения различных данный на EKF PRO-Screen у меня создано устройство с протоколом Modbus. Мне необходимо было отображать данные с счетчика на HMI панель, чтоб не открывать ГРЩ. Значения счетчика не укладываются в 16-ть бит, следовательно я поставил “32-битное целое число без знака”.
С самого счетчика, я получаю значение в числовом виде:
Через правило, я убрал точку, чтоб было целое число.
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;
}});
А вот это - зачем, для чего? То есть драйвер получив 0x4f38e разделит его на множитель и попробует записать 32-битное 0x135762b0 (324494000). Ну, естественно оно и выведется.
То есть - чуть непонятно что и где должно по задумке преобразовываться.
Апеллируя кучей разной документации, я пришел к выводу, что для отображения на HMI панели числового значения, предоставляемого одним из датчиков/счетчиков и т.д., мне необходимо создать отдельный канал для этого числового показателя.
Вот я и создал канал, который, по моим соображениям, должен брать значение «полного потребления» и передавать его на HMI панель.
Я пытался напрямую передавать, что отлично работает с 16-ти битными значениями. На стороне WB я ставлю “16-ти битное целое” и на стороне HMI панели, я тоже ставлю “16-ти битное целое” и всё работает отлично. Но в случае с счетчиком, мне необходимо более “длинное” число для отображение и сделать по аналогии с 16-ти битами, не получилось.
Мне нужно отображать ровно то, что я вижу во вкладке “устройства”. Это картинка 1.
324.470 и такое же значение, я мечтаю, чтоб отображалось на HMI панели.
Нет, запишите в регистр панели (нужное) значение с помощью Утилита «modbus_client» — Wiren Board
Я пока не совсем понимаю - какое именно значение требуется записать в регистр.
у меня логика была такая: если мы на панель отправляем 32 битное, то должны полученное от счетчика сначала преобразовать в целое и потом отправлять указывая в настройках, что оно идет со множителем.
Как описал выше - значение будет разделено на множитель и записано в регистр. Отсюда вопрос - какое значение нужно записать в регистр HMI для того чтобыы оно отобразилось так, как требуется?
Судя по документации - это зависит от того проекта, который загружен в панель.
То есть каждый регистр описывается в панели отдельно и его формат зависит от настроек, заданных при его создании.
Соответственно - нужно посмотреть в нем, как именно вы сконфигурировали множитель (если сконфигурирован) и/или формат ожидаемого значения.
Или альтарнативный путь, как и предлагал ранее - запишите в регистр несколько (разных) значений - и оцените как они отображаются. Это, пожалуй проще, например я никогда не имел дела с этими панелями.
Судя по документации - это зависит от того проекта, который загружен в панель.
То есть каждый регистр описывается в панели отдельно и его формат зависит от настроек, заданных при его создании.
Соответственно - нужно посмотреть в нем, как именно вы сконфигурировали множитель (если сконфигурирован) и/или формат ожидаемого значения.
Или альтарнативный путь, как и предлагал ранее - запишите в регистр несколько (разных) значений - и оцените как они отображаются. Это, пожалуй проще, например я никогда не имел дела с этими панелями.
Да, Вы полностью правы. Какая у меня была последовательность по настройке данной панели. Учитывая, что “общение” происходит через RS485 и панель находится в режиме SLAVE.
Опишу на примере вывода показаний входного напряжение контроллера на экран.
Захожу в НАСТРОЙКИ → Драйвер SERIAL устройств → Создаю устройство с протоколом Modbus.
Создаю канал “G1_Volt” и даю ему адрес. Так же, прописываю настройки:
Видим, что мы присвоили адрес, который прописывали в настройках на стороне WB, так же прописали, что это 16-ти битное число и добавили разделитель (множитель).
осталось дело за малым, это написать правило, которое соединит одно с другим:
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 В.
Но, выводить показания счетчика по такой же схеме - не получилось, так как 16-ти бит мало, нужно 32. А когда меняется 32 без знака на стороне WB и 32, так же без знака, на стороне панели, то всё рушится и панель выдает либо кривое число, либо вообще звездочки.
Два регистра. В младшем, например биты 0-15, в старшем 16-31.
Как значение, приведенное на скриншоте надо привести в дум регистрам? Что именно ожидает панель? Мне кажется что мы двигаемся по кругу в разговоре - вы не хотите ответить на вопрос.