许 伟 张 涛 王 涛
许 伟:中国铁道科学研究院通信信号研究所 助理研究员100081 北京
张 涛:中国铁道科学研究院通信信号研究所 助理研究员100081 北京
王 涛:中国铁道科学研究院通信信号研究所 副研究员100081 北京
TDCS(Train operation Dispatching Command System)即列车调度指挥系统,经过十多年的建设,已经覆盖全路18个局,70多条干线,6000多个车站,实现了全路运输调度的集中管理、透明指挥、实时监视、自动调整,减轻了行车调度人员的劳动强度,改善了调度指挥的工作环境,提高了调度指挥系统的自动化水平,成为现代铁路行车指挥不可缺少的重要技术装备。随着铁路运输事业的发展,TDCS的使用、维护等相关部门需求不断增加(如紧追踪报警、车务终端封闭报点、列车占用丢失报警等功能),因而需要对TDCS系统功能进行必要的升级完善。
TDCS作为数据集中、应用分布的C/S架构“7×24”分布式系统,每个节点都是单独部署和管理的,新的功能付诸实施必将升级所有客户端应用程序。目前每个路局TDCS中心管辖几百个车站,包含上千个终端节点。若采用传统的手工方法升级更新,则需人工安装数量众多的终端节点软件,不仅消耗大量的人力、资源与时间,而且很容易出现漏装或者错装等问题。如何解决这种困扰成为当务之急,为此提出车站客户端软件动态更新、自动升级的解决方案和实现方法。
TDCS作为不间断的实时生产系统,对其维护升级有严格的管理办法,即软件更换流程、范围、时间、功能启用都有严格的限制,每次软件升级必须给点才能施工。由于人员和工作量的关系,以往采用手工操作方式只能分批次进行更换,整个系统全部升级完毕需要一两周的时间。在规定的时间内完成大量节点的客户端程序强制升级更新,且升级完毕后启用新功能是本文需解决的问题。
首先,TDCS系统客户端应用软件开发时采用“模块化”的思想,按照功能进行分类,即子系统、子模块生成DLL文件,为软件的快速自动更新提供了良好的先决条件。其次,系统维护时,只需要替换修改过的模块即可,不仅网络传输流量小,而且升级效率高,保障了系统能够在短时间内完成升级。第3,若必须在规定的时间内才能对程序进行升级操作,则需要管理员通过维护台向各个客户端发布升级指令,更新所有客户端最新版本程序,然后强制关闭主程序,再重新启动主程序,退出升级程序,自动汇报给维护台升级状态 (失败或成功);升级维护人员根据维护台升级汇报日志,只需手工操作处理自动升级失败的客户端软件。
自动升级方案整体思路:系统维护人员发布需要升级更新客户端指令,客户端软件启动自动升级程序,升级程序检测文件版本号。当服务器记录的版本号比本地客户端记录的版本号大时,将会自动从服务器端下载最新版本的主程序或者子模块。如果是主程序,则自动重新安装;如果是子模块,则替换现有的子模块;安装或者替换成功,则更新本地版本号,使软件版本保持同步。
依据设计思路,怎样进行版本信息的存储是自动升级功能首先解决的问题。目前,版本信息可以存储在注册表、数据库中。考虑到TDCS车站系统终端计算机采用封装 (用户只能与应用程序交互,其他不能进行访问)模式,本着综合安全与维护方便的原则,本升级软件版本信息存放在.ini配置文件中,同时客户端和服务端分别进行存储。
自动升级程序处理流程如图1所示。
1.将需要升级的主程序或者子模块存储在服务器中。
2.通过维护台向需要升级的客户端发布升级更新指令。
3.客户端收到升级指令启动自动升级程序,检查本地配置文件中的主程序和所有模块的版本号是否比服务器端对应文件的版本号小。若大或者一样则不需要处理,同时发送给维护台最新的版本号码。否则需要进行更新客户端软件。
4.更新客户端软件。首先从服务器下载升级文件至临时文件夹,关闭客户端主程序,将客户端应用程序进行备份,将临时文件夹的程序覆盖当前文件夹,启动客户端主应用程序,向维护台发送并保存最新版本信息,关闭自动升级程序。
5.管理员检查维护台更新版本信息,若存在升级失败的客户端,进行手工操作处理。
图1 自动升级程序处理流程图
虽然车务终端节点程序一样,但是,每个车站的具体业务又有着不同的需求,例如中间站的作业方式、台间计划的合并方式、站间透明站场排列等,都需要单独的配置来实现。每次维护升级前,将测试好的所有配置和可执行代码 (主程序和子模块DLL)放入管理维护的工程库中,然后导出形成固定目录的升级工程文件,再通过自动升级程序进行更新升级,并通过VC 6.0开发工具实现了TDCS车务终端节点网络文件的自动下载更新和升级服务。
创建服务器端程序CreateUpateInfo.exe,其主要功能是收集服务器上TDCS系统工程文件的新版本程序及文件信息,并创建版本文件UpdateInfo.ini。具体步骤如下。
1.程序初始化操作。获取工程文件放置的路径和提供下载服务的地址。
2.调用CBrowseStationCfg类的函数递归,扫描当前路径下按站点分类目录下的所有子目录和文件,形成文件信息列表。
3.按照车站节点进行分类,取文件存储的相对路径与IP作为文件下载的地址,将文件相对路径、修改时间及下载地址写入UpdateInfo.ini文件,结构如下。
[STATIONCFG]
LocalLogDir=d:工程文件 #当前服务器的文件根目录
STATIONCOUNT=1022#总的节点数目
[STATION1] #车站序号
Address=172.19.41.67#远程节点地址,主要客户端用于判断哪个目录是自己的,Ip唯一性。
StationName=天津西172.19.41.67#文件夹名称车站序号
[STATIONFILE1] #序号1车站文件
SubDirCount=3#子文件夹数目
SubDir1=StatermDispConfig#子文件夹1
Count1=2#子文件夹1文件总数
file1=LimitCfg.ini 2011-06-26-16-06#业务配置文件名称及修改日期
file2=TCCDll.dll 2011-06-27-17-18#子模块动态库文件名称及修改日期........
创建客户端程序AutoUpdate.exe,其主要功能是完成版本文件的下载,生成更新文件列表,完成自动更新。以下是客户端程序实现的关键步骤和方法。
1.下载服务器版本文件UpdateInfo.ini。若下载失败则退出更新程序,判断程序如下。
2.判断是否需要更新,若不需要更新则退出更新程序。
upDatefileNameList=CreateUpdateFileList(str-LocalUpDateCfg,strSvrUpdateCfg);
3.按更新文件列表下载文件,并修改本地更新信息,直至全部文件下载成功。若下载失败则退出更新程序。
4.若下载成功,关闭主程序,备份文件、同时移动临时文件到主程序目录下,启动主程序,关闭更新程序。
自动升级功能已成为目前软件系统不可缺少的功能,不仅大大提高了企业软件升级的速度和对业务的影响,而且大大降低维护安装费用。本文所述功能在TDCS 3.0的版本程序测试环境中得到了很好的应用,极大减轻了测试环境中软件更换的工作量。目前,只是实现基本升级功能,今后还可以考虑应用解压缩技术、多线程下载等技术进一步提高升级速度,提升维护服务质量。
[1] 铁道部运输局.铁路列车调度指挥系统(TDCS)[M] .北京:中国铁道出版社,2006.
[2] 刘朝英.中国铁路分散自律调度集中[M] .北京:中国铁道出版社,2009.
[3] 杨继家,张丽静.面向C/S模式下的客户端软件自动升级的实现[J] .计算机应用,2005(5):290 -293.
[4] 何航校,蒋兆远.一种改进的通用客户端自动升级模型及实现[J] .兰州交通大学学报,2005(8):110 -113.
[5] 秦燕燕,许伟.有效冗余备份构建可靠的TDCS通信网络[J] .铁道通信信号,2007,43(12):35-37.
[6] 秦燕燕,许伟.TDCS网络维护及故障分析[J] .铁道通信信号,2007,43(9):45 -47.
[7] 许伟,杨励雅,秦燕燕.天津集中台列车运行阶段计划自动调整[J] .中国铁道科学,2008,29(2):114-119.