Добрый день, необходимо написать драйвер для устройства. Интересует как писать на cpp драйвера протоколов для устройств.
- в какой среде это необходимо делать ? Можно ли использовать например Visual Studio ? или необходимо :
- выполнять все на Linux ?
- устанавливать wbdev и программировать там ?
- где хранятся драйвера протоколов в системе
- как подключаются и вызываются ?
В общем если можно по шагам, что установить, правила написания и т.д.
С или С++ не родной для меня язык, так что поможет любая информация по шагам, в том числе и по возможностям отладки…
Спасибо.
Добрый день!
Честно скажу, на С++ я никогда не программировал. Однако, не думаю, что написание драйвера под новую платформу - это хороший вариант для освоения нового языка.
Пример драйвера и работы с ним можете посмотреть здесь: https://github.com/contactless/wb-mqtt-serial Кстати, если вам тоже нужно опрашивать устройство по последовательному порту, то возможно будет проще дописать поддержку протокола к нашему wb-mqtt-serial, чем писать всё самостоятельно.
В целом, простой “драйвер” можно писать на чём угодно; в частности, я использовал bash и python - ведь в итоге нам нужно просто получить значения от устройства и выложить их в MQTT (https://wirenboard.com/wiki/index.php/MQTT)
Дело в том, что правилами можно только послать данные в порт, а вот как считать я не нашел ни одного примера. К тому же, есть устройства, протоколы которых на правилах написать не реально. Тот же M-Bus, протоколы Логика и так далее.
Как раз и интересует по шагам весь процесс добавления кода для wb-mqtt-serial.
Просто мало того, что не писал на С++, но не делал этого под Linux никогда.
Что установить, какую среду использовать и т.д. как выполнять отладку
Нюанс заключается в том, что невозможно одновременно выполнять обработку ответов от прибора и посылки в него команд.
Надеюсь что драйвер реализован как арбитр программый и сперва дожидается ответа от прибора, а потом посылает в него команды.
При попытке написать периодический опрос с вызовом скрипта на perl не приводит к желаемым результатам, особенно при частом опросе прибора. Всегда может произойти совпадение времени ответа с посылкой новой команды, например управления. И либо происходит ошибка, либо прибор не получает команду, так как в это время отвечал.
Надеюсь что интегрировав весь механизм в драйвер можно будет этого избежать.
К тому же можно будет создать шаблон устройства и менять адреса и использовать несколько реле на одной линии RS485
А какие конкретно устройства вы хотите поддержать, и какой у них протокол?
В наличии есть регистратор импульсов Пульсар на 10 каналов с протоколом Пульсар
Тепло счетчик Пульсар. Ну и так как у них похожий протокол можно добавить счетчик воды ультразвуковой и еще что-то.
Есть в наличии тепло счетчик Wesser c протоколом M-Bus
Так же электросчетчик SDM и тоже с протоколом M-Bus (а не Modbus).
Есть написанные драйвера под другую систему на C# для приборов Логика с протоколами СП Сеть и РС сеть (пока без их переходного протокола М4), которые мог бы адаптировать.
Есть код для расходомеров Газа Эльстер , протокол МЭК61107.
Да мало ли железок на свете…
Просто есть основная работа, и куча домашних дел, в которые ну никак не входит Wiren Board и занятия красноглазиньем по ночам чтобы разбираться как запустить среду разработки, как проводить отладку и так далее для WB.
То есть если бы вы описали основные шаги, чтобы заниматься только кодингом непосредственно протоколов, это сильно бы облегчило задачу и сократило время переноса кода под другую среду.
з.ы. своего WB нет. и честно говоря не особо хочу, пока вот дали на время поиграться… Так что как отберут, особо то и задача отменится. Разве что если можно выполнять все действия по отладке на виртуальной среде…
Евгений, я видел эту страницу, кратко, это очень мягко сказано.
Вы можете снять видео процесса, опираясь на разработку модулей драйвера wb-mqtt-serial и выложить куда-нибудь ?
Так же текстом описать нюансы, на которые стоит обратить внимание.
А то я то же так могу. Драйвер протокола Пульсар
Можете адаптировать самостоятельно. Код максимально постарался откоментировать. Будут вопросы, задавайте. Если по части моего кода, отвечу. Если по части взаимосвязи с системой, есть исходники ядра системы от разработчика.