以下是西门子S7-200系列PLC(包括CPU221/222/224/226等)的Modbus地址与软元件对应表,基于Modbus RTU协议(S7-200主要支持Modbus RTU从站模式):

Modbus地址类型 Modbus地址范围 对应PLC软元件 功能码 读写属性 说明
线圈(Coils) 00001-00128 Q0.0-Q15.7 01(读)、05(写单线圈)、15(写多线圈) 读写 1. 共128位,对应PLC的数字量输出点
2. 地址00001对应Q0.0,00002对应Q0.1,以此类推
3. 超出实际PLC输出点数的地址无效(如CPU221仅支持Q0.0-Q0.3)
00129-00256 M0.0-M15.7 同上 读写 1. 共128位,对应PLC的位存储器(中间标志位)
2. 00129对应M0.0,00130对应M0.1,以此类推
离散输入(Discrete Inputs) 10001-10128 I0.0-I15.7 02(读) 只读 1. 共128位,对应PLC的数字量输入点
2. 10001对应I0.0,10002对应I0.1,以此类推
3. 实际可用地址受PLC输入点数限制(如CPU222支持I0.0-I1.5)
输入寄存器(Input Registers) 30001-30032 AIW0-AIW62 04(读) 只读 1. 共32个字(16位),对应PLC的模拟量输入寄存器
2. 30001对应AIW0,30002对应AIW2(间隔2字节,因AIW为字地址)
3. 实际数量取决于PLC型号(如CPU224XP支持4路AI,即30001-30004)
保持寄存器(Holding Registers) 40001-4xxxx(可变) VW0、VW2...(V区字地址) 03(读)、06(写单寄存器)、16(写多寄存器) 读写 1. 对应PLC的V区(变量存储区),起始地址由MBUS_INIT指令的HoldStart参数定义(默认VW0)
2. 40001对应HoldStart指定的第一个字(如VW0),40002对应VW2,以此类推
3. 可映射范围由HoldCount参数设置(最大支持1000个字)
扩展地址(需配置) T0-T255(定时器当前值) 同上 读写 1. 需将定时器当前值(16位)存入V区后映射(如T0当前值存VW100,则40051对应VW100)
2. 定时器当前值为字类型,单位为10ms(TON/R)或1ms(TONR)
扩展地址(需配置) C0-C255(计数器当前值) 同上 读写 1. 需将计数器当前值(16位)存入V区后映射(如C0当前值存VW200,则40101对应VW200)
2. 计数器当前值为无符号整数

关键说明:

  1. 地址映射规则

    • Modbus地址为1-based(起始地址1),PLC内部地址为0-based(起始地址0),映射时需注意偏移(如Modbus 00001 = PLC Q0.0)。
    • 字地址(如AIW、VW)按“字”递增(间隔2字节),位地址(如I、Q、M)按“位”递增。
  2. 配置依赖

    • 保持寄存器(V区)的映射范围需通过MBUS_INIT指令配置,参数HoldStart(起始字节地址,如&VB0)和HoldCount(寄存器数量)决定可用地址范围。
    • 示例:HoldStart = &VB0HoldCount = 50时,可映射40001-40050(对应VW0-VW98)。
  3. 数据类型处理

    • 浮点数(REAL)需占用2个连续保持寄存器(如VD0 = VW0 + VW2,对应40001和40002),主站需按西门子格式解析(高位字节在前)。
    • 32位整数(DINT)同理,占用2个连续寄存器。
  4. 型号差异

    • 不同CPU的I/O点数不同(如CPU221仅有6输入/4输出,CPU226有24输入/16输出),超出部分地址无效。
    • 模拟量输入(AI)数量:CPU224XP支持4路,CPU226需扩展EM231模块,最大支持32路。
  5. 调试建议

    • 使用STEP 7-Micro/WIN的“状态表”监控V区数据,验证Modbus通信是否正常。
    • 若出现地址冲突,检查MBUS_INITHoldStart是否与程序中其他V区使用重叠。

通过上述对应关系,可实现S7-200与Modbus主站(如HMI、SCADA、其他PLC)的可靠数据交互。实际应用中需根据具体CPU型号和配置调整地址范围。