Modbus是一种工业协议,于1979年开发,旨在实现自动化设备之间的通信。 Modbus最初是作为通过串行层传输数据的应用级协议实现的,现已扩展到包括通过串行、TCP/IP和用户数据报协议(UDP)的实现。
Modbus是使用主从关系实现的请求 - 响应协议。 在主从关系中,通信总是成对发生 - 一个设备必须发起请求,然后等待响应 - 并且发起设备(主设备)负责发起每次交互。 通常,主设备是人机界面(HMI)或监控和数据采集(SCADA)系统,从设备是传感器、可编程逻辑控制器(PLC)或可编程自动化控制器(PAC)。 这些请求和响应的内容以及发送这些消息的网络层由协议的不同层来定义。
- 免费
- 支持多种电气接口
- 帧格式简单,通俗易懂好开发
- 可靠性好,Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议(PS:也就是说modbusTCP实际上是Modbus利用TCP打包数据传输的一种方式)。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。
ModBus网络只有一个主机,所有通信都由他发出。网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
当在一Modbus网络上通信时,每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、错误检测域。从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。
在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。
通常,Modbus可访问的数据存储在四个数据库或地址范围的其中一个: 线圈状态、离散量输入、保持寄存器和输入寄存器。 与许多规范一样,名称可能因行业或应用而异。 例如,保持寄存器也可以称为输出寄存器,线圈状态可能称为数字或离散量输出。 这些数据库定义了所包含数据的类型和访问权限。 从设备可以直接访问这些数据,因为这些数据由设备本地托管。 Modbus可访问的数据通常是设备主存的一个子集。 相反,Modbus主设备必须通过各种功能代码请求访问这些数据。
内存区块 | 数据类型 | 主设备访问 | 从设备访问 |
---|---|---|---|
线圈状态 | 布尔 | 读/写 | 读/写 |
离散输入 | 布尔 | 只读 | 读/写 |
保持寄存器 | 无符号双字节整型 | 读/写 | 读/写 |
输入寄存器 | 无符号双字节整型 | 只读 | 读/写 |