跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL 比较运算符 — =、<>、>、>=、<、<=

SCL 比较运算符 — =、<>、>、>=、<、<=

SCL 用 =、<>、>、>=、<、<= 比较数值、字符串和时间;返回 BOOL,可直接放进 IF/WHILE 条件。

比较 S7-1200/1500 TIA V19 别名:比较运算符 / 等于 / 不等于 / 大于 / 小于 / ==

在 TIA 里试一下

通过 TiaLink 把本页示例(FB_Compare_Demo)作为“外部源”导入你当前打开的 TIA Portal 项目:预检、生成块、编译,并清理外部源。导入后不会自动保存;FB 导入后需要在 OB 里调用。

TiaLink 设置

默认 http://localhost:8080。也可以在本页地址后加 ?tialink= 临时指定。

TiaLink 启动时若设置了 --api-token,这里要填相同的值;只保存在本机浏览器 localStorage,不会上传。

一句话

答案: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
1FUNCTION_BLOCK "FB_Compare_Demo"
2{ S7_Optimized_Access := 'TRUE' }
3VERSION : 0.1
4   VAR_INPUT
5      A : Int := 10;            // 左操作数
6      B : Int := 20;            // 右操作数
7   END_VAR
8 
9   VAR_OUTPUT
10      Eq : Bool;                // A = B
11      Ne : Bool;                // A <> B
12      Gt : Bool;                // A > B
13      Ge : Bool;                // A >= B
14      Lt : Bool;                // A < B
15      Le : Bool;                // A <= B
16   END_VAR
17 
18BEGIN
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
27END_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
1IF #Temperature >= #Limit THEN
2   #Alarm := TRUE;
3END_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 状态见下方“验证状态”。

验证状态

项目结果日期证据
构建期语法/结构校验PASS2026-11-02parse + validate
PLC 云仿真PASS(2 scans)2026-11-02scl_run_scenario / scl_validate
TIA 导入编译PASS(0 error / 0 warning)2026-11-02TiaLink + 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 指令手册