Добрый день, при интеграции ПВ по RS-485 возникла проблема с параметром управления и статуса. Параметр “stopRun” всегда в ошибке, я пробовал использовать тип holding и формат u16, но там параметр не даёт управлять, всегда приходит 0. Параметр “status” занимает 4 байта и поэтому я использовал формат u32, он также всегда шлёт 1, а если использовать формат u16 то всегда приходит 0, независимо от того включена вентиляция или нет. В чём может быть проблема?
При подключении мы использовали модуль расширения для портов WBE2-I-RS485-ISO, то есть, вентиляция подключена отдельно. На самой панели не дало выбрать стоп-биты 2(там либо 0,либо 1), мы выбрали 1, также в настройках порта на WirenBoard7 выбрали 1. Хотя обычно для подключения через RS-485 использовали стоп-биты 2, может ли быть проблема в этом? Остальные параметры портов сходятся с обычным подключением RS-485.
Предлагаю абстрагироваться от контроллера и проверить карту регистров устройства.
Попробуйте считать значения требуемых регистров – например, подключитесь к устройству с помощью утилиты modbus_client и считайте данные из любого известного вам регистра (серийный номер подойдет).
Сверьте с ожидаемым значением.
Кроме того, обратите внимание на несколько моментов по документации Intech:
stopRun (41651) — по документации это holding-регистр (командное слово), а не coil.
Тип uint и float использует нестандартный порядок байт 1-0-3-2. При чтении многорегистровых значений это нужно учитывать, иначе значение соберётся некорректно.
Обратите внимание на паритет. По документации Intech (настройки RS-485) панель работает со скоростью 115200, паритетом Even (Чётность) и 1 стоп-битом.
Добрый день, я пробовал считывать данные через modbus_client, параметр stopRun передаёт 0, как и должно быть. Но если попробовать менять значение, то параметр уходит в ошибку. Мне кажется это из-за неправильного формата, я пытался с “reg_type: holding” и “format: u16”, но не работало управление, просто передавало 0. Поэтому я подумал, нужно использовать “reg_type:coil”, но это не дало ничего, параметр в ошибке. Можете подсказать какой формат использовать вместо “short”?
Паритет мы поставили “Запрещено”, а на контроллере “N”, проверял через modbus_client, данные передаются, также скорость на панели и порту выбрана 9600.
Добрый день, на данный момент нужно понять какой reg_type у параметра StopRun использовать вместо short, я не смог разобраться. Пока что протестировать с ПВ возможности не было
По таблице типов Intech short – это 2 байта со знаком, то есть s16. u8 – 1 байт без знака, это соответствует их типу ubyte, которого в карте регистров нет. Так что short у Intech s16, а не u8.
Добрый день, вчера тестировали, но не получается управлять установкой. Обратились к производителю, нам ответили что “Судя по коду вы пытаетесь выставить 1 в регистр 41651.Для запуска установки нужно сделать импульс 1 на бит 0 регистр 41651” и предложили реализовать это через wb-rules при помощи скрипта, но по ТЗ заказчика мы не можем использовать wb-rules. Есть ли какой-то способ делать импульс 1 на бит 0 не используя скрипты?
whenChanged: “virtual_device/trigger”, // Имя вашей виртуальной кнопки/триггера
then: function (newValue, devName, cellName) {
if (newValue) { // 1. Устанавливаем бит 0 регистра 41651 в единицу (true)
// Замените "my_modbus_device" на фактическое имя (ID) вашего устройства dev\["my_modbus_device"\]\["register_41651_bit_0"\] = true;
// 2. Через 500 мс сбрасываем этот бит обратно в ноль (false)
Дело не в формате: бит 0 регистра 41651 – это значение 1 в этом регистре, остальные биты нулевые. Регистр командный, поэтому опишите его в шаблоне кнопкой – драйвер запишет регистр целиком, а каждое нажатие даст одну запись со значением 1:
Если нужно адресоваться именно к одному биту, в драйвере есть запись адреса в виде “address”: “41651:0:1” – регистр:смещение от младшего бита:количество бит. Для вашего регистра это не нужно: он читается нулём, поэтому оба варианта дают на шине одинаковый запрос.
Дальше остаётся вопрос про сброс бита: если установка сбрасывает его сама, одного нажатия достаточно. Если бит нужно принудительно вернуть в 0, шаблоном это не решается – драйвер записывает только то значение, которое ему дали, и последовательность 1 в 0 сам не формирует. Тогда эти две записи должен делать тот, кто управляет установкой – либо wb-rules на контроллере, либо верхний уровень через MQTT или Modbus TCP.
Попробуйте на установке и напишите, что получится.