TIA Portal 指令

比较操作
决策逻辑与范围

数值比较是工业决策逻辑的引擎。掌握 TIA Portal 中的标准比较器、范围测试和有效性检查。

什么是 TIA Portal 中的比较操作?

比较操作允许您比较两个相同数据类型(整数、实数、时间等)的数值,或检查一个数值是否位于定义的范围内。它们是创建报警阈值、转换条件和调节回路的基础。

TIA Portal 提供标准比较器(==、<>、>= 等)、范围指令(IN_Range、OUT_Range)、浮点数有效性测试,以及用于 Variant 数据类型和 DB 指针的高级指令。

标准比较器

评估两个操作数之间的相等和不等关系

CMP == — 等于 (Equal)

==

功能

比较两个操作数(IN1 和 IN2)。如果 IN1 等于 IN2,则指令返回 TRUE。它支持几乎所有简单数据类型。

适用场景

检查计数器是否达到目标、HMI 设定值是否与当前值匹配,或特定的机器状态是否激活。

专家提示

使用 Real 类型时要小心:由于精度原因,严格相等可能会失败。建议使用偏差或范围。

在 SCL 中:IF value1 = value2 THEN ...

可以比较字符串 (String) 以验证识别码。

CMP <> — 不等于 (Not equal)

<>

功能

如果两个操作数 IN1 和 IN2 不同,则返回 TRUE。这是相等的反操作。

适用场景

检测数值变化,确保传感器不返回 0,或验证当前模式不是禁止的模式。

专家提示

常用于在数值偏离设定值时立即触发动作。

在 SCL 中:IF value1 <> value2 THEN ...

可用于比较时间戳 (DTL) 以查看日期是否已更改。

CMP >= — 大于或等于

>=

功能

如果第一个值 (IN1) 大于或等于第二个值 (IN2),则返回 TRUE。

适用场景

触发高位报警,在未达到目标温度时允许加热。

专家提示

适用于限值必须包含在条件中的安全阈值。

在 SCL 中:IF level >= setpoint THEN ...

可与 Time 类型一起使用,以检查是否已超过最小持续时间。

CMP <= — 小于或等于

<=

功能

如果 IN1 小于或等于 IN2,则返回 TRUE。

适用场景

低水位监控、停止泵、验证最小压力。

专家提示

通常配合滞后处理以避免输出抖动。

原生支持 Date 和 Time 类型。

在 SCL 中:IF pressure <= min_limit THEN ...

CMP > — 大于 (Greater than)

>

功能

如果 IN1 严格大于 IN2,则返回 TRUE。

适用场景

不应包含目标值的严格比较。

专家提示

在自动化中比 >= 使用得少,但在数学算法中很有用。

在 SCL 中:IF current > max THEN ...

更适合循环索引比较 (FOR)。

CMP < — 小于 (Less than)

<

功能

如果 IN1 严格小于 IN2,则返回 TRUE。

适用场景

严格下限测试。

专家提示

用于检查数值是否为“负数” (val < 0)。

在 SCL 中:IF val < 0 THEN ...

支持字符比较(按字母顺序排序)。

范围操作

检查数值是否属于区间 [MIN..MAX]

IN_Range — 在范围内

IN_Range

功能

检查数值 (VAL) 是否位于下限 (MIN) 和上限 (MAX) 之间。区间是闭合的:MIN <= VAL <= MAX。

适用场景

运行窗口监控(例如:压力在 2 到 5 bar 之间)、机器速度验证。

专家提示

有效地替代了两个串联的比较器,使程序段更易读。

如果 MIN > MAX,指令始终返回 FALSE。

对于需要多个模拟量条件的“就绪运行”连锁非常有用。

OUT_Range — 范围外

OUT_Range

功能

如果数值 (VAL) 位于 MIN 和 MAX 定义的区间之外,则返回 TRUE。即 VAL < MIN 或 VAL > MAX。

适用场景

异常检测或超过极端阈值(范围报警)。

专家提示

它是 IN_Range 的精确反操作。

使用它来简化过程报警逻辑。

在 SCL 中:res := (val < min) OR (val > max);

有效性测试

检查浮点数的完整性

|OK| — 检查有效性

|OK|

功能

检查浮点值(Real 或 LReal)是否为有效数字。如果值为 NaN(非数字)或 Inf(无穷大),则返回 FALSE。

适用场景

在复杂计算(除法、平方根、对数)之后,以避免传播可能导致 PLC 停机的数学错误。

专家提示

在将 Real 值发送到模拟量输出或变频器之前必不可少。

允许检测间接除以零。

便于过滤故障传感器的反馈。

|NOT_OK| — 检查无效性

|NOT_OK|

功能

如果浮点值无效(NaN 或 Inf),则返回 TRUE。

适用场景

触发计算故障位或强制执行安全值。

专家提示

如果轨迹计算失败,使用它使机器进入安全状态。

相当于其他语言中的 IS_NAN。

在 SCL 中:IF NOT OK(value) THEN ...

高级比较 (Variant)

用于动态编程和复杂类型的指令

EQ_Type / NE_Type

功能

将 Variant 类型变量的数据类型与另一个变量或定义类型的类型进行比较。

适用场景

在必须处理不同数据类型的通用块中(例如:接受 Int 或 Real 的日志块)。

专家提示

对于面向对象编程和可重用库至关重要。

允许确保动态内存访问的安全。

与 VariantGet 指令配合使用。

IS_NULL / NOT_NULL

功能

检查指针(Variant 或 DB_ANY)是否为空(不指向任何内容)。

适用场景

避免在使用间接寻址 DB 时发生访问错误。

专家提示

在通过指针调用方法或读取数据之前,务必测试 NOT_NULL。

相当于 C#/Java 中的 'Nothing' 或 'null' 对象。

对于 PLC 中的链表管理或动态结构必不可少。

IS_ARRAY

功能

检查 Variant 变量是否指向数组 (Array)。

适用场景

编写批量处理功能或数据缓冲区。

专家提示

配合 CountOfElements 使用以获取数组大小。

允许创建通用的排序函数。

也适用于结构体数组 (UDT)。

比较器对比 — 使用哪一个?

为您的 PLC 逻辑选择正确的指令

您想要...使用此指令示例
测试精确相等CMP ==产品代码正确
高安全阈值CMP >=压力 > 10 bar
维持在区域内IN_Range温度在 18 到 24°C 之间
监控 Real 错误|OK|检查除法结果
验证 DB 指针NOT_NULL配方 DB 已加载
验证 Variant 类型EQ_Type输入确实是 Int

常见问题

为什么我的 == 比较有时在处理 Real 数字时失败?

Real 数字(浮点数)的精度有限。计算可能会得出 10.000001 而不是 10.0。比较浮点值时,请始终使用带有小容差的 IN_Range(例如:在 9.99 和 10.01 之间)。

IN_Range 和两个串联的比较器有什么区别?

功能上是相同的。但是,IN_Range 在图形上更紧凑,更易读,且性能更高,因为 PLC 在一个步骤中处理该指令。

|OK| 和 |NOT_OK| 指令有什么用?

它们用于检测 Real 计算中的“静默”错误。如果您对负数求平方根,结果是 NaN。如果没有 |OK| 测试,这个 NaN 将污染您的所有其他计算,并可能导致 CPU 停机。

可以比较完整的结构体 (UDT) 吗?

CMP == 指令不允许直接比较两个结构体。您必须逐个比较每个成员,或者使用比较内存区域的特定块。

通过 AI 生成您的比较逻辑

用自然语言描述您的阈值和条件,T-IA Connect 将生成带错误处理的优化比较程序段。