DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1300|回复: 0
打印 上一主题 下一主题

[待整理] 多任务TDCS车站分机通信协议的设计

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-13 10:57:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
为了处理TDCS车站分机从铁路局调度中心、车务终端和计算机联锁设备接收的各种信息,在此基于Windows操作系统设计了实时多任务程序。在多任务程序中,使用消息机制和消息缓冲区实现多线程之间的通信,使用信号量和互斥量实现多线程之间的同步;针对以太网通信任务和串口通信任务,建立了相应的数据结构,并设计了一个数据包分析算法来解析自定义协议。实践证明,该设计具有响应速度快、适应性强的特点。
列车调度指挥系统(TDCS)是实现铁路各级运输调度对列车进行透明指挥、实时调整、集中控制的现代化信息系统,它由铁道部、铁路局中心局域网及车站基层网组成。TDCS车站分机是车站基层网的设备,起到信息的采集、上传及下发的作用,在整个系统中占有非常重要的地位。
1 功能分析
在车站分机系统中,车站分机软件主要实现两个方面的功能:
(1)接收铁路局调度中心和车务终端的调度命令,经过命令解析处理后,经无线调度命令设备发送至列车执行;
(2)接收计算机联锁设备、无线车次号设备、无线调度命令设备发送的状态信息,经过解析和重新封装后,将状态信息发送到铁路局调度中心和车务终端。
由以上分析可知,系统主要有以下3个功能模块:接收状态模块、接收命令模块和数据处理模块。其中,接收状态模块由RS422串口通信方式实现;接收命令模块由以太网通信方式实现;数据处理模块主要负责数据的处理和发送。
2 多任务模型的创建
基于Windows操作系统,针对上述3个模块,本文分别建立了3个任务:串口通信任务、以太网通信任务、数据处理任务。其中数据处理任务作为主线程,包含数据的接收与上传,其处理过程如下:
(1)接收线程收到数据,放入缓冲区,并用PostMessage()向主线程发送消息,通知主线程有数据存入缓冲区;
(2)主线程使用ReadFile()函数读取缓冲区数据;
(3)主线程判断收到的数据是否有变化:若有变化,调用WriteFile()函数或SendData()函数发送消息,并将定时器清除;否则,继续等待。数据处理任务的具体流程如图1所示。


在该系统中,使用AfxBeginThread()函数创建以太网通信任务、串口通信任务和数据处理任务之后,用消息机制实现了多任务之间的通信,而用信号量、互斥等方式实现了线程之间全局变量和函数的同步。
3 通信协议设计和解析
协议是数据发送与接收方都必须遵守的一种规则,这种规则一部分是发送方及接收方所认识的信息组成格式即信息结构,另一部分是由信息结构的协议类型及协议操作符所组成的会话方式即传输控制。
在该系统中,从串口和以太网接收到的各种的数据的类型和长度是不一致的,数据处理任务要对其分门别类进行处理就必须明确数据的类型、实际长度以及数据本身。因此必须定义一种数据传输的协议以保证通信的可靠性和数据读取的可用性。本文针对以太网通信和串口通信,分别建立了对应的数据协议。
3.1 以太网通信协议
以太网通信涉及的信息包括计算机联锁设备状态信息、无线车次号信息、调度命令信息。本文定义了一种以太网信息通用的数据协议封装类如下:


在该数据结构中,报文类型用来识别该报文是联锁设备信息、无线车次号信息或者调度命令信息;序列号用来判断接收报文的连续性;CRC错误检测缀用来判断接收报文的正确性,可以根据需要选择不同的生成多项式;接收数据数组将根据联锁设备信息、无线车次号信息和调度命令信息的相应内容填充。
3.2 串口通信协议
串口通信采用RS422方式。在嵌入式车站分机中,冗余的处理器单元采用轮询的方式进行一主多从通信。车站分机作为主机,无线车次号设备、无线命令调度设备和计算机联锁设备作为从机。具体为:使用1问1答的方式,整个系统中车站分机发送查询命令,其他设备是从机,只能被动地接收和发送数据。
在串口通信中,必须为每一个数据报文设计一个起始码和结束码,如0x03,并对报文中所有与起始码和结束码相同的字符进行转义。接收方接收到该报文时,再按照转义规则对其进行还原。本文定义的通用串口数据协议封装类如下:


其中:报文类型、序列号和CRC错误检测缀的作用与以太网通信协议相同;从机地址用来区分该报文的目的地是无线车次号设备、无线调度命令设备还是计算机联锁设备。
查询命令的数据格式如表1所示。


3.3 自定义协议的解析及应用
对于从设备读取来的数据如何才能正确按照上述协议分析并使用,则必须设计相应的分析算法进行分析并处理。在此设计了一个数据分析类来进行处理:





数据接收和分析基本流程:数据接收任务调用数据分析类的Write()函数,将接收到的数据写入数据分析类缓冲区;数据处理任务调用数据分析类Read()函数读取数据分析类缓冲区的数据进行处理,读取的规则是按照数据协议格式来读取。它的基本流程如图2所示。


4 结语
在Windows平台下,应用程序开发人员可以利用它提供的多任务机制开发具有并发需求的软件系统,它的多任务机制允许多个进程和多个线程同时执行。
车站分机通信软件就是在此基础上开发的;协议是数据发送与接收方都必须遵守的一种规则,在该系统中,从串口和以太网接到的收数据格式不一致,如果不对其进行统一的数据格式打包,在传输大量的数据和进行超时及异常处理时,就必须进行繁琐的编程。本文中自定义了协议包的信息结构,并给出了它的解析算法,在通信软件中起到了化繁为简的作用。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-1-12 21:36 , 耗时 0.089696 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表