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

功能指令:

10         串口指令

        编号         指令名     参数1      参数2      参数3      参数4     参数5         说明

        1               serial         K              K            Dn           Dn         Sn         串口初始化指令

        2            serialsend    K              Dn          Dn                                      串口发送指令

                                            K              Dn          K

        3       serialgetnum     K              Dn                                                获取串口接收字节数指令

        1        serial为串口初始化指令:

                        参数1取值0或2。分别代表串口0,串口2.共2个串口。其中串口 0是板载的USB

                接口,被系统使用,print,prints指令会通过串口0输出;

                        参数2表示波特率,最好取:9600,19200,38400,57600,115200,这几个波特率。

                        参数3表示要接收的数据寄存器起始地址,按字节选址。

                        参数4,串口实际接收的长度,即字节数,保存到这个Dn寄存器。

                        参数5,串口接收完成后会置位Sn,如果此Sn被中断程序注册,当串口接 收完成

                后会 产生一个中断,程序会去执行中断程序。

        2        serialsend为串口发送指令:

                        参数1取值0或2。分别代表串口0,串口2.共2个串口。其中串口 0被系统保留;

                        参数2表示要发送的数据寄存器起始地址,按字节寻址。

                        参数3,串口要发送的长度,即字节数。

        3        serialgetnum为获取串口接收字节数指令:

                        参数1取值0或2。分别代表串口0,串口2.共2个串口。其中串口 0被系统保留;

                        参数2保存接收的字节数。如果不想用接收中断的方式处理接收的数据,可以用

                这个 指令采取查询的方式处理接收数据,当获取的字节数大于0时,表示有数据被接

                收了。

                例:

                        serial 2 115200 D40 D10 S0 //串口2初始化,波特率115200,接收的数据

                                                                        //保存在D40开始的地址,接收的字节数保存在

                                                                        //D10寄存器,接收完成后S0会被置1

                        Serialsend 2 D20 5 //把D0寄存器的4个字节和D21的第0个字节,共5

                                                        //个字节发送出去

                        serialgetnum 2 D30 //获取串口接收的字节数保存到D30,实际D30=D40;也可以

                                                        //不使用这条指令,通过查询D10的值来处理接收的数据

11         IIC主指令

        编号         指令名         参数1         参数2         参数3         参数4         说明

        1                 iic                 K                 K                                               iic主初始化指令

        2                 iicwrite         K                 Dn            Dn             Dn           iic主写指令

                                                K                 K              Dn              K

        3                 iicread         K                 Dn            Dn              Dn          iic主读指令

                                               K                  K              Dn              K

        1         iic为iic初始化指令:注意此IIC是工作在主模式;

                        参数1取值0或1,0表示按8位地址寻址,1表示按16位地址寻址。一般带 IIC接口

                的传感器 都是按8位地址寻址,比如6轴传感器MPU6050;而IIC接口的存储芯片很多是

                16位地 址寻址,比如24C256。

                        参数2通讯速率,单位Hz,一般用100000或400000;

        2         iicwrite为iic写指令:

                        参数1表示从地址,即接口芯片的IIC地址。

                        参数2是接口芯片的寄存器起始地址;

                        参数3是要写的数据;

                        参数4表要写的数据的长度,按字节数;

        3         iicread为iic读指令:

                        参数1表示从地址,即接口芯片的IIC地址。

                        参数2是接口芯片的寄存器起始地址;

                        参数3表示读出来的数据要存储的寄存器起始地址,按字节寻址。

                        参数4表示要读的数据的长度,按字节数;

                例:

                        iic 0 400000 //8位地址寻址,速率400000Hz

                        iicwrite hd0 h1a D0 1 //0xd0是mpu6050的IIC地址,0x1a是被写的寄存器地址,D0                                                 //是要写的数据,写1个字节,即把D0的最低字节写到mpu6050

                                                //的0x1a寄存器里面

                        iicread hd0 h3b D10 6 //0xd0是mpu6050的IIC地址,0x3b是要读的寄存器地址

                                                //起始地址,D10是读出来的数据要存储的起始寄存器,读6个

                                                //字节,即D10里面从低到高字节依次存储4个字节,D11从低到高

                                                //依次存储剩下的2个字节。

