冗長データの同期
基本的に、冗長領域タイプを使用して、冗長データが同期されるかどうか、いつ同期されるか、およびデータがどこからどこにコピーされるかに影響を与えることができます。
とき 冗長構成 オブジェクトがアプリケーションに存在する場合、 AREA_INPUT
冗長領域タイプは、デフォルトですべての変数 (すべてのグローバル変数リストおよびユーザーが作成するすべてのプログラム) に割り当てられます。これは、オブジェクトを後でアプリケーションに追加した場合にも発生します。その結果、すべての変数がデフォルトで登録されます。
これらのオブジェクトのリストは、 冗長構成 の編集者 登録地域 タブ。
詳細については、以下を参照してください。 全般的
冗長システム起動時の同期
2台目のPLCが起動すると、冗長データ(と AREA_INPUT
冗長エリア (タイプ) が最初にコピーされ、アクティブな PLC から 2 番目の PLC に 1 回コピーされます。その後、PLC はスタンバイに切り替わります。
ただし、デフォルトの選択を解除することはできます AREA_INPUT
同期から変数を除外する冗長領域タイプ。
の中に 冗長性の構成 エディター、 登録エリア タブをクリックし、 変数 タブ。
オブジェクトのリスト(タイプ プログラム また グローバル変数リスト)は下に表示されます 物体。アクティブ化されたオブジェクトが同期用に選択されるため、
AREA_INPUT
冗長エリアタイプ。オブジェクトを非アクティブ化します。
例
ヒント
これは、フィールドバスのローカル診断データまたはローカル冗長状態に推奨されます。
すべてのタスクサイクルで同期する
ランタイムシステムの構成ファイル(* .cfg)に次のエントリが含まれている場合、タスクサイクルが開始されるたびに同期がトリガーされます。
[CmpRedundancy] DataSyncAlways=1
の変数 PROGRAM
冗長領域タイプがであるオブジェクトおよびグローバル変数リスト AREA_INPUT
影響を受けます。
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
冗長エリアタイプは同期されます。したがって、の設定を確認してください 登録エリア のタブ 変数 タブ。コピー操作は、タスクサイクルの開始時に実行されます。
アクティブ/スタンバイモードでは、 b
アクティブな PLC では変数がインクリメントされます。いつ bUpdateData
が設定されると、データ同期が 1 回トリガーされ、その値が 2 番目の PLC に転送されます。
IF bUpdateData THEN bUpdateData := FALSE; RedundancySynchronizeData(); END_IF
すべてのタスクサイクルにおけるアクティブ PLC からスタンバイ PLC への同期
ザル AREA_SYNCHRO
あるタイプの冗長データは、各タスクサイクルの動作中にアクティブ PLC からスタンバイ PLC に転送できます。この場合のデータサイズには制限があります。型の割り当ては、ではサポートされていません CODESYSただし、のコールバックとしてプログラムで実行する必要があります AreaRegister
関数。
アプリケーションを開始する前にエリアを登録する必要があります。最初のサイクルで領域を登録するには遅すぎます。そのため、登録は のコールバックで行われます。 cbDownloadDone
システムイベント。
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
システムイベントが発生します。システムイベントがタスク構成に追加されます。

ヒント
に注意してください AreaRegister
関数は冗長ライブラリの一部のバージョンでは非表示になっていますが、それでも呼び出すことができます。
すべてのタスク サイクルでパッシブ PLC からアクティブ PLC への同期
タイプの冗長データAREA_PASSIVE
各タスク サイクルの動作中にパッシブ PLC からアクティブ PLC に転送できます。このため、データのサイズは制限されます。型の割り当ては次ではサポートされていません。 CODESYS、ただし、コールバックとしてプログラム的に実行する必要があります。 AreaRegister
関数。
アプリケーションを開始する前にエリアを登録する必要があります。最初のサイクルで領域を登録するには遅すぎます。その結果、登録は のコールバックで行われます。 cbDownloadDone
システム イベント ( 前の章の例)。
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
システムイベントが発生します。システムイベントがタスク設定に追加されます。

タイマーの同期
IEC タイムベースの値は、PLC サイクルごとにアクティブ PLC からスタンバイ PLC に転送されます。これは影響します TIME
、 TON
、および TOF
。システム時間 (例: SysTimeGetMs
) は転送されず、各 PLC の現地時間として表示されます。
登録エリアの同期のタイムアウトの設定
に適切な値を設定するには 同期タイムアウト 内の登録エリアの 冗長設定まず、システムトレースを使用してこれを判断できます。
デバイスツリーで、を追加します トレース デバイスオブジェクトの下にあるオブジェクト。
の中に 冗長設定 で 将軍 タブを選択し、 必要な同期時間をシステムトレースに記録します。 オプション。
ロード そして、システムトレースのトレース記録を開始します。
同期中のタイムアウトのデフォルト値
SyncWaitTime
は、の値です。StandbyWaitTime
次に、この値が 30 ミリ秒にプリセットされます。セットの場合
SyncWaitTime
が短すぎる場合は、「同期待機時間が原因で、%」PRI_UI32「ms 後に同期が終了しました」というメッセージがログに表示されます。セット時 待機時間を同期 十分な長さであれば、実際に必要な SyncTime がシステムトレースに記録されます。このセットを最適化してみることもできます
SyncWaitTime
これにより、実際に必要な SyncTime にできるだけ近づけることができます。