使用星闪H3863开发板,通过星闪通讯协议(SLE)实现设备间的低延时通讯,并结合西门子PLC实现工业控制的应用。本文还详细说明了在WPF(C#)UDP通讯的实现,展示了WiFi网络下的客户端-服务器结构。
星闪H3863是一款基于高性能RISC-V 32位处理器的开发板,支持Wi-Fi6、BLE和SLE通讯协议,适用于多种物联网和工业自动化应用。该开发板的主要特点如下:
240MHz高性能RISC-V CPU;
4MB闪存和606KB的SRAM;
支持Wi-Fi6、BLE、SLE多模并发通讯;
丰富的外设接口(I2C、SPI、UART等);
开发板的灵活接口和通讯能力,使其成为工业控制场景下理想的选择,如智能工厂和设备远程控制。
1、应用场景
本文的应用案例通过星闪H3863开发板建立了一个无线通讯网络,连接了西门子PLC(SIMATIC S7-1200系列)并通过串口转485接口实现设备数据的采集和控制。系统的设计架构如图所示:
2、架构说明
1)星闪H3863 Server端:通过SLE协议与星闪H3863 Client端通信,同时通过LLT转232转485模块与西门子PLC进行串口通讯。
2)星闪H3863 Client端:通过WiFi与路由器连接,并作为UDP客户端与PC上的UDP服务端进行通讯。
3)PC端:运行UDP服务端或UDP客户端,负责接收来自星闪H3863 Client端的设备状态数据,并发送控制指令。
3、星闪(SLE)协议
SLE是开发板提供的低延迟通讯协议,适用于对实时性要求较高的工业应用。Server端和Client端分别在各自的星闪H3863开发板上运行,通过SLE实现可靠的低延迟数据传输。
二、OpenHarmony(基于鸿蒙系统小型内核LiteOS开发)关键代码示例
1. 通用初始化部分
UART初始化函数:这个函数用于配置UART的基本参数(波特率、数据位、停止位、校验位等)并初始化UART模块,使其可以用于数据传输。uapi_uart_init 和 uapi_uart_deinit 分别用于初始化和反初始化UART,确保UART总线正常工作。
2. 服务器端部分
SLE服务器的主要任务函数:这个任务函数是SLE服务器的主循环,负责管理UART接收回调和消息队列。主要逻辑包括:
初始化消息队列和UART配置。
使用回调函数ssaps_server_read_request_cbk和ssaps_server_write_request_cbk来处理SLE请求和响应。
在循环中不断监听数据并处理连接状态变化。
3. 客户端部分
客户端任务函数:这个函数实现了SLE客户端的任务,主要负责通过WiFi连接服务器,并使用UDP进行通讯。客户端的主要流程包括:
初始化UART和WiFi连接。
创建UDP套接字,用于与服务器通信。
通过recvfrom函数接收服务器的数据,并通过SLE协议发送。
4. 总体入口函数
这个入口函数根据编译配置决定是启动SLE服务器任务还是客户端任务。任务通过osal_kthread_create创建,并且设置了优先级。
星闪H3863开发板主要实现的功能:
服务器端:通过SLE协议与其他设备通信,并使用UART向PLC发送和接收数据。
客户端:通过WiFi与服务器通信,通过UDP协议发送和接收数据,并与服务器端实现SLE数据交换。
效果如图所示:
1. UI设计(XAML部分)
按钮设计:
ServerModeButton和ClientModeButton是用于切换应用程序模式的按钮(服务器或客户端)。点击后,界面会动态调整可见的设置面板(服务器设置或客户端设置)。
CreateButton用于创建UDP连接(根据当前模式为服务器或客户端)。
DeleteButton用于删除已建立的UDP连接。
SendButton用于发送消息到目标IP和端口。
服务器和客户端设置:
ServerSettingsPanel包含本地端口、对方IP地址、对方端口的设置,并在服务器模式下可见。
ClientSettingsPanel包含客户端的本地端口和目标服务器的IP地址及端口,在客户端模式下可见。
状态显示和消息接收区域:
SocketStatusTextBox用于显示UDP连接的状态日志信息。
ReceiveTextBox用于显示接收到的UDP消息。
2. 代码逻辑(UDP通讯)
模式切换逻辑:当用户点击服务器模式或客户端模式按钮时,ServerModeButton_Click 和 ClientModeButton_Click事件触发。这两个方法根据当前选择的模式更新面板的可见性,并记录日志。
创建连接:点击“创建连接”按钮时,根据当前模式(服务器或客户端),调用StartServer或StartClient方法。每个方法会根据用户的选择启动服务器或客户端连接。
启动服务器:
服务器从ServerPortTextBox文本框中读取端口号并创建一个UdpClient实例,绑定该端口。
将创建的UdpClient实例添加到connections列表,以便管理多个连接。
启动一个后台线程用于接收客户端消息。
启动客户端:
客户端从ClientLocalPortTextBox文本框中读取本地端口号,并创建一个UdpClient实例绑定到该端口。
与服务器一样,客户端的UdpClient实例也被添加到连接列表中,并启动一个线程用于接收来自服务器的数据。
接收消息:
该方法在后台线程中持续运行,监听来自远程端点的UDP消息。
接收到的消息被转换为字符串,并显示在ReceiveTextBox中,同时更新消息来源(远程IP和端口)。
如果当前处于服务器模式,会保存客户端的远程端点信息,以便后续通信。
发送消息:
这个方法在点击“发送”按钮时触发,将文本框中的消息通过UDP发送到指定IP和端口。程序通过遍历connections列表来发送消息,确保所有创建的连接都能够发送该消息。
记录日志:
这个方法用于在UI上显示日志信息。Dispatcher.Invoke用于在后台线程中更新UI线程,确保线程安全。
3. 西门子PLC1200系列的程序:
在编写PLC程序时,我们使用了简单直观的梯形图(LAD)编程语言,并特别使用了SEND_PTP与RCV_PTP这两种通讯指令。整体程序如下:
通过该系统,用户可以通过WiFi网络实时监控PLC的状态,并通过UDP协议发送控制指令,从而实现远程控制和监测。系统的低延时特性特别适用于工业自动化和物联网设备的监控。
服务器模式:
客户端模式(UDP通讯可以在都是客户端的情况下进行通讯):
本文展示了基于星闪H3863开发板的工业自动化解决方案,集成了SLE和UDP通讯协议。该方案提供了一种灵活、高效的方式来监控PLC设备并进行实时控制。开发板的高集成度和强大的通讯能力,使其成为未来工业物联网应用中的理想选择。
总结:
技术需要点滴的积累!
更需要与”优秀者“同行!