# Modbus **Repository Path**: ErichMoonan/Modbus ## Basic Information - **Project Name**: Modbus - **Description**: 一个Modbus通讯协议栈 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 34 - **Forks**: 23 - **Created**: 2021-08-27 - **Last Updated**: 2025-08-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mnModbus:一个Modbus协议栈 Modbus作为开放式的工业通讯协议,在各种工业设备中应用极其广泛。本人也使用Modbus通讯很多年了,或者用现成的,或者针对具体应用开发,一直以来都想要开发一个比较通用的协议栈能在后续的项目中复用,而不必每次都写一遍。现在利用项目研发的机会,开发一个自己的Modbus协议栈。 ### 声明:DataObject.c和DataObject.h已作废! ## 1、基本功能 首先,本软件是一个协议栈,支持RTU主站、RTU从站、ASCII主站、ASCII从站、TCP客户端和TCP服务器的Modbus通讯。到目前为止本软件支持的功能码如下: - 0x01功能码,读线圈——对可读写型的状态量进行读取 - 0x02功能码,读输入状态——对只读型的状态量进行读取 - 0x03功能码,读保持寄存器——对可读写型的寄存器量进行读取 - 0x04功能码,读输入寄存器——对只读型的寄存器量进行读取 - 0x05功能码,写单个线圈——对单个的读写型的状态量进行写入 - 0x06功能码,写单个寄存器——对单个的读写型的寄存器量进行写入 - 0x0F功能码,写多个线圈——对多个的读写型的状态量进行写入 - 0x10功能码,写多个寄存器——对多个的读写型的寄存器量进行写入 Modbus协议是一种主从(或者说客户端/服务器)模式协议,由主站(客户端)发起事务请求,从站(服务器)响应事务请求。 ## 2、如何使用 本软件封装了Modbus协议栈及RTU主站、RTU从站、ASCII主站、ASCII从站、TCP客户端和TCP服务器6类对象,根据自己的需要直接使用这6类对象就可方便的实现响应的功能。关于个函数及对象的说明可以查看《Modbus协议栈编程手册》文档。 ## 3、多主站支持 本次更新添加的在串行链路和以太网链路上多主站站支持。在同一台设备上可以实现多个主站,方便如联网服务器、协议转换器的需求。各个主站相互独立,数据更新回调函数可单独编写,也可以公用。根据使用的数据量自行决定。 ## 4、说明 我们这个协议栈是按照国标开发的标准协议,包括有读写各种类型对象数据的功能,在一般的工业应用场合是完全够的。对应的标准文件包括: - 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/ - 同时欢迎关注我们的微信公众号:“木南创智” ![](https://github.com/foxclever/ExPeriphDriver/blob/master/pic/gzh.png)