【问题标题】:What is the benefit of defining enumerators as a DUT?将枚举器定义为 DUT 有什么好处?
【发布时间】:2021-11-23 13:07:16
【问题描述】:

定义enumerators 的主要目标是为一些数字及其相等的字符串分配一个变量,据我所知。

我们可以在 initializing sectionProgramFunction Block 的任何地方将 var a 定义为 enum,如下所示:

a:(start,stop,operate);

我不知道为什么我们在tabular view 中看不到这一点,但有一个大问题:

将枚​​举器定义为 DUT 有什么好处?

【问题讨论】:

    标签: plc twincat codesys st


    【解决方案1】:

    对我来说主要有 3 个好处:

    1. 您可以在多个功能块中使用相同的枚举
    2. 您可以在声明为 DUT 的枚举上使用 TO_STRING(使用 {attribute 'to_string'} 启用它之后@Infosys
    3. 您可以对每个组件的名称使用重构,这对于本地枚举是不可能的

    【讨论】:

      【解决方案2】:

      当将枚举定义为 DUT 时,它在您的代码中随处可用(全局范围)。 这在许多情况下很有用,但一般来说,在全局范围内拥有大量可用的东西并不是一个好的编程习惯。

      Here is a bit elaboration on the topic.

      【讨论】:

      • 除了 Jakob 在该帖子中提出的所有要点:如果您正在导出 FB(通过库,或者只是复制粘贴),您不再需要担心处理 2 个文件对象。只要两个对象之间存在关系,就有可能存在不匹配的版本,从而影响功能。
      【解决方案3】:

      除了上述之外,一个好处是,如果您对 FB 状态之类的内容使用枚举,您将能够在程序运行时看到描述性状态名称(READING、WRITING、WAITING、ERROR 等) .).

      您可以在变量声明部分、代码中或观察窗口中看到它。您不必记住在状态机中定义的状态编号。

      本地枚举或 DUT(全局)枚举具有此优势。

      【讨论】:

        【解决方案4】:

        除了已经提出的其他优点之外,枚举还有另一个很大的优势:您可以将枚举用作变量的类型,当您这样做时,编译器将(如果 {attribute 'strict'} 用于枚举声明,它可能应该)拒绝为该变量分配枚举不允许的值。

        换句话说,您摆脱了由于编译器无法捕获的一些编码错误导致变量最终具有无效值的一整类故障模式。

        创建一个枚举只需要很短的时间,它在许多层面上都有好处。我想说,真正的问题是,为什么在需要表达固定的有意义值列表时不使用它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-05
          • 1970-01-01
          • 1970-01-01
          • 2017-05-08
          • 2018-10-15
          • 2010-12-08
          相关资源
          最近更新 更多