Чтение данных по COM: Arduino¶
В этом примере рассмотрено моделирование в Engee с подключенным внешним оборудованием. COM-порт компьютера, где запущен Engee, работает в режиме получения сообщений по COM-порту из микроконтроллера Arduino MEGA. Программа формирования отправляемых сообщений на микроконтроллере представляет собой циклическую генерацию возрастающих чисел со сбросом. Полученные сообщения, закодированные в ASCII, декодируются в модели.
Введение¶
Engee обладает возможностью подключения внешнего оборудования - такого, как, например, COM-порт. По этому интерфейсу могут быть подключены не только офисные и мультимедийные устройства, но и устройства КИПиА - датчики, микроконтроллеры, программируемые логические контроллеры.
В предыдущем примере мы рассмотрели отправку сообщений из Engee в Arduino MEGA, теперь рассмотрим отправку сообщений из Arduino MEGA в Engee.
Модель примера¶
Настройки интерфейса, блок COM Setup
:
- имя порта - для ОС Windows, это, например "COM5";
- скорость передачи, бод - 9600;
- количество данных для приёма-передачи, бит - 8;
- количество стоповых бит приема-передачи, бит - 1;
- бит чётности - нет.
В блоке передатчика COM RX
необходимо определить имя порта - "COM5" и размер буфера для передачи, например, - "1".
На выходах этого блока мы получаем:
- количество элементов в массиве получаемых данных: число в формате
UInt32
, - вектор получаемых данных в формате
UInt8
.
Так как передаваемые Arduino данные кодируются по стандарту ASCII, выходные данные будем декодировать при помощи блока Engee Function
"ASCII decoder".
Подготовка к выполнению модели¶
Перед запуском модели в Engee необходимо выполнить несколько подготавливающих действий, как это описано в руководстве.
Кроме того, аналогичные шаги для подготовки можно найти в предыдущем примере. Отличие составляет лишь программа, загружаемая в Arduino MEGA
Программирование Arduino¶
Программа обработки данных, получаемых Engee из Arduino по последовательному порту приведена в скетче arduino_com_read_sketch.ino
.
Принцип работы программы подробно описан в комментариях скетча. Суть работы состоит в следующем.
Для программирования Arduino Mega достаточно сделать следующие действия:
- скачать папку
arduino_com_read_sketch
со скетчем, - открыть скетч в Arduino IDE,
- определить модель платы -
Arduino Mega or Mega 2560
и имя порта - в случае данного примера этоCOM5
, - проверить скетч,
- загрузить его на плату.
В случае успешной загрузки и компиляции можно переходить к выполнению модели в Engee, которая будет получать сигналы из Arduino MEGA по COM.
Выполнение модели примера¶
❗️ Перед запуском модели в Engee убедитесь в выполнении шагов:
- Установлен пакет поддержки внешнего оборудования.
- Запущена клиентская программа из пакета поддержки.
- Статус подключения Engee в клиентской программе "Подключен".
- Контроллер подключен в COM-порту.
- На контроллере запущена программа обработки сигналов, поступающих по COM.
- Имя порта COM, к которому подключен контроллер, соответствует установленному в интерфейсных блоках модели.
Запустим модель в Engee, и соберём полученные данные в simout
:
# @markdown **Программное управление моделированием:**
# @markdown Требуется ввести только имя модели
имя_модели = "com_read_arduino" # @param {type:"string"}
if имя_модели in [m.name for m in engee.get_all_models()]
модель = engee.open( имя_модели );
else
модель = engee.load( "$(@__DIR__)/"*имя_модели*".engee" );
end
engee.run(модель);
engee.close(модель, force=true);
Полученные в результате моделирования данные можно отразить на графике:
using Plots; gr();
plot(simout["$имя_модели/data_decode"].time,
simout["$имя_модели/data_decode"].value;
legend = :topright, label = "Данные из Arduino", title = "Пример чтения из COM",
xlabel = "Время, с", ylabel = "Декодированные значения",
seriestype=:sticks, linestyle=:dash, seriescolor = :green,
marker = :circle, markersize = 3, markercolor = :green, markerstrokecolor = :green)
Можно заметить, что полученные Engee значения соответствуют тем, что были определены в коде выдачи последовательности в COM-порт на Arduino MEGA.
Заключение¶
В этом примере мы ознакомились с работой блока COM RX Engee для получения сообщений по последовательному порту из внешнего оборудования - Arduino MEGA. Модель Engee, как мы убедились, после настройки подключения получает и декодирует данные из последовательного порта.