列车运行控制实验三实验报告材料.docx
《列车运行控制实验三实验报告材料.docx》由会员分享,可在线阅读,更多相关《列车运行控制实验三实验报告材料.docx(17页珍藏版)》请在冰豆网上搜索。
列车运行控制实验三实验报告材料
列车运行控制
应答器报文组帧
实
验
报
告
学院:
电子信息工程学院
班级:
自动化1301
成员:
1实验目标
1.1实验整体目标
理解应答器报文结构和填写方式;完成应答器报文的解码,并理解应答器报文的应用方式;理解ETCS语言的应用。
1.2实验具体目标
在完成实验二的基础上,填写应答器信息解码程序。
能够将闭塞分区长度和线路限速信息解码出来,填入速度防护程序所需的输入变量中,并通过Excel中列车的运行情况判定程序是否正常实现了相应的功能。
该部分仍为正线接车、18号以下道岔侧线接车、18号以上道岔侧线接车和引导接车四种情况,其具体码序与实验二相同,此处不再罗列。
2实验过程
2.1原理分析
2.1.1应答器报文结构原理
应答器设于各车站进站信号机、出站信号机、区间闭塞分区入口以及电分相区前方、列控系统级间切换点前方、大型桥隧前方等特殊地点,向列控车载设备传输定位信息、线路参数、临时限速等信息。
每经过一个应答器组,车载设备会收到一个完整的、固定长度的报文帧(104字节),其中包含发送线路信息的用户信息包,由于报文以ETCS语言的方式传输,因此接收到的报文是以ETCS语言进行编码后的二进制数据。
控车程序对应答器报文按照规定的格式进行解析和处理,才能获得可用的数据。
ETCS语言组成关系如下:
2.1.2线路参数相关的应答器信息包定义
当列车在线路上正常运行时,接收应答器信息,从而获得轨道区段长度、线路限速等信息,在本实验中,解码的是提供线路限速的线路速度信息包【ETCS-27】和提供闭塞分区长度的轨道区段信息包【CTCS-1】。
【ETCS-27】包中针对速度变化点描述定义情况可用下图表示:
信息包的其他具体结构和变量情况等信息在实验过程中可具体参考实验指导书。
2.1.3整体函数变量情况
BaliseBitToByte()函数中,其输入变量和输出变量为:
2.2仿真环境
本实验的仿真仍在excel中完成,与实验二列车运行的线路相同。
不同的是本次实验中线路上正常铺设区间、进站等应答器组,当列车经过应答器组时,接收它们提供的信息。
具体仿真环境结构如下图所示:
2.3程序编写
2.3.1程序分析
本实验需要编写的仿真程序,即为实验二中控制程序大致流程中应答器信息读取部分,解析应答器报文,并提取出有用的信息计算该应答器组中存储的闭塞分区长度和线路限速,输出给仿真环境,由仿真环境进行数据的进一步转换,变为ATPprotection()程序的输入,完成线路数据的使用,正确完成超速防护的功能。
2.3.2程序框图
2.3.3程序代码
(注:
本部分只列出关键部分,完整代码请查看附录)
实现变量由bit到字节转换,将线路允许速度填充到sLineAllowSpeed数组中
offset=50
VarBitNum=8
TotoalBitBeforeVar=offset
NID_PACKET1=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
//读取NID_PACKET1中的信息
VarBitNum=13
TotoalBitBeforeVar=offset+10
L_PACKET1=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
//读取L_PACKET1中的信息
IfNID_PACKET1=27Then
//判断是否读取线路信息包ETCS-27中的数据
sLineAllowSpeed(0,0)=0
VarBitNum=15
TotoalBitBeforeVar=offset+25
D_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
//读取应答器中速度信息起始点距离
VarBitNum=7
TotoalBitBeforeVar=offset+40
V_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
//读取应答器中最大允许列车速度
VarBitNum=5
TotoalBitBeforeVar=offset+53
N_ITER=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
//速度变化点数量
IfN_ITER=1Then
//变化点数量为1时
VarBitNum=15
TotoalBitBeforeVar=offset+58
D_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
VarBitNum=7
TotoalBitBeforeVar=offset+73
V_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
sLineAllowSpeed(1,0)=D_STATIC
sLineAllowSpeed(0,1)=V_STATIC*5
EndIf
实现变量由bit到字节转换,将轨道电路合并为闭塞分区填充到sBlocks数组
IfNID_PACKET=44Then
//判断是否读取线路信息包CTCS-1中的数据
Q_SCALE=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
IfQ_SCALE=0Then
B=0.1
//获取轨道区段的长度分辨率信息
NID_SIGNAL=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
//获取信号灯情况
VarBitNum=15
TotoalBitBeforeVar=offset+L_PACKET1+73
L_SECTION1=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
//读取轨道区段信息
IfNID_SIGNAL=0Then
//判断是否有信号机
sBlocks(r)=s*B
//有信号机则确定闭塞分区区间长度
s=0
//中间变量置零
r=r+1
EndIf
Next
EndIf
3实验结果分析
实验结果记录表
测试案例
正线接车停车
测试步骤
a.设置初速度200km/h,加速运行;
b.选择正线接车进路类型,直到列车停车;
c.观察所计算的允许速度曲线是否正确;
d.查看记录文件。
测试结果
正线接车
测试结果截图
实验结果记录表
测试案例
18号道岔以下接车停车功能
测试步骤
a.设置初速度200km/h,加速运行;
b.选择18号道岔一下侧线接车进路类型,直到列车停车;
c.观察所计算的允许速度曲线是否正确;
d.查看记录文件。
测试结果
18号道岔以下接车
测试结果截图
实验结果记录表
测试案例
18号道岔以上接车停车功能
测试步骤
a.设置初速度200km/h,加速运行;
b.选择18号道岔以上侧线接车进路类型,直到列车停车;
c.观察所计算的允许速度曲线是否正确;
d.查看记录文件。
测试结果
18号道岔以上接车停车功能
测试结果截图
实验结果记录表
测试案例
侧线引导接车停车功能
测试步骤
a.设置初速度200km/h,加速运行;
b.选择侧线引导接车进路类型,直到列车停车;
c.观察所计算的允许速度曲线是否正确;
d.查看记录文件。
测试结果
侧线引导接车停车功能
测试结果截图
调试记录汇总表
问题描述
原因分析
解决方法
开始运行后图像与实验二完全一致
实验过程操作错误
本实验中为“人工解析”
开始运行后无曲线生成
实验理解错误
在实验二的基础上完成实验三,因此应先将实验二程序正确完成并写入整体程序中,再进行实验三程序的编写和测试
SBlocks()函数运行错误
未对中间变量置零,导致后面的区间赋值错误
对中间变量s置零
Telegram()函数运行错误
未在函数开始前对Telegram进行正确定义
定义Telegram函数并定义类型
4实验总结
本次实验在完成实验二的基础上进行,由于完成实验二时对实验环境及程序编写都有了较为深入的了解,因此完成实验三的过程中难度相对较小,只需增加程序对应答器中相关信息进行读取,数据处理后输出到实验二已完成的程序中即可。
虽然实验过程中没有遇到很大的困难,但实验过程还是让我们有很大收获,首先是对地面设备有了更多的了解,熟悉了应答器的工作方式及ETCS语言,并能通过程序的编写对其进行运用。
综合实验二与实验三,很多函数是系统中已有的,自己编写时直接调用即可,需要我们完成的程序部分也大部分参考了以前的程序,在读懂程序的基础上,还应该自己思考程序的优化与完善,而不仅局限于看懂已有的程序,这是在今后的学习过程中需要提升的。
附源代码
PublicFunctionBaliseBitToByte(Telegram()AsByte,ByRefsBlocks()AsSingle,ByRefsLineAllowSpeed()AsSingle)
'[codeherebegin]
DimNID_PACKET1AsLong
DimNID_PACKET2AsLong
DimL_PACKET1AsLong
DimQ_SCALEAsLong
DimNID_SIGNALAsLong
DimL_SECTION1AsLong
DimL_SECTIONAsLong
DimN_ITERAsLong
DimD_STATICAsLong
DimV_STATICAsLong
DimVarBitNumAsByte
DimTotoalBitBeforeVarAsInteger
DimoffsetAsSingle
DimBAsSingle
DimiAsSingle
DimrAsSingle
DimsAsSingle
offset=50
VarBitNum=8
TotoalBitBeforeVar=offset
NID_PACKET1=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
VarBitNum=13
TotoalBitBeforeVar=offset+10
L_PACKET1=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
IfNID_PACKET1=27Then
sLineAllowSpeed(0,0)=0
VarBitNum=15
TotoalBitBeforeVar=offset+25
D_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
VarBitNum=7
TotoalBitBeforeVar=offset+40
V_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
VarBitNum=5
TotoalBitBeforeVar=offset+53
N_ITER=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
IfN_ITER=1Then
VarBitNum=15
TotoalBitBeforeVar=offset+58
D_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
VarBitNum=7
TotoalBitBeforeVar=offset+73
V_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
sLineAllowSpeed(1,0)=D_STATIC
sLineAllowSpeed(0,1)=V_STATIC*5
EndIf
IfN_ITER=2Then
sLineAllowSpeed(0,1)=V_STATIC*5
VarBitNum=15
TotoalBitBeforeVar=offset+58
D_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
sLineAllowSpeed(1,0)=D_STATIC
VarBitNum=7
TotoalBitBeforeVar=offset+73
V_STATIC=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
sLineAllowSpeed(1,1)=V_STATIC2*5
EndIf
EndIf
VarBitNum=8
TotoalBitBeforeVar=offset+L_PACKET1
NID_PACKET2=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
IfNID_PACKET=44Then
VarBitNum=2
TotoalBitBeforeVar=offset+L_PACKET1+47
Q_SCALE=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
IfQ_SCALE=0Then
B=0.1
ElseIfQ_SCALE=1Then
B=1
ElseIfQ_SCALE=2Then
B=10
EndIf
VarBitNum=4
TotoalBitBeforeVar=offset+L_PACKET1+64
NID_SIGNAL=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
VarBitNum=15
TotoalBitBeforeVar=offset+L_PACKET1+73
L_SECTION1=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
VarBitNum=5
TotoalBitBeforeVar=offset+L_PACKET1+88
N_ITER=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
s=L_SECTION1
Fori=1ToN_ITER
VarBitNum=4
TotoalBitBeforeVar=offset+L_PACKET1+93+24*(i-1)
NID_SIGNAL=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
VarBitNum=15
TotoalBitBeforeVar=offset+L_PACKET1+93+24*(i-1)+9
L_SECTION=ff.GetValueOfVar(VarBitNum,TotoalBitBeforeVar,Telegram)
s=s+L_SECTION
IfNID_SIGNAL=0Then
sBlocks(r)=s*B
s=0
r=r+1
EndIf
Next
EndIf
'[codeend]
EndFunction