スタック使用量の計算
POU ごとのスタック使用状況は、に表示されます。 タスク設定 上のオブジェクト スタック使用量 タブ。
スタック使用量は次によって静的に計算されます。 CODESYS 静的コールスタックを使用する。
計算には以下が含まれます。
計算は、タスクエントリの暗黙的なPOUから始まります。
各 IEC プログラムコールについて (例:
PLC_PRG
) の場合、呼び出された各 IEC POU のスタック使用量が再帰的に計算されます。POU の最大スタック使用量を決定するために、POU の最大スタック使用量がそれ自体のローカルスタック使用量に加算されます動的呼び出しの場合、スタック使用量は次のように計算されます。考えられるすべての実装のスタック使用量が決定され、最大のスタック使用量が想定されます。つまり、インターフェイスメソッドでは考えられるすべての実装と、ファンクションブロックメソッドでは考えられるすべてのオーバーライドが考慮されます
外部通話では、ターゲットデバイスで指定された値が想定されます。デバイスが値を指定していない場合は 0 と見なされます。
再帰の場合、計算は中止されます。タイプ属性プラグマの値 estimated-stack-usage 再帰的に呼び出されるコードに適用されます。値が指定されていない場合は 0 とみなされます
したがって、スタック使用量は推定値に過ぎません。想定される最下位コールパスが実行時に実行されないため、この値が高すぎる可能性があります。ただし、再帰や外部呼び出しの見積もりが不適切になるため、この値が低すぎる場合もあります

スタック使用量の表示
をダブルクリック タスク設定 オブジェクト。
タスク設定エディターが開きます。
クリック ビルド → コードを生成 コマンド。
をクリックします スタック使用量 タブ。
タブの情報が更新されます。
アンダー タスク/最大コールスタックこの場合、順番に呼び出された POU は、想定どおりに最大コールスタックに表示されます。POU の計算されたスタックサイズは、に表示されます スタックサイズ カラム。
スタックサイズが赤で表示されている場合は、それぞれの POU でスタックオーバーフローが発生している可能性があります。変更が必要な POU がわかります。これはコールスタックで赤でマークされた最初の POU
