Pour ma part, j'ai un FC Défauts/Alarmes par zone
Commence par faire un FB par zone avec un tableau d'alarmes déclaré dans la zone "static" du genre "Alarmes := ARRAY[0..1] OF WORD;"
Tu verras, c'est déjà plus sympa d'adresser ton bit en écrivant directement #Alarmes[0].%X3 que d'écrire "DB_ALARMES".Zone1.Alarmes[0].%X3
Ensuite tu crées un dernier FB qui va agréger tous les autres FB d'alarmes.
C'est lui qui va déclarer les zones (exemple Zone1 := FB_ALARMES_ZONE1, Zone2 := FB_ALARMES_ZONE2 ...).
C'est sur ce dernier FB que tu généreras un DB d'instance (que tu appelleras depuis l'OB1 par exemple).
Tu auras un joli DB qui ressemblera beaucoup à celui que tu veux saisir manuellement dans ta version (le "DB_ALARMES").
je code en ladder mes différentes conditions d'apparition des défauts et alarmes avec auto maintien pour mémoriser certain défauts acquittables uniquement via BP réarmement, et d'autres qui sont auto acquittés ou temporisé etc
Ce n'est pas comme ça qu'il faut faire la gestion des défauts.
Premièrement: génère la somme des alarmes (ce que tu appelles "synthèse"), elle te servira à bloquer tes modes de marche et d'arrêt de ton process.
Suffit de mettre 2 comparaisons "#Alarmes[0] <> 0" et "#Alarmes[1] <> 0" en OU vers une bobine.
Deuxièmement: en cas de front descendant du bouton d'acquittement, tu effaces ta table d'alarmes par un bloc MOVE à 2 sorties (soit mettre 0 dans #Alarmes[0] et #Alarmes[1])
Troisièmement: tu évalues uniquement l'apparition de chaque alarme.
Soit avec une bobine SET si tu veux que ton alarme soit acquittée
Soit avec une bobine normale si tu veux que ton alarme s'auto-acquitte
Après tu peux rajouter des tempos si tu veux (que tu instancieras directement dans le FB, les fameux blocs TON et TOF)
Tu ne t'occupes pas du RESET, c'est déjà fait dans la 2ème partie.
Personnellement mes alarmes font parties du bloc qui gère les modes de marche et d'arrêt (mode Auto / Manu, départ cycle, arrêt cycle, initialisation, machine en référence, en fin de cycle, états ...)
Mais ici je n'ai pas voulu trop t'embrouiller dans les explications ...
Regarde comment tu peux intégrer ça à tes MMA (un FB MMA commun à toutes les zones ?).
Si ton IHM n'est pas un SIEMENS (pourquoi, ça s'intègre bien dans TIA ?! tu te tires une balle dans le pied en choisissant autre chose), tu peux déclarer un tableau de BOOL pour les alarmes.
"Alarmes := ARRAY[1...32] OF BOOL;"
Et faire une boucle FOR en SCL pour faire la somme.
Et une autre boucle FOR pour reseter la table.
Ce sera moins performant que la version avec des WORD.
@+