Vai al contenuto
PLC Forum


Problema codice AWL


nwzah

Messaggi consigliati

Ciao forum,

 

ho un codice AWL che non vuole fare  ( o non può ) quello che gli viene detto ....

Probilmente c'è qualche gaff su codice, ma da non simpatizzantte dell AWL, non riesco a trovarla

 

In sintesi è la gestione di ricette su diverse stazioni ....

Ogni stazione ha un set di parametri che salvo in un ricettario dell'hmi

A pannello ho due bit il primo abilita la scrittura e l'altro la lettura su un DB di appoggio (DB4) inoltre due variabili dove deposito, sempre da HMI da quale o su quale stazione leggere o scrivere i dati 

Quindi se voglio archiviare le ricette sul ricettario dell'hmi, scelgo la stazione da leggere, scelgo il set dove depositare la ricetta sull'hmi e premo un tasto con la funzione " leggi ricetta dalla stazione "

In sequenza succede :

1 imposto il set del ricettario dove salvare la ricetta

2 leggo i valori della stazione ( DBSTAZ_nn )

3 scrivo tali valori sul db di appoggio  ( DB4 )

4 scrivo i valori del DB4 sul set del ricettario scelto 

 

Questo funziona

 

Ho un problema in senso opposto,

quando devo scrivere i valori del set sul ricettario sul DB4 che dopo successivamente trasferirò nel di di stazione .... questo proprio non va .... :( 

 

Questo è il codice 

 U     "Abil.Scrit.Ric."
      SPB   www
      U     "Abil.Lett.Ric."
      SPB   rrr

rrr:  L     "Appoggio per ricette".Numero_read
      L     10
      +I    
      T     #reg_provv                  // DB dati di stazione of read
      SPB   rr

www:  L     "Appoggio per ricette".Numero_write
      L     10
      +I    
      T     #reg_provv                  // DB dati di stazione  of write

rr:   L     P##Dati_stazione            // Costruzione puntatore in formato ANY
      LAR1  
      L     B#16#10                     // System-Code.ID
      T     B [AR1,P#0.0]

      L     B#16#4                      // Datatype word
      T     B [AR1,P#1.0]

      L     43                          // Number of words to Copy
      T     W [AR1,P#2.0]

      L     #reg_provv                  // DB-Nr of Source Datablock
      T     W [AR1,P#4.0]

      L     P#DBX 0.0                   // Begin at DBX0.0
      T     D [AR1,P#6.0]
      U     "Abil.Scrit.Ric."           // con la stazione in manuale
      SPB   writ
      U     "Abil.Lett.Ric."
      SPB   read
      BEA   

read: CALL  "BLKMOV"
       SRCBLK :=#Dati_stazione
       RET_VAL:=#reg_provv
       DSTBLK :=P#DB4.DBX 10.0 WORD 43
      R     "Abil.Lett.Ric."
      BEA   

writ: CALL  "BLKMOV"
       SRCBLK :=P#DB4.DBX 10.0 WORD 43
       RET_VAL:=#reg_provv
       DSTBLK :=#Dati_stazione

      R     "Abil.Scrit.Ric."
      BEA   
 

 

Allego anche uno stamp del test .... non capisco perché "rrr" è sempre in esecuzione ...

 

Grazie dell'aiuto.

cod.png

Link al commento
Condividi su altri siti


semplice

siccome che ci sia o non ci sia il flag M135.7 tu vai sempre a rrr e con il risultato logico = 1!

AWL non fa come dice lui, fa come dici tu! (detto da uno che l'AWL l'ha imparato nel 1984 e di bastonate sulla schiena da AWL ne ha prese tante)

 

Dopo l'istruzione di salto SPB rrr

prova a mettere un bel BEA e vedrai che va come un treno......

:lol:

Link al commento
Condividi su altri siti

Ciao, è normale che rrr sia sempre in esecuzione se non hai ne il bit di scrittura, ne il bit di lettura.

Prova così:

      U     "Abil.Scrit.Ric."
      SPB   www
      U     "Abil.Lett.Ric."
      SPB   rrr

      BEA

 

Se non hai ne uno ne l'altro, vai alla fine del blocco.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...