一种基于数据列表结构体的MODBUS通讯方法、装置与流程

文档序号:34683944发布日期:2023-07-05 21:53阅读:19来源:国知局
一种基于数据列表结构体的MODBUS通讯方法、装置与流程

本技术涉及通信,尤其涉及一种基于数据列表结构体的modbus通讯方法、装置、电子设备及存储介质。


背景技术:

1、modbus通讯是osi模型第7层上的应用层报文传输协议,它应用于不同类型的总线或网络,为设备之间提供通信服务;它是以数据变量地址为基准,由访问参数数量或参数值为数据单元进行传输的。

2、目前绝大多数的modbus通讯软件设计思路是将通讯协议与通讯参数变量进行深度捆绑,把通讯参数变量直接嵌套在通讯协议里面,无论是数据发送还是数据接收,通讯协议与通讯参数变量始终揉为一体,这样直接导致了modbus通讯协议与通讯参数变量之间的捆绑过于紧密,依存关系过于复杂,通讯参数变量属性(如寄存器地址、读写访问权限、参数取值范围等)一旦发生了更改,modbus通讯协议部分就得跟着做出相应的修改。与此同时,一个产品软件中的modbus通讯参数变量寄存器地址排序不一定是连续的,现有的modbus通讯软件设计过程中,如果通讯参数变量寄存器地址不连续,通讯软件设计一般按通讯参数变量寄存器地址的分段段数,将通讯参数变量的发送和解析功能分布在不同的代码段里面完成实现,再加之modbus协议有多条通讯命令,命令条数越多,软件代码的分段处理就越多,这样也会导致占用资源较多等诸多不利因素出现。

3、除此之外,modbus通讯过程中,主机除了发送查询命令给从机之外,通常还需要向从机发送一些设置类参数,当主机向从机设置参数时,整个通讯状态和步骤是未知的,或许主机正在向从机发送其他命令,或许主机正在等待从机的回复,或许从机正在向主机回复信息等等情况,目前很多modbus通讯机制软件设计,要么不考虑以上情况,从而造成了数据在通讯传输线上造成相撞破坏,导致通讯失败率骤增,增加了通讯的不可靠性;要么采取繁琐的多重“状态机”切换设计模式,增加了软件的复杂性。

4、综上所述,当前modbus通讯软件设计方式致使软件代码的耦合性、关联性太强,可读性变差,不便于软件的维护和升级,使用者对于过往设计的modbus通讯协议软件的移植太繁琐,复用率太低,若移植不当,还容易产生新的错误,几乎是产品通讯协议需求发生了变更,modbus通讯协议就得重新编写一次,不仅加重了产品开发者的工作负担,还延长了产品开发周期。


技术实现思路

1、有鉴于此,本技术实施例提供了一种基于数据列表结构体的modbus通讯方法方法、装置、电子设备及存储介质,能够让通讯协议和通讯参数变量各自独立,彻底脱钩去耦合。

2、本技术实施例的技术方案是这样实现的:

3、第一方面,本技术实施例提供一种基于数据列表结构体的modbus通讯方法,应用于主机,包括以下步骤:

4、响应于命令存放请求,通过目标接口将至少一条命令依次放入链表缓存器中;

5、响应于命令提取请求,从所述至少一条命令中提取目标命令;

6、基于所述目标命令,从预设的数据列表结构体中遍历得到与所述目标命令相匹配的第一通讯参数,并将所述第一通讯参数进行组包,得到主机命令;

7、将所述主机命令发送至从机,以使所述从机基于所述数据列表结构体,对所述主机命令进行响应。

8、在一种可能的实施方式中,所述数据列表结构体包括以下成员:

9、参数变量的比特位数、参数存储指针、参数寄存器地址、参数访问权限、参数是否被修改标志位、参数变量值合规判断回调函数、参数索引编号、数据列表类型和数据列表名称;

10、其中,所述参数变量的比特位数用于标识通讯参数变量在存储器中所占的比特位数;

11、所述参数存储指针用于指向所述通讯参数变量的存储地址;

12、所述参数寄存器地址为所述通讯参数变量在modbus通讯协议传输中所分配的寄存器地址值;

13、所述参数访问权限包括只读、只写、读写三类;

14、所述参数是否被修改标志位用于在参数值发生改变时进行标示;

15、所述参数变量值合规判断回调函数用于对设置参数的限定值范围进行判断;

16、所述参数索引编号用于配合所述参数变量值合规判断回调函数按照索引编号对相应的所述通讯参数进行限定值判断和修改;

17、所述数据列表类型为存储参数变量的比特位数、参数存储指针、参数寄存器地址、参数访问权限、参数是否被修改标志位、参数变量值合规判断回调函数、参数索引编号的容器类型;

18、所述数据列表名称为存储参数变量的比特位数、参数存储指针、参数寄存器地址、参数访问权限、参数是否被修改标志位、参数变量值合规判断回调函数、参数索引编号的容器名称。

19、在一种可能的实施方式中,所述链表缓存器为fifo链表缓存器,所述响应于命令存放请求,通过目标接口将至少一条命令依次放入链表缓存器中,包括:

