IEC-61131 结构化文本是否允许比较布尔操作数?

Does IEC-61131 Structured Text allow comparison of boolean operands?

我正在为结构化文本构建解析器和类型检查器。 ST 是 Pascal 的衍生物。

显然 ST 允许对两个声明的实变量 X 和 Y 进行相等比较

 X = Y

写的也清楚

 X <> Y

 X > Y

如果我有两个声明的布尔变量A和B,是

 A = B

合法吗?帕斯卡肯定会这么说。我对 ST 的参考文档(包括澳大利亚版本的 2004 标准,以及几个供应商的实现)不清楚。

我可以写:

 A > B

这是什么意思?

[在摘要中,我对比较字符串的相同问题很感兴趣。布朗尼也指出解决这个问题]。

[不,我不能只在真实控制器上尝试;我实际上没有一台,最近的一台实际上离我有两天的路程。]

答案是什么,您查阅的显示答案的参考文档是什么?

这个问题的答案真的取决于IDE。尽管 ST 有一个标准,但每个供应商的实施方式都略有不同。

总的来说,这是有效的说法。

VAR
    a, b: BOOL;
END_VAR

IF a = b THEN
   // Do something
END_IF

这是 IEC 61131-3 草案中的内容。不幸的是,它不是开放文档并且要花钱,这就是为什么我不能在这里 post 它或提供 link.

https://webstore.iec.ch/publication/4552

  1. GT > 递减序列:OUT := (IN1>IN2) & (IN2>IN3) & ... & (INn-1 > INn)
  2. GE >= 单调序列:OUT := (IN1>=IN2)&(IN2>=IN3)& ... & (INn-1 >= INn)
  3. EQ = 平等:OUT := (IN1=IN2) & (IN2=IN3) & ... & (INn-1 = INn)
  4. LE <= 单调序列:OUT := (IN1<=IN2)&(IN2<=IN3)& ... & (INn-1 <= INn)
  5. LT <递增序列:OUT := (IN1<IN2) & (IN2<IN3) & ... & (INn-1 < INn)
  6. NE <> 不等式(不可扩展)OUT := (IN1 <> IN2)

这也意味着在某些 IDE 中您可以使用

IF EQ(a, b) THEN
   // Do something
END_IF

这应该也是有效的。

Can I write: A > B and what does it mean?

如果 A 大于 B 此表达式将 return TRUE 否则 FALSE.