S7200的MODBUS详细应用示例_第1页
S7200的MODBUS详细应用示例_第2页
S7200的MODBUS详细应用示例_第3页
S7200的MODBUS详细应用示例_第4页
S7200的MODBUS详细应用示例_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、<PLC200MODBUS 协议配置使用方法 >1修订历史记录日期版本说明(修改、 补充、 删除)作者审核<2009/4/3 >第一版(已完)研发部·孙宝东研发部·王振岳5.13 库存储区补充说明(36 页)注释: 红色字体为注意点; 蓝色为修改补充; 紫色为问题总结; 茶色为暂时删除; 绿色为住宿43目录前言 错误 !未定义书签。第一章 使用 Modbus协议库 错误 !未定义书签。前言 . 61. 使用 Modbus 主设备协议的要求 62. 使用 Modbus 从站设备协议的要求 . 73. Modbus 主设备协议的初始化和执行时间 74.

2、Modbus 从站协议的初始化和执行时间 85. Modbus 主设备寻址 86. Modbus 从站寻址 87. Modbus 主设备 MBUS_MS执G 行错误代码 108. Modbus 从站协议执行错误代码 119. Modbus 主设备高级用户信息 11第二章 使用 Modbus主设备指令 14前言 141. MBUS_CTRL指令( 初始化主设备 ) 152. MBUS_MSG指令 16第三章 使用 Modbus从站指令 错误 !未定义书签。前言 221.MBUS_INIT 指令( 初始化从站 ) 错误 !未定义书签。2.MBUS_SLAVE指令 错误 !未定义书签。3. 常见问题

3、 . 26第四章 下载与通讯测试 . 错误 !未定义书签。1. 编译、下载 . 错误 ! 未定义书签。2. 通讯 . 31附表 主从站指令配置表 . 37S7200 Modbus 主从协议版本( 09 年初稿版)制作:研发部前言:Modbus从站协议指令可以配置 S7-200 ,将其用作 Modbus RTU从站,与 Modbus主设备 通讯。Modbus主设备协议指令可以配置 S7-200 ,将其用作 Modbus RTU主设备,与一个或多个 Modbus从站通讯。Modbus指令安装在 STEP 7 Micro/WIN 指令树的 "协议库 "文件夹中。有了这些新指令,

4、您可以将 S7-200 用作 Modbus 设备。当您在程序中加入 Modbus 指令时,会在项目中自动增 加一个或多个相关子程序。Modbus主设备协议库有两个版本。 一个版本使用 CPU的端口 0,另一个则使用 CPU的端 口 1。端口 1 协议库的 POU名中带有 "_P1"(MBUS_CTRL_P1),表示 POU使用 CPU上的端口 1 。 在其它方面,这两个 Modbus 主设备协议库完全一致。Modbus从站协议库仅支持端口 0 通讯。在 STEP 7 Micro/WIN 中, Modbus RTU 协议和 USS 协议操作库位于操作树的“库”文 件夹中。 M

5、ODBUS函 数库要求 STEP 7 Micro/WIN 为 V3.2 或更高版本。图 1: 添加函数库第一章 使用 Modbus协议库前言:这些库是附加函数库,并非组态软件STEP 7 Micro/WIN 的组成部分 。您如果需要使用 Modbus RTU 协议,必须先安装“ STEP 7 Micro/WIN 32 Toolbox V1.0”( 包 括库) ,然后安装运行“ STEP 7 Micro/WIN”。就会出现如图1 的库。这个函数库包含可以在 STEP 7 Micro/WIN V3.2 中使用的 Modbus RTU 协议库和 USS 协议 库。如果您安装了 STEP 7 Micr

6、o/WIN V4.0 SP5 或者更高版本 ,那么操作库中就会包含下列函 数:Modbus RTU Master V1.2 对应端口 0 和端口 1Modbus RTU Slave V1.0 对应端口 0USS protocol V2.3 对应端口 0 和端口 1 面我对 Modbus RTU各指令功能与使用方法分别加以讲解:1. 使用 Modbus 主设备协议的要求Modbus 主设备协议指令使用下列 S7-200 资源:·初始化 Modbus 主设备协议可以为 Modbus 主设备协议通讯指定专用 CPU 端口。当 CPU 端口被用于 Modbus 主设备协议通讯时,就无法用于任

7、何其它用途,包括与STEP7-Micro/WIN 通讯。 MBUS_CTRL 指令控制将端口 0 分配给 Modbus 协议或 PPI, Mode 为 1 时分配给 Modbus 协议,为 0 是分配给 PPI。将 S7-200 上的模式开关设为 “STOP ”, 端口零也会被复位为 PPI 协议模式。MBUS_CTRL_P1 指令(来自端口 1协议库 )控制将端口 1分配给 Modbus 主设备协议或 PPI。·Modbus 主设备协议指令影响与 CPU 通讯端口中自由端口通讯相关的所有 SM 位置。· Modbus 主设备协议指令使用 3 个子程序和 1 个中断例程。&

