最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

S7-1500Modbus

IT圈 admin 30浏览 0评论

2024年3月15日发(作者:宋子辰)

/CN/view/zh/105784261

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

目录

1.

2.

3.

4.

5.

6.

7.

8.

S7-1500 Modbus-RTU功能简介.................................................................... 3

S7-1500 Modbus-RTU系统实例.................................................................... 5

该实例所用的软件及硬件 ................................................................................ 6

硬件组态步骤................................................................................................... 7

软件编写 .......................................................................................................... 9

注意事项........................................................................................................ 23

常见错误........................................................................................................ 24

本例程下载地址 ............................................................................................. 25

2

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

1S7-1500 Modbus-RTU功能简介

S7-1500可以在主机架或分布式 IO站使用点对点通信模块来实现Modbus-RTU

通信,如需在S7-1500的分布式IO站上实现Modbus-RTU通信,推荐通过

Profinet或者Profibus的方式扩展ET 200MP或者ET 200SP站,通过在ET

200MP或者ET 200SP上配置HF(高性能)的点对点通信模块来实现。

根据实际使用通信物理接口的不同,S7-1500主机架和ET 200MP可使用的模

板分CM PtP RS232 HF(6ES7 541-1AD00-0AB0)和CM PtP RS422/485 HF

(6ES7 541-1AB00-0AB0)两种,普通的点对点通信模块(型号BA结尾)是

无法通过本文档实现Modbus-RTU通信;而ET 200SP的点对点通信模块只有

一个,即CM PtP(6ES7 137-6AA00-0BA0),该模块物理接口支持RS-

232/422/485。

不同的接口类型其端子接线并不相同,详见该模块接线图,链接如下:

S7-1500 CM PtP RS232 HF:

/CN/view/en/59057160/0/zh

S7-1500 CM PtP RS422/485 HF:

/CN/view/en/59061372/0/zh

ET 200SP CM

PtP:

/CN/view/en/59061378/0/zh

以上介绍的模板,无论是安装在S7-1500主机架的模板还是分布式 IO站的模板

,都可做Modbus-RTU的主站或从站,通过直接调用Modbus-RTU相关程序块

即可实现Modbus-RTU通信,而无需硬件狗。

S7-1500 Modbus-RTU的特点还在于:无论点对点通信模块安装在S7-1500主

机架还是分布式 IO站;也无论分布式 IO站是通过ET 200MP还是ET 200SP

来实现Modbus-RTU通信,其组态步骤、方法、调用的程序块及注意事项等均

完全相同。

S7-1500支持的Modbus功能代码如下表 1和表 2。

表 1.用于读取数据的功能:读取分布式 I/O

1)用于扩展寻址

表 2.用于写入数据的功能:更改分布式 I/O和程序数据

3

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

4

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

2S7-1500 Modbus-RTU系统实例

本文以示例项目为例,阐述S7-1500实现Modbus-RTU通信的配置步骤、程序

编写及注意事项,系统配置如下图1。

图 1实例系统构成

该实例中,Modbus-RTU主站为安装在S7-1500主机架上的CM PtP

RS422/485 HF,Modbus-RTU从站模块(站地址为2)为安装在ET 200SP分

布式IO上的CM PtP,接口类型为RS485,通信波特率为9600bit/s,无奇偶校

验。

5

3

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

该实例所用的软件及硬件

SIMATIC部件

Component

CPU 1516-3 PN/DP

存储卡,24 MB

通信模块,CM PtP,RS422/485,

高性能型

IM 155-6 PN ST,带服务器模块和

总线适配器 2xRJ45 (6ES7193-

6AR00-0AA0)

CM PtP(自由口,3964R,USS,

Modbus RTU)

BU A0型,16个直插式端子,2个

单独馈电端子(数字量/模拟量,最

高 24VDC/10A)

PC

Qty.

1

1

1

MLFB / Order number

6ES7516-3AN00-0AB0

6ES7954-8LF01-0AA0

6ES7541-1AB00-0AB0

FW1.6

以实际容量为准

Note

16ES7155-6AA00-0BN0

16ES7137-6AA00-0BA0

1

1

6ES7193-6BP00-0DA0

软件

/ Order number

