西门子S7-200 SMART Modbus RTU寄存器地址映射完全指南

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 1. 개요
  2. 2. 二、Modbus地址类型说明
  3. 3. 三、S7-200 SMART Modbus地址映射表
  4. 4. 3.1 数字量输出区(Q区)→ 0xxxx线圈
  5. 5. 3.2 数字量输入区(I区)→ 1xxxx离散输入
  6. 6. 3.3 模拟量输入区(AIW区)→ 3xxxx输入寄存器
  7. 7. 3.4 V存储区 → 4xxxx保持寄存器
  8. 8. 四、PLC从站配置步骤
  9. 9. 4.1 安装Modbus从站指令库
  10. 10. 4.2 调用MBUS_INIT指令初始化从站
  11. 11. 4.3 主轮询MBUS_SLAVE指令
  12. 12. 4.4 配置V存储区数据
  13. 13. 五、PLC主站配置与读取示例
  14. 14. 5.1 调用MBUS_CTRL指令初始化主站
  15. 15. 5.2 调用MBUS_MSG指令发起读写请求
  16. 16. 5.3 读取保持寄存器示例
  17. 17. 六、常见问题与排障指南
  18. 18. 6.1 通讯无响应,从站不回话
  19. 19. 6.2 读不到数据或数据不对
  20. 20. 6.3 数据乱码或数值不对
  21. 21. 6.4 偶发通讯失败
  22. 22. 6.5 오답错误代码说明
  23. 23. 七、总结
  24. 24. 八、相关链接

1. 개요

S7-200 SMART PLC作为Modbus RTU主站或从站时,其内部存储区(I、Q、AIW、V)与Modbus标准地址之间有固定的映射关系。本文基于西门子官方技术文档,详细说明S7-200 SMART的Modbus地址映射规则,包含完整的地址对照表、配置步骤、通讯示例和排障指南。

S7-200 SMART支持两种Modbus工作模式:

  • Modbus RTUmaster(Master):主动发起通讯请求,读取或控制从站设备
  • Modbus RTUslave(Slave):被动响应主站的读写请求

二、Modbus地址类型说明

Modbus协议定义了四种数据区域,每种区域有固定的地址范围和功能码:

Modbus地址区域 기능 코드 读写属性 데이터 type 对应S7-200 SMART存储区
0xxxx(线圈) 01(读线圈)/ 05(写单线圈)/ 15(写多线圈) 读/写 位(1 bit) Q区数字量输出
1xxxx(离散输入) 02(read discrete inputs) 只读 位(1 bit) I区数字量输入
3xxxx(输入寄存器) 04(read input registers) 只读 字(16 bit) AIW模拟量输入
4xxxx(保持寄存器) 03(read holding registers)/ 06(写单寄存器)/ 16(写多寄存器) 读/写 字(16 bit) V存储区(可配置)

重要说明:Modbus地址采用1-based编号,即从1开始计数。而PLC内部地址通常是0-based,Start from 0。

三、S7-200 SMART Modbus地址映射表

3.1 数字量输出区(Q区)→ 0xxxx线圈

数字量输出Q区映射到Modbus的0xxxx线圈区域,支持读写操作。

Modbus주소 S7-200 SMART주소 说明
00001 Q0.0 No.0通道第0位
00002 Q0.1 No.0通道第1位
00003 Q0.2 No.0通道第2位
00004 Q0.3 No.0通道第3位
00005 Q0.4 No.0通道第4位
00006 Q0.5 No.0通道第5位
00007 Q0.6 No.0通道第6位
00008 Q0.7 No.0通道第7位
00009 Q1.0 No.1通道第0位
00010 Q1.1 No.1通道第1位
00011 Q1.2 No.1通道第2位
00012 Q1.3 No.1通道第3位
00013 Q1.4 No.1通道第4位
00014 Q1.5 No.1通道第5位
00015 Q1.6 No.1通道第6位
00016 Q1.7 No.1通道第7位
00017 Q2.0 No.2通道第0位
00018 Q2.1 No.2通道第1位
依次类推,每8个地址对应一个字节
00256 Q31.7 最大地址(最多支持32个字节输出)

计算公式:Modbus주소 = 通道号 × 8 + 位号 + 1

example:要访问Q2.3,Modbus주소 = 2×8 + 3 + 1 = 00020

