Vai al contenuto
PLC Forum


Puntatori Awl


zoz

Messaggi consigliati

Non capisco come mai nel 2012 si voglia ancora ostinarsi a programmare i puntatori in awl

E chi si ostina a programmare in AWL?

Se devo fare delle cose che in SCL risultano più facili, utilizzo SCL senza pensarci un attimo.

Ma se, in una funzione dove va bene l'AWL, devo usare un puntatore, non mi spavento di certo.

C'è anche da dire che l'editor SCL di Step7 non è il migliore in assoluto. In questo senso, sono stati fatti dei buoni passi avanti nel TIA Portal (che detesto per quasi tutto il resto).

Link al commento
Condividi su altri siti


l'editor non e' il massimo , ma col simulatore plc fai presto a debuggare .

Si certo se devi usare puntatori awl usali mica ti sto dicendo che non puoi usarli ahahahah

ciao

walter

Link al commento
Condividi su altri siti

Devo ammettere che la gestione puntatori in s7-200 e' molto piu veloce di step7 , in s7-200 e' come in C , "&" e " * " ...

E' ancora frutto dell'eredità TI..... :wacko:

Link al commento
Condividi su altri siti

si infatti e' Texas Instruments , s7-200 e microwin non sono produzione tedesca , erano diversi anche i processori che li componevano .

ciao

Walter

Link al commento
Condividi su altri siti

  • 7 months later...
Brancaleone_2000

Salve a tutti,

sono nuovo nel forum.

Ho iniziato di recente ad usare l'indiirzzamento dinamico in Step7, dopo aver letto le parti della guida online al riguardo e qualche esmpio di programmazione trovato fra programmi precedenti.

Girando per i vari forum sull'argomento mi sono imbattuto in questa istruzione del post 18 di questa discussione :

L P##P_Buffer

non l'ho mai trovata, né in programmi esistenti né nella documentazione online.

Significa per caso che #P_Buffer è un dato locale a doppia parola e che può quindi essere interpretata come puntatore ?

Inoltre, nell'FB di una mia applicazione ho bisogno di caricare in AR1 l'indiirzzo della prima variabile di un array dichiarato nel relativo blocco di istanza (quindi in STAT).

Posso per caso usare allo scopo l'indirizzo che la variabile occupa nel realtivo blocco dati (che poi è quello che si vede nella stessa tabella di dichiarazione delle variabili dell'FB) ?

O c'è un modo idverso per farlo ?

Qualcuno può darmi qualche delucidazione ?

Grazie

Link al commento
Condividi su altri siti

#P_Buffer è una qualsiasi variabile dichiarata nell'interfaccia delle variabili della funzione, e potrebbe essere una variabile di qualsiasi tipo.

Con l'istruzione

L P##P_Buffer

carichi nell'accumulatore l'indirizzo della variabile #P_Buffer.

Inoltre, nell'FB di una mia applicazione ho bisogno di caricare in AR1 l'indiirzzo della prima variabile di un array dichiarato nel relativo blocco di istanza (quindi in STAT).

Posso per caso usare allo scopo l'indirizzo che la variabile occupa nel realtivo blocco dati (che poi è quello che si vede nella stessa tabella di dichiarazione delle variabili dell'FB) ?

O c'è un modo idverso per farlo ?

Per caricare nel registro indirizzi l'indirizzo di una variabile dichiarata nell'interfaccia delle variabili della tua funzione (che sia o meno la prima di un array non ha alcuna importanza), ti basta scrivere:

L P##NomeVariabile

LAR1

Oppure:

LAR1 P##NomeVariabile

Link al commento
Condividi su altri siti

  • 2 weeks later...
Brancaleone_2000

Grazie Batta, mi sono state utili le tue indicazioni.

La mia applicazione, nella quale uso un array di word, funziona. Ho comunque un dubbio:

Attualmente accedo dinamicamente agli elementi dell' array di word mediante l'indicizzazione dei rispettivi indirizzi

occupati dagli elementi dell'array nel relativo blocco dati di istanza DI della mia FB, con istruzioni del tippo L DIW [AR1,P#0.0] e T DIW [AR1,P#2.0].

C'è in Step7 per caso modo di fare la stessa cosa indicizzando lo stesso indice fra parentesi quadra dell'array ?

Inaltre parole, se il mio array di word dichiarato in STAT è FIFO Array [0..32] Of Word, cè modo di indicare dinamicamente gli

indici [0..32] ?

Chiedo questo perché leggendo la guida online sulle variabili array sembra che l'unico modo in cui poter accedere ad un elemento

di array sia del tipo L FIFO [x] con x di volta in volta costante, o mi sfugge qualcosa .?

Grazie e saluti

Link al commento
Condividi su altri siti

In AWL puoi scrivere:

L DIW[adr]

dove "adr" è una doppia word che contiene l'indirizzo della variabile.

Per puntare ad una variabile dell'array indicando l'indice della variabile, potresti fare come segue:


	  L	 #id						 //Indice variabile dell'array

	  SLD   4						   //Shift a sx di 4 bit per variabili a 16 bit

	  L	 P##DIWxxx			  //Carica indirizzo inizio array

	  +D								//Somma l'indirizzo relativo

	  T	 #Adr						//Il risultato è l'indirizzo della variabile


	  L	 DIW [#Adr]

	  ...

	  ...

Per fare quello che vorresti fare come lo vorresti fare, devi usare l'SCL.

Link al commento
Condividi su altri siti

  • 2 years later...

Ciao a tutti!

Sono un nuovo "programmatore PLC" e con gli indirizzi di memoria faccio ancora confusione, nonostante sto cercando di informarmi il più possibile.

Io volevo creare una funzione che dato un DB in ingresso (INDB) mi ritorna l'indirizzo del massimo valore presente nella DB. Nella mia DB sono presenti solo valori DWORD

 

MD80 = Merker utilizzato per muoversi nel DB

MD84 = Merker che utilizzo per salvarmi il massimo valore


      AUF   #INDB


      L     DBD [MD 80]
      L     MD    84
      <D                                //Se TMAX è minore di DB salta
      SPB   jump

      L     DBD [MD 80]
      T     MD    84                    //Trasferisci TMAX in OUT

// non so cosa scrivere


jump: L     MD    80
      L     32
      +D    
      T     MD    80

 

Spero che qualcuno mi possa aiutare. 

Grazie in anticipo

 

Link al commento
Condividi su altri siti

Accodarsi a discussioni, specialmente quando son ferme da anni, non è ammesso dal regolamento: si crea confusione nelle eventuali risposte.

Se vuoi apri una nuova discussione sull'argomento.

Link al commento
Condividi su altri siti

  • Livio Orsini locked this discussione
Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...