wxpython制作解包工具(三)

来源:互联网 发布:鼠大王淘宝 编辑:程序博客网 时间:2024/05/01 02:47

今天完成解包工具第二版(v0.1.0),相对于最初版本,有两个变化

1:报文格式写入XML配置文件,便于后期修改

2:优化工具功能,删除添加报文功能

先上界面,整体布局与初版变化较小,删除报文选择窗口与对应的图标:


再说逻辑:

第一步读取XML配置文件。XML文件中需要提供的信息包括报文的长度、名称和解释,并且按照顺序排序。在读取XML文件时,使用字典和列表存储报文结构信息,每个字典的Key为报文包的名称,而字典的Value为长度、名称和解释组成的列表,程序启动后首先读取XML配置文件,如果文件错误,程序将提示错误。XML文件格式和读取函数如下:

<packet name="PacketHead"><Var id = "0"><Len>1</Len><Name>Q_UPDOWN</Name><Mean>信息传送的方向 (0=车对地,1=地对车)</Mean></Var><Var id = "1"><Len>7</Len><Name>M_VERSION</Name><Mean>语言/代码版本编号 (0010000=V1.0)</Mean></Var><Var id = "2"><Len>1</Len><Name>Q_MEDIA</Name><Mean>信息传输媒介 (0=应答器,1=环线)</Mean></Var><Var id = "3"><Len>3</Len><Name>N_PIG</Name><Mean>本应答器在应答器组中的位置 (000=1,111=8)</Mean></Var></packet>


第二步,解析报文。这里将报文分成四类,分别处理。

第一类:顺序执行类,包括ETCS16、ETCS42、ETCS45、ETCS131、ETCS132、ETCS254、CTCS3、CTCS4、CTCS5

此类报文只需顺序读取报文结构后填入解析信息,执行代码如下:

第二类:循环执行类,包括ETCS21、ETCS27、CTCS1、CTCS2

此类报文在执行时需要寻找关键字“N_ITER”,根据解析出来的值进行循环解析,代码如下:


第三类:判断+循环执行类,包括ETCS5、ETCS41、ETCS46、ETCS68、ETCS72、ETCS79

此类报文在执行时需要除了寻找决定循环次数关键字的“N_ITER”外,还需要针对不同的包寻找各自的关键字。

举个栗子,在解析ETCS68包时,当“Q_TRACKINIT”值为1时,则解析"D_TRACKINIT"值,并跳过接下来的三个字段“D_TRACKCOND”、“L_TRACKCOND”和"M_TRACKCOND";当“Q_TRACKINIT”值为0时,则跳过"D_TRACKINIT",而解析接下来三个字段的值。此时就需要加入关键字判断函数来决定跳过的步长。代码如下:


第四类:也就是中文包ETCS44包的处理,其中包含了顺序执行(CTCS3、CTCS4、CTCS5)和循环执行(CTCS1、CTCS2)

这里需要做的只是判断包名,再调用相应函数。



0 0
原创粉丝点击