基于上位机场景还原的下位机数据帧异常定位方法
技术领域
本发明涉及通信领域,特别涉及下位机(DSP板卡,服务器等)通过网线、串口、USB口以及蓝牙、WIFI等与PC、PDA等上位机终端设备通信时,通信应用模块。
背景技术
随着科技的发展,人们社会生活水平的提高需要大量的通信软件予以支撑。而在使用或者开发这些通信软件时,常常会遇到各种问题。
在使用上位机和下位机模式的系统中,要解决这些问题,以往的办法是通过下位机与上层应用软件联调来查找问题。这一方法在某些情况下,比如下位机设备紧张、开发人员不在问题发生地点等情况,就无法实现与上位机联调解决,从而延迟了解决问题的第一时间,降低了工作效率。此外系统在非开发地点发生的应用问题,以前多采用技术支持人员向开发人员描述现场环境和现象的方式帮助定位问题,但这种方式存在描述不清晰等缺点。
发明内容
本发明要解决的技术问题是,克服现有技术缺陷,实现了上位机的通信应用模块脱离下位机独立调试以及还原设备运行场景的功能。
本发明提出并实现了一种基于上位机场景还原的下位机数据帧异常定位方法,地点1的上位机通信应用模块,在与下位机的通信时,采集并保存下位机的通信数据文件,所述通信数据文件包括正确数据文件和异常数据文件;将地点1的上位机保存的通信数据文件传输到地点2的上位机上,地点2的上位机通信应用模块通过回读正确数据文件重现地点1的运行场景并进行独立调试,回读异常数据文件定位通信数据异常问题;
上位机通信应用模块采集并保存下位机的正确数据文件和异常数据文件时,包括以下子步骤,
步骤101,启动采集线程,
步骤102,判断是否终止采集线程,是则采集线程结束,否则循环判断消息帧是否到达,到达则进入步骤103;
步骤103,检测消息帧是否为正确帧,是则进入步骤104,否则是异常帧,进入步骤106;
步骤104,把正确帧写入正确数据文件FILE1;
步骤105,对正确数据文件FILE1中的正确帧进行解析,然后返回步骤102;
步骤106,把异常帧写入异常数据文件FILE2,然后返回步骤102;
上位机通信应用模块通过回读正确数据文件重现地点1的运行场景并独立调试时,包括以下子步骤,
步骤201,启动回读线程;
步骤202,判断是否终止回读线程,是则回读线程结束,否则进入步骤203;
步骤203,计算正确数据文件FILE1尺度,尺度为FILE1字节数与帧最大长度的比值;
步骤204,判断是否读完正确数据文件FILE1,是则返回步骤202,否则进入步骤205;
步骤205,按帧长读取正确数据文件FILE1,然后检查读取的帧是否正确,是则进入步骤206,否则并返回步骤204读取下一个帧进行处理;
步骤206,解析消息帧,调试上位机各处理模块,然后返回步骤204;
上位机通信应用模块回读异常数据文件定位通信数据异常问题时,包括以下子步骤,
步骤301,启动定位异常线程,计算异常数据文件FILE2尺度,尺度为FILE2字节数与帧最大长度的比值;
步骤302,判断是否读完异常数据文件FILE2,是则结束流程,否则进入步骤303;
步骤303,按帧长读取异常数据文件FILE2;
步骤304,检查读取的帧是否正确,否则进入步骤305,是则进入步骤308;
步骤305,返回步骤302;
步骤306,定位独立消息填充异常,记录并返回步骤308;
步骤307,正确解析独立消息,解析完毕返回步骤308;
步骤308,设一个帧中有k条独立消息,判断帧中k条独立消息是否检查完毕,是则返回步骤302,否则继续执行步骤309;
步骤309,从k条独立消息中取一条未检查的消息,检查独立消息是否正确,如果正确则跳到步骤307,否则跳到步骤306。
而且,步骤205和304检查读取的一个帧是否正确,实现方式为,验证帧中的各独立消息总体长度之和与帧头中填充的长度是否相等,如果相等则该帧是正确的。
而且,上位机通信应用模块提供三种运行模式MODE1、MODE2和MODE3,
在MODE1下执行采集并保存下位机的正确数据文件和异常数据文件,
在MODE2下执行通过回读正确数据文件重现地点1的运行场景并独立调试;
在MODE3下执行回读异常数据文件定位通信数据异常问题。
本发明提出的通信应用模块调试及场景还原方法,不再依赖下位机和技术支持人员,能够自动化完成定位、对设备进行巡检,提高了故障排除效率。
附图说明
图1是本发明实施例的通信应用模块三种运行模式对应的处理流程。
图2是本发明实施例的上位机采集、分析、保存与下位机通信的数据文件的流程图。
图3是本发明实施例的本发明实施例的上位机回读正确数据文件独立调试的流程图。
图4是本发明实施例的上位机回读异常数据文件定位通信数据异常问题的流程图。
图5是本发明实施例的原理图。
具体实施方式
结合附图,提供本发明实施例具体描述如下。
以下结合附图对本发明采用通信应用模块处理下位机数据帧数据调试及场景还原方法进行说明。
参见图5,这种方法的原理:地点1的上位机通信应用模块,在与下位机经过通信链路的通信时,采集并保存下位机的通信数据文件(简称数据文件F,包括正确数据文件和异常数据文件);将地点1保存的通信数据文件在地点2的上位机通信应用模块进行回放分析或调试,可以重现系统应用的地点1的运行场景以及脱离地点1的下位机进行独立调试。具体实施时,地点1保存的通信数据文件可从地点1的上位机通过网络传输到地点2的上位机;或者用U盘等方式拷贝入地点2的上位机。
具体实施时,本发明对现有技术中的通信应用模块进行改进,可在通信应用模块中定义MODE1、MODE2和MODE3三种运行模式,这样任意地点的上位机,可根据需要设定通信应用模块的运行模式。如图1所示,其中MODE1为采集模式,MODE2时为回读历史模式,MODE3为正常运行模式。在MODE1、MODE2和MODE3三种模式下,都会执行解析,具体实施时通信应用模块中可设置解析模块用于完成解析工作,解析过程实现可参考现有技术。
MODE1和MODE2的区别与联系:
MODE1采集模式时,通信应用模块处理数据为下位机上传的实时通信数据。当通信应用模块接收下位机上传数据后,首先执行了一个采集即保存原始二进制数据流的操作,然后再执行解析模块;这一处理流程确保MODE1采集的数据是无修改的原始数据,由此可以保证MODE2回读数据与原工作场景数据的是完全相同的。
MODE2回读历史模式时,通信应用模块处理的数据不再是下位机实时的上传数据,而是在MODE1时保存的无修改数据;相同点在于MODE2执行的解析模块与MODE1执行的解析模块是完全相同的,或者说是同一个解析模块。由于解析数据相同,解析模块相同,所以,在地点2将通信应用模块设置处理模式MODE2时,将MODE1时采集的数据按照原数据解析模块重新解析,可以再现原采集数据场景。
另外,MODE3为正常运行模式,不采集数据,当消息帧到达时采用同样的解析模块进行解析。
根据以上说明,在地点1,设置运行模式MODE1,运行通信应用模块,按二进制格式采集下位机上传的数据帧,并对该数据帧进行分析和处理;经过处理可以根据数据的校验结果分别保存正确数据文件FILE1并解析或保存异常数据文件FILE2,并对正确数据文件FILE1中的正确帧进行解析。在地点2,设置运行模式MODE2,运行通信应用模块,回读数据文件FILE1并进行解析,则可以重现系统应用地点的运行场景,并调试模块代码,从而脱离下位机实现独立调试;回读数据文件FILE2,可以从异常数据文件FILE2中定位下位机发送的异常帧,并确定导致异常数据帧错误的原因,然后把这一问题通知下位机予以解决,或向相关技术人员发出告警。
具体实施时,本领域技术人员可自行预设下位机发往上位机的消息格式。为便于实施参考起见,提供实施例中下位机发往上位机的消息格式如下表:
表1:通信协议之消息帧 帧接口结构表通信协议之消息帧 帧接口结构表
消息帧头 |
独立消息1 |
独立消息2 |
... |
独立消息k |
表2:通信协议之消息帧 帧消息头接口结构表
表3:通信协议之独立消息 接口结构表
独立消息头 |
2个32bit字,8个字节(BYTES) |
独立消息体 |
m个32bit字,4m个字节(BYTES) |
表4:通信协议之独立消息头 接口结构表
表1是帧接口结构表。下位机发往上位机的消息采用“消息帧”(PACKET_FRAME)形式,第1个32bit字为“消息帧头(FRAME HEADER)”,后面可能跟随k个独立消息,其中k为任意非0的整数值,k最大值可由本领域技术人员预先根据具体工作条件定义。每个独立消息的长度都是4的倍数。
表2是帧消息头接口结构表。帧消息头有32bit,共有4个字节。其包长度FRAME_SIZE的值为帧消息的字节单位数目,是4的整数倍。根据表1定义,假定该帧有k个独立消息,每个独立消息对应的字节数分别为ni,i=1,2,...,k,则
约定FRAME_SIZE的最大值为256的倍数,即256×N,N为正整数,例如N=1,2,3,表示消息帧最多有256×N个字节。
表3是帧中独立消息的接口结构表。每个独立消息都由消息头和消息体构成。独立消息头为2个32bit字,8个字节(BYTES),设独立消息体为m个32bit字,4m个字节(BYTES),m为任意非0整数。
表4是帧独立消息的消息头接口结构表。独立消息的消息头分别由消息类型MESSAGE_TYPE(位宽为16,比特位为15:0)、消息长度MESSAGE_SIZE(位宽为16,比特位为31:16)以及消息交互流水号(位宽为32,比特位为31:0)组成;其中消息长度MESSAGE_SIZE是独立消息的消息头和消息头的字节数之和。
基于上述表1、表2、表3和表4定义标准,可以通过图1处理流程获得正确的数据文件FILE1和异常数据文件FILE2。
图1描述了通信应用模块支持MODE1、MODE2和MODE3三种运行模式的处理流程:首先判断是否设置为运行模式MODE1,
是设置为运行模式MODE1,则判断消息帧是否到达,到达则采集模块保存采集FILE,包括正确数据文件和异常数据文件,然后解析模块进行解析,如果没有消息帧到达,线程则处于等待状态。
不是设置为运行模式MODE1,则继续判断是否设置为运行模式MODE3,是设置为运行模式MODE3,则判断消息帧是否到达,到达则解析模块进行解析,如果没有消息帧到达,线程则处于等待状态。
不是设置为运行模式MODE3,则继续判断是否设置为运行模式MODE2,是设置为运行模式MODE2则读取采集的FILE,然后解析模块进行解析。如果不是上述三种运行模式之一,线程则会退出,并告知运行模式错误。
图2为设置MODE1采集模式时的通信应用模块处理流程:
步骤101,启动采集线程,
步骤102,判断是否终止采集线程,是则采集线程结束,否则循环判断消息帧是否到达,到达则进入步骤103;
步骤103,检测消息帧是否为正确帧,是则进入步骤104,否则是异常帧,进入步骤106;
步骤104,把正确帧写入正确数据文件FILE1;
步骤105,对正确数据文件FILE1中的正确帧进行解析,可由解析模块执行,然后返回步骤102;
步骤106,把异常帧写入异常数据文件FILE2,然后返回步骤102。
通过返回步骤102可以再次判断线程是否停止,如果不停止,则继续循环检查是否有消息帧上报,并处理。
具体实施时,通信应用模块内可设置采集模块,由采集模块实现步骤104、105。
实施例在步骤104处,当判断一个消息帧正确时,则把该帧按帧的最大长度256×N字节写入FILE1;然后在步骤105处,解析模块解析正确的消息帧。而步骤106处,当判断一个消息帧异常时,则把该帧按帧的最大长度256×N字节写入FILE2。
图3为设置MODE2回读历史模式时的通信应用模块处理流程:
步骤201,启动回读线程;
步骤202,判断是否终止回读线程,是则回读线程结束,否则进入步骤203;
步骤203,计算正确数据文件FILE1尺度,尺度为FILE1字节数与帧的最大长度(实施例为256×N)的比值,也就是在地点1所采集保存的正确帧的个数。
步骤204,判断是否读完正确数据文件FILE1,是则返回步骤202,否则进入步骤205;
步骤205,按帧长读取正确数据文件FILE1,然后检查读取的帧是否正确,是则进入步骤206,否则放弃不正确的帧不处理并返回步骤204,从而读取下一个帧进行处理;
步骤206,解析消息帧,调试上位机各处理模块,可由解析模块执行,然后返回步骤204。
图3说明了通过正确的数据文件FILE1,在不连接下位机时,独立测试上位机通信应用模块回读正确数据文件独立调试功能的情况。流程说明,即使没有下位机,在只有数据文件FILE1时,仍然可以独立开发上位机应用,并获得满意的结果。在步骤206处,采用虚线框标示在解析模块中完成解析消息帧、重建场景,以及数据调试。在重建场景的基础上,可以进一步进行异常定位,准确描述地点1出现的问题。
图4为设置MODE2回读历史模式时,通信应用模块定位通信数据异常的处理线程。具体说明回读流程通过异常数据文件FILE2,在不连接下位机时,可以独立定位造成数据异常的原因。图4处理流程307虚线框图,为解析模块。
步骤301,启动定位异常线程,计算异常数据文件FILE2尺度,尺度为FILE2字节数与帧的最大长度(实施例为256×N)的比值,也就是在地点1所采集保存的错误确帧的个数;
步骤302,判断是否读完异常数据文件FILE2,是则结束流程,否则进入步骤303;
步骤303,按帧长读取异常数据文件FILE2;
步骤304,检查读取的帧是否正确,否则进入步骤305;是则进入步骤308;
步骤305,说明帧填充错误,返回步骤302;
步骤306,定位独立消息填充异常,记录并返回步骤308;
步骤307,正确解析独立消息,解析完毕返回步骤308;
步骤308,判断帧中k条独立消息是否检查完毕,k条独立消息均已检查完则返回步骤302,k条独立消息中还有未检查完的则继续执行步骤309;
步骤309,从k条独立消息中取一条未检查的消息,检查独立消息是否正确。可根据独立消息的消息号与消息长度,检查独立消息的消息头是否填充正确,根据独立消息体各组成字段的定义,其字段是否越界或者有意义。如果正确则跳到步骤307,否则跳到步骤306。
在步骤205和304处,可以检查读取的一个帧是否正确。判断办法可为:验证帧中的各组成独立消息总体长度之和与帧头中填充的长度是否相等;如果相等,则该帧是正确的;如果不等,则是不正确的。
在步骤309处检查独立消息,和判断一个帧是否正确的方式类似,由于步骤308处的数据帧是一个经步骤304检查过的正确帧,说明帧总体长度和帧头种填充的长度一致,作为一个帧组成是没问题的,但步骤304的这种检查,不保证独立消息是正确的;如果步骤304检查过的正确帧,例如解析出的数据无意义、是解析数据越界等,说明其中有独立消息是填充错误的。
具体实施时,步骤309中,判定某条独立消息填充是否错误,可参考该独立消息的消息体定义。独立消息的消息体中要具体定义该独立消息各功能字段的功能。其中,字段数据类型,根据独立消息的具体情况,字段可以有枚举型、布尔型、整型、浮点、数组、结构体等等多种。字段的值的大小,都是有范围的,并有一定的实际意义。比如:一个字段数据类型是short类型,它在应用模块有意义的值的范围是0-1024;如果填充的值超出了这个范围,解析出来的数据就没有任何意义,可以观察其错误。检查出的错误可通过人机交互界面向用户显示。
以上结合实例对本发明作了说明,应指出,本领域技术人员可以做出各种形式的和细节上的改变,而不偏离由所附权利要求所确定的本发明的精神和范围。