在 Codesys 中定义数组

Defining Arrays in Codesys

我正在使用 Codesys 创建数组。

下面的示例是我用来为 5 个值创建数组的示例

ARRAY [1..5] OF INT := [1,2,3,4,5];

这对于包含 5 个值的数组来说没问题,但如果我需要一个包含 100 个值的数组?

有没有一种更快的方法来为 100 个值创建一个数组,而不是像下面的示例那样分别输入每个值。

ARRAY [1..100] OF INT :=[1,2,3,4,5,6,7 to 100]

好吧,如果您只想执行最多 100 个元素,并且希望数组的元素按顺序进行,您可以使用此代码在第一次 plc 扫描时初始化数组,而不是在数组声明中初始化.

VAR
   SomeArray: ARRAY[1..100] OF INT;
   i:INT:=0;
   isInitialized:BOOL:=false;
END_VAR

IF NOT isInitialized THEN
    FOR i:=1 TO 100 BY 1 DO
         SomeArray[i]:=i;
    END_FOR;
    isInitialized:=TRUE;
END_IF;

如果你想用相同的值初始化一个数组或数组的一部分,你可以使用()-shorthand

ARRAY [1..100] OF INT :=[4(1),3(2),2(3),4]; //Equivalent [1,1,1,1,2,2,2,3,3,4]

在Codesys V3或TwinCat 3中可以使用FB_init方法编写初始化代码。 FB_init 所有声明的 FB 实例的方法将在正常循环任务执行开始之前在启动时被调用。

你可以这样使用它:

METHOD FB_Init : BOOL
VAR_INPUT
  bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start / cold start)
  bInCopyCode : BOOL;  // if TRUE, the instance afterwards gets moved into the copy code (online change)
END_VAR
VAR
  unCount : UINT;
END_VAR

FOR unCount := 1 TO 100 DO
   arrnInitExample[unCount]:= unCount;
END_FOR

注意:FB_init 方法的前两个布尔输入必须始终相同。但是你也可以在之后添加额外的输入变量。然后,您可以在 FB 实例的声明中将自定义参数传递给该方法。