センサー値を分析する移動平均アルゴリズムに取り組んでおり、値は配列に格納されています。ただし、配列の長さは可変です (1 つのモーターの速度に依存します)。
CoDeSys で変更可能なサイズの配列を作成する方法を教えてください。Array を次のように定義するのは間違っています。
名前: ARRAY[1...SpeedValue] OF INT ;
申し訳ありませんが、Codesys V2/V3 では配列のサイズを変更できません。一般的な説明は、動的メモリ割り当ては信頼性が低すぎると考えられているため、PLC で使用できる動的メモリ割り当てがないということです。
唯一の選択肢は、定数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[*] のような配列を定義し、start と end のキーワードを持ち、インスタンス化時に実際の start と end のサイズを定義する機能を、私はすでに何度も要求しました。サイズはコンパイル時に定義されるため、これは動的メモリ割り当てとは関係ありません。
次の投稿をお勧めします。
https://stefanhenneken.wordpress.com/2016/09/27/iec-61131-3-arrays-with-variable-length/
Stefan は、可変長配列で何ができるかを順を追って説明しています。
フェリックスが提案したことはお勧めしません。理由は次のとおりです。
最初に: スキャン時間を可変にしたくありません。
2番目:何らかの理由で、何かが壊れて、配列の上限にしたいSpeedValueに到達できないとしましょう。何かが間違っているかどうかを本当に知らずに、デッドロックまたは悪い出力があります