我正在尝试在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。