基于Matlab 面向对象编程的电气化铁路牵引仿真算法实现
2021-03-29白小伟段成刚
白小伟,段成刚,郭 磊
0 引言
Matlab 在电气工程及牵引供电系统计算中应用广泛,尤其是在电路网络模型的构建、方程求解、数据处理等方面,具有简单、智能、高效等优点。由于牵引计算专业性强、模型复杂、数据量大,早期通过编写脚本语言进行的计算多采用过程式的编程,但是面对系统规模的增加,用户数据交互频繁,这种过程式编程在模型创建、算法分析、数据交互等方面局限性很大,无法满足工程需求。如果采用面向对象的编程(OOP)方式,将极大地简化整个工程的仿真计算,降低计算难度。
列车牵引计算仿真以研究列车牵引运动力学及电气特性为基础,借助算法实现列车牵引过程的模拟,最终得到工程预期结果。本文采用基于Matlab 的面向对象编程(OOP)方式,将机车、线路、控制策略进行抽象,采用UML 图对机车牵引仿真计算的关键步骤进行说明,其方案的代码实现相比采用C#、Java 等编程更加简单高效。
1 方案设计
1.1 类的实现方法
在Matlab OOP 中实现类设计,其方法与采用C#、Java 等语言类似,同样离不开类的封装、继承、多态的特性,只是代码实现上发生了变化。Matlab 的OOP 代码更加简单。
Matlab 类定义采用“classdef…end”语句,其中属性定义采用“properties...end”,方法定义采用“methods...end,最后采用脚本对类实现封装。程序中采用“<”符号实现继承,提高代码的复用性;在设计结构中,采用类的层次化设计,从虚拟到具体逐步演化,灵活应用多态增强程序的扩展性能。
采用Matlab 类实现机车类的定义示例如图1所示。由于类脚本编程中省略了变量类型的定义,相比C#和Java 要智能很多,便于用户将精力集中于本专业算法编程。
图1 Mat lab 类设计程序示意图
1.2 牵引计算软件结构
列车牵引计算软件的操作过程通过输入机车、线路、编组、运行等数据,实现牵引仿真计算。采用UML 图对模块进行说明,如图2 所示。
图2 软件模块化示意图
在本软件中,线路数据是通过Matlab 读取Excel 表格数据,完成线路的车站、坡道、弯道等数据提取,存储在“cell”数组中。“cell”元包数据类型是Matlab 独有,便于多维数据操作。线路数据表示意如表1 所示。
表1 线路数据表示意
应用Matlab 构建机车、车辆类,如图3 所示。采用 UML 类图简明直观展示了类的构建方法,及类之间的泛化关系,利于机车模型多态的实现,提高代码复用性。
图3 机车类
除了线路、机车信息数据的建模,列车牵引计算中最重要的是列车运动控制逻辑的实现,即对发车、停站、加速、匀速、制动等进行控制。本文采用给定速度曲线的跟踪算法,控制列车的运行速度在目标速度值附近。其控制逻辑中,关键点是通过实时提取线路位置信息、列车运行状态,与列车实际位置进行对比,经过信息综合后,调用牵引计算算法,如图4 所示。例如,在仿真过程中,机车位置处于下坡区段,速度未达到目标值,则列车牵引状态标志位置1,否则置0。这样可以实时调整机车牵引状态,兼顾停站、限速、信号机等实际控制条件。所有逻辑判断均在牵引算法库中实现。
图4 列车运行逻辑判断时序图
2 计算实例
机车类型为SS4,车辆类型为滑动轴承DG4,限于篇幅,机车牵引特性、制动特性曲线、车辆闸瓦压力等数据参见《TB/T 1407.1-2018 列车牵引计算 第1 部分 机车牵引式列车》。特性曲线拟合采用Matlab 线性拟合函数。列车牵引质量为100 t,停站时分300 s,仿真步长为0.1 s。
机车运行速度仿真曲线如图5 所示,图中显示全线车站分布及里程,机车在车站发车、停站的过程模拟在速度曲线中可以看出。区间限速80 km/h,采用速度跟踪算法,使机车速度保持恒定。
图5 机车牵引计算速度仿真曲线
牵引计算的合力曲线如图6 所示,为说明机车运动过程中出力状态,图中将坡道数据放大10 倍后叠加在合力曲线中,验证在上/下坡道过程中机车的出力,仿真结果显示正确。
按照牵引计算原理计算得到机车合力后,通过推导计算可得到机车瞬时功率、电流值,同时可以得出功率及电流的统计值等,本文不做重点论述。
由于本研究中列车运行控制是基于给定速度曲线的跟踪控制,速度曲线、合力曲线出现类似脉宽特性实属正常。
图6 机车牵引合力/速度结果
3 结论
本文采用Matlab 面向对象(OOP)编程,给出了电气化铁路牵引计算算法的设计方案,实现了列车运行建模与运动控制计算,最终得到了列车合力、速度曲线。通过对列车牵引过程的仿真计算,了解机车出力状况,可为后续计算提供依据。由于面向对象的编程技术灵活性高,文中尚有诸多不足之处,待将来进一步完善。