您好,欢迎进入国越贸易(上海)有限公司网站!
全国服务热线:13004110107
国越贸易(上海)有限公司
产品搜索
PRODUCT SEARCH
产品分类
PRODUCT CLASSIFICATION
您现在的位置:首页 > 资料下载 > 西门子S7-200 Modbus例程
西门子S7-200 Modbus例程
浏览次数:2042发布日期:2015/10/22

西门子S7-200 Modbus例程

点击次数:2042 发布时间:2015/10/22
提 供 商: 国越贸易(上海)有限公司 资料大小: JPG
图片类型: JPG 下载次数: 306
资料类型: DOC 浏览次数: 2042
相关产品:
详细介绍: 文件下载    图片下载    

西门子S7-200 Modbus例程

参考本文介绍可以很快掌握MODBUS通讯的应用问题,

使用下面的例程你可以在S7-200CPU之间设置一个简单的Modbus通讯。
这个例子是关于Modbus功能码6的(写从站保持寄存器), 也可以作为其他所支持的功能码:1, 2, 3, 4, 5, 15 和16 的基本参数设置步骤 。

要求:
要使用Modbus协议必须先在STEP 7 Micro/Win上安装指令库 。
Modbus主站协议只支持STEP 7 Micro/Win V4.0 SP5及其以上版本.。

1. 硬件设置 

2. 参数匹配 

3. 指令库的存储地址 

4. 保持寄存器值得传输 

1. 硬件设置
例程中的Modbus通讯是在两个S7-200 CPU的0号通讯口间进行的(每个CPU都有两个通讯口)。在主站侧也可以选择相应库文件 "MBUS_CTRL_P1" 和 "MBUS_MSG_P1"通过1号通讯口通信。通讯口1与Micro/WIN建立PG或PC连接,两个CPU的通讯口0通过PPI电缆进行连接(电缆的 针脚 连接为2,3,7,8)。

( 26 KB ) 
图. 01

2. 参数匹配
对于MODBUS通讯, 主站侧需要程序库 "MBUS_CTRL" 和 "MBUS_MSG", 

从站侧需要程序库 "MBUS_INIT" and "MBUS_SLAVE"。

在 Micro/WIN 中您需要为主站和从站新建一个项目,程序与参数设置见图.02。
必须要保证主站与从站的“Baud"和"Parity"的参数设置要一致,并且程序块"MBUS_MSG"中的"Slave"地址要与程序块"MBUS_INIT"中的"Addr"所设置的一致 (见图. 02)。
Micro/WIN“系统块"中设置的0通讯口的波特率与MODBUS协议无关("Mode" = "1")。


图. 02

下面的表格列出了程序块各个参数选项及其意义

主站

MBUS_CTRL

参数

意义

选项

EN

使能


Mode

协议选择

0=PPI, 1=MODBUS

Baud

传输速率 kbps

1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200

Parity

校验选择

0=无校验, 1=奇校验, 2=偶校验

Timeout

从站的zui长响应时间 ms


Done

“完成"标志位


Error

错误代码

1)

表 01

1) 参看STEP 7 Micro/WIN 帮助: "MODBUS主站执行MBUS_MSG时的错误代码MBUS_MSG" 。

MBUS_MSG

参数

意义

选项

EN

使能


First

读写请求位


Slave

从站地址


RW

"读" 或 "写"

0=读, 1=写

Addr

读写从站的数据地址

0 .. 128 = 数字量输出 Q0.0 .. Q15.7
1001 .. 10128 = 数字量输入 I0.0 .. I15.7
30001 .. 30092 = 模拟量输入 AIW0 .. AIW62
40001 .. 49999 = 保持寄存器 2

Count

位或字的个数 (0xxxx, 1xxxx) / words (3xxxx, 4xxxx)


DataPtr

V存储区起始地址指针


Done

"完成" 标志位


Error

错误代码

1)

表 02

1)参看STEP 7 Micro/WIN 帮助: "MODBUS主站执行MBUS_MSG时的错误代码MBUS_MSG" 。

