湖南科技大学计算机科学与工程学院/武汉理工大学信息学院
基于簇的铁路转辙机道岔测控系统通信协议设计与实现
作者:陈斌 李方敏 刘清华 岳超 发布时间:2007/12/6 14:36:00
摘 要
在铁路液压转辙机道岔测控系统中,上位机与远距离下位机由于数据信号在传输过程中受到干扰、衰减而无法通信针对该问题,提出了一种基于簇的串行总线通信协议,利用各簇簇头节点辅助协调系统的通信,确保系统通信高效、畅通。
铁道上的道岔位于道轨组合处,道岔的动作由转辙机完成,执行铁轨的移动和接轨。现在一般的做法是,定期检查转辙机内部是否漏油,检查漏油的方法是在油管接头处接一块油压表,每次巡视检查油位,并记录在设备检修卡上,通过比较数值来发现。但是液压辙机动作较快,油压表实测很难得到准确的数据,并且受测试人员水平、油压表精度以及气候条件等因素影响,使测试数据容易失真,不能及时反映油压的变化情况,不能及时发现液压转辙机是否漏油。为了克服现有检查液压转辙机油压方法的不足,按照状态修的要求,设计了一种基于簇的高速铁路液压转辙机实时测控系统,该系统对众多液压型转辙机进行实时测控,对油压值进行实时采集、处理、显示,实现了油压值集中管理的自动化和智能化,能及时发现液压转辙机故障隐患,提高了检修的质量。
1 系统整体架构设计
该系统采用基于簇的电力线载波主从式上下位机的结构。系统总体结构如图1所示。上位机采用PC机,放在监控机房里;以PL3201单片机为核心的数据采集仪作为下位机,放在现场。系统实际运行中,上位机跟远距离下位机由于信号衰减和干扰,不能直接通信,因此下位机要根据从簇头节点转发来的上位机控制指令进行数据的采集与上行传送。液压转辙机是铁路上已经大量投入运行的机务设备,根据问题的性质和背景,当前只能对现有设备进行改进,而且所有改动受到严格限制,不宜在转辙机外部增加装置,只能将增加的监测装置安置在已有狭小接线盒内部。现有接线盒是一个强电连接器,暴露在露天下,环境恶劣,安装在其内部的监测装置须承受-35℃~+75℃以上的环境温度;不宜重新布线(信号线或电源线),只能利用已有为数不多的一对预留公共线,而PC机上只有RS-232接口,因此要采用PLC/RS-232接口转换。


下位机连接定制的压力传感器,压力传感器与液压转辙机的油压信号相连,由上位机发出控制指令,实现现场油压信号和缺口距离的采集。考虑到现场的恶劣环境,现场要求布线要少,因此采用电源线载波技术,通过使用电源载波模块来减少现场的布线,连接线由原来的4芯屏蔽电缆变为2芯屏蔽电缆。
2 系统硬件设计
系统的硬件部分主要包括上位机、北京福星晓程电子科技股份有限公司PL3201型号的SoC、压力传感器和PLC/RS2232转换器。PL3201是为智能仪表应用设计的SoC(System on Chip)产品,可以大幅度降低成本和提高可靠性。它具有与8051指令兼容的1T高速微处理器,内部集成了2路16位的∑-△调制A/D转换器、LCD显示控制模块、2个多功能串口;内置16K字节的E2PROM程序存储器和1KByte的RAM,内部具有实时钟,且在主电源掉电的情况下还能使用备用电池继续供电维持。PL3201对扩频数据采用四相移相键控QPSK(Quaternary Phase Shift Keying)其载波中心频率为120kHz,伪随机码速率可达到30kbps和15kbps。根据伪随机码的速率不同,数据速率可达到1kbps和500bps。由于该芯片采用了63位的Gold/Kasami序列,从而实现了码分多址,其地址数目最多可达40个,其中32个Gold序列,8个Kasami序列,还使用了扩频技术,可使各地址之间的干扰减到最小。
3 通信协议设计
3.1 通信协议中的数据结构
系统通信过程中,需要在上位机和下位机里维持对应的数据结构来控制和协调全局。在上位机中维持一个CMasterMachine类的对象,对象部分属性信息如下(VC++代码实现):
class CMasterMachine//上位机

private:
short nodeld;
COlbList List_ErrorNode;
CObList List_AIINode;
CObList List_ActiveNode;
};
其中nodeld是节点ID,List_ErrorNode是出现故障的下位机ID列表;List_AIINode是系统中所有的下位机ID列表,有多少个簇List_AIINode里面就有多少个SubList,每个SubList表示一个簇,该SubList的索引号就是该簇的簇号,簇头节点ID放在SubList的第O个元素里,其中0号簇就一个节点就是上位机;List_ActiveNode是网络中处于活动状态的机器列表,有多少个簇List_ActiveNode里面就有多少个SubList,每个SubList代表一个簇,该SubList的索引号就是该簇的簇号,簇头放在SubList的第0个元素里。
下位饥节点维持的数据结构部分属性如下(C代码实现):
struct NodeMachine

