Modbus/TCP通信在地铁列车网络显示屏的应用
2022-03-03李鲲鹏阎士奇
李鲲鹏,阎士奇
(中车青岛四方车辆研究所有限公司,山东青岛 266109)
列车控制及监控系统(Train Control and Monitoring System,TCMS)连接着列车上的车载设备,作为列车的“大脑”,承担着列车运行状态监测、诊断、信息共享等工作[1]。显示屏人机接口单元(Human-Machine Interface,HMI)作为列车网络的关键组成设备,能够直观的显示列车的运行状态信息以及发送操作人员的控制指令[2]。
随着列车上控制、监测设备的不断增加,列车对大数据容量、高速度传输的需求越来越大,对显示屏的实时性、大数据性需求也越来越高[3]。本文结合实际项目,提出一种基于Modbus/TCP协议的列车网络显示屏以太网通信技术实现方案。对其实现方法、冗余性、可靠性进行深入研究,并展望其应用前景。
1 系统设计
1.1 Modbus协议简介
Modbus是美国Modicon公司(即现在的Schneider Electric公司)于1979年开发的一种通信协议,其目的是采用一根双绞线实现多个设备之间的通信[4]。Modbus协议采用问答式的通信方式,具有简单、通用性强、使用方便的优点,容易开发和实现[5]。Modbus/TCP可以被理解为以太网上的Modbus,Modbus/TCP采用TCP/IP标准,把Modbus信息包打包压缩。这样Modbus/TCP设备就可以通过以太网和光纤网络进行连接和通信。Modbus/TCP还允许使用更多的地址、可以采用多主站架构、传送速率可以达到GB/s的水平。
1.2 通信方式
Modbus/TCP通信采用客户端/服务器模式进行实时数据交换。在本设计中,将显示屏作为服务端与客户端进行通信,如图1所示。
图1 显示屏通信方式Fig.1 HMI communication mode
显示屏通过请求/回应的方式与客户端进行数据交换,可以接收客户端发送的列车状态信息予以显示,还可以将操作人员的控制指令发送给客户端,由客户端进一步处理。
1.3 硬件选型
由于Modbus/TCP通信的简单性,显示屏在硬件选型上无需特殊的通信板卡支持,只需要具有标准以太网通信功能的可编程设备即可[6]。本文选用的是一款带有双路网口的嵌入式Linux系统显示屏。其主要硬件参数如表1所示。
表1 硬件参数Tab.1 Hardware parameter
1.4 通信协议
Modbus/TCP数据帧包含报文头、功能代码和数据3部分,如图2所示。
图2 Modbus/TCP数据帧格式Fig.2 Modbus/TCP data frame format
根据Modbus/TCP的通信特性,需结合项目中显示屏需要显示的状态信息和实现的控制功能,制定显示屏和客户端数据交互协议,包括功能码、数据地址、数据类型、数据内容等关键信息。
实际项目中部分显示屏交互的协议如下。
1)显示屏接收的部分数据协议如表2所示。
表2 显示屏接收数据通信协议(部分)Tab.2 HMI data receiving communication protocol (part)
2)显示屏发送的部分数据协议如表3所示。
表3 显示屏发送数据通信协议(部分)Tab.3 HMI data sending communication protocol (part)
2 软件实现
2.1 软件架构
结合项目需求,本文在设计显示屏软件架构时使用了多线程结构,如图3所示,主要分为Modbus/TCP通信线程、界面线程。通信线程负责处理Modbus/TCP通信相关的功能;界面线程负责界面显示、指令获取等功能。两个线程之间通过数据序列进行信息交互。
图3 显示屏软件架构Fig.3 HMI software architecture
1)Modbus/TCP通信线程
负责以太网驱动、数据封包、CRC校验等网络通信工作,目的是接收客户端发送的数据,根据制定的协议进行数据解析;对显示屏界面的指令进行处理,发送给客户端,实现和客户端的数据交互。
2)界面线程
负责界面的显示及指令发送功能,从数据序列中读取数据进行显示,如速度信息、设备在线状态等;获取指令并发送到数据序列中,如模拟报站开始信号、紧急广播信号等。
3)数据序列
负责数据的存储,作为Modbus/TCP通信线程和界面线程的桥梁,对数据的内容进行判断,当读取序列的数据有更新时,发送信号通知界面线程进行处理;当发送序列的数据有更新时,发送信号通知Modbus/TCP通信线程进行处理。数据序列的操作需要有互斥锁(Mutex)标记,即同一时刻只能有一个线程访问数据序列,保证数据安全性。
2.2 编程方法
由于硬件采用的是嵌入式Linux系统显示屏,本文的显示屏编程基于Linux+QT方式开发,使用C++语言编程。
具体实现如图4所示。
图4 Modbus/TCP通信线程软件实现Fig.4 Software implementation of Modbus/TC communication thread
1)设置客户端IP地址,并设置监听端口为502;
2)监听502端口,当有客户端连接时建立套接字;
3)套接字建立连接后,使用Modbus_receive和Modbus_reply来循环处理客户端的请求并回应。
4)在循环处理请求和回应时,当客户端请求写数据时,将写入显示屏的数据进行解析,存入接收数据序列中,由界面线程处理使用;当客户端请求读数据时,将发送数据序列的内容回应给客户端,实现显示屏指令的发送功能。
3 冗余策略
以太网通信只需要将线缆连接两个设备网口即可正常通信,对于列车设备来说布线简单,但是冗余性会大大降低。如图5所示,如果以太网接口松动或者线缆断开,通信会受到影响,在列车运行时造成了极大的不可靠性。
图5 单线缆通信Fig.5 Single cable communication
本设计为了保证列车运行的稳定性及可靠性,提出了一种显示屏双网口冗余的方案,目的是提高显示屏通信的冗余性,对于客户端和显示屏直接通信的应用场合,其实现方案如图6所示。
图6 显示屏冗余通信架构Fig.6 HMI redundant communications
1)通过LAN1和LAN2两路独立的以太网口连接,两路LAN同时进行Modbus数据交互。
2)对于显示屏内部的接收/发送数据,分成数据区1、2两个区域。程序实时判断两个数据区域的有效性,当两个数据区数据同时有效时,优先使用数据区1,任何一路数据通信故障时,自动切换到另一路有效的数据区。并在显示屏界面进行提示。
通过显示屏双网口冗余的方案,可以在一个网口的连接出现问题时由冗余的网口进行通信,很大程度上提高单个客户端和单个显示屏通信的可靠性。结合项目中在两个司机室各装有一个客户端和显示屏的实际需求,对图6的冗余方案升级,最终装车的实际方案如图7所示。
图7 司机室冗余通信架构Fig.7 Cab redundant communications
1)司机室1和司机室2的设备通过以太网交换机进行连接,实现了客户端1、2的LAN1、LAN2网口分别和显示屏1、2的LAN1、LAN2口连接。图7中进行了简化示意。
2)黑色线代表客户端1的数据流,蓝色线代表客户端2的数据流。
3)显示屏内部开辟4个数据取存放客户端数据,数据区1存储客户端1LAN1的数据;数据区2存储客户端1LAN2的数据;数据区3存储客户端2LAN1的数据;数据区4存储客户端2LAN2的数据。
4)通信正常时优先使用数据区1(客户端1LAN1)的数据,当数据区1故障时,切换到数据区2(客户端1LAN2)的数据。当数据区1、2同时故障(即客户端1故障)时,此时客户端2接管总线工作,显示屏切换到数据区3(客户端2LAN1)的数据。当数据区1、2、3同时故障时,切换到数据区4(客户端2LAN2)的数据。
4 通信验证
通过验证,本文提出的显示屏设计方案能够很好的实现项目中列车的显示屏功能需求,通过WireShark以太网抓包工具测试实际运行时Modbus通信的稳定性,如图8所示。通过试验,通信稳定,无数据丢失现象。并且本文提出的双网口冗余方案通过了列车冗余试验验证,在模拟某个LAN口通信丢失时,显示屏能够快速的根据冗余策略进行切换,保证了列车运行时的可靠性。
图8 冗余通信数据记录Fig.8 Redundant communication records
5 结束语
随着工业以太网在列车网络系统的快速发展,国际电工委员会先后制定了《轨道交通电子设备 列车通信网络(TCN)第 2-5 部分:以太网列车骨干网》(IEC 61375-2-5:2014)、《轨道交通电子设备 列车通信网络(TCN) 第 2-3 部分:TCN 通信规约》(IEC 61375-2-3:2015),分别定义了基于工业以太网的列车级和车辆级网络标准[7]。以太网列车网络在国内应用处于起步阶段,目前产品多是以太网与传统列车网络通信并存,以太网络主要负责维护功能[8]。由于网络显示屏负责与用户进行直接交互,其数据显示、指令控制具有非常重要的作用。本文旨在提出一种基于以太网的列车网络显示屏通信实现方式,未来可以应用于列车维护网络、与乘客信息系统多网融合等方面。
本显示屏设计方案在实际应用时,充分考虑列车以太网网络拓扑结构、交换机、客户端等方面的因素影响,从整体系统的角度充分考虑整车网络系统的冗余性及可靠性。