Открытый проект Wi-Fi логгера по USB, CAN, RS-485, RS-232

в 16:36, , рубрики: Azure RTOS, diy или сделай сам, IoT, IOT разработка, Renesas, synergy, логгер данных, логгеры, программирование микроконтроллеров, Производство и разработка электроники, Разработка для интернета вещей, схемотехника
Открытый проект Wi-Fi логгера по USB, CAN, RS-485, RS-232 - 1

Бывает нужно удалённо снять лог с какого-либо труднодоступного агрегата или установки. А лучше чтобы логи автоматически отсылались на сервер. Но, как правило, установки и агрегаты имеют контроллер только с локальным проводным интерфейсом. Чаще всего RS-232 или RS-485, в последнее время популярен USB. А может быть в наличии только одна полевая шина типа CAN. Либо бывает нужно одновременно снять лог и с локального интерфейса и с полевой шины. Мы попытались сделать для этих целей неприхотливый промышленный логгер с передачей данных в облака по Wi-Fi с установкой на DIN рейку и возможностью автономного питания.

Платформой для логгера послужил уже представленный Wi-Fi маршрутизатор. Благодаря производительному Wi-Fi устройство может оперировать гигабайтными логами, долго работать offline и потом быстро все передавать на удалённый сервер. Покажем ещё раз модифицированную диаграмму аппаратной платформы.

Структурная диаграмма устройства
Структурная диаграмма устройства

Два USB интерфейса предназначены один для подключения к компьютеру, а второй для подключения к внешнему устройству источнику логов. Режимы работы интерфейсов могут быть изменены в зависимости от настроек. Возможны два режима работы:

  • USB HS выключен (выключена настройка Enable USB HS), USB FS работает в роли девайса

  • USB HS включён (включена настройка Enable USB HS) и работает в роли девайса, USB FS работает в роли хоста (но питание +5В в линию не подаёт, дивайс должен иметь своё питание) для внешних устройств с интерфейсом VCOM (USB ACM CDC).

Расположение разъёмов и элементов управления
Расположение разъёмов и элементов управления

Интерфейс USB работающий в роли дивайса (USB HS или USB FS) может быть сконфигурирован (настройка USB mode) на поддержку различных комбинаций классов устройств:

  • 0 - означает отсутствие поддержки какого0либо класса

  • 1 - VCOM port. Работа в режиме терминала VT100

  • 2 - Mass storage. Прямое подключение к внутренней SD карте

  • 3 - VCOM and Mass storage. Работа в режиме терминала VT100 и диск на SD карте

  • 4 - VCOM and VCOM port. Работа в режиме терминала VT100 и на втором порту протокол FreeMaster

  • 5 - RNDIS. Сетевое подключение через компьютер

Класс RNDIS позволяет логгеру подключаться к компьютерам в роли сетевой карты. И тогда возможны два режима:

  • 0 - Win home net. В этом режиме пользователь включает на появившемся Ethernet интерфейсе в системе Windows 10 и более ранних опцию Windows Home Net. Маршрутизация устанавливается автоматически. Логгер получает "магический" IP адрес 192.168.137.2.

  • 1 - DHCP server. В этом режиме логгер организует DHCP сервер с собственным адресом 192.168.3.1 и сетью 192.168.3.0. Компьютеру будет присвоен локальный адрес 192.168.3.2

В Windows 11 в обоих случаях чтобы логгер выходил в интернет через компьютер надо организовать Internet Connection Sharing от интернетного интерфейса к интерфейсу логгера:

Здесь Ethernet 3 - это название RNDIS интерфейса логгера
Здесь Ethernet 3 - это название RNDIS интерфейса логгера

В случае работа RNDIS у логгера можно отключить Wi-Fi и он будет работать через сеть организованную компьютером. Наличие связи с интернетом логгер определяет по наличию ответа от какого-либо сервера времени из своего внутреннего списка серверов.

Как снимаются логи по USB

Возьмём для примера контроллер описанный в данной статье показанный ниже

Открытый проект Wi-Fi логгера по USB, CAN, RS-485, RS-232 - 5

Контроллер имеет интерфейс USB с разъёмом USB AB mini с двумя каналами виртуального COM порта (VCOM).

Открытый проект Wi-Fi логгера по USB, CAN, RS-485, RS-232 - 6

Один канал используется для терминала, а другой для протокола FreeMaster.

Чтобы снять с него логи подключаем кабель USB к контроллеру используя такой переходник:

Переходник для соединения кабеля с mini USB к устройству с разъемом micro USB
Переходник для соединения кабеля с mini USB к устройству с разъемом micro USB