6ES7822-1AA03-0YA5

Note

Step7 V13 Update 6SIMATIC STEP 7 Professional V13 1

6

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

4硬件组态步骤

按照系统配置图,首先组态S7-1516 CPU主机架,在主机架上配置点对点通信

模块,并将该模块的协议设置为“Modbus”,如下图2。

图 2 S7-1500 CPU主机架点对点通信模块组态

然后激活CPU的“系统和时钟存贮器功能”,如下图3。(本例程中使用了

CPU首次扫描位来实现Modbus的初始化,使用CPU的时钟信号来控制发送频

率,该方法供参考。)

7

图 3激活CPU的系统和时钟存储器

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

然后组态ET 200SP分布式IO站,并在该分布式IO上组态点对点通信模块,并

将该模块的通信协议设置为“Modbus”,如下图4。

图 4 ET200 SP分布式IO站点对点模块组态

至此硬件配置已完成。有关ET 200SP分布式IO组态详细步骤及如何为

Profinet设备分配Device Name,本使用入门不再阐述,如需帮助,请参阅下载

中心文档:《ET 200SP 使用快速入门》,链接如下:

/download/?ID=7363&loginID=

&srno=&sendtime=

8

5

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

软件编写

S7-1500实现Modbus-RTU功能,需要调用以下指令,见下表3,其中“

Modbus_Comm_Load”指令用于通信模块的组态,“Modbus_Master” 指令

和“Modbus_Slave” 指令分别实现Modbus主站通信和Modbus从站通信。

“Modbus_Comm_Load”指令和“Modbus_Master”/ “Modbus_Slave”

指令是通过“Modbus_Comm_Load”指令的“MB_DB”参数来实现关联的。

表 3. Modbus-RTU相关指令

在此,首先编写Modbus主站程序,添加一个新FB,将其命名为“Modbus-

Master”,如下图5。

图 5添加Modbus-Master功能块

在该FB中以多重背景方式调用“Modbus_Comm_Load”指令,该指令在指令

目录下“通信—〉通信处理器—〉Modbus(RTU)”下,如下图6。

9

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 6调用“Modbus_Comm_Load”

在该FB中以多重背景方式调用“Modbus_Master”指令,该指令在指令目录下

“通信—〉通信处理器—〉Modbus(RTU)”下,如下图7。

10

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 7调用“Modbus_Master”指令

然后对“Modbus_Comm_Load”指令进行参数化,由于该指令参数较多,在此

只列出必须要关注的参数,如下表4所示,其它参数解释见手册或在线帮助。

表 4. Modbus_Comm_Load主要参数列表

参数

REQ

PORT

声明

IN

IN

数据类

Bool

Port

缺省

FALSE

0

说明

当此输入出现上升沿时,启动该指令。

CM端口值,即“硬件 ID”(Hardware ID)。符号端

口名称在 PLC变量表的“系统常数”(System

constants)选项卡中指定。

选择数据传输速率

有效值为: 300, 600, 1200, 2400, 4800, 9600,

19200, 38400, 57600, 76800, 115200 bit/s.

选择奇偶校验:

● 0 –无

● 1 –奇校验

● 2 –偶校验

BAUDINUDInt9600

PARITYINUInt0

11

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

MB_DBIN/OUTMB_BASE

对 Modbus_Master或 Modbus_Slave指令的背景

数据块的引用。

MB_DB参数必须与 Modbus_Master或

Modbus_Slave指令的静态参数MB_DB关联。

工作模式

有效的工作模式包括:

● 0 =全双工 (RS232)

● 1 =全双工 (RS422)四线制操作(点对点)

● 2 =全双工 (RS 422)四线制模式(多点主,CM

PtP (ET 200SP))

● 3 =全双工 (RS 422)四线制模式(多点从,CM

PtP (ET 200SP))

● 4 =半双工 (RS485)二线制模式

MODE StaticUSInt0

首先要为“Modbus_Comm_Load”指令指定端口,即该指令是针对哪个点对点

模块进行参数化的。在硬件配置中,每个硬件均有一个硬件标识符,该硬件标识

符在硬件属性中可以查看到,如下图8。

图 8在硬件属性中查看模块硬件标识符

