MCM8 и импульсный датчик протока

Создал файл с настройками шаблона и положил его в
/usr/share/wb-mqtt-serial/templates/

сделал
service wb-mqtt-serial restart

В web gui на вкладке редактирования /etc/wb-mqtt-serial.conf в дроп-дауне Device Type должен появится мой девайс с именем M-7051D. Правильно понимаю? Или я что-то упустил, так как пока в списке не появляется

да, правильно. Расширение файла правильное? Посмотрите пожалуйста сообщения в /var/log/messages - возможно ошибка в файле.

Спасибо, ошибку в файле нашел. Появился в списке.
Однако теперь в логе
FATAL: Error parsing config file: invalid register type: descrete – M-7051d
Не нашел в доках описания возможных значений для reg_type .
Возможные варианты: “coil”, “discrete”, “holding”, “holding_single”, “holding_multi”, “input”, “direct”
Какой нужен в моем случае?

Брр… чет запутался с чтением регистров этих. Из документации m-7051d:


И еще:

Остановил service wb-mqtt-serial stop
Сам M-7051d настроен на 115200, N,8,1). В настройках WB6 выставил такие же на rs-485-1.

Запускаю modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-1 -a1 -b115200 -t0x03 -r0x0000
Получаю ответ:
Opening /dev/ttyRS485-1 at 115200 bauds (N, 8, 1)
[01][03][00][00][00][01][84][0A]
Waiting for a confirmation…
<01><03><02><00><00><44>
SUCCESS: read 1 of elements:
Data: 0x0000

Ничего не понимаю в двоичных кодах. Какие адреса нужно вводить для каждого канала в шаблоне? Help!! ))

вы ввели ноль в шестнадцатеричной системе, ещё добавив незначащих нулей. Ввели бы десятичный ноль -r0 - ничего бы не поменялось, modbus_client всё это понимает. В вашей инструкции, очевидно, всё дано в десятеричной системе. Видите 1 - пишите 1, видите 16 - пишите 16.
В целом, прочитайте https://wirenboard.com/wiki/index.php/Протокол_Modbus, чтобы было понятнее, какие есть регистры, и какие у них адреса.

Спасибо, ничего не понял.
Я пишу на 6 языках, но с двоичным кодом не знаком. У меня не стоит задача вникать глубоко в тему контроллеров и построения систем на них. Я купил железки, мне нужно решить задачу и забыть об этом навсегда через минуту после получения нужного результата. Поэтому, прошу помощи а не отсылок к изучению документации которая мне больше никогда не пригодится.
Простой вопрос, к вам, уважаемые гуру, глядя в скрины моей инструкции, что мне нужно написать в шаблоне в поле адрес чтобы опросить входящие каналы счетчика?

Разобрался сам.

Последняя задача - Обнулить счетчики из правила.
Мне в шаблон нужно добавить еще каких-то каналов с адресами регистров отвечающих за обнуление и из правила просто присваивать им значение = 0?

сделал так:
{
“name”: “Clear_1”,
“reg_type”: “coil”,
“address”: 513,
“type”: “value”
}
Верно?
Устройство понимает на запись лишь 0x05 и 0x0f. Будет работать?

Ребята, какая же у вас Ужасная навигация… На форуме нет ссылки на вики! она есть на основном сайте, на форуме нет и ссылки на основной сайт! В вики вообще отсутсвует навигация как таковая (ссылка только на главную страницу)! Где ссылки на примеры? Как их найти? Я уже 30 минут не могу найти нужный пример … уфф…

Последняя задача - Обнулить счетчики из правила.
Мне в шаблон нужно добавить еще каких-то каналов с адресами регистров отвечающих за обнуление и из правила просто присваивать им значение = 0?

сделал так:
{
“name”: “Clear_1”,
“reg_type”: “coil”,
“address”: 513,
“type”: “value”
}
Верно?
Устройство понимает на запись лишь 0x05 и 0x0f. Будет работать?

Поддержка???

