PCM开发板模块指令详解--功能指令4

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

生成海报
点赞 0

chengsu317

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

esp32测试wifi速率

一、下载demo, demo路径esp-idf\examples\wifi\iperf 注意:运行可能会报分区表错,idf.py menuconfig修改下flash为DIO模式再试;

ESP32学习记录<四>ADC和DAC

ESP32学习记录ADC和DAC 前言 ADC和DAC是单片机比较常用的,ESP32具有12位的ADC和8位的DAC。今天我就简单地记录它们的使用。 一、ADC ADC也就是我们通常所说的模数转换,模拟信号

PCM开发板模块指令详解--功能指令4

25         MODBUS RTU指令 编号         指令名          参数1    参数2    参数3   参数4    参数5       说明 1          modbusrtum       K