一种工程机械设备工况数据解析方法与流程

文档序号:29856813发布日期:2022-04-30 09:36阅读:111来源:国知局
一种工程机械设备工况数据解析方法与流程

1.本发明涉及一种工程机械设备工况数据解析方法,属于工业大数据处理技术领域。


背景技术:

2.在工程机械设备物联网场景中,工况数据以字节报文的形式上传到iot中心,接着iot中心使用xml形式的功能集来解析字节报文,功能集里面定义工况tag内容和每个item项的解析规则,基础的报文格式是tlv格式,即固定字节长度的tag标识,固定字节长度的length标识,后面紧接着由length标识指定的value。
3.但是功能集的内容复杂,包含tag嵌套、length标识长度由特殊tag指定、length标识长度由功能集tag标签的length属性指定、tag在功能集中不存在、package中item项超出对应的字节和功能集中package id是否省略特殊字符等各种复杂情况,导致不同的设备类型使用的不同解析方法,常用做法将所有的item项加载到内存数组,通过比对的方式解析,这种方法只用于包含condition的item项,并要求包含condition的item项必须在作为判断条件的item项后面,所以,现有方法兼容性不强且代码可读性差。
4.因此,本领域技术人员急需要解决功能集内容多样性导致的工况数据解析复杂、效率低、容错差等问题。


技术实现要素:

