Skip to main content

Synchronisation des données redondantes

Fondamentalement, vous pouvez utiliser le type de zone de redondance pour influencer si et quand les données de redondance sont synchronisées et d'où vers où les données sont copiées.

Quand le Configuration de la redondance objet existe dans l'application, le AREA_INPUT le type de zone de redondance est affecté par défaut à toutes les variables (dans toutes les listes de variables globales et tous les programmes créés par l'utilisateur). Cela se produit également si vous ajoutez l'objet à l'application ultérieurement. Par conséquent, toutes les variables sont enregistrées par défaut.

Une liste de ces objets se trouve dans le Configuration de la redondance éditeur sur le Zones enregistrées languette.

Pour plus d'informations, consultez : Général

Synchronisation au démarrage du système de redondance

Lorsque le deuxième automate est démarré, les données de redondance (avec AREA_INPUT type de zone de redondance) est copié en premier et une fois de l'automate actif vers le second automate programmable. Ensuite, l'automate passe en mode veille.

Cependant, vous pouvez désélectionner la valeur par défaut AREA_INPUT type de zone de redondance pour exclure des variables de la synchronisation.

Procédure. Exclusion d'objets de la synchronisation
  1. Dans le Configuration de la redondance éditeur, sur le Zones enregistrées onglet, cliquez sur l'onglet variables languette.

    Une liste d'objets (type Programme ou Liste des variables globales) est affiché ci-dessous Objet. Les objets activés sont sélectionnés pour la synchronisation et obtiennent ainsi le AREA_INPUT type de zone de redondance.

  2. Désactiver un objet.

    Exemple

    rdncy_img_settings_registered_areas.png

    Astuce

    Ceci est recommandé pour les données de diagnostic locales du bus de terrain ou pour un état de redondance local.

Synchronisation à chaque cycle de tâche

Lorsque le fichier de configuration du système d'exécution (*.cfg) contient l'entrée suivante, une synchronisation est déclenchée à chaque démarrage d'un cycle de tâche.

[CmpRedundancy]
DataSyncAlways=1

Les variables de PROGRAM objets et listes de variables globales dont le type de zone de redondance est AREA_INPUT sont affectés.

Exemple 8. Exemple
PROGRAM PLC_PRG
VAR
    b: INT;
END_VAR

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

Le b La variable est incrémentée uniquement dans l'automate actif. Comme les données du système de redondance sont synchronisées avec chaque cycle de tâches, la variable de redondance est transférée en continu au



Synchronisation à la demande

Si le fichier de configuration du système d'exécution (<rts name>.cfg) ne contient pas l'entrée DataSyncAlways=1, il peut être préférable de déclencher une synchronisation par programme dans le code CEI.

Pour ce faire, appelez le RedundancySynchronizeData() fonction dans votre code CEI. Alors les variables avec le AREA_INPUT type de zone de redondance sont synchronisés. Par conséquent, vérifiez les paramètres sur le Zone enregistrée onglet sur le variables languette. L'opération de copie est effectuée au début du cycle de la tâche.

Exemple 9. Exemple

En mode actif/veille, b la variable est incrémentée dans l'automate actif. bUpdateData est réglé, une synchronisation des données est déclenchée une fois et la valeur est transférée au second automate.

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


Synchronisation de l'API actif à l'API de secours à chaque cycle de tâche

Les données de redondance de type AREA_SYNCHRO peuvent être transférés en cours de fonctionnement dans chaque cycle de tâche de l'automate actif vers l'automate passif. La taille des données est limitée pour cela. L'affectation du type n'est pas prise en charge dans CODESYS, mais doit être fait par programme en tant que rappel de la AreaRegister fonction.

La zone doit être enregistrée avant le début de l'application. Il est trop tard pour enregistrer des zones au premier cycle. C'est pourquoi l'enregistrement se fait dans le callback du cbDownloadDone événement système.

Exemple 10. Exemple
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();

L'appel de cbDownloadDone est effectué lorsque le OnlineChangeDone événement système se produit. Les événements système sont ajoutés à la configuration de la tâche.

rdncy_img_task_configuration_redundant.png


Astuce

Notez que le AreaRegister La fonction est masquée dans certaines versions de la bibliothèque de redondance mais peut toujours être appelée.

Synchronisation de l'API de secours à l'API actif à chaque cycle de tâche

Les données de redondance de type AREA_PASSIVE peuvent être transférés en cours de fonctionnement dans chaque cycle de tâche de l'automate passif vers l'automate actif. La taille des données est limitée pour cela. L'affectation du type n'est pas prise en charge dans CODESYS, mais doit être fait par programme en tant que rappel de la AreaRegister fonction.

La zone doit être enregistrée avant le début de l'application. Il est trop tard pour enregistrer des zones au premier cycle. De ce fait, l'enregistrement se fait dans le callback du cbDownloadDone événement système (de la même manière que dans exemple du chapitre précédent).

Exemple 11. Exemple
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();

L'appel de cbDownloadDone est effectué lorsque le OnlineChangeDone événement système se produit. Les événements système sont ajoutés à la configuration de la tâche.

rdncy_img_task_configuration_redundant.png


Synchronisation de la minuterie

La valeur de la base de temps IEC est transférée de l'API actif à l'API de secours à chaque cycle de l'API. Cela affecte TIME, TON, et TOF. Les horaires du système (exemple : SysTimeGetMs) ne sont pas transférés et sont disponibles en heure locale sur chaque automate.

Réglage du délai pour la synchronisation des zones enregistrées

Pour définir une valeur appropriée pour Délai de synchronisation des zones enregistrées dans le Paramètres de redondance, vous pouvez d'abord le déterminer à l'aide d'une trace du système :

  1. Dans l'arborescence des appareils, ajoutez un Trace objet situé en dessous de l'objet de l'appareil.

  2. Dans le Paramètres de redondance sur le Général onglet, sélectionnez Enregistrez le temps de synchronisation nécessaire dans System Trace option.

  3. Charger et lancez l'enregistrement de la trace du système.

  4. La valeur par défaut du délai d'attente lors de la synchronisation SyncWaitTime est la valeur de StandbyWaitTime, qui à son tour est préréglée à une valeur de 30 ms.

    Si le set SyncWaitTime est trop court, le message suivant s'affiche dans le journal : « La synchronisation s'est terminée après % » PRI_UI32 « ms à cause de SyncWaitTime ».

    Quand le set Synchroniser le temps d'attente est suffisamment long, le SyncTime réellement requis est enregistré dans la trace du système. Vous pouvez essayer d'optimiser l'ensemble SyncWaitTime afin qu'il se rapproche le plus possible du SyncTime réellement requis.