从站

MBUS_INIT

参数

意义

选项

EN

使能


Mode

协议选择

0=PPI, 1=MODBUS

Addr

从站地址


Baud

传输速率 kbps

1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200

Parity

校验

0=无校验, 1=奇校验, 2=偶校验

Delay

超时时间 ms


MaxIQ

可使用的数字输入输出点数

2)

MaxAI

可使用的模拟量输入点数

2)

MaxHold

保持寄存器字的zui大数量

2)

HoldStart

保持寄存器的起始地址(40001)


Done

完成标志位


Error

错误代码

3)

表 03

2) zui大的地址取决于所用CPU的类型及其zui大值。
3)参看STEP 7 Micro/WIN 帮助: “MODBUS从站协议的错误代码"。

MBUS_SLAVE

参数

意义

选项

EN

使能


Done

完成标志位


Error

错误代码

3)

表 04

3)参看STEP 7 Micro/WIN 帮助: “MODBUS从站协议的错误代码" 。

3. 库的存储地址
项目完成后必须要在Micro/WIN中定义库的存储地址,当定义完存储区后, 要保证在任何情况下不能再被其它程序所使用 (主站侧: "DataPtr" + "Count" 从站侧: "HoldStart" + "MaxHold")。


图. 03

4. 保持寄存器值的传输
将程序下载到相应的CPU后,可以在状态表中给主站侧的V存储区赋值,然后监视从站的变化。
当主站的I0.0使能后,VW2中的内容就被发送到从站并写入从站的VW2 。

保持寄存器值的传输见图. 04。
指针"DataPtr" 代表了V区被读的起始地址。
参数 "Count" 表明了地址"Addr" = "4xxxx" (保持寄存器)以字为单位被读的个数。
主站中被读取的V存储区被写入地址为"Addr" = "40002" ("RW" = "1")的保持寄存器中。
保持寄存器是以字为单位工作的,它与从站的V区地址对应。
指针 "HoldStart" 明确了与保持寄存器起始地址40001相对应的V存储区的初始地址。
可以这样计算从站的V区目标指针:

2 * (Addr - 40001) + HoldStart = 2 * (40002 - 40001) + &VB0 = &VB2

另外,要保证"MaxHold" 定义的数据区能够包含主站侧所要写入的数据区 :

MaxHold >= Addr - 40001 + Count = 40002 - 40001 + 1 = 2

( 38 KB ) 
Fig. 04

关于STEP 7 Micro/WIN MOBDUS 库的更多信息可以参看 S7-200 系统手册 ( Entry ID 1109582) 和 STEP 7 Micro/WIN 帮助。

如何在 STEP 7 Micro/WIN 中找到 Modbus RTU 协议和 USS 协议操作库?


说明:
在 STEP 7 Micro/WIN 中,Modbus RTU 协议和 USS 协议操作库位于操作树的“库"文件夹中。MODBUS 函数库要求 STEP 7 Micro/WIN 为 V3.2 或更高版本。

( 24 KB ) 
图1: 添加函数库

这些库是附加函数库,并非组态软件 STEP 7 Micro/WIN 的组成部分。

您如果需要使用 Modbus RTU 协议,必须购买“SIMATIC STEP 7 Micro/WIN ADD ON: Function Library V1.1 (USS + MODBUS) for STEP 7 Micro/WIN 32"软件。

这个可选附加函数库的订货号是 6ES7830-2BC00-0YX0。

安装顺序:
先安装“STEP 7 Micro/WIN 32 Toolbox V1.0"(包括库),然后安装“STEP 7 Micro/WIN"。

注意:
这个函数库包含可以在 STEP 7 Micro/WIN V3.2 中使用的 Modbus RTU 协议库和 USS 协议库。

如果您安装了 STEP 7 Micro/WIN V4.0 SP5 或者更高版本,那么操作库中就会包含下列函数:

Modbus RTU Master V1.2 对应端口 0 和端口 1 

