В процессе борьбы со всевозможными COM/Ethernet/WIFI/Bluetooth RS-485 устройствами, в том числе встраиваемыми, программаторами и так далее, столкнулся с тем, что автоматизировать работу с устройством практически нечем. Т.е. написать полноценный сценарий для имитации целевого устройства, обеспечить обмен данными во всех возможных вариантах без ручного управления не получится ничем. На форумах умники советую брать питон, что сложно для схемотехников и иногда медленно. Самые продвинутые терминалы позволяет создавать макросы, некоторые — группы макросов без возможности полноценного анализа. Поэтому пришлось наваять терминал со встроенным скриптовым языком.

Цель – создать инструмент для широкого круга пользователей, схемотехников, радиоинженеров, которые недолюбливают среды программирования. Поэтому скриптовый язык делался максимально простым, никаких рекурсий, сложных выражений, лямбд, грамматических конструкций и пр. Также сделать простым работу с данными, предоставить возможность работать с несколькими устройствами одновременно. Унифицировать способы подключения (COM/Ethernet/WIFI/Bluetooth) устройств. Иметь в распоряжении специфические функции, которые решают задачу в комплексе.

Вот страница проекта на gitflic

https://gitflic.ru/project/mightinside/atelterminal

инсталяторы

https://gitflic.ru/project/mightinside/atelterminal/package

там две версии:

1.2.6 – проверенная, используемая пару лет как в проектах

2.3.0 – недавно релизнулся, много доработок. Перевести на русский не дошли руки.

Основные функции

  1. Простейший командный язык ATeL позволяет использовать циклы, задавать простые массивы, сохранять результаты в файле, внутренней базе истории, загружать из файлов данные, строить графики, индексировать данные и многое другое.

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

  3. Открытие «летающих окон» для вывода измеряемых величин, в том числе для ввода данных. ATeL может в любой момент открыть несколько окон, выводить там данные и закрывать их по необходимости, что избавляет от необходимости загромождать окно терминала.

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

  5. Одно из основных функций – это избавить вас от нюансов работы с сокетами, Bluetooth процедурами инициализации, открытия портов COM и тому подобных системных вещей.

  6. Встроенный язык максимально прост, ориентирован на понимание человеком без навыков программирования.

  7. Группы команд: Serial port, Bluetooth, WiFi/Ethernet, работа с файлами, графики, flow/branch – for, if, include, procedure, pause, bindkey, логические операторы, вектор, set, виджеты (доп. окна), crc, битовые операторы, индексированные вектора.

  8. Встроенные системные переменные, позволяющие настраивать работу терминала.

  9. Возможность построения графиков.

  10. Вспомогательные функции для обработки и конвертации бинарных данных, строк.

Итак, одна из целей – это простота использования. Вот, например, команда открытия порта выглядит так:

serport_open port8, "rw", "COM8"

Я не знаю как это можно сделать еще проще, любые идеи приветствуются. Вам всегда нужно название порта (COM8), права на чтение/запись и билетик (port8), по которому вы будете к нему обращаться. Это минимум, настройки устройства в UI.

Закрытие порта

close port8

Чтение и запись данных:

read port8, таймаут, количество байт для чтения, имя контейнера (вектора/переменной) для получения данных

write port8, таймаут, контейнер (вектор/переменная) с данными

Как видите, команды максимально простые, проще питона, никаких лишних грамматических конструкций.

Иногда приходится отлаживать устройство долгое время, и необходимо выполнить набор команд по нажатию клавиши. Для этого вы можете привязать любую процедуру к клавише и запустив скрипт, наблюдая за процессом, выполнить специфические операции по нажатию клавиши, используя команду bindkey.

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

На странице проекта, как и в самой программе есть примеры скриптов, где показано как работать с портами, читать и записывать данные и пр. Их можно использовать как шаблоны.

Скриншот демонстрирует работу с пятью дополнительными окнами, которые привязаны к разным устройствам
Скриншот демонстрирует работу с пятью дополнительными окнами, которые привязаны к разным устройствам

Окно поиска и настройки Bluetooth-устройств также максимально упрощено. Успешно зарекомендовало себя в работе с ELM- и OBD II устройствами.

Также терминал опробован для:

·       определения STM32F1 Development Board, работающий через UART1. Это протокол программатора bootloader-а.

·       esp8266 AT-команды для управления WIFI бордой.

·       ELM327 OBDII USB scanner

·       ELM327 OBD II Bluetooth scanner

·       ELM327 OBD II WIFI scanner TCP

·       PZEM-004, PZEM-017 Voltmetter Current Meter, Energy Meter

·       USB-TTL CP2102 USB to TTL UART module

·       USB-TTL PL2303 USB to TTL UART module

·       TTL To RS485 Module Hardware Automatic Flow Control Module Serial UART Level Mutual Conversion Power Supply Module 3.3V 5V

 

Скорость работы терминала при интенсивном обмене данными сравнима с программой, написанной с C++ специально для этого устройства, коих я переписал несчетное количество для различного оборудования.

Для начала работы с терминалом необходимо:

1.    Создать и настроить устройство, нажав на кнопку «New Device»

2.    Создать рабочий скрипт в качестве сценария запуска

3.    Создать и настроить сессию, нажав на кнопку «New Session»

4.    Увязать устройство, скрипт в настройках сессии.

5.    Выбрать порт или настроить сетевые параметры.

6.    Открыть терминал с помощью кнопки «Open terminal»

7.    Включить запись данных если нужно в окне терминала

8.    Запустить сессию по кнопке «Start»

 Если терминал зайдет в народ, то, возможно, добавлю асинхронный ввод-вывод, что позволить писать сниферы на все вкусы, хотя это и сейчас возможно.

Успехов!