8、#183; Modbus 主设备协议指令要求两个 Modbus 主设备指令和支持例程有 1620 个字节的程 序空间。·Modbus 主设备协议指令的变量要求 284 个字节的 V 存储器程序块。该程序块的起始 地址由用户指定,专门保留用于 Modbus 变量。· S7-200 CPU 必须是固化程序修订版 2.00 或最好支持 Modbus 主设备协议库 (CPU MLFB 21x-2xx23-0XB0) 。·Modbus 主设备协议库为某些功能使用用户中断。用户中断不能被用户程序禁用。提示 :欲将 CPU 通讯端口操作更换回 PPI以便与 STEP 7-Mic

9、ro/WIN 通讯,将 MBUS_CTRL 指令的模式参数设置为零 (0)。您还可以将 S7-200 上的模式开关设置到 STOP模式位置。这些方法中的任一个将设置 CPU 通讯端口与 STEP 7-Micro/WIN 通讯。2. 使用 Modbus 从站协议的要求Modbus 从站协议指令使用下列 S7-200 资源:·初始化 Modbus 从站协议为 Modbus 从站协议通讯指定端口 0。当端口 0 被用于 Modbus 从站协议通讯时,就无法用于任何其它用途,包括与STEP 7-Micro/WIN 通讯。MBUS_INIT 指令控制将端口 0 指定给 Modbus 从站协议或

10、 PPI。· Modbus 从站协议指令影响与端口 0 中自由端口通讯相关的所有 SM 位置。1857 个字节的程序· Modbus 从站协议指令使用 3 个子程序和 2 个中断例程。· Modbus 从站协议指令要求两个 Modbus 主设备指令和支持例程有 空间。Modbus 从站协议指令的变量要求 779 个字节的 V 存储器程序块。该程序块的起始地址由用户指定,专门保留用于 Modbus 变量。一定要设置 V 存储区,不然编译时会出现 错误信息,设置过程很简单:点击“文件”“库存储区”,出现如下画面(进行设置即可)提示 :欲将端口 0 操作更换回 PPI

11、以便与 STEP 7-Micro/WIN 通讯,用另一条 MBUS_INIT 指令重新指定端口 0。您还可以将 S7-200 上的模式开关设为 STOP 模式。 这样会将参数 复原为端口 0。3. Modbus 主设备协议的初始化和执行时间Modbus 主设备协议每次扫描都需要少量的时间来执行 MBUS_CTRL 指令。MBUS_CTRL 初始化 Modbus 主设备 (首次扫描 )需要大约 1.11 毫秒的时间,以后扫描需 要大约 0.41 毫秒。当 MBUS_MSG 子程序执行请求时, 将执行扫描时间。 大多数时间用于计算 Modbus CRC 的请求和应答。 CRC (循环冗余检验 )确

12、保通讯消息的完整性。 对于请求和应答中的每个字, 扫描时间会延长约 1.85毫秒。 最 大请求 /应答(读取或写入 120个字)使扫描时间延长约 222 毫秒。当在从站中接收应答并 至少发出请求时,主要是读取请求在延长扫描时间。当将数据发送到从站并至少收到应 答时,主要是写入请求在延长扫描时间。4. Modbus 从站协议的初始化和执行时间Modbus 通讯使用 CRC (循环冗余检验 )确保通讯消息的完整性 。Modbus 从站协议使用预 先计算数值的表格减少处理消息的时间。该 CRC 表初始化约需 240 毫秒。初始化在 MBUS_INIT 子程序中进行,通常在进入 RUN 模式后用户程序

13、首次扫描时执行。如果 MBUS_INIT 子程序和任何其它初始化程序要求的时间超过 500 微秒扫描监视时间,您 需要复原监视定时器,并将输出保持在启用状态(如果扩展模块要求 )。输出模块监视定时器可用向模块输出写入的方法复原。请参阅监视复原指令。当 MBUS_SLAVE 子程序执行请求时,扫描时间会延长。由于 大多数时间用于计算 Modbus CRC ,对于请求中和应答中的每个字节,扫描时间会延长约 420 微秒。最大请 求/应答(读取或写入 120 个字)使扫描时间延长约 100毫秒。5. Modbus 主设备寻址Modbus 地址通常写作包含数据类型和偏移量的 5 个字符的数值。第一个字

