如何在Yaskawa MotionWorks IEC 3中声明数据类型ENUM?

问题描述 投票:2回答:3

我正在尝试在MotionWorks中添加自己的枚举。创建新数据类型后,唯一可用的类型是ARRAY,STRING,STRUCT。

编写以下代码:

TYPE SimulationType:
(
    Passing :=  0,
    Random  :=  1,
    Failing :=  2
) INT := 0;
END_TYPE

不编译。 Yaskawa似乎遵守ENUM(根据this list),但我无法弄清楚如何宣布它。

编辑:我可以执行以下操作:

TYPE
    ResultType:(Pass, Random, Fail);
END_TYPE

但它似乎没有创建一个枚举,因为我无法访问它的价值。我可以像结构一样访问它。

编辑2:

如果我宣布:

TYPE
    ResultType:(Pass, Random, Fail);
END_TYPE

并设置变量

ExpectedResultType : ResultType;

然后在我尝试使用的代码中:

IF ExpectedResultType = ResultType.Pass THEN
    Done := TRUE;
END_IF;

它编译,但不会运行。

尝试使用此代码将无法编译:

CASE ExpectedResultType OF
    ResultType.Pass:
        Done := TRUE;
        Error := FALSE;
    ResultType.Random:
        Done := TRUE;
    ResultType.Fail:
        Error := TRUE;
        Done := FALSE;
END_CASE;
enums plc iec61131-3
3个回答
2
投票

MotionWorks中的枚举在数据类型中声明为此示例:

TYPE
    MyEnum:(Zero,One,Two,Three);
END_TYPE

无法为MotionWorks中的ENUM分配值。第一个枚举将始终等于0(零),第二个一个等于1(一个),依此类推。

然后枚举可以在IF .. END_IF语句中使用,如下所示:

我会把我的变量称为“我”。该变量必须声明为INT。任何其他类型将无法正常工作。在代码中使用它像这样:

IF i = MyEnum#Zero THEN
 (* do some work *)
ELSIF i = MyEnum#One THEN
 (* do some other work *)
END_IF

ENUM不能在MotionWorks的CASE语句中使用。


0
投票

这就是我对Schneider的IEC61131所以它应该是相同的

TYPE E_HomeLimitSwitch:
(
  ePositiveDirectionRisingEdge := 0,
  eNegativeDirectionRisingEdge := 1,
  ePositiveDirectionFallingEdge := 2,
  eNegativeDirectionFallingEdge := 3
);
END_TYPE

我不认为你INT:=0应该在那里。


0
投票

您只能将默认值设置为一个本地枚举成员。不是其他值,甚至是你试过的数字。 在第6行尝试这个: )INT:=通过;

© www.soinside.com 2019 - 2024. All rights reserved.