Modbus RTU Slave V1.0 对应端口 0 

USS protocol V2.3 对应端口 0 和端口 1 







· 1.s232/485转换器,485与plc的PPI口的连接方式是:

       3---Data+/A

       8---Data-/A


2.或自己制作


Modbus RTU 主站指令库 
西门子在 Micro/WIN V4.0 SP5 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。 

图 1. 西门子标准指令库(Micro/WIN V4.0 SP5) 
  注意: 

1. Modbus RTU 主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库对 Port0 和Port 1 有效。该指令库将设置通信口工作在自由口模式下。 
2. Modbus RTU 主站指令库使用了一些用户中断功能,编其他程序时不能在用户程序中禁止中断。 
3. Modbus RTU 主站库对CPU的版本有要求。CPU 的版本必须为 2.00 或者 2.01(即订货号为6ES721*-***23-0BA*),1.22版本之前(包括1.22版本)的 S7-200 CPU 不支持。 
使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器。 
要使用 Modbus RTU 主站指令库,须遵循下列步骤: 

Modbus RTU 主站功能编程 
 1. 调用 Modbus RTU 主站初始化和控制子程序 
使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制: 

用 SM0.0 调用 Modbus RTU 主站初始化与控制子程序 
各参数意义如下: 
  
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= 模式选择非法   
2. 调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求; 
调用Modbus RTU 主站读写子程序 
各参数意义如下: 
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主站可读/写的zui大数据量为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 号错误 
? 从站 delay 参数设的时间过长会造成主站 3 号错误 
? 从站掉电或不运行,网络故障都会造成主站 3 号错误 
3. 在 CPU 的 V 数据区中为库指令分配存储区(Library Memory) 
Modbus Master 指令库需要一个284个字节的全局 V 存储区。 
  
关于 Modbus RTU 主站协议库的补充说明 
此为西门子正式推出的标准库指令说明资料。 
在 Modbus RTU Master 协议和 PPI 协议之间切换: 
Modbus RTU Master 协议指令库使通信口工作在自由口模式下,此时不能与 Micro/WIN 软件通信。要在切换回PPI 协议,可以: 
? 将 MBUS_CTRL 指令的 Mode 输入端设置为逻辑“0" 
? 将 CPU 的允许模式选择开关置为 STOP 位置 
Modbus RTU Master 协议库的执行时间: 
Modbus RTU Master 协议库的 MBUS_CTRL 指令不需要很长的执行时间。MBUS_需要 1.11 ms用于初始化,在后续的每个扫描周期中只占用 0.41 ms。 
调用 MBUS_MSG 子程序会加长处理时间。大部分时间都用于 CRC 校验的计算。每读、写一个字的数据就需要 1.85 ms扫描时间。数据zui多的情况下(读、写 120 字的数据),扫描时间大概会扩增加 222ms。读操作的时间主要消耗在接收数据上;写操作的时间主要消耗在发送数据上。 
Modbus 地址 
通常 Modbus 地址由 5 位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbus Master协议库把标准的 Modbus 地址映射为所谓 Modbus 功能号,读写从站的数据。Modbus Master协议库支持如下地址: 
? 00001 - 09999:数字量输出( 线圈) 
? 10001 - 19999:数字量输入(触点) 
? 30001 - 39999:输入数据寄存器(通常为模拟量输入) 
? 40001 - 49999:数据保持寄存器 
Modbus Master 协议库支持的功能 
为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能: 
表 1. 需要从站支持的功能 
Modbus 地址 读/写 Modbus 从站须支持的功能 
00001 - 09999 
数字量输出 读 功能 1 
写 功能 5:写单输出点 
功能 15:写多输出点 
10001 - 19999 
数字量输入 读 功能 2 
写 - 
30001 - 39999 
输入寄存器 读 功能 4 
写 - 
40001 - 49999 
保持寄存器 读 功能 3 
写 功能 6:写单寄存器单元 
功能 16:写多寄存器单元 
  