14、符决定数据 类型,最后四个字符在数据类型中选择适当的数值。然后, Modbus 主设备指令将地址 映射至正确的功能,以便发送到从站。 Modbus 主设备指令支持下列 Modbus 地址: 00001 至 09999 是离散输出 (线圈 )10001 至 19999 是离散输入 (触点 )30001 至 39999 是输入寄存器 (通常是模拟量输入 )40001 至 49999 是保持寄存器1 开始。有效地址范围将取所有 Modbus 地址均以 1 为基位,表示第一个数据值从地址 决于从站。不同的从站将支持不同的数据类型和地址范围。6. Modbus 从站寻址Modbus 地址通常被写为包含数

15、据类型和偏移量的 5 个字符的数值。第一个字符决定数 据类型,最后四个字符在数据类型中选择适当的数值。然后, Modbus 主设备将地址映 射至正确的功能。 Modbus 从站指令支持下列地址: 00001 至 00128 是映射至 Q0.0 - Q15.7 的离散输出10001 至 10128 是映射至 I0.0 - I15.7 的离散输入30001 至 30032 是映射至 AIW0 至 AIW62 的模拟输入寄存器40001 至 4xxxx 是映射至 V 存储器的保持寄存器。所有 Modbus 地址均以 1为基位。下表显示映射至 S7-200 地址的 Modbus 地址。Modbus 地

16、址 S7-200 地址00001Q0.000002Q0.100003Q0.200127Q15.600128Q15.710001I0.010002I0.110003I0.210127I15.610128I15.730001AIW030002AIW230003AIW430032AIW6240001Hold Start40002HoldStart+240003HoldStart+44xxxxHoldStart+2 x (xxxx-1)Modbus 从站协议允许您限制 Modbus 主设备可存取的输入、 输出、 模拟输入和保持寄存 器(V 存储器 )数量。MBUS_INIT 指令的 MaxIQ 参数指

17、定 Modbus 主设备允许存取的离散输入或输出 (I 或 Q) 的最大数目。MBUS_INIT 指令的 MaxAI 参数指定 Modbus 主设备允许存取的输入寄存器 (AIW) 的最 大数目。MBUS_INIT 指令的 MaxHold 参数指定 Modbus 主设备允许存取的保持寄存器 (V 存储器 字)的最大数目。请参阅 MBUS_INIT 指令说明, 了解有关为 Modbus 从站设定存储器限制的进一步详情。7. Modbus 主设备 MBUS_MSG 执行错误代码MBUS_MSG错误代码 说明 0 无错误1 应答时奇偶校验错误: 仅当使用偶校验或奇校验时才会发生。 传输被干扰, 可能

18、会 收到不正确的数据。该错误通常是由电气故障 (例如错误接线或者影响通讯的电噪声 )引 起的。2 未使用3 接收超时: 在"超时 "时间内,没有来自从站的应答。可能有以下一些原因:与从站 的电气连接有问题、 主设备和从站设置为不同的波特率 /奇偶校验设置, 以及错误的从站 地址。4 请求参数出错:一个或多个输入参数 ( 从站、读写、地址或计数 ) 被设置为非法值。 检查文档中输入参数的允许值。5 Modbus 主设备未启用: 在调用 MBUS_MSG 前,每次扫描时都调用 MBUS_CTRL 。6 Modbus 忙于处理另一个请求:一次只能激活一条 MBUS_MSG 指令。

19、7 应答时出错: 收到的应答与请求不相关。这表示从站中出现了某些错误,或者错 误的从站应答了请求。8 应答时 CRC 错误: 传输被干扰, 可能会收到不正确的数据。 该错误通常是由电气 故障(例如错误接线或者影响通讯的电噪声 )引起的 。101 从站不支持在该地址处所请求的功能:请参阅" 使用 Modbus 主设备指令 " 帮助主题中的所需 Modbus 从站功能支持表。102 从站不支持数据地址: "地址"加上 "计数 "所要求的地址范围超出了从站所允许的地 址范围。103 从站不支持数据类型:该 "地址 "类型

20、不被从站支持。104 从站故障105 从站已接受消息但应答延迟: 这是 MBUS_MSG 的错误, 用户程序应在稍后重新发 送请求。106 从站忙,因此拒绝消息:可以再次尝试相同的请求,以获得应答。107 从站因未知原因而拒绝消息108 从站存储器奇偶校验错误:从站中有错误。8. Modbus 从站协议执行错误代码错误代码 说明0 无错误1 内存范围错误2 非法波特率或奇偶校验3 非法从属地址4 非法 Modbus 参数值5 保持寄存器与 Modbus 从属符号重叠6 收到奇偶校验错误7 收到 CRC 错误8 非法功能请求 / 功能不受支持9 请求中的非法内存地址10 从属功能未启用9. Mo

