SCL 比较运算符 — =、<>、>、>=、<、<=
SCL 用 =、<>、>、>=、<、<= 比较数值、字符串和时间;返回 BOOL,可直接放进 IF/WHILE 条件。
比较
S7-1200/1500
TIA V19
别名:比较运算符 / 等于 / 不等于 / 大于 / 小于 / ==
在 TIA 里试一下
通过 TiaLink 把本页示例(FB_Compare_Demo)作为“外部源”导入你当前打开的 TIA Portal 项目:预检、生成块、编译,并清理外部源。导入后不会自动保存;FB 导入后需要在 OB 里调用 。
导入示例块
TiaLink 设置
目标 PLC
自动(第一个 PLC)
本页目录
一句话
答案: SCL 用 =、<>、>、>=、<、<= 做比较,结果是 BOOL;可以直接放进 IF/WHILE 条件。
SCL 用 =、<>、>、>=、<、<= 做比较,结果是 BOOL,可以直接放进 IF/WHILE 条件。相等是一个等号 =;赋值才是 :=。
参数
参数 方向 类型 存储区 说明
A输入 整数 / 浮点 / 字符串 / 时间— 左操作数。
B输入 与 A 兼容的类型— 右操作数;类型要能比较。
参数表以 TIA Portal V19 帮助为事实核对;S7-1200/1500 有差异时在类型列并列显示。存储区是 TIA 允许的范围,实际可用范围还受块接口和优化属性影响。
最小示例
下面是一个完整块,页面展示的源码就是 TiaLink 导入的同一份源码。页面的场景已在 PLC 云仿真里跑过,输出见“云仿真验证”。
FB_Compare_Demo FB
最小示例 · 28 行 · 源文件 blocks/FB_Compare_Demo.scl
查看 FB_Compare_Demo 的块接口 区块 名称 类型 说明 输入 AInt输入 BInt输出 EqBool输出 NeBool输出 GtBool输出 GeBool输出 LtBool输出 LeBool
blocks/FB_Compare_Demo.scl 复制
1 FUNCTION_BLOCK "FB_Compare_Demo"
2 { S7_Optimized_Access := 'TRUE' }
3 VERSION : 0.1
4 VAR_INPUT
5 A : Int := 10 ;
6 B : Int := 20 ;
7 END_VAR
8
9 VAR_OUTPUT
10 Eq : Bool ;
11 Ne : Bool ;
12 Gt : Bool ;
13 Ge : Bool ;
14 Lt : Bool ;
15 Le : Bool ;
16 END_VAR
17
18 BEGIN
19 REGION 比较运算
20 #Eq := #A = #B ;
21 #Ne := #A <> #B ;
22 #Gt := #A > #B ;
23 #Ge := #A >= #B ;
24 #Lt := #A < #B ;
25 #Le := #A <= #B ;
26 END_REGION
27 END_FUNCTION_BLOCK
28
块接口表由源码自动生成;# 前缀表示块内局部变量,实际工程里也可以是全局标签或 DB 变量。
SCL 写法
SCL 复制
1 #Eq := #A = #B ;
2 #Ne := #A <> #B ;
3 #Gt := #A > #B ;
4 #Ge := #A >= #B ;
5 #Lt := #A < #B ;
6 #Le := #A <= #B ;
条件里直接用:
SCL 复制
1 IF #Temperature >= #Limit THEN
2 #Alarm := TRUE ;
3 END_IF ;
怎么工作
运算符
含义
=
等于
<>
不等于
>
大于
>=
大于等于
<
小于
<=
小于等于
结果是 BOOL;可以赋给变量,也可以直接做条件。
两边类型要兼容;Int 和 Real 混用可能隐式转换,最好显式统一。
字符串比较内容;大小比较依赖字符编码,中文场景要谨慎。
浮点数不要直接用 =;用容差比较。
时间/日期类型可以比较先后,但要用同一种时间格式。
常用场景
1. 限值报警
IF #Value > #HighLimit THEN 触发高报;配合回差/延时避免抖动。
2. 状态判断
IF #State = 3 THEN 判断步号;多值分支用 CASE 更清晰。
3. 范围判断
IF #Value >= #Min AND #Value <= #Max THEN 判断区间;也可以用 LIMIT/IN_RANGE。
常见坑
用 == 当等于 :SCL 标准写法是 =;== 不是通用比较运算符。
把 = 当赋值 :赋值是 :=;= 只比较,不改变变量。
浮点直接相等 :0.1+0.2 = 0.3 可能不成立;用 ABS(A-B) <= 1E-6。
类型不匹配 :Int/Real/String 混比可能编译报错或隐式转换;先统一类型。
字符串大小比较 :编码/大小写敏感;需要忽略大小写先统一大小写。
时间格式混用 :TOD 和 DTL 不能直接比;用同一种格式。
和 LAD 的区别
LAD 用 Eq/Ne/Gt/Ge/Lt/Le 比较盒;SCL 用运算符,直接写在表达式里。语义一样,SCL 更紧凑。LAD 侧可参考 比较指令 。
云仿真验证
PLC 云仿真:PASS (2 次扫描)。场景:10 和 20 的六种比较;20 和 20 的六种比较。结果来自 PLC 云仿真 的 scl_run_scenario。
查看云仿真回归输出
云仿真回归输出
PASS 10 和 20 的六种比较 (1 step(s), 1 scan(s))
PASS 20 和 20 的六种比较 (1 step(s), 1 scan(s))
RESULT: ALL PASS (2 scan(s))
云仿真验证语法、结构和逐扫描行为,不等同于 TIA 编译;TIA 状态见下方“验证状态”。
验证状态
项目 结果 日期 证据 构建期语法/结构校验 PASS 2026-11-02 parse + validate PLC 云仿真 PASS(2 scans) 2026-11-02 scl_run_scenario / scl_validate TIA 导入编译 PASS(0 error / 0 warning) 2026-11-02 TiaLink + TIA Portal
“待实测”表示还没有在 TIA Portal 里导入编译,不代表代码有问题;上机前请先在测试项目编译。云仿真在 tia.hubwiz.com/sim 执行,不替代 TIA 编译。
来源与说明
参数、行为和数据类型的核对来源:TIA Portal V19 帮助的 Creating_SCL_programs/Basics_of_SCL/Relational_expressions.md。中文讲解、SCL 示例、时序图和验证场景由 Learn-SCL 编写。
比较运算符、结果类型和字符串比较规则以 TIA Portal V19 帮助为事实核对;中文讲解、SCL 示例和验证场景由 Learn-SCL 编写。
Siemens 文档与截图的版权归 Siemens;本站只引用事实参数,不复制官方描述段落和图片。官方参考:Siemens TIA Portal 。
常见问题
SCL 的等于是一个等号还是两个? 一个等号 `=` 表示相等;`==` 不是标准 SCL 比较写法。赋值用 `:=`。
字符串能比较吗? 可以,`=`/`<>` 比较字符串内容;大小比较按字符编码,中文/编码相关场景要谨慎。
浮点数能直接用 = 比较吗? 不建议。浮点有精度误差,`=` 可能永远不成立;用 `ABS(A-B) <= 容差` 或范围比较。
上一条 SCL F_TRIG — 下降沿检测
下一条 SCL ABS — 绝对值