这个库是为了让你的控制器之间通过Modbus协议进行通讯。
Modbus是一种用在工业自动化的主从协议,也可以用在别的地方,比如智能家居。
Modbus一般使用 RS-232 或者 RS-485 协议作为物理层(也叫Modbus串口),Modbus 通过以太网或者WiFi (也叫Modbus IP)使用 TCP/IP进行通信。
最新的版本库允许控制器作为从机使用,支持Modbus串口和Modbus IP。
更多的关于Modbus的信息可以在这里看到:
作为从机使用(master mode in development)
支持Modbus串口 (RS-232 or RS485) 和 Modbus IP (TCP)
所有功能的异常响应
Modbus 功能支持:
0x01 | - 读线圈寄存器 |
0x02 | - 读状态寄存器 (读离散输入) |
0x03 | - 读保持寄存器 |
0x04 | - 读输入寄存器 |
0x05 | - 写单线圈寄存器 |
0x06 | - 写单保持寄存器 |
0x0F | - 写多线圈寄存器 |
0x10 | - 写多保持寄存器 |
1 .当使用Modbus IP 的tcp协议(默认502端口)时,消息传输之后连接就中断,也就是说,并不是持续的连接。如果你需要持续连接tcp,你就必须去掉ModbusIP.h(或者ModbusIP_*)开头这句话前面的注释。
#define TCP_KEEP_ALIVE
2.默认寄存器是从0开始的。使用测试软件的时候要注意,在ScadaBR 这个软件里,寄存器从0开始,设置寄存器为100,就在库文件里被设置为100了。但是,在CAS Modbus Scanner 里 是从1开始的,所以在库文件里设置寄存器为100,实际上软件里就是101. 3.之前的库文件里,可以选择限制保持寄存器的功能,来节省程序空间,注释掉这句话就好了
#define USE_HOLDING_REGISTERS_ONLY
这样的话 只有下面这几个功能是支持的。
0x03 - 读保持寄存器 0x06 - 写单保持寄存器 0x10 - 写多保持寄存器
4.Modbus串口要从硬件串口和软件串口选择,你可以在ModbusSerial.h 文件里,把这句话注释掉
#define USE_SOFTWARE_SERIAL
现在你可以在主程序中加上下面的几句话:
#include <Modbus.h> #include <ModbusSerial.h> #include <SoftwareSerial.h>
在setup() 中:
SoftwareSerial myserial(2,3); mb.config(&myserial, 38400); // mb.config(mb.config(&myserial, 38400, 4) for RS-485
声明寄存器类型:
Register type | Use as | Access | Library methods |
Coil | Digital Output | Read/Write | addCoil(), Coil() |
Holding Register | Analog Output | Read/Write | addHreg(), Hreg() |
Input Status | Digital Input | Read Only | addIsts(), Ists() |
Input Register | Analog Input | Read Only | addIreg(), Ireg() |
注意:
输入状态有时也叫离散输入 保持寄存器是从机用来存储数值的 使用例程: 线圈寄存器 可以用来驱动LED. 保持寄存器可以存储计数器或者驱动舵机. 状态寄存器连接开关使用 ,输入寄存器连接温度传感器.