В качестве фреймворка реализации Open62541 был выбран проект Open62541.
Данный проект является реализацией стандарта OPC UA и может использоваться для работы в качестве клиента и в качестве сервера.
Он поддерживает работу по бинарному протоколу, что для встраиваемых систем, очень актуально.
Под платформу Pico в выбранном проекте нет поддержки, хотя заявлена интеграция с FreeRTOS. Поэтому сборка проводилась с чистого листа.
В качестве основы была выбрана более подходящая архитектура (в понятиях проекта это набор окружения целевой платформы) posix и добавлена
собственная архитектура с наименованием pico.
Делем копию posix архитектуры
cp -R arch/posix arch/pico
Добавляем архитектуру в сборку (файл arch/CMakeLists.txt)
add_subdirectory(pico)
описание
Исходя из функциональных требований описанных в предыдущей части к устройство должно иметь следующие характеристики:
I2C, SPI, а также АЦП
Wi-Fi модуля
На официальном сайте производителя единица изделия стоит - 138.00$ без учета доставки.
Arm Cortex M0+ процессор, с максимальной изменямой частотой до 133 MHz
USB 1.1
UF2)
GPIO
SPI, 2 × I2C, 2 × UART, 3 × 12 битных АЦП, 16 × ШИМ каналов
PIO)
В качестве отладочного средства можно использовать второй модуль Pico с установленной прошивкой probe.
Второй модуль выступает в роли посредника между хостовым компьютером и основной Pico платы. Соединение осуществляется через отладочный порт SWD.
Устанавливается OpenOCD в качестве отладочной утилиты.
При покупке на территории России примерная цена за единицу - 1000 р. без учета доставки (самовывоз). При заказе на Китайских площадках Aliexpress, TaoBao и д.р.
примерная цена за единицу - 450 р. без учета доставки.
сравниваем
отсеиваем
делаем выводы
Попробуем описать простейшую функциональность некого мифического простого датчика, который с заданной периодичностью будет отсылать показания на сервер.
Что датчик, что серверная часть, будут использовать open62541 как фреймворк для OPC UA. Аутентификация и авторизация клиента (датчика)
на данном этапе будет отключена.
Ethernet).
NTP).
Ethernet) сети и самостоятельно искать в ней сервер для передачи (агрегации) показаний.
EEPROM), с возможностью их изменения без изменения программного
кода. Также не должен иметь возможности менять настройки из программного кода.
Датчик (устройство) будет состоять из следующих компонент: само устройство (Rspberry Pi Pico W), внешний EEPROM (AT24С256),
внешней FLASH(W25Q128).
Pico W не имеет своей внутренней EEPROM, поэтому будет использоваться внешняя. Для обеспечания работы со временем, будет использоваться RTC.
Pico W имеет внутренний модуль RTC, он энергозависимый, т.е. не имеет стороннего питания, поэтому его следует устанавливать при каждом запуске
устройства. Но исходя из того, что одно из требований - синхронизация по времени, энергозависимость не является причиной отказа от внутреннего
модуля в замен внешнего.
NodeID в который устройство будет писать показания.
Discovery).
Сервер приема(агрегации) показаний датчиков будет состоять из следующих компонент: модуль RTC (с синхронизацией по NTP), модулем
обеспечивающим обнаружение сервера в одноранговой сети (multicast), механизмом обеспечивающем регистрацию датчика на сервере, механизмом
сохранения передаваемых показаний.
Механизмом который будет обеспечивать сохранение передаваемых датчиком показаний будет служить OPC UA Historization
Для моделирования среды будут использоваться следующие компоненты: датчики (датчик) на базе Raspberry Pi Pico W с прошивкой обеспечивающей
описанную ранее функциональность, маршрутизатор (обеспечивающий также Wi-Fi, DHCP и NTP - Mikrotik), сервер OPC UA запущенный на
платформе PC или на Raspberry Pi 3. Все они будут находится в одноранговой сети.
Структуру передаваемых на сервер данных(показаний) можно представить в виде C составного типа данных:
struct Packet {UA_DateTime time;UA_UInt16 kind;UA_Int64 value;}
в котором time - это время когда датчик получил конкретное значение, kind - это тип передаваемого значения (обеспечение возможности
передачи нескольких значений с одного датчика) тут будем иметь явное ограничение в 65535 возможных показаний, value - это непосредственно
само значение показания.
Время получения показаний, исходя из функциональных требований, должно быть синхронизировано с сервером приема (агрегации) показаний датчиков.
Такая же структура данных будет использоваться и при сохранении полученных показаний при не возможности их отсылки на сервер приема (агрегации) показаний.
После сброса/включения устройства будет выполняться следующа] последовательность дейтсвий:
EEPROM
Wi-Fi(Ethernet) модуля для подключения к сети
NTP (в представленной выше топологии это тот же сервер что и DHCP). Синхронизация времени и установка RTC модуля.
FLASH памяти и организация внутреннего получения
показаний и сохранения их на FLASH (не является критически важным компонентом)
discovery адреса сервера и попытка определения его в сети. В случае если сервер не определен, этот пункт повторяется.
NodeID для передачи показаний.
После перезагрузки/загрузки сервера выполняется следующая последовательность дейтсвий:
При приеме запроса на регистрацию датчика:
MAC адрес, в дальнейшем, при включении аутентификации по сертификату
сервер будет получать все необходимую информацию о датчике)
NodeID и включается режим историчности (для сохранения всех переданных
показаний).
NodeID для передачи показаний.