西门子smartPLC

西门子smartPLC 有两种输出形式 继电器输出R 和晶体管输出T 晶体管输出的PLC 供电用DC 20.4-28.8V之间,通常使用24V供电 继电器输出 供电用AC 85-240V()47-63HZ,通常用交流220V

一、一句话回答:为什么威纶通 Modbus RTU 和 SMART 通信,优先读写 V 存储区?

S7-200 SMART 调用官方 Modbus 从站库 MBUS_CTRL(旧版 MBUS_INIT)时,Modbus 保持寄存器(4xxxx)是映射到 V 区的一块连续内存,由你自己指定 V 区起始地址,用来存放触摸屏下发的读写参数、设定转速、反馈数值。

I/Q/M/T/C/SM 这些区虽然 Modbus 也能访问,但不适合用来存放触摸屏下发的设定数据,它们各自有固定用途;V 区是大容量、自由读写的通用数据区,专门用来做 HMI 和 PLC 之间的数据交换缓冲区西门子工业...。

注意:威纶通 EBPro 软件有两种驱动:

  1. Modbus RTU 驱动:遵循标准 Modbus4 类寄存器规则
  2. S7-200 SMART 专用驱动(PPI):可以直接填写 V、M、I、Q 地址,不需要 Modbus 地址换算,和 Modbus 不是一回事

二、S7-200 SMART 全部存储区详解

表格

存储区 名称 作用 访问方式 Modbus RTU 映射 是否适合 HMI 交互变量
I 输入映像区 读取外部传感器、按钮的硬件输入状态,PLC 每个扫描周期自动刷新 I0.0(位)、IB0(字节) 1xxxx(输入离散量,只读) ❌ 只看外部信号,不能触摸屏写入
Q 输出映像区 控制 PLC 硬件输出点(继电器 / 晶体管),扫描周期末尾刷新到端子 Q0.0、QB0 0xxxx(线圈,可读写) ❌ 尽量不直接 HMI 写 Q,容易误动作,PLC 程序逻辑管控更安全
V 变量存储区 大容量通用数据区,存放中间计算结果、设定值、反馈值;可以位 / 字节 / 字 / 双字读写,空间很大 V104.0(位)、VB100(字节)、VW100(字)、VD100(双字) 4xxxx 保持寄存器,由 MBUS 库指定 V 区起始 ✅【首选】HMI 和 PLC 交换数据
M 位存储区(辅助继电器) 内部逻辑中间位,类似内部继电器,空间很小(最多 M31.7,只有 32 字节) M0.0、MB0 0xxxx 线圈 ⚠️适合少量开关位,不适合存放转速这类字 / 双字数据,容量太小
SM 特殊存储器 PLC 系统状态位,SM0.0 常 ON、SM0.1 上电脉冲、PTO 脉冲状态等,系统专用 SM0.0 可以映射,但不建议 ❌系统占用,禁止随意改写
T 定时器 定时功能,每个 T 有定时器位 + 当前计时值 T37(位 + 当前字) 可以读,但不推荐 ❌属于定时硬件资源,不做 HMI 交互
C 计数器 计数功能,计数器位 + 计数值 C0 可以读,但不推荐 ❌计数资源
AI 模拟量输入 模拟量模块采集电压 / 电流,只读 AIW0(字) 3xxxx 输入寄存器,只读 ⚠️只读,可以读传感器,不能写
AQ 模拟量输出 模拟量模块输出,写模拟量 AQW0 Modbus RTU 从站库没有原生映射 AQ ❌需要先读到 V 区,再 PLC 程序赋值给 AQW
L 局部变量区 子程序局部变量,子程序结束失效 LB0 不映射 Modbus ❌子程序临时变量,外部读不到

简单理解:

  • I:外面给 PLC 的信号(只读)
  • Q:PLC 输出到硬件端子
  • M:少量内部开关(位)
  • V:大容量 “数据交换白板”,字、双字、浮点数都可以放,正好用来放触摸屏给的转速、启停命令西门子工业...

三、Modbus RTU 4 类寄存器 与 SMART PLC 地址对应(PLC 做 Modbus 从站)