Уважаемый Alex_Rich, мы всех клиентов любим, всем помогаем, и вам тоже поможем. Но, по-моему, это не самый хороший способ просить помощи.

Я купил вашего оборудования на 50 тыс р., Отдал вам свои деньги, ломаю голову над скудной документацией и отсутствием понятной навигации жду ответа по 15 часов + слышу какие то упрёки о том, что что-то не так прошу. Давайте не будем учить друг друга жизни и поведению? Клиент спрашивает - вы оперативно отвечаете.

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

Добрый день!

Ни в коем случае никого ничему не учим. Только проясняем, как мы работаем. Мы производитель оборудования, не компания-интегратор. Мы продаём оборудование, но не занимаемся его настройкой, или поиском ошибок в чужом коде. Если вам нужно решение под ключ, обратитесь, пожалуйста, к https://wirenboard.com/ru/pages/partners

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

Согласен, ссылки можно добавить. Лучший способ поиска информации по всей документации, с учётом ограничений встроенного поиска Mediawiki - это искать в гугл, например, “wiren board примеры правил” - попадёте как раз на нужную страницу документации или форума.

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

Очень некорректно. Пожалуйста, не пишите такое больше, иначе мы не будем больше с вами общаться.

Я могу записать в свое устройство в нужный регистр ТОЛЬКО командой 0x05 нужное значение через modbus_client.

Вопрос как мне это сделать из шаблона?

пока не придумал ничего лучше этого костыля.

runShellCommand(“service wb-mqtt-serial stop”);
log(‘service wb-mqtt-serial STOP and waiting 4 sec’);
setTimeout(function(){
runShellCommand(“modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -b115200 -t0x0f -r512 -c 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1”);
setTimeout(function(){
log(‘service wb-mqtt-serial START and waiting 4 sec’);
runShellCommand(“service wb-mqtt-serial start”);
},3000);
},7000);

Есть более прямой способ писать из шаблона в нужный регистр через 0x05?

Не очень понимаю, у вас в листинге 0x0f, а пишете про 0x05. Правильно ли я понял, что вы хотите записать значение coil непременно через 0x0F (force multiple coils), а не через 0x05 (force single coil)?

могу и так и так. лучше через 0x0F

Вам нужно добавить этот регистр в шаблон устройства, как, например, Relay 1 здесь: https://github.com/wirenboard/wb-mqtt-serial/blob/master/wb-mqtt-serial-templates/config-wb-mrm2-mini.json
У вас появится этот контрол и как кнопка в веб-интерфейсе, и из правил можно будет выставлять его значение через dev[][]=…

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

{
“name”: “Clear_1”,
“reg_type”: “coil”,
“address”: 513,
“type”: “value”
}

Я верно понимаю, что reg_type отвечает в то числе и за то каким способом (0x05, 0x06, 0x0F) записывается регистр? Какой reg_type, type (или еще что-то) мне нужно использовать чтобы записать регистр через 0x05 или 0x0F ? По умолчанию драйвер пишет через 0x06 (который не поддерживается моим устройством) ?

Да. Это даже не столько связано с драйвером, сколько с самим протоколом Modbus: https://wirenboard.com/wiki/index.php/Протокол_Modbus#.D0.9A.D0.BE.D0.B4.D1.8B_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9_.D1.87.D1.82.D0.B5.D0.BD.D0.B8.D1.8F_.D0.B8_.D0.B7.D0.B0.D0.BF.D0.B8.D1.81.D0.B8_.D1.80.D0.B5.D0.B3.D0.B8.D1.81.D1.82.D1.80.D0.BE.D0.B2
Если у вас coil (он же регистр флага), то wb-mqtt-serial будет записывать его одной из поддерживаемых функций (0x05 или 0x0F). То есть при таком описании он уже у вас будет записывать правильной функцией.

Драйвер использует команду 0x06 для другого типа регистров, для которого она предназначена (Input registers и Holding registers). Для coil он её использовать не будет.