Modbus作为开放式的工业通讯协议,在各种工业设备中应用极其广泛。本人也使用Modbus通讯很多年了,或者用现成的,或者针对具体应用开发,一直以来都想要开发一个比较通用的协议栈能在后续的项目中复用,而不必每次都写一遍。现在利用项目研发的机会,开发一个自己的Modbus协议栈。
首先,本软件是一个协议栈,支持RTU主站、RTU从站、ASCII主站、ASCII从站、TCP客户端和TCP服务器的Modbus通讯。到目前为止本软件支持的功能码如下:
- 0x01功能码,读线圈——对可读写型的状态量进行读取
- 0x02功能码,读输入状态——对只读型的状态量进行读取
- 0x03功能码,读保持寄存器——对可读写型的寄存器量进行读取
- 0x04功能码,读输入寄存器——对只读型的寄存器量进行读取
- 0x05功能码,写单个线圈——对单个的读写型的状态量进行写入
- 0x06功能码,写单个寄存器——对单个的读写型的寄存器量进行写入
- 0x0F功能码,写多个线圈——对多个的读写型的状态量进行写入
- 0x10功能码,写多个寄存器——对多个的读写型的寄存器量进行写入
Modbus协议是一种主从(或者说客户端/服务器)模式协议,由主站(客户端)发起事务请求,从站(服务器)响应事务请求。
本软件封装了Modbus协议栈及RTU主站、RTU从站、ASCII主站、ASCII从站、TCP客户端和TCP服务器6类对象,根据自己的需要直接使用这6类对象就可方便的实现响应的功能。关于个函数及对象的说明可以查看《Modbus协议栈编程手册》文档。
本次更新添加的在串行链路和以太网链路上多主站站支持。在同一台设备上可以实现多个主站,方便如联网服务器、协议转换器的需求。各个主站相互独立,数据更新回调函数可单独编写,也可以公用。根据使用的数据量自行决定。
我们这个协议栈是按照国标开发的标准协议,包括有读写各种类型对象数据的功能,在一般的工业应用场合是完全够的。对应的标准文件包括:
- GB/T 19582.1-2008 《基于Modbus协议的工业自动化网络规范 第1部分:Modbus应用协议》
- GB/T 19582.2-2008 《基于Modbus协议的工业自动化网络规范 第1部分:Modbus协议在串行链路上的实现指南》
- GB/T 19582.3-2008 《基于Modbus协议的工业自动化网络规范 第1部分:Modbus协议在TCP/IP上的实现指南》
本套协议栈采用完全开源的方式提供,任何人都可以使用和修改!同时欢迎交流和浏览我们的博客:
- CSDN:https://blog.csdn.net/foxclever
- 博客园:https://www.cnblogs.com/foxclever/
- 同时欢迎关注我们的微信公众号:“木南创智”