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

下载本文档

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

文档简介

1 2 修订历史记录修订历史记录 日期日期版本版本说明 修改 补充 删说明 修改 补充 删 除 除 作者作者审核审核 第一版 已完 研发部 孙宝东研发部 王振岳 5 13 库存储区补充说明 36 页 注释 注释 红色字体为注意点 红色字体为注意点 蓝色为修改补充 蓝色为修改补充 紫色为问题总结 紫色为问题总结 茶色为暂时删除 茶色为暂时删除 绿色为住宿绿色为住宿 3 目目 录录 前言前言 4 第一章第一章 使用使用 ModbusModbus 协议库协议库 6 前言 6 1 使用 Modbus 主设备协议的要求 6 2 使用 Modbus 从站设备协议的要求 7 3 Modbus 主设备协议的初始化和执行时间 7 4 Modbus 从站协议的初始化和执行时间 8 5 Modbus 主设备寻址 8 6 Modbus 从站寻址 8 7 Modbus 主设备 MBUS MSG 执行错误代码 10 8 Modbus 从站协议执行错误代码 1 11 9 Modbus 主设备高级用户信息 1111 第二章第二章 使用使用 ModbusModbus 主设备指令主设备指令 1414 前言 1414 1 MBUS CTRL 指令 初始化主设备 15 2 MBUS MSG 指令 16 第三章第三章 使用使用 ModbusModbus 从站指令从站指令 22 前言 2222 1 MBUS INIT 指令 初始化从站 23 2 MBUS SLAVE 指令 26 3 常见问题 26 第四章第四章 下载与通讯测试下载与通讯测试 28 1 编译 下载 28 2 通讯 31 4 附表附表 主从站指令配置表主从站指令配置表 3737 S7200S7200 ModbusModbus 主从协议主从协议 版本 09 年初稿版 制作 研发部 前言 前言 Modbus 从站协议指令可以配置 S7 200 将其用作 Modbus RTU 从站 与 Modbus 主设 备通讯 Modbus 主设备协议指令可以配置 S7 200 将其用作 Modbus RTU 主设备 与一个或多 个 Modbus 从站通讯 Modbus 指令安装在 STEP 7 Micro WIN 指令树的 协议库 文件夹中 有了这些新指令 您可以将 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 协议操作库位于操作树的 库 文件夹中 MODBUS 函数库要求 STEP 7 Micro WIN 为 V3 2 或更高版本 5 图 1 添加函数库 第一章第一章 使用使用 ModbusModbus 协议库协议库 6 前言 前言 这些库是附加函数库 并非组态软件 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 Micro WIN V4 0 SP5 或者更高版本 那么操作库中就会包含下列函 数 Modbus RTU Master V1 2 对应端口 0 和端口 1 Modbus RTU Slave V1 0 对应端口 0 USS protocol V2 3 对应端口 0 和端口 1 下面我对 Modbus RTU 各指令功能与使用方法分别加以讲解 1 使用使用 Modbus 主设备协议的要求主设备协议的要求 Modbus 主设备协议指令使用下列 S7 200 资源 初始化 Modbus 主设备协议可以为 Modbus 主设备协议通讯指定专用 CPU 端口 当 CPU 端口被用于 Modbus 主设备协议通讯时 就无法用于任何其它用途 包括与 STEP 7 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 个中断例程 Modbus 主设备协议指令要求两个 Modbus 主设备指令和支持例程有 1620 个字节的程 序空间 Modbus 主设备协议指令的变量要求 284 个字节的 V 存储器程序块 该程序块的起始 地址由用户指定 专门保留用于 Modbus 变量 S7 200 CPU 必须是固化程序修订版 2 00 或最好支持 Modbus 主设备协议库 CPU MLFB 21x 2xx23 0XB0 Modbus 主设备协议库为某些功能使用用户中断 用户中断不能被用户程序禁用 提示提示 欲将 CPU 通讯端口操作更换回 PPI 以便与 STEP 7 Micro WIN 通讯 将 MBUS CTRL 指令的模式参数设置为零 0 您还可以将 S7 200 上的模式开关设置到 7 STOP 模式位置 这些方法中的任一个将设置 CPU 通讯端口与 STEP 7 Micro WIN 通讯 2 使用使用 Modbus 从站协议的要求从站协议的要求 Modbus 从站协议指令使用下列 S7 200 资源 初始化 Modbus 从站协议为 Modbus 从站协议通讯指定端口 0 当端口 0 被用于 Modbus 从站协议通讯时 就无法用于任何其它用途 包括与 STEP 7 Micro WIN 通讯 MBUS INIT 指令控制将端口 0 指定给 Modbus 从站协议或 PPI Modbus 从站协议指令影响与端口 0 中自由端口通讯相关的所有 SM 位置 Modbus 从站协议指令使用 3 个子程序和 2 个中断例程 Modbus 从站协议指令要求两个 Modbus 主设备指令和支持例程有 1857 个字节的程序 空间 Modbus 从站协议指令的变量要求 779 个字节的 V 存储器程序块 该程序块的起始地 址由用户指定 专门保留用于 Modbus 变量 一定要设置 V 存储区 不然编译时会出 现错误信息 设置过程很简单 点击 文件 库存储区 出现如下画面 进行设置即可 提示提示 欲将端口 0 操作更换回 PPI 以便与 STEP 7 Micro WIN 通讯 用另一条 MBUS INIT 指令重新指定端口 0 您还可以将 S7 200 上的模式开关设为 STOP 模式 这样会将参数复原为端口 0 3 Modbus 主设备协议的初始化和执行时间主设备协议的初始化和执行时间 Modbus 主设备协议每次扫描都需要少量的时间来执行 MBUS CTRL 指令 MBUS CTRL 初始化 Modbus 主设备 首次扫描 需要大约 1 11 毫秒的时间 以后扫描需 要大约 0 41 毫秒 8 当 MBUS MSG 子程序执行请求时 将执行扫描时间 大多数时间用于计算 Modbus CRC 的请求和应答 CRC 循环冗余检验 确保通讯消息的完整性 对于请求和应答中的每个字 扫描时间会延长约 1 85 毫秒 最大请求 应答 读取或写入 120 个字 使扫描时间延长约 222 毫秒 当在从站中接收应 答并至少发出请求时 主要是读取请求在延长扫描时间 当将数据发送到从站并至少 收到应答时 主要是写入请求在延长扫描时间 4 Modbus 从站协议的初始化和执行时间从站协议的初始化和执行时间 Modbus 通讯使用 CRC 循环冗余检验 确保通讯消息的完整性 Modbus 从站协议使用 预先计算数值的表格减少处理消息的时间 该 CRC 表初始化约需 240 毫秒 初始化在 MBUS INIT 子程序中进行 通常在进入 RUN 模式后用户程序首次扫描时执行 如果 MBUS INIT 子程序和任何其它初始化程序要求的时间超过 500 微秒扫描监视时间 您 需要复原监视定时器 并将输出保持在启用状态 如果扩展模块要求 输出模块监视定 时器可用向模块输出写入的方法复原 请参阅监视复原指令 当 MBUS SLAVE 子程序执行请求时 扫描时间会延长 由于大多数时间用于计算 Modbus CRC 对于请求中和应答中的每个字节 扫描时间会延长约 420 微秒 最大请 求 应答 读取或写入 120 个字 使扫描时间延长约 100 毫秒 5 Modbus 主设备寻址主设备寻址 Modbus 地址通常写作包含数据类型和偏移量的 5 个字符的数值 第一个字符决定数据 类型 最后四个字符在数据类型中选择适当的数值 然后 Modbus 主设备指令将地址 映射至正确的功能 以便发送到从站 Modbus 主设备指令支持下列 Modbus 地址 00001 至 09999 是离散输出 线圈 10001 至 19999 是离散输入 触点 30001 至 39999 是输入寄存器 通常是模拟量输入 40001 至 49999 是保持寄存器 所有 Modbus 地址均以 1 为基位 表示第一个数据值从地址 1 开始 有效地址范围将取 决于从站 不同的从站将支持不同的数据类型和地址范围 6 Modbus 从站寻址从站寻址 Modbus 地址通常被写为包含数据类型和偏移量的 5 个字符的数值 第一个字符决定数 据类型 最后四个字符在数据类型中选择适当的数值 然后 Modbus 主设备将地址映 射至正确的功能 Modbus 从站指令支持下列地址 00001 至 00128 是映射至 Q0 0 Q15 7 的离散输出 10001 至 10128 是映射至 I0 0 I15 7 的离散输入 30001 至 30032 是映射至 AIW0 至 AIW62 的模拟输入寄存器 9 40001 至 4xxxx 是映射至 V 存储器的保持寄存器 所有 Modbus 地址均以 1 为基位 下表显示映射至 S7 200 地址的 Modbus 地址 Modbus 地址 S7 200 地址 00001Q0 0 00002Q0 1 00003Q0 2 00127Q15 6 00128Q15 7 10001I0 0 10002I0 1 10003I0 2 10127I15 6 10128I15 7 30001AIW0 30002AIW2 30003AIW4 30032AIW62 40001Hold Start 40002HoldStart 2 40003HoldStart 4 4xxxxHoldStart 2 x xxxx 1 Modbus 从站协议允许您限制 Modbus 主设备可存取的输入 输出 模拟输入和保持寄 存器 V 存储器 数量 10 MBUS INIT 指令的 MaxIQ 参数指定 Modbus 主设备允许存取的离散输入或输出 I 或 Q 的 最大数目 MBUS INIT 指令的 MaxAI 参数指定 Modbus 主设备允许存取的输入寄存器 AIW 的最 大数目 MBUS INIT 指令的 MaxHold 参数指定 Modbus 主设备允许存取的保持寄存器 V 存储 器字 的最大数目 请参阅 MBUS INIT 指令说明 了解有关为 Modbus 从站设定存储器限制的进一步详情 7 Modbus 主设备主设备 MBUS MSG 执行错误代码执行错误代码 MBUS MSG 错误代码 说明 0无错误 1应答时奇偶校验错误 仅当使用偶校验或奇校验时才会发生 传输被干扰 可能 会收到不正确的数据 该错误通常是由电气故障 例如错误接线或者影响通讯的电噪声 引起的 2未使用 3接收超时 在 超时 时间内 没有来自从站的应答 可能有以下一些原因 与从 站的电气连接有问题 主设备和从站设置为不同的波特率 奇偶校验设置 以及错误的 从站地址 4请求参数出错 一个或多个输入参数 从站 读写 地址或计数 被设置为非法值 检查文档中输入参数的允许值 5Modbus 主设备未启用 在调用 MBUS MSG 前 每次扫描时都调用 MBUS CTRL 6Modbus 忙于处理另一个请求 一次只能激活一条 MBUS MSG 指令 7应答时出错 收到的应答与请求不相关 这表示从站中出现了某些错误 或者错 误的从站应答了请求 8应答时 CRC 错误 传输被干扰 可能会收到不正确的数据 该错误通常是由电 气故障 例如错误接线或者影响通讯的电噪声 引起的 101 从站不支持在该地址处所请求的功能 请参阅 使用 Modbus 主设备指令 帮助主 题中的所需 Modbus 从站功能支持表 102 从站不支持数据地址 地址 加上 计数 所要求的地址范围超出了从站所允许的 地址范围 103 从站不支持数据类型 该 地址 类型不被从站支持 11 104 从站故障 105 从站已接受消息但应答延迟 这是 MBUS MSG 的错误 用户程序应在稍后重新 发送请求 106 从站忙 因此拒绝消息 可以再次尝试相同的请求 以获得应答 107 从站因未知原因而拒绝消息 108 从站存储器奇偶校验错误 从站中有错误 8 Modbus 从站协议执行错误代码从站协议执行错误代码 错误代码 说明 0无错误 1内存范围错误 2非法波特率或奇偶校验 3非法从属地址 4非法 Modbus 参数值 5保持寄存器与 Modbus 从属符号重叠 6收到奇偶校验错误 7收到 CRC 错误 8非法功能请求 功能不受支持 9请求中的非法内存地址 10从属功能未启用 9 Modbus 主设备高级用户信息主设备高级用户信息 返回的功能与请求不匹配 错误代码 7 Modbus 主设备将在设置 完成 和 错误 输出参数前 重新发送请求两个附加时间 通过查找 Modbus 主设备符号表中的符号 mModbusRetries 然后在执行 MBUS CTRL 后 改变该值 可以更改重试次数 mModbusRetries 值是 字节 类型 重试范围是 0 至 255 内部字符超时 12 如果应答中字符之间的时间超出了指定的时间限制 Modbus 主设备将中止来自从站的 应答 缺省时间设置为 100 毫秒 可允许 Modbus 主设备协议用于大多数有线或电话调 制解调器联网的从站 如果检测到该错误 MBUS CTRL 错误 参数将设置为错误代码 3 当字符之间需要较长的时间时 可能是因为传送介质 例如电话调制解调器 或者因为从 站自身需要更多的时间 通过查找 Modbus 主设备符号表中的符号 mModbusCharTimeout 然后在执行 MBUS CTRL 后改变该值 可以延长该超时时间 mModbusCharTimeout 值是 整型 类型 范围是 1 至少 30000 毫秒 单个对多个位 字写入功能 某些 Modbus 从站不支持 Modbus 功能写入单个离散输出位 Modbus 功能 5 或写入单个 保持寄存器 Modbus 功能 6 这些设备仅支持多个位写入 Modbus 功能 15 或多个寄存器写入 Modbus 功能 16 如果从站不支持单个位 字 Modbus 功能 则 MBUS MSG 指令将返 回错误代码 101 Modbus 主设备协议允许强制 MBUS MSG 指令 以使用多个位 字 Modbus 功能来取代 单个的位 字 Modbus 功能 通过查找 Modbus 主设备符号表中的符号 mModbusForceMulti 然后在执 行 MBUS CTRL 后改变该值 可以强制执行多个位 字指令 mModbusForceMulti 值是 布尔 数据类型 应该设置为 1 以在写入单个位 寄存器时强制使用多个位 字功能 累加器用途 累加器 AC0 AC1 AC2 AC3 由 Modbus 主设备指令使用 并在 交叉参考 列表中显 示 累加器中的数值被 Modbus 主设备指令保存和恢复 当执行 Modbus 主设备指令时 保存累加器中的所有用户数据 保持寄存器地址大于 9999 Modbus 保持地址通常在 40001 到 49999 的范围内 该范围对大多数应用程序来说足够 了 但是某些数据映射到保持寄存器的 Modbus 从站所具有的地址超过 9999 这些设 备不适合常规的 Modbus 寻址方案 Modbus 主设备指令支持通过可选的寻址方法对大于 9999 的保持寄存器进行寻址 MBUS MSG 指令允许参数 地址 具有附加范围以支持保持寄存器地址的扩充范围 400001 至 465536 用于保持寄存器 例如 要访问保持寄存器 16768 MBUS MSG 的 地址 参数应该设置为 416768 13 扩充寻址允许访问 Modbus 协议支持的 65536 个可能地址的全部范围 该扩充寻址仅支 持保持寄存器 第二章第二章 使用使用 ModbusModbus 主设备指令主设备指令 前言前言 欲在 S7 200 程序中使用 Modbus 主设备指令 请执行以下步骤 14 1 在程序中插入 MBUS CTRL 指令 并在每次扫描时执行 MBUS CTRL 您可以使用 MBUS CTRL 指令初始化或更改 Modbus 通讯参数 当您插入 MBUS CTRL 指令时 会在 程序中自动增加几个受保护的子程序和中断例程 2 使用协议库存储器命令 为 Modbus 主设备协议指令需要的 V 存储器指定一个起始地 址 3 将一条或多条 MBUS MSG 指令放入程序中 可以根据需要将尽可能多的 MBUS MSG 指令放入程序中 但每次只能激活这些指令中的一条 4 连接 S7 200 CPU 上的端口 0 或对端口 1 协议库是端口 1 和 Modbus 从站之间的通讯 电缆 当心当心 带有不同参考电位的互连装置会引起互连电缆中出现意外电流 这些意外电流会引 起通讯错误或损坏装置 确保所有用通讯电缆连接的设备共享一个共用电路参考或单独隔 离 以防不需要的电流通过 Modbus 主设备指令使用如下显示的 Modbus 功能读取或写入特定的 Modbus 地址 Modbus 从站必须支持所需的 Modbus 功能才能读取或写入特定的 Modbus 地址 所需的 Modbus 从站功能支 持 Modbus 地址 读取或写入所需的 Modbus 从站功能 00001 09999 离散输出读取 写入 功能 1 功能 5 用于单个输出点 功能 15 用于多个输出点 10001 19999 离散输出读取 写入 功能 2 不能 30001 39999 输入寄存器读取 写入 功能 4 不能 40001 49999 保持寄存器读取 写入 功能 3 功能 6 用于单个寄存器 功能 16 用于多个寄存器 15 1 MBUS CTRL1 MBUS CTRL 指令指令 初始化主设备初始化主设备 输入 输出操作数数据类型 模式 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 AC 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 CTRL 指令 或用于端口 1 的 MBUS CTRL P1 指令 可初 始化 监视或禁用 Modbus 通讯 在使用 MBUS MSG 指令之前 必须正确执行 MBUS CTRL 指令 指令完成后立即设定 完成 位 才能继续执行下一条指令 在每次扫描且 EN 输 入打开时执行该指令 MBUS CTRL 指令必须在每次扫描时 包括首次扫描 被调用 以允 许监视随 MBUS MSG 指令启动的任何突出消息的进程 除非每次调用 MBUS CTRL 否则 Modbus 主设备协议将不能正确运行 模式 输入数值选择通讯协议 输入值 1 将 CPU 端口分配给 Modbus 协议并启用该 协议 输入值 0 将 CPU 端口分配给 PPI 系统协议并禁用 Modbus 协议 波特 参数将波特率设为 1200 2400 4800 9600 19200 38400 57600 或 115200 波特 奇偶校验 参数被设为与 Modbus 从站奇偶校验相匹配 所有设置使用一个起始位 和一个停止位 可接受的数值为 0 无奇偶校验 1 奇校验 2 偶校验 超时 参数设为等待来自从站应答的毫秒时间数 超时 数值可以设置的范围为 1 毫秒到 32767 毫秒 典型值是 1000 毫秒 1 秒 超时 参数应该设置的足够大 以 便从站有时间对所选的波特率作出应答 超时 参数用于确定 Modbus 从站是否对请求 16 做出应答 超时 值确定 Modbus 主设备在发送了请求的最后一个字符后 将要等待多 长时间才会有应答的第一个字符 如果在 超时 规定的时间内至少收到应答的一个字 符 Modbus 主设备将从 Modbus 从站接收到整个应答 MBUS CTRL 指令完成时 完成 输出打开 错误 输出包含执行该指令的结果 下表定义了在执行 MBUS CTRL 指令时会产生 的错误条件 MBUS CTRL 错误代码 说明 0 无错误 1 奇偶校验选择无效 2 波特率选择无效 3 超时选择无效 4 模式选择无效 2 MBUS MSGMBUS MSG 指令指令 输入 输出数据类型操作数 首次I Q M S SM 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 整型 17 DataPtr VB 双字 完成 I Q M S SM T C V L 布尔 错误 VB IB QB MB SB SMB LB AC VD AC LD 字节 MBUS MSG 指令 或用于端口 1 的 MBUS MSG P1 用于启动对 Modbus 从站的请求并处 理应答 当 EN 输入和 首次 输入打开时 BUS MSG 指令启动对 Modbus 从站的请求 发 送请求 等待应答 并处理应答通常需要多次扫描 EN 输入必须打开以启用请求的发 送 并应该保持打开直到 完成 位被置位 注释 一次只能激活一条 MBUS MSG 指令 如果启用了多条 MBUS MSG 指令 则将处理所执行的第一条 MBUS MSG 指令 之后的所 有 MBUS MSG 指令将中止并产生错误代码 6 首次 参数应该在有新请求要发送时才打开以进行一次扫描 首次 输入应当通 过一个边沿检测元素 例如上升沿 打开 这将导致请求被传送一次 从站 参数是 Modbus 从站的地址 允许的范围是 0 到 247 地址 0 是广播地址 只能用于写请求 不存在对地址 0 的广播请求的应答 并非所有的从站会支持广播地 址 S7 200 Modbus 从站协议库不支持广播地址 读写 参数指定是否要读取或写入该消息 读写 参数允许使用下列两个值 0 读 1 写 离散输出 线圈 和保持寄存器支持读取和写入请求 离散输入 触点 和输入寄存器仅支持读取 请求 地址 参数是起始的 Modbus 地址 允许使用下列取值范围 00001 至 09999 是离 散输出 线圈 10001 至 19999 是离散输入 触点 30001 至 39999 是输入寄存器 40001 至 49999 是保持寄存器 地 址 的指定取值范围基于 Modbus 从站支持的地址 计数 参数指定在该请求中读取或写入的数据元素的数目 计数 值是位数 对于 位数据类型 和字数 对于字数据类型 地址 0 xxxx 计数 是要读取或写入的位数 地址 1xxxx 计数 是要读取的位数 地址 3xxxx 计数 是要读取的输入寄存器的字数 地址 4xxxx 计数 是要读取或写入的保持寄存器的字数 MBUS MSG 指令将读取或写入最大 120 个字或 1920 个位 240 字节的数据 计数 的实际限值将取决于 Modbus 从站中的限制 18 DataPtr 参数是指向 S7 200 CPU 的 V 存储器中与读取或写入请求相关的数据的 间接地址指针 对于读取请求 DataPtr 应该指向用于存储从 Modbus 从站读取的数据 的第一个 CPU 存储器位置 对于写入请求 DataPtr 应该指向要发送到 Modbus 从站的 数据的第一个 CPU 存储器位置 DataPtr 值作为间接地址指针传递到 MBUS MSG 例如 如果要写入 Modbus 从站的数据从 S7 200 CPU 中的地址 VW200 开始 则 DataPtr 的数值将会是 VB200 VB200 的地址 指针必须始终是 VB 类型 即使它们 指向字数据 保持寄存器 地址 4xxxx 和输入寄存器 地址 3xxxx 的值是字 2 个字 节或 16 位 S7 200 CPU 字的格式与 Modbus 寄存器相同 低位编号的 V 存储器地址是 寄存器的最高有效字节 高位编号的 V 存储器地址是寄存器的最低有效字节 下表显 示了 S7 200 字节和字寻址如何与 Modbus 寄存器格式相对应 S7 200 CPU 存储器字节地址S7 200 CPU 存储器字地址Modbus 保持寄存器地址 地址十六进制数据地址十六进制数 据 地址十六进制数 据 VB20012VW20012 34400112 34 VB20134 VB20256VW20256 78400256 78 VB20378 VB2049AVW2049A BC40039A BC VB205BC 位数据 地址 0 xxxx 和 1xxxx 区域作为压缩字节被读取和写入 也就是说 每个数 据字节内压缩 8 位 第一个数据字节的最低有效位是寻址的位号 参数 地址 如果仅 写入单个的位 则该位必须处于指向 DataPtr 的字节的最低有效位字节 压缩字节的格 式 显示离散输入地址 Vx 7 Vx 0 1000810007100061000510004100031000210001 对于未在偶数字节边界上开始的位数据地址 与起始地址相关的位必须处于字节 的最低有效位 参见如下在 Modbus 地址 10004 处开始的 3 位压缩字节格式实例 压缩 字节的格式 在地址 10004 处开始的离散输入 当写入到离散输出数据类型 线圈 时 用户必须在数据通过 DataPtr 传递到 MBUS MSG 指令之前 将压缩字节内的位放置到正确的位位置中 完成 输出在发送请求和接收应答时关闭 完成 输出在应答完成或 MBUS MSG 指 令因错误而中止时打开 错误 输出仅当 完成 输出打开时有效 请参阅 Modbus 主设备 MBUS MSG 执行错 误通过 MBUS MSG 指令返回 低位编号的错误代码 1 到 8 是由 MBUS MSG 指令检测到的 错误 这些错误代码通常指示与 MBUS MSG 指令的输入参数有关的问题 或接收来自从 19 站的应答时出现的问题 奇偶校验和 CRC 错误指示存在应答但是数据未正确接收 这 通常是由电气故障 例如连接有问题或者电噪声 引起的 高位编号的错误代码 从 101 开始 是由 Modbus 从站返回的错误 这些错误指示从站不支持所请求的功能 或者所 请求的地址 或数据类型或地址范围 不被 Modbus 从站支持 程序举例 该实例程序显示了在每次输入 I0 0 打开时 如何使用 Modbus 主设备指令将 4 个 保持寄存器写入 Modbus 从站然后再从中读取 S7 200 CPU 将把自 VW100 开始的 4 个字 写入 Modbus 从站 数据将写入从站中自地址 40001 开始的 4 个保持寄存器 S7 200 CPU 于是将从 Modbus 从站读取 4 个保持寄存器 数据将来自保持寄存器 40010 40013 并放置到 S7 200 CPU 的 V 存储器中自 VW200 开始的地址 实例程序数据传送 如果从 MBUS MSG 指令返回一个错误 则程序将打开输出 Q0 1 和 Q0 2 20 通过每次扫描时调用 MBUS CTRL 来初始化和监视 Modbus 主设备 Modbus 主设备设置为 9600 波特 无奇偶校验 从站允许 1000 毫秒 1 秒 的应答 时间 在首次扫描时 重设用于两条 MBUS MSG 指令的启用标记 M2 0 和 M2 1 当 I0 0 从 关闭 切换到 打开 时 为第一条 MBUS MSG 指令 M2 0 设置启用标记 当第一个启用标记 M2 0 打开时 调用 MBUS MSG 指令 首次 参数必须仅为启用 指令时的首次扫描而设置 该指令将 4 个保持寄存器写入 RW 1 从站 2 要写入的数据取自 CPU 中的 VB100 VB107 4 个字 并写入 Modbus 从站中的地址 40001 40004 当第一条 MBUS MSG 指令完成后 完成 从 0 变为 1 清除对第一条 MBUS MSG 指令 的启用 并为第二条 MBUS MSG 指令设定启用 21 如果错误 MB1 不为零 则设置 Q0 1 以显示错误 当第二个启用标记 M2 1 打开时 调用第二条 MBUS MSG 指令 首次 参数必须仅 为启用指令时的首次扫描而设置 该指令从从站 2 读取 RW 0 4 个保持寄存器 数据从 Modbus 从站的地址 40010 40013 读取并复制到 CPU 中的 VB200 VB207 4 字 当第二条 MBUS MSG 指令完成 完成 从 0 变为 1 后 清除对第二条 MBUS MSG 指令 的启用 如果错误 MB1 不为零 则设置 Q0 2 以显示错误 第三章第三章 使用使用 ModbusModbus 从站指令从站指令 22 前言 前言 编程时使用 SM0 1 调用子程序 MBUS INIT 进行初始化 使用 SM0 0 调 用 MBUS SLAVE 并指定相应参数 关于参数的详细说明 可在子程序的局部变 量表中找到 欲在 S7 200 程序中使用 Modbus 从站指令 请执行以下步骤 1 在程序中插入 MBUS INIT 指令 并仅限为一次扫描执行 MBUS INIT 指令 您可以使用 MBUS INIT 指令初始化或更改 Modbus 通讯参数 当您插入 MBUS INIT 指令时 会在程序中自动增加几个隐藏的子程序和中断例 行程序 2 使用协议库存储器命令 为 Modbus 从站协议指令需要的 V 存储器指定一 个起始地址 3 仅将一条 MBUS SLAVE 指令放入程序中 每次扫描时均调用该指令 为所 有收到的请求提供服务 4 连接 S7 200 上的端口 0 和 Modbus 主设备之间的通讯电缆 当心当心 带有不同参考电位的互连装置会使不需要的电流从互连电缆中通 过 这些不需要的电流会引起通讯错误或损坏装置 确保所有用通讯电缆连接 的设备共享一个共用电路参考或单独隔离 以防不需要的电流通过 累加器 AC0 AC1 AC2 AC3 被 Modbus 从站指令使用 在 交叉参考 列表中 显示 执行之前 Modbus 从站指令累加器中的数值被保存 并在 Modbus 从站 指令完成之前还原至累加器 以确保在执行 Modbus 从站指令时累加器中的所 有用户数据被保留 Modbus 从站协议指令支持 Modbus RTU 协议 这些指令使用 S7 200 的自由端口实用程序支 持最常用的 Modbus 功能 详情见附表 2 从站功能码与说明 1 MBUS INIT1 MBUS INIT 指令指令 初始化从站初始化从站 23 输入 输出操作数数据类型 模式 地址 奇 偶校验 VB IB QB MB SB SMB LB AC Constant VD AC LD 字节 波特 HoldStart VD ID QD MD SD SMD LD AC Constant VD AC LD 双字 延时 MaxIQ MaxAI MaxHold 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 LD 字节 MBUS INIT 指令被用于启用和初始化或禁止 Modbus 通讯 在使用 MBUS SLAVE 指 令之前 必须正确执行 MBUS INIT 指令 指令完成后立即设定 完成 位 才能继续执 行下一条指令 在每次扫描且 EN 输入打开时执行该指令 应当在每次通讯状态改变时 执行 MBUS INIT 指令 因此 EN 输入应当通过一个边缘检测元素用脉冲打开 或者 仅在首次扫描时执行 模式 输入数值选择通讯协议 输入数值 1 将端口 0 指定给 Modbus 协议并启用协议 将输入数值 0 则将端口 0 指定给 PPI 并禁用 Modbus 协议 波特 参数将波特率设为 1200 2400 4800 9600 19200 38400 57600 或 115200 地址 参数将地址设为 1 和 247 之间 包括 1 和 247 的数值 奇偶校验 参数被设为与 Modbus 主设备奇偶校验相匹配 可接受的数值为 0 无奇偶校验 1 奇数校验 2 偶数校验 延时 参数通过将指定的毫秒数增加至标准 Modbus 信息超时的方法延长标准 Modbus 信息结束超时条件 该参数的典型数值在有线网络上应为 0 如果您在使用带有纠错功 能的调制解调器 将延时设为 50 至 100 毫秒的数值 如果您在使用扩展频谱无线电 将延时设为 10 至 100 毫秒的数值 延时 数值可以是 0 至 32767 毫秒 MaxIQ 参数将供 Modbus 地址 0 xxxx 和 1xxxx 使用的 I 和 Q 点数设为 0 至 128 之间的 数值 数值 0 禁止所有向输入和输出的读取 建议使用的 MaxIQ 数值是 128 该数值 可在 S7 200 中存取所有的 I 和 Q 点 MaxAI 参数将供 Modbus 地址 3xxxx 使用的字输入 AI 寄存器数目设为 0 至 32 之间的 数值 数值 0 禁止模拟输入的读数 建议使用的 MaxAI 数值如下 这些数值可允许存 取所有的 S7 200 模拟输入 0 用于 CPU 221 24 16 用于 CPU 222 32 用于 CPU 224 224XP 226 和 226XM MaxHold 参数设定供 Modbus 地址 4xxxx 使用的 V 存储器中的字保持寄存器数目 例 如 为了允许主设备存取 2000 个字节的 V 存储器 将 MaxHold 设为 1000 个字的数值 保持寄存器 HoldStart 参数是 V 存储器中保持寄存器的起始地址 该数值一般被设为 VB0 因此 HoldStart 参数被设为 VB0 VB0 地址 其它 V 存储器地址可指定为保持寄存器的起 始地址 以便在项目的其它地方使用 VB0 Modbus 主设备可存取 V 内存 MaxHold 个 字数 从 HoldStart 开始 注意 你选用的 CPU 的 V 存储区大小 CPU 型号不同 V 数据存储区大小不同 应根 据需要选择 Modbus 保持寄存器区域的大小 MBUS INIT 指令完成时 完成 输出打开 错误 输出字节包含执行指令的结果 请 参阅 Modbus 从站协议执行错误代码中可能因执行指令而产生的错误条件 包含 Modbus RTU 从站指令库的项目编译 下载到 CPU 中后 在编程计算机 PG PC 上运行一些 Modbus 测试软件可以检验 S7 200 的 ModbusRTU 通信是否正 常 这对查找故障点很有用 测试软件通过计算机串口 RS 232 和 PC PPI 电缆连接 CPU 如果必要 须将 PC PPI 电缆设置在自由口通信方式 可到一些软件下载网站寻 找类似软件 如 ModScan32 等 25 NETWORK 1 首次扫描时初始化 Modbus 从站协议 将从站地址设为 1 将端口 0 设为 9600 波特 将奇偶校验设为偶数 允许存取所有的 I Q 和 AI 数值 允许存取 1000 台保存寄存器 2000 个字节 从 VB0 开始 LD SM0 1 CALL MBUS INIT 1 1 9600 2 0 128 32 1000 VB0 M0 1 MB1 NETWORK 2 每次扫描时执行 Modbus 从站协议 LD SM0 0 CALL MBUS SLAVE M0 2 MB2 26 2 MBUS SLAVE 指令指令 输入 输出操作数数据类型 完成I Q M S SM T C V L布尔 错误VB IB QB MB SB SMB LB AC VD AC LD字节 MBUS SLAVE 指令被用于为 Modbus 主设备发出的请求服务 并且必须在每次扫描时 执行 以便允许该指令检查和回答 Modbus 请求 在每次扫描且 EN 输入开启时执行该 指令 MBUS SLAVE 指令无输入参数 当 MBUS SLAVE 指令对 Modbus 请求作出应答时 完成 输出打开 如果没有需要服 务的请求时 完成 输出关闭 错误 输出包含执行该指令的结果 该输出只有在 完成 打开时才有效 如果 完成 关 闭 错误参数不会改变 请参阅 Modbus 从站协议执行错误代码 中可能因执行该指令 而导致的错误条件 3 常问问题常问问题 Modbus 从站的网络地址与 S7 200 的 CPU 网络地址有什么关系 没有关系 支持网络通信的通信协议必须有其自己的网络寻址规定 Modbus 从站的地址 只是它在 Modbus 网络上的地址 而通常所说的 S7 200 CPU 地址是 CPU 在西门子的 PPI 网络上的站地址 S7 200 CPU 的大部分通信功能都通过 PPI 网络完成 例如编程 网络读写通信等 如何理解 Modbus 地址与功能码的区别 Modbus 地址与 Modbus 的功能码是两个层次的概念 根据 Modbus 通信协议 Modbus 数据的地址使用 00 xxx 10 xxx 30 xxx 和 40 xxx 的形式 分别表示数字量输出 数字量 输入 模拟量输入等数据地址 在使用 S7 200 的指令库时 Modbus 数据地址与 S7 200 的 I O 和数据存储区地址间有特定的对应关系 有些设备表明它支持 Modbus RTU 通信协议 但也详细提供了读写数据的详细通信帧格式 其中包括如何指定 Modbus 站的地址 需要读写数据类型 长度等等 数据帧有特定字节 指出此指令读写的数据类型和地址 此字节的数据内容即所谓 功能码 如功能 1 指定读 取单个 多个数字量输出点的值 支持 Modbus 协议的设备或软件 使用时用户直接设置或看到的应当是 Modbus 数据地 址 Modbus 地址所访问的数据 是通过各种 功能 读写而来 功能码是 Modbus 地址的 底层 如果 Modbus 通信的一方提供的所谓 Modbus 协议只有功能码 则需要注意了解此 功能号与 Modbus 地址间的对应关系 Modbus 指令库启动后 如何通过同一个通信端口进行 CPU 监控 27 Modbus 指令库使用的是 CPU 的自由口通信功能 工作在自由口模式下的通讯口不能使 用 Micro WIN 的 PPI 编程通信监控 如果通信口都已经被占用 可以考虑 加一个通信 模块 如 EM 277 CP 243 1 EM 241 等 扩展出一个编程通信口 中止自由口模式 可 以将 CPU 上的模式开关从 RUN 拨到 STOP 或者保持处于 RUN 状态 用程序停止指 令库的 Modbus 模式 参见指令库应用 为何有些 HMI 软件使用 Modbus RTU 读取 S7 200 中的实数会出现错误 有些 HMI 软件使用 ModbusRTU 通信协议时 处理存储在数据保持寄存器中的实数 浮点 数 的方式与西门子的实数保存格式不同 西门子的 PLC 遵循 高字节低地址 低字节高 地址 的规律 ModbusRTU 的保持寄存器总是以 字 双字节 为单位 而一个实数需要 4 个字节 双字 表示 HMI 软件在处理时可能会把保持寄存器的两个 字 互换位置 造成不能识别以西门 子格式表示的实数 如果 HMI 软件一方无法处理这种实数 则可在 S7 200CPU 中编程将 存入数据缓冲区 保持寄存器区 的实数的高字和低字互换 为何有的 HMI 软件用 ModbusRTU 可以读取作为从站的 S7 200 的内容 但不能写 入 可能此软件使用了 Modbus 功能 15 写多个离散量 或类似功能 功能 16 S7 200 从站 协议遵守 以整字节地址边界 如 Q0 0 Q2 0 开始 以 8 的整数倍为位个数 的规约 如 果 HMI 软件未严格执行此规律就可能发生写入错误的情况 S7 200 是否支持 Modbus ASCII 模式 S7 200 可以支持上述模式 但是没有现成的指令库 需要用户自己编程 项目编译后为何出现很多错误 使用指令库时 若编译后出现很多错误 一般是因为未指定库指令数据存储区 S7 200 CPU 的 Port1 是否可以支持 ModbusRTU 协议 可以 用户可以自己编程实现 在 S7 200 的 Tips and Tricks 帮助文档中 Tip041 是 ModbusRTU 从站程序 用户可以参考 S7 200 是否可以组成 Modbus RTU 通信网络 如何组网 S7 200 可以组成 RS 485 基础上的 Modbus RTU 网络 如果通信对象是不同标准的通信口 可能还需要转换 28 第四章第四章下载与通讯下载与通讯 因为 200 多作为从站 故本文只对其作为从站时进行分析 STEP 7 Micro WIN 为 V3 2 或更高版本编程软

温馨提示

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

评论

0/150

提交评论