【问题标题】:Does IEC-61131 Structured Text allow comparison of boolean operands?IEC-61131 结构化文本是否允许比较布尔操作数?
【发布时间】:2018-08-15 12:13:49
【问题描述】:

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

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

 X = Y

你也可以这么写

 X <> Y

 X > Y

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

 A = B

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

我可以写吗:

 A > B

这是什么意思?

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

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

答案是什么?您查阅的参考文件是什么?

【问题讨论】:

    标签: plc relational st


    【解决方案1】:

    这个问题的答案真的取决于 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 &gt; 递减序列:OUT := (IN1&gt;IN2) &amp; (IN2&gt;IN3) &amp; ... &amp; (INn-1 &gt; INn)
    2. GE &gt;= 单调序列:OUT := (IN1&gt;=IN2)&amp;(IN2&gt;=IN3)&amp; ... &amp; (INn-1 &gt;= INn)
    3. EQ = 平等:OUT := (IN1=IN2) &amp; (IN2=IN3) &amp; ... &amp; (INn-1 = INn)
    4. LE &lt;= 单调序列:OUT := (IN1&lt;=IN2)&amp;(IN2&lt;=IN3)&amp; ... &amp; (INn-1 &lt;= INn)
    5. LT&lt;递增序列:OUT := (IN1&lt;IN2) &amp; (IN2&lt;IN3) &amp; ... &amp; (INn-1 &lt; INn)
    6. NE &lt;&gt; 不等式(不可扩展)OUT := (IN1 &lt;&gt; IN2)

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

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

    这也应该是有效的。

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

    如果A 大于B,则此表达式将返回TRUE,否则返回FALSE

    【讨论】:

    • 伟大的章节和诗句引用。正是我需要的。谢谢!
    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2013-08-14
    • 2013-05-22
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多