기능 코드

  • read coil status:기능 코드01
  • write single coil:기능 코드05
  • write multiple coils:기능 코드15(0x0F)

Precautions

  • Q区地址映射是固定的,不需要额外配置
  • 实际可用的Q区数量取决于CPU型号和扩展模块
  • 如果硬件上不存在对应的Q点,读出来的值始终为0

3.2 数字量输入区(I区)→ 1xxxx离散输入

数字量输入I区映射到Modbus的1xxxx离散输入区域,只读。

Modbus주소 S7-200 SMART주소 说明
10001 I0.0 No.0通道第0位
10002 I0.1 No.0通道第1位
10003 I0.2 No.0通道第2位
10004 I0.3 No.0通道第3位
10005 I0.4 No.0通道第4位
10006 I0.5 No.0通道第5位
10007 I0.6 No.0通道第6位
10008 I0.7 No.0通道第7位
10009 I1.0 No.1通道第0位
10010 I1.1 No.1通道第1位
10011 I1.2 No.1通道第2位
10012 I1.3 No.1通道第3位
10013 I1.4 No.1通道第4位
10014 I1.5 No.1通道第5位
10015 I1.6 No.1通道第6位
10016 I1.7 No.1通道第7位
10017 I2.0 No.2通道第0位
10018 I2.1 No.2通道第1位
依次类推,每8个地址对应一个字节
10256 I31.7 最大地址(最多支持32个字节输入)

计算公式:Modbus주소 = 10000 + 通道号 × 8 + 位号 + 1

example:要访问I3.5,Modbus주소 = 10000 + 3×8 + 5 + 1 = 10030

기능 코드:读离散输入用功能码02

Precautions

  • I区地址映射是固定的,不需要额外配置
  • 离散输入是只读的,主站不能写
  • 实际可用的I区数量取决于CPU型号和扩展模块

3.3 模拟量输入区(AIW区)→ 3xxxx输入寄存器

模拟量输入AIW区映射到Modbus的3xxxx输入寄存器区域,只读。

Modbus주소 S7-200 SMART주소 说明
30001 AIW0 No.1路模拟量输入
30002 AIW2 No.2路模拟量输入
30003 AIW4 No.3路模拟量输入
30004 AIW6 No.4路模拟量输入
30005 AIW8 No.5路模拟量输入
30006 AIW10 No.6路模拟量输入
30007 AIW12 No.7路模拟量输入
30008 AIW14 No.8路模拟量输入
30009 AIW16 No.9路模拟量输入
30010 AIW18 No.10路模拟量输入
依次类推,步长为2
30056 AIW110 No.56路模拟量输入(最大)

计算公式:Modbus주소 = 30000 + AIW编号 / 2 + 1

example:要读取AIW20,Modbus주소 = 30000 + 20/2 + 1 = 30011

기능 코드:读输入寄存器用功能码04

Precautions

  • AIW是字寻址,每个AIW占2个字节,所以地址步长为1对应AIW步长2
  • 输入寄存器是只读的,主站不能写
  • 模拟量输入值范围通常是0-32767(单极性)或-32768-32767(双极性)
  • 实际可用的AIW数量取决于模拟量模块的路数

3.4 V存储区 → 4xxxx保持寄存器

V存储区的映射是可配置的,通过Modbus从站指令MBUS_INIT的两个参数定义:

  • HoldStart:保持寄存器区的起始V주소(如&VB1000)
  • MaxHold:保持寄存器区的字数(单位:字,即VW的数量)

映射规则

Modbus주소 S7-200 SMART주소 说明
40001 VW[HoldStart] The first one保持寄存器
40002 VW[HoldStart + 2] the second保持寄存器
40003 VW[HoldStart + 4] The third one保持寄存器
40004 VW[HoldStart + 6] The fourth one保持寄存器
依次类推,步长为2字节
400XX VW[HoldStart + 2 × (XX – 1)] No.XX个保持寄存器

完整示例:如果HoldStart = &VB1000,MaxHold = 100

Modbus주소 V存储区地址 字节范围 说明
40001 VW1000 VB1000-VB1001 The first one保持寄存器
40002 VW1002 VB1002-VB1003 the second保持寄存器
40003 VW1004 VB1004-VB1005 The third one保持寄存器
40004 VW1006 VB1006-VB1007 The fourth one保持寄存器
40005 VW1008 VB1008-VB1009 The 5th one保持寄存器
40100 VW1198 VB1198-VB1199 The 100th one保持寄存器(最后一个)

