Vai al contenuto
PLC Forum


Puntatori


forna

Messaggi consigliati

Salve a tutti!!! Qualcuno sa come creare un puntatore con un plc 1200??

Ho Tia 13 sp1 update 2 ( :thumbdown::thumbdown::thumbdown: bug a palate)

Ed avrei bisogno di recuperare da n+1000 word e spostarle in m+1000 word...ovviamente m e n variano, per farvi capire meglio, volevo abbandonare il metodo delle mie ricette in cui muovo varie struct, volevo semplificare la cosa (se volessi aggiungere delle ricette in più oltre che a ricreare altre struct devo aggiungere se n=1 muovi nella struct 1 ecc)

Potete aiutarmi?

Link al commento
Condividi su altri siti


ma ce l'hai installato il pacchetto scl ?

Ricette, struct, puntatori.....mi sembra una gran confusione...stai parlando di plc o di hmi o che altro?

Link al commento
Condividi su altri siti

devo aggiungere se n=1 muovi nella struct 1 ecc

Crea un array di strutture e metti il tuo indice "n" tra parentesi quadre per puntare alla struttura desiderata.

Poi ti basta usare l'istruzione MOVE. Lo puoi fare anche in KOP.

L'istruzione4 MOVE con copia solo byte, word e dword, ma anche interi array o strutture. Basta che sorgente e destinazione siano identici.

Link al commento
Condividi su altri siti

dott.cicala, sto parlando di PLC, le ricette sull'hmi non le metterò mai e poi mai grazie batta, avevo creato varie struct in array però non sapevo come creare un puntatore, per dire se ho n nella w1 e m nella w2 per spostare la ricetta n nella m mi basta fare un MOVE In: Ricetta[w1] Out Ricetta[w2] ??

Link al commento
Condividi su altri siti

non posso usare direttamente la w1 ma una variabile locale!

Non ho detto questo. Anzi, l'usi di variabili locali in questo caso non mi sembra per nulla appropriato.

Ma forse si tratta solo di una idea sbagliata su cosa siano le variabili locali.

Le variabili locali sono variabili che dichiari come TEMP nell'interfaccia delle variabili di un blocco di programma (OB, FC, FB).

Queste variabili hanno vita solo all'interno della funzione in cui sono state dichiarate. Inoltre, oltre ad essere "locali", son anche "temporanee".

Ovvero, una volta che esci dalla funzione l'area di memoria ad esse dedicata viene considerata libera e quindi a disposizione per variabili temporanee di un altro blocco.

Questo implica che se assegni un valore ad una variabile temporanea, al successivo richiamo della funzione la variabile non avrà conservato il valore precedentemente assegnato.

Per la soluzione del tuo problema devi invece utilizzare variabili di Data Block (DB).

Link al commento
Condividi su altri siti

Ciao,

mi intrometto, perchè credo di aver capito cosa vuol dire Forna ed è capitato anche a me con una versione vecchia del TIA (forse la 12 ...): se come indice gli passo una variabile definita in un blocco DB, non lo accetta (non ricordo l'errore esatto); se, invece, appoggio detta variabile ad una locale dello stesso tipo ed uso quella come indice dell'array, non segnala alcun errore; dalla versione 13 non ho più avuto quel problema.

Link al commento
Condividi su altri siti

Grazie 10mila allora...solitamente le utilizzavo quando dovevo fare sempici conversioni o scalarizzazioni non mi ero mai accorto di questo metodo di funzionamento, che le potessi usare solo nel rispettivo fc si, ma che poi l'area di memoria venisse utilizzata per altre cose no, non si smette mai di imparare!!

Ancora Grazie!


Ciao Drugo! Il mio problema è che volevo usare una word int, non sapevo che bisognasse utilizzare una data block, purtroppo conosco l'ambiente siemens per quelle piccole automazioni che facciamo la mia formazione non è approfonditissima.

Poi ad ogni versione di tia portal mezze cose non funzionano più, e quelle che non funzionavano prima rifunzionano :toobad:

Link al commento
Condividi su altri siti

Forse c'è ancora un po' di confusione.

Vediamo se riesco a chiarire con un esempio.

Supponiamo che la ricetta sia costituita dalle seguenti variabili (non importa di che tipo):

- Farina

- Uova

- Acqua

- Sale

- Lievito

Per una rapida e semplice copia delle ricette si può procedere come segue:

Creare un DB con la seguente struttura

- Lavoro (struct)

e con un array di strutture

- Ricetta (Array 1..100) of struct

Le strutture saranno tutte identiche, e conterranno le variabili Farina, Uova, Acqua, sale e Lievito.

Per comodità si potrebbe preparare la struttura in un "Tipo di dati" (l'equivalente degli UDT in Step 7 classico).

Nel DB posso quindi dichiarare:

- Lavoro (TipoDatiRicetta)

- Ricetta (array 1..100 of TipoDatiRicetta)

Poi ci serve una variabile da usare come indice ricetta.

Questa variabile può essere una MW, una variabile di un DB, una variabile TEMP, una variabile di ingresso di una funzione.

L'importante è che sia di tipo INT oppure DINT.

Esempio:

ID_Ricetta (INT)

Per salvare i parametri in lavoro in una ricetta basta usare l'istruzione MOVE alla quale si collega in ingresso:

"NomeDB_Ricette".Lavoro

e in uscita:

"NomeDB_Ricette".Ricetta[iD_Ricetta]

Operazione inversa per trasferire una ricetta dall'archivio ricette in lavoro.

Tutto estremamente semplice e funzionale.

Spero di essere stato chiaro.

Modificato: da batta
Link al commento
Condividi su altri siti

le ricette sull'hmi non le metterò mai e poi mai

Evvai !!! :thumb_yello:

Non ci ho mai capito molto in fatto di ricette. :senzasperanza:

Ho sempre creduto che una ricetta potesse contenere più set di dati....mai fatte in plc dopo S5...se ho 300 "ricette" con 300 real vengono dei DB-oni.

Link al commento
Condividi su altri siti

Giuseppe Signorella

Batta, come al solito ....spiegazione eccellente.

complimenti davvero.

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

Grazie Batta, la gestione delle ricette con i puntatori l'avevo già fatta su Omron uguale identica a quella da te descritta, solo che non sapendo come sfruttare i puntatori su siemens ed avendo sempre letto che si potevano usare solo con scl mi ero quasi arreso :)

Grazie Mille, come sempre questo forum è superiore a quello della siemes!

Link al commento
Condividi su altri siti

Ho sempre creduto che una ricetta potesse contenere più set di dati....mai fatte in plc dopo S5...se ho 300 "ricette" con 300 real vengono dei DB-oni.

Personalmente preferisco di gran lunga la gestione ricette fatta con HMI.

È già quasi tutto pronto all'uso, dall'editazione offline alla gestione dell'archivio e, da non trascurare, la lpossibilità di esportazione/importazione su chiavetta USB o altri supporti.

Ogni tanto però capita il cliente che vuole assolutamente le ricette nel PLC.

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...