三菱 PLC 与西门子 PLC 模拟量编程对比(核心差异 + 实操案例)
三菱(FX 系列)与西门子(S7-200/S7-1200/1500)PLC 的模拟量编程核心目标一致(模拟量采集、换算、控制),但在硬件寻址、数据处理逻辑、指令体系、标定方式上差异显著 —— 三菱以 “寄存器直接操作 + 简易指令” 为主,西门子以 “数据块 / 变量映射 + 标准化指令” 为核心,以下从核心维度对比,并结合典型案例落地。
一、核心维度对比表(FX3U vs S7-200/S7-1200)
| 对比维度 | 三菱 PLC(FX3U/FX5U) | 西门子 PLC(S7-200/S7-1200) |
|---|---|---|
| 硬件寻址方式 | 模拟量模块与 PLC 集成 / 扩展,直接映射到固定寄存器:- 输入:FX3U-4AD→D8030~D8033(通道 0~3)- 输出:FX3U-4DA→D8040~D8043无 “变量” 概念,直接操作 D 寄存器 | 模块化设计,按 “模块地址 + 通道” 寻址,支持变量命名:- S7-200:AIW0/AQW0(模拟量输入 / 输出字)- S7-1200/1500:PIW256/PQW256(过程输入 / 输出字),需先定义变量(如 Temp_Raw: Int) |
| 数据类型基础 | 仅支持 16 位整数(默认),浮点运算需专用指令(FLT/EINT) | 原生支持 Int、Real(浮点),S7-1200/1500 可直接用 Real 运算,无需类型转换 |
| 模拟量换算逻辑 | 手动计算:先读_raw 值→按量程换算为工程值,无标准化指令 | 标准化指令(NORM_X/SCALE_X):一键完成 “_raw 值↔工程值” 转换,无需手动算系数 |
| 指令体系 | 简易指令为主,无专用模拟量指令:- 读值:MOV D8030 D100- 换算:MUL/DIV/FLT 组合- 输出:MOV D200 D8040 | 专用模拟量指令:- S7-200:SCALE/UNSCALE(库指令)- S7-1200/1500:NORM_X(归一化)/SCALE_X(标幺化) |
| 标定方式 | 纯程序手动标定:在程序中写死量程上下限(如 4-20mA 对应 0-100℃) | 支持 “程序标定 + 硬件组态标定”:S7-1200 可在 TIA Portal 中直接设置模块量程(4-20mA/0-10V),程序仅调用 |
| 中断 / 滤波支持 | 需手动编写滤波程序(如平均值滤波),无硬件滤波配置 | S7-1200/1500 可在组态中设置硬件滤波(如 100ms 平均),也可调用系统函数滤波 |
| 程序可读性 | 寄存器地址堆砌,需注释说明(如 D100 = 温度_raw 值),可读性差 | 变量命名化(如 Temp_Process: Real),程序逻辑直观,易维护 |
二、实操案例对比(4-20mA 采集温度,0-100℃换算)
场景:采集 4-20mA 模拟量(温度传感器),换算为 0-100℃工程值,输出 4-20mA 控制调节阀
1. 三菱 FX3U 编程(FX3U-4AD 模拟量输入 + FX3U-4DA 输出)
步骤 1:硬件基础(4-20mA 对应_raw 值范围)
步骤 2:核心程序(梯形图)
ladder
// 1. 读取模拟量输入(4AD通道0,温度传感器) LD M8000 MOV D8030 D100 // D100=AD_raw值(6400~32000) // 2. 手动换算为工程值(0~100℃) // 公式:工程值 = (raw值 - 6400) × 100 ÷ (32000 - 6400) LD M8000 SUB D100 K6400 D101 // 分子:raw值-最小值 MOV K100 D102 MUL D101 D102 D103 // ×量程上限 MOV K25600 D104 // 分母:32000-6400=25600 DIV D103 D104 D105 // D105=温度工程值(0~100℃,整数) // 3. 浮点优化(可选,提高精度) FLT D101 D200 FLT D104 D201 DIV D200 D201 D202 MUL D202 K100 D203 // D203=浮点温度值(如25.6℃) // 4. 模拟量输出(4DA通道0,控制调节阀) // 公式:输出raw值 = 工程值×25600÷100 + 6400 LD M8000 MUL D105 K25600 D300 DIV D300 K100 D301 ADD D301 K6400 D302 // D302=输出_raw值(6400~32000) MOV D302 D8040 // 写入4DA通道0,输出4-20mA
关键注意:
2. 西门子 S7-200 编程(EM235 模拟量模块)
步骤 1:硬件基础(变量定义)
| 变量地址 | 变量名 | 类型 | 说明 |
|---|---|---|---|
| AIW0 | Temp_Raw | Int | 温度_raw 值(6400~32000) |
| VW100 | Temp_Process | Int | 温度工程值(0~100℃) |
| AQW0 | Valve_Raw | Int | 调节阀输出_raw 值 |
步骤 2:核心程序(用 SCALE 库指令)
ladder
// 1. 读取模拟量输入 LD SM0.0 MOVW AIW0, VW0 // VW0=Temp_Raw // 2. 换算为工程值(调用SCALE指令) CALL SCALE, IN:=VW0, OUT:=VW100, HI_LIM:=100, LO_LIM:=0, SCALED:=M0.0 // IN:raw值;OUT:工程值;HI_LIM/LO_LIM:工程量程;SCALED:完成标志 // 3. 模拟量输出(调用UNSCALE指令,工程值→raw值) CALL UNSCALE, IN:=VW100, OUT:=VW200, HI_LIM:=32000, LO_LIM:=6400, SCALED:=M0.1 MOVW VW200, AQW0 // AQW0=Valve_Raw,输出4-20mA
3. 西门子 S7-1200 编程(TIA Portal,AI 8x13bit 模块)
步骤 1:硬件组态(可视化设置)
步骤 2:核心程序(标准化指令)
stl
// 1. 归一化(Raw值→0~1之间的标幺值) "Temp_Norm" := NORM_X( X := "Temp_Raw", // 输入Raw值 XMIN := 6400.0, // 4mA对应Raw值 XMAX := 32000.0, // 20mA对应Raw值 YMIN := 0.0, // 归一化最小值 YMAX := 1.0 // 归一化最大值 ); // 2. 标幺化(0~1→工程值0~100℃) "Temp_Process" := SCALE_X( X := "Temp_Norm", // 归一化值 XMIN := 0.0, // 归一化最小值 XMAX := 1.0, // 归一化最大值 YMIN := 0.0, // 工程值最小值 YMAX := 100.0 // 工程值最大值 ); // 3. 模拟量输出(工程值→Raw值) "Valve_Norm" := NORM_X( X := "Valve_Process", XMIN := 0.0, XMAX := 100.0, YMIN := 0.0, YMAX := 1.0 ); "Valve_Raw" := SCALE_X( X := "Valve_Norm", XMIN := 0.0, XMAX := 1.0, YMIN := 6400.0, YMAX := 32000.0 );
三、核心差异总结
1. 编程复杂度:三菱手动化 vs 西门子标准化
2. 数据处理:三菱整数优先 vs 西门子浮点原生
3. 硬件适配:三菱固定寄存器 vs 西门子组态化
4. 滤波与抗干扰:三菱手动 vs 西门子软硬结合
四、选型与移植建议
| 场景 | 推荐 PLC | 核心原因 |
|---|---|---|
| 小型设备、简单模拟量(≤4 路) | 三菱 FX3U | 成本低,指令简单,无需复杂组态 |
| 中大型设备、多模拟量(≥8 路) | 西门子 S7-1200 | 标准化指令,组态便捷,维护性强 |
| 高精度控制(如温度 ±0.1℃) | 西门子 S7-1500 | 浮点运算精准,硬件滤波能力强 |
三菱→西门子移植关键:
西门子→三菱移植关键:
综上,三菱模拟量编程更偏向 “底层寄存器操作”,适合简单场景;西门子更偏向 “标准化、模块化”,适合复杂场景和高精度控制,核心差异本质是 “面向寄存器” 与 “面向变量 / 对象” 的编程思想区别。