Modbus 协议本身只有 4 大类寄存器,这是协议标准,不是 PLC 原生地址:

  1. 0xxxx 线圈(Coil):读写位 → 映射 PLC Q 区(输出点位)
  2. 1xxxx 输入离散量(DI):只读位 → 映射 PLC I 区(输入点位)
  3. 3xxxx 输入寄存器:只读字 → 映射 AIW 模拟量输入
  4. 4xxxx 保持寄存器(Holding Register):读写字 → 映射 V 存储区(由 MBUS 库参数 HoldStart 指定 V 起始地址)西门子工业...

重点:MBUS_CTRL 从站指令里的 HoldStart 参数,就是指定哪一段 V 区映射成 Modbus 4xxxx 保持寄存器 举例:HoldStart := &VB100,MaxHold=10

  • Modbus 40001 ↔ VW100(VB100+VB101)
  • Modbus 40002 ↔ VW102(VB102+VB103)
  • Modbus 40003 ↔ VW104(VB104+VB105) 以此类推,1 个 Modbus 保持寄存器 = 1 个字 = 2 个 V 字节西门子工业...

你的伺服项目:

  • VW100(目标转速)→ Modbus 40001
  • VB104(控制字节,V104.0 启动、V104.1 方向)在 VW104 → Modbus 40003
  • VW106(实际转速)→ Modbus40004

⚠️坑点:Modbus 地址有从零开始 / 从 1 开始两种偏移,威纶通 Modbus 驱动里可以设置,很多人通信失败就是这里搞错。

四、威纶通触摸屏两种模式区分(非常容易混淆)

模式 1:威纶通驱动选【Modbus RTU】(我们伺服案例用这个)

  • PLC 是 Modbus 从站,触摸屏 Modbus 主站
  • 地址只能填写标准 Modbus 地址:0xxxx、1xxxx、3xxxx、4xxxx
  • 4xxxx 保持寄存器对应 PLC V 区,由 MBUS 从站库指定 V 起始地址
  • 你不能直接写 VW100,要换算成 4xxxx 地址

模式 2:威纶通驱动选【S7-200 SMART PPI】(串口 PPI 协议,不是 Modbus)

  • 不需要调用 MBUS 库
  • 触摸屏可以直接写 PLC 原生地址:V100、VW100、M0.0、I0.0、Q0.0,不用换算 Modbus 寄存器
  • 协议是西门子 PPI,不是 Modbus RTU,RS485 口不能同时跑 PPI 和 Modbus

五、实操建议(伺服项目)

  1. 通信交互的设定值(目标转速)、反馈值(实际转速)、控制命令位,全部放到 V 区;
  2. PLC 程序内部:V 区和 M/Q/I 之间做逻辑转换,不要触摸屏直接写 Q 点,防止通讯异常误触发伺服;
  3. MBUS 从站库占用一段 V 区,HoldStart 后面的 V 区不要被其他变量覆盖,否则通讯乱码;
  4. 如果你只是简单项目,不想折腾 Modbus 地址换算,可以直接用威纶通的 S7-200 SMART PPI 驱动。

六、常见疑问

Q:M 区也能放位,为什么不用 M 区放启停?

M 区只有 M0.0~M31.7,总共 32 字节,容量很小。少量开关信号可以用 M,但转速、温度这类字 / 双字数据 M 区放不下;V 区空间很大,位、字、浮点数全能放,统一放 V 区方便管理。

Q:能不能 Modbus 直接读写 Q0.0 控制伺服?

技术上可以,但工程规范不推荐。如果通信干扰、断线,触摸屏可能误写 Q 点,伺服意外动作,不安全。标准做法:触摸屏写 V 区命令位,PLC 程序读取 V 区,经过急停、限位联锁后再输出到 Q 点。

S7‑200 SMART V 存储区:V104.0、VB100、VW100、VD100 详细讲解

V 区 = Variable Memory,变量存储区,一块连续内存,可以按【位、字节、字、双字】四种粒度访问,都是共用同一片内存,只是读取的大小不一样。 内存最小单位:位 (bit),8 个位 = 1 个字节 (Byte); 2 个字节 = 1 个字 (Word); 4 个字节 = 1 个双字 (DWord / Real 浮点数)

内存排布示意图(重点!)

表格