同样,该硬件标识符也可以在“PLC变量—〉显示所有变量—〉系统变量”下

可以查看到,如下图9。

12

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 9 PLC变量表中查看系统常量

所以可以通过如图10所示方法,通过拖拽的方式,将Modbus主站接口的硬件

标识符拖至“Modbus_Comm_Load”指令的“Port”接口参数处,如下图10。

图 10为“Modbus_Comm_Load”指定端口

接下来,定义端口的工作模式,本示例中,点对点模块的工作模式为RS485,

所以需要将“Modbus_Comm_Load”背景数据中静态变量的“MODE”参数赋

值为4,赋值既可以通过“Move”指令来完成,也可以通过直接修改该静态变

量的默认值来实现,本实例使用后一种方法,参见下图11。

13

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 11定义Modbus-RTU主站端口工作模式为RS485

接下来,通过对“Modbus_Comm_Load”指令的“MD_DB”参数赋值,将“

Modbus_Comm_Load”指令与“Modbus_Master”指令进行关联,即将“

Modbus_Master”指令的背景DB块中静态变量“MB_DB”赋值给“

Modbus_Comm_Load”指令的“MD_DB”,可以通过拖拽的方式来实现,拖

拽路径如下图12。

14

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 12对“Modbus_Comm_Load”指令的“MD_DB”参数赋值

除以上操作外,对于“Modbus_Comm_Load”指令的“REQ”参数,本实例使

用PLC的首个扫描位来完成。其它参数如波特率,奇偶校验等,请根据实际使

用情况对这些参数进行赋值,因本实例波特率为9600bit/s,无奇偶校验,所以

以上参数使用缺省设置即可。

接下来,对指令“Modbus_Master”进行参数设置,该指令主要参数如下表5

所示。

表 5. Modbus_Master主要参数列表

参数

REQ

声明

IN

数据

类型

Bool

缺省值

FALSE

说明

FALSE =无请求

TRUE =请求向 Modbus从站发送数据

Modbus RTU站地址:

标准地址范围(1到 247以及 0,用于

Broadcast)

扩展地址范围(1到 65535以及 0,用于

Broadcast)

值 0为将帧广播到所有 Modbus从站预

留。广播仅支持 Modbus功能代码 05、

06、15和 16。

模式选择:指定请求类型(读取、写入或

诊断)。

MB_ADDRINUInt0

MODEINUSInt0

15

DATA_ADDR

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

IN

IN

UDInt

UInt

0

0DATA_LEN

从站中的起始地址:指定在 Modbus从站

中访问的数据的起始地址。

数据长度:指定此指令将访问的位或字的

个数。

数据指针:指向要进行数据写入或数据读

取的标记或数据块地址。

DATA_PTR IN/OUTVariant

由于Modbus指令读取或写入的数据区必须为指针寻址,所以必须是有绝对地址

的区域方可访问,而S7-1500创建的DB块缺省为优化的DB块,变量没有绝对

地址,无法直接使用。本例中我们创建DB块,并在该DB块内创建一个名为“

M_Data”的数组,类型为WORD,长度为100,即创建了100个字的存储空间

。然后在该DB块点右键,在属性中将“优化的块访问”前的勾去掉,重新编译

该DB块,该DB块就会生成,可以看到每个变量都有偏移地址了,如下图13。

图 13创建一个标准DB块

根据下表6所示的Modbus功能码,本实例需要Modbus主站读取Modbus从

站保持寄存器从起始地址开始的10个字的内容到创建的“Master_Data”中,

即Modbus功能码03的功能:

表 6. Modbus功能码的选择

16

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

17

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

根据以上要求,则“Modbus_Master”指令应按如下赋值:

“REQ”:本实例使用PLC时钟信号来完成,即下图中的M0.5;

“MB_ADDR”:2 //访问的从站地址;

“MODE”:0;//与“DATA_ADDR”参数一起决定Modbus 功能码为03

“DATA_ADDR”:40001 //Modbus地址

“DATA_LEN”:10 //数据长度为10个字

“DATA_PTR”:该参数可以通过拖拽的方式,将创建的标准DB内的变量“

M_Data”拖拽到“DATA_PTR”处,拖拽路径如下图14。

