Copie des bits de DB dans des variables WORD

Forum traitant des automates industriels de marque Siemens.
Avatar de l’utilisateur
sinced
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1230
Inscription : 13 oct. 2015, 16:56

Copie des bits de DB dans des variables WORD

Message 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.
Quentin27
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 118
Inscription : 13 sept. 2016, 08:39

Re: Copie des bits de DB dans des variables WORD

Message 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 ^^.
Avatar de l’utilisateur
sinced
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1230
Inscription : 13 oct. 2015, 16:56

Re: Copie des bits de DB dans des variables WORD

Message 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.
Quentin27
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 118
Inscription : 13 sept. 2016, 08:39

Re: Copie des bits de DB dans des variables WORD

Message 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
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Copie des bits de DB dans des variables WORD

Message 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
Automaticien privé (de tout)
itasoft@free.fr
Avatar de l’utilisateur
sinced
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1230
Inscription : 13 oct. 2015, 16:56

Re: Copie des bits de DB dans des variables WORD

Message 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.
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Copie des bits de DB dans des variables WORD

Message par itasoft »

slrs,
OK,
j'avais compris que c’était une entrée TOR qui déclenchais l'alarme
Automaticien privé (de tout)
itasoft@free.fr
Avatar de l’utilisateur
sinced
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1230
Inscription : 13 oct. 2015, 16:56

Re: Copie des bits de DB dans des variables WORD

Message 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
Répondre