Документация Engee
Notebook

Чтение данных по COM: Arduino

В этом примере рассмотрено моделирование в Engee с подключенным внешним оборудованием. COM-порт компьютера, где запущен Engee, работает в режиме получения сообщений по COM-порту из микроконтроллера Arduino MEGA. Программа формирования отправляемых сообщений на микроконтроллере представляет собой циклическую генерацию возрастающих чисел со сбросом. Полученные сообщения, закодированные в ASCII, декодируются в модели.

Введение

Engee обладает возможностью подключения внешнего оборудования - такого, как, например, COM-порт. По этому интерфейсу могут быть подключены не только офисные и мультимедийные устройства, но и устройства КИПиА - датчики, микроконтроллеры, программируемые логические контроллеры.

В предыдущем примере мы рассмотрели отправку сообщений из Engee в Arduino MEGA, теперь рассмотрим отправку сообщений из Arduino MEGA в Engee.

Модель примера

Модель примера - com_read_arduino.engee содержит два блока из раздела Interfaces -> COM библиотеки блоков Engee:

  • COM Setup - для настройки подключения,
  • COM RX - для передачи данных в Engee по последовательному интерфейсу.

image_3.png

Настройки интерфейса, блок 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 убедитесь в выполнении шагов:

  1. Установлен пакет поддержки внешнего оборудования.
  2. Запущена клиентская программа из пакета поддержки.
  3. Статус подключения Engee в клиентской программе "Подключен".
  4. Контроллер подключен в COM-порту.
  5. На контроллере запущена программа обработки сигналов, поступающих по COM.
  6. Имя порта COM, к которому подключен контроллер, соответствует установленному в интерфейсных блоках модели.

Запустим модель в Engee, и соберём полученные данные в simout:

In [ ]:
# @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);

Полученные в результате моделирования данные можно отразить на графике:

In [ ]:
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)
Out[0]:

Можно заметить, что полученные Engee значения соответствуют тем, что были определены в коде выдачи последовательности в COM-порт на Arduino MEGA.

Заключение

В этом примере мы ознакомились с работой блока COM RX Engee для получения сообщений по последовательному порту из внешнего оборудования - Arduino MEGA. Модель Engee, как мы убедились, после настройки подключения получает и декодирует данные из последовательного порта.

Блоки, использованные в примере