12         IICSLAVER从指令

        编号         指令名         参数1     参数2     参数3     参数4     参数5     说明

        1              iicslaver         K            In           Dn         Sn           Sn       iic从初始化指令

        2            iicslaverwrite   Dn          Dn                                                  iic从写缓存指令

                                                DIn         Dn

        1  iicslaver为iic从初始化指令:此IIC是工作在从模式;iic从的内部读写缓存都是128字节;

                参数1--K,设置7位本机从地址;

                参数2--In,使用寻址寄存器In,当主机要读写的寄存器地址(16位地址)保存到此寻址

        寄存器里面, 注意,这里只能寻址整形寄存器Dn;

                参数3--Dn,当主机写的时候,保存写的数据字节长度;

        当主机读的时候,此寄存器值为读缓存长度128字节;

        主机读的是前一次缓存中的数据,所以如果主机要读取最新的数据,主机要连续读2次,且

        中间间隔至少50ms, 从机在第一次主机读的要在读中断中更新缓存中数据,当主机第2次

        读取时就是 最新的数据内容。

                参数4--Sn,读中断,当有主机读的时候,会置位此Sn;

                参数5--Sn,写中断,当有主机写的时候,会置位此Sn;

        2         iicslaverwrite为iic从写缓存指令,把寄存器内容写入发送缓存,待主机读取;

                参数1,待写的数据寄存器起始地址;

                参数2表示要写的数据的字节长度;

        例:

                iicslaver 52 i0 d0 s0 s1 //初始化IIC从,本机从地址52(注意是7位地址),I0保存主机

                                                //要读写的寄存器地址,D0是读写字节长度,

                                                //主读S0置位,主写S1置位

                iicslaverwrite di0 d0 //IIC从更新发送缓存,i0是地址(主写的时候,I0已经保存了要

                                                //写的地址),D0是字节数

13         SPI指令

        编号         指令名         参数1         参数2         说明

        1                 spi               K                 K            spi初始化指令

        2             spiwrite           Dn                              spi写指令

        3             spiread            Dn                             spi读指令

        4              spirw              Dn              Dn           spi读写指令

                                                Dn               K

        1        spi为spi初始化指令:

                        参数1取值0,1,2,3,表示SPI的4种工作模式;

                        参数2是速率,取值请参加下表

参数2取值

0

1

2

3

4

5

6

7

8

9

10

11

12

SPI速度(MHz)

1

2

4

8

9

10

11

13

16

20

26

40

80

        表3         SPI速度取值

        2        spiwrite为spi写指令:        

                        参数1是要写的数据,因为一次性只能写一个字节,所以写的是Dn 的最低字 节;

        3        spiread为spi读指令:

                参数1是读出的数据,因为一次性只能读一个字节,所以读出的字节 存储在Dn 的最低

        字节;

        4        spirw为spi读写指令:同步读写指令,写的同时也把数据读出来;

                参数1是读出的数据,读出的字节存储在Dn的最低字节;

                参数2是要写的数据,写入的是Dn的最低字节;

                例: spi 3 0 //工作模式3,速率2MHz.

                        spiwrite d0 //把d0的最低字节写到spi装置

                        spiread d1 //从spi装置读取一个字节存储到d1的最低字节

                        spirw d1 d0 //把d0的最低字节写到spi装置同时读取一个字节存储到d1的最低字节

                        spirw d1 11 //把值11写到spi装置同时读取一个字节存储到d1的最低字节

 14         定时器指令

        编号         指令名         参数1         参数2         参数3         说明

        1                 time             K               K                Sn            定时器初始化指令

        2            timestart           K               K                 K             定时器启动指令

        3             timestop          K               K                                 定时器停止指令

        4             timeget            K               K                 Dn           定时器获取计时时间指令

        1        time为定时器初始化指令:

                        参数1取值0-9,共10个定时器或者计时器;

                        参数2取值0或1,0表示周期性定时器,1表示计时器;周期性定时器会在计时到

                指定时间后 又从头开始计时,如此周而复始。当定时时间到后,会置位Sn,所以可以

                产生周期性中 断;而计时器会一直计时下去,当达到设定值时会置位Sn,产生一个中

                断,然后继续计 时下去,不会从头开始,所以此计时器只会产生一次中断;

                        参数3,当计时到设定值时会置位Sn,如果Sn注册了中断程序,程序会跳 到中断

                程序中执行;

        2        timestart为定时器启动指令:启动定时器;

                        参数1取值0-9,共10个定时器或者计时器;

                        参数2取值0或1,0表示周期性定时器,1表示计时器;周期性定时器会在计时到

                指定时间后 又从头开始计时,如此周而复始。当定时时间到后,会置位Sn,所以可以

                产生周期性中 断;而计时器会一直计时下去,当达到设定值时会置位Sn,产生一个中

                断,然后继续计 时下去,不会从头开始,所以此计时器只会产生一次中断;

                        参数3为设定定时值,单位为us;

        3        timestop为定时器停止指令:定时器停止计时,参数1,2与time指令一样;

        4        timeget为定时器获取计时时间指令:

                        参数1,2与time指令一样;

                        参数3获取当时的计时值,单位为us;

                注意:

                        当参数2为0即定时器设置为周期性定时器时,此指令获取的时间是从timestart指令

                开始到 此指令执行时的时间,但当发生中断时,会重新开始计时,所以读取的值会小于

                等于设 定的周期值;

                        当参数2为1即定时器设置为计时器模式时,此指令获取的时间是从timestart指令开

                始到 此指令执行时的时间,不会因为有中断而重新计时,此时间会一直累加上去。因为

                寄存 器为4字节有负号数,所以最大计时大概35分钟左右;

                例: time 1 0 S0 //初始化周期性定时器1,定时时间到会置位s0.

                        timestart 1 0 1000000 //启动周期性定时器1,定时时间1s.

                        timestop 1 0 //停止周期性定时器1.

                        timeget 1 0 d0 //获取当前的计时值保存到D0寄存器

