第四课 S7-200作为主站与从站51单片机Modbus RTU通讯

转载地址:http://blog.sina.com.cn/s/blog_14f58a1920102x2qm.html

系列地址:http://blog.sina.com.cn/s/articlelist_5626175890_9_1.html

西门子plc200学习笔记

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯

本节主要完成PLC作主站,51单片机作从站,用ModBus协议进行通讯。PLC读取单片机保持寄存器区的数据。S7-200PLC程序主要通过调用Modubs RTU 主站指令库完成。

一、调用 Modbus RTU 主站初始化和控制子程序

使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯_第1张图片

各参数意义如下:

a.

EN

使能:

必须保证每一扫描周期都被使能(使用 SM0.0)

b.

Mode

模式:

为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议

c.

Baud

波特率:

支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。

d.

Parity

校验:

校验方式选择

 

0=无校验

1=奇较验

2=偶较验   

e.

Timeout

超时:

主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。

 

注意: 这个值必须设置足够大以保证从站有时间响应。

f.

Done

完成位:

初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作(见例程)

g.

Error

 

初始化错误代码(只有在 Done 位为1时有效):

 

0= 无错误

1= 校验选择非法

2= 波特率选择非法

3= 模式选择非法

 

二、调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯_第2张图片

各参数意义如下:

a.

EN

使能:

同一时刻只能有一个读写功能(即 MBUS_MSG)使能

 

  注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。

b.

First

读写请求位:

每一个新的读写请求必须使用脉冲触发

c.

Slave

从站地址:

可选择的范围   1 - 247

d.

RW

从站地址:

0 = 读, 1 = 写

 

  注意:

1. 开关量输出和保持寄存器支持读和写功能

2. 开关量输入和模拟量输入只支持读功能

e.

Addr

读写从站的数据地址:

 

选择读写的数据类型

 

00001 至 0xxxx - 开关量输出

 

10001 至 1xxxx - 开关量输入

30001 至 3xxxx - 模拟量输入

40001 至 4xxxx - 保持寄存器

f.

Count

数据个数

通讯的数据个数(位或字的个数)

 

  注意: Modbus主站可读/写的最大数据量为120个字(是指每一个 MBUS_MSG 指令)

g.

DataPtr

数据指针:

1. 如果是读指令,读回的数据放到这个数据区中

 

2. 如果是写指令,要写出的数据放到这个数据区中

h.

Done

完成位

读写功能完成位

i.

Error

错误代码:

只有在 Done 位为1时,错误代码才有效

 

0 = 无错误

1 = 响应校验错误

2 = 未用

3 = 接收超时(从站无响应)

4 = 请求参数错误(slave address, Modbus address, count, RW)

5 = Modbus/自由口未使能

6 = Modbus正在忙于其它请求

7 = 响应错误(响应不是请求的操作)

8 = 响应CRC校验和错误

-

101 = 从站不支持请求的功能

102 = 从站不支持数据地址

103 = 从站不支持此种数据类型

104 = 从站设备故障

105 = 从站接受了信息,但是响应被延迟

106 = 从站忙,拒绝了该信息

107 = 从站拒绝了信息

108 = 从站存储器奇偶错误

常见的错误:

如果多个 MBUS_MSG 指令同时使能会造成 6 号错误库存储区被程序其它地方复用,有时也会造成6 号错误从站 delay 参数设的时间过长会造成主站 3 号错误从站掉电或不运行,网络故障都会造成主站 3 号错误。

三、需要从站支持的功能及Modbus 保持寄存器地址映射

为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能:

需要从站支持的功能

Modbus 地址

读/写

Modbus 从站须支持的功能

00001 - 09999
数字量输出

功能 1

功能 5:写单输出点
功能 15:写多输出点

10001 - 19999
数字量输入

功能 2

30001 - 39999
输入寄存器

功能 4

40001 - 49999
保持寄存器

功能 3

功能 6:写单寄存器单元
功能 16:写多寄存器单元

Modbus 保持寄存器地址映射举例:

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯_第3张图片

四、S7-200PLC程序

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯_第4张图片

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯_第5张图片

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯_第6张图片

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯_第7张图片

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯_第8张图片

五、单片机程序;STC11F04E单片机,9600波特率

START:   MOV TMOD,#21H ;定时器1是8位再装入,定时器0为16位定时器

         MOV TH1,#0FDH;预置初值(按照波特率9600BPS预置初值)

         MOV TL1,#0FDH; 0FDH=9600=11.0592

         MOV  TH0, #0DCH;88H     ;8800=12t,7000=stc1t

            MOV  TL0, #00H

         ORL IE, #92H  ;EA=1,ES=1;ET0=1

         SETB PS       ;串口中断优先

         SETB TR1      ;启动定时器1

         MOV 98H,#50H  ;scon

         MOV P1M0,#01000000b     ; P1M0=0 P1M1=0双向口 P1M0=1 P1M1=0输入口   P1M0=0 P1M1=1推挽输出20ma

         MOV P1M1,#10000000b

         MOV WDT_CONTR ,#27H 看门狗设置使能

QL0:     MOV A,#00H

         MOV R0,#10H

         MOV R2,#9BH  ;10-ABH清零

CLEAR:   MOV @R0,A

         INC R0

         DJNZ R2,CLEAR

         CLR  FLAG

         CLR  FLAG_0

         SETB TR0          ;启动定时器0

         ;ANL AUX,#07FH    ;p3.0p3.1当串口

         ORL AUX,#80H             ;p1.7,p1.6当串口

         CLR P3.7                        ;485芯片接收使能

 

WA1:    ;MOV WDT_CONTR ,#37H;喂狗; SETB CW

        JNB FLAG_0,WA1     ;FLAG_0=1表示已经接收到上位机数据

        CLR TR0

        MOV A,2CH         ;检查设备地址是01h码,设本机地址码是1

        MOV R2,A

        XRL A,#01H

        JNZ QL0

        ACALL FSZJ  ;FH: DB 01H,03H,16,00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,0DH,0EH,0FH,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1EH,1FH;18

        ACALL DELAY

        CALL FZJ

    AJMP QL0

FZJ:     MOV R0,#2cH       ;向主机发送数据子程序

FZJ0:    MOV R2,#10H

FZJ1:    CLR EA

         ANL AUX,#07FH     ;p3.0p3.1当串口

FZL1:     MOV A,@R0

         MOV SBUF,A

         JNB TI,$

         CLR TI

         INC R0

         DJNZ R2,FZL1

         SETB EA

         RET

 

FSZJ:    MOV DPTR,#FH

         MOV R2,#19;

         ORL AUX,#80H

         SETB P3.7          ;发送数据

         MOV R0,#40H

FSZJA:    MOV A,#0H

         MOVC A,@A+DPTR

         MOV @R0,A

         INC R0

         INC DPTR

         DJNZ R2,FSZJA

         MOV R0,#40H

         MOV CRCCD,#19

         LCALL CRC1

         MOV R2,#21

         MOV R0,#40H

FSZJ2:   MOV A,@R0

         MOV SBUF,A

         JNB TI,$

         CLR TI

         INC R0

         DJNZ R2,FSZJ2

         SETB EA

         RET

FH:DB 01H,03H,16,00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,0DH,0EH,0FH,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1EH,1FH;18

 

用串口助手检测到的数据如下图。

第四课 S7-200作为主站与从站51单片机Modbus RTU通讯_第9张图片

你可能感兴趣的:(modbus)