文献标识码: A
DOI:10.16157/j.issn.0258-7998.2016.01.025
中文引用格式: 刘彦彦,陆阳,汤俊. 基于电子感应的鱼雷罐跟踪算法的设计与仿真[J].电子技术应用,2016,42(1):95-99,103.
英文引用格式: Liu Yanyan,Lu Yang,Tang Jun. Design and simulation of torpedo car tracking algorithm based on electronic sensing device[J].Application of Electronic Technique,2016,42(1):95-99,103.
0 引言
鱼雷罐的主要作用是运输铁水, 对炼铁、炼钢的生产起着衔接-匹配和协调-缓冲的作用[1],是铁水运输工作中的重要工具。钢铁企业铁水运输工作流程包括从高炉出铁直至铁水运往炼钢厂翻完罐,空罐被运回高炉等待出铁水为止的全过程,需要铁水运输调度能够及时响应生产运行的瞬息变化。然而铁水调度工作因其工作强度异常大、所需掌控信息量繁多、业务流程复杂、生产波动性大等原因,一直是许多钢厂信息化工作的难点,特别是对鱼雷罐的实时跟踪问题,更是难点中的重点[2]。目前,国内对于机车及车辆的准确跟踪定位主要有两种方案,一是通过地面物流信息系统推断车辆位置,该方案需要大量人工干预,成本较低,但是无法准确定位车辆位置,对摘挂钩数量出现错误不能及时发现;二是通过在地面轨道铺设大量的无源标签,在每节车辆上安装标签阅读器及无线通信设备,该方案虽然能较准确地定位车辆的位置,但造价成本极其高昂,只有在小型的企业铁路站才有可能使用这种跟踪定位方案,无法进行大规模推广。
某钢铁企业鱼雷罐车调度运输的各种过程数据信息分散于各个系统中,相关各系统独立运行,需要专业的鱼雷罐跟踪定位系统对现有信息进行有效整合,现有的铁路物流跟踪管理系统大部分是靠人工完成,机车的位置通过GPS定位,而每个鱼雷罐罐体是无源个体,导致鱼雷罐的位置和摘挂情况不明确,不利于提高鱼雷罐周转率和减少人工操作。
针对以上问题,本文提出了一种基于电子挂接器和车列检测器(自研设备)的鱼雷罐跟踪算法。通过电子挂接器和车列检测器把鱼雷罐和机车联系在一起,并使用电子挂接器的自动摘挂算法和点名上传算法把鱼雷罐的当前摘挂情况上传给车列检测器,车列检测器进行点名信息整合,并上传到机车内信息平台,机车信息平台结合多次点名结果得到车列信息,并定位到出故障的电子挂接器。再结合机车的位置信息,推断出鱼雷罐的位置信息,实现鱼雷罐的跟踪和摘挂故障自排查定位。使用C#的windows窗体应用程序[3]和MapInfo 9.5工具[4]设计并实现鱼雷罐跟踪系统仿真软件,以验证算法的正确性,并找出算法中的不足之处加以修正,使鱼雷罐自动挂接和点名上传过程更加形象地表现出来。
1 算法中的物理模型和相关定义
1.1 电子感应装置
电子挂接器(用字母S表示):S是一种电子感应装置,具有近距感知、远距点对点传输和广播的射频通信功能,并可实现自组网传输功能。近距感知距离为0.5 m到2 m之间,远距传输距离大于50 m。实验室环境下,对两个挂接器远距模块之间和近距模块之间进行通信测试,采用CRC校验,丢包率小于1%。S平时处于休眠状态,收到唤醒信号后,转为正常工作状态,如果3个点名周期接收不到唤醒命令,就进入休眠状态,S进入休眠状态之后,内部保存的机车信息和挂接信息全部清空。
车列检测器(用字母J表示):J也是一种电子感应装置,具有远距传输和广播的射频通信功能,它通过点名方式对所挂车辆进行判断,自动采集电子挂接器的挂接信息数据并最终形成一组车列信息,发给机车信息平台以便实现对机车和鱼雷罐的准确定位、跟踪。
J和S信息传递过程如图1所示。
JCt.J表示机车t上安装的车列检测器编号。
JCt.T.S表示机车t上靠近鱼雷罐一端安装的电子挂接器。
JCt.H.S表示机车t远离鱼雷罐一端的S编号。
CPi.H.S表示鱼雷罐s上靠近机车一端安装的S的编号。
CPi.T.S表示鱼雷罐s上远离机车一端安装的S的编号。
N(ij)是CPi.T.S和CPj.H.S通过近距感知方式形成的半双工射频通信链路。
Fi是鱼雷罐CPj上的CPj.H.S和CPj.T.S通过远距点对点形成的半双工射频通信链路。
其中每个鱼雷罐和机车两端的电子挂接器是完全一样的,只有在启动点名的时候,根据数据传输链路方式不同进行标识,把机车t靠近鱼雷罐一端的S标识为JCt.T.S,鱼雷罐j靠近机车的一端的S标识为CPj.H.S,另一端安装的S标识为CPj.T.S。一轮点名结束,这些标识清空。
1.2 算法中的相关定义
定义1: N是近距感知通信链路,N(i,j)是CPi.T.S和CPj.H.S通过近距感知方式形成的半双工射频通信链路,感知距离为2 m。N(i,j)与N(j,i)指同一条链路。
定义2:F是远距点对点链路,Fj是鱼雷罐CPj上的CPj.H.S和CPj.T.S通过远距点对点形成的半双工射频通信链路,感知距离为20 m。
定义3:LM是在CPi.T.S的N(i,j)和Fi出现故障时,进行广播射频通信链路,感知距离为50 m。只用于点名信息的传输,且只有CPi.T.S具有LM,CPi.H.S不具有。
定义4:CM是基于N链路的一种近距感知数据传输方式,其用于点名信息和挂接信息包的传递。
定义5:LS是基于F链路或者LM链路的一种远距点对点数据传输方式。
定义6:Waked_info是由JCt.J通过LM发出的用于唤醒S的唤醒信号。
定义7:Named_info是由JCt.J发出在各个S之间进行传递的点名信息。其格式是m_n,m表示点名类型,m=1代表确认点名(通过CM或LS方式传递的点名信息),m=2代表疑似点名(通过LM传递的点名信息)。n表示发出点名信息的J所在机车ID。
定义8:I是指挂接信息包,I(i,j)是CPi.T.S经过N(i,j)与CPj.H.S形成的挂接信息包,存储在CPi.T.S内。与其对应的I(j,i)是CPj.H.S经过N(i,j)与CPi.T.S形成的挂接信息包,存储在CPj.H.S内。每T1时间CPi.T.S与CPj.H.S进行一次N(i,j)握手链接,如握手成功,则CPi.T.S和CPj.H.S各自内部形成I(i,j)和I(j,i),表明CPi(鱼雷罐i)和CPj(鱼雷罐j)物理上挂接在一起。CPi.T.S与CPj.H.S经过3次握手链接都失败,则更新挂接信息包为I(i,0)和I(j,0),表示CPj摘钩作业离去。
定义9:JC_info是指S从Named_info中提取的机车信息。其格式是m_n,其中m代表机车类型,m=1表示确认机车(从确认Named_info中提取出来的机车信息),m=2表示疑似机车(从疑似Named_info中提取出来的机车信息),n表示机车ID。一个S内部可以保存两个机车信息。
2 算法设计与分析
2.1 鱼雷罐跟踪算法设计
如图2所示,机车开动后,J每0.2 s远距广播一次Waked_info,总共发送10次,S收到Waked_info之后,转为唤醒状态,并立即通过远距广播转发8次Waked_info。J发送完Waked_info之后等待6 s再发送Named_info。S接收到点名信息后,根据Named_info处理算法来处理Named_info。Named_info经过下传Named_info算法向列车尾部传递下去,直至车尾。同时I通过上传I算法向列车头部传递到J上,J通过对I的处理,得到车列信息,J将车列信息上传至机车信息平台,至此,一个点名周期结束。机车信息平台结合几次点名结果得到最终车列信息,并定位出出故障的S。再结合机车的位置信息,推断出鱼雷罐的位置信息,实现鱼雷罐的跟踪和摘挂故障自排查定位。
2.2 点名算法设计
2.2.1 Named_info处理算法
一个S内可以保存两个JC_info,记为m1_n1,m2_n2。Named_info处理算法伪代码如下:
Begin(算法开始)
输入Named_info: p_q;
IF(m1_n1==0_0)则m1_n1=p_q,并下传Named_info,同时上传自身的I;End (算法结束);
ELSE IF(m2_n2==0_0)则m2_n2=p_q,并下传Named_info,同时上传自身的I;End(算法结束);
ELSE IF(n1==q or n2==q)则下传Named_info,同时上传自身的I;End (算法结束);
ELSE IF(p==2)则拒绝此次点名;End (算法结束);
ELSE IF(m1==1 and m2==1) 则拒绝该次点名;End (算法结束);
ELSE下传Named_info,同时上传自身的I;End(算法结束)。
2.2.2 下传点名信息算法
基本思想:当S的N和F链路都正常时,Named_info被逐级向下传递,否则被广播出去。算法关键部分流程如图3所示。
其中注意点是:S以广播的形式接收到的Named_info时要保存广播地址,以便上传I的时候使用LS传输方式。
2.2.3 上传挂接信息包算法
基本思想:当S的N和F链路都正常时,I被逐级向上传递。否则通过LS将I广播至源地址,算法流程如图4所示。
2.3 算法中的关键点以及难点分析
(1)当N链路出现故障时,广播传递Named_info和上传I的过程中特殊情况处理方案。
如图5所示,CPi与CPj之间的N(i,j)链路中断,CPi.T.S进行广播点名,这样能保证把点名信息继续向下传递下去,CPj.H.S和CPj.T.S会收到Named_info。但是,CPm.H.S和CPm.T.S也会收到Named_info,若此时 CPm.H.S和CPm.T.S满足被点名条件,则会接受此次广播点名,下传Named_info和上传I(m,0)、I(m,n)、I(n,m)等挂接信息包,如图6所示。CPi.T.S不仅会收到I(j,0)、I(j,k)、I(k,j)等挂接信息包,还会收到I(m,0)、I(m,n)、I(n,m)。这些挂接信息包上传至JCt.J,JCt.J会得到错误的车列信息。但是由于机车是一直处于向前运动的状态,在第2轮或者第3轮点名过程中,CPm.H.S和CPm.T.S就不会被点到名,所以要综合多次点名结果来提取车列信息中的重复部分,推算出最终的机车挂接信息队列和是否到达车尾。
(2)当F链路出现故障时,广播传递Named_info和I包的过程中特殊情况处理方案。
当某个鱼雷罐CPj的CPj.H.S和CPj.T.S之间的Fj出现中断的时候,则通过N(i,j)链路要求CPi的CPi.T.S进行广播点名,接下来就与2.3.1中的处理方法一致了。
(3)由于点名故障,导致S内部保存的JC_info出现问题的处理方案。
如图4所示,当CPm.H.S被两次错误点名之后,再被其自身所在车列的机车广播点名时,它就不会响应。因为根据Named_info处理算法,其内部保存了两个JC_info,不再响应其他疑似Named_info,导致CPm.H.S不会被点名。当这种情况出现时,经历3次点名周期之后即可被解决,因为每个S在3个点名周期之内不处理点名信息,则进入休眠状态,内部保存的JC_info和I(i,j)被清零。这样在经过3个点名周期之后,此CPm.H.S又可以重新接收Named_info了。
3 算法仿真
3.1 仿真软件设计
本算法仿真软件是利用C#的Windows窗体应用程序和MapInfo 9.5工具设计出鱼雷罐跟踪系统仿真软件来进行算法仿真,铁路铁轨站场图由MapInfo软件绘制而成,MapInfo 含义是“Mapping+Information(地图+信息)”,即:地图对象+属性数据[5],是一种数据可视化、信息地图化的桌面解决方案[6-8]。本软件主要采用多线程技术[9-10]来实现射频信号的互相传递。其系统功能如图7所示。
算法仿真界面如图8所示:图中第一部分为S各个参数实时显示结果和Named_info的传递过程;其中S编号的格式为r_c_t,其中r代表车辆类型,r=1为此S安装在鱼雷罐上,r=2为其安装在机车上;c为S所在鱼雷罐ID,t为S接收点名时刻的位置编号,t=1为目前S在鱼雷罐的H端,t=2为在T端。如1_165_2号S为此S安装在165号鱼雷罐上,目前处于鱼雷罐的T端。故障信息格式为e_f,e为故障类型,e=1为N链路故障,e=2为F链路故障,f为故障鱼雷罐ID。如故障信息2_165,为165号鱼雷罐上的S出现F链路故障。第二部分为系统各个参数预留接口,管理员可以为系统中的参数设置各种值;第三部分为界面的开关控制;第四部分为软件的核心部分,包括机车放置功能,机车挂接、唤醒、点名等命令发送控制;鱼雷罐放置、S障碍预设功能。第五部分是点名结果实时显示模块,这些点名结果是需要J向机车信息平台上传。第六部分是机车和鱼雷罐挂接过程在站场图中动态显示部分。
3.2 仿真结果分析
3.2.1 机车唤醒过程
当机车开动后,首先发起Waked_info,Waked_info得到很快传播,能使本列鱼雷罐都处于唤醒状态。仿真结果如图9和图10,图9是机车开动之后JCt.J没有发送Waked_info,各个S的状态。图10表示JCt.J发送完Waked_info之后,各个S的状态。从图中可以看出,此时各个S的近距和远距感应都正常,说明每个S都已经被唤醒,且没有出故障,N状态为true时,N挂接信息即为S自身的I,N状态为false时, S自身的I为ID+0_000_0;F挂接信息为参考作用,不会上传给车列检测器。图10中电子挂接器2_035_1的N状态为false是因为此电子挂接器位于机车车头部位,即不靠近鱼雷罐的一端。
3.2.2 Named_info处理过程
如图11和图12中的JC_info栏所示,在不设定故障的时候,按照Named_info处理算法,JC_info正常处理Named_info。若接收这次点名就把Named_info加入JC_info里面。
3.2.3 Named_info下传过程
给系统预设一些在实际运行过程中可能出现的故障,这些故障主要包括鱼雷罐T端S近频故障和远频故障、H端S近频故障和远频故障。这些故障出现后,系统会根据下传Named_info算法和上传I算法中的故障处理方法进行处理。
如图11所示,在不设定故障时,Named_info一步步向下传递。如图12所示,在设定故障时,提前设定1_034_1近频感知故障, 1_165_2会出现N链路故障,进而广播点名,点名信息变成2_035,当1_034_2收到广播点名时,继续向下传递Named_info。
3.2.4 挂接信息包上传过程
如图13所示,正常点名时,I经过JCt.J处理显示车列信息,图中表明035号机车挂接165号鱼雷罐,165号鱼雷罐挂接034号鱼雷罐,034号鱼雷罐挂接078号鱼雷罐,078号鱼雷罐挂接132号鱼雷,132号鱼雷罐是车尾。但是当点名过程中,与车辆所在轨道并列的轨道上放置的车辆被车尾广播点名点到后,传回来的I经过JCt.J处理显示车列信息如图14所示,此时应结合多次点名结果来得到车列信息。
在点名的过程中设置078号鱼雷罐H端S近频感知故障,导致1_078_1号电子挂接器和1_034_2号电子挂接器N链路故障,处理后的点名结果如图15所示。当N链路出现故障时,得到的挂接信息包如图16所示,得到的车列信息也可能是与鱼雷罐所在轨道并列的轨道上放置的鱼雷罐被车尾广播点名点到后造成的,所以通过几次点名结果就可以推断出车列信息。经过测试电子挂接器的丢包率为1%,电子挂接器的传输为高频通信,机车信息平台处理挂接信息包的时间基本上不用考虑,所以每个点名周期都是秒级的,基本上可以实现鱼雷罐的实时跟踪。
4 结语
本文结合电子挂接器和车列检测器的各种射频通信方式,提出了一种鱼雷罐跟踪算法,并设计仿真软件以验证算法的正确性。本文算法不仅能得到列车信息,还可以自动排查、定位电子挂接器通信故障和挂摘故障,节省了人力,使铁水运输更加方便快捷。列车员实时得到车列信息后,可以对鱼雷罐实施合理调度,提高鱼雷罐周转率。目前该算法正在某钢厂大力推广使用中,运行稳定。
参考文献
[1] 黄帮福,贺东风,田乃媛.鱼雷罐管理系统的设计与实现[J].冶金自动化,2010,34(4):16-21.
[2] 杨小燕,崔炳谋.钢铁企业铁水运输调度优化与仿真[J].计算机应用,2013,33(10):2977-2980.
[3] JESSE L.Programming C#3.0[M].USA:O′Reilly Media,2007.
[4] 吴秀琳,刘永革,王利军.MapInfo 9.5中文版标准教程[M].北京:清华大学出版社,2009.
[5] 郑贵洲,晁怡.地理信息系统分析与应用[M].北京:电子工业出版社,2010.
[6] 陆垚,孙宏声,牛立军,等.基于MapXtreme2005和C#的GIS图形实现[J].计算机辅助设计,2008,17(6):38-41.
[7] 彭刚,王艳琴,王涛,等.基于MapInfo与MapX的电子地图[J].计算机系统应用,2011,20(9):153-156.
[8] 鹿浩,罗周全.基于MapInfo的矿山通风安全信息系统开发[J].中国安全科学学报,2008,18(2):125-129.
[9] 许涮,冯山.使用C#语言进行多线程程序设计[J].计算机工程,2003,29(5):1-3.
[10] 郑宇生,赵长胜.C#多线程编程技术在数控测井软件中的应用[J].国外测井技术,2012(4):71-74.