图 14为“Modbus_Master”指令进行参数赋值

接下来,编写Modbus_RTU从站程序,参照主站的程序,添加一个新FB

2“Modbus-Slave”,在该FB中以多重背景方式调用“Modbus_Comm_Load”

指令,同样为该指令选择ET 200SP的硬件地址,其它通信参数如波特率、奇偶

校验等与主站的“Modbus_Comm_Load”指令相同,如下图15。

18

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 15在从站FB中调用“Modbus_Comm_Load”指令

使用定义主站端口的工作模式相同的方法,将从站点对点模块的工作模式定义为

RS485,所以需要将“Modbus_Comm_Load”背景数据中静态变量的“MODE

”参数赋值为4,如下图16。

图 16定义Modbus-RTU从站端口工作模式为RS485

19

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

然后,以多重背景的方式调用从站指令“Modbus_Slave”指令,并设置

Modbus从站地址为2,并为从站创建一个标准的DB块“Slave Data”,长度

根据实际情况定,本例中在“Slave Data”中创建了一个长度为200字的数组

,并将该变量以拖拽的形式(也可以通过指针P#的方式),将该变量填在

“Modbus_Slave”的“MB_HOLD_REG”参数处,如下图17。

图 17调用“Modbus_Slave”指令

然后对“Modbus_Comm_Load”指令的“MD_DB”参数赋值,将“

Modbus_Comm_Load”指令与“Modbus_ Slave”指令进行关联,即将“

Modbus_Slave”指令的背景DB块中静态变量“MB_DB”赋值给“

Modbus_Comm_Load”指令的“MD_DB”,可以通过拖拽的方式来实现,拖

拽路径如下图18。

20

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 18将“Modbus_Slave”指令和“Modbus_Comm_Load”指令关联

在OB1中分别调用Modbus主站程序块和Modbus从站程序块,并为其分配全

局DB块,如下图19。

图 19在OB1中分别调用主站程序和从站程序

21

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

至此,程序编写基本结束,建立2个变量监视表,分别用来监视Modbus主站数

据和Modbus从站数据,将该例程下载到PLC后,可以看到通信模块对应的收

发LED指示灯在闪烁,表示端口正在发送/接收数据。将DB块“Slave Data”

中的变量赋值,监视主站“Master Data”中的变量,可以看到主站已经读取到

从站的数据,如下图20。

图 20使用变量监视表测试,主站侧已成功读取到从站数据

Modbus其它功能码使用方法类似,请参照表6修改相应的变量即可,此处不再

一一举例。

也可以根据此例程,举一反三,编写Modbus-RTU轮询程序。

22

6

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

注意事项

Modbus通信,不论是主站侧还是从站侧,其收发数据区必须是可通过指针寻址

的,即必须是有确切地址的数据区;而优化的DB块由于其内部变量没有地址,

所以收发数据区均不能使用优化的DB块,必须使用标准DB,否则PLC运行会

报错。

除Modbus收发数据区必须使用标准的DB块,其它部分如程序等均可使用优化

的程序块实现。

“Modbus_Comm_Load”指令的初始化信号端“REQ”和“Modbus_Master

”指令的发送/接收信号端“REQ”必须使用边沿信号触发,否则初始化、发送/

接收都无法完成。

23

7

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

常见错误

Ø

Ø

Ø

Ø

没有定义端口的工作模式。

如未定义,缺省模式为RS232。

收发数据区使用了优化的DB。

将优化的DB修改为绝对DB。

“Modbus_Comm_Load”初始化未执行。

重新执行初始化指令。

“Modbus_Master”指令输入接口参数“DATA_LEN”和“DATA_PTR”不匹

配,无法实现收发。

“DATA_LEN”必须小于等于“DATA_PTR”指向的数据存储区。

Ø点对点通信模块的“TX”/“RX”或“TXD”/“RXD”灯无闪烁。

检查“Modbus_Comm_Load”初始化参数,确保其被正确初始化;检查“

Modbus_Master”参数和“Modbus_ Slave”指令参数,确保参数正确。

24

8

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

本例程下载地址

/CN/view/zh/105784261

25

2024年3月15日发(作者:宋子辰)

/CN/view/zh/105784261

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

目录

1.

2.

3.

4.

5.

6.

7.

8.

S7-1500 Modbus-RTU功能简介.................................................................... 3

S7-1500 Modbus-RTU系统实例.................................................................... 5

该实例所用的软件及硬件 ................................................................................ 6

硬件组态步骤................................................................................................... 7

软件编写 .......................................................................................................... 9

注意事项........................................................................................................ 23

常见错误........................................................................................................ 24

本例程下载地址 ............................................................................................. 25

2

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

1S7-1500 Modbus-RTU功能简介

S7-1500可以在主机架或分布式 IO站使用点对点通信模块来实现Modbus-RTU

通信,如需在S7-1500的分布式IO站上实现Modbus-RTU通信,推荐通过

Profinet或者Profibus的方式扩展ET 200MP或者ET 200SP站,通过在ET

200MP或者ET 200SP上配置HF(高性能)的点对点通信模块来实现。

根据实际使用通信物理接口的不同,S7-1500主机架和ET 200MP可使用的模

板分CM PtP RS232 HF(6ES7 541-1AD00-0AB0)和CM PtP RS422/485 HF

(6ES7 541-1AB00-0AB0)两种,普通的点对点通信模块(型号BA结尾)是

无法通过本文档实现Modbus-RTU通信;而ET 200SP的点对点通信模块只有

一个,即CM PtP(6ES7 137-6AA00-0BA0),该模块物理接口支持RS-

232/422/485。

不同的接口类型其端子接线并不相同,详见该模块接线图,链接如下:

S7-1500 CM PtP RS232 HF:

/CN/view/en/59057160/0/zh

S7-1500 CM PtP RS422/485 HF:

/CN/view/en/59061372/0/zh

ET 200SP CM

PtP:

/CN/view/en/59061378/0/zh

以上介绍的模板,无论是安装在S7-1500主机架的模板还是分布式 IO站的模板

,都可做Modbus-RTU的主站或从站,通过直接调用Modbus-RTU相关程序块

即可实现Modbus-RTU通信,而无需硬件狗。

S7-1500 Modbus-RTU的特点还在于:无论点对点通信模块安装在S7-1500主

机架还是分布式 IO站;也无论分布式 IO站是通过ET 200MP还是ET 200SP

来实现Modbus-RTU通信,其组态步骤、方法、调用的程序块及注意事项等均

完全相同。

S7-1500支持的Modbus功能代码如下表 1和表 2。

表 1.用于读取数据的功能:读取分布式 I/O

1)用于扩展寻址

