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
GT
>
递减序列:OUT := (IN1>IN2) & (IN2>IN3) & ... & (INn-1 > INn)
GE
>=
单调序列:OUT := (IN1>=IN2)&(IN2>=IN3)& ... & (INn-1 >= INn)
EQ
=
平等:OUT := (IN1=IN2) & (IN2=IN3) & ... & (INn-1 = INn)
LE
<
= 单调序列:OUT := (IN1<=IN2)&(IN2<=IN3)& ... & (INn-1 <= INn)
LT
<
递增序列:OUT := (IN1<IN2) & (IN2<IN3) & ... & (INn-1 < INn)
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
.
我正在为结构化文本构建解析器和类型检查器。 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
GT
>
递减序列:OUT := (IN1>IN2) & (IN2>IN3) & ... & (INn-1 > INn)
GE
>=
单调序列:OUT := (IN1>=IN2)&(IN2>=IN3)& ... & (INn-1 >= INn)
EQ
=
平等:OUT := (IN1=IN2) & (IN2=IN3) & ... & (INn-1 = INn)
LE
<
= 单调序列:OUT := (IN1<=IN2)&(IN2<=IN3)& ... & (INn-1 <= INn)
LT
<
递增序列:OUT := (IN1<IN2) & (IN2<IN3) & ... & (INn-1 < INn)
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
.