Программирование протоколов


#1

Добрый день, необходимо написать драйвер для устройства. Интересует как писать на cpp драйвера протоколов для устройств.

  1. в какой среде это необходимо делать ? Можно ли использовать например Visual Studio ? или необходимо :
  2. выполнять все на Linux ?
  3. устанавливать wbdev и программировать там ?
  4. где хранятся драйвера протоколов в системе
  5. как подключаются и вызываются ?

В общем если можно по шагам, что установить, правила написания и т.д.
С или С++ не родной для меня язык, так что поможет любая информация по шагам, в том числе и по возможностям отладки…
Спасибо.


#2

Добрый день!
Честно скажу, на С++ я никогда не программировал. Однако, не думаю, что написание драйвера под новую платформу - это хороший вариант для освоения нового языка.
Пример драйвера и работы с ним можете посмотреть здесь: https://github.com/contactless/wb-mqtt-serial Кстати, если вам тоже нужно опрашивать устройство по последовательному порту, то возможно будет проще дописать поддержку протокола к нашему wb-mqtt-serial, чем писать всё самостоятельно.
В целом, простой “драйвер” можно писать на чём угодно; в частности, я использовал bash и python - ведь в итоге нам нужно просто получить значения от устройства и выложить их в MQTT (https://wirenboard.com/wiki/index.php/MQTT)


#3

Дело в том, что правилами можно только послать данные в порт, а вот как считать я не нашел ни одного примера. К тому же, есть устройства, протоколы которых на правилах написать не реально. Тот же M-Bus, протоколы Логика и так далее.

Как раз и интересует по шагам весь процесс добавления кода для wb-mqtt-serial.
Просто мало того, что не писал на С++, но не делал этого под Linux никогда.
Что установить, какую среду использовать и т.д. как выполнять отладку


#4

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

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

Надеюсь что интегрировав весь механизм в драйвер можно будет этого избежать.
К тому же можно будет создать шаблон устройства и менять адреса и использовать несколько реле на одной линии RS485


#5

А какие конкретно устройства вы хотите поддержать, и какой у них протокол?


#6

В наличии есть регистратор импульсов Пульсар на 10 каналов с протоколом Пульсар
Тепло счетчик Пульсар. Ну и так как у них похожий протокол можно добавить счетчик воды ультразвуковой и еще что-то.

Есть в наличии тепло счетчик Wesser c протоколом M-Bus
Так же электросчетчик SDM и тоже с протоколом M-Bus (а не Modbus).

Есть написанные драйвера под другую систему на C# для приборов Логика с протоколами СП Сеть и РС сеть (пока без их переходного протокола М4), которые мог бы адаптировать.
Есть код для расходомеров Газа Эльстер , протокол МЭК61107.

Да мало ли железок на свете…
Просто есть основная работа, и куча домашних дел, в которые ну никак не входит Wiren Board и занятия красноглазиньем по ночам чтобы разбираться как запустить среду разработки, как проводить отладку и так далее для WB.

То есть если бы вы описали основные шаги, чтобы заниматься только кодингом непосредственно протоколов, это сильно бы облегчило задачу и сократило время переноса кода под другую среду.

з.ы. своего WB нет. и честно говоря не особо хочу, пока вот дали на время поиграться… Так что как отберут, особо то и задача отменится. Разве что если можно выполнять все действия по отладке на виртуальной среде…


#7

Есть очень кратко вот здесь: https://wirenboard.com/wiki/index.php/Как_разрабатывать_ПО_для_Wiren_Board


#8

Евгений, я видел эту страницу, кратко, это очень мягко сказано.

Вы можете снять видео процесса, опираясь на разработку модулей драйвера wb-mqtt-serial и выложить куда-нибудь ?

Так же текстом описать нюансы, на которые стоит обратить внимание.

А то я то же так могу. Драйвер протокола Пульсар

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