基于鸿蒙与星闪协议的C# UDP通讯及PLC控制的应用探索

文摘   2024-09-09 20:30   北京  

"三阶段"优秀工程师之路

1、基础阶段:博途PLC技术。

2、中级阶段:博途与C#高级语言技术。

3、高级阶段:PLC标准化编程方法。

标准化方法之路!

      使用星闪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创建,并且设置了优先级。


三、用C#实现一个UDP服务器与客户端的测试程序

星闪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这两种通讯指令。整体程序如下:


使用到通讯中的SEND_PTP与RCV_PTP:


四、系统测试

      通过该系统,用户可以通过WiFi网络实时监控PLC的状态,并通过UDP协议发送控制指令,从而实现远程控制和监测。系统的低延时特性特别适用于工业自动化和物联网设备的监控。

服务器模式:


客户端模式(UDP通讯可以在都是客户端的情况下进行通讯):


      本文展示了基于星闪H3863开发板的工业自动化解决方案,集成了SLE和UDP通讯协议。该方案提供了一种灵活、高效的方式来监控PLC设备并进行实时控制。开发板的高集成度和强大的通讯能力,使其成为未来工业物联网应用中的理想选择。


总结:

技术需要点滴的积累!

更需要与”优秀者“同行!


PLC标准化的技术路线讲解视频:S88标准、技术架构和不断迭代

PLC标准化编程的技术架构的思考与分享

博途群讨论:两个群对C#和SCL语言的讨论,终于把SCL语言应用总结清楚了

群交流的价值:6年西门子精英群的群友真实反馈

书友之约:博途PLC书籍3大配套资源发布


加入博途之友,与优秀工程师有约

 芮老师的书籍(京东和当当可以购买) 


博途之友
本公众号由西门子博途PLC产品经理、《西门子S7-1200 PLC编程及应用》和《西门子S7-1500 PLC编程及应用》书籍主编负责管理,基于西门子自动化、信息化和数字化为主的技术交流与分享,以技会友。
 最新文章