Бывает нужно удалённо снять лог с какого-либо труднодоступного агрегата или установки. А лучше чтобы логи автоматически отсылались на сервер. Но, как правило, установки и агрегаты имеют контроллер только с локальным проводным интерфейсом. Чаще всего 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 от интернетного интерфейса к интерфейсу логгера:
В случае работа RNDIS у логгера можно отключить Wi-Fi и он будет работать через сеть организованную компьютером. Наличие связи с интернетом логгер определяет по наличию ответа от какого-либо сервера времени из своего внутреннего списка серверов.
Как снимаются логи по USB
Возьмём для примера контроллер описанный в данной статье показанный ниже
Контроллер имеет интерфейс USB с разъёмом USB AB mini с двумя каналами виртуального COM порта (VCOM).
Один канал используется для терминала, а другой для протокола FreeMaster.
Чтобы снять с него логи подключаем кабель USB к контроллеру используя такой переходник:
С помощью переходника соединяем порт USB FS логгера и USB порт контроллера моторов. Если логгер настроен правильно, то обнаружит и подключит первый интерфейс VCOM контроллера. В терминале логгера присутствует пункт меню <6>. При нажатии на клавишу 6 терминал логгера переключится в прозрачный режим передачи из VCOM интерфейса контроллера моторов в окно терминала логгера. Одновременно вся информация приходящая в терминал логгера начнёт записываться в лог файл в логгере в директорию RECORDS. Выйти из прозрачного режима можно только по сигналу сброса логгера, который можно подать через MQTT клиента.
Прозрачный режим даёт возможность начать логирование с устройств, где начать сессию обмена можно только вручную. Логгер имеет возможность и автоматической инициализации сессии логирования, но это требует интеграции несложного протокола в сами логиремые устройства. Но это тема отдельной статьи.
Логгер можно настроить на выполнение целевой задачи разными путями:
Подсоединиться через 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 не задействована пока.
Экспериментальный модуль
Экспериментальный модуль выполнен на базе чипа семейства Renesas. О том почему было выбрано такое решение написано в предыдущей статье.
Верхний и нижний слои содержат глухие переходные. Без них было бы очень сложно страссировать плату в 6 слоях.
Как сказано выше, модуль экспериментальный, поэтому может содержать элементы не используемые логгером.
Материнская плата
Модуль устанавливается на материнскую плату и подключается к ней через разъёмы X1, X2, X4. Ответная часть X4 припаивается к ламелям на краю модуля.
Как видно из схемы ограничения распиновки модуля заставляют на три внешних интерфейса делить только два коммуникационных канала модуля. Модуль может предоставить только CAN и UART. Причём один из коммуникационных каналов делит функциональность с отладочным интерфейсом. По умолчанию каналы подключены к интерфейсам CAN и RS-485
В устройстве материнская плата выполняет и роль верхней панели. Поэтому нижний слой не содержит дорожек, а только разъёмы и сплошной слой земли.
Ток потребления и температурная характеристика
Наиболее интересной характеристикой является ток потребления. Ток потребления центрального процессора на частоте 240 МГц от шины питания 3.3 В в среднем составляет около 100 мА с учётом тока потребления SD карты. При работе Wi-Fi модуля скачки тока самого Wi-Fi модуля могут достигать 350 мА.
Измерения тока потребления через USB с выключенной зарядкой, но при активном обмене по Wi-Fi показали результат как на фотографии ниже:
Как известно производительные Wi-Fi модули сильно нагреваются. Поэтому это требует отдельного внимания. Был измерен максимальный нагрев корпуса логгера при долговременной работе Wi-Fi. Вот результат:
И это все?
Описание и документирование таких комплексных открытых проектов - задача трудоёмкая.
Здесь я попытался развить ранние попытки документировать нашу программно-аппаратную платформу с условным кодом IoT.S7 на базе экосистемы Synergy от Renesas и софтверной платформы от Microsoft.
Предыдущие статьи относящиеся к нашей платформе:
Все материалы по проекту находятся здесь.
Продолжение с большой долей вероятности следует...
Комментарии (6)
jstbot
23.01.2023 08:27про usb не скажу, но остальное вроде уже делалось на atmega/esp, при этом ценник за устройство становился вполне копеечный(относительно), может пропустил в статье но в чём плюс выбора именно этого более дорого решения если по usb не надо?
Indemsys Автор
23.01.2023 08:55+2Сорри, но решение в основном ради USB и создавалось.
Решение не коммерческое, название статьи об этом говорит.
Если под atmega иметь в виду ATSAME, то да, под них есть порт Azure RTOS.
Но проанализировав все порты Azure RTOS я обнаружил наиболее полный по охвату периферии только для Synergy. Даже для STM32 нет такого охвата драйверов, хотя их HAL один из самых мощных. Но STM32 имеет склонность неожиданно пропадать.
Pyhesty
23.01.2023 20:29впечатляет!
многие неочевидные технические решения - понравились =)
спасибо за подробную статью
RV3EFE
23.01.2023 20:50Круть! Ни когда не работал с ренесас, только видел порой со стороны.
Светодиоды порадовали????
Dark_Purple
Как впечатление от муратовских dc/dc, у меня сильно грелись на номинальных токах?
Indemsys Автор
Да греются сильно. Градусов на 50. Мы их за это разбирали и увидели внутри тороидальный сердечник и катушку из печатных многослойных проводников.
Но в серийных изделиях у нас работают надежно.
В целом все изолирующие DC/DC греются существенно. Сколько не попадалось они одни из самых горячих элементов на плате.