浅谈基于以太网的地铁门系统软件通信模块设计

2019-10-21 05:33姚茂军
市场周刊·市场版 2019年38期
关键词:调用报文线程

摘 要:随着工业以太网应用的日趋成熟和不断推广,地铁门系统的通信网络也逐渐从RS485、HDLC、MVB及CANopen等转换为以太网,以太网通信以其带宽大、速度快,将成为未来地铁通信网络的发展趋势。本文探讨了围绕以太网通信的地铁门系统软件通信模块设计。

关键词:地铁门系统;以太网通信;维护

一、 地铁门系统通信网络简介

目前,地铁门系统比较常见的MVB+CAN的主从通信方式逐步转变为以太网+CAN的主从通信方式和纯以太网通信方式。之前的软件无操作系统,现在要运行在linux系统上。门系统软件维护由之前主要用串口逐步转变为串口+以太网口或纯以太网口。以太网通信是大势所趋,有必要对通信模块的设计进行探讨。目前的以太网协议以TRDP协议为主,分为过程数据PD(Process Data)和消息数据MD(Message Data),与CANopen协议以及MVB协议中的过程数据和消息数据类似。过程数据主要传输实时性要求较高的数据,周期性传输,数据长度固定;消息数据长度不固定,根据需要传输。门系统与车辆的TRDP协议中,使用过程数据,在自身维护时,使用消息数据。

二、 以太网通信模块设计

(一)以太网通信模块总体设计

通信模块软件采用多线程设计:(1)线程1为主线程负责TRDP报文收发;(2)线程2负责定时更新TRDP报文以及对接收到的报文进行解析响应;(3)线程3负责响应维护接口。难点主要有两个方面:(1)以往采用MVB或CANopen通信时无操作系统,现在要移植TRDP协议栈并在linux系统上运行;(2)以往门系统软件维护通过串口完成,现在要通过以太网口完成,要进行多线程的任务设计。

TRDP协议栈要进行正常通信,必须先完成一系列配置工作,包括配置TRDP协议分配内存空间,PD发送数据的周期、端口号以及目标IP地址等。要完成这一系列的配置,有两种方法,第一,通过修改源代码实现,第二,通过XML配置文件实现。后者对于项目移植较为方便,便于提高开发效率及开发质量,所以选择XML配置文件实现TRDP协议栈的配置。

(二)面向车辆网络的通信设计

将与车辆网络之间的TRDP通信协议,存储为XML配置文件,其信息包括通信com-id、通信数据集id、通信端口周期、通信默认超时时间、目标地址或组播地址以及数据集等。

软件通过读取存储器中的XML配置文件,解析出通信参数,并根据预设在软件中的外部编码地址与IP地址的映射关系,计算出本设备的IP地址。软件启动后,会调用配置模块,对TRDP协议栈进行配置,配置完成后即可进行PD和MD通信。配置过程如下图1(a)所示。

(1)tlc_init()函数,对TRDP协议栈进行初始化,包含对线程、套接字、内存等子模块的初始化工作。

(2)initMarshalling()函数,对TRDP辅助组件Marshall初始化工作。读取XML文件的应用数据部分,并完成字节对齐工作。

(3)tlc_openSession()函数,为网络接口创建TRDP会话,创建成功后会返回会话句柄。

(4)tlp_subscribe()函数,订阅PD报文,为接收PD报文做准备,通过订阅指定的ComId和IP地址。

(5)tlp_publish()函数,发布PD报文,为发布PD报文做准备,完成配置后,协议栈往指定的IP地址发布携带特定ComId的PD报文。

(6)tlm_addListener()函数,订阅MD报文,用于监听TRDP协议栈接收MD报文。

(7)vos_semaCreate()函数,创建信号量,用于线程间交换信息。

(8)vos_mutexCreate()函数,创建互斥量,保护共享资源的数据完整性。

(9)配置模块完成所有配置工作后,配置完成标志finishTauInit置位。

进入主循环流程后,通过调用tlc_getInterval()函数获取过程数据端口之间的最大延时,将返回值以timeval结构体类型变量tv返回,并与通信协议允许的最大延时做比较,避免数据异常产生的数据超范。调用select()函數并在tv时间内阻塞线程,直到阻塞时间到或监控到相应的文件描述符满足条件。调用tlc_process()函数,该函数会通过调用trdp_pdSendQueued()函数和trdp_pdHandleTimeOuts()函数对过程数据的发送和接收超时的队列进行响应处理。待发送的TRDP数据通过其他线程调用tlp_put()函数更新到相应的发送队列中,并在tlc_process()函数中发送出去。如下图1(b)所示。

(三)面向门系统维护软件的通信设计

门系统维护软件发起的请求包括门状态显示、参数配置、故障下载、故障清除及软件下载等。这部分功能用私有接口协议。由于门系统维护软件发起的请求是非周期性的请求,请求类型也不确定,这主要取决于使用者何时操作了维护软件以及操作了维护软件上哪一个按钮,因此维护软件接口采用TRDP的消息数据协议。

当以太网应用软件接收到维护软件的消息数据后,激活MD回调函数,回调函数会判断消息类型,并根据消息类型进行相应的处理,同时调用VOS模块中的信号量函数vos_semaGive(),激活被挂起的维护接口响应线程。当维护接口响应线程接收到回调函数的信号量重新恢复运行;调用vos_mutexLock()函数对共享资源上互斥锁,处理结束后解除对共享资源的互斥锁,释放共享资源。软件流程图如图1(b)所示。

三、 实验验证

在实验室将安装有车辆网络模拟软件的笔记本电脑与门系统控制器用以太网线连接起来,将门系统控制器接上外部地址编码线后,接通110V直流电源,同时启动车辆网络模拟软件。通过安装在笔记本电脑上的wireshark软件,抓取以太网数据包如下图所示。IP地址为10.0.1.18的网络设备发送的TRDP PD数据的组播地址为239.255.0.1,IP地址为 10.0.1.60 的门系统发送的TRDP PD数据的组播地址为 239.255.1.60。二者之间可以建立有效的TRDP通信。

四、 结语

本文实现了基于以太网通信的软件通信模块设计并用实验进行了验证。随着以太网应用的普及推广,门系统的一些软件维护工作会逐步地全部转移到以太网接口上实现,并借助5G网络或车地网络,更轻松地开展维护工作。

作者简介:

姚茂军,南京康尼电子科技有限公司。

猜你喜欢
调用报文线程
海法新港一期自动化集装箱码头电子数据交换报文系统设计与实现
基于报文类型的限速值动态调整
基于Android Broadcast的短信安全监听系统的设计和实现
Java多线程产生安全问题及对策分析
用户设备进行组播路径追踪的方法及系统
采用ScheduledThreadPoolExecutor执行定时重试任务时内存溢出的分析及解决
利用RFC技术实现SAP系统接口通信
C++语言中函数参数传递方式剖析
Java的多线程技术探讨