25 MODBUS RTU指令
编号 指令名 参数1 参数2 参数3 参数4 参数5 说明
1 modbusrtum K K Sn MODBUS RTU主初始化指令
2 modbusrtumrw K K K Dn K MODBUS RTU主读写指令
Dn Dn Dn Dn Dn
3 modbusrtuc K K K Sn MODBUS RTU从初始化指令
4 modbusrtuclose MODBUS RTU关闭指令
1 modbusrtum为MODBUS RTU主初始化指令:
参数1为串口编号,取值0或者2;
参数2为串口波特率;
参数3,当串口数据接收完成时会置位Sn;
例: modbusrtum 0 115200 s0 //初始化串口0,波特率为115200
2 modbusrtumrw为MODBUS RTU主读写指令:
参数1为从机的PLC NO号,取值1-255;
参数2为功能码,支持1,3,5,6,16这几个功能码;
参数3为从设备的寄存器地址;
参数4根据功能码的不同,当为读时,Dn保存读的数据,当为写时,Dn为要写
的数据;
参数5,为要读写的数据长度,注意modbus一个数据长度有2个字节;但是在功
能码1时,数据长度单位是位;
例: mov 65280 d0 //d0存入65280(16进制FF00),使用功能码5置位输出口时,
//必须写65280
modbusrtumrw 1 5 16 d0 1 //1为从机PLC站号,5为位写功能码,16
//为位地址即Y0,D0=65280,表示把Y0置1;最
//后的1在功能码为5时不起作用,写个1就可以了
mov 0 d0 //d0存入0,使用功能码5复位输出口就写0
modbusrtumrw 1 5 16 d0 1 //1为从机PLC站号,5为位写功能码,16
//为位地址即Y0,D0=0,表示把Y0清0;最后的
//1在功能码为5时不起作用,写个1就可以了
modbusrtumrw 1 1 0 d0 11 //从机站号1,功能码1,读取地址0,读
//取到D0寄存器,共读取11位;这样就把X0-10
//一次性全部读取 到D0中,D0的第0-10位依次是
//输入口X0-10的电平值。
modbusrtumrw 1 1 16 d1 13 //从机站号1,功能码1,读取地址16,读
//取到D1寄存器,共读取13位;这样就把Y0-12一次
//性全部读取到D1中,D1的第0-12位依次是输出口
//Y0-10的电平值。
modbusrtumrw 1 3 100 d1 2 //从机站号1,功能码3,读取地址100,读
//取到D1寄存器,长度为2,即读取4个字节,实际
//就是读取D50的值到D1中;
modbusrtumrw 1 16 100 d1 2 //从机站号1,功能码16,写入地址100,
//写入数据为D1寄存器,长度为2,即读取4个字节, //实际就是把D1的值写到D50中;
modbusrtumrw 1 6 100 d1 1 //从机站号1,功能码6,写入地址100,写
//入数据为D1寄存器,长度固定为1。实际就是把D1 //的低2字节值写到D50中;
3 modbusrtuc为MODBUS RTU从初始化指令:
参数1为从PLC NO号,取值1-255;
参数2为串口编号,取值0或者2;
参数3为串口波特率;
参数4,当串口数据接收完成时会置位Sn;
例: modbusrtuc 0 115200 s0 //初始化串口0,波特率为115200
4 modbusrtuclose为MODBUS RTU关闭指令:
下表列出了IO口及Dn数据寄存器对应的地址及功能码:
IO口 |
操作 |
触摸屏对应地址 |
PLC对应地址 |
功能码 |
|
位读 |
位写 |
||||
X0 |
只读 |
0x1 |
0 |
1 |
|
X1 |
只读 |
0x2 |
1 |
1 |
|
X2 |
只读 |
0x3 |
2 |
1 |
|
X3 |
只读 |
0x4 |
3 |
1 |
|
X4 |
只读 |
0x5 |
4 |
1 |
|
X5 |
只读 |
0x6 |
5 |
1 |
|
X6 |
只读 |
0x7 |
6 |
1 |
|
X7 |
只读 |
0x8 |
7 |
1 |
|
X8 |
只读 |
0x9 |
8 |
1 |
|
X9 |
只读 |
0x10 |
9 |
1 |
|
X10 |
只读 |
0x11 |
10 |
1 |
|
Y0 |
可读写 |
0x17 |
16 |
1 |
5 |
Y1 |
可读写 |
0x18 |
17 |
1 |
5 |
Y2 |
可读写 |
0x19 |
18 |
1 |
5 |
Y3 |
可读写 |
0x20 |
19 |
1 |
5 |
Y4 |
可读写 |
0x21 |
20 |
1 |
5 |
Y5 |
可读写 |
0x22 |
21 |
1 |
5 |
Y6 |
可读写 |
0x23 |
22 |
1 |
5 |
Y7 |
可读写 |
0x24 |
23 |
1 |
5 |
Y8 |
可读写 |
0x25 |
24 |
1 |
5 |
Y9 |
可读写 |
0x26 |
25 |
1 |
5 |
Y10 |
可读写 |
0x27 |
26 |
1 |
5 |
Y11 |
可读写 |
0x28 |
27 |
1 |
5 |
Y12 |
可读写 |
0x29 |
28 |
1 |
5 |
M0 |
可读写 |
0x33 |
32 |
1 |
5 |
M1 |
可读写 |
0x34 |
33 |
1 |
5 |
... |
... |
... |
... |
... |
... |
M198 |
可读写 |
0x231 |
230 |
1 |
5 |
M199 |
可读写 |
0x232 |
231 |
1 |
5 |
表4 IO口的地址及对应功能码
注:X0-10是输入口,使用功能码1读取;Y0-12是输出口,M0-M199是中间寄
存器,使用功能码1读取,功能码5写;触摸屏对应地址目前是按威纶触摸屏对应;
PLC对应地址是实际通讯时的数据值,比如我们用串口助手调试的时候用这个地址
值。
功能码5一次只能置位或清零一个输出口;功能码1可以一次读取多个输入或输出口
Dn数据寄存器 |
操作 |
触摸屏对应地址 |
PLC对应地址 |
功能码 |
||
多寄存器读 |
多寄存器写 |
单寄存器写(2字节) |
||||
D0 |
可读写 |
4x1 |
0 |
3 |
16 |
6 |
D1 |
可读写 |
4x3 |
2 |
3 |
16 |
6 |
D2 |
可读写 |
4x5 |
4 |
3 |
16 |
6 |
D3 |
可读写 |
4x7 |
6 |
3 |
16 |
6 |
...... |
可读写 |
...... |
...... |
3 |
16 |
6 |
D997 |
可读写 |
4x1995 |
1994 |
3 |
16 |
6 |
D998 |
可读写 |
4x1997 |
1996 |
3 |
16 |
6 |
D999 |
可读写 |
4x1999 |
1998 |
3 |
16 |
6 |
表5 Dn数据寄存器的地址即对应可读写功能码
Dn数据寄存器 |
操作 |
触摸屏对应地址 |
PLC对应地址 |
功能码 |
多寄存器读 |
||||
D0 |
只读 |
3x1 |
0 |
4 |
D1 |
只读 |
3x3 |
2 |
4 |
D2 |
只读 |
3x5 |
4 |
4 |
D3 |
只读 |
3x7 |
6 |
4 |
...... |
只读 |
...... |
...... |
4 |
D997 |
只读 |
3x1995 |
1994 |
4 |
D998 |
只读 |
3x1997 |
1996 |
4 |
D999 |
只读 |
3x1999 |
1998 |
4 |
表6 Dn数据寄存器的地址即对应只读功能码
注:modbus通讯协议规定每个地址占2个字节。因为1个Dn数据寄存器是4个
字节,所以1个Dn数据寄存器占用2个地址。比如D0占用PLC地址是0,1;D1占用
2,3;D999占用1998,1999
26 EEPROM指令
编号 指令名 参数1 参数2 参数3 说明
1 eepromread K Dn K EEPROM 读指令
Dn Dn Dn
K Fn K
Dn Fn Dn
2 eepromwrite K Dn K EEPROM 写指令
Dn Dn Dn
K Fn K
Dn Fn Dn
EEPROM地址范围0--4095,最大4096个字节;EEPROM写是有寿命的,所以尽量少频繁的写。
1 eepromread为EEPROM 读指令:
参数1为要读取的地址,取值0--4095;
参数2为寄存器地址起始地址,读取的值保存在从此寄存器开始的地址;
参数3为要读取的数据长度,单位字节;
例: eepromread 0 d200 4 //从地址0开始读取4个字节保存到D200寄存器中,
//如果,地址0,1,2,3开始依次保存的是1,2,3,4,那么D200
//中从低到高字节依次是1,2,3,4,所以D200为16进制的值
//是4030201,10进制的值是67305985
2 eepromwrite为EEPROM 写指令:
参数1为要写的地址,取值0--4095;
参数2为寄存器地址起始地址,要写的值放在从此寄存器开始的地址;
参数3为要写的数据长度,单位字节;
例: eepromwrite 0 d200 4 //把D200寄存器中的值,从地址0开始,共写4个字节
27 PID指令
编号 指令名 参数1 参数2 参数3 参数4 参数5 说明
1 pidinit K Fn Fn Fn Fn PID初始化指令
2 pidrun K Fn Fn Fn PID运算指令
3 pidreset K PID复位指令
1 pidinit为PID初始化指令:
参数1为序列号,取值0--9,总共10个PID运算;
参数2为PID参数Kp;
参数3为PID参数Ki;
参数4为PID参数Kd;
参数5为PID参数更新周期T,单位秒;
2 pidrun为PID运算指令:
参数1为序列号,取值0--9,总共10个PID运算;
参数2为输入值;
参数3为期望值;
参数4为输出值,此值被限制在范围+-65536;
3 pidreset为PID复位指令:
参数1为序列号,取值0--9,总共10个PID运算;
此指令会清除PID运算过程中保留的数据:比例误差,积分误差,微分误差。
例: pidinit 0 f90 f91 f92 f82 //pid0初始化,f90为kp;f91为ki;f92为kd;f82为更新周期
pidrun 1 f5 f85 f84 //pid1运算,f5为实际值,f85设定值,f84为pid输出
版权声明:本文为CSDN博主「chengsu317」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chengsu317/article/details/122879129
暂无评论