Skip to main content

冗長データの同期

基本的に、冗長領域タイプを使用して、冗長データが同期されるかどうか、いつ同期されるか、およびデータがどこからどこにコピーされるかに影響を与えることができます。

とき 冗長構成 オブジェクトがアプリケーションに存在する場合、 AREA_INPUT 冗長領域タイプは、デフォルトですべての変数 (すべてのグローバル変数リストおよびユーザーが作成するすべてのプログラム) に割り当てられます。これは、オブジェクトを後でアプリケーションに追加した場合にも発生します。その結果、すべての変数がデフォルトで登録されます。

これらのオブジェクトのリストは、 冗長構成 の編集者 登録地域 タブ。

詳細については、以下を参照してください。 全般的

冗長システム起動時の同期

2台目のPLCが起動すると、冗長データ(と AREA_INPUT 冗長エリア (タイプ) が最初にコピーされ、アクティブな PLC から 2 番目の PLC に 1 回コピーされます。その後、PLC はスタンバイに切り替わります。

ただし、デフォルトの選択を解除することはできます AREA_INPUT 同期から変数を除外する冗長領域タイプ。

手順. 同期からオブジェクトを除外する
  1. の中に 冗長性の構成 エディター、 登録エリア タブをクリックし、 変数 タブ。

    オブジェクトのリスト(タイプ プログラム また グローバル変数リスト)は下に表示されます 物体。アクティブ化されたオブジェクトが同期用に選択されるため、 AREA_INPUT 冗長エリアタイプ。

  2. オブジェクトを非アクティブ化します。

    rdncy_img_settings_registered_areas.png

    ヒント

    これは、フィールドバスのローカル診断データまたはローカル冗長状態に推奨されます。

すべてのタスクサイクルで同期する

ランタイムシステムの構成ファイル(* .cfg)に次のエントリが含まれている場合、タスクサイクルが開始されるたびに同期がトリガーされます。

[CmpRedundancy]
DataSyncAlways=1

の変数 PROGRAM 冗長領域タイプがであるオブジェクトおよびグローバル変数リスト AREA_INPUT 影響を受けます。

8.
PROGRAM PLC_PRG
VAR
    b: INT;
END_VAR

IF sReduState.eRedundancyState = RDCY.STATE.RS_CYCLE_ACTIVE THEN
    b := b + 1;
END_IF

ザル b 変数はアクティブな PLC でのみインクリメントされます。冗長システム内のデータは各タスクサイクルと同期されるため、冗長変数は 2 番目の PLC に継続的に転送されます



オンデマンドで同期

ランタイムシステムのコンフィギュレーションファイル(.cfg)に DataSyncAlways=1 という項目がない場合は、IEC コードの中でプログラム的に同期をトリガーする方が望ましいかもしれない。

これを行うには、 RedundancySynchronizeData() IECコードで機能します。次に、 AREA_INPUT 冗長エリアタイプは同期されます。したがって、の設定を確認してください 登録エリア のタブ 変数 タブ。コピー操作は、タスクサイクルの開始時に実行されます。

9.

アクティブ/スタンバイモードでは、 b アクティブな PLC では変数がインクリメントされます。いつ bUpdateData が設定されると、データ同期が 1 回トリガーされ、その値が 2 番目の PLC に転送されます。

IF bUpdateData THEN
    bUpdateData := FALSE;
    RedundancySynchronizeData();
END_IF


すべてのタスクサイクルにおけるアクティブ PLC からスタンバイ PLC への同期

ザル AREA_SYNCHRO あるタイプの冗長データは、各タスクサイクルの動作中にアクティブ PLC からスタンバイ PLC に転送できます。この場合のデータサイズには制限があります。型の割り当ては、ではサポートされていません CODESYSただし、のコールバックとしてプログラムで実行する必要があります AreaRegister 関数。

アプリケーションを開始する前にエリアを登録する必要があります。最初のサイクルで領域を登録するには遅すぎます。そのため、登録は のコールバックで行われます。 cbDownloadDone システムイベント。

10.
FUNCTION cbDownloadDone : DWORD
VAR_IN_OUT
        EventPrm: CmpApp.EVTPARAM_CmpApp;
END_VAR

(* Register GVL_Synchro to be synchronized in every task cycle *)
bAreaRegisterDone := AreaRegister(ADR(iSyncFirst), ADR(iSyncLast) - ADR(iSyncFirst) + sizeof(iSyncLast), AREA_TYPE.AREA_SYNCHRO);
tNowDownloadDone := TIME();

の呼び出し cbDownloadDone が実行されるときに実行されます OnlineChangeDone システムイベントが発生します。システムイベントがタスク構成に追加されます。

rdncy_img_task_configuration_redundant.png


ヒント

に注意してください AreaRegister 関数は冗長ライブラリの一部のバージョンでは非表示になっていますが、それでも呼び出すことができます。

すべてのタスク サイクルでパッシブ PLC からアクティブ PLC への同期

タイプの冗長データAREA_PASSIVE各タスク サイクルの動作中にパッシブ PLC からアクティブ PLC に転送できます。このため、データのサイズは制限されます。型の割り当ては次ではサポートされていません。 CODESYS、ただし、コールバックとしてプログラム的に実行する必要があります。 AreaRegister 関数。

アプリケーションを開始する前にエリアを登録する必要があります。最初のサイクルで領域を登録するには遅すぎます。その結果、登録は のコールバックで行われます。 cbDownloadDone システム イベント ( 前の章の例)。

11.
FUNCTION cbDownloadDone : DWORD
VAR_IN_OUT
    EventPrm: CmpApp.EVTPARAM_CmpApp;
END_VAR

(* Register GVL_Synchro to be synchronized in every task cycle *)
bAreaRegisterDone := AreaRegister(ADR(iSyncFirst), ADR(iSyncLast) - ADR(iSyncFirst) + sizeof(iSyncLast), AREA_TYPE.AREA_PASSIVE);
tNowDownloadDone := TIME();

の呼びかけ cbDownloadDone のときに実行されます。 OnlineChangeDone システムイベントが発生します。システムイベントがタスク設定に追加されます。

rdncy_img_task_configuration_redundant.png


タイマーの同期

IEC タイムベースの値は、PLC サイクルごとにアクティブ PLC からスタンバイ PLC に転送されます。これは影響します TIMETON、および TOF。システム時間 (例: SysTimeGetMs) は転送されず、各 PLC の現地時間として表示されます。

登録エリアの同期のタイムアウトの設定

に適切な値を設定するには 同期タイムアウト 内の登録エリアの 冗長設定まず、システムトレースを使用してこれを判断できます。

  1. デバイスツリーで、を追加します トレース デバイスオブジェクトの下にあるオブジェクト。

  2. の中に 冗長設定将軍 タブを選択し、 必要な同期時間をシステムトレースに記録します。 オプション。

  3. ロード そして、システムトレースのトレース記録を開始します。

  4. 同期中のタイムアウトのデフォルト値 SyncWaitTime は、の値です。 StandbyWaitTime次に、この値が 30 ミリ秒にプリセットされます。

    セットの場合 SyncWaitTime が短すぎる場合は、「同期待機時間が原因で、%」PRI_UI32「ms 後に同期が終了しました」というメッセージがログに表示されます。

    セット時 待機時間を同期 十分な長さであれば、実際に必要な SyncTime がシステムトレースに記録されます。このセットを最適化してみることもできます SyncWaitTime これにより、実際に必要な SyncTime にできるだけ近づけることができます。