通过COM读取数据:Arduino
在这个例子中,我们考虑在连接外部设备的Engee中建模。 运行Engee的计算机的COM端口处于通过Com端口从Arduino MEGA微控制器接收消息的模式。 在微控制器上生成发送消息的程序是通过复位循环生成递增的数字。 接收到的消息,以ASCII编码,在模型中解码。
导言
Engee具有[连接外部设备]的能力(https://engee.com/helpcenter/stable/ru/engee-hardware/integration-with-hardware.html )-诸如例如COM端口。 不仅办公室和多媒体设备可以通过这个接口连接,而且仪器设备-传感器,微控制器,可编程逻辑控制器。
在[以前的примере](https://engee.com/community/ru/catalogs/projects/vneshnee-oborudovanie-com-peredacha-signala-v-arduino )我们已经考虑过将消息从Engee发送到Arduino MEGA,现在我们会考虑将消息从Arduino MEGA发送到Engee。
示例模型
示例模型 - com_read_arduino.engee 包含来自节的两个块 Interfaces -> COM 工程师座图书馆:
*[COM设置](https://engee.com/helpcenter/stable/ru/hardware-com/com-setup.html )-配置连接,
*[COM RX](https://engee.com/helpcenter/stable/ru/hardware-com/com-rx.html )-通过串行接口将数据传输到Engee。
 
界面设置,块 COM Setup
*端口名称适用于Windows操作系统,例如"COM5";
*传输速率,波特率-9600;
*接收和发送的数据量,bit-8;
*接收-发送停止位数,bit-1;
*没有奇偶校验位。
在发射机单元 COM RX 有必要确定端口名称-"COM5"和用于传输的缓冲区的大小,例如-"1"。
在这个块的输出,我们得到:
*接收数据数组中的元素数:格式中的数字 UInt32,
*格式接收数据的向量 UInt8.
由于Arduino传输的数据是根据ASCII标准编码的,因此输出数据将使用块进行解码 Engee Function "ASCII解码器"。
准备执行模型
在Engee中启动模型之前,您需要执行几个准备操作,如[手册]中所述(https://engee.com/helpcenter/stable/ru/engee-hardware/integration-with-hardware.html )。
此外,类似的制备步骤可以在previous примере。唯一的区别是加载到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中执行模型,该模型将通过COM从Arduino MEGA接收信号。
执行示例模型
在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获得的值与Arduino MEGA上的COM端口的序列输出代码中定义的值相对应。
结论
在这个例子中,我们熟悉了COM RX Engee单元的操作,用于通过串行端口从外部设备-Arduino MEGA接收消息。 正如我们所看到的,Engee模型在设置连接后从串行端口接收和解码数据。
