タスクサイクル時間は、エンジニアがコントローラアプリケーションの実行時動作を理解するために使用できる実用的な値の1つです。 タスクが予想より長くかかる場合、プロセスタイミング、同期、トラブルシューティング、およびシステムの安定性に影響を与える可能性があります。
CODESYSは、IEC 61131-3に準拠したコントローラアプリケーションのプログラミング向けの開発環境です。 それは、定義されたタイミング条件内でタスクを確実に実行する必要がある自動化およびコントロールシステムで使用されます。
CODESYSプロジェクトでは、実際のタスクサイクル時間をモニタすることで、エンジニアがパフォーマンスを最適化し、ボトルネックを特定し、機械シーケンスに影響を与える可能性のあるタイミング動作を検出するのに役立ちます。 制御タスク、通信タスク、または動作関連機能が、特定のタイミング窓内に収まる必要がある場合に特に重要です。
このチュートリアルでは、CODESYSで実際のタスクサイクル時間を測定する2つの方法を紹介します:
どちらの方法も有用です。 適切な選択は、必要な精度とタスクの動作をどれだけ詳細に分析したいかにによって決まります。
タスクサイクル時間は、コントロールシステム内で特定のタスクや操作がどれくらいの時間で完了するかを示します。 コントローラアプリケーションでは、この値はコードが期待されるタイミング範囲内で実行されているかどうかを理解するのに役立ちます。
タスクサイクル時間をモニタすることで、いくつかのエンジニアリングタスクをサポートできます:
安定したタスクサイクル時間はすべての制御問題を解決するわけではありませんが、エンジニアにとって有用な出発点を提供します。 実際のサイクル時間が予想より長かったり、大きく変動したりする場合には、アプリケーションをより詳しく分析する必要があります。
CODESYSでは、タスクはプログラムや関数がいつ、どのように実行されるかを定義します。 タスクサイクル時間は、その実行を完了するのに必要な時間です。
例えば、周期的なタスクは数ミリ秒ごとに実行されるように設定可能です。 タスク内のコードの実行に時間がかかりすぎる場合、コントローラが期待されたタイミング窓内でタスクを完了できない可能性があります。 これにより、パフォーマンス、プロセス同期、または動作の挙動に影響を及ぼす可能性があります。
タスクサイクル時間を測定することは困難な場合があります。その実際の値は、いくつかの要因に左右される可能性があるからです。
そのため、測定方法が重要です。 基本的なチェックには簡単なタイミング方法で十分かもしれません。 マイクロ秒単位のタイミングやタスク固有の情報が必要な場合には、より精確な方法が必要かもしれません。
CODESYS で経過時間を測定する簡単な方法の一つは、組み込みの TIME() 関数を使用することです。
基本的なロジックはシンプルです:
1. コードセクションを実行する前に開始時間を記録します
2. 計測したいコードを実行します
3. コードセクションの実行後に終了時間を記録します
4. 終了時間から開始時間を引きます
5. 結果を計測された経過時間として使用します
この例では、時間のかかるタスクをシミュレートするために、2つのFORループが使用されています。 TIME()関数はループセクションの前後の時間を取得し、それらの値の差がタスクの推定実行時間を示します。
この方法は、コードセクションに要する時間を簡単に知りたい場合に役立ちます。
例では、測定されたタスクサイクル時間は通常6から8ミリ秒の範囲です。 測定変数を経時的にモニタするために、トレースを追加することができます。 この例では、サイクルタイムが時折10ミリ秒に跳ね上がることがあります。
この変動は重要な意味を持ちます。 ソフトモーションタスクがサイクル時間4ミリ秒以下に構成されている場合、その設定サイクル時間を超えると例外が発生する可能性があります。 そのため、動作や同期に関する要件が厳しいアプリケーションにおいては、タスクのタイミングが特に重要となります。
TIME()関数はシンプルであるため便利です。 わずかなコードで済み、理解が容易で、既存のプロジェクトにすばやく追加できます。
以下のような場合に適した選択肢となります:
ただし、TIME()関数にも限界があります。 それはミリ秒単位の精度で値を提供します。 それはマイクロ秒レベルの分析を必要とするアプリケーションには十分な精度ではないかもしれません。
この方法では、手動での時間追跡も必要です。 測定がどこから開始され、どこで終了し、経過時間がどのように計算されるかを定義する必要があります。 これは簡単なチェックには適していますが、大規模なプログラムでタスク固有の実行時間情報が必要な場合には、あまり便利ではない可能性があります。
より精確なタスクサイクル時間の測定には、CmpIecTaskライブラリを使用するほうが通常は優れた選択肢です。
CODESYSには、CmpIecTaskライブラリが含まれています。 このライブラリは、IECタスクマネージャから情報にアクセスするための関数を提供します。
ライブラリをCODESYSプロジェクトに追加すると、初期化にはわずかなコードしか必要ありません。 初期化が完了すると、プログラムは、実際のタスクサイクル時間や平均サイクル時間などの値を含む、詳細なタスク情報を格納した構造体にアクセスできるようになります。
この方法は、コードセクションの前後で時間を手動で測定するよりも、タスクに特化したものです。 独自のタイミングロジックを作成する代わりに、ライブラリを通じて提供されるタスク情報を利用します。
元の例では、測定方法を比較できるように、同一のシミュレーション用負荷が使用されています。 違いは、CmpIecTaskライブラリがタスクサイクル時間情報をより直接的に処理する点です。
CmpIecTaskライブラリは、タスクのタイミングをより精確に制御する必要がある場合に多くのメリットを提供します。
まず、プログラムのさまざまな部分に柔軟に統合することができます。 これにより、各コードセクションの周囲に開始および終了時間の測定を手動で配置することなく、タスク情報により簡単にアクセスできます。
次に、このライブラリはタスクのサイクル時間情報の記録と計算を管理します。 これにより、手動の作業負担が軽減され、測定ロジックにおけるエラーのリスクが低下します。
第三に、このライブラリはマイクロ秒レベルの精度を持つ値を返します。 これはTIME()関数で取得される値よりも精度が高く、より厳しいタイミング要件を持つアプリケーションにとって重要な場合があります。
主な欠点は、このライブラリをCODESYSプロジェクトに追加する必要があることです。 しかし、多くのアプリケーションにとっては、それによって得られる精度の向上やタスク固有の情報と比べれば、それは些細なトレードオフに過ぎません。
どちらの方法もタスクのタイミングを把握するのに役立ちますが、あらゆる状況に等しく適しているわけではありません。
手軽かつ迅速なチェックが必要で、ミリ秒レベルの精度で十分な場合は、TIME() 関数を使用してください。 実装が簡単で、基本的なタイミング比較に役立ちます。
よりな精確スク情報が必要で、手動でのタイミングロジックを避けたい場合や、パフォーマンス分析のためにマイクロ秒レベルの精度が必要な場合は、CmpIecTask ライブラリを使用してください。
モーションタスク、同期タスク、または厳しいタイミング要件を持つコントローラアプリケーションにとっては、CmpIecTask ライブラリが通常、より良い選択肢です。
CODESYSのタスクタイミングは、コントローラのパフォーマンス、動作挙動、または機械の同期をコミッショニングやトラブルシューティング中に評価する必要がある際に特に重要です。
Festo ソフトウェア環境内では、CODESYSはより広範なエンジニアリングおよび制御ワークフローの一部となることができます。 Festo AX Controlsは、CODESYSを含むIEC 61131-3に準拠した標準プログラミングによる決定論的リアルタイム制御をサポートしているほか、C/C++、C#、Pythonなどの高水準言語もサポートしています。
Festo Automation Suiteはコミッショニング、プログラミング、および診断をサポートします。 CEPEなどのAX Controls製デバイスを、追加の設定手順を必要とせずにトポロジーからCODESYSプログラミング環境へ移行できるため、ユーザーはそのまま機械シーケンスの作業を続けることができます。
このチュートリアルを、タスクタイミングを確認するための実践的なCODESYSの方法として使用してください。 その後、次のエンジニアリングステップに適したFestoのソフトウェア、ライセンス、または学習リソースを利用してください。