刘玉芝,石宇平,吕 洋,周 欣,李 颖
(石家庄铁道大学 电器与电子工程学院,石家庄 050043)
ZPW-2000无绝缘移频轨道电路是我国目前性能最先进、应用最广泛的轨道电路,也是“高铁走出去”的必备产品。轨道电路是保障列车正常运行的重要手段之一,轨道电路故障不仅影响行车效率,更关乎人的生命安全[1]。为保证轨道电路等信号设备的正常工作,铁路信号工必须有过硬的专业知识和丰富的实践经验,为了加强业务技能,利用轨道电路实训系统进行日常学习必不可少。但是,既有ZPW-2000轨道电路实训系统电路故障的设置多依赖人工手动设置,如剪断单条信号线、拔下某个继电器等,故障设置过程繁琐,需要有专人在设备旁进行故障设置操作;经常对线材、焊点、继电器进行动作,可能会对设备器件造成不可逆转的损坏,导致设备无法正常工作;人工设置故障还可能导致故障点设置不清晰、故障设置错误、设置的故障不具有可恢复性、设置故障时间长等[2];另外,设置故障与解决故障之间不具备独立性,用户在检测设备故障时可能会受到故障设置状态的干扰。而且随着列车速度、密度的不断变化,ZPW-2000等信号设备的故障类型不断发生变化,故障练习的需求量大大增加,一些既有设备的故障设置方式、速度及故障设置数量已不能满足现场需求,新型ZPW-2000轨道电路故障诊断系统的设计研发工作迫在眉睫。因此,在既有设备的基础上进行改进,设计了一套新型ZPW-2000轨道电路故障诊断系统。
故障诊断系统的软件选用Visio Basic语言,该开发语言具有强大的人机交互功能,可以快捷地创建Windows窗口,并具有代码简洁易懂、编程效率高和调试简单等优点。单片机的控制信息(如故障选择、执行修复等)由用户在软件系统中设置,并通过串口接收。设计要求继电器执行完动作后,需采集继电器接点的状态并将信息反馈给用户,即通过上位机发出控制指令,并实现下位机状态信息的采集回传和显示。故障诊断系统软件操作流程图如图1所示。
图1 故障诊断系统软件操作流程图
故障诊断系统软件界面主要设计了“设置”“修复”“多置”“复位”“接收”几个按钮,为了不影响用户观察电路,按钮集中放在了界面的顶部。各按钮的功能为:“设置”按钮检测到点击事件后,执行的动作内容主要是打开计时时钟及通信端口,将存储在数组“gz(84)”中的文本发送至单片机主机,同时在Text2中显示串口的状态和文本的长度;“修复”按钮被触发后同样执行打开串口操作,向单片机发送数据,控制继电接点的开闭;点击“多置”按钮表明用户可连续点击多个故障点后进行一次设置即可,不必逐一设置,“多置”按钮设计更加人性化,用户可根据需求自主选择设置方式;“复位”按钮的程序为软件的初始化程序,单击后软件恢复最初的上电状态;设置“接收”按钮是为了接收单片机传回的数据,打开软件后需先点击一次“接收”按钮,才能及时收到下位机的故障状况。界面还预留了足够空间,以便于后续开发过程中对设计进一步优化。
为方便用户根据需求对局部电路进行故障设置的操作,电路图被设为用户界面的主背景。对比研究发现,PictureBox控件的功能要强于Image控件,它不仅可以作为其他控件的容器,而且当图片框控件发生拖曳事件时,其中的CommandButton控件会随着图片框一起移动,不会错位。所以本设计采用了PictureBox控件,将所需电路图在AutoCAD中绘制好后,放在PictureBox控件中来实现背景界面的显示,并根据软件的功能考虑用户界面和按钮设置布局。
所有的故障点按钮均设置在PictureBox中,按照电路故障点的实际位置设置故障点按钮,当发生click事件时先检查故障点按钮的背景颜色,背景颜色为白色表示该按钮未被选中,电路接点处于连通状态;背景颜色为粉色表示该按钮被选中,电路接点断路。故障点按钮执行程序流程图如图2所示。
图2 故障点按钮执行程序流程图
故障点的设置是通过识别故障数组gz(84)中的值来实现的,数组的第一个值为“123(十六进制为0x7b)”是传输开始标志位,数组的最后一个值“125(十六进制为0x7d)”为传输结束标志位,中间的gz(1)~gz(83)为83个故障点的数据值。设置故障点时,系统程序在检测完故障点按钮背景颜色后要在故障数组中修改相应故障号码的数据值,83路故障在故障数组中的初始值均为“126(十六进制为0x7e)”,当有故障时,将故障数组中对应的位置设置为故障号码,83路故障数组对应的故障号码为33~115(十六进制为0x21~0x73),比如:当第1路有故障时,gz(1)对应值为33;当第83路有故障时,gz(83)对应值为115。这样每一路故障都有自己的故障号码,程序读起来更清楚,如果有数据丢失或错位,也可以及时发现。当系统程序检测到故障点按钮背景颜色发生变化时,便会对“temp”数组变量进行更改,temp用文本框显示,本系统软件运用了InStr函数和Mid函数。InStr函数能在一长串字符string1中找到某一短串字符string2的首字符位置;Mid函数能够在string字符串中截取一段固定长的字符串。这样在当有故障点被取消选中,可以使用InStr函数找到故障号在temp字符串中的位置,并记为p,然后用Mid语句将temp的1~(p-1)位置的字符和(p+3)之后的字符组合起来,实现对故障号的删除。
故障诊断系统软件界面如图3所示,该界面充分考虑用户的使用体验,尽量达到人性化设计。
图3 故障诊断系统软件界面图
下位机主要分为3个部分,下位机主机、4个负责驱动(电子继电器)的从机、4个负责数据采集(电子继电器接点状态)的从机。下位机主机负责与上位机进行通信,从上位机接收通过串口发送过来的故障数据,然后对数据进行处理,将故障数据推送给对应的电子继电器,同时将采集回来的继电器状态数据发送给上位机;4个负责驱动的从机负责驱动电子继电器,每个从机可驱动24个继电器,接收到上位机软件通过串口发送过来的数据后将相应的数据推送到P口,控制电子继电器的通断;4个负责数据采集的从机采集继电器接点的状态,上电后电子继电器全为打落状态,当继电器吸起后电路断开,模拟故障的产生,同时指示继电器得电吸起的LED亮灯,采集LED前端电压传回单片机进行显示。
本系统采用STC89C52RC型号的单片机来完成数据接收与继电器驱动工作,采用C语言对单片机进行编程,在接收故障点数据时,采用主机接收然后分配至各个从机的方式。从VB传过来的数据并不是直观的故障号码,而是故障号码加32。当下位机接收到上位机传输过来的83路故障点的数组时,先对数组进行处理,每个数值减去32(十六进制中即为减去0x20)变成“易读”的故障点后再进行相应的执行操作。由上位机发送过来的故障信号也可直接发送至分机进行故障处理,即将串口通信的TXD,RXD,GND接到每一个驱动从机上,对故障信号共同处理,同时执行,这样则更加快捷。故障信号由单片机P口输出,信号电流经过达林顿放大后输出至电子继电器线圈。在单片机与电子继电器之间还设计了光电耦合电路,防止单片机损毁[3]。
上位机与单片机之间的通信是系统稳定可靠运行的重要环节。本设备采用RS232串口进行通信,该通信方式比较简单,用户可以根据编程对通信口进行操作(以便将来改进),通信协议由用户程序控制。单片机采用TTL逻辑电平,RS232使用EIA-RS232C逻辑电平,而两种高低电平的逻辑状态规定正好相反,要想将计算机和单片机连接,必须用MAX232芯片在电路中进行电平和逻辑关系的转换[4]。PC机与单片机之间点的连接关系如图4所示。将MAX232芯片焊接在电路板前端,信号经过电平转换后传送给单片机,主要用到TXD,RXD和GND串口。
图4 PC机与单片机之间点的连接关系
上位机和单片机进行通信时,首先分别对各自的串口进行初始化,确定串口工作方式,设定波特率(两者应一致)、传输数据长度等,然后才开始数据传输。两者之间的通信,采用VB软件中的MSComm控件实现。VB提供了两种处理通信问题的解决方式:事件驱动方式和查询方式[5]。本设计主要使用事件驱动方式,当用户有响应、触发一个事件时,MSComm控件上的OnComm事件会捕获这些变化并进入相应的事件处理函数,执行某些代码。触发OnComm事件可以是接收缓冲区收到的字符,也可以是CD或RTS线上发生的电平变化。
串口通信一次只能传输一个字节,而本设计需要传输的数组由长度为2个字节的85个数组成,为了使传输更稳定,不容易出现误传,于是编写了一个send函数,实现了双字节数据一个字节一个字节的传输。为了使上位机接收的数据值依然显示为对应的故障号,规定接收到两位数时进行一次输出,故障号码均设为两位数(01到83)。这样即可显示出正确的故障号码,而且下位机发送的可变值更少,占用的信息资源更少。
设计的新型轨道电路故障诊断系统,是在既有设备的基础上进行的改进,增加了新型故障点,并通过在电路中特定位置加入电子继电器的方式实现故障模拟与修复的自动化,即通过继电器实现电路的自动断开或闭合。实验表明,该故障诊断系统可以实现ZPW-2000轨道电路故障模拟的集中控制和集中显示,相较于以往的人工设置故障的方式不仅更加快捷,能极大地提高故障设置以及检测修复的效率,而且能实现故障设置和故障检测的分离,使用户不受故障设置者的影响,判断免受干扰;同时,故障设置成功后在上位机给出表示,可以让用户更快地掌握电路故障点的定位及修复方法。