21、dbus 主设备高级用户信息·返回的功能与请求不匹配 (错误代码 7)。Modbus 主设备将在设置 "完成"和"错误 "输出参数前,重新发送请求两个附加时间。通过查找 Modbus 主设备符号表中的符号 mModbusRetries 然后在执行 MBUS_CTRL 后 改变该值, 可以更改重试次数。 mModbusRetries 值是"字节"类型,重试范围是 0至 255。内部字符超时如果应答中字符之间的时间超出了指定的时间限制, Modbus 主设备将中止来自从站的 应答。缺省时间设置为 100 毫秒,可允许 Modbu

22、s 主设备协议用于大多数有线或电话调 制解调器联网的从站。 如果检测到该错误, MBUS CTRL" 错误 "参数将设置为错误代码 3。当字符之间需要较长的时间时,可能是因为传送介质(例如电话调制解调器 )或者因为从站自身需要更多的时间。 通过查找 Modbus 主设备符号表中的符号 mModbusCharTimeout 然后在执行 MBUS_CTRL后改变该值,可以延长该超时时间。 mModbusCharTimeout 值是 "整型 "类型,范围是 1 至少 30000 毫秒。单个对多个位 / 字写入功能某些 Modbus 从站不支持 Modbus 功

23、能写入单个离散输出位 (Modbus 功能 5)或写入单个 保持寄存器(Modbus 功能 6)。这些设备仅支持多个位写入 (Modbus 功能 15) 或多个寄存器写入 (Modbus 功能 16) 。如果从站不支持单个位 /字 Modbus 功能,则 MBUS_MSG 指令将返 回错误代码 101。Modbus 主设备协议允许强制 MBUS_MSG 指令,以使用多个位 /字 Modbus 功能来取代 单个的位 /字Modbus 功能。通过查找 Modbus 主设备符号表中的符号 mModbusForceMulti 然后在执 行 MBUS_CTRL后改变该值,可以强制执行多个位 / 字指令。

24、 mModbusForceMulti 值是 "布尔 "数据类型, 应该设置为 "1"以在写入单个位 /寄存器时强制使用多个位 /字功能。累加器用途累加器(AC0 、AC1 、AC2, AC3)由Modbus主设备指令使用, 并在"交叉参考 "列表中显示。 累加器中的数值被 Modbus 主设备指令保存和恢复。当执行 Modbus 主设备指令时,保 存累加器中的所有用户数据。保持寄存器地址大于 9999Modbus 保持地址通常在 40001 到 49999 的范围内。该范围对大多数应用程序来说足够 了,但是某些数据映射到保持寄存器的

25、Modbus 从站所具有的地址超过 9999。这些设备 不适合常规的 Modbus 寻址方案。Modbus 主设备指令支持通过可选的寻址方法对大于 9999 的保持寄存器进行寻址。 MBUS_MSG 指令允许参数 "地址 "具有附加范围以支持保持寄存器地址的扩充范围。400001 至 465536 用于保持寄存器例如:要访问保持寄存器 16768,MBUS_MSG 的"地址 "参数应该设置为 416768。 扩充寻址允许访问 Modbus 协议支持的 65536 个可能地址的全部范围。该扩充寻址仅支 持保持寄存器。第二章使用 Modbus主设备指令前言:

26、欲在 S7-200程序中使用 Modbus 主设备指令,请执行以下步骤:1. 在程序中插入 MBUS_CTRL 指令,并在每次扫描时执行 MBUS_CTRL 。 您可以使用 MBUS_CTRL 指令初始化或更改 Modbus 通讯参数 。当您插入 MBUS_CTRL 指令时,会在 程序中自动增加几个受保护的子程序和中断例程。2. 使用协议库存储器命令, 为 Modbus 主设备协议指令需要的 V 存储器指定一个起始地址。3. 将一条或多条 MBUS_MSG 指令放入程序中。 可以根据需要将尽可能多的 MBUS_MSG 指令放入程序中,但 每次只能激活这些指令中的一条 。4. 连接 S7-200

27、 CPU 上的端口 0 (或对端口 1 协议库是端口 1)和 Modbus 从站之间的通讯电 缆。当心 :带有不同参考电位的互连装置会引起互连电缆中出现意外电流。 这些意外电流会引起 通讯错误或损坏装置。确保所有用通讯电缆连接的设备共享一个共用电路参考或单独隔离, 以防不需要的电流通过。Modbus 主设备指令使用如下显示的 Modbus 功能读取或写入特定的 Modbus 地址。 Modbus 从站必须支持所需的 Modbus 功能才能读取或写入特定的 Modbus 地址。所需的 Modbus 从站功能支 持 Modbus 地址读取或写入所需的 Modbus 从站功能0000109999 离

