朱卫华 马晓旭
朱卫华:西门子信号有限公司 工程师 710016 西安
马晓旭:西门子信号有限公司 工程师 710016 西安
应答器(Balise)作为地-车信息传输通道中的地面信息传输载体,广泛应用在我国高铁领域。我国高铁的快速发展,铁路线不断调整和升级,使得提供线路固定参数,如线路坡度、线路允许速度、轨道电路参数、链接信息、列控等级切换等信息的应答器报文也需要频繁的修改。以京石武高速铁路为例,该线共使用应答器约5000台,由于前期测量误差,拉通试验时修改线路原始数据17次,导致2600台次应答器报文需要修改。正式开通后3次对线路重新调整,涉及约110台次应答器报文的修改。
由于报文内容涉及行车安全,并且结构逐渐被用户所熟悉,越来越多的用户在管理报文的同时,希望可以对报文内容进行校核或者将修改前后的报文进行比对。但报文为1023位的二进制编码,由830位用户报文经编码后生成,必须解码才能还原成830位用户信息,还原后按位查找校核的方法不直观且容易出错,对于报文内的汉字编码更是无能为力。为此,借助Excel的VBA工具,编写报文自动解码显示工具,完成报文内容的显示,特别是对汉字的显示,可以极大地方便用户对报文的校核和比对。
应答器(组),用于发送固定不变的数据,提供线路固定参数,同时校准里程累积的定位误差。应答器生产厂家根据设计院提供的地面数据和相关标准生成830位的用户报文,用户报文由帧标志、用户信息包和信息结束3部分构成。
帧标志占用50位,记录应答器的信息传送方向、应答器组的数量、应答器编号和信息类型等信息。用户信息包,可以根据该应答器的功能,选择21种不同结构和功能的信息包。文本信息包(ETCS-72)中文本信息编码每个汉字利用2个字节表示,字库编码采用GB18030字库。用户信息包最大为772位,当信息内容超过772位时,通常需要多个应答器构成一组,共同完成数据传输。信息结束占用8位,等于“11111111”表示信息帧结束。
830位的用户报文经过编码成为1023位的应答器报文,该报文编写入应答器的同时,还需要发送给用户进行备份。
Excel是微软公司推出的办公工具软件,表格的显示方式使得在进行数据分析、统计和显示时非常方便和直观。VBA是Visual Basic For Application的简称,是建立在Office中的一种应用程序开发工具,可以通过它来扩展Excel的功能,来完成复杂和重复的工作。
VBA是通过运行宏(在Visual Basic中编写的分步过程)来工作的。只需编写单个的宏命令,就可以在Excel表格中调用宏,从而实现对硬盘文件和Excel表格的操作,使工作变得更加简单。
软件在Excel中实现的界面如图1。B2单元格内存放旧报文文件的路径,C2单元格内存放新报文的路径,需要在开始解码比对前手动输入。例如:旧应答器报文存放在“E:Test1”目录下,则需要在 B2单元格填写“E:Test1”;新应答器报文存放在“E:Test2”目录下,则需要在C2单元格填写“E:Test2”。
图1 解码比对软件界面图
填写完毕后即可开始运行相应的宏,图1中G列为按钮,按下相应的按钮后执行对应的VBA宏,分别完成不同的功能。各个按钮的功能如下。
1.导入1。该宏主要将B2单元格描述的文件目录下的所有报文文件名,导入到Excel表格B列中。需要使用VBA中的文件遍历工具,对指定后缀的报文文件名(例如.tlg)进行遍历。宏执行完毕后B列会填入相应的报文文件名。
2.导入2。该宏主要将C2单元格描述的文件目录下的所有报文文件名,导入到Excel表格“C”列中。宏执行完毕后C列会填入相应的报文文件名。
3.模糊匹配。将导入的B列和C列文件名以行为基准进行匹配,相同的文件名存放到一行。如果B列有该文件而C列没有,则C列为空白,例如C13单元格。同理B31为B列没有,但C列有。宏执行完毕后,B列和C列的文件名一一对应。
4.比较解码。使用VBA的二进制文件打开与读取函数,打开B列和C列的报文文件,并对读取的1023位二进制文件按位比较,如果1023位信息一致,则在D列显示“Match”;如果不一致,则显示“NO Match”。C列和B列任何一列缺少文件时显示“No File”。
5.清除数据。清除B列至F列自动读取的内容,以便重新开始读取。
依次点击“导入1”、“导入2”、“模糊匹配”、“比较解码”后,D列显示为比较结果,如果希望查看详细的报文内容,则需要点击E列的文件名。点击后会将该组应答器的报文从1023位还原为830位用户报文,并且将用户报文存放到新的表格中,按照指定的格式进行显示,如图2。
图2为C列和B列均有文件时宏执行完毕后产生的新表单,其中B列和E列是报文变量名,C列和F列为占用位数,D列和G列为报文内实际填写的值,并且使用Excel备注功能备注了数据含义,方便用户查看。当比较的报文存在差异时,差异点显示在I列,方便查看。例如:I24列的数据为464,表示2个报文内的速度信息包(Packet 21)内,“到下一个坡度变化点的距离增量”的数值相差464。
当图1中C列和B列任何一列缺少文件时,只对有文件的列进行解码。C列有文件,则解码后显示如图2中的CBD列;D列有文件,则解码后显示如图2中的EFG列。
图2 报文解码后显示界面
表格的方式分三列显示报文的变量名、位数和实际值,并且在实际值的备注框内输入了变量含义的说明文字。实现了对报文内容的查看,显示直观。当遇到包含汉字编码的用户信息包时,调用Excel的CHAR函数来直接返回汉字,如图3。极大地方便了汉字的查看和校核。
图3 ETCS-72包内汉字的显示
迅速完成新旧报文的比对,比对后可以直观、方便地看到比对结果。点击文件名后可以进一步查看数据差异点,便于校核应答器数据的变化。
当2个以上的应答器构成应答器组时,用户信息包根据其长度可以分配到一组应答器中的任意一个。当比较报文时,存在单个应答器的文件比对不匹配,但是成组后又匹配的情况。软件采用应答器组的方式进行报文解码和比对,杜绝了用户信息包存放位置不同而导致的报文比对不一致。
应答器报文作为列控系统的重要数据,其在报文生产厂家的编写和修改过程中经过了严格的校核和模拟运行验证。
利用Excel的VBA开发的工具,用户可以在管理报文的同时,对应答器报文进行解码、显示和比对,可以用表格的方式显示出报文的变量名称、变量值和含义,对汉字进行显示,使得用户对1023位报文的校核和比对成为可能,并且较大幅度地降低人工校核的复杂度,增加用户对报文内容的了解,方便用户管理报文、阅读报文和对比报文。