一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

多协议的自适应解析方法、物联网计量装置、设备和介质与流程

2022-11-14 14:45:02 来源:中国专利 TAG:


1.本发明涉及通信技术领域,具体涉及一种多协议的自适应解析方法、物联网计量装置、设备和介质。


背景技术:

2.随着电能表行业的发展,对通信协议的需求也越来越多样性。电表应用领域所使用的通信协议通常是modbus协议,modbus协议是应用于电子控制器上的一种通用语言,同时在电力配电领域,dl645协议和dl698协议也是经常会用到的通信协议。
3.现有电表包括安装式电表数显电表和导轨式电表。然而,安装式电表数显电表支持modbus协议,导轨式电表则支持dl645协议或者modbus协议。如果需要切换通信协议,需要通过通讯或者显示按键等方式去切换协议。这样,会导致在现场安装调试时,需要调试的工作人员去操作切换协议。
4.目前在物联网领域中除了有线的rs485连接方式外,无线方式、以太网方式的数据交互也越来越多,采用透传modbus协议、dl645协议、dl698协议,也有比较多的应用场景,但是目前基本都没有自适应切换modbus协议,dl645协议,dl698协议的电表。也就是说,现有技术需要现场切换或者需要支持多个通信协议类型的电表产品才能适用相应的领域。


技术实现要素:

