西门子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 软件有两种驱动:
- Modbus RTU 驱动:遵循标准 Modbus4 类寄存器规则
- 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 原生地址:
- 0xxxx 线圈(Coil):读写位 → 映射 PLC Q 区(输出点位)
- 1xxxx 输入离散量(DI):只读位 → 映射 PLC I 区(输入点位)
- 3xxxx 输入寄存器:只读字 → 映射 AIW 模拟量输入
- 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
五、实操建议(伺服项目)
- 通信交互的设定值(目标转速)、反馈值(实际转速)、控制命令位,全部放到 V 区;
- PLC 程序内部:V 区和 M/Q/I 之间做逻辑转换,不要触摸屏直接写 Q 点,防止通讯异常误触发伺服;
- MBUS 从站库占用一段 V 区,HoldStart 后面的 V 区不要被其他变量覆盖,否则通讯乱码;
- 如果你只是简单项目,不想折腾 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 (最低字节)
- 两种用途:
- 32 位无符号整数 (DWord)
- 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。
一句话总结
- Vxxx.0:位,只有 0/1,开关
- VBxxx:字节,8 个 bit,0~255
- VWxxx:字,连续 2 字节,16 位整数
- VDxxx:双字,连续 4 字节,32 位整数 / 浮点数
本质:都是同一块 V 内存,只是访问读取的数据长度不同,地址不能重叠!
文档信息
版权声明:可自由转载(请注明转载出处)-非商用-非衍生
发表时间:2020年5月9日 14:38