[STEP7 v5] Copier une plage d'entrées périphériques dans les STAT d'un FB

Forum traitant des automates industriels de marque Siemens.
Répondre
Tartuffe
Asservi son premier moteur
Asservi son premier moteur
Messages : 21
Enregistré le : 06 févr. 2025, 09:22

[STEP7 v5] Copier une plage d'entrées périphériques dans les STAT d'un FB

Message par Tartuffe »

Bonjour,

En Step7 classique, j'ai créé un FB dans lequel je souhaite copier toute la plage d'entrées d'une carte de comptage dans les variables statiques.

Je pourrais mettre un BLKMOV avec en entrée P#E 280.0 BYTE 16 et en sortie une variable statique, mais ce que je veux c'est passer l'adresse de périphérie (280) via une entrée du FB car bien sure je compte appeler le FB plusieurs fois.
Je n'a pas trouvé la syntaxe qui fonctionne.

:?:
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 864
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes
Contact :

Re: [STEP7 v5] Copier une plage d'entrées périphériques dans les STAT d'un FB

Message par djé »

Salut,

Il faut passer par un pointeur de zone dans un bout de code en List,

Code : Tout sélectionner

 Explication
L  "idxAdress" 		//(idxAdress: variable DWord ou DINT en entrée de bloc = adresse que tu souhaites lire)
SLD 3 			// mise au format POINTER Siemens adres.bit et charger le pointeur dans l'ACCu
LAR1	 		// Charger le contenu de l'accumulateur 1 dans le registre d'adresse 1
L EW [AR1,P#0.0] 	//Charger la valeur du mot EW[idxAdress+0] et transférer dans ta variable STAT DWORD/DINT
T "Tag_Value0"
L EW [AR1,P#4.0] 	//Charger la valeur du mot EW[idxAdress+4] et transférer dans ta variable STAT
T "Tag_Value1"
L EW [AR1,P#8.0] 	//Charger la valeur du mot EW[idxAdress+8] et transférer dans ta variable STAT
T "Tag_Value2"
L EW [AR1,P#12.0] 	//Charger la valeur du mot EW[idxAdress+12] et transférer dans ta variable STAT
T "Tag_Value3" 
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 864
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes
Contact :

Re: [STEP7 v5] Copier une plage d'entrées périphériques dans les STAT d'un FB

Message par djé »

sinon en SCL:
#idxAdr: Input de type INT

#var0 := %EW(#idxAdr);
#var1 := %EW(#idxAdr+4);
#var2 := %EW(#idxAdr+8);
#var3 := %EW(#idxAdr+12);
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Tartuffe
Asservi son premier moteur
Asservi son premier moteur
Messages : 21
Enregistré le : 06 févr. 2025, 09:22

Re: [STEP7 v5] Copier une plage d'entrées périphériques dans les STAT d'un FB

Message par Tartuffe »

Merci pour le code,
je vais tester ça demain ;)
Tartuffe
Asservi son premier moteur
Asservi son premier moteur
Messages : 21
Enregistré le : 06 févr. 2025, 09:22

Re: [STEP7 v5] Copier une plage d'entrées périphériques dans les STAT d'un FB

Message par Tartuffe »

En fait, mes variables stat sont un UDT comprenant plusieurs types.

Pour les DINT ça fonctionne très bien:

Code : Tout sélectionner

      L     ED [AR1,P#8.0]
      T     #CPT.ENTREES.MEASURED_VALUE
Mais pour les BOOL est ce qu'il y a plus simple que de me taper du ligne à ligne?

Code : Tout sélectionner

      U     E [AR1,P#12.0]
      =     #CPT.ENTREES.POWER_ERROR
      U     E [AR1,P#12.1]
      =     #CPT.ENTREES.STS_READY
      ...
J'en ai 32 consécutifs, si je pouvais copier directement ED [AR1,P#12.0] à par tir de la variable #CPT.ENTREES.POWER_ERROR ça m'arrangerait bien.
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 864
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes
Contact :

Re: [STEP7 v5] Copier une plage d'entrées périphériques dans les STAT d'un FB

Message par djé »

Oui je comprends.
Tu peux tenter de transférer dans une variable temporaire ("tempVal" de type DWORD ) et ensuite avec un Block_Move balancer dans ta structure (Test.Info_i)

Code : Tout sélectionner

        
        L ID [ AR1 , P#0.0 ]
      T     #tempVal
      CALL  BLKMOV
         blk_type:=Any
         SRCBLK  :=#tempVal
         RET_VAL :=#ret_val
         DSTBLK  :=#test.Info_i

Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Tartuffe
Asservi son premier moteur
Asservi son premier moteur
Messages : 21
Enregistré le : 06 févr. 2025, 09:22

Re: [STEP7 v5] Copier une plage d'entrées périphériques dans les STAT d'un FB

Message par Tartuffe »

Merci, ça devrait le faire.
En tout cas il n'y a pas d'erreur de code, je testerai lundi en réel.
Répondre