5.本发明实施例提供一种多协议的自适应解析方法、物联网计量装置、设备和介质,本发明在接收数据包的时候可以自动区分通信协议类型并匹配答复,减少中断时间提升通信效率。
6.在第一方面,为实现上述目的,本发明实施例提供一种多协议的自适应解析方法,应用于物联网计量装置,所述物联网计量装置支持多种通信协议,包括步骤:
7.基于先进先出的方式从接收缓冲区或接收消息队列处取出一当前数据包;
8.将取出的所述当前数据包与所述多种通信协议进行遍历匹配,获得所述当前数据包所满足的通信协议类型,根据所述通信协议类型生成对应的答复数据包;
9.将所述答复数据包传递至所述通信协议类型对应的发送缓冲区,以通过所述发送缓冲区对应的通讯接口发送所述答复数据包;
10.继续取出下一数据包重新进行解析,直至所有数据包完成解析为止。
11.在第二方面,为了解决相同的技术问题,本发明实施例提供一种物联网计量装置,所述物联网计量装置支持多种通信协议,包括:
12.数据取出模块,用于基于先进先出的方式从接收缓冲区或接收消息队列处取出一当前数据包;
13.匹配处理模块,用于将取出的所述当前数据包与所述多种通信协议进行遍历匹配,获得所述当前数据包所满足的通信协议类型,根据所述通信协议类型生成对应的答复数据包;
14.数据传递模块,用于将所述答复数据包传递至所述通信协议类型对应的发送缓冲区,以通过所述发送缓冲区对应的通讯接口发送所述答复数据包;
15.所述数据取出模块,还用于继续取出下一数据包重新进行解析,直至所有数据包完成解析为止。
16.在第三方面,为了解决相同的技术问题,本发明实施例提供一种电子设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时,实现所述的多协议的自适应解析方法中的步骤。
17.在第四方面,为了解决相同的技术问题,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在的设备执行所述的多协议的自适应解析方法中的步骤。
18.本发明实施例提供了一种多协议的自适应解析方法、物联网计量装置、设备和介质,本发明在接收数据包的时候可以自动区分通信协议类型并匹配答复,减少中断时间提升通信效率。
附图说明
19.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1是本发明实施例提供的多协议的自适应解析方法的一流程示意图;
21.图2是本发明实施例提供的物联网计量装置的内部结构示意图;
22.图3是本发明实施例提供的多协议的自适应解析方法的另一流程示意图;
23.图4是本发明实施例提供的多协议的自适应解析方法的另一流程示意图;
24.图5为本技术实施例提供的电子设备的一种结构示意图。
具体实施方式
25.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
26.在本技术的描述中,需要理解的是,术语“一端”“另一端”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本技术和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本技术的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多所述特征。在本技术的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
27.在本技术的描述中,需要说明的是,除非另有明确的规定和限定,术语“相连”“连
接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接或可以相互通讯;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本技术中的具体含义。
28.下文的公开提供了许多不同的实施方式或例子用来实现本技术的不同结构。为了简化本技术的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本技术。此外,本技术可以在不同例子中重复参考数字和/或参考字母,这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施方式和/或设置之间的关系。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
29.请参阅图1,本技术实施例提供一种多协议的自适应解析方法,应用于物联网计量装置,所述物联网计量装置支持多种通信协议,包括步骤:
30.s101基于先进先出的方式从接收缓冲区或接收消息队列处取出一当前数据包;
31.具体的,先进先出也可称为先入先出fifo(first input first output的缩写),先入先出是一种按序执行方法,即按照数据包到达接收端的接收接口的先后顺序让数据包进入队列,同时,fifo在队列的出口让数据包按进队的顺序出队,先进的数据包将先出队,后进的数据包将后出队。接收端将接收的数据包存放在接收消息队列(属于fifo队列)中或者接收缓冲区。若接收端将接收的数据包存放在接收消息队列中,那么加入0号数据包先进入队列,接着是1号数据包、2号数据包
……
,然后,从接收消息队列中取出0号数据包,此时1号数据包就会接替0号指令的位置等待被读取,同样,2号数据包、3号数据包
……
都会向前挪一个位置依次等待被读取。若接收端将接收的数据包存放在接收缓冲区中,由于接收缓冲区中储存的数据包对应有各自的接收时间,这样,就可以根据接收时间的先后顺序依次从接收缓冲区中取出0号数据包、1号数据包、2号数据包、3号数据包
……
。因此,当前数据包是指按照接收时间的先后顺序所取出的数据包,例如,取出的0号数据包为当前数据包时1号数据包就是下一数据包,取出的1号数据包为当前数据包时2号数据包就是下一数据包,以此类推。
32.物联网计量装置的身份类型既可以是接收端,也可以是发送端。本技术的物联网计量装置包括多种通讯接口,通信接口既可以从发送端接收数据包,也可以发送数据包至其他接收端。其中,通讯接口包括串口接口(包括rs485接口、rs232接口、uart接口等)、wifi接口、以太网接口中的任意一种或者多种,通讯接口的类型包括串口类型和非串口类型,非串口类型包括wifi类型,以太网类型。若接收端中用于接收数据的通讯接口为串口类型包括rs485接口、rs232接口、uart接口等),提取通讯接口从发送端接收到的数据包,并将数据包存储至接收端中的接收缓冲区。若接收端中用于接收数据的通讯接口为非串口类型,提取通讯接口从发送端接收到的数据包,并将数据包存储至接收缓冲区后,再将数据包按照先进先出方式从接收缓冲区取出并放入接收消息队列。
33.在通讯接口的类型为串口类型的情况下,由于串口方式接收数据时判断一个数据包是否完全接收完成可通过帧间隙去判断,即串口方式可以采用帧间隙的方式,把多帧数据一并存储到解析缓冲区,也就是说解析缓冲区可以通过帧间隙方式从接收缓冲区按照先进先出原则分次取出一个数据包作为当前数据包。
34.在通讯接口的类型为非串口类型(例如wifi或以太网)的情况下,虽然无线方式(即wifi方式)和以太网方式接收一帧数据包后,解析缓冲区虽然也可以通过帧间隙方式从接收缓冲区按照先进先出原则分次取出一个数据包作为当前数据包。但是,可能由于无线方式(即wifi方式)和以太网方式接收数据包比较快,很容易出现当前数据包还没有解析完成,新的数据包已经到来,从而造成丢数据包。因此,在通过无线方式(即wifi方式)和以太网方式接收数据包并储存至接收缓冲区后,解析缓冲区通过增加消息队列的方式将数据包按照先进先出方式从接收缓冲区取出并放入接收消息队列。这样,通过消息队列可以为解析数据和接收数据增加的一个缓冲,保证接收到的数据包都能够在后续被解析。
35.s102将取出的所述当前数据包与所述多种通信协议进行遍历匹配,获得所述当前数据包所满足的通信协议类型,根据所述通信协议类型生成对应的答复数据包;
36.s103将所述答复数据包传递至所述通信协议类型对应的发送缓冲区,以通过所述发送缓冲区对应的通讯接口发送所述答复数据包;
37.s104继续取出下一数据包重新进行解析,直至所有数据包完成解析为止。
38.具体的,解析缓冲区基于先进先出的方式将从接收缓冲区或接收消息队列处取出一当前数据包后,解析缓冲区将当前数据包输入到自适应消费模块,由自适应消费模块按照协议重要程度顺序依次先后将当前数据包输入到对应的解析模块中,即自适应消费模块会按照协议重要程度顺序依次循环调用对应的解析模块对当前数据包进行解析判断当前数据包所满足的通信协议类型,并由当前通信协议类型对应的解析模块生成对应的答复数据包,直到把所有正确的数据包解析完成为止。在每一轮解析的过程中各个解析模块会根据各自的通信协议类型生成对应的答复数据包。然后,由解析模块根据通信协议类型将答复数据包传递到对应的发送缓冲区,由发送缓冲区对应连接的通讯接口把答复数据包发送出去。
39.请参阅图2和图3,如图3为物联网计量装置的内部结构示意图,所述物联网计量装置包括所述多种通信协议各自对应的解析模块,如图2为将取出的所述当前数据包与所述多种通信协议进行遍历匹配,获得所述当前数据包所满足的通信协议类型,根据所述通信协议类型生成对应的答复数据包的流程示意图,包括步骤;
40.s301设定初始剩余长度(n)等于所述当前数据包的长度信息,并设定初始本次总消费长度(mt)等于第一设定值(0);
41.具体的,多种通信协议包括modbus协议、dl645协议、dl698协议,如图3所示,物联网计量装置包括modbusrtu解析模块、dl645解析模块、dl698解析模块共三种解析模块。其中,预先设定的协议重要程度顺序分别为modbus协议、dl645协议和dl698协议。
42.如图3所示,计量装置由通讯接口接收缓冲区、消息队列、解析缓冲区、自适应消费剩余判断逻辑模块、modbusrtu解析模块、dl645-2007解析模块、dl698.45解析模块,通讯接口发送缓冲区组成,计量装置还包含计量模块用于测量电网中的电量参数和统计电能参数;计量装置通讯方式包含串口方式、无线方式,以太网方式。接收的通讯数据通过这些接口后,进入通讯接口接收缓冲区。串口判断一个数据包是否完全接收完成,通过帧间隙去判断。无线方式和以太网方式接收一帧数据可以直接读取接收缓冲区。但是可能由于接收数据包比较快,增加了消息队列,用于解析数据和接收数据的一个缓冲,防止还没有解析完成,新的数据包已经到来,造成丢数据包。这种消息队列的方式,把接收数据包压入消息队
列,保证接受的数据包都能够在后续被解析,并采用先进先出的方式得到接收数据包,解析各个数据包。然后解析缓冲区会从串口的通讯接口缓冲区或者消息队列中取一个数据包,进入自适应消费剩余判断逻辑模块。自适应消费模块会循环调用modbusrtu解析模块、dl645解析模块、dl698解析模块解析数据帧,直到把所有正确的数据帧解析完成。在每一轮解析的过程中各个解析模块会生产发送帧,发给通讯接口发送缓冲区,把数据发送出去。
43.s302判断所述初始本次总消费长度与第二设定值(6)的第一和值是否大于所述初始剩余长度;
44.具体的,modbusrtu解析模块、dl645解析模块、dl698解析模块在解析的时候,把一个数据包复制到解析缓冲区,不管是串口接收还是无线或者以太网方式,最终解析都以一个完整的数据包来解析,设数据包长度为n。本次总消费长度mt设置为0。每次解析前会判断一个条件即判断mt 6是否大于n。
45.s303若所述第一和值大于所述初始剩余长度时,退出对所述当前数据包的自适应解析并切换解析下一数据包;
46.s304若所述第一和值不大于所述初始剩余长度时,根据协议重要程度顺序调用当前解析模块判断所述当前数据包是否符合当前通信协议类型对应的答复条件;
47.s305若所述当前数据包符合所述当前通信协议类型对应的答复条件时,生成所述当前数据包对应的答复数据包,并将最新总消费长度更新为前一总消费长度和本次总消费长度的和值;
48.s306若所述当前数据包不符合所述当前通信协议类型对应的答复条件时,根据所述协议重要程度顺序切换调用下一解析模块继续进行判断,直至确定所述当前数据包对应的协议类型,或所有解析模块完成一轮解析未得到协议类型为止。
49.具体的,本技术工作于main主循环中,每个通信协议类型都有一个指向接收缓冲区的数据指针,自适应消费剩余判断逻辑模块根据数据指针采用先进先出循环的方式不停的向后查找符合的协议帧,按照协议重要程度顺序即modbusrtu解析模块

