Page 1 sur 1

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

Posté : 02 oct. 2025, 10:55
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.

:?:

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

Posté : 02 oct. 2025, 18:06
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" 

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

Posté : 02 oct. 2025, 18:22
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);

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

Posté : 07 oct. 2025, 09:11
par Tartuffe
Merci pour le code,
je vais tester ça demain ;)

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

Posté : 08 oct. 2025, 08:38
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.

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

Posté : 08 oct. 2025, 10:59
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


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

Posté : 10 oct. 2025, 16:05
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.