地址 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
VB100 V100.7 V100.6 V100.5 V100.4 V100.3 V100.2 V100.1 V100.0
VB101 V101.7 V101.6 V101.5 V101.4 V101.3 V101.2 V101.1 V101.0
VB102 V102.7 V102.6 V102.5 V102.4 V102.3 V102.2 V102.1 V102.0
VB103 V103.7 V103.6 V103.5 V103.4 V103.3 V103.2 V103.1 V103.0
VB104 V104.7 V104.6 V104.5 V104.4 V104.3 V104.2 V104.1 V104.0

1. V104.0 —— 位(bit)

  • 格式:V字节号.位号
  • V104.0:VB104 这个字节里面的第 0 号位(最低位 Bit0)
  • 只有两种状态:TRUE(1) / FALSE(0)
  • 用途:开关信号,启停、方向、故障标志

你的项目:V104.0 触摸屏启动自动往复按钮

VB104 里面一共 8 个位:V104.0 ~ V104.7

2. VB100 —— 字节 Byte(8bit,1 字节)

  • VB = Variable Byte
  • VB100:从 V100.0 ~ V100.7,连续 8 个位,1 字节,数值范围:0~255

存放小的无符号整数、8 路开关组合。

3. VW100 —— 字 Word(16bit,2 个连续字节)

  • VW = Variable Word,占用 VB100 + VB101,一共 2 个字节
  • ✅西门子小端规则:高字节在低地址,低字节在高地址 VW100 = 【VB100 高字节】 + 【VB101 低字节】
  • 数值范围:0~65535(无符号字)

你的项目:VW100 存放目标转速(16 位整数)

⚠️重要:如果你修改 VB100,VW100 的值会跟着变!因为共用内存。

4. VD100 —— 双字 DWord(32bit,4 个连续字节)

  • VD = Variable Double Word,占用 VB100 + VB101 + VB102 + VB103,4 字节
  • VD100 = VB100 (最高字节)+VB101+VB102+VB103 (最低字节)
  • 两种用途:
    1. 32 位无符号整数 (DWord)
    2. Real 32 位浮点数(距离、温度,带小数点,比如 125.6mm)

你的项目里滑台位置 VD110 就是 Real 浮点数

🚨 最容易踩坑:地址重叠!(重中之重)

举例子:

  • VW100 使用 VB100、VB101
  • VW102 使用 VB102、VB103
  • VD100 使用 VB100~VB103 👉 千万不要重叠分配变量!

错误示例(冲突):

  • VW100(VB100,VB101)存放转速
  • VD101(VB101,VB102,VB103,VB104)存放位置

两个变量共用 VB101,改写任意一个,另一个数值乱掉!

✅变量地址规划原则:

  • 字节:占用 1 个 VB
  • 字:占用连续 2 个 VB,起始地址偶数(VW0,VW2,VW100)
  • 双字:占用连续 4 个 VB,起始地址4 的倍数(VD0,VD4,VD100)

拿我们项目里的 V 区规划举例(无重叠)

VB100~VB101 → VW100  目标转速(Word)
VB102~VB103 → VW102  备用字
VB104       → VB104,V104.0启停位、V104.1预留方向位
VB106~VB107 → VW106  伺服实际转速反馈
VB108~VB111 → VD110  滑台实际位置 Real浮点数
VB112~VB115 → VD114  左边界Pos_Min
VB116~VB119 → VD118  右边界Pos_Max

检查:每一段地址不重叠,安全。

📌 结合 Modbus 从站映射关系(之前 MBUS_CTRL HoldStart:=&VB100)

HoldStart := &VB100,Modbus 保持寄存器 4xxxx,1 个保持寄存器 = 1 个字 = 2 字节 VB

  • 40001 → VW100(VB100,VB101)
  • 40002 → VW102(VB102,VB103)
  • 40003 → VW104(VB104,VB105)

VW104 包含 VB104,里面有 V104.0、V104.1...V104.7。 所以威纶通访问 40003.0,就是访问 V104.0。

一句话总结

  1. Vxxx.0:位,只有 0/1,开关
  2. VBxxx:字节,8 个 bit,0~255
  3. VWxxx:字,连续 2 字节,16 位整数
  4. VDxxx:双字,连续 4 字节,32 位整数 / 浮点数

本质:都是同一块 V 内存,只是访问读取的数据长度不同,地址不能重叠!

文档信息

版权声明:可自由转载(请注明转载出处)-非商用-非衍生

发表时间:2020年5月9日 14:38