Определение массивов в 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]

2 ответа

Решение

Хорошо, если вы просто хотите сделать это до 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 в метод.

Другие вопросы по тегам