廖献安 上海铁路局电务处
LKJ数据TMIS车站号及线路号辅助查询工具的设计
廖献安 上海铁路局电务处
本局与外局的所有的TMIS站号和工务线路号都各自整合在同一个数据表环境中,这个LKJ编译环境库累积有效及无效数据信息量庞大,加上没有明显的局间范围划分,不易维护。针对这个情况,设计一个简便辅助查询工具,方便地截取基础数据源文件中所有在用线路号及TMIS车站编号,维护LKJ数据编译库环境的准确性和完整性。
LKJ数据;TMIS车站号;线路线编号
编译生成LKJ车载数据线路表(XLB格式)有两种方式,使用编译环境库生成和“TMIS站号名取站名表中名称”即直接取用数据源中站名站号表。由于数据源中站名表只能显示一个TMIS车站号,当上下行同一车站号设置不同的TMIS号时,显示数据下行的TMIS车站号。上海局要求精准控制,编制LKJ临时数据做到LKJ上下行控制不缺漏,故选择环境库文件编译生成LKJ车载数据线路表。机车动车LKJ基础数据编译环境为同一个库,这就要求本局外局施工、跨局径路变动、临时任务需求,依据LKJ数据实际变动同步进行环境的更新。
而外局维护方式不尽相同,个别铁路局使用第二种方式进行编译,对编译环境库不作要求,在交接数据时从编译环境库中导出的TMIS车站号TXT文档数据存在不全或不准确的问题,不能当做依据进行修改,只能根据修改说明文件调整。同时启用新的TMIS车站名之后原有TMIS车站号是否保留、有临时任务在交接数据源的同时是否交接新增径路涉及的TMIS车站名和相关工务线路号详细说明等也不尽相同,这就造成上海局TMIS车站号、线路表文件的日趋膨胀及个别TMIS车站号、线路号的缺漏的可能性,给日常维护带来很大麻烦。总的来说,目前需解决的问题有:补充完善环境库中TMIS站名表及线路表资料、复核这两个表的准确性、清理无用或错误的信息资料(主要是局管外信息)。
2.1 分解需要查询操作的TMIS车站号和线路号元素存放位置及排列方式(以上海局SH_SW20160921版动车数据为例)(见表1)
表1 取用数据表文件主要数据元素分布表
2.2 对本局机车动车数据源文件数据结构进行规划
取用最新版机车、动车基础源文件,合理规划各局数据存放位置。以动车数据为例,每条数据交路每个行别以未启用的数据元素“GPS数据”分割各局管辖数据信息,编制LKJ基础数据时快速查找定位至局分界处,辅以特定标记“「上**」局数据 开始”、“「**」局数据 结束”注释信息标明各局数据范围。根据优化简单管理及查询的思路,每个行别涉及相关铁路局数据只允许连续集中在某一位置,按上述起止注释范围存放。
2.3 选取数据表文件分析
思维LKJ编制软件编制数据生成的基础数据源文件为后缀d2k格式的文件,车站名文件为后缀czm格式的文件,株洲LKJ数据编制软件生成基础数据源文件和车站名文件都是通用的后缀db格式的文件。虽然上海局一直采用思维LKJ数据编制软件进行数据编制,为避免文件再次转换的流程,本文取用株洲所的数据文件,同时拷贝LKJ数据编辑工作站的环境库文件,TMIS车站号数据文件T_TMIS.db和线路号数据文件Dmsj_xlh.db。
用数据库工具打开取用的 LKJ数据源文件SH_SW20160921_D、站名表文件SH_SW20160921_D_zmb和环境库TMIS表文件T_Tmis,见图1。LKJ数据源文件中TMIS车站号信息存放于数据表的GLB字段中,要获取数据中某个车站的TMIS编号,必须关联到字段为JLH的交路号,字段为SXX的上下行,字段XXLX代码为31。同时,为达到查询统计TMIS车站编号的完整行和准确性,还要匹配车站名表字典站名表文件SH_SW20160921_D_zmb和TMIS车站名字典即T_Tmis文件,组合查询筛选数据结果为“数据交路号,上下行,车站号,车站名,车站TMIS站号,环境库TMIS站名”。以LKJ数据源文件表为基表,查询数据中所有车站信息,能直观的比较检查是否有车站缺少TMIS车站号,或者车站名与环境库TMIS站名表中站名不一致现象。
分析LKJ数据源文件,工务线路名出现在三个地方,车站信息、公里标突变信息和交路(支线)转移信息,见图1。交路(支线)转移信息中线路名依附车站信息和里程突变信息存在,没有单独查询的必要。xxlx字段代码为31或82时,可搜索到字段GHXS(车站信息)和KHXS(里程突变)工务线路号信息,基础数据源文件中线路号信息未包含线路名,须连接环境库线路表字典Dmsj_xlh.db进行查询,组合查询结果为“车站信息线路号,里程突变线路号,工务线路名”。同样,如线路名中覆盖不全,会存在线路名为空的情况。
图1 LKJ数据源文件、车站名表文件和环境库TMIS表文件结构展开图
机车与动车因行走径路的不一致,局管内和管外覆盖的车站和线路也不完全相同,需要用到的TMIS车站编码和工务线路名有差别。对机务部门来说IC卡临时数据的编制并没有作机车和动车之分,车载数据编译环境库只有一个。统一的环境库需要将机车动车数据中包含的TMIS车站名和工务线路名组合叠加起来,查询工具可做到分别截取机车动车各自环境库信息,通过叠加的方式来实现。
4.1 编程工具的选用
Delphi是基于Object Pascal语言的面象对象的开发工具,使用其集成开发环境可以快速地建立应用程序进行数据库开发,它本身提供了很多个可供使用的基础控件,对于非编程专业的人员来说,不需要太专业的软件基础,编制个小软件工具实现日常工作中的需要完全能满足。加上要执行查询操作的LKJ数据源文件数据表就是 DELPHI自带的Paradox数据库,本文选用经典的Delphi 7软件进行编制。根据实际需求设计“LKJ数据TMIS车站号及线路号辅助查询工具”,软件设计框架见图2。
图2 LKJ数据TMIS车站号及线路号辅助查询工具
程序工具采用控件介绍:
(1)标签控件(TLabel)。该控件用于在窗体上显示文字,为查询工具起名和为其他控件加上标注说明文字,以便让使用者了解那些控件的用途。
(2)Memo控件(Tmemo)。该控件用于显示载入的数据表文件全名(不显示路径),在方便在程序中调用所需数据表时使用。
(3)位图按钮控件(TBitBtn)。该控件用于载入文件、进行查询操作等,鼠标单击按钮时触发OnClick事件处理,通常把要执行的程序代码放在这个事件处理中。
(4)下拉列表框(TComBox)。该控件可以通过下拉列表的形式显示出所有可能的数据供用户选择,本文使用两个TComBox控件用于单独查询某个各铁路局(公司)数据的起止范围。
(4)OpenDialog控件。该控件是使用Execute方法,起打开对话框作用,用户单击“打开”或OK按钮,该方法返回值为true。本文使用此控件实现目标数据表文件的打开,并显示与Memo控件之中。
(5)TADOQuery组件。该控件用来以SQL语句形式动态地访问一个或多个表的数据,本文用于访问本地数据库,加上相关SQL查询实现根据需要筛选的记录。
(6)TDBGrid组件。以表格形式最终显示出经过筛选过滤后所需要的数据内容。
(7)TDataSource组件。它是接通DataSet(数据集)与数据感应控件的桥梁,隔离了数据源,使得显示成为了一个可独立的模块。
4.2 查询工具软件功能的实践操作
4.2.1 查询TMIS车站号相关数据
(1)载入最新版动车数据源,动车车站名文件,编译库TMIS站名表和线路表文件。
(2)点击“查询全部TMIS站号”按钮,表格中生成数据源中全部车站名及对应TMIS站名,表中以“TMIS车站号”列为准按从小到大排列,最后一列辅以环境库TMIS站名表字典显示,见图3。
图3 数据源全部TMIS信息查询结果
(3)导出EXCEl表格存档,利用EXCEl过滤等功能帮助分析查看,见图4。
图4 EXCEL表格筛选结果
通过EXCEl表格的筛选功能,筛选出“库TMIS站名”列中“省略、空格、0”对应的记录结果。以标注的红色方框为例,可以看出目前库环境16号数据交路下行963号车站“海安XF_三”车站信息中TMIS车站号填入为0;1号数据交路上行有车站号为“0”的车站,对应车站信息TMIS站号为“204612”,数据编译环境库中无对应TMIS车站名;22号数据交路上行324号车站“城阳青荣场”车站信息中对应TMIS车站号为216202,数据编译环境库中缺少对应TMIS车站号。
4.2.2 查询保存线路号信息
做个测试,在株洲LKJ数据编制软件中人为删除线路号环境库中线路号“20632”至“2636”几个工务线路号,使用本文查询工具进行查询,见图5。
图5 编译库环境线路线编号删除前后比较
重新载入以上四个数据文件(T_Tmis文件为人为删除线路线编号后生成),点击“查询全部线路线编号”按钮开关,查询结构见图6。
图6 筛选数据源中工务线路号结果
导出EXEL表格存档,查询结果按照“工务线路名”这列以“空白”筛选,见图7。
图7 EXCEl筛选处理显示结果
从筛选结果看,人为删除的“2632”-“2636”线路号在“工务线路名”列中显示为空,表明数据中有此线路数据,对应环境库中缺少相应线路名。分析特殊显示为“-”开头的工务线路号,因数据源中字段GHXS(车站信息)和字段KHXS(里程突变)限制最大长度为15位,即-32768至+32768这个范围,而规范中规定线路线编号可使用的范围为1-65535(16位),当线路号大小超过32768时按负数显示。例如TMIS号为-30536,转换方法为216-30536=35000,查询线路线编号环境库35000对应广铁集团的“平南场联”线路名,数据源中对应3号数据交路下行“881-平湖南Ⅰ东”至“882-平湖南Ⅱ场”线路数据。
4.2.3 核对TMIS信息和线路线编号信息的准确性
通过导出的EXCEL表格可以很直观的比较各数据交路上下行车站名中同一TMIS车站编号在TMIS环境库中对应的TMIS车站名,两个车站名不一样或者没有关联,则环境库必然存在问题,见图8。
图8 数据源车站名及TMIS库车站名
4.2.4 根据查询工具导出的动车、机车TMIS和线路名进行库环境整合
以上查询例子是用动车数据源和动车站名文件进行查询,同理载入机车全版基础数据源文件(机车分上海版和非上海版两个版本数据)和车站名文件进行同样的操作,导出机车TMIS和线路名EXCEl表格查询结果。依据株洲LKJ数据编制软件提供导入导出TMIS车站号和线路线编号功能,按其固定的TXT文件格式进行拼合整理,整合完成后利用编制软件的导入功能完成统一版的机车动车编译库环境。
编辑库环境的日常维护工作主要在于局管外的数据源的增删修改操作,局管内属于常态管理,不存在疑难点。本文的查询工具附加一个数据源(文件)范围选择功能,按照数据源中各铁路局(公司)数据注释行起止点单独查询出该铁路局(公司)管内的全部TMIS及线路现编号信息,查询方式筛选方式相同,见图9。链接粘贴完该铁路局(公司)交接LKJ数据源后,通过前后的两版数据的局间TMIS和线路号变化比较,有效弥补部分铁路局(公司)修改说明描述不全的漏洞,维护编辑库环境的完整性。
图9 选择性局间数据查询查询
本文查询TMIS车站号及线路号辅助查询工具的开发,配合思维公司开发的“TMIS编号及线路编号比较”工具使用,对当前LKJ数据编制过程中TMIS车站号及工务线路线编号的管理工作起到很好辅助作用,工作效率得到提高。
[1]飞思科技产品研发中心.《Delphi7数据库应用开发》.北京.电子工业出版社.2003.
[2]《列车运行监控装置(LKJ)数据文件编制规范》.北京.中国铁道出版社. 2015.
责任编辑:许耀元 窦国栋
来稿日期:2017-01-19