28、散输出读取功能 1写入功能 5 用于单个输出点 功能 15 用于多个输出点1000119999 离散输出读取功能 2写入不能3000139999 输入寄存器读取功能 4写入不能4000149999 保持寄存器读取功能 3写入功能 6 用于单个寄存器 功能 16 用于多个寄存器1.MBUS_CTR指L 令( 初始化主设备 )输入 / 输出操作数数据类型模式I, Q, M, S, SM, T, C, V, L布尔波特VD, ID, QD, MD, SD, SMD, LD, AC, Constant, *VD, *AC, *LD双字奇偶校验VB, IB, QB, MB, SB, SMB, LB, A

29、C, Constant, *VD, *AC, *LD字节超时VW, IW, QW, MW, SW, SMW, LW, AC, Constant, *VD, *AC, *LD字完成I, Q, M, S, SM, T, C, V, L布尔错误VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *L字节用于 S7-200 端口 0的 MBUS_CTR指L令(或用于端口 1的 MBUS_CTRL_P指1令)可初始 化、监视或禁用 Modbus通讯。在使用 MBUS_MS指G令之前,必须正确执行 MBUS_CTR指L 令。指令完成后立即设定 "完成"

30、位,才能继续执行下一条指令。在每次扫描且EN 输入打开时执行该指令。 MBUS_CTR指L 令必须在每次扫描时 (包括首次扫描 ) 被调用,以允许 监视随 MBUS_MS指G令启动的任何突出消息的进程。 除非每次调用 MBUS_CTR,L否则 Modbus主设备协议将不能正确运行。"模式"输入数值选择通讯协议。输入值 1将 CPU端口分配给 Modbus协议并启用该 协议。输入值 0 将 CPU端口分配给 PPI 系统协议并禁用 Modbus协议 。"波特"参数将波特率设为 1200、2400、4800、9600、19200、38400、57600或 1

31、15200 波特。"奇偶校验 " 参数被设为与 Modbus从站奇偶校验相匹配。所有设置使用一个起始位和一个停止位。可接受的数值为: 0 - 无奇偶校验1 - 奇校验2 - 偶校验"超时 "参数设为等待来自从站应答的毫秒时间数。"超时 "数值可以设置的范围为 1毫秒到 32767毫秒。典型值是 1000 毫秒(1 秒) 。"超时"参数应该设置的足够大, 以便从站有时间对所选的波特率作出应答。 "超时" 参数用于确定 Modbus从站是否对请求做出应答。 "超时 "值确定 Mo

32、dbus主设备在发送了请求的最后一个字符后,将要等待多长时 间才会有应答的第一个字符。 如果在 "超时" 规定的时间内至少收到应答的一个字符, Modbus 主设备将从 Modbus 从站接收到整个应答。MBUS_CTR指L令完成时, "完成 "输出打开。"错误"输出包含执行该指令的结果。 下表定义了在执行 MBUS_CTR指L 令时会产生的 错误条件。 MBUS_CTRL错误代码 说明0无错误1 奇偶校验选择无效2波特率选择无效3 超时选择无效4 模式选择无效2. MBUS输入 / 输出数据类型操作数首次I, Q, M, S, SM

33、, T, C, V, L ( 流)以上升沿检测元素为条件的功率布尔从站VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字节读写VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字节地址VD, ID, QD, MD, SD, SMD, LD, AC, Constant, *VD, *AC, *LD双字计数VW, IW, QW, MW, SW, SMW, LW, AC, Constant, *VD, *AC, *LD整型DataPtr&VB双字完成I, Q, M,

34、S, SM, T, C, V, L布尔错误VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD字节MBUS_MS指G令 ( 或用于端口 1 的 MBUS_MSG_P用1)于启动对 Modbus从站的请求并处 理应答 。当 EN输入和 "首次 "输入打开时, BUS_MSG指令启动对 Modbus从站的请求。 发 送请求、等待应答、 并处理应答通常需要多次扫描 。EN输入必须打开以启用请求的发送, 并应该保持打开直到 "完成 " 位被置位。注释: 一次只能激活一条 MBUS_MS指G令。如果 启用了多条 MBUS_M

35、S指G令,则将处理所执行的第一条MBUS_MS指G令,之后的所有MBUS_MS指G令将中止并产生错误代码 6。"首次 "参数应该在有新请求要发送时才打开以进行一次扫描。"首次"输入应当通过一个边沿检测元素 ( 例如上升沿 )打开,这将导致请求被传送一次。" 从站 " 参数是 Modbus 从站的地址。 允许的范围是 0 到 247。地址 0 是广播地址, 只 能用于写请求 。不存在对地址 0 的广播请求的应答。并非所有的从站会支持广播地址。 S7-200 Modbus 从站协议库不支持广播地址。"读写 "参数指定是

36、否要读取或写入该消息。"读写 "参数允许使用下列两个值: 0 -读,1 - 写。离散输出 ( 线圈) 和保持寄存器支持读取和写入请求。 离散输入 (触点 )和输入寄存器仅支持读取请求。"地址"参数是起始的 Modbus地址。允许使用下列取值范围: 00001至 09999是离散 输出(线圈) ;10001至19999是离散输入 (触点) ;30001至 39999是输入寄存器; 40001 至 49999 是保持寄存器" 地址 " 的指定取值范围基于 Modbus从站支持的地址。"计数"参数指定在该请求中读取或写入

