3

我正在使用 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]
4

2 回答 2

4

好吧,如果您只想处理最多 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;
于 2016-01-06T14:42:05.593 回答
3

如果要使用相同的值初始化数组或数组的一部分,可以使用() 简写。

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 实例时将自定义参数传递给方法。

于 2016-01-07T16:11:55.410 回答