2016-09-27 2 views
2

Я работаю над алгоритмом скользящей средней для анализа значений датчиков, а значения хранятся в массиве. НО, длина массива - variabla (зависит от скорости одного двигателя).Создайте массив в CoDeSys с изменяемым размером

Как создать массив в CoDeSys с изменяемым размером. Неверно определить массив так:

Название: ARRAY [1 ... SpeedValue] OF INT;

ответ

3

Прошу прощения, что в массивах Codesys V2/V3 нет изменчивого размера. Общее объяснение заключается в том, что в ПЛК нет динамического распределения памяти, поскольку динамическое распределение памяти считается слишком ненадежным.

Ваш единственный выбор, чтобы определить массив с постоянным ARRAY [1..N_MAX_SPEED_VALUE] и просто использовать массив до SpeedValue

VAR 
    arrnValues   : ARRAY[1..N_MAX_SPEED_VALUE] OF INT; 
END_VAR 
VAR CONSTANT 
    N_MAX_SPEED_VALUE : INT := 100; (*Max Array Size*) 
END_VAR 

Для себя я действительно прослушивают этим ограничением. Я уже много раз запрашивал функцию, чтобы определить массивы, такие как ARRAY [*], иметь ключевые слова для начала и конца и определять фактический размер начала и конца при создании экземпляра. Это не имеет ничего общего с динамическим распределением памяти, поскольку размер определяется во время компиляции.

2

Я бы рекомендовал вам следующее сообщение.

https://stefanhenneken.wordpress.com/2016/09/27/iec-61131-3-arrays-with-variable-length/

Стефан описывает шаг за шагом, что можно сделать с массивами переменной длиной.

я бы не рекомендовал, что Феликс мотивационные, потому что:

Во-первых: Вы никогда не хотите иметь различное время сканирования.

Во-вторых: Если по какой-то причине можно просто сказать, что что-то сломалось, а SpeedValue, которым вы хотите быть верхней границей вашего массива, невозможно достичь, то у вас либо есть тупик, либо плохой выход, если вы действительно не знаете, неверно

+0

Пожалуйста, не забудьте суммировать, что сообщение содержит, так что ответ по-прежнему полезен, если ссылка, поскольку неактивна/удалена –

Смежные вопросы