Page 1 sur 1

Copie des bits de DB dans des variables WORD

Posté : 19 janv. 2018, 00:50
par sinced
Bonsoir à tous,
Etant donné que WinCC impose l'utilisation des variables de type INT/WORD pour la déclaration d'alarmes, je souhaiterais avoir votre avis/solution à ma difficulté.
J'ai un bloc de données DB1 ARRAY de UDT (ma structure de données UDT dans laquelle il y a un bit d'alarme).

Image

Dans chaque élément de tableau pour chaque entrée TOR, j'ai la variable DI_Alarm qui est en fait sensé déclencher une alarme TOR si cette variable est à 1.
Pour chaque élément de mon DB1, j'ai un bit d'alarme. Sauf que je ne peux pas l'utiliser dans WinCC V14 comme alarme puisqu'on impose une variable de type INT pour une alarme TOR.

J'ai fait remonter cette structure de données sur TIA Portal parceque j'ai des faceplates qui utilisent la même structure de données.

Je souhaite donc copier les bits de ma structure de données dans des variables de types INT, et remonter ces variables sur WinCC pour définir mes alarmes. Comment faire ? Je sens que le SCL va sûrment être obligatoire mais peut être vous avez déjà été confrontés au même problème.

Re: Copie des bits de DB dans des variables WORD

Posté : 19 janv. 2018, 08:08
par Quentin27
je sais pas combien d'alarme tu as, mais je pense qu'il faut que tu écrives tes bits d'alarmes dans un mot.

Je m'explique:
Imaginons que tu as 32 alarmes.

tu écris tes variables d'alarmes dans un tableau de bit:

Code : Tout sélectionner

//Ecriture des alarmes dans un tableau de bit
#Alm[1] := DB_DI.DI.DI[1].DI_ALARME
#Alm[2] := DB_DI.DI.DI[2].DI_ALARME
#Alm[3] := DB_DI.DI.DI[3].DI_ALARME
...
...
...
#Alm[32] := DB_DI.DI.DI[32].DI_ALARME

Ensuite tu écris un mot suivant ton tableau d'alarme:

Code : Tout sélectionner

//Ecriture du mot d'alarme
#Mot_alm := 0;
FOR #i := 0 TO 31
DO
    IF #Alm[#i]
    THEN
        #Mot_alm := #Mot_alm OR 16#0001;
    END_IF;
    #Mot_alm := ROR(IN := #Mot_alm , N := 1);
END_FOR;
Voilà, maintenant tu as un mot avec tes 32 alarmes, donc 1 bit = 1 alarmes.
Ton DB_DI.DI.DI[1].DI_ALARME sera sur le bit 0 du mot #Mot_alm.

Donc, si ton mot vaut 1, ton bit 1 est activé, si il vaut 2, ton bit 2 est activé, si il vaut 3 tes bits 1 et 2 sont activés etc...

Voilà j’espère t'avoir aidé.
Si tu as des questions je suis dispo, c'est une méthode, sûrement que quelqu'un d'autre en aura une autre :D.
il y a autant de façon de coder qu'il y a d'automaticien ^^.

Re: Copie des bits de DB dans des variables WORD

Posté : 19 janv. 2018, 08:40
par sinced
Je te remercie infiniment.
Je vais mettre ca dans la logique, ta solution répond a mon besoin.
Pour ecrire les variables d'alarmes je compte passer par une boucle en faisant varier i.

Re: Copie des bits de DB dans des variables WORD

Posté : 19 janv. 2018, 09:15
par Quentin27
sinced a écrit : 19 janv. 2018, 08:40 Je te remercie infiniment.
Je vais mettre ca dans la logique, ta solution répond a mon besoin.
Pour ecrire les variables d'alarmes je compte passer par une boucle en faisant varier i.
Oui pour la boucle, je n'y ai même pas pensé... *se fouette* :D

Re: Copie des bits de DB dans des variables WORD

Posté : 19 janv. 2018, 09:25
par itasoft
slts,
ceci dit, c'est pas comme ça que l'on traite le problème:
l'entrée alarme la copier dans ta structure et en même temps dans un bit d'un mot spécifique ALARMES
commencer par se structurer soi même, LOL

Re: Copie des bits de DB dans des variables WORD

Posté : 19 janv. 2018, 09:28
par sinced
Itasoft, le bit DI[1].DI_ALARM est en fait la condition qui doit declencher l'alarme.
Ce bit existe dans un DB DI lui meme etant un tableau d'une structure UDT.
L'idee est de creer un nouveau tableau qui ne contient que des alarmes et de recopier ces alarmes dans des mots qui seront utilises sur WinCC.

Re: Copie des bits de DB dans des variables WORD

Posté : 19 janv. 2018, 09:31
par itasoft
slrs,
OK,
j'avais compris que c’était une entrée TOR qui déclenchais l'alarme

Re: Copie des bits de DB dans des variables WORD

Posté : 19 janv. 2018, 09:48
par sinced
itasoft a écrit : 19 janv. 2018, 09:31 slrs,
OK,
j'avais compris que c’était une entrée TOR qui déclenchais l'alarme
L'entree TOR est deja traitee dans un bloc FB qui s'occupe du filtrage et de la gestion du masquage d'alarme. Le bit d'alarme est bien le DI[1].DI_ALARM