dl645解析模块

dl698解析模块的顺序,依次循环调用对应的解析模块对当前数据包进行解析判断当前数据包所满足的通信协议类型,并由当前通信协议类型对应的解析模块生成对应的答复数据包,直到把所有的数据包解析完成为止。假设本实施例中设定dl645解析模块为dl645-2007解析模块,dl698解析模块为dl698.45解析模块,那么按照协议重要程度顺序即modbusrtu解析模块

dl645-2007解析模块

dl698.45解析模块的顺序解析判断当前数据包所满足的通信协议类型,直到把所有的数据包解析完成为止,其中,在每一轮解析的过程中各个解析模块会生产发送帧,发给通讯接口发送缓冲区,把数据发送出去,如图4所示的自适应解析的步骤为下:
50.第401步:从解析缓冲区取一个数据包即为上文所提及到的当前数据包。
51.第402步:设置剩余长度等于数据包长度,本次总消费长度consumelen长度等于0。即解析的时候,把一个数据包复制到解析缓冲区,不管是串口接收还是无线或者以太网方式,最终解析都以一个完整的数据包来解析,设数据包长度为n。本次总消费长度mt设置为0。
52.第403步:判断本次总消费长度加上6是否大于数据包长度,即判断mt 6》n是否成立,如果是退出本数据包的自适应解析,如果不是跳转到第404步。
53.第404步:modbusrtu解析模块解析本帧数据包(即当前数据包)是否满足modbusrtu协议条件。其中,本帧数据包即上文中提及的当前数据包,调用modbusrtu解析模块判断本帧数据包是否是符合modbusrtu协议帧,解析过程需要先设置modbusrtu解析模块的参数,即设定解析缓冲区从数据包的消费长度开始,且接收到的数据包长度等于剩余长度,然后调用modbusrtu解析模块判断对于本帧数据包的答复数据包的发送长度是否等于0,如果答复数据包的发送长度不等于0,说明本帧数据包满足modbusrtu协议条件,那么跳转到第405步。如果答复数据包的发送长度等于0,说明本帧数据包不满足modbusrtu协议条件跳转到第406步。
54.第405步:把本帧数据包的返回帧(即当前数据包对应的答复数据包)传递到发送缓冲区等待发送答复,本次consumelen=之前consumelen modbusrtu解析消费的长度,即本次总消费长度consumelen=之前consumelen modbusrtu解析模块解析消费的长度,即本次总消费长度consumelen等于之前总消费长度加上本次modbusrtu解析模块解析消费的长度(最新总消费长度更新为前一总消费长度和本次总消费长度的和值),然后跳转到第401步。
55.第406步:dl645-2007解析模块解析本帧数据包(即当前数据包)是否满足dl645-2007协议条件。其中,本帧数据包即上文中提及的当前数据包,调用dl645-2007解析模块判断本帧数据包是否是符合dl645-2007协议帧,解析过程需要先设置dl645-2007解析模块的参数,即设定解析缓冲区从数据包的消费长度开始,且接收到的数据包长度等于剩余长度,然后调用dl645-2007解析模块判断对于本帧数据包的答复数据包的发送长度是否等于0,如果答复数据包的发送长度不等于0,说明本帧数据包满足dl645-2007协议条件,那么跳转到第405步。如果答复数据包的发送长度等于0,说明本帧数据包不满足dl645-2007协议条件跳转到第408步。
56.第407步:把本帧数据包的返回帧(即当前数据包对应的答复数据包)传递到发送缓冲区等待发送答复,以及本次consumelen=之前consumelen dl645-2007解析消费的长度,即本次总消费长度consumelen等于之前总消费长度加上本次dl645-2007解析模块解析消费的长度(最新总消费长度更新为前一总消费长度和本次总消费长度的和值),跳转到第401步。
57.第408步:dl698.45解析模块解析本帧数据包(即当前数据包)是否满足dl698.45协议条件。其中,本帧数据包即上文中提及的当前数据包,调用dl698.45解析模块判断本帧数据包是否是符合dl698.45协议帧,解析过程需要先设置dl698.45解析模块的参数,即设定解析缓冲区从数据包的消费长度开始,且接收到的数据包长度等于剩余长度,然后调用dl698.45解析模块判断对于本帧数据包的答复数据包的发送长度是否等于0,如果答复数据包的发送长度不等于0,说明本帧数据包满足dl698.45协议条件,那么跳转到第405步。如果答复数据包的发送长度等于0,说明本帧数据包不满足dl698.45协议条件,那么就结束以退出本帧数据包的自适应解析流程。
58.第409步:把本帧数据包的返回帧(即当前数据包对应的答复数据包)传递到发送缓冲区等待发送答复,本次consumelen=之前consumelen dl698.45解析消费的长度,即本次总消费长度consumelen等于之前总消费长度加上本次dl698.45解析模块解析消费的长度(最新总消费长度更新为前一总消费长度和本次总消费长度的和值),跳转到第401步。
59.综上所述,自适应解析流程通过modbusrtu解析模块