表 2.用于写入数据的功能:更改分布式 I/O和程序数据

3

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

4

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

2S7-1500 Modbus-RTU系统实例

本文以示例项目为例,阐述S7-1500实现Modbus-RTU通信的配置步骤、程序

编写及注意事项,系统配置如下图1。

图 1实例系统构成

该实例中,Modbus-RTU主站为安装在S7-1500主机架上的CM PtP

RS422/485 HF,Modbus-RTU从站模块(站地址为2)为安装在ET 200SP分

布式IO上的CM PtP,接口类型为RS485,通信波特率为9600bit/s,无奇偶校

验。

5

3

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

该实例所用的软件及硬件

SIMATIC部件

Component

CPU 1516-3 PN/DP

存储卡,24 MB

通信模块,CM PtP,RS422/485,

高性能型

IM 155-6 PN ST,带服务器模块和

总线适配器 2xRJ45 (6ES7193-

6AR00-0AA0)

CM PtP(自由口,3964R,USS,

Modbus RTU)

BU A0型,16个直插式端子,2个

单独馈电端子(数字量/模拟量,最

高 24VDC/10A)

PC

Qty.

1

1

1

MLFB / Order number

6ES7516-3AN00-0AB0

6ES7954-8LF01-0AA0

6ES7541-1AB00-0AB0

FW1.6

以实际容量为准

Note

16ES7155-6AA00-0BN0

16ES7137-6AA00-0BA0

1

1

6ES7193-6BP00-0DA0

软件

/ Order number

6ES7822-1AA03-0YA5

Note

Step7 V13 Update 6SIMATIC STEP 7 Professional V13 1

6

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

4硬件组态步骤