5.目的:为了克服现有技术中存在的不足,本发明提供一种工程机械设备工况数据解析方法。
6.技术方案:为解决上述技术问题,本发明采用的技术方案为:一种工程机械设备工况数据解析方法,包括如下步骤:步骤0:针对不同类型的功能集抽象提取出内容信息,所述内容信息包括:固定tag字节长度、固定length字节长度、固定value字节长度、可变value字节长度信息、固定tag、功能集package中tag属性名、是否移除tag内容中前面连续的0字符标识和嵌套tag信息,将内容信息写入解析配置文件。
7.步骤1:从解析配置文件中读取固定tag字节长度参数,判断固定tag字节长度参数是否大于0,如果大于0,执行步骤2。否则判断固定tag参数是否为空,如果固定tag参数不为空,执行步骤5;否则结束解析。
8.步骤2:从解析配置文件中读取固定length字节长度参数,判断固定length字节长度参数是否大于0,如果大于0,执行步骤6;否则执行步骤3。
9.步骤3:从解析配置文件中读取固定value字节长度参数,判断固定value字节长度参数是否大于0,如果不为空,执行步骤7;否则执行步骤4。
10.步骤4:从解析配置文件中读取可变value字节长度信息,判断可变value字节长度信息是否不为空,如果不为空,执行步骤8;否则执行步骤9。
11.步骤5:根据固定tag参数和功能集package中tag属性名参数,从功能集中获取对应的package节点信息,如果package节点存在,则执行步骤10;否则跳过此tag解析。
12.步骤6:根据固定tag字节长度参数和固定length字节长度参数,从value中截取tag和length信息,再根据length信息,从value中截取该tag信息对应的value,根据功能集package中tag属性名参数和解析配置文件中的是否移除tag内容中前面连续的0字符标识参数,从功能集中获取tag信息对应的package节点信息,如果package节点存在,则执行步骤10;否则跳过此tag解析。
13.步骤7:根据固定tag字节长度参数和固定value字节长度参数,从value中截取tag信息和该tag信息对应的value,根据功能集package中tag属性名参数和解析配置文件中的是否移除tag内容中前面连续的0字符标识参数,从功能集中获取tag信息对应的package节点信息,如果package节点存在,则执行步骤10;否则跳过此tag解析。
14.步骤8:根据固定tag字节长度参数和可变value字节长度参数,获取各个tag信息对应的value的长度,从value中截取tag信息和tag信息对应的value,根据功能集package中tag属性名参数和解析配置文件中的是否移除tag内容中前面连续的0字符标识参数,从功能集中获取tag信息对应的package节点信息,如果package节点存在,则执行步骤10;否则跳过此tag解析。
15.步骤9:根据固定tag参数和功能集package中tag属性名参数,从功能集中获取对应的package节点信息,如果package节点存在,根据该package标签中length属性值来截取该tag信息对应的value,则执行步骤10;否则跳过此tag解析。
16.步骤10:根据嵌套tag信息参数是否为空,如果不为空,则执行步骤1;否则解析无condition标签的item项,依次执行步骤11、12和13,步骤11:根据byte标签获取该item项在value中起始字节位置和占用字节长度,如果byte起始字节位置或byte起始字节位置加上占用字节长度超过value长度,则跳过此item解析;否则根据endian标签指定大小端方式,在大端存储情况下,对value从左往右按顺序截取字节信息,在小端存储情况下,对value从右往左逆序截取字节信息。
17.步骤12:如果存在bit标签的话,根据bit标签的属性值,获取该item项由byte标签获取的字节长度,byte标签获取的字节长度包括bit起始比特位置和占用比特长度,如果bit起始比特位置或bit起始比特位置加上占用比特长度超过byte标签获取的字节长度,则跳过此item项解析,否则,按bit起始比特位置和占用比特长度获取比特信息。
18.步骤13:根据截取的字节或比特信息,优先使用比特信息,结合expression标签对应的表达式和type标签对应的数据类型,计算出此item项的值,此item解析结束。
19.作为优选方案,所述步骤13还包括:判断原始报文value是否还有部分没有解析,如果有剩余部分没有解析,执行步骤1;否则解析流程结束。
20.作为优选方案,还包括:所述步骤10还包括:根据嵌套tag信息参数是否为空,如果不为空,则执行步骤1;否则解析有condition标签的item项,执行步骤14。
21.步骤14:根据condition 标签对应javascript判断表达式计算结果,如果为true,则按步骤11、12和13解析此item项;否则跳过此item项解析。
22.作为优选方案,所述步骤14还包括:判断原始报文value是否还有部分没有解析,如果有剩余部分没有解析,执行步骤1;否则解析流程结束。
23.作为优选方案,所述不同类型的功能集包括:不同工况类型功能集,不同协议类型功能集,不同厂家类型功能集。
24.作为优选方案,不同工况类型功能集包括:港机m2m功能集,塔机gprs功能集,大吨位起重机功能集,道路gprs功能集。
25.作为优选方案,不同协议类型功能集包括:m2m协议功能集,gprs协议功能集。
26.作为优选方案,不同厂家类型功能集包括:施维英功能集,康明斯功能集。
27.有益效果:本发明提供的一种工程机械设备工况数据解析方法,通过解析配置文件与功能集一起解析工况报文,实现了一种适配各种功能集的解析方法。与现有技术方案相比,本发明的有益效果如下:1.解析流程清晰,简单高效。
28.2.工况解析配置化,使用简单,兼容不同厂家的功能集。
29.3.在功能集解析规则错误的情况下,解析流程能够正常运行,容错性强。
附图说明
30.图1是本发明方法解析流程示意图。
具体实施方式
31.下面结合具体实施例对本发明作更进一步的说明。
32.如图1所示,一种工程机械设备工况数据解析方法,包括如下步骤:步骤0:针对不同类型的功能集抽象提取出内容信息,所述内容信息包括:固定tag字节长度、固定length字节长度、固定value字节长度、可变value字节长度信息、固定tag、功能集package中tag属性名、是否移除tag内容中前面连续的0字符标识和嵌套tag信息,将内容信息写入解析配置文件。
33.步骤1:从解析配置文件中读取固定tag字节长度参数,判断固定tag字节长度参数是否大于0,如果大于0,执行步骤2。否则判断固定tag参数是否为空,如果固定tag参数不为空,执行步骤5;否则结束解析。
34.步骤2:从解析配置文件中读取固定length字节长度参数,判断固定length字节长度参数是否大于0,如果大于0,执行步骤6;否则执行步骤3。
35.步骤3:从解析配置文件中读取固定value字节长度参数,判断固定value字节长度参数是否大于0,如果不为空,执行步骤7;否则执行步骤4。
36.步骤4:从解析配置文件中读取可变value字节长度信息,判断可变value字节长度信息是否不为空,如果不为空,执行步骤8;否则执行步骤9。
37.步骤5:根据固定tag参数和功能集package中tag属性名参数,从功能集中获取对应的package节点信息,如果package节点存在,则执行步骤10;否则跳过此tag解析。
38.步骤6:根据固定tag字节长度参数和固定length字节长度参数,从value中截取tag和length信息,再根据length信息,从value中截取该tag信息对应的value,根据功能集package中tag属性名参数和解析配置文件中的是否移除tag内容中前面连续的0字符标识参数,从功能集中获取tag信息对应的package节点信息,如果package节点存在,则执行步骤10;否则跳过此tag解析。
39.步骤7:根据固定tag字节长度参数和固定value字节长度参数,从value中截取tag信息和该tag信息对应的value,根据功能集package中tag属性名参数和解析配置文件中的是否移除tag内容中前面连续的0字符标识参数,从功能集中获取tag信息对应的package节点信息,如果package节点存在,则执行步骤10;否则跳过此tag解析。
40.步骤8:根据固定tag字节长度参数和可变value字节长度参数,获取各个tag信息对应的value的长度,从value中截取tag信息和tag信息对应的value,根据功能集package中tag属性名参数和解析配置文件中的是否移除tag内容中前面连续的0字符标识参数,从功能集中获取tag信息对应的package节点信息,如果package节点存在,则执行步骤10;否则跳过此tag解析。
41.步骤9:根据固定tag参数和功能集package中tag属性名参数,从功能集中获取对应的package节点信息,如果package节点存在,根据该package标签中length属性值来截取该tag信息对应的value,则执行步骤10;否则跳过此tag解析。
42.步骤10:根据嵌套tag信息参数是否为空,如果不为空,则执行步骤1;否则将package下无condition标签的item项和有condition标签的item,分为2组,先解析无condition标签的item项,依次执行步骤11、12和13,再解析有condition标签的item项,执行步骤14。
43.步骤11:根据byte标签获取该item项在value中起始字节位置和占用字节长度,如果byte起始字节位置或byte起始字节位置加上占用字节长度超过value长度,则跳过此item解析;否则根据endian标签指定大小端方式,在大端存储情况下,对value从左往右按顺序截取字节信息,在小端存储情况下,对value从右往左逆序截取字节信息。
44.步骤12:如果存在bit标签的话,根据bit标签的属性值,获取该item项由byte标签获取的字节长度,byte标签获取的字节长度包括bit起始比特位置和占用比特长度,如果bit起始比特位置或bit起始比特位置加上占用比特长度超过byte标签获取的字节长度,则跳过此item项解析,否则,按bit起始比特位置和占用比特长度获取比特信息。
45.步骤13:根据截取的字节或比特信息,优先使用比特信息,结合expression标签对应的表达式和type标签对应的数据类型,计算出此item项的值,此item解析结束。
46.步骤14:根据condition 标签对应javascript判断表达式计算结果,如果为true,则按步骤11、12和13解析此item项;否则跳过此item项解析。
47.步骤15:判断原始报文value是否还有部分没有解析,如果有剩余部分没有解析,执行步骤1;否则解析流程结束。
48.实施例1:以具体港机3000工况报文为例,上传的十六进制报文如下:3000000489200000根据港机功能集特性,解析配置文件内容只需如下:固定tag字节长度(taglength),功能集package中tag属性名(packagemark),是否移除tag内容中前面连续的0字符标识(removeheadzeroflag)和可变value字节长度信息(variablevaluelength)。
49.taglength=2packagemark=idremoveheadzeroflag=0
variablevaluelength=2根据上述步骤,固定tag字节长度参数为2个字节,截取第一个tag信息,结果为3000,可变value字节长度信息参数为2个字节,截取结果为0004(十六进制),则value长度为4,截取的value结果为89200000,由于功能集package中tag属性名参数为id,再结合是否移除tag内容中前面连续的0字符标识参数为0,即不移除tag结果中前面连续的0字符,故在功能集中获取package id=3000的内容,获取的部分内容如下:《package id="3000" length="4"》
ꢀꢀꢀꢀ
《item》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《name》定位状态《/name》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《namekey》locationstatus《/namekey》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《type》bit《/type》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《![cdata[system.nullable`1[xiot.sys.gpslocationstatus]]]》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《field》locationstatus《/field》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《expression》%s*1+0《/expression》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《byte start="0" length="1"》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《bit start="7" length="1"》《/bit》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/byte》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《endian》little《/endian》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《hidden》1《/hidden》
ꢀꢀꢀꢀ
《/item》
ꢀꢀꢀꢀ
《item》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《name》开关量《/name》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《namekey》switchstatus《/namekey》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《type》bit《/type》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《![cdata[system.nullable`1[xiot.sys.xgit_switchvalue]]]》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《field》switchstatus《/field》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《expression》%s*1+0《/expression》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《byte start="0" length="1"》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《bit start="6" length="1"》《/bit》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/byte》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《endian》little《/endian》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《hidden》1《/hidden》
ꢀꢀꢀꢀ
《/item》《item》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《name》终端工作状态《/name》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《namekey》gpsworkstatus《/namekey》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《type》bit《/type》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《![cdata[system.nullable`1[xiot.sys.xgit_pworkstatus]]]》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《field》gpsworkstatus《/field》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《expression》%s*1+0《/expression》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《byte start="0" length="1"》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《bit start="4" length="1"》《/bit》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/byte》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《endian》little《/endian》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《hidden》1《/hidden》
ꢀꢀꢀꢀ
《/item》
ꢀꢀꢀꢀ
《item》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《name》终端健康状态《/name》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《namekey》gpshealthstatus《/namekey》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《type》bit《/type》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《![cdata[system.nullable`1[xiot.sys.xgit_phealthstatus]]]》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《field》gpshealthstatus《/field》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《expression》%s*1+0《/expression》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《byte start="0" length="1"》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《bit start="3" length="1"》《/bit》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/byte》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《endian》little《/endian》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《hidden》1《/hidden》
ꢀꢀꢀꢀ
《/item》
ꢀꢀꢀꢀ
《item》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《name》关联设备工作状态《/name》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《namekey》vehicleworkstatus《/namekey》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《type》bit《/type》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《![cdata[system.nullable`1[xiot.sys.xgit_dworkstatus]]]》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/dotnettype》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《field》vehicleworkstatus《/field》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《expression》%s*1+0《/expression》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《byte start="0" length="1"》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《bit start="2" length="1"》《/bit》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/byte》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/position》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《endian》little《/endian》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《hidden》1《/hidden》
ꢀꢀꢀꢀ
《/item》《/package》根据功能集中的内容,第一个item的起始字节位置为0,占用字节长度为1,且字节按小端存储,则截取的字节结果为89,二进制表示为10001001,该item起始比特位置为7,占用比特长度为1,则从字节结果10001001中截取的比特为1,即locationstatus=1,表示定位准确,其他item以此按流程解析,结果为switchstatus=0、gpsworkstatus=0、gpshealthstatus=1和vehicleworkstatus=0,分别代表开关关闭、终端当前停止工作、终端健康状态良好和关联设备工作停止工作。
[0050]
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1