我正在使用 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]
我正在使用 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;
如果要使用相同的值初始化数组或数组的一部分,可以使用() 简写。
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 实例的FB_init方法将在启动时在正常循环任务执行开始之前被调用。
你可以像这样使用它:
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 实例时将自定义参数传递给方法。