20、响应于命令存放请求,对所述fifo链表缓存器的空满状态进行检测;当所述fifo链表缓存器未满时,通过目标接口将至少一条命令依次放入链表缓存器中;

21、当所述fifo链表缓存器已满时,停止放入。

22、在一种可能的实施方式中,所述链表缓存器为fifo链表缓存器,所述响应于命令提取请求,从所述至少一条命令中提取目标命令,包括:

23、所述响应于命令提取请求,对所述fifo链表缓存器的空满状态进行检测;

24、当所述fifo链表缓存器不为空时,按先进先出的顺序从所述fifo链表缓存器中取出目标命令;

25、当所述fifo链表缓存器为空时,停止取出。

26、第二方面,本技术还提供一种基于数据列表结构体的modbus通讯方法,应用于从机,包括以下步骤:

27、响应于主机发送的主机命令,对所述主机命令进行解析,得到第一解析数据,并对所述第一解析数据的crc16进行校验;

28、当所述第一解析数据的crc16校验无误后,根据所述第一解析数据,从预设的数据列表结构体中遍历得到与所述第一解析数据相匹配的第二通讯参数,并将所述第二通讯参数进行组包,得到第一响应数据;

29、对所述第一响应数据进行验证,当所述第一响应数据验证结果为正常时,向所述主机发送所述第一响应数据,以使所述主机基于所述数据列表结构体,对所述第一响应数据进行响应。

30、第三方面,本技术实施例还提供一种基于数据列表结构体的modbus通讯方法,应用于主机,包括以下步骤:

31、响应于从机发送的第一响应数据,对所述第一响应数据进行解析,得到第二解析数据,并对所述第二解析数据的crc16进行校验;

32、当所述第二解析数据的crc16校验无误后,根据所述第二解析数据,从预设的数据列表结构体中遍历得到与所述第二解析数据相匹配的第三通讯参数,并将所述第三通讯参数进行组包,得到第二响应数据。

33、第四方面,本技术实施例还提供一种基于数据列表结构体的modbus通讯装置,所述装置包括:

34、第一响应模块,用于响应于命令存放请求,通过目标接口将至少一条命令依次放入链表缓存器中;

35、第二响应模块,用于响应于命令提取请求,从所述至少一条命令中提取目标命令;

36、第一遍历组包模块,用于基于所述目标命令,从预设的数据列表结构体中遍历得到与所述目标命令相匹配的第一通讯参数,并将所述第一通讯参数进行组包,得到主机命令;

37、第一发送模块,用于将所述主机命令发送至从机,以使所述从机基于所述数据列表结构体,对所述主机命令进行响应。

38、第五方面,本技术实施例还提供一种基于数据列表结构体的modbus通讯装置,所述装置包括:

39、第三响应模块,用于响应于主机发送的主机命令,对所述主机命令进行解析,得到第一解析数据,并对所述第一解析数据的crc16进行校验;

40、第二遍历组包模块,用于当所述第一解析数据的crc16校验无误后,根据所述第一解析数据,从预设的数据列表结构体中遍历得到与所述第一解析数据相匹配的第二通讯参数,并将所述第二通讯参数进行组包,得到第一响应数据;

41、第二发送模块,用于对所述第一响应数据进行验证,当所述第一响应数据验证结果为正常时,向所述主机发送所述第一响应数据,以使所述主机基于所述数据列表结构体,对所述第一响应数据进行响应。

42、第六方面,本技术实施例还提供一种电子设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行第一方面任一项所述的基于数据列表结构体的modbus通讯方法,或执行第二方面任一项所述的基于数据列表结构体的modbus通讯方法,或执行第三方面任一项所述的基于数据列表结构体的modbus通讯方法。

43、第四方面,本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行第一方面任一项所述基于数据列表结构体的modbus通讯方法,或执行第二方面任一项所述的基于数据列表结构体的modbus通讯方法,或执行第三方面任一项所述的基于数据列表结构体的modbus通讯方法。

44、本技术实施例具有以下有益效果:

45、针对现有技术的缺陷和不足,采用全新的“数据列表结构体”设计思路,将全体通讯参数变量以数据列表的形式罗列在结构体中,构建成“数据列表集”,让通讯协议和通讯参数变量各自独立,彻底脱钩去耦合,极大程度解决了modbus通讯协议与通讯参数变量之间捆绑过于紧密,依存关系过于复杂的问题,也极大程度弱化了软件代码的耦合性和关联性,增强了软件的可读性和可移植性,使软件的复用价值得到了提升。同时,对modbus通讯协议中主机下发的命令采取fifo链表缓存器设计方式,当主机需要向从机下发命令时,将命令逐条依次放入fifo链表缓存器中,然后主机再从fifo链表缓存器中依次取出,在通讯总线空闲时优先将fifo链表缓存器中存放的命令下发给从机,规避了数据在通讯传输线上所造成相撞破坏,提升了通讯的稳定性、可靠性和实时性;在通讯管理上,摒弃了繁琐的多重“状态机”切换设计模式,简化了软件设计流程,增强了软件的条理性和可读性。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1