С помощью переходника соединяем порт USB FS логгера и USB порт контроллера моторов. Если логгер настроен правильно, то обнаружит и подключит первый интерфейс VCOM контроллера. В терминале логгера присутствует пункт меню <6>. При нажатии на клавишу 6 терминал логгера переключится в прозрачный режим передачи из VCOM интерфейса контроллера моторов в окно терминала логгера. Одновременно вся информация приходящая в терминал логгера начнёт записываться в лог файл в логгере в директорию RECORDS. Выйти из прозрачного режима можно только по сигналу сброса логгера, который можно подать через MQTT клиента.

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

Открытый проект Wi-Fi логгера по USB, CAN, RS-485, RS-232 - 8

Логгер можно настроить на выполнение целевой задачи разными путями:

  • Подсоединиться через USB и VCOM порт к терминалу логгера и там в интерактивном меню выполнить все настройки

  • Подсоединиться через RNDIS и Telnet к тому же терминалу и выполнить настройки

  • Подсоединиться через Wi-Fi , Telnet и терминал если логгер доступен через сеть

  • Подсоединиться через MQTT брокера и специального клиента для выполнения настроек

  • Подсоединиться через FTP клиента к FTP серверу логгера и загрузить на него файл с настройками

  • Но самый верный способ, когда все выше перечисленные либо не работают, либо не известны их реквизиты - это записать на SD карту файл настроек в директорию MISC и вставить карту в логгер.

Файл настроек логгера представляет собой JSON файл.
В этом файле можно настроить роль Wi-Fi (станция или точка доступа). В роли станции логгер способен опрашивать на возможность подключения до 5 точек доступа. Их реквизиты также указываются в файле настроек. Для автоматической отправки логов в файле настроек присутствует список FTP серверов на которые могут быть отправлены логи. Логи сохраняются в файлы ограниченного размера, который также указывается в настройках (переменная max_log_file_size , размер указан в мегабайтах). Как только записываемый файл лога достигнет заданного максимального размера он сразу же будет передан на один из указанных FTP или FTPS серверов. После отправки файл лога может остаться на SD карте либо стёрт. Управлять отправкой и приёмом логов и другими настройками можно и в реальном времени с помощью специального MQTT клиента. Но это уже тема отдельной большой статьи.