dl645-2007解析模块

dl698.45解析模块这样的顺序完成一轮对当前数据的通信协议类型的解析,如果均不满足上述modbusrtu,dl645-2007,dl698.45协议,则认为缓冲区数据有问题,直接退出本次缓冲区解析。
60.在一些实施例中,本技术实施例提供一种多协议的自适应解析方法,所述当前解析模块为modbusrtu解析模块,所述modbusrtu命令帧类型包括03h、04h、06h和10h,所述根据协议重要程度顺序调用当前解析模块判断所述当前数据包是否符合当前通信协议类型对应的答复条件包括步骤:
61.s501根据modbus协议对应的第一条件集中多个第一判断条件的先后顺序依次进行验证;所述第一条件集中的第一判断条件的先后顺序依次为:地址码正确、功能代码符合modbusrtu命令帧类型、modbusrtu命令帧长度不小于对应的数量阈值、crc校验值正确、所述modbusrtu命令帧对应的读写地址和长度正确;
62.s502若任一个第一判断条件不满足,确定所述当前数据包不符合所述modbus协议,并切换调用dl645解析模块继续对所述当前数据包进行通信协议类型判断;
63.s503若所有第一判断条件均满足,确定所述当前数据包符合所述modbus协议对应的答复条件,并生成所述当前数据包对应的modbus协议答复数据包;
64.s504若所述modbusrtu命令帧类型属于03h、04h和06h中的任意一种时,确定本次总消费长度为第一数值(8),将所述本次总消费长度与前一总消费长度相加更新得到所述最新总消费长度;
65.s505若所述modbusrtu命令帧类型属于10h或16h,确定本次总消费长度为寄存器数量的两倍值与第二数值(9)的和值,将所述本次总消费长度与前一总消费长度相加更新得到所述最新总消费长度。
66.具体的,所述当前解析模块为modbusrtu解析模块,所述根据协议重要程度顺序调用当前解析模块判断所述当前数据包是否符合当前通信协议类型对应的答复条件包括步骤:判断所述当前数据包对应的地址码是否正确,其中,地址码为当前数据包的第1个字节,若所述地址码不正确,结束对所述当前数据包是否符合所述modbus协议的判断;若所述地址码正确,判断所述当前数据包对应的功能代码是否符合modbus协议支持的modbusrtu命令帧。其中,功能代码为当前数据包的第2个字节,功能代码实质上表明了modbusrtu支持的命令类型;若所述功能代码不符合任意一种modbusrtu命令帧,结束对所述当前数据包是否符合所述modbus协议的判断;若所述功能代码符合任意一种modbusrtu命令帧,将所述当前数据包对应的剩余长度与本次总消费长度进行相减计算得到命令帧长度。
67.然后,判断所述命令帧长度是否小于当前modbusrtu命令帧对应的数量阈值;所述当前modbusrtu命令帧符合modbus协议支持的modbusrtu命令帧;其中,modbus协议支持的modbusrtu命令帧包括03命令帧、04命令帧、06命令帧、10命令帧和16命令帧,也就是说,modbusrtu命令帧不同所对应的数量阈值也不同,例如03命令帧、04命令帧、06命令帧对应的数量阈值为第一数值,10命令帧和16命令帧对应的数量阈值为寄存器数量的两倍值与第二数值(9)的和值。若所述命令帧长度小于所述数量阈值,结束对所述当前数据包是否符合所述modbus协议的判断;若所述命令帧长度不小于所述数量阈值,检测所述当前数据包对应的crc校验值是否正确;若所述crc校验值错误时,结束对所述当前数据包是否符合所述
modbus协议的判断;若所述crc校验值正确时,确定所述当前数据包符合所述modbus协议且满足所述modbus协议对应的答复条件,并生成所述当前数据包对应的modbus协议答复数据包。
68.示例性的,如果命令类型为03命令帧或04命令帧,判断长度是否小于8,如果小于8退出modbusrtu协议帧的判断,否则检测crc校验是否正确,如果不正确退出modbusrtu协议帧判断,否则检查读取地址和长度是否符合要求,如果不符合,生成错误的地址类型帧发送到缓冲区,设置本次总消费长度为8,退出modbusrtu协议帧的判断,否则读取对应寄存器数据到发送缓冲区,设置本次总消费长度为8,退出modbusrtu协议帧解析。然后,判断读取地址和长度是否符合要求;若所述读取地址和长度不符合要求,生成包括错误地址标志的modbus答复包,可以确定本次总消费长度为第一数值(8)。当然,若所述读取地址和长度符合要求,同样可以确定本次总消费长度为第一数值(8)。将所述本次总消费长度与前一总消费长度相加更新得到所述最新总消费长度进行累加并更新得到最新总消费长度。
69.示例性的,如果命令类型为06命令帧,判断长度是否小于8,如果小于8退出modbusrtu协议帧的判断,否则检测crc校验是否正确,如果不正确退出modbusrtu协议帧判断,否则检查读取地址是否符合要求,如果不符合,生成错误的地址类型帧发送到缓冲区,设置本次总消费长度为8,退出modbusrtu协议帧的判断,否则处理设置操作,生成返回帧到发送缓冲区,设置本次总消费长度位8,退出modbusrtu协议帧解析。然后,判断写入地址是否符合要求以及判断写入数据是否在范围内;若所述写入地址不符合要求或写入数据在范围外,生成包括错误地址标志的modbus答复包,可以确定本次总消费长度为第一数值(8)。当然,若写入地址符合要求或写入数据在范围内,同样可以确定本次总消费长度为第一数值(8)。将所述本次总消费长度与前一总消费长度相加更新得到所述最新总消费长度进行累加并更新得到最新总消费长度。
70.示例性的,如果命令类型为10命令帧或16命令帧,得到寄存器的长度len,判断长度是否小于len*2 9,如果小于退出modbusrtu协议帧的判断,否则检测crc校验是否正确,如果不正确退出modbusrtu协议帧判断,否则检查写入地址和长度是否符合要求,如果不符合,生成错误的地址类型帧发送到缓冲区,设置本次总消费长度为len*2 9,退出modbusrtu协议帧的判断,否则处理设置操作,生成返回帧到发送缓冲区,设置本次总消费长度位len*2 9,退出modbusrtu协议帧解析。然后,判断写入地址和长度是否符合要求以及判断写入数据是否在范围内;若所述写入地址和长度不符合要求或写入数据在范围外,生成包括错误地址标志的modbus答复包,并确定本次总消费长度等于寄存器数量的两倍与第二数值(9)的和值(即len*2 9)。若所述写入地址和长度符合要求且写入数据在范围内,确定本次总消费长度等于寄存器数量的两倍与第二数值(9)的和值(即len*2 9)。将所述本次总消费长度与前一总消费长度相加更新得到所述最新总消费长度进行累加并更新得到最新总消费长度。
71.在一些实施例中,本技术实施例提供一种多协议的自适应解析方法,所述当前解析模块为dl645解析模块,所述根据协议重要程度顺序调用当前解析模块判断所述当前数据包是否符合当前通信协议类型对应的答复条件包括步骤:
72.s601根据dl645协议对应的第二条件集中多个第二判断条件的先后顺序依次进行验证;所述第二条件集中的判断条件的先后顺序依次为:缓冲区中找到开始字符68h、第一
目标字节数据符合所述dl645协议对应的地址要求、第二目标字节数据为68h、第一数据区域长度正确、结束字符为16h;
73.s602若任一个第二判断条件不满足,确定所述当前数据包不符合所述dl645协议,并切换调用所述dl698解析模块继续对所述当前数据包进行通信协议类型判断;
74.s603若所有第二判断条件均满足,确定所述当前数据包符合所述dl645协议对应的答复条件,并生成所述当前数据包对应的dl645协议答复数据包;
75.s604根据所述开始字符68h对应的起始位置、第一数据区域长度和第三数值(12),进行和值计算得到本次消费总长度;
76.s605将本次消费总长度与dl698解析模块存储的前一总消费长度进行相加更新得到最新总消费长度;
77.其中,所述第一目标字节数据包括从所述起始位置开始从前往后查找到的相邻的连续6个字符,所述第二目标字节数据包括从所述起始位置开始从前往后查找到的第7个字符,所述第一数据区域长度为所述开始字符68h和所述第二目标字节数据之间的位数。
78.具体的,判断是否从所述当前数据包对应的缓冲区中找到开始字符(68h即0x68);若未从所述缓冲区中找到所述开始字符(68h即0x68),结束对所述当前数据包是否符合所述dl645协议的判断;若从所述缓冲区中找到所述开始字符,记录所述开始字符对应的位置为起始位置(startindex),即从自适应逻辑判断模块传递过来的缓冲区到剩余长度结束处,找到dl645-2007的开始字符0x68并记录起始位置为startindex。
79.然后,根据起始位置查找得到第一目标字节数据,判断第一目标字节数据是否符合dl645协议对应的地址要求;第一目标字节数据包括从起始位置开始从前往后查找到的相邻的连续6个字符;若第一目标字节数据不符合dl645协议对应的地址要求,结束对当前数据包是否符合dl645协议的判断;若第一目标字节数据符合dl645协议对应的地址要求,判断第二目标字节数据的字符与开始字符是否相同;第二目标字节数据包括从起始位置开始从前往后查找到的第7个字符;若第二目标字节数据的字符与开始字符不同,结束对当前数据包是否符合dl645协议的判断;若第二目标字节数据的字符与开始字符相同,根据开始字符和第二目标字节数据之间的位数计算得到第一数据区域长度(datalen);根据第一数据区域长度进行校验和判断确定正确时,判断结束字符是否为16h(即0x16);若结束字符为16h(即0x16)时,结束对当前数据包是否符合dl645协议的判断;若结束字符为16h(即0x16)时,确定当前数据包符合dl645协议且满足dl645协议对应的答复条件,计算得到对当前并生成当前数据包对应的dl645协议答复数据包。
80.此外,根据所述开始字符68h对应的起始位置、第一数据区域长度代入下列公式计算得到本次消费总长度,将本次消费总长度与所述dl698解析模块存储的前一总消费长度进行相加更新得到最新总消费长度。
81.li=startindex 11 datalen 1;
82.其中,li为本次消费总长度,startindex为所述开始字符68h对应的起始位置,datalen为第一数据区域长度。
83.在一些实施例中,所述当前解析模块为dl698解析模块,所述根据协议重要程度顺序调用当前解析模块判断所述当前数据包是否符合当前通信协议类型对应的答复条件包括步骤:
84.s701根据dl698协议对应的第三条件集中多个第三判断条件的先后顺序依次进行验证;所述第三条件集中的判断条件的先后顺序依次为:缓冲区中找到开始字符68h、第三目标字节数据符合所述dl698协议对应的地址要求、帧头crc计算值与第一crc存储值相同、整帧crc计算值与第二crc存储值相同、结束字符为16h、本次消耗的字节数未超过剩余字节数;
85.s702若任一个第三判断条件不满足,确定所述当前数据包不符合所述dl698协议,结束对所述当前数据包进行通信协议类型判断;
86.s703若所有第三判断条件均满足,确定所述当前数据包符合所述dl698协议对应的答复条件,并生成所述当前数据包对应的dl698协议答复数据包;
87.s704根据所述开始字符68h对应的起始位置、第二数据区域长度和第三数值(12),进行和值计算得到本次消费总长度;
88.s705将本次消费总长度与所述dl645解析模块存储的前一总消费长度进行相加更新得到最新总消费长度;
89.其中,所述第三目标字节数据包括从所述起始位置开始从前往后查找到的第6个字符,所述帧头crc计算值为根据所述当前数据包的帧头进行crc计算得到的数值,所述第二数据区域长度为所述开始字符68h和所述第二目标字节数据之间的位数,所述整帧crc计算值为根据所述第二数据区域长度进行crc计算得到的数值,非广播形式下所述本次消费总长度的字节数等于开始字符68h对应的起始位置、第二数据区域长度和第四数值(16)的和值,广播形式下所述本次消费总长度的字节数等于开始字符68h对应的起始位置、第二数据区域长度和第五数值(11)的和值。
90.具体的,当前解析模块为dl698解析模块,所述根据协议重要程度顺序调用当前解析模块判断所述当前数据包是否符合当前通信协议类型对应的答复条件包括步骤:判断是否从所述当前数据包对应的缓冲区中找到开始字符;若未从所述缓冲区中找到所述开始字符,结束对所述当前数据包是否符合所述dl698协议的判断;若从所述缓冲区中找到所述开始字符,记录所述开始字符对应的位置为起始位置(startindex),即从自适应逻辑判断模块传递过来的缓冲区到剩余长度结束处,找到dl645-2007的开始字符0x68并记录起始位置为startindex。
91.根据所述起始位置查找得到第三目标字节数据,判断所述第三目标字节数据是否符合所述dl698协议对应的地址要求;所述第三目标字节数据包括从所述起始位置开始从前往后查找到的第6个字符;若所述第三目标字节数据不符合所述dl698协议对应的地址要求,结束对所述当前数据包是否符合所述dl698协议的判断。若所述第三目标字节数据符合所述dl698协议对应的地址要求,根据所述当前数据包的帧头进行crc计算得到帧头crc计算值,判断所述帧头crc计算值与第一crc存储值是否相同;若所述帧头crc计算值与第一crc存储值不同,结束对所述当前数据包是否符合所述dl698协议的判断;若所述帧头crc计算值与第一crc存储值相同,根据所述开始字符和所述第三目标字节数据之间的位数计算得到第二数据区域长度(datalen);根据所述第二数据区域长度进行crc计算得到整帧crc计算值,判断所述整帧crc计算值与第二crc存储值是否相同;若所述整帧crc计算值与第二crc存储值不同,结束对所述当前数据包是否符合所述dl698协议的判断;若所述整帧crc计算值与第二crc存储值相同,根据所述开始字符和所述第三目标字节数据之间的位数计算
得到第二数据区域长度(datalen);根据所述第二数据区域长度进行校验和判断确定正确时,判断结束字符是否为16h(即0x16);若结束字符不是16h(即0x16)时,结束对所述当前数据包是否符合所述dl698协议的判断;若结束字符是16h(即0x16)时,计算本次消耗的字节数,其中,非广播形式下所述本次消费总长度的字节数等于开始字符68h对应的起始位置、第二数据区域长度和第四数值(16)的和值,广播形式下所述本次消费总长度的字节数等于开始字符68h对应的起始位置、第二数据区域长度和第五数值(11)的和值。判断所述字节数是否超过剩余字节数;若所述字节数超过剩余字节数,结束对所述当前数据包是否符合所述dl698协议的判断;若所述字节数未超过剩余字节数,确定所述当前数据包符合所述dl698协议且满足所述dl698协议对应的答复条件,计算得到对所述当前并生成所述当前数据包对应的dl698协议答复数据包。
92.本技术还提供一个实施例,本实施例提供的物联网计量装置支持多种通信协议,包括:
93.数据取出模块,用于基于先进先出的方式从接收缓冲区或接收消息队列处取出一当前数据包;
94.匹配处理模块,用于将取出的所述当前数据包与所述多种通信协议进行遍历匹配,获得所述当前数据包所满足的通信协议类型,根据所述通信协议类型生成对应的答复数据包;
95.数据传递模块,用于将所述答复数据包传递至所述通信协议类型对应的发送缓冲区,以通过所述发送缓冲区对应的通讯接口发送所述答复数据包;
96.所述数据取出模块,还用于继续取出下一数据包重新进行解析,直至所有数据包完成解析为止。
97.具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,在此不再赘述。
98.本技术实施例提供的电子设备的一种结构示意图,如图5所示,图5示出了本技术实施例提供的电子设备的具体结构框图,该电子设备可以用于实施上述实施例中提供的多协议的自适应解析方法。该电子设备900可以为移动终端如智能手机或笔记本电脑等设备。
99.rf电路910用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯。rf电路910可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(sim)卡、存储器等等。rf电路910可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。上述的无线网络可以使用各种通信标准、协议及技术,包括但并不限于全球移动通信系统(global system for mobile communication,gsm)、增强型移动通信技术(enhanced data gsm environment,edge),宽带码分多址技术(wideband code division multiple access,wcdma),码分多址技术(code division access,cdma)、时分多址技术(time division multiple access,tdma),无线保真技术(wireless fidelity,wi-fi)(如美国电气和电子工程师协会标准ieee 802.11a,ieee 802.11b,ieee802.11g和/或ieee 802.11n)、网络电话(voice over internet protocol,voip)、全球微波互联接入
(worldwide interoperability for microwave access,wi-max)、其他用于邮件、即时通讯及短消息的协议,以及任何其他合适的通讯协议,甚至可包括那些当前仍未被开发出来的协议。
100.存储器920可用于存储软件程序以及模块,如上述实施例中多协议的自适应解析方法对应的程序指令/模块,处理器980通过运行存储在存储器920内的软件程序以及模块,从而执行信用卡的自动审批流程如下:
101.基于先进先出的方式从接收缓冲区或接收消息队列处取出一当前数据包;
102.将取出的所述当前数据包与所述多种通信协议进行遍历匹配,获得所述当前数据包所满足的通信协议类型,根据所述通信协议类型生成对应的答复数据包;
103.将所述答复数据包传递至所述通信协议类型对应的发送缓冲区,以通过所述发送缓冲区对应的通讯接口发送所述答复数据包;
104.继续取出下一数据包重新进行解析,直至所有数据包完成解析为止。
105.存储器920可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器920可进一步包括相对于处理器980远程设置的存储器,这些远程存储器可以通过网络连接至电子设备900。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
106.输入单元930可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元930可包括触敏表面931以及其他输入设备932。触敏表面931,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面931上或在触敏表面931附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面931可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器980,并能接收处理器980发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面931。除了触敏表面931,输入单元930还可以包括其他输入设备932。具体地,其他输入设备932可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
107.显示单元940可用于显示由用户输入的信息或提供给用户的信息以及电子设备900的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元940可包括显示面板941,可选的,可以采用lcd(liquid crystal display,液晶显示器)、oled(organic light-emitting diode,有机发光二极管)等形式来配置显示面板941。进一步的,触敏表面931可覆盖显示面板941,当触敏表面931检测到在其上或附近的触摸操作后,传送给处理器980以确定触摸事件的类型,随后处理器980根据触摸事件的类型在显示面板941上提供相应的视觉输出。虽然在图中,触敏表面931与显示面板941是作为两个独立的部件来实现输入和输出功能,但是在某些实施例中,可以将触敏表面931与显示面板941集成而实现输入和输出功能。
108.电子设备900还可包括至少一种传感器950,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据
环境光线的明暗来调节显示面板941的亮度,接近传感器可在翻盖合上或者关闭时产生中断。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于电子设备900还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
109.音频电路960、扬声器961,传声器962可提供用户与电子设备900之间的音频接口。音频电路960可将接收到的音频数据转换后的电信号,传输到扬声器961,由扬声器961转换为声音信号输出;另一方面,传声器962将收集的声音信号转换为电信号,由音频电路960接收后转换为音频数据,再将音频数据输出处理器980处理后,经rf电路910以发送给比如另一终端,或者将音频数据输出至存储器920以便进一步处理。音频电路960还可能包括耳塞插孔,以提供外设耳机与电子设备900的通信。
110.电子设备900通过传输模块970(例如wi-fi模块)可以帮助用户接收请求、发送信息等,它为用户提供了无线的宽带互联网访问。虽然图中示出了传输模块970,但是可以理解的是,其并不属于电子设备900的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
111.处理器980是电子设备900的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器920内的软件程序和/或模块,以及调用存储在存储器920内的数据,执行电子设备900的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器980可包括一个或多个处理核心;在一些实施例中,处理器980可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解地,上述调制解调处理器也可以不集成到处理器980中。
112.电子设备900还包括给各个部件供电的电源990(比如电池),在一些实施例中,电源可以通过电源管理系统与处理器980逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源990还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
113.尽管未示出,电子设备900还包括摄像头(如前置摄像头、后置摄像头)、蓝牙模块等,在此不再赘述。具体在本实施例中,电子设备的显示单元是触摸屏显示器,移动终端还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行一个或者一个以上程序包含用于进行以下操作的指令:
114.基于先进先出的方式从接收缓冲区或接收消息队列处取出一当前数据包;
115.将取出的所述当前数据包与所述多种通信协议进行遍历匹配,获得所述当前数据包所满足的通信协议类型,根据所述通信协议类型生成对应的答复数据包;
116.将所述答复数据包传递至所述通信协议类型对应的发送缓冲区,以通过所述发送缓冲区对应的通讯接口发送所述答复数据包;
117.继续取出下一数据包重新进行解析,直至所有数据包完成解析为止。
118.具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,在此不
再赘述。
119.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。为此,本技术实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本技术实施例所提供的多协议的自适应解析方法中任一实施例的步骤。
120.其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
121.由于该存储介质中所存储的指令,可以执行本技术实施例所提供的多协议的自适应解析方法任一实施例中的步骤,因此,可以实现本技术实施例所提供的任一多协议的自适应解析方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
122.以上对本技术实施例所提供的一种多协议的自适应解析方法、装置、电子设备及存储介质进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。并且,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本技术的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献