基于IsaGRAF的城轨车辆列控软件设计与实现
2022-03-24杨小波冉德强
杨小波,冉德强,张 杨,李 伟
(中车株洲电力机车有限公司,湖南 株洲 412000)
0 引言
目前轨道交通车辆列控软件设计集成开发环境主要有Multiprog、IsaGRAF、CodeSys等,根据开发环境不同各开发平台的软件设计方式略有差异,但平台内使用的编程语言均遵循IEC61131-3标准。本文研究对象为IsaGRAF环境下,列控软件的设计与实现方法,IsaGRAF软件由芬兰EKE电子公司开发。EKE电子有限公司致力于列车通信管理系统(TCMS)和列车通信网络(TCN)设备的设计与生产。
1 ISaGRAF软件
ISaGRAF是行业内领先,同时符合IEC61131-3标准和IEC61499标准的,用于创建工业自动化产品的固件和工作台[1]。
ISaGRAF是一套与硬件无关,并以视窗为开发环境的可编程控制语言设计开发的软件。在ISaGRAF3.3版中更将流程图语言(Flow Chart,FC)纳入成为第六种程序设计语言,使得ISaGRAF完全支持世界上自动化行业的六大程序设计语言,成为最强大的可编程开发工具[2]。ISaGRAF 支持IEC61131-3标准中的5种编程语言[3]。IEC61131-3定义了5种编程语言的语法和描述它们的表示法以及语言元素,如表1所示。
表1 IEC61131-3中的编程语言
1.1 组件及TDBuild工具
开发列车网络控制系统(以下简称:TCMS)软件时,采用的组件有操作系统、固件和TDB文件以及车辆控制单元(以下简称:VCU),远程输入输出模块(以下简称:RIOM)。
TDBuild为ISaGRAF的自带工具,用于定义I/O硬件类型或增加新的数据结构、函数以及功能模块。TDBuild工具可将子系统的所有变量组成一个结构体,每个信号变量的字位偏移都能根据数据类型自动计算,在编码时直接调用生成的结构体即可,无需逐一命名软件中所用的变量,极大地提高了开发效率。
1.2 程序执行特点
ISaGRAF是基于多子程序(以下简称:PRG)的开发环境,软件执行严格按照程序循环周期执行。并且软件执行的顺序与PRG的先后顺序完全对应,如图1所示。VCU程序周期可由用户按需自行配置,在实际项目程序执行周期一般为50 ms。
图1 程序执行示意图
在软件开发时,子程序的前后顺序按图2所示的数据流图进行设置。
图2 程序执行数据流图
1.3 数据传输结构
设备间通信需要将传输的字节包转化成具有实际意义的信号,这类工作在TDBuild里完成。在TDBuild建立数据结构,并为数据结构里的每个信号都确定偏移量,当该数据结构获取到相应长度的数据后,将按偏移量自动分解成每个信号的数值。
1.3.1 TCMS与MVB子系统
VCU与MVB子系统采用MVB端口的结构,每个端口根据预先定义的数据量的不同体现为2字节、4字节、8字节、16字节或32字节的数据包,如图3所示。
图3 MVB端口的数据结构图
1.3.2 TCMS与其他子系统
其他子系统包含非MVB/CAN通信的子系统,主要有SPDS、无线主机等。这些子系统通信所采用的数据结构定义与MVB/CAN子系统类似,区别在于MVB/CAN的数据包大小固定,即使没有足够的数据也仍需要以0填充,而非MVB/CAN子系统则根据子系统数据接口规范文件的需求定义数据结构长度。
2 列控软件设计与实现
2.1 系统介绍
完整的网络控制系统软件主要由参数、变量组、程序和功能块组成。参数主要包括I/O配线和已定义的字,I/O配线是硬件设备板卡地址或各子系统的地址与结构体变量绑定的体现。变量组程序则是按系统将变量分为不同的组,便于调试。程序是实现列车的逻辑控制功能。包括网络初始化、数据输入、数据输出和对各子系统诊断与控制。列车的逻辑控制部分的程序有的需要调用功能块来实现其功能。如司机室占有、加减速度测试等。可根据项目需要自定义功能块实现软件功能。
2.2 软件设计
2.2.1 软件架构
VCU由CPU板卡、MVB板卡以及电源板卡组成。板卡之间通过背板总线VME总线连接。VCU软件结构主要由7个模块组成:硬件输入输出模块、输入输出映射模块、逻辑控制模块、故障诊断模块、记录模块、协议/时间管理模块以及变量字典组成,如图4所示。
图4 VCU软件架构图
根据TCMS系统要求,VCU软件须满足主从自动切换功能,主从设备互为热备冗余。
TCMS中存在2个VCU,正常情况下只有一个VCU为车辆管理的主节点,称之为强主,而另一个VCU则为备份的主节点,为弱主。强主和弱主的区别仅针对子系统而言,通常由主设备完成对车辆的控制。以六编组地铁车辆为例,默认1车的VCU为强主。软件启动时,1车先给6车的VCU发送累加值,6车的VCU比1车VCU则慢1 s。所以6车的VCU先判断出1车的VCU已在线,并且为强主,则6车VCU将不再给1车VCU发送累加值。主从VCU的判断流程如图5所示。
图5 VCU主从判断流程图
ISaGRAF软件应用工程的组织结构如图6所示。在链路架构中,用户可定义程序使用的参数、变量组、程序、函数和功能块;在硬件架构中,用户可配置程序的网络属性(连接到Target的总线类型)、Target配置属性和资源属性;在数据字典中,用户定义变量和参数、定义函数和功能块的变量属性以及引用由TDB工具生成的数据结构体;I/O配线实现了本地变量与其他TCMS设备的数据交换,首先I/O配线将本地变量映射至相应协议的数据包中,再通过UDP、MVB或CAN协议逻辑将数据包发送至总线或以太网,UDP、MVB或CAN协议的实现封装在底层库。
图6 ISaGRAF软件应用工程架构图
2.2.2 变量字典
软件程序中使用到的所有变量均在变量字典中定义,包括全局变量、结构体实例化等。VCU的变量字典依据列车各子系统数据接口规范(MVB通信协议)进行设计。
2.2.3 硬件输入输出
硬件输入输出是VCU与其他子系统进行通信的链接,VCU为每个子系统设定通信参数以及配置数据映射。如前述的输入输出变量通过绑定相应的IO配线通道进行数据交换。
2.2.4 输入输出映射
输入输出映射是以ISaGRAF程序的POU形式体现的,输入输出映射块用于数据的汇总及筛选。加速度测试由P_AccTest程序进行输入输出映射。
2.2.5 逻辑控制
逻辑控制是VCU软件的核心功能,软件的所有控制功能均在这部分完成。
2.2.6 循环记录
循环记录功能主要用于记录周期性的数据,数据包括数字信号和模拟信号,具体的数据列表根据项目确定,记录功能由TDB文件提供的底层C功能块LogData实现。
2.2.7 故障检测
故障检测模块是将VCU获取的各子系统故障信号判定是否触发或恢复,并记录至本地内存,需要记录的信号列表根据项目需求确定。
2.3 软件实现
本文以加速度测试程序开发为例,主要讲述列控软件设计的逻辑控制部分。加速度测试程序使用FBD语言实现。在该程序中调用AccTest功能块来计算列车运行时的加速度。AccTest功能块需要计算列车运行的加速度,利用ST语言来编写更加简洁、容易。加速度测试的程序开发使用FBD语言与ST语言相结合的方式,很好地利用了2种编程语言的优势,提高了开发者的工作效率。加速度测试功能块的参数定义如表2所示。
表2 加速度测试功能块的参数定义
说明:如图7所示,HMI占有端设置的加速度测试起始速度和加速度测试终止速度均有乘以10的运算,此处为单位换算(1=0.1 km/h)。输入变量及其含义如表3所示。
图7 加速度测试程序框图
表3 加速度测试输入变量及其含义
输出变量及其含义如表4所示。
表4 加速度测试输出变量及其含义
车辆操作人员在HMI屏上设置加速度测试的起始速度和终止速度并点击开始测试时,VCU将通过如图7所示的程序计算出列车在该测试区间内的实时加速度、平均加速度和加速距离,再将三者的数据值发送给HMI进行显示。AccTest是加速度测试功能块,其内部流程如图8所示。
图8 加速度测试功能块实现流程图
加速度测试功能块将加速度相关量计算的具体实现过程封装在一起,这样该功能块具有更好的移植性,并且可以对其单独加密,在必要时可以增强技术的安全性。
3 结语
本文利用ISaGRAF实现了列车加减速度计算程序,该程序仅仅是列控软件中的一个子程序,其他程序开发遵循相同的开发规范及设计流程,共同完成车辆的逻辑控制。此外,文中提到的FBD和ST两种编程语言结合的软件开发方式,提高了软件开发效率,便于软件调试,也为轨道交通领域软件模块化设计思想提供了参考。该设计方式已在宁波、昆明等地铁车辆中运用,能高效、可靠地完成车辆控制功能,具有良好的实际应用效果。