1

我正在为结构化文本构建解析器和类型检查器。ST 是帕斯卡的导数。

很明显,ST 允许两个声明的实变量 X 和 Y 的相等比较为

 X = Y

也很清楚你可以写

 X <> Y

 X > Y

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

 A = B

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

我可以写:

 A > B

这是什么意思?

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

[不,我不能只在真控制器上​​试用;我实际上没有一个,最近的一个实际上距离我两天。]

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

4

1 回答 1

4

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

一般来说,这是有效的陈述。

VAR
    a, b: BOOL;
END_VAR

IF a = b THEN
   // Do something
END_IF

这是 IEC 61131-3 草案中的内容。不幸的是,它不是开放文档并且要花钱,这就是为什么我不能在此处发布或提供链接的原因。

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

这也应该是有效的。

我可以写:A > B 是什么意思?

如果AB于此表达式将返回TRUE否则FALSE

于 2018-08-15T04:13:49.630 回答