기능 코드

  • read holding registers:기능 코드03
  • write single register:기능 코드06
  • write multiple registers:기능 코드16(0x10)

Precautions

  • V存储区映射是可配置的,通过MBUS_INIT指令的HoldStart和MaxHold参数设置
  • HoldStart必须指向VB주소,如&VB1000
  • MaxHold的单位是(VW),不是字节(VB)
  • 保持寄存器区域不能与PLC程序中已使用的V存储区冲突
  • 如果MaxHold设为100,则占用VB1000-VB1199共200个字节

四、PLC从站配置步骤

4.1 安装Modbus从站指令库

  1. 열기STEP 7-Micro/WIN SMART编程软件
  2. 在指令树中找到「库」文件夹
  3. 如果没有Modbus Slave库,需要先导入:右键「库」→「导入库」→ ChoiceModbus Slave库文件
  4. 库文件通常在西门子官方网站下载,名称为「Modbus Slave」

4.2 调用MBUS_INIT指令初始化从站

在第一个扫描周期(SM0.1)调用MBUS_INIT指令,参数说明如下:

参数名 取值范围 说明
Mode 0 / 1 0=禁用Modbusslave,恢复为普通自由口;1=EnableModbusslave
Baud 1200-115200 Baud rate,常用值:9600、19200、38400、115200
Parity 0 / 1 / 2 검증 method:0=无校验,1=odd parity,2=even parity
Port 0 / 1 通讯端口:0=板载RS485口,1=信号板SB CM01的RS485口
SlaveAddr 1-247 Modbusslave 주소,同一总线不能重复
HoldStart &VBxxx 保持寄存器区起始V地址指针,如&VB1000
MaxHold 0-10000 保持寄存器区字数(单位:字),如100表示100个VW
Done BOOL 初始化完成标志位
오답 BYTE 错误代码

4.3 主轮询MBUS_SLAVE指令

在主程序循环中,每个扫描周期都要调用MBUS_SLAVE指令:

  • 该指令负责处理Modbus主站发来的请求
  • 如果不调用,从站将无法响应主站
  • 파라미터:Done(完成标志)、오답(错误代码)

4.4 配置V存储区数据

在HoldStart指定的V地址区存放要读写的数据:

  • 主站写过来的数据会存到这个区域
  • PLC程序从这个区域读取数据进行处理
  • 注意不要与程序中其他已使用的V地址冲突

五、PLC主站配置与读取示例

5.1 调用MBUS_CTRL指令初始化主站

在第一个扫描周期(SM0.1)调用MBUS_CTRL指令初始化Modbusmaster:

参数名 取值范围 说明
Mode 0 / 1 0=禁用Modbusmaster,1=EnableModbusmaster
Baud 1200-115200 Baud rate,必须与从站一致
Parity 0 / 1 / 2 校验方式,必须与从站一致
Port 0 / 1 通讯端口:0=板载RS485,1=信号板
Timeout 1-32767 ms 等待从站响应的超时时间,建议1000ms
Done BOOL 初始化完成标志位
오답 BYTE 错误代码

5.2 调用MBUS_MSG指令发起读写请求

MBUS_MSG指令用于发起一次Modbus读写请求:

参数名 取值范围 说明
First BOOL 首次执行脉冲,检测到上升沿时发起请求
Slave 1-247 slave 주소
RW 0 / 1 0=读请求,1=写请求
Addr Modbus주소 要访问的Modbus주소,如40001表示读保持寄存器The first one
Count 1-120 读写的寄存器/线圈数量
데이터Ptr &VBxxx 数据缓冲区指针,如&VB2000
Done BOOL 本次请求完成标志位
오답 BYTE 错误代码

5.3 读取保持寄存器示例

假设要读取地址为1的从站设备的10个保持寄存器(40001-40010):

  1. First:用一个脉冲信号触发
  2. Slave:1
  3. RW:0(读)
  4. Addr:40001
  5. Count:10
  6. 데이터Ptr:&VB2000

读取成功后,VB2000开始的20个字节中存放了10个寄存器的数据。

六、常见问题与排障指南

