フィールドバスデバイスとI / Oドライバー
デバイスツリーで構成されている各フィールドバスデバイスの技術的基礎は、I/Oドライバです。
I / Oドライバーは、フィールドバススタック、IECアプリケーション、およびIDE間のリンクです。ドライバは、デバイス構成のデータからフィールドバススタックを構成します。診断を示し、IECアプリケーション用のAPIを提供し、I / Oマッピングを担当します(「I / Oマッピング」の章を参照)。
この章では、特定のバスシステムの詳細については説明せずに、I/Oドライバデバイスの基本機能の概要を説明します。さらに、構成に関するいくつかの推奨事項が提供されています。
バスサイクルタスク
バスサイクルタスクは、I/Oドライバが実行されるコンテキストでのIECタスクです。一部のI/Oドライバーは、複数のタスクを使用します。通常、I / Oデータの転送に使用されるリアルタイムの重要なタスク(優先度が高い)と、診断の評価や非周期的なタスクの実行などのタスクのための優先度の低い別のタスクです。バスシステムサービス。
リアルタイムのクリティカルバスシステムでは、このバスタスクのコンテキストで、実行時間のためにバスクロックを中断する操作が実行されないようにする必要があります。
バスタスクは、I / OドライバーデバイスのI / Oマッピングダイアログで構成できます。親デバイスの設定はデフォルトで継承されることに注意してください。このデバイスがPLCの場合、そのPLC設定がバスサイクルタスクに適用されます。
重要
上記の設定が設定されていない場合は、サイクルタイムが最も短いタスクが使用されます。このようにして、非リアルタイムI / Oドライバーが、リアルタイムクリティカルドライバーのタスクコンテキストで意図せずに実行され、その通信が中断される可能性があります。これらの通信の問題を診断するには、タスクの監視を確認することをお勧めします。
詳細については、以下を参照してください。 タブ:PLC設定
I / Oマッピング
I / Oドライバーの重要な機能は、I/Oイメージの更新です。これは、バスシステムのI / OデータをIECアプリケーションの変数にマッピングすることを意味します(その逆も同様です)。
入出力データは、バスシステムの内部メモリイメージから%Iおよび%Qアドレスに割り当てられたIEC変数への両方向のコピーおよび変換操作によって周期的にマッピングされます。
I / Oドライバーの場合、このI / Oマッピングにシンボリック名を使用するか、%Iおよび%Qアドレスへの「直接」アクセスを使用するかにかかわらず、内部的な違いはありません。アプリケーションの保守性のために、常に説明的な変数名を使用することをお勧めします(例:「%IW117」アクセスの代わりに変数「TemperatureReactor」)。
無効:
アプリケーションで使用されるI / Oデータのみがマップされます。
これにより、コピー操作を回避してパフォーマンスを向上させることができますが、I / OマッピングダイアログのI / Oデータが更新されない場合(値がグレー表示される場合)、混乱が生じる可能性があります。この設定は、開発が完了したアプリケーションに推奨されます。
有効1:
すべてのデータが更新されます。
有効化2:
重要
このオプションを使用できるかどうかは、デバイスの説明によって異なります。
注意:特別な場合にのみ生産的に使用してください。
その結果、バスサイクルタスクがこのデータを読み書きし、アプリケーションコードが他のタスクで使用するため、一貫性のないI / Oデータが発生する可能性があります。
詳細については、以下を参照してください。 タブ:<デバイス名> I / Oマッピング
I / Oデータの一貫性
プログラミングシステムにより、IECアプリケーションは並行して実行される複数のタスクを使用できます(視覚化、フィールドバス、その他のPOU用)。アプリケーションコードは、マップされたIEC変数を介して、これらのタスクのコンテキストから任意のI/Oデータにアクセスできます。異なるタスクから1つの同じデータにアクセスすると、データの一貫性が失われたり破損したりする可能性があります(たとえば、書き込みアクセスの中断が原因)。
I / Oドライバーは、タスクサイクルを実行する各タスクに、使用されるすべてのI / Oデータの一貫したマッピング(いわばスナップショット)を提供することにより、データの一貫性を確保します。
したがって、次の例のようなコードは問題を引き起こすことはありません:(「DIVbyZERO」に注意してください)
IF(inputData <> 0) THEN // inputData is mapped to %I x := y / inputData; // This will never result in DIV_BY_ZERO Exception END_IF // inputData is not updated by bus cycle during execution of POU
重要
とともに 常に変数を更新する オプションをに設定 有効2–常にバスサイクルタスク、このメカニズムはオーバーライドされます。したがって、アプリケーションコードはこれを考慮に入れる必要があります。
サービス
一部のI / Oドライバは、基本的な機能に加えて、デバイススキャン機能やデバイスアドレスの設定など、IDEから呼び出すことができるサービスを提供します。
一般的な推奨事項
PLC設定:
停止中のI / O更新:
バスサイクルは、アプリケーションがデバッグブレークポイントにある場合など、アプリケーションが停止している場合でも継続します。このようにして、フィールドデバイスとの通信が維持され、中断することなくすぐに継続できます。
PLC設定: 常に変数を更新する に設定されています 有効1-どのタスクでも使用されていない場合はバスサイクルタスクを使用:
アプリケーションの開発中に、すべてのI / Oデータの値を確認すると便利です。
特に、正確な送受信クロックの維持に依存するProfinet、EtherCAT、CANなどのリアルタイムの重要なフィールドバスシステムでは、優先度の高い別のバスサイクルタスクを使用することをお勧めします。リアルタイムの重要度が低いタスク(視覚化など)の場合は、バスサイクルタスクよりも大幅に低い優先度を選択する必要があります。
可能な限り少ないオフセットで最大のI / Oスループットを達成するために、フィールドバスシステムのバスタスクで個別のPOUを実行できます。ただし、これらはリアルタイムの要件を満たす必要があります。たとえば、ファイルアクセスやブロッキングソケット機能は実行できませんが、たとえば出力データの計算のみが実行できます。
複数のI / Oドライバーとタスク(トラブルシューティング)
複数のタスクから、場合によっては複数のI / Oドライバーインスタンス間でI / Oデータに一貫してアクセスする必要がある場合、特定の状況下でバスとアプリケーションタスク間の望ましくない相互干渉が発生する可能性があります。
これは、たとえば、一般的なシステム負荷が高い場合、またはリアルタイムクリティカルフィールドバスシステムのI / Oデータが、同じタスクで低速でブロッキングしているローカルバスシステムのI / Oデータと一緒に使用される場合です。 。
したがって、特にリアルタイムで重要なフィールドバス(EtherCAT、Profinet、CAN)を使用した通信の予期しない干渉の場合、タスクの監視では、最初にサイクル時間の非常に大きなジッターまたは外れ値(平均と比較した最大値)を調べる必要があります。価値)。タスクリストには、さまざまなタスクでのI / Oデータの使用に関する詳細情報が記載されています。
1つの同じタスクで異なるバスシステムからのI / Oデータを使用することを回避したり、I / Oタスクの数を減らしたりすることができる場合があります。
詳細については、以下を参照してください。 タブ: タスクの展開