Содержимое JSON файла настроек
[
 {
  "Parameters": [
   [
    "leds_mode",
    "1"
   ],
   [
    "act_after_download",
    "0"
   ],
   [
    "ftp_ip_addr",
    "192.168.1.100"
   ],
   [
    "ftp_user_name",
    "iis_user"
   ],
   [
    "ftp_pass",
    "2548355671449"
   ],
   [
    "ftp_passive",
    "1"
   ],
   [
    "ftp_conn_attempts",
    "2"
   ],
   [
    "ftp_conn_interval",
    "30"
   ],
   [
    "ftp_auto_start",
    "True"
   ],
   [
    "ftp_forced_transfer",
    "False"
   ],
   [
    "enable_ftp_server",
    "1"
   ],
   [
    "ftp_serv_login",
    "ftp_login"
   ],
   [
    "ftp_serv_password",
    "ftp_pass"
   ],
   [
    "device_name",
    "IoTLogger"
   ],
   [
    "en_log_file",
    "True"
   ],
   [
    "delete_log_file_on_start",
    "0"
   ],
   [
    "max_log_file_size",
    "2"
   ],
   [
    "en_compress_settins",
    "1"
   ],
   [
    "en_formating_settings",
    "1"
   ],
   [
    "enable_HTTP_server",
    "1"
   ],
   [
    "enable_HTTPS",
    "0"
   ],
   [
    "HTTP_server_password",
    "123456789"
   ],
   [
    "enable_m2m_task",
    "1"
   ],
   [
    "ext_m2m_interface",
    "1"
   ],
   [
    "rs232_baud_rate",
    "115200"
   ],
   [
    "enable_m2m_log_saving",
    "1"
   ],
   [
    "max_m2m_log_size",
    "32768"
   ],
   [
    "max_m2m_log_interval",
    "86400"
   ],
   [
    "max_num_of_m2m_log_files",
    "1000"
   ],
   [
    "max_allowed_m2m_files_size",
    "10000"
   ],
   [
    "mqtt_enable",
    "1"
   ],
   [
    "mqtt_enable_tls",
    "True"
   ],
   [
    "mqtt_client_id",
    "Client1"
   ],
   [
    "mqtt_password",
    "user"
   ],
   [
    "mqtt_user_name",
    "user"
   ],
   [
    "mqtt_server_ip",
    "192.168.8.107"
   ],
   [
    "mqtt_server_port",
    "8883"
   ],
   [
    "en_sntp",
    "1"
   ],
   [
    "en_sntp_time_receiving",
    "1"
   ],
   [
    "utc_offset",
    "3"
   ],
   [
    "en_telnet",
    "1"
   ],
   [
    "en_usb_hs",
    "1"
   ],
   [
    "usb_mode",
    "1"
   ],
   [
    "rndis_config",
    "0"
   ],
   [
    "wifi_activation_mode",
    "1"
   ],
   [
    "wifi_role",
    "0"
   ],
   [
    "wifi_host_name",
    "Base1"
   ],
   [
    "wifi_ap_mac_selection",
    "1"
   ],
   [
    "wifi_mac_addr",
    "0"
   ],
   [
    "wifi_en_rem_control",
    "False"
   ],
   [
    "wif_enable_return_to_ap",
    "0"
   ],
   [
    "wifi_ap_ssid",
    "IoT_Logger"
   ],
   [
    "wifi_ap_key",
    "12345678"
   ],
   [
    "wifi_ap_channel",
    "1"
   ],
   [
    "wifi_ap_bandw",
    "0"
   ],
   [
    "wifi_ap_hide_ssid",
    "False"
   ],
   [
    "wifi_ap_auth_type",
    "6"
   ],
   [
    "default_ip_addr",
    "192.168.1.1"
   ],
   [
    "default_net_mask",
    "255.255.255.0"
   ],
   [
    "wifi_enable_dhcp_server",
    "True"
   ],
   [
    "wifi_dhcp_start_ip",
    "192.168.1.100"
   ]
  ]
 },
 {
  "Client_AP_list": [
   [
    1,
    "B634_DB5S",
    "AVhA2g8DYye",
    1,
    "192.168.1.1",
    "255.255.255.0",
    "192.168.1.254"
   ],
   [
    0,
    "SSID1",
    "PASS1",
    0,
    "192.168.15.231",
    "255.255.255.0",
    "192.168.15.254"
   ],
   [
    0,
    "SSID2",
    "PASS2",
    1,
    "192.168.1.1",
    "255.255.255.0",
    "192.168.1.254"
   ],
   [
    0,
    "SSID3",
    "PASS3",
    1,
    "192.168.1.1",
    "255.255.255.0",
    "192.168.1.254"
   ],
   [
    0,
    "SSID4",
    "PASS4",
    1,
    "192.168.1.1",
    "255.255.255.0",
    "192.168.1.254"
   ]
  ]
 },
 {
  "FTP_servers_list": [
   [
    0,
    "192.168.8.107",
    21,
    0,
    "Login1",
    "Pass1",
    "/",
    0
   ],
   [
    1,
    "192.168.1.100",
    21,
    0,
    "Login1",
    "Pass1",
    "/",
    0
   ],
   [
    0,
    "192.168.1.101",
    21,
    0,
    "Login1",
    "Pass1",
    "/",
    0
   ],
   [
    0,
    "192.168.1.102",
    21,
    0,
    "Login1",
    "Pass1",
    "/",
    0
   ],
   [
    0,
    "192.168.1.103",
    21,
    0,
    "Login1",
    "Pass1",
    "/",
    0
   ]
  ]
 },
 {
  "DateTime": [
   2023,
   1,
   22,
   0,
   12,
   28,
   2
  ]
 }
]

Важно заметить, что в режиме станции логгер по Wi-Fi обеспечивает полосу пропускания 40 МГц, а в режиме точки доступа только 20. Это означает в два раза меньшую предельную скорость в режиме точки доступа. Поэтому режим станции предпочтительней. Логгер присоединяется к точкам доступа работающим как на 2.4 ГГц, так и на 5 ГГц. Диапазон 5 ГГц обеспечивает большую скорость передачи по результатам испытаний, но при этом уменьшается дистанция уверенной связи.

Программная архитектура

Программная архитектура базируется на экосистеме Synergy со встроенной операционной системой реального времени Azure RTOS.

Архитектура программного обеспечения основного приложения
Архитектура программного обеспечения основного приложения

Прошивка устройства разделена на две части: начальный загрузчик и основное приложение.