37、的数据元素的数目。"计数"值是位数 (对于位数据类型 )和字数 (对于字数据类型 )。地址 0xxxx -" 计数 " 是要读取或写入的位数。地址 1xxxx -" 计数 " 是要读取的位数。地址 3xxxx -" 计数 " 是要读取的输入寄存器的字数。地址 4xxxx -" 计数 " 是要读取或写入的保持寄存器的字数。MBUS_MS指G令将 读取或写入最大 120 个字或 1920 个位(240 字节的数据 ) 。"计数 " 的实际限值将取决于 Modbus 从站中的限制。

38、"DataPtr" 参数是指向 S7-200 CPU的 V 存储器中与读取或写入请求相关的数据的间 接地址指针。 对于读取请求, DataPtr 应该指向用于存储从 Modbus从站读取的数据的第 一个 CPU存储器位置。 对于写入请求, DataPtr 应该指向要发送到 Modbus 从站的数据的 第一个 CPU存储器位置。DataPtr 值作为间接地址指针传递到 MBUS_MS。G例如,如果要写入 Modbus从站的数据从 S7-200 CPU 中的地址 VW200开始,则 DataPtr 的数值将会是 &VB200 (VB200 的地址 ) 。指针必须始终是

39、VB类型,即使它们指向字数据。 保持寄存器 (地址 4xxxx) 和输入寄存器 ( 地址 3xxxx) 的值是字 (2 个字节或 16位) 。S7-200 CPU字的格式与 Modbus寄存器相同。 低位编号的 V存储器地址是寄存器的最高有效字节。 高位编号的 V存储器地址是寄存器的最低有效字节。下表显示了 S7-200 字节和字寻址如何与 Modbus 寄存器格式相对应。S7-200 CPU 存储器字节地址S7-200 CPU 存储器字地址Modbus保持寄存器地址地址十六进制数据地址十六进制数 据地址十六进制数 据VB20012VW20012 34400112 34VB20134VB202

40、56VW20256 78400256 78VB20378VB2049AVW2049A BC40039A BCVB205BC位数据 (地址 0xxxx 和 1xxxx) 区域作为压缩字节被读取和写入,也就是说,每个数据字节内压缩 8 位。第一个数据字节的最低有效位是寻址的位号(参数"地址")。如果仅写入单个的位,则该位必须处于指向 DataPtr 的字节的最低有效位字节。压缩字节的格 式( 显示离散输入地址 )Vx.7-Vx.01000810007100061000510004100031000210001对于未在偶数字节边界上开始的位数据地址, 与起始地址相关的位必须处于字

41、节的 最低有效位。参见如下在 Modbus地址 10004 处开始的 3 位压缩字节格式实例。压缩字 节的格式 (在地址 10004 处开始的离散输入 )当写入到离散输出数据类型 ( 线圈) 时,用户必须在数据通过 DataPtr 传递到 MBUS_MS指G令之前,将压缩字节内的位放置到正确的位位置中。"完成 "输出在应答完成或 MBUS_MS指G"完成 "输出在发送请求和接收应答时关闭。 令因错误而中止时打开。"错误 "输出仅当 "完成"输出打开时有效。 请参阅 Modbus主设备 MBUS_MS执G行错误 通过

42、 MBUS_MS指G 令返回。低位编号的错误代码 (1 到 8) 是由 MBUS_MS指G 令检测到的错 误。 这些错误代码通常指示与 MBUS_MS指G令的输入参数有关的问题,或接收来自从站 的应答时出现的问题 。奇偶校验和 CRC错误指示存在应答但是数据未正确接收 。这通常 是由电气故障 ( 例如连接有问题或者电噪声 )引起的。 高位编号的错误代码 (从 101开始 ) 是由 Modbus 从站返回的错误。这些错误指示从站不支持所请求的功能,或者所请求的 地址 ( 或数据类型或地址范围 ) 不被 Modbus从站支持。程序举例该实例程序显示了在每次输入 I0.0 打开时, 如何使用 Mod

43、bus主设备指令将 4 个保 持寄存器写入 Modbus从站然后再从中读取。 S7-200 CPU将把自 VW100开始的 4 个字写 入 Modbus从站。数据将写入从站中自地址40001 开始的 4个保持寄存器。 S7-200 CPU于是将从 Modbus从站读取 4 个保持寄存器。数据将来自保持寄存器40010 40013,并放置到 S7-200 CPU 的 V存储器中自 VW200开始的地址。实例程序数据传送如果从 MBUS_MS指G令返回一个错误,则程序将打开输出Q0.1 和 Q0.2 。通过每次扫描时调用 MBUS_CTR来L 初始化和监视 Modbus 主设备。Modbus主设备