15         PWM指令

        编号         指令名         参数1         参数2         说明

        1                 pwm            K               Dn            PWM初始化指令

        2             pwmstart        K               Dn            PWM启动指令

        3            pwmsetduty    K               Dn            PWM设置占空比指令

        4             pwmstop        K                                PWM停止指令

        1        pwm为PWM初始化指令:

                        参数1为脉冲频率,单位Hz;

                        参数2为根据脉冲频率计算出的100%占空比时的值,保存到Dn寄存器;意思就是在

                使用pwmstart 指令启动时,如果设置此值的一半,则占空比就是50%,设置四分之一就

                是25%占空比; 此值会因为频率的变高而减小;

        2        pwmstart为PWM启动指令:

                        参数1为通道,有0-7共8个通道;

                        参数2为占空比设定值,注意设定值不能超过pwm指令输出的Dn值。

        3        pwmsetduty为PWM设置占空比指令:

                        参数1为通道,有0-7共8个通道;

                        参数2为占空比设定值,注意设定值不能超过pwm指令输出的Dn值。

        4        pwmstop为PWM停止指令:

                        参数1为通道,有0-7共8个通道;

                例: pwm 1000 d0 //pwm初始化,d0保存100%占空比的值

                        pwmstart 0 d0 //pwm0启动,100%占空比

                        pwmsetduty 0 d1 //改变占空比,如果d1=d0/2,占空比为50%

                        pwmstop 0 //停止pwm输出

16         有刷马达指令

        编号         指令名          参数1         参数2            说明

        1         brushmoto          K                 K                 有刷马达初始化指令

        2      brushmotomove    K                Fn                有刷马达运行指令

                                                K                 F

        3        brushmotostop    K                                   有刷马达停止指令

        指令说明:

        1         brushmoto为有刷马达初始化指令:

                        参数1为通道,有0-3共4个通道。可以同时驱动4个有刷马达;

                参数2为频率,单位Hz。有刷马达的速度通过改变PWM的占空比来控制;

        2         brushmotomove为有刷马达运行指令:

                        参数1为通道,有0-3共4个通道。

                        参数2为占空比设置,值为正时,马达正转,最大占空比100;为负时马达反转,最

                大占空比-100;

        3         brushmotostop为有刷马达停止指令:

                        参数1为通道,有0-3共4个通道。执行这条指令后,马达控制的2个端口都输出低电

                平。与占 空比设置为0时的效果一样。

                例: brushmoto 1 500 //有刷马达1初始化,频率500Hz

                        brushmotomove 1 60 //马达1以60%占空比运行

                        brushmotostop 1 //马达1停止运行

17         舵机指令

        编号         指令名           参数1         参数2         说明

        1         servomoto            K                                舵机初始化指令

        2         servomotostart    K                K              舵机启动指令

                                                 K                Dn

        1        servomoto为舵机初始化指令:此指令可以驱动舵机;也可以通过电调驱动三相无刷马

                达; 频率固定为400Hz,周期为2.5ms。

                        参数1为通道,有0-7共8个通道;

        2         servomotostart为舵机启动指令:

                        参数1为通道,有0-7共8个通道;

                        参数2为输出高电平时间,单位us,最大2500,即2.5ms;

                注意:

                        占空比的计算公式为:占空比=输出时间*100/2500 (%) ;

                        如果是通过电调驱动无刷电机,一般电调的输入控制为1-2ms,即1000-2000us,让

                指令输出这个时间范围就可以让无刷马达从0到最大的速度之间转动;

                        如果是驱动舵机,有些舵机只有正角度,就使用1000-2000us的时间可以让舵机实

                现0到最大角度;有些舵机是正负角度,可能要使用500-1500us的时间输出让舵机实现

                正负角度转动。具体的输出时间需要参考舵机的使用说明书。

                例: servomoto 1 //舵机1初始化

                        servomotostart 1 1500 //输出1500us,启动舵机1,要改变舵机速度, 输出不同的

                                                                //时间就可以了

                        servomotostart 1 1800 //输出1800us,增加舵机速度

版权声明:本文为CSDN博主「chengsu317」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chengsu317/article/details/122820106

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