Начальный загрузчик имеет практически ту же архитектуру что и основное приложение. Только в нем нет прикладных задач. Загрузчик проверяет SD карту на наличие файла прошивки основного приложения и если его обнаруживает, то прошивает и переходит к выполнению. Если прошивка не обнаружена, то загрузчик проверяет валидность прошитого приложения и если оно валидно, то передаёт ему управление. Загрузчик также может принять прошивку по Wi-Fi через собственный FTP сервер.

Прошивка основного приложения поставляется как бинарный файл в сжатом и зашифрованном виде.

Защита данных

Частой проблемой логгеров с открытой архитектурой является либо их незащищённость если они делаются на платформах вроде Raspberri PI, либо недостаточная производительность если они делаются на ESP8266, либо и то и другое если они делаются на Arduino.

Наш логгер защищает не только свою прошивку от считывания, но и SD карту с логами с помощью пароля. Кроме того сами логи шифруются и передаются по зашифрованному каналу. В отличие от большинства микроконтроллеров чип в логгере имеет возможность блокировки сброса в очищенное состояние. Пароли и сертификаты хранятся в нечитаемой внутренней Flash микроконтроллера.

Конструкция

Устройство состоит из экспериментального модуля S7V10 и материнской платы. Вся сборка помещается в профиль UM-ALU 4-72 PROFILE 165 Phoenix Contact. Профиль обрезается до нужной длины.

Две внешние антенны предназначены для диверсифицированного канала Wi-Fi. Модуль Wi-Fi в течении работы сам выбирает лучшую антенну для передачи. В данной конфигурации антенна LoRa не выведена поскольку в логгере функциональность LoRa не задействована пока.

Открытый проект Wi-Fi логгера по USB, CAN, RS-485, RS-232 - 10

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

Экспериментальный модуль выполнен на базе чипа семейства Renesas. О том почему было выбрано такое решение написано в предыдущей статье.

Подключение главного микроконтроллера
Подключение главного микроконтроллера
Цепи питания
Цепи питания
Wi-Fi и LoRa модули
Wi-Fi и LoRa модули
Аудио кодек и SD карта
Аудио кодек и SD карта
Экспериментальные микрофонные схемы, eMMC, SRAM и системный разъем
Экспериментальные микрофонные схемы, eMMC, SRAM и системный разъем
Трассировка модуля
Трассировка модуля
Расположение слоёв 6-слойной платы модуля
Расположение слоёв 6-слойной платы модуля

Верхний и нижний слои содержат глухие переходные. Без них было бы очень сложно страссировать плату в 6 слоях.

Открытый проект Wi-Fi логгера по USB, CAN, RS-485, RS-232 - 18

Как сказано выше, модуль экспериментальный, поэтому может содержать элементы не используемые логгером.

Материнская плата

Модуль устанавливается на материнскую плату и подключается к ней через разъёмы X1, X2, X4. Ответная часть X4 припаивается к ламелям на краю модуля.

Схема материнской платы
Схема материнской платы

Как видно из схемы ограничения распиновки модуля заставляют на три внешних интерфейса делить только два коммуникационных канала модуля. Модуль может предоставить только CAN и UART. Причём один из коммуникационных каналов делит функциональность с отладочным интерфейсом. По умолчанию каналы подключены к интерфейсам CAN и RS-485

Трассировка материнской платы
Трассировка материнской платы

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

Внешний вид материнской платы
Внешний вид материнской платы

Ток потребления и температурная характеристика

Наиболее интересной характеристикой является ток потребления. Ток потребления центрального процессора на частоте 240 МГц от шины питания 3.3 В в среднем составляет около 100 мА с учётом тока потребления SD карты. При работе Wi-Fi модуля скачки тока самого Wi-Fi модуля могут достигать 350 мА.

Измерения тока потребления через USB с выключенной зарядкой, но при активном обмене по Wi-Fi показали результат как на фотографии ниже:

Открытый проект Wi-Fi логгера по USB, CAN, RS-485, RS-232 - 22

Как известно производительные Wi-Fi модули сильно нагреваются. Поэтому это требует отдельного внимания. Был измерен максимальный нагрев корпуса логгера при долговременной работе Wi-Fi. Вот результат:

Открытый проект Wi-Fi логгера по USB, CAN, RS-485, RS-232 - 23

И это все?

Описание и документирование таких комплексных открытых проектов - задача трудоёмкая.
Здесь я попытался развить ранние попытки документировать нашу программно-аппаратную платформу с условным кодом IoT.S7 на базе экосистемы Synergy от Renesas и софтверной платформы от Microsoft.

Предыдущие статьи относящиеся к нашей платформе:

Все материалы по проекту находятся здесь.

Продолжение с большой долей вероятности следует...

Автор:
Indemsys

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js