【PLCの定周期実行とフリーランの本質的な違い】
この2つのタスク実行の違いや使い分けについて、明確に分かっていない人が多いんじゃないかな。
PLCのタスク実行には
・定周期実行(定周期タスク)
・フリーラン(処理が終わり次第、次のスキャン)
の実行方法がある。
現場ではフリーランが選ばれることが多い印象。おそらく、
・設定が楽
・平均的に速く見える
・軽い装置なら問題が顕在化しにくい
からじゃないかな。
制御工学やリアルタイム制御の観点では両者は全く別物で、以下にこれらについて書いていく。
■フリーラン
フリーランは「できるだけ速く回る」ことは保証するが、「いつ回るか」は保証しない。処理負荷・通信・ログ追加などで実行周期は常に揺れる。(ジッタが発生する)
平均周期は短くても最悪周期は読めない。これは、
・PID
・積分
・速度/加速度計算
・補間
といった「⊿t一定」を前提とする制御では致命的になる。制御性能がCPU負荷やシステム状況に依存してしまう。
見掛け上は速く動いているように見えるため、私はこれを「早々のフリーラン」と呼んでいる。
■定周期実行の価値
定周期実行の本質は「速さ」ではなく、「遅くても毎回同じ時間で動く」こと。制御において重要なのはジッタゼロの世界。「ジッタ=ノイズ」なのでジッタが発生すると補償不能になる。
・同じ入力条件
・同じ初期状態
・同じ負荷条件
であれば、タスクの実行順序、実行タイミング、出力タイミングが毎回同じになる。定周期実行は「決定論的」とも呼び、リアルタイムシステムでは不可欠になる。制御を「成り行き」ではなく、きちんと「設計対象」にする為の前提条件になる。
時間が読めると距離が読める。つまり、位置精度も補償できる。
■フリーランが許される領域
ここまで書いてきたが、なにもフリーランが劣っていると言っているわけではなく、ようは使い分けだと思う。
以下のような制御ならフリーランは合理的。
・ON/OFF中心のシーケンス
・時間精度不要
・人が介在するI/O(ランプ、HMI)
・同期制御無し、フィードバック無し
つまり、PLCをたんなる「シーケンサ」として使う場合である。
■定周期実行を選ぶべき装置
以下は決定論的であったほうが良い。
・サーボ/同期制御
・速度、加速度を扱う
・外部機器との時間同期
・軌道制御やオンザフライ処理
----------
まとめると、
・フリーランは制御をシステム負荷任せ
・定周期実行は制御を工学的に成立させる
という違いがある。