按照系统配置图,首先组态S7-1516 CPU主机架,在主机架上配置点对点通信

模块,并将该模块的协议设置为“Modbus”,如下图2。

图 2 S7-1500 CPU主机架点对点通信模块组态

然后激活CPU的“系统和时钟存贮器功能”,如下图3。(本例程中使用了

CPU首次扫描位来实现Modbus的初始化,使用CPU的时钟信号来控制发送频

率,该方法供参考。)

7

图 3激活CPU的系统和时钟存储器

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

然后组态ET 200SP分布式IO站,并在该分布式IO上组态点对点通信模块,并

将该模块的通信协议设置为“Modbus”,如下图4。

图 4 ET200 SP分布式IO站点对点模块组态

至此硬件配置已完成。有关ET 200SP分布式IO组态详细步骤及如何为

Profinet设备分配Device Name,本使用入门不再阐述,如需帮助,请参阅下载

中心文档:《ET 200SP 使用快速入门》,链接如下:

/download/?ID=7363&loginID=

&srno=&sendtime=

8

5

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

软件编写

S7-1500实现Modbus-RTU功能,需要调用以下指令,见下表3,其中“

Modbus_Comm_Load”指令用于通信模块的组态,“Modbus_Master” 指令

和“Modbus_Slave” 指令分别实现Modbus主站通信和Modbus从站通信。

“Modbus_Comm_Load”指令和“Modbus_Master”/ “Modbus_Slave”

指令是通过“Modbus_Comm_Load”指令的“MB_DB”参数来实现关联的。

表 3. Modbus-RTU相关指令

在此,首先编写Modbus主站程序,添加一个新FB,将其命名为“Modbus-

Master”,如下图5。

图 5添加Modbus-Master功能块

在该FB中以多重背景方式调用“Modbus_Comm_Load”指令,该指令在指令

目录下“通信—〉通信处理器—〉Modbus(RTU)”下,如下图6。

9

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 6调用“Modbus_Comm_Load”

在该FB中以多重背景方式调用“Modbus_Master”指令,该指令在指令目录下

“通信—〉通信处理器—〉Modbus(RTU)”下,如下图7。

10

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 7调用“Modbus_Master”指令

然后对“Modbus_Comm_Load”指令进行参数化,由于该指令参数较多,在此

只列出必须要关注的参数,如下表4所示,其它参数解释见手册或在线帮助。

表 4. Modbus_Comm_Load主要参数列表

参数

REQ

PORT

声明

IN

IN

数据类

Bool

Port

缺省

FALSE

0

说明

当此输入出现上升沿时,启动该指令。

CM端口值,即“硬件 ID”(Hardware ID)。符号端

口名称在 PLC变量表的“系统常数”(System

constants)选项卡中指定。

选择数据传输速率

有效值为: 300, 600, 1200, 2400, 4800, 9600,

19200, 38400, 57600, 76800, 115200 bit/s.

选择奇偶校验:

● 0 –无

● 1 –奇校验

● 2 –偶校验

BAUDINUDInt9600

PARITYINUInt0

11

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

MB_DBIN/OUTMB_BASE

对 Modbus_Master或 Modbus_Slave指令的背景

数据块的引用。

MB_DB参数必须与 Modbus_Master或

Modbus_Slave指令的静态参数MB_DB关联。

工作模式

有效的工作模式包括:

● 0 =全双工 (RS232)

● 1 =全双工 (RS422)四线制操作(点对点)

● 2 =全双工 (RS 422)四线制模式(多点主,CM

PtP (ET 200SP))

● 3 =全双工 (RS 422)四线制模式(多点从,CM

PtP (ET 200SP))

● 4 =半双工 (RS485)二线制模式

MODE StaticUSInt0

首先要为“Modbus_Comm_Load”指令指定端口,即该指令是针对哪个点对点

模块进行参数化的。在硬件配置中,每个硬件均有一个硬件标识符,该硬件标识

符在硬件属性中可以查看到,如下图8。

图 8在硬件属性中查看模块硬件标识符

同样,该硬件标识符也可以在“PLC变量—〉显示所有变量—〉系统变量”下

可以查看到,如下图9。

12

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 9 PLC变量表中查看系统常量

