发明内容
有鉴于此,本发明的目的在于提供一种基于Modbus协议的通信方法、装置及通信设备,以解决相关技术中基于Modbus协议通信时的指令响应速度低的技术问题,其公开的技术方案如下:
第一方面,本申请提供了一种基于Modbus协议的通信方法,应用于主设备中,所述方法包括:
根据所述主设备对应的Modbus编码配置信息和指令传输信息,计算得到指令发送时间间隔所对应的无效地址限值,其中,所述发送时间间隔是指依次发送两条指令之间的时间间隔;
按照所述Modbus编码配置信息中的寄存器地址由小到大的顺序,依次在两个相邻但地址不连续的有效地址之间添加无效地址,得到至少一个地址连续的目标地址块;其中,每个所述目标地址块中包含的无效地址数量小于所述无效地址限值;
针对每个目标地址块生成一条通信指令,并将所述通信指令发送至从设备。
可选地,所述按照所述Modbus编码配置信息中的寄存器地址由小到大的顺序,依次在两个相邻但地址不连续的有效地址之间添加无效地址,得到至少一个地址连续的目标地址块,包括:
对于所述Modbus编码配置信息中的寄存器地址,依次在任意两个相邻但地址不连续的有效地址之间添加无效地址,形成地址连续的地址块;
按照地址由小到大的顺序,依次判断所述地址块中的当前组有效地址与相邻的下一组有效地址之间的无效地址是否大于或等于所述无效地址限值,且所述两组有效地址及之间的无效地址的地址总数是否小于所述地址数量最大值,其中,每组有效地址包括至少一个有效且连续的寄存器地址;
若所述无效地址的数量大于或等于所述无效地址限值或所述地址总数大于地址数量最大值,则确定所述当前组有效地址为一个目标地址块,并将所述下一组有效地址更新为新的当前组有效地址继续判断,其中,所述地址数量最大值根据所述Modbus编码配置信息确定;
若所述无效地址的数量小于所述无效地址限值且所述地址总数小于或等于所述地址数量最大值,则将所述当前组有效地址与相邻的下一组有效地址块以及两组有效地址之间的无效地址,合并更新为当前组有效地址继续判断,直到判断至所述地址块中的最后一组有效地址,得到所述地址块对应的所有目标地址块。
可选地,所述根据所述主设备对应的Modbus编码配置信息和指令传输信息,计算得到两条指令间的延时时间所对应的无效地址限值,包括:
根据所述Modbus编码配置信息中的字节数和所述指令传输信息中的波特率计算得到传输指令数据所需的时间,并计算传输所述指令数据所需的时间以及所述指令传输信息中的指令间延时的总和得到指令发送时间间隔;
根据所述指令发送时间间隔、所述波特率及一条指令中除指令数据外其它字段的长度计算得到所述无效地址限值。
可选地,在所述针对每个目标地址生成一条通信指令之后,所述方法还包括:
判断所述通信指令是否为周期性指令;
若所述通信指令是周期性指令,则将所述通信指令存入轮询缓冲区;
若所述通信指令不是周期性指令,则将所述通信指令存入快速响应缓冲区,且所述快速响应缓冲区中的指令的优先级高于所述轮询缓冲区中的指令。
可选地,所述将所述通信指令发送至从设备,包括:
判断所述快速响应缓冲区中是否存在待发送的指令;
若所述快速响应缓冲区中存在待发送的指令,则从所述快速响应缓冲区中读取待发送的指令并发送;
若所述快速响应缓冲区中没有指令,则从所述轮询缓冲区中读取指令并发送。
可选地,所述方法还包括:
当接收到所述从设备响应所述通信指令返回的响应数据时,按照所述通信指令对应的目标地址块确定目标解析规则;其中,所述目标解析规则包括所述目标地址块包含的各地址的编码方式;
根据所述目标解析规则解析所述响应数据得到目标数据。
可选地,所述根据所述目标解析规则解析所述响应数据得到目标数据,包括:
从所述目标解析规则中获取当前待解析地址对应的解析规则;
当所述解析规则是有效的数据编码方式时,根据所述数据编码方式解析所述响应数据中与当前待解析地址对应的数据;
当所述解析规则是无效的数据编码方式时,直接丢弃所述响应数据中与所述当前待解析地址对应的数据。
第二方面,本申请还提供了一种基于Modbus协议的通信装置,应用于主设备中,所述装置包括:
无效地址限值确定模块,用于根据所述主设备对应的Modbus编码配置信息和指令传输信息,计算得到指令发送时间间隔所对应的无效地址限值,其中,所述发送时间间隔是指依次发送两条指令之间的时间间隔;
地址块划分模块,用于按照所述Modbus编码配置信息中的寄存器地址由小到大的顺序,依次在两个相邻但地址不连续的有效地址之间添加无效地址,得到至少一个地址连续的目标地址块;其中,每个所述目标地址块中包含的无效地址数量小于所述无效地址限值;
指令生成模块,用于针对每个目标地址块生成一条通信指令;
指令发送模块,用于将所述通信指令发送至从设备。
可选地,所述地址块划分模块,包括:
无效地址添加子模块,用于对于所述Modbus编码配置信息中的寄存器地址,依次在任意两个相邻但地址不连续的有效地址之间添加无效地址,形成地址连续的地址块;
地址合并判断子模块,用于按照地址由小到大的顺序,依次判断所述地址块中的当前组有效地址与相邻的下一组有效地址之间的无效地址是否大于或等于所述无效地址限值,且所述两组有效地址及之间的无效地址的地址总数是否小于所述地址数量最大值,其中,每组有效地址包括至少一个有效且连续的寄存器地址;
第一确定子模块,用于当所述无效地址的数量大于或等于所述无效地址限值或所述地址总数大于地址数量最大值时,确定所述当前组有效地址为一个目标地址块,并将所述下一组有效地址更新为新的当前组有效地址继续判断,其中,所述地址数量最大值根据所述Modbus编码配置信息确定;
第二确定子模块,用于当所述无效地址的数量小于所述无效地址限值且所述地址总数小于或等于所述地址数量最大值时,将所述当前组有效地址与相邻的下一组有效地址块以及两组有效地址之间的无效地址,合并更新为当前组有效地址继续判断,直到判断至所述地址块中的最后一组有效地址,得到所述地址块对应的所有目标地址块。
可选地,所述无效地址限值确定模块,包括:
指令发送时间间隔获取子模块,用于根据所述Modbus编码配置信息中的字节数和所述指令传输信息中的波特率计算得到传输指令数据所需的时间,并计算传输所述指令数据所需的时间以及所述指令传输信息中的指令间延时的总和得到指令发送时间间隔;
无效地址限值确定子模块,用于根据所述指令发送时间间隔、所述波特率及一条指令中除指令数据外其它字段的长度计算得到所述无效地址限值。
可选地,所述装置还包括:
第一判断模块,用于判断所述通信指令是否为周期性指令;
第一缓存单元,用于当所述通信指令是周期性指令时,将所述通信指令存入轮询缓冲区;
第二缓存单元,用于当所述通信指令不是周期性指令时,将所述通信指令存入快速响应缓冲区,且所述快速响应缓冲区中的指令的优先级高于所述轮询缓冲区中的指令。
可选地,所述指令发送模块包括:
第二判断子模块,用于判断所述快速响应缓冲区中是否存在待发送的指令;
第一读取子模块,用于当所述快速响应缓冲区中存在待发送的指令时,从所述快速响应缓冲区中读取待发送的指令并发送;
第二读取子模块,用于当所述快速响应缓冲区中没有指令时,从所述轮询缓冲区中读取指令并发送。
可选地,所述装置还包括:
响应数据解析规则确定模块,用于当接收到所述从设备响应所述通信指令返回的响应数据时,按照所述通信指令对应的目标地址块确定目标解析规则;其中,所述目标解析规则包括所述目标地址块包含的各地址的编码方式;
响应数据解析模块,用于根据所述目标解析规则解析所述响应数据得到目标数据。
可选地,所述响应数据解析模块包括:
解析规则获取子模块,用于从所述目标解析规则中获取当前待解析地址对应的解析规则;
解析子模块,用于当所述解析规则是有效的数据编码方式时,根据所述数据编码方式解析所述响应数据中与当前待解析地址对应的数据;
无效数据丢弃子模块,用于当所述解析规则是无效的数据编码方式时,直接丢弃所述响应数据中与所述当前待解析地址对应的数据。
第三方面,本申请还提供了一种基于Modbus协议的通信设备,包括:存储器和处理器;
所述存储器内存储有程序指令;
所述处理器用于调用所述存储器内存储的程序指令执行第一方面任一项所述的基于Modbus协议的通信方法。本申请提供的基于Modbus协议的通信方法,首先根据主设备的Modbus编码配置信息及指令传输信息计算无效地址限值。然后,按照Modbus编码配置信息中寄存器地址由小到大的顺序,在任意两个相邻但地址不连续的有效地址之间添加无效地址得到至少一个地址连续的目标地址块,其中目标地址块中包含的无效地址数量小于无效地址限值。针对每个目标地址块生成一条通信指令并发送至从设备。由上述过程可知,本方案在不连续的有效地址间添加无效地址,使得至少两组不连续的有效地址形成一个地址连续的目标地址块,并针对每个目标地址块生成一条通信指令,针对相同的寄存器地址使用该方案减少了生成通信指令的条数,因此,节省了多条通信指令之间的固定延时,缩短了向从设备下发通信指令所耗费的时间,因此,相当于提高了从设备向主设备返回响应数据的速度,即指令响应速度。此外,当主设备接收到从设备响应该通信指令返回的目标数据后,按照该通信指令对应的目标地址确定目标解析规则,再根据目标解析规则解析接收到的目标数据,最终确保主设备能够正确解析从设备返回的响应数据。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,示出了本申请实施例提供的一种基于Modbus协议的通信方法流程图,该方法应用于Modbus主设备中。
Modbus串行链路协议是一个主从协议,在同一时刻,串行总线上连接的多个设备中只有一个设备作为主机,其它设备均作为从机。Modbus通信由主机发起。
如图1所示,该方法包括以下步骤:
S110,获取主设备对应的Modbus编码配置信息以及指令传输信息。
指令传输信息包括指令间延时和波特率。
Modbus编码配置信息可以包括但不限于设备ID(ID∈[1,255]),功能码(code∈[1,255]),设备寄存器地址(addr∈[0,39321]),数据长度(len∈[1,255]),数据编码(即测点号)、数据类型。
其中,测点表示某个测量参数,测点号表示该测量参数对应的数据编码号。功能码是指该设备能实现的功能对应的编号。数据长度是指寄存器地址对应的存储空间内存储的数据的字节长度。
如表1所示为本申请实施例提供的一个设备的Modbus编码配置信息表,
表1
序号 |
设备ID |
功能码 |
寄存器地址 |
数据长度 |
数据编码 |
数据类型 |
1 |
1 |
0x03 |
0 |
1 |
1001 |
int |
2 |
1 |
0x03 |
1 |
1 |
1002 |
int |
3 |
1 |
0x03 |
2 |
1 |
1003 |
int |
4 |
1 |
0x03 |
3 |
1 |
1004 |
int |
5 |
1 |
0x03 |
5 |
1 |
1005 |
int |
6 |
1 |
0x03 |
7 |
1 |
1006 |
int |
7 |
1 |
0x03 |
11 |
1 |
1007 |
int |
指令间延时t延时是指一条指令去除数据传输所需时间之外的延时时间,该延时时间通常是固定的时长,如几百毫秒。
波特率是码元传输速率单位,表示单位时间传输的码元。
S120,根据Modbus编码配置信息和指令传输信息,计算得到指令发送时间间隔所对应的无效地址限值。
此处的指令发送时间间隔即依次发送两条指令之间的时间间隔。这个时间近似等于一条指令所传输的字节所需的时间与两条指令之间的固定延时t延时之和,具体计算公式如公式1所示:
t耗时=len×L/b+t延时 (式1)
其中,len即一条指令所传输的字节数,L是每个字节的bit长度,b为波特率。
本申请通过在不连续的寄存器地址之间添加无效地址以使寄存器地址连续,从而可以将两条或更多条指令合并为一条指令发送。如果增加的无效地址超过分多条指令传输的耗时,则合并为一条指令虽然能够使指令条数最小,但此时通信时间反而比分多条指令更长,因此,需要确定出添加无效地址的最大值,即无效地址限值。
无效地址限值与公式1计算得到的指令发送时间间隔t耗时有关,其中,无效地址限值与t耗时之间的关系如公式2所示:
由于每一条指令都包含有固定长度字段,如帧头和帧尾,传输帧头和帧尾也需要一定的时间,因此,无效地址限值在N的基础上增加x个寄存器地址,其中,x=k/2,k为Modbus指令的帧头和帧尾的长度。
综上,无效地址限值即N+x,无效地址限值的含义是如果两个地址之间的间隔超过此值,则可以作为两条指令。因为新增无效地址的数量大于N+x 时,表示此时读取新增的无效地址对应的指令的时间大于增加一条指令的读取时间。如果两个地址之间的间隔小于N+x则可以在两个地址之间添加无效地址形成一个地址连续的地址块,针对地址连续的地址块只生成一条指令即可。
S130,按照Modbus编码配置信息中的寄存器地址由小到大的顺序,依次在任意两个相邻但地址不连续的有效地址之间添加无效地址,得到至少一个地址连续的目标地址块。
其中,每个目标地址块中包含的无效地址数量小于无效地址限值,且目标地址块中的地址总数低于地址数量最大值,得到满足这两条约束条件且地址数量尽量多的目标地址块。
无效地址是指该寄存器地址对应的编码方式无效。地址数量最大值根据 Modbus编码配置信息得到。
在本申请的一个实施例中,如图2所示,S130包括以下步骤:
S131,对于Modbus编码配置信息中的寄存器地址,依次在任意两个相邻但地址不连续的有效地址之间添加无效地址形成地址连续的地址块。
例如,表1中第4行配置信息对应的寄存器地址是“3”,数据长度是1 个字节,第5行配置信息对应的寄存器地址是“5”,可见,这两行的寄存器地址不连续,因此,需要在两个地址之间添加无效地址“4”,该无效地址对应的数据编码是“0”,字节长度是1。
又如,表1中第6行与第7行对应的寄存器地址相差4,因此,需要在寄存器地址7和11之间添加无效地址8,且字节长度是3。
表1中的数据添加无效地址后得到配置信息表如表2所示:
表2
序号 |
设备ID |
功能码 |
寄存器地址 |
数据长度 |
数据编码 |
数据类型 |
1 |
1 |
0x03 |
0 |
1 |
1001 |
int |
2 |
1 |
0x03 |
1 |
1 |
1002 |
int |
3 |
1 |
0x03 |
2 |
1 |
1003 |
int |
4 |
1 |
0x03 |
3 |
1 |
1004 |
int |
5 |
1 |
0x03 |
4 |
1 |
0 |
0 |
6 |
1 |
0x03 |
5 |
1 |
1005 |
int |
7 |
1 |
0x03 |
6 |
1 |
0 |
0 |
8 |
1 |
0x03 |
7 |
1 |
1006 |
int |
9 |
1 |
0x03 |
8 |
3 |
0 |
0 |
10 |
1 |
0x03 |
11 |
1 |
1007 |
int |
如表2所示,添加无效地址后形成地址连续的地址块。
S132,按照地址由小到大的顺序,依次判断地址块中的当前组有效地址与相邻的下一组有效地址中的无效地址是否大于或等于无效地址限值,且两组有效地址及之间的无效地址的地址总数是否小于地址数量最大值。
其中,每组有效地址包括至少一个有效且连续的寄存器地址。
S133,若无效地址的数量大于或等于无效地址限值或地址总数大于地址数量最大值,则确定当前组有效地址为一个目标地址块,并执行S135。
S134,若无效地址的数量小于无效地址限值且地址总数小于或等于地址数量最大值,则将当前组有效地址与相邻的下一组有效地址块以及两组有效地址之间的无效地址,合并更新为当前组有效地址继续执行S135。
例如,表2中有效地址0~3为当前组有效地址,有效地址5~7为下一组有效地址,这两组有效地址之间添加的无效地址的数量是1个,1显然小于 N+x(假设N+x=20),因此,两组有效地址及该两组有效地址之间的无效地址合并更新为当前组有效地址,继续判断表2中地址0~7这个地址块与下一个有效地址11添加的无效地址总数量是4<N+x。而且,表2中寄存器地址总数小于地址数量最大值(地址数量最大值125)因此,表2中的所有寄存器地址对应的测点可以通过一条指令读取。
S135,判断是否存在未判断的有效地址,如果存在,将下一组有效地址更新为新的当前组有效地址继续返回执行S132,如果否,则执行S136。
S136,得到该地址块中的所有目标地址块。
反复执行S131~S134,直到判断至地址块中的最后一组有效地址,得到地址块中所有目标地址块。
S140,针对每个目标地址块生成一条通信指令,并将通信指令发送至从设备。
按照相关技术中Modbus通信方式,例如,表1所示的寄存器地址分布需要生成4条数据采集指令,而利用本申请的方案,先将表1转换为表2所示的寄存器分布后,表2中的所有寄存器地址只需生成一条通信指令。由此可见,本申请提供的方案大大降低了指令的数量,从而节省了指令间的固定延时,即缩短了指令发送至设备所需的时间,因此,提高了指令响应速度。
在本申请的另一个实施例中,当主设备接收到从设备响应通信指令返回的响应数据后,主设备还需要根据与通信指令相应的解析规则解析数据,本实施例中,如图1b所示,在图1a所示的S140之后,还可以包括以下步骤:
S150,当接收到从设备响应通信指令返回的响应数据时,按照通信指令对应的目标地址块确定目标解析规则。
从设备接收到主设备发送的通信指令后,响应该指令返回相应的数据,例如,主设备发送的是数据采集指令,则从设备接收到该数据采集指令将对应的数据(即,响应数据)返回给主设备。
主设备接收到从设备返回的响应数据后,按照下发的通信指令确定对应的解析规则。
其中,目标地址块对应的解析规则根据指令对应的目标地址块中的有效地址和无效地址生成。有效地址对应的解析规则即该有效地址对应的数据编码方式,例如,表1和表2中的数据编码。无效地址对应无效的虚拟编码,虚拟编码对应的解析规则是直接跳过。
此外,解析规则可以在根据目标地址块生成通信指令时得到。
S160,根据目标解析规则解析响应数据得到目标数据。
其中,对于响应数据的解析过程如下:
从目标解析规则中获取当前待解析地址对应的解析规则;
当解析规则是有效的数据编码方式时,根据数据编码方式解析响应数据中与当前待解析地址对应的数据;
当解析规则是无效的数据编码方式时,直接丢弃响应数据中与当前待解析地址对应的数据。即,对于有效地址按照该有效地址对应的数据编码方式进行编码,对于无效地址直接跳过,继续解析下一个有效地址。
本实施例提供的基于Modbus协议的通信方法,主设备在生成通信指令时,在不连续的有效地址间添加无效地址得到,使至少两组地址不连续的有效地址形成一个地址连续的目标地址块,并针对每个目标地址块生成一条通信指令,针对相同的寄存器地址使用该方案减少了生成通信指令的条数,因此,节省了多条通信指令之间的固定延时,缩短了向从设备下发通信指令所耗费的时间,因此,相当于提高了从设备向主设备返回响应数据的速度,即指令响应速度。
Modbus通信总是由主机发起,从机在没有收到来自主机的请求时,从不会发送数据,从机之间不会互相通信,且主机在某一时刻只会发起一个Modbus 事务处理。在一个串口挂接多个设备,或者,周期轮询指令很多的应用场景下,主设备下发指令时,需要等前面的所有指令都下发完毕后才能继续发送,此时如果需要控制该串口下的某台设备,或者需要快速地读取某设备的数据,相关技术通常是将需要控制或快速采集的设备连接至另一个串口上,从而占用更多的串口资源。
本申请为了解决该技术问题,将指令发送缓冲区划分为两个,其中一个是轮询缓冲区,另一个是快速响应缓冲区。如图3所示,本实施例在图1a的 S140中生成通信指令后,执行S210~S260。
S210,判断通信指令是否为周期性指令。
主设备生成的通信指令先存入指令缓冲区中,发送指令时按缓冲区中存入指令的顺序读取指令并发送至从设备。本实施例中,主设备的指令缓冲区包括轮询缓冲区和快速响应缓冲区。
因此,主设备在生成通信指令后先判断该通信指令是周期性指令还是即时指令;如果是周期性指令,则执行S220;如果是即时指令则执行S230。
例如,周期性轮询指令即周期性指令,而控制某个设备或快速读取数据的指令均是即时指令。即时指令通常需要较高的响应速度,因此,将即时指令存入快速响应缓冲区中。
S220,将通信指令存入轮询缓冲区。
S230,将通信指令存入快速响应缓冲区。
其中,快速响应缓冲区中的指令的优先级高于轮询缓冲区中的指令。
本实施例中,S140中发送通信指令的过程可以包括S240~S260:
S240,判断快速响应缓冲区中是否存在待发送的指令;如果是,则执行 S250;如果否,则执行S260。
如果快速响应缓冲区中有待发送的指令则优先发送快速响应缓冲区的指令。如果快速响应缓冲区中没有待发送的指令则发送轮询缓冲区中的指令。
S250,从快速响应缓冲区中读取待发送的指令并发送。
S260,从轮询缓冲区中读取指令并发送。
本实施例提供的基于Modbus协议的通信方法,每个主设备内的缓冲区都包括快速响应缓冲区和轮询缓冲区,其中,快速响应缓冲区的优先级高于轮询缓冲区。在生成指令后将周期性的指令存入轮询缓冲区中,将即时指令存入快速响应缓冲区中。发送指令时,优先发送快速响应缓冲区中的即时指令。通过设置两个指令缓冲区且优先发送快速响应缓冲区中的指令,实现需要快速响应的指令能够及时发送出去,且不会增加占用的串口资源。
相应于上述的基于Modbus协议的通信方法实施例,本申请还提供了基于 Modbus协议的通信装置实施例。
请参见图4,示出了本申请实施例提供的一种基于Modbus协议的通信装置的结构示意图,该装置应用于主设备中,其中,在光伏系统中,该主设备可以是逆变器,从设备可以是系统的数据采集装置。
如图4所示,该装置包括以下模块:无效地址限值确定模块110、地址块划分模块120、指令生成模块130和指令发送模块140。
无效地址限值确定模块110,用于根据主设备对应的Modbus编码配置信息和指令传输信息,计算得到指令发送时间间隔所对应的无效地址限值,
其中,发送时间间隔是指依次发送两条指令之间的时间间隔。
在本申请的一个实施例中,无效地址限值确定模块110可以包括:
指令发送时间间隔获取子模块,用于根据Modbus编码配置信息中的字节数和指令传输信息中的波特率计算得到传输指令数据所需的时间,并计算传输指令数据所需的时间以及指令传输信息中的指令间延时的总和得到指令发送时间间隔。
无效地址限值确定子模块,用于根据指令发送时间间隔、波特率及一条指令中除指令数据外的其它字段的长度计算得到无效地址限值。
地址块划分模块120,用于按照Modbus编码配置信息中的寄存器地址由小到大的顺序,依次在两个相邻但地址不连续的有效地址之间添加无效地址,得到至少一个地址连续的目标地址块。
其中,每个目标地址块中包含的无效地址数量小于无效地址限值。
在本申请的一个实施例中,如图5所示,地址块划分模块120可以包括:
无效地址添加子模块121,用于对于Modbus编码配置信息中的寄存器地址,依次在任意两个相邻但地址不连续的有效地址之间添加无效地址形成地址连续的地址块;
地址合并判断子模块122,用于按照地址由小到大的顺序,依次判断地址块中的当前组有效地址与相邻的下一组有效地址之间的无效地址是否大于或等于无效地址限值,且两组有效地址及之间的无效地址的地址总数是否小于地址数量最大值。
其中,每组有效地址包括至少一个有效且连续的寄存器地址。
第一确定子模块123,用于当无效地址的数量大于或等于无效地址限值或地址总数大于地址数量最大值时,确定当前组有效地址为一个目标地址块,并将下一组有效地址更新为新的当前组有效地址继续判断。
其中,地址数量最大值根据Modbus编码配置信息确定。
第二确定子模块124,用于当无效地址的数量小于无效地址限值且地址总数小于或等于地址数量最大值时,将当前组有效地址与相邻的下一组有效地址块以及两组有效地址之间的无效地址,合并更新为当前组有效地址继续判断,直到判断至地址块中的最后一组有效地址,得到地址块对应的所有目标地址块。
指令生成模块130,用于针对每个目标地址块生成一条通信指令。
指令发送模块140,用于将通信指令发送至从设备。
在本申请的另一个实施例中,当主设备接收到从设备响应通信指令返回的响应数据后,主设备还需要根据与通信指令相应的解析规则解析数据,如图4所示,该装置还包括:响应数据解析规则确定模块140和响应数据解析模块150。
响应数据解析规则确定模块150,用于当接收到从设备响应通信指令返回的响应数据时,按照通信指令对应的目标地址块确定目标解析规则。
其中,目标解析规则中标记有目标地址块中所有地址对应的数据编码解析规则。
响应数据解析模块160,用于根据目标解析规则解析响应数据得到目标数据。
在本申请的一个实施例中,响应数据解析模块160可以包括:
解析规则获取子模块,用于从目标解析规则中获取当前待解析地址对应的解析规则;
解析子模块,用于当解析规则是有效的数据编码方式时,根据数据编码方式解析响应数据中与当前待解析地址对应的数据;
无效数据丢弃子模块,用于当解析规则是无效的数据编码方式时,直接丢弃响应数据中与当前待解析地址对应的数据。
本实施例提供的基于Modbus协议的通信装置,主设备在生成通信指令时,在不连续的有效地址间添加无效地址得到,使至少两组地址不连续的有效地址形成一个地址连续的目标地址块,并针对每个目标地址块生成一条通信指令,针对相同的寄存器地址使用该方案减少了生成通信指令的条数,因此,节省了多条通信指令之间的固定延时,缩短了向从设备下发通信指令所耗费的时间,因此,相当于提高了从设备向主设备返回响应数据的速度,即指令响应速度。
在本申请的另一个实施例中,如图6所示,上述实施例提供的基于Modbus 协议的通信装置还包括:
第一判断模块210,用于判断通信指令是否为周期性指令;
第一缓存模块220,用于当通信指令是周期性指令时,将通信指令存入轮询缓冲区;
第二缓存模块230,用于当通信指令不是周期性指令时,将通信指令存入快速响应缓冲区,且快速响应缓冲区中的指令的优先级高于轮询缓冲区中的指令。
在本申请的又一个实施例中,指令发送模块140可以包括:
第二判断子模块,用于判断快速响应缓冲区中是否存在待发送的指令。
第一读取子模块,用于当快速响应缓冲区中存在待发送的指令时,从快速响应缓冲区中读取待发送的指令并发送。
第二读取子模块,用于当快速响应缓冲区中没有指令时,从轮询缓冲区中读取指令并发送。
本实施例提供的基于Modbus协议的通信装置,每个主设备内的缓冲区都包括快速响应缓冲区和轮询缓冲区,其中,快速响应缓冲区的优先级高于轮询缓冲区。在生成指令后将周期性的指令存入轮询缓冲区中,将即时指令存入快速响应缓冲区中。发送指令时,优先发送快速响应缓冲区中的即时指令。通过设置两个指令缓冲区且优先发送快速响应缓冲区中的指令,实现需要快速响应的指令能够及时发送出去,且不会增加占用的串口资源。
上述实施例提供的基于Modbus协议的通信装置包括处理器和存储器,该装置所包含的上述功能模块均作为程序模块存储在存储器中,由处理器执行存储在存储器中的上述程序模块来实现上述任一种基于Modbus协议的通信方法。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上。
本文中的处理器可以是终端的CPU,或者,是终端内集成的MCU,或者,还可以是CPU和MCU的结合。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请提供了一种基于Modbus协议的通信设备,该通信设备包括处理器和存储器,该存储器内存储有可在处理器上运行的程序。该处理器运行存储器内存储的该程序时实现上述任一种基于Modbus协议的通信方法。该通信设备可以是控制系统中的主控制器,或者,光伏系统中的逆变器等。
本申请还提供了一种计算设备可执行的存储介质,该存储介质中存储有程序,该程序由计算设备执行时实现上述的基于Modbus协议的通信方法。
处理器中包含内核,由内核取存储器中调取相应的程序,内核可以设置一个或以上。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
需要说明的是,本说明书中的各个实施例记载的技术特征可以相互替代或组合,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请各实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请各实施例中的装置及终端中的模块和子模块可以根据实际需要进行合并、划分和删减。
本申请所提供的几个实施例中,应该理解到,所揭露的终端,装置和方法,可以通过其它的方式实现。例如,以上所描述的终端实施例仅仅是示意性的,例如,模块或子模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个子模块或模块可以结合或者可以集成到另一个模块,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块或子模块可以是或者也可以不是物理上分开的,作为模块或子模块的部件可以是或者也可以不是物理模块或子模块,即可以位于一个地方,或者也可以分布到多个网络模块或子模块上。可以根据实际的需要选择其中的部分或者全部模块或子模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块或子模块可以集成在一个处理模块中,也可以是各个模块或子模块单独物理存在,也可以两个或两个以上模块或子模块集成在一个模块中。上述集成的模块或子模块既可以采用硬件的形式实现,也可以采用软件功能模块或子模块的形式实现。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。