【问题标题】:How can define enumerator in Methods?如何在方法中定义枚举器?
【发布时间】:2022-01-05 03:37:52
【问题描述】:

当您在 method 中定义 enum 时出现问题。

我试图这样做:

VAR
    enumA:(A,B,C);
END_VAR

当我在TwinCAT3 Shell (TcXaeShell) 中使用它时,编译器会有反应。

任何帮助将不胜感激。

【问题讨论】:

  • 想到的是在声明部分使用VAR_INST 而不是VAR。不幸的是,我无法验证它是否有效,因为我目前无法使用 TwinCAT 访问 PC。
  • 它也不适用于 VAR_INST。

标签: plc twincat codesys st


【解决方案1】:

您只能在方法中使用全局枚举。这是本地枚举的限制之一。

https://alltwincat.com/2021/11/16/local-enumerations/

【讨论】:

    【解决方案2】:

    您应该首先将变量类型定义为 DUT 中的枚举

    TYPE MyEnum:
        (A, B, C)
    END_TYPE
    

    然后在程序中你可以声明该类型的变量

    VAR
        enum: MyEnum;
    END_VAR
    

    如果你想比较的话,在程序里面。

    IF enum = MyEnum.C THEN
        // Do something
    END_IF;
    

    【讨论】:

    • 问题是“如何在方法中定义 local 枚举”,所以@Jakob 给出了更正确的答案:“你不能”。尽管如果新人不知道如何定义全局枚举,这可能仍然对他们有所帮助。
    • “在一个方法中”是问题的讽刺部分。他问“如何在方法中定义枚举”而不是“如何定义枚举”不是因为他知道如何全局定义枚举。根据他的问题的性质,很明显他根本不知道如何定义它们。所以从我的角度来看,我的答案是直接针对这个问题的。
    • @SergeyRomanov tnx 感谢您在这个问题上花时间,很抱歉误解了这个问题,我可以通过“如何在方法中定义枚举locally?”以更具体的方式提出我的问题,顺便说一句,您的回答可能会帮助任何寻找此问题的解决方案的人,因此保留此答案也很好。
    【解决方案3】:

    我以前遇到过这个问题。您必须在功能块的变量部分声明本地枚举。然后就可以在功能块的方法中使用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 2016-09-08
      相关资源
      最近更新 更多