所以可以通过如图10所示方法,通过拖拽的方式,将Modbus主站接口的硬件

标识符拖至“Modbus_Comm_Load”指令的“Port”接口参数处,如下图10。

图 10为“Modbus_Comm_Load”指定端口

接下来,定义端口的工作模式,本示例中,点对点模块的工作模式为RS485,

所以需要将“Modbus_Comm_Load”背景数据中静态变量的“MODE”参数赋

值为4,赋值既可以通过“Move”指令来完成,也可以通过直接修改该静态变

量的默认值来实现,本实例使用后一种方法,参见下图11。

13

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 11定义Modbus-RTU主站端口工作模式为RS485

接下来,通过对“Modbus_Comm_Load”指令的“MD_DB”参数赋值,将“

Modbus_Comm_Load”指令与“Modbus_Master”指令进行关联,即将“

Modbus_Master”指令的背景DB块中静态变量“MB_DB”赋值给“

Modbus_Comm_Load”指令的“MD_DB”,可以通过拖拽的方式来实现,拖

拽路径如下图12。

14

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 12对“Modbus_Comm_Load”指令的“MD_DB”参数赋值

除以上操作外,对于“Modbus_Comm_Load”指令的“REQ”参数,本实例使

用PLC的首个扫描位来完成。其它参数如波特率,奇偶校验等,请根据实际使

用情况对这些参数进行赋值,因本实例波特率为9600bit/s,无奇偶校验,所以

以上参数使用缺省设置即可。

接下来,对指令“Modbus_Master”进行参数设置,该指令主要参数如下表5

所示。

表 5. Modbus_Master主要参数列表

参数

REQ

声明

IN

数据

类型

Bool

缺省值

FALSE

说明

FALSE =无请求

TRUE =请求向 Modbus从站发送数据

Modbus RTU站地址:

标准地址范围(1到 247以及 0,用于

Broadcast)

扩展地址范围(1到 65535以及 0,用于

Broadcast)

值 0为将帧广播到所有 Modbus从站预

留。广播仅支持 Modbus功能代码 05、

06、15和 16。

模式选择:指定请求类型(读取、写入或

诊断)。

MB_ADDRINUInt0

MODEINUSInt0

15

DATA_ADDR

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

IN

IN

UDInt

UInt

0

0DATA_LEN

从站中的起始地址:指定在 Modbus从站

中访问的数据的起始地址。

数据长度:指定此指令将访问的位或字的

个数。

数据指针:指向要进行数据写入或数据读

取的标记或数据块地址。

DATA_PTR IN/OUTVariant

由于Modbus指令读取或写入的数据区必须为指针寻址,所以必须是有绝对地址

的区域方可访问,而S7-1500创建的DB块缺省为优化的DB块,变量没有绝对

地址,无法直接使用。本例中我们创建DB块,并在该DB块内创建一个名为“

M_Data”的数组,类型为WORD,长度为100,即创建了100个字的存储空间

。然后在该DB块点右键,在属性中将“优化的块访问”前的勾去掉,重新编译

该DB块,该DB块就会生成,可以看到每个变量都有偏移地址了,如下图13。

图 13创建一个标准DB块

根据下表6所示的Modbus功能码,本实例需要Modbus主站读取Modbus从

站保持寄存器从起始地址开始的10个字的内容到创建的“Master_Data”中,

即Modbus功能码03的功能:

表 6. Modbus功能码的选择

16

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

17

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

根据以上要求,则“Modbus_Master”指令应按如下赋值:

“REQ”:本实例使用PLC时钟信号来完成,即下图中的M0.5;

“MB_ADDR”:2 //访问的从站地址;

“MODE”:0;//与“DATA_ADDR”参数一起决定Modbus 功能码为03

“DATA_ADDR”:40001 //Modbus地址

“DATA_LEN”:10 //数据长度为10个字

“DATA_PTR”:该参数可以通过拖拽的方式,将创建的标准DB内的变量“

M_Data”拖拽到“DATA_PTR”处,拖拽路径如下图14。

图 14为“Modbus_Master”指令进行参数赋值

接下来,编写Modbus_RTU从站程序,参照主站的程序,添加一个新FB

2“Modbus-Slave”,在该FB中以多重背景方式调用“Modbus_Comm_Load”

