如何在Yaskawa Motionworks IEC 3中声明数据类型枚举



我正在尝试在MotionWorks中添加自己的枚举。创建新数据类型后,唯一可用的类型是数组,字符串,结构。

编写以下代码:

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

不编译。Yaskawa似乎符合枚举(根据此列表),但我不知道如何声明它。

编辑:我可以做以下操作:

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;

运动工程中的枚举在数据类型中声明为此示例:

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

在MotionWorks中的枚举无法分配一个值。第一个枚举将始终等于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

enums 不能在MotionWorks中的语句中使用。

我对schneider是IEC61131,所以它应该是相同的

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

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

您只能将默认值设置为本地枚举成员之一。不尝试其他值,甚至是您尝试过的数字。
而不是在第6行中尝试一下:
)int:=传递;

与代码不同,Yaskawa的MotionWorksiec并未完全支持枚举。在ST语言中,如果说明语句,则非常受欢迎,但是MotionWorksiec不支持枚举在语句中使用。

但是,您仍然可以定义枚举,如下所示。

TYPE
PackMLState:(Starting,Starting,Aborting,Aborted,Helding,Held,Etc);
END_TYPE

您可以使用枚举类型为;

IF machineState = PackMLState#Starting THEN
;;
END_IF

比较Codesys和MotionWorksiec(基本上是Phoenix触点,KW软件倍增),存在一些差异。为了澄清,在情况下,缺乏枚举并不会使多重磁头成为劣等的IDE。

最新更新