尹恩华, 高振天, 孙 奎
(中船重工海为郑州高科技有限公司,河南 郑州 450015)
目前,随着智能化地铁的迅速发展,对站台门系统的智能化要求也越来越高[1]。对于新建项目可以采用新技术、新产品来满足站台门系统的智能化要求。但是对于已经运营的线路,当需要对站台门系统进行升级时,由于夜间维护时间短,每个站台的门控单元(DCU)数量至少48台(按B型车计算),一台一台的对门控单元进行程序升级或修改参数进行维护既费时又费力。同时,门控单元是站台门的重要核心部件,它的主要功能是控制滑动门的打开/关闭,还负责监测滑动门的状态,将采集到的数据发送到中央接口盘进行存储和显示。一旦在更新程序过程中发生错误或故障,又因夜间无法及时恢复而直接影响地铁的正常运行服务,给乘客乘车带来不便。因此,对站台门门控单元远程在线程序升级技术的研究显的尤为重要,也是站台门智能化实现的关键一步。
该文根据站台门系统监视网络结构,利用TMS320F系列处理器烧写技术[2-3],通过CAN总线通信[4]和CAN模块将整侧DCU的CAN总线连接到站台门便携式测试设备(PTE)上,通过PTE远程下载软件进行整侧或单台DCU程序的更新或参数的修改。PTE远程下载软件通过CAN总线向DCU发送编程指令,相应地将DCU处理器中Flash的升级程序搬移到RAM中,利用Flash281x_API函数库烧写更新程序,直到所有的DCU程序代码都烧写完成后,DCU处理器通过CAN总线向PTE远程下载软件反馈是否更新成功,然后DCU处理器退出编程模式,从而实现对整侧DCU程序同时在线更新或参数修改。
该站台门系统主要采用一个主监视系统监测站台两侧48道站台门(每侧24道),在主监视系统与DCU之间采用CAN总线,每条链线与24个DCU进行通信,每个DCU在网络通信上有唯一的编码,通过编码连接器接到DCU上。站台门DCU的通信网络结构如图1所示。
图1 站台门系统监视网络结构图
该站台门系统DCU的处理器使用TMS320F系列的32位芯片,其片内Flash存储器拥有多种类型的扇区,每个扇区都相互独立,各扇区之间操作互不干扰,但扇区与扇区之间无法相互下发命令擦除或编程对方的扇区。Flash存储器中的扇区除了执行程序正常运行外,还能将程序存储到扇区的不同空间。
(1)使用CCS插件
通过JTAG接口对DCU处理器进行程序烧写。TMS320F系列处理器在CCS编程软件的环境下进行程序烧写,仿真系统将DCU处理器的程序写入Flash[5-7]。
(2)使用Flash281x_API库
利用TI公司公布的编程算法,通过选择擦除函数的扇区、烧写程序到Flash的扇区及校验函数的扇区,然后对DCU处理器进行程序更新,可以方便DCU处理器编程使用。
当现场已经投入运营的站台发生大量DCU需要更新程序或更改参数时,通过JTAG接口编程器只能实现对单台DCU处理器更新程序或更改参数,无法对站台整侧同时进行更新程序或更改参数。通过站台门系统DCU的CAN通信网络,利用CAN总线的通信技术,借助Flash281x_API函数库对DCU处理器程序进行烧写,可实现整侧在线更新程序或更改参数的目的。另外,在线升级方法不影响原有程序运行,不需预先固化底层程序,可对所有程序代码段重新编成。
DCU在正常运行时,若收到PSC发来的编程指令,变换通信ID并再次确认,一旦确认,则进入编程控制模块。为不影响其他DCU状态传送,进入编程模式DCU,通过不同的ID来传送命令和数据,如图2所示。在TMS320F2812中,预留2K字节空间用于编程处理,当应用程序很大或TMS320F2812的RAM空间比较小时,可将DCU处理器的程序分割成几部分发给DCU处理器,DCU处理器接收并烧写完一部分代码后,再进行下一部分程序的接收和烧写工作,直到最后一部分程序烧写完成后停止。
图2 PSC与DCU通信ID
DCU程序架构如图3所示。在上电初始化完成后,把下载控制程序及编程相应的库函数从Flash搬移到RAM,然后进入主循环程序中。在主循环程序中,CAN通信接收采用中断方式,中断接收完成,置通信数据标志,一旦判断有通信数据,则进入数据分析处理模块,首先对接收到的数据进行校验,判断命令类型,若不是下载,则进行其他数据处理;若为程序下载命令,则进入下载处理模块,并再次等待程序下载命令,确认下载,然后进行程序下载。
图3 DCU程序架构
下载程序首先变换ID,并对下载命令进行2次确认,若出错,则返回主程序,若为下载,要关闭中断和看门狗,并清除EEPROM,然后分段接收并编程,直到完成。下载程序实现流程如图4所示。
(1)添加库文件
在F2812_nonBIOS_flash.cmd文件的段地址映射内增加lFlash2812_API_V210库文件 Flash28_API:
{
-lFlash2812_API_V210.lib(.econst)
-lFlash2812_API_V210.lib(.text)
}
LOAD = FLASHF,
RUN = RAML0,
LOAD_START(_Flash28_APILoadStart),
LOAD_END(_Flash28_APILoadEnd),
RUN_START(_Flash28_APIRunStart),
PAGE = 0
ramfuncs: LOAD = FLASHF,
RUN = RAML0,
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0
图4 下载程序流程图
(2)把下载控制程序指定到特定段,在主程序编译增加:
#pragma CODE_SECTION(模块1,“ramfuncs”);
#pragma CODE_SECTION(模块2,“ramfuncs”);
#pragma CODE_SECTION(模块N,“ramfuncs”);
模块1-N为在下载程序中所有用到的模块
(3)在TMS320F2812的F1ash中,不允许一个扇区执行Flash的算法对其他扇区擦除或编程,因此需对下载控制程序进行搬移,在初始化添加下列语句:
memcpy(&Flash28_APIRunStart,&Flash28_APILoadStart,&Flash28_APILoadEnd&Flash28_APILoadStart);
memcpy(&RamfuncsRunStart, &RamfuncsLoad Start, &RamfuncsLoadEnd &RamfuncsLoadStart);
InitFlash();
(4)通过CCS编译后生成.OUT文件,利用HEX2000.exe生成16进制文件。
*.out
-map *.map
-o *.hex
-menwidth 16
-romwidth 16
-a(asc)
(5)程序烧写,程序烧写用到TI提供的3个函数:
①擦除扇区的函数为Uintl6 F1ash2812 Erase(SectorMask,&FStatus),其中,SectorMask为擦除指定扇区;&Fstatus为状态值,判断操作是否成功。
②烧写程序到F1ash函数为Uintl6 Flash2812_Program(&FlashAddr,&BuffAddr,Length,&FStatus),其中&FlashAddr为程序在Flash中烧写的起始地址;&BuffAddr为程序当前存放在内存空间的首地址:Length为程序长度;&Fstatus为状态值,判断操作是否成功。
③校验烧写到Flash中的程序为Uintl6 Flash2812_Verifv(&FlashAddr,&BuffAddr,Length,&FStatus)。
首先对需编程的段进行擦除,并对收到的数据进行编程并校验,每次处理2k字数据,直到所有数据均处理完成。
CAN通信,速率100 k,每次传送数据长度不大于4K字节(数据传送是字节,TMS320F2812存储是16位)。
采用8字节CAN数据
12345678站号命令参数代码和数据1低位数据1高位数据2低位数据2高位
其中代码和为其余7字节和的余数。
(1)编程查询命令
PSC下发命令格式(CAN 标识0X000)
12345678站号0Xa00代码和0000
其中代码和为其余7字节和的余数。
编程查询:
一旦DCU 收到0Xa0命令,进入编程模块,变换ID (原CAN 标识0X400,改为0X80),原样返回,等待再次确认命令。
(2)编程地址命令
PSC下发命令格式(CAN标识0X000)。
12345678站号0Xa50代码和0数据1数据2数据3
数据1:地址高字节;
数据2:地址次低字节;
数据3:地址低字节;
其中代码和为其余7字节和的余数。
编程查询:
一旦DCU收到0Xa5命令,进入编成数据接收程序,DCU反馈(CAN 标识0X80):0xff时,仅1号返回,其他原样返回。
(3)数据长度命令
PSC下发命令格式(CAN 标识0X000)。
12345678站号0Xa2数据1代码和00数据2
数据1:地址低字节;
数据2:地址高字节;
DCU反馈(CAN 标识0X80):接收成功时(数据1为“1”,数据2为“0”),地址 0xff时,仅1号返回,其他地址返回,不成功,带本站地址返回(数据1为“0”,数据2为“0”)。
PSC下发命令格式(CAN 标识0X000)
12345678站号0Xaa0代码和0000
数据为“0”;
编程命令:0Xaa;
参数:一旦DCU 收到0Xaa命令,进入编成程序。
DCU反馈(CAN 标识0X80):成功时,地址 0xff时,仅1号返回,其他地址返回,不成功,带本站地址返回。
12345678站号0Xaa参数代码和0000
参数:“1”编成成功,“0”编成失败。
PSC下发命令格式(CAN 标识0X000)。
12345678站号0xad0代码和0000
数据为“0”,编程命令:0Xad
参数:一旦DCU 收到0Xad命令重新启动,DCU反馈(CAN 标识0X80):成功时,地址 0xff时,仅1号返回,其他地址返回;不成功,带本站地址返回。
PSC下发编程数据格式(CAN 标识0X40)。
12345678数据1数据2数据3数据4数据5数据6数据7数据8
一帧(4096)数据接收完成。
通过以上软件流程及协议,利用VB汇编语言编写生成PTE远程下载软件,软件界面如图5所示。将该软件放入站台门便携式远程测试设备系统文件下,需要更新的程序放入PTE远程下载文件夹下,文件的命名为bldc3_1.out,通过CAN模块连接PSC监视系统整侧DCU的CAN总线接点,然后选择整侧或单个DCU的编号,点击16进制转换,最后点击下载程序进行程序更新,当程序更新完成后,PTE远程下载软件会弹出下载成功或下载失败的窗口提示,从而判断更新程序是否成功。
图5 PTE远程下载软件界面
该文通过CAN总线通信实现了对站台门门控单元远程在线程序升级,充分利用TMS320F系列处理芯片的内部Flash资源,在不需要增加其他硬件的基础上,实现在线远程程序更新或参数修改。该方法已在既有运营地铁线路上成功应用,解决了站台门系统门控单元整侧在线程序更新问题。