用户工具

站点工具


reference:library:modbus

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
reference:library:modbus [2019/07/30 14:53] – [特点] 弘毅reference:library:modbus [2023/06/07 04:24] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +======  Modbus 协议库  ======
 +
 +
 +这个库是为了让你的控制器之间通过Modbus协议进行通讯。
 +
 +Modbus是一种用在工业自动化的主从协议,也可以用在别的地方,比如智能家居。
 +
 +Modbus一般使用 RS-232 或者 RS-485 协议作为物理层(也叫Modbus串口),Modbus 通过以太网或者WiFi (也叫Modbus IP)使用 TCP/IP进行通信。
 +
 +最新的版本库允许控制器作为从机使用,支持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| - 写多保持寄存器|
 +
 +<WRAP left round tip 100%>
 +
 + 1 .当使用Modbus IP 的tcp协议(默认502端口)时,消息传输之后连接就中断,也就是说,并不是持续的连接。如果你需要持续连接tcp,你就必须去掉ModbusIP.h(或者ModbusIP_*)开头这句话前面的注释。
 +
 +<code cpp>
 +#define TCP_KEEP_ALIVE
 +</code>
 +2.默认寄存器是从0开始的。使用测试软件的时候要注意,在ScadaBR 这个软件里,寄存器从0开始,设置寄存器为100,就在库文件里被设置为100了。但是,在CAS Modbus Scanner 里 是从1开始的,所以在库文件里设置寄存器为100,实际上软件里就是101.
 +3.之前的库文件里,可以选择限制保持寄存器的功能,来节省程序空间,注释掉这句话就好了
 +
 +<code cpp>
 +#define USE_HOLDING_REGISTERS_ONLY
 +</code>
 +
 +
 +这样的话 只有下面这几个功能是支持的。
 +<code cpp>
 +0x03 - 读保持寄存器
 +0x06 - 写单保持寄存器
 +0x10 - 写多保持寄存器
 +</code>
 +4.Modbus串口要从硬件串口和软件串口选择,你可以在ModbusSerial.h 文件里,把这句话注释掉
 +
 +<code cpp>#define USE_SOFTWARE_SERIAL</code>
 +
 +
 +现在你可以在主程序中加上下面的几句话:
 +<code cpp>
 +#include <Modbus.h>
 +#include <ModbusSerial.h>
 +#include <SoftwareSerial.h>
 +</code>
 +在setup() 中:
 +<code cpp>
 +SoftwareSerial myserial(2,3);
 +mb.config(&myserial, 38400);   // mb.config(mb.config(&myserial, 38400, 4) for RS-485
 +</code>
 +
 +</WRAP>
 +
 +
 +
 +
 +=== 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 Input  |  Read Only  |  addIreg(), Ireg()  |
 +
 +注意:
 +
 +输入状态有时也叫离散输入
 +保持寄存器是从机用来存储数值的
 +使用例程: 线圈寄存器 可以用来驱动LED. 保持寄存器可以存储计数器或者驱动舵机. 状态寄存器连接开关使用 ,输入寄存器连接温度传感器.