6.1 通讯无响应,从站不回话

  • 检查接线:RS485的A+和B-是否接反,这是最常见的错误
  • 检查参数一致性:主从站的波特率、데이터 bit、stop bit、校验位必须完全一致
  • 检查从站地址:SlaveAddr是否正确,总线上不能有重复地址
  • 测量总线电压:A线(D+)应高于B线(D-)约200mV以上
  • 检查终端电阻:总线两端是否加了120Ω终端电阻(距离远时需要)
  • 检查Port파라미터:是否选对了通讯端口(0或1)

6.2 读不到数据或数据不对

  • 检查地址格式:Modbus地址有1-based和0-based两种写法,注意区分
  • 检查HoldStart:确认保持寄存器起始地址设置是否正确
  • 检查MaxHold:确认保持寄存器数量是否足够
  • 检查地址范围:要读的地址是否在MaxHold定义的范围内
  • 检查字节序:32位数据的高低字顺序是否与主站匹配

6.3 数据乱码或数值不对

  • 检查数据格式:确认是16位整数、32位整数还是浮点数
  • 检查字节序:大端序(Big-Endian)和小端序(Little-Endian)是否一致
  • 检查字序:32位数据的高低字顺序是否正确
  • 检查缩放比例:是否需要乘以倍率(如0.1℃单位的要除以10)
  • 检查负数处理:负数是用补码表示的,注意有符号数和无符号数的区别

6.4 偶发通讯失败

  • 检查屏蔽线:RS485线是否用了屏蔽双绞线,屏蔽层是否单端接地
  • 检查总线长度:9600bps下最大1200米,115200bps下最大约100米
  • 检查从站数量:一条RS485总线最多挂32个从站(不带中继器)
  • 检查电磁干扰:通讯线是否与动力线平行走线,是否有干扰源
  • 检查超时设置:Timeout参数是否设得太小,适当调大试试

6.5 오답错误代码说明

错误代码 说明 解决方法
0 无错误
1 奇偶校验错误 检查校验位设置
2 波特率不支持 检查波特率参数
3 超时错误 检查接线、从站电源、超时设置
4 从站地址错误 检查SlaveAddr파라미터
5 确认未收到 从站无响应,检查接线和参数
10 网关错误 检查网关配置

七、总结

S7-200 SMART的Modbus地址映射规则清晰明了:

  • 0xxxx线圈区域 → 对应Q区数字量输出,读写
  • 1xxxx离散输入区域 → 对应I区数字量输入,只读
  • 3xxxx输入寄存器区域 → 对应AIW模拟量输入,只读
  • 4xxxx保持寄存器区域 → 对应V存储区,可配置,读写

掌握这个映射关系,就能快速实现S7-200 SMART与第三方设备的Modbus RTUCommunication。实际应用中,建议先用Modbus Poll等调试软件测试通讯,确认地址映射正确后再编写PLC程序。

八、相关链接

  • Modbus RTU通讯基础教程
  • ModbusDetailed explanation of 기능 코드s
  • 西门子S7-200 SMART Modbus主站配置实例
  • RS485总线接线规范
技术术语(共 9 个)—— Click to Expand
Modbus RTU基于串行链路的ModbusProtocol,使用二进制编码和CRC check
RS485工业常用的差分串行通信标准,支持多点通信
기능 코드Modbus功能码指定读/写操作类型,如01读线圈、03读保持寄存器
registerModbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
PLC可编程逻辑控制器,工业自动化控制的核心设备
Baud rate串行通信每秒传输符号数,Modbus RTU常用9600/19200
网关协议转换设备,如 Modbus RTU ↔ Modbus TCP
线圈Modbus位可读写数据,地址从00001开始
保持寄存器Modbus 16位可读写数据,地址从40001开始
来源/工具信息 —— Click to Expand
来源 Modbus 중국 네트워크(modbus.cn) —— China leadingModbuscommunication protocol technical community Category 기타 기술 자료 字数 5490 字 · 阅读约 14 分钟 更新 2026-09-20 永久链接 https://www.modbus.cn/53051.html
추천 도구: Modbus 디버깅 도우미 위챗 미니프로그램
Modbus 중국 네트워크官方推出的Modbus debugging tool,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 No installation required, WeChat 검색「Modbus 디버깅 어시스턴트」ready to use。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC 검증 and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email 주소 will not be published. Required fields are marked *.