在socat中使用echo服务器测试UDP数据传输
此示例讨论Engee模型中UDP块的使用,它允许您连接外部硬件/软件以与模型交换数据。 通过在个人计算机上运行的socat实用程序中的echo服务器在模型中接收和传输数据。
导言
UDP(英文User Datagram Protocol)是数据传输的主要协议之一。 计算机应用程序使用UDP数据报将IP消息转发到网络上的其他主机。
Engee,具有与外部硬件工作的能力,允许您使用UDP传输与软件交互模型。
工作准备
在Engee中启动模型之前,必须执行几个准备步骤,如[手册]中所述(https://engee.com/helpcenter/stable/ru/engee-hardware/integration-with-hardware.html )。
此外,类似的制备步骤可以在工作的一个例子COM-портом。成功连接到Engee后,您可以切换到与外部环境一起工作。
在socat中启动echo服务器
Socat(套接字猫)是一个命令行实用程序,专为两点之间的双向数据传输而设计。 例如,您可以运行COM端口仿真或创建TCP代理。 几乎所有Linux发行版都可以安装该实用程序。
要在Linux上运行UDP echo服务器,请在命令行上运行命令:
socat UDP-RECV:5150 UDP-SEND:127.0.0.1:5151
在Windows上,可以使用Cygwin命令行shell启动该实用程序。 有关在Windows上安装Cygwin和运行socat的必要说明,请参阅[链接](https://github.com/valorisa/socat-1.8.0.1_for_Windows )。 安装socat后,只需使用上面的命令。
示例模型
此示例中使用的模型 - udp_socat_echo_server.engee. 按照惯例,模型可以分为两部分:
*通过UDP生成、处理和传输信号,
*接收UDP信号,处理它们,并在图表上显示它们。
 
产生的信号是正弦的,有一个周期  数据类型 Float64 和 Float32,以及常量类型 Int32 和 UInt32.
[Engee函数]块(https://engee.com/helpcenter/stable/ru/base-lib-user-defined-function/engee-function.html )将Julia代码嵌入到模型中,模型将各种格式的4个输入信号转换为一个变量,用于传输格式的数据包 UInt8.
接收到的变量发送到[UDP发送器]块的第二个输入(https://engee.com/helpcenter/stable/ru/hardware-udp/udp-tx.html ),并将数据分组的值传送到块的第一输入。 同样在块中,有必要以将消息发送到本地机器的格式定义IPv4地址。 - 127.0.0.1,远程端口 - 5150,以及传输消息的最大大小,在我们的例子中 - 20 字节。
使用[UDP接收器]块捕获UDP信号(https://engee.com/helpcenter/stable/ru/hardware-udp/udp-rx.html )。 在其第一个输出,它产生接收到的数据包的大小,并在第二,数据本身的类型 UInt8. 块中指定的IPv4 - 0.0.0.0,港口 - 5151,最大消息大小 - 20 字节。
UDP接收器输出端的Engee功能块将接收到的消息转换为原始数据类型。 - Float64, Float32, Int32 和 UInt32. 接收到的信号被记录在图表中显示.
模拟结果
完成模拟准备的所有步骤后,我们将开始执行模型。 通过UDP的数据传输和接收可以使用Engee图表进行检查。 此外,您可以运行流量分析程序(嗅探器),例如WireShark。 在流量捕获窗口,您能观察数据包接收和传输在指定的IP和端口号。
 
从Engee图形和流量分析窗口中的输出可以看出,通过UDP进行的数据传输是正确的。
结论
我们看了一个简单的例子,说明Engee如何与外部环境一起工作-在个人电脑上的socat实用程序中运行的echo服务器。 Engee模型使用适当的块通过UDP协议传输和接收数据。