Modbus 地址和 S7-200 存储区地址的映射 
S7-200 通过 Modbus Master 和 Slave 协议库通信时,Modbus 地址和 S7-200 内存储区地址的映射关系都类似。 
Modbus 保持寄存器地址映射举例: 
  
Modbus 保持寄存器地址 
40001 12 34 
40002 56 78 
40003 9A BC 
  
S7-200 存储区字寻址 
VW200 12 34 
VW202 56 78 
VW204 9A BC 
  
S7-200 存储区字节寻址 
VB200 12 
VB201 34 
VB202 56 
VB203 78 
VB204 9A 
VB205 BC 

  
Modbus 数字量地址映射举例: 
位地址(0xxxx 和 1xxxx)数据总是以字节为单位打包读写。*个字节中的zui低有效位对应 Modbus地址的起始地址。如下图所示: 
  
数字量地址映射举例 
   
常问问题 
  Modbus RTU 主站库对 CPU 的版本是否有要求,为什么编译例子程序时,会遇到 4个错误? 
Modbus RTU 主站库对 CPU 的版本确实有要求,CPU 的版本必须为 2.00 或者2.01(即订货号为6ES721*-***23-0BA*),1.22 版本之前(包括 1.22 版本)的 S7-200 CPU不支持。 
  Modbus 指令库启动后,如何通过同一个通信端口进行 CPU监控? 
Modbus 指令库使用的是 CPU 的自由口通信功能,工作在自由口模式下的通讯口不能使用 Micro/WIN 的 PPI编程通信监控。如果通信口都已经被占用,可以考虑: 
? 加一个通信模块(如 EM 277、CP 243-1、EM 241 等)扩展出一个编程通信口 
? 中止自由口模式,可以将 CPU 上的模式开关从 RUN 拨到 STOP;或者保持处于 RUN 状态,用程序停止指令库的Modbus 模式(参见指令库应用) 
  如何理解 Modbus 地址与功能码的区别? 
Modbus 地址与 Modbus 的功能码是两个层次的概念。 
根据 Modbus 通信协议,Modbus 数据的地址使用 0xxxx、1xxxx、3xxxx 和 4xxxx的形式,分别表示数字量输出、数字量输入、模拟量输入等数据地址。在使用 S7-200 的指令库时,Modbus 数据地址与 S7-200的 I/O 和数据存储区地址间有特定的对应关系。 
有些设备表明它支持 Modbus RTU 通信协议,但也详细提供了读写数据的详细通信帧格式,其中包括如何 Modbus站的地址,需要读写数据类型、长度等等。数据帧有特定字节指出此指令读写的数据类型和地址,此字节的数据内容即所谓“功能码",如功能 1读取单个/多个数字量输出点的值。 
支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应当是 Modbus 数据地址。Modbus地址所访问的数据,是通过各种“功能"读写而来。功能码是 Modbus 地址的底层。如果 Modbus 通信的一方提供的所谓Modbus 协议只有功能码,则需要注意了解此功能号与 Modbus 地址间的对应关系。 
  如何访问大于 9999 的保持寄存器地址? 
通常 Modbus 协议的保持寄存器地址范围在 40001 - 49999 之间。对于多数应用来说已经够了。但有些 Modbus从站把地址映射到保持寄存器区的地址超过 9999 的部分。 
Modbus Master 协议库支持超过 9999 的保持寄存器地址。地址范围为 400001 - 465536。只需在调用MBUS_MSG 子程序时给 Addr 参数赋相应的值即可,如 416768。 
  Modubs Master 扩展地址模式仅支持保持寄存器区,不支持其他地址类型。

Contact Us
  • 联系QQ:178267629
  • 联系邮箱:guoyue04@163.com
  • 传真:
  • 联系地址:上海市长宁区延安中路188号2902室

扫一扫  微信咨询

©2024 国越贸易(上海)有限公司 版权所有  备案号:  技术支持:化工仪器网    sitemap.xml    总访问量:441447 管理登陆