44、设置为 9600 波特,无奇偶校验。从站允许 1000 毫秒 (1 秒 )的应答时 间。在首次扫描时,重设用于两条 MBUS_MS指G令的启用标记 (M2.0 和 M2.1) 。当 I0.0 从"关闭"切换到 "打开 "时,为第一条 MBUS_MS指G令 (M2.0) 设置启用标记。当第一个启用标记 (M2.0) 打开时,调用 MBUS_MS指G令。 "首次 "参数必须仅为启用 指令时的首次扫描而设置。该指令将 4 个保持寄存器写入 (RW = 1) 从站 2。要写入的数据取自 CPU中的 VB100-VB107 (4 个字)并写入

45、Modbus从站中的地址 40001 -40004 。当第一条 MBUS_MS指G令完成后 (" 完成 "从 0变为 1) ,清除对第一条 MBUS_MS指G令 的启用,并为第二条 MBUS_MS指G令设定启用。如果错误 (MB1)不为零,则设置 Q0.1 以显示错误。当第二个启用标记 (M2.1) 打开时,调用第二条 MBUS_MS指G令。 "首次 "参数必须仅 为启用指令时的首次扫描而设置。该指令从从站 2读取 (RW = 0) 4 个保持寄存器。数据从 Modbus从站的地址 40010 ?40013 读取并复制到 CPU中的 VB200 ?VB2

46、07 (4 字) 。当第二条 MBUS_MS指G令完成 ("完成"从0变为 1)后,清除对第二条 MBUS_MS指G令 的启用。如果错误 (MB1)不为零,则设置 Q0.2 以显示错误。第三章使用 Modbus从站指令前言: 编程时使用 SM0.1 调用子程序 MBUS_INIT进行初始化,使用 SM0.0调用 MBUS_SLAV,E并指定相应参数。关于参数的详细说明,可在子程序的局部变量 表中找到;欲在 S7-200 程序中使用 Modbus 从站指令,请执行以下步骤:1. 在程序中插入 MBUS_INIT指令,并仅限为一次扫描执行 MBUS_INIT指令。 您可以使用

47、MBUS_INIT指令初始化或更改 Modbus 通讯参数。当您插入 MBUS_INIT指令时,会在程序中自动增加几个隐藏的子程序和中断例 行程序。2. 使用协议库存储器命令,为 Modbus从站协议指令需要的 V 存储器指定一 个起始地址。3. 仅将一条 MBUS_SLAV指E 令放入程序中。每次扫描时均调用该指令,为所 有收到的请求提供服务。4. 连接 S7-200 上的端口 0 和 Modbus 主设备之间的通讯电缆。当心:带有不同参考电位的互连装置会使不需要的电流从互连电缆中通 过。这些不需要的电流会引起通讯错误或损坏装置。确保所有用通讯电缆连接 的设备共享一个共用电路参考或单独隔离,

48、以防不需要的电流通过。累加器 (AC0、AC1、AC2、AC3)被 Modbus从站指令使用,在 " 交叉参考 "列表中显 示。执行之前, Modbus 从站指令累加器中的数值被保存, 并在 Modbus从站指令 完成之前还原至累加器,以确保在执行Modbus 从站指令时累加器中的所有用户数据被保留。Modbus从站协议指令支持 Modbus RTU协议。 这些指令使用 S7-200 的自由端口实用程序支 持最常用的 Modbus功能。详情见附表 2 从站功能码与说明。1.MBUS_INIT指令( 初始化从站 )输入/ 输出操作数数据类型模式、地址、奇偶校验VB, IB,

49、QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字节波特、HoldStartVD, ID, QD, MD, SD, SMD, LD, AC, Constant, *VD, *AC, *LD双字延时、 MaxIQ、 MaxAI、MaxHoldVW, IW, QW, MW, SW, SMW, LW, AC, Constant, *VD, *AC, *LD 字字完成I, Q, M, S, SM, T, C, V, L布尔错误VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD字节MBUS_INIT 指令被用于启用

50、和初始化或禁止 Modbus 通讯。 在使用 MBUS_SLAVE 指 令之前,必须正确执行 MBUS_INIT 指令。指令完成后立即设定 " 完成 "位,才能继续执 行下一条指令。在每次扫描且 EN 输入打开时执行该指令。应当在每次通讯状态改变时 执行 MBUS_INIT 指令。因此, EN 输入应当通过一个边缘检测元素用脉冲打开,或者 仅在首次扫描时执行。"模式"输入数值选择通讯协议:输入数值1将端口 0指定给 Modbus 协议并启用协议;将输入数值 0 则将端口 0 指定给 PPI,并禁用 Modbus 协议。"波特"参数将波

