用户工具

站点工具


reference:library:modbus

Arduino Modbus 协议库

这个库是为了让你的arduino之间通过MODBUS协议进行通讯。Modbus是一种用在工业自动化的主从协议,也可以用在别的地方,比如智能家居。

Modbus一般使用 rs-232 或者rs-485 协议作为物理层(也叫modbus串口),modbus 通过以太网或者WiFi (也叫Modbus IP)使用 TCP/IP 。

最新的版本库允许arduino作为从机使用,支持modbus串口和modbus ip。更多的关于modbus的信息可以在这里看到:

http://pt.wikipedia.org/wiki/Modbus http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf

http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf

特点

作为从机使用(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

Modbus术语

声明寄存器类型:

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 InputRead Only addIreg(), Ireg()

注意:

输入状态有时也叫离散输入 保持寄存器是从机用来存储数值的 使用例程: 线圈寄存器 可以用来驱动LED. 保持寄存器可以存储计数器或者驱动舵机. 状态寄存器连接开关使用 ,输入寄存器连接温度传感器.

reference/library/modbus.txt · 最后更改: 2017/04/07 10:03 (外部编辑)