指令,同样为该指令选择ET 200SP的硬件地址,其它通信参数如波特率、奇偶

校验等与主站的“Modbus_Comm_Load”指令相同,如下图15。

18

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 15在从站FB中调用“Modbus_Comm_Load”指令

使用定义主站端口的工作模式相同的方法,将从站点对点模块的工作模式定义为

RS485,所以需要将“Modbus_Comm_Load”背景数据中静态变量的“MODE

”参数赋值为4,如下图16。

图 16定义Modbus-RTU从站端口工作模式为RS485

19

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

然后,以多重背景的方式调用从站指令“Modbus_Slave”指令,并设置

Modbus从站地址为2,并为从站创建一个标准的DB块“Slave Data”,长度

根据实际情况定,本例中在“Slave Data”中创建了一个长度为200字的数组

,并将该变量以拖拽的形式(也可以通过指针P#的方式),将该变量填在

“Modbus_Slave”的“MB_HOLD_REG”参数处,如下图17。

图 17调用“Modbus_Slave”指令

然后对“Modbus_Comm_Load”指令的“MD_DB”参数赋值,将“

Modbus_Comm_Load”指令与“Modbus_ Slave”指令进行关联,即将“

Modbus_Slave”指令的背景DB块中静态变量“MB_DB”赋值给“

Modbus_Comm_Load”指令的“MD_DB”,可以通过拖拽的方式来实现,拖

拽路径如下图18。

20

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

图 18将“Modbus_Slave”指令和“Modbus_Comm_Load”指令关联

在OB1中分别调用Modbus主站程序块和Modbus从站程序块,并为其分配全

局DB块,如下图19。

图 19在OB1中分别调用主站程序和从站程序

21

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

至此,程序编写基本结束,建立2个变量监视表,分别用来监视Modbus主站数

据和Modbus从站数据,将该例程下载到PLC后,可以看到通信模块对应的收

发LED指示灯在闪烁,表示端口正在发送/接收数据。将DB块“Slave Data”

中的变量赋值,监视主站“Master Data”中的变量,可以看到主站已经读取到

从站的数据,如下图20。

图 20使用变量监视表测试,主站侧已成功读取到从站数据

Modbus其它功能码使用方法类似,请参照表6修改相应的变量即可,此处不再

一一举例。

也可以根据此例程,举一反三,编写Modbus-RTU轮询程序。

22

6

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

注意事项

Modbus通信,不论是主站侧还是从站侧,其收发数据区必须是可通过指针寻址

的,即必须是有确切地址的数据区;而优化的DB块由于其内部变量没有地址,

所以收发数据区均不能使用优化的DB块,必须使用标准DB,否则PLC运行会

报错。

除Modbus收发数据区必须使用标准的DB块,其它部分如程序等均可使用优化

的程序块实现。

“Modbus_Comm_Load”指令的初始化信号端“REQ”和“Modbus_Master

”指令的发送/接收信号端“REQ”必须使用边沿信号触发,否则初始化、发送/

接收都无法完成。

23

7

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

常见错误

Ø

Ø

Ø

Ø

没有定义端口的工作模式。

如未定义,缺省模式为RS232。

收发数据区使用了优化的DB。

将优化的DB修改为绝对DB。

“Modbus_Comm_Load”初始化未执行。

重新执行初始化指令。

“Modbus_Master”指令输入接口参数“DATA_LEN”和“DATA_PTR”不匹

配,无法实现收发。

“DATA_LEN”必须小于等于“DATA_PTR”指向的数据存储区。

Ø点对点通信模块的“TX”/“RX”或“TXD”/“RXD”灯无闪烁。

检查“Modbus_Comm_Load”初始化参数,确保其被正确初始化;检查“

Modbus_Master”参数和“Modbus_ Slave”指令参数,确保参数正确。

24

8

C

o

p

y

r

i

g

h

t

ã

S

i

e

m

e

n

s

A

G

C

o

p

y

r

i

g

h

t

y

e

a

r

A

l

l

r

i

g

h

t

s

r

e

s

e

r

v

e

d

本例程下载地址

/CN/view/zh/105784261

25

发布评论

评论列表 (0)

  1. 暂无评论