[物联网网关教程]Modbus-RTU通讯驱动
作者:互联网
本驱动构件用于通过ModbusRTU协议读写Modicon PLC设备的各种寄存器的数据;
同时也可用于对支持ModbusRTU标准协议的各类PLC、仪表、控制器数据的读写。
本驱动支持01、02、03、04、05、16常用功能码,对功能码支持请参见附录1。
串口设备 |
|
通讯协议 |
采用莫迪康ModbusRTU协议 |
通讯方式 |
一主一从、一主多从方式。驱动构件为主,设备为从。 |
硬件连接
与设备通讯之前,必须保证通讯连接正确。
通讯连接方式:与设备之间采用标准的RS485或RS232通讯。
Modicon TSX系列和Twido系列PLC的编程通讯口(Terminal Port)的通讯电缆图如下:
其他设备的通讯连接,具体请参考对应设备手册。
设备通讯参数
“ModbusRTU”端口参数设置如下:
串口通讯参数设置如下:
设置项 |
参数项 |
通讯波特率 |
9600 (默认值)、19200、38400 |
数据位位数 |
7、8(默认值) |
停止位位数 |
1(默认值)、2 |
奇偶校验位 |
奇校验、偶校验(默认值)、无校验 |
其中通讯参数设置应与设备的通讯参数相同,否则无法正常通讯。
设备通讯参数的具体设置请参见对应设备手册。
本驱动构件可支持ModbusRTU寄存器类型及对应功能码如下:
寄存器 |
数据类型 |
读取功能码 |
写入功能码 |
操作方式 |
[0]输出继电器 |
BIT |
01 |
05 |
读写 |
[1]输入继电器 |
BIT |
02 |
— |
只读 |
[3]输入寄存器 |
SHORT,LONG,FLOAT |
04 |
— |
只读 |
[4]输出寄存器 |
SHORT,LONG,FLOAT |
03 |
16 |
读写 |
说明:
功能码:[1]、[3]区不支持写操作;[4] 区在双字(32位)时,使用16功能码进行数据写操作。
数据类型:
16位整数解码顺序:调整字元件的解码顺序,对于Modicon PLC及标准PLC设备,使用默认值即可。
0—12:表示字元件高低字节不颠倒(默认值)。
例如:解码0x0001 表示1
1—21:表示字元件高低字节颠倒。
例如:表示0x0100 (即256)
32位整数解码顺序:调整双字元件的解码顺序,对于Modicon PLC,请设置为“0-3412”顺序解码。
0—3412:表示双字元件高低字颠倒,但字内高低字节不颠倒。
例如:解码0x0000 0001 表示 0x0001 0000 (即65536)
1—1234:表示双字元件不做处理直接解码(默认值)。
例如:解码0x0000 0001 表示 1
2—2143:表示双字元件高低字不颠倒,但字内高低字节颠倒。
例如:解码0x0000 0001 表示 0x0000 0100 (即256)
3—4321:表示双字元件内4个字节全部颠倒。
例如:解码0x0000 0001 表示 0x0100 0000 (即1677 7216)
32位浮点数解码顺序:调整双字元件的解码顺序,对于Modicon PLC,请设置为“0-3412”顺序解码。
0—3412:表示双字元件高低字颠倒,但字内高低字节不颠倒。
例如:解码 0x3F80 0000 表示 2.27795e-041
1—1234:表示双字元件不做处理直接解码(默认值)。
例如:解码 0x3F80 0000 表示 1.0
2—2143:表示双字元件高低字不颠倒,但字内高低字节颠倒。
例如:解码 0x3F80 0000 表示 -5.78564e-039
3—4321:表示双字元件内4个字节全部颠倒。
例如:解码 0x3F80 0000 表示 4.60060e-041
注释:1. 对于PLC及控制器等可编程设备,在需要读取大量数据的时候,请在设计下位程序时,尽量将要采集的数据放在相同寄存器的连续地址中,这样即可以提高每次采集的效率,又可以避免因地址不连续而导致的采集分块过多,通讯速度慢的问题,从而有效的提高采集速度。
2. 对于32未解码顺序,需要设置内存变量MODBUSTYPECOM1(代表COM1),在系统启动时设置脚本置内存变量为0,1,2,3即可,默认为0,可以不设置。
特殊应用的开发
本设备构件目前只实现部分通讯功能,如需要用作其它用途或本构件不能满足要求时,可自行进行开发,也可以提出具体的技术要求,由我们亲自为您定制。
附表:
本驱动构件支持的寄存器及功能码说明如下:
寄存器 |
读取功能码 |
写入功能码 |
功能码说明 |
[1区]输入继电器 |
02 |
— |
02: 读取输入状态 |
[0区]输出继电器 |
01 |
05 |
01: 读取线圈状态 05: 强制单个线圈 |
[3区]输入寄存器 |
04 |
— |
04: 读输入寄存器 |
[4区]输出寄存器 |
03 |
16 |
03: 读保持寄存器 16: 预置多个寄存器 |
说明:
1.本驱动构件支持01、02、03、04、05、16等常用功能码,对于其它非数据通讯用功能码暂不支持。
2.以上功能码均以10进制标注。功能码15和16分别对应16进制的0x0F和0x10。
注意:添加寄存器通道时,起始地址均为1,这是遵从Modbus协议的,即所谓的“协议地址”,对于部分寄存器起始地址为0的设备,通道添加时,地址应加1处理。
标签:Modbus,网关,通讯,16,解码,RTU,双字,寄存器,元件 来源: https://blog.csdn.net/sijigang/article/details/88861946