51、特率设为 1200、2400、4800、9600、19200、38400、57600 或115200。"地址"参数将地址设为 1和247之间(包括 1和247)的数值。" 奇偶校验 " 参数被设为与 Modbus 主设备奇偶校验相匹配。可接受的数值为:0-无奇偶校验1-奇数校验2-偶数校验" 延时 "参数通过将指定的毫秒数增加至标准Modbus 信息超时的方法延长标准 Modbus信息结束超时条件。该参数的典型数值在有线网络上应为0。如果您在使用带有纠错功 能的调制解调器,将延时设为 50至 100毫秒的数值。如果您在使用扩展频谱无线

52、电, 将延时设为 10 至 100 毫秒的数值。 "延时 "数值可以是 0 至 32767 毫秒。MaxIQ 参数将供 Modbus 地址 0xxxx 和 1xxxx 使用的 I 和 Q 点数设为 0 至 128 之间的数 值。数值 0 禁止所有向输入和输出的读取。建议使用的 MaxIQ 数值是 128,该数值可在 S7-200 中存取所有的 I 和 Q 点。MaxAI 参数将供 Modbus 地址 3xxxx 使用的字输入 (AI) 寄存器数目设为 0 至 32 之间的数 值。数值 0 禁止模拟输入的读数。建议使用的MaxAI 数值如下,这些数值可允许存取所有的 S7-2

53、00 模拟输入:0 用于 CPU 22116 用于 CPU 22232 用于 CPU 224 、224XP、 226 和 226XMMaxHold 参数设定供 Modbus 地址 4xxxx 使用的 V 存储器中的字保持寄存器数目。 例如, 为了允许主设备存取 2000 个字节的 V 存储器,将 MaxHold 设为 1000 个字的数值 (保持 寄存器 )。HoldStart 参数是 V 存储器中保持寄存器的起始地址 。该数值一般被设为 VB0 ,因此 HoldStart 参数被设为 &VB0 (VB0 地址 )。其它 V 存储器地址可指定为保持寄存器的起始 地址,以便在项目的其它地

54、方使用 VB0 。Modbus 主设备可存取 V 内存 MaxHold 个字数, 从 HoldStart 开始。注意:你选用的 CPU 的 V 存储区大小! CPU 型号不同 V 数据存储区大小不同。应根据 需要选择 Modbus 保持寄存器区域的大小。MBUS_INIT 指令完成时, "完成 "输出打开。 "错误"输出字节包含执行指令的结果。 请参 阅 Modbus 从站协议执行错误代码中可能因执行指令而产生的错误条件。包含 Modbus RTU 从站指令库的项目编译、下载到 CPU 中后,在编程计算机 (PG/PC)上运行一些 Modbus 测试软件

55、可以检验 S7-200 的 ModbusRTU 通信是否正常, 这对查找故障点很有用。 测试软件通过计算机串口 ( RS-232)和 PC/PPI 电缆连接 CPU。 如果必要,须将 PC/PPI 电缆设置在自由口通信方式。可到一些软件下载网站寻找类似 软件,如 ModScan32 等。NETWORK 1 / 首次扫描时初始化 Modbus 从站协议/ 将从站地址设为 1,将端口 0 设为 9600 波特,将奇偶校验设为偶数,/ 允许存取所有的 I、Q 和 AI 数值,允许存取 1000 台保存寄存器 (2000 个字节 )/ 从 VB0 开始。LD SM0.1CALLMBUS_INIT, 1

56、, 1, 9600, 2, +0, +128, +32, +1000, &VB0, M0.1, MB1NETWORK 2/ 每次扫描时执行 Modbus 从站协议LD SM0.0CALL MBUS_SLAVE, M0.2, MB2输入 /输出操作数数据类型完成I, Q, M, S, SM, T, C, V, L布尔错误VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD字节2.MBUS_SLAVE指令MBUS_SLAVE 指令被用于为 Modbus 主设备发出的请求服务,并且必须在每次扫描时 执行,以便允许该指令检查和回答 Modbus 请求。在

57、每次扫描且 EN 输入开启时执行该 指令。 MBUS_SLAVE 指令无输入参数。当 MBUS_SLAVE 指令对 Modbus 请求作出应答时, "完成 "输出打开。如果没有需要服 务的请求时, "完成 "输出关闭。"错误 "输出包含执行该指令的结果。该输出只有在"完成"打开时才有效。如果 "完成"关闭,错误参数不会改变。 请参阅 Modbus 从站协议执行错误代码 中可能因执行该指令而 导致的错误条件。3.常问问题 Modbus 从站的网络地址与 S7-200 的 CPU 网络地址有什么关系? 没有关系。支持网络通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论