U8 nodeld;//节点ID
U8 clusterld;//所在簇的ID
U8 headNodeld;//所在簇的簇头机器ID
bool isHeadNode;//是否是所在簇的簇头节点
U8 nextHeadNode;//下一号簇的簇头节点ID
U8 frontHeadNode;//上一号簇的簇头节点ID
U8 Array_subNode[];//簇内其他节点ID列表
float(*GetMeasureValue)(int value); //获取油压值
};
3.2 帧格式
该协议的帧长度范围为5~255字节。不携带数据(DATA)时候,帧长度为5,该协议中的帧格式如图2所表示。


D_ID:帧的目的节点ID,目的节点ID为FF的帧是广播帧
CMD:指令标识号
LEN:帧携带的DATA和CODE2的字节数和
S_ID:帧的源节点ID,上位机ID为00
CODE1:帧头校验和
DATA:传输的数据(可选域)
CODE2:数据(DATA)的校验和(可选域)
3.3 该通信协议特点
该通信协议是针对液压转辙机道岔测控系统项目量身打造的,具有以下若干特点:
1)上位机ID为00,广播帧的目的ID为FF。
2)簇头节点转发数据帧时,不改变帧的目的ID和源ID。
3)上位机所在簇簇号为0,该簇只有1个机器节点即上位机。
4)任一时刻一个簇里只允许一个节点向总线发送报文,由簇头节点控制。
5)任何节点只接收目的ID为自己ID的帧和广播帧,一般节点对数据帧的2种处理方式:接收和丢弃;簇头节点对数据帧的2种处理方式:接收和转发。
6)非簇头节点只跟本簇的簇头通信。
4 通信协议实现
整个系统通信流程分为系统初始化,数据采集两个阶段,如图3所示。


4.1 系统初始化阶段
1)系统初始化时,上位机根据List_ActiveNode找到第1个SubList中的第0个元素,发A1指令给它设置它为1号簇簇头,1号簇头接收到该指令后,返回ACK帧给上位机,并根据帧里的数据信息设置自己的属性。然后该簇头用A2指令对簇内节点轮询,簇内节点收到A2指令后返回ACK帧给簇头,并根据A2指令帧设置自己的属性。最后簇头设置自己的Array_subNode。再用A3指令,把簇内所有有效节点ID发送到上位机,上位机收到信息返回ACK帧,上位机根据信息修改全局活动节点表List_ActiveNode,把失效节点ID从List_ActiveNode转移到List_ErrorNode,至此1号簇初始化完成。
2)n号簇的初始化(上位机与n号簇簇头节点间的通信经过路径上的n-1个簇的簇头转发):上位机根据List_ActiveNode找到第n个SubList中的第0个元素发送A1指令设置其为n号簇的簇头,n号簇头接收到该指令后,返回ACK帧给上位机,并根据帧里的数据信息设置自己的属性。然后该簇头用A2指令对簇内节点轮询,簇内节点收到A2指令后返回ACK帧给簇头,并根据A2指令帧设置自己的属性。最后簇头设置自己的Array_subNode,再用A3指令,把簇内所有有效节点ID发送到上位机,上位机收到信息返回ACK帧,上位机根据信息修改全局活动节点表List_ActiveNode,把失效节点ID从List_ActiveNode转移到List_ErrorNode,至此n号簇初始化完成。
3)初始化最后一个簇后,上位机用AO指令进行一次系统时间同步操作,至此,系统初始化完成。
4.2 信息采集阶段
1)采集1号簇的监测数据:上位机向1号簇簇头发送B1指令,1号簇簇头节点接收到该指令后用B2指令轮询簇内其他节点,等簇内节点用B3返回监测数据后,把簇内所有节点的监测数据(包括簇头自己的监测数据)打包用B4指令发送给上位机,上位机收到数据后,返回ACK帧,至此,1号簇的监测数据采集完成。
2)采集n号簇的监测数据(上位机与n号簇簇头节点间的通信经过路径上的n-1个簇的簇头转发):上位机向n号簇簇头发送B1指令,n号簇簇头节点接收到该指令后用B2指令轮询簇内其他节点,等簇内节点用B3返回监测数据后,把簇内所有节点的监测数据(包括簇头自己的监测数据)打包用B4指令发送给上位机,上位机收到数据后,返回ACK帧,至此,n号簇的监测数据采集完成。
3)采集最后一个簇的监测数据后,重复上述过程进行下一轮数据采集工作。
5 结束语
该通信协议在高速铁路液压转辙机道岔测控系统的具体应用实践中不断探索、改进,经过测试和系统试运行,证明该通信协议的设计和实现完全满足液压转辙机道岔测控测控系统的各方面需求,保证了数据的及时、可靠传输。