Jump to content
PLC Forum


delga.jo

variabili

Recommended Posts

delga.jo

ciao, volevo sapere se, dopo aver definito le variabili in ingresso, nella sezione variabili plc, si potevano, tramite qualche funzione a trasformare tutte quante in un colpo solo in un array di una db

Share this post


Link to post
Share on other sites

batta

Se intendi che vuoi creare un array di bool con il commento che corrisponde a quello degli I/O, ti basta fare un copia/incolla dei commenti.

Se, al posto di un array, fai una STRUCT, sempre con copia/incolla puoi copiare anche i nomi degli I/O, e non solo i commenti.

Se, ancora, intendi che vorresti scrivere tutti gli stati degli ingressi in un array di un DB e, viceversa, scrivere le uscite copiandole da un array del DB,

vedi le istruzioni SCATTER, SCATTER_BLK, GATHER, GATHER_BLK.

Se, invece, vuoi che nel programma, scritto utilizzando gli I/O, vengano automaticamente sostituiti gli I/O con le variabili del DB, questo non si può fare.

 

Per il futuro, se invece che porre la domanda in modo così sintetico descrivi meglio quello che vuoi, possiamo dare risposte migliori.

 

Share this post


Link to post
Share on other sites
delga.jo

per esempio, io scrivo le mie variabili in ingresso: i0.0; i0.1; i0.2

è possibile tramite una funzione trasportare tutte e tre le variabili in una db senza doverlo fare uno ad uno?

Share this post


Link to post
Share on other sites
batta

Ma è questo "trasportare in un db" che non mi è chiaro.

Vuoi scrivere lo stato degli ingressi nelle variabili del DB?

O vuoi dare alle variabili del DB lo stesso nome degli ingressi?

 

Share this post


Link to post
Share on other sites
delga.jo

scrivere lo stato degli ingressi nelle variabili del db, che nel mio caso avranno lo stesso nome, ho provato con move_blk, ma posso solo fare immettere array, mentre facendo blkmove con un segmento scl mi prende anche le variabili di qualsiasi tipo di dati. l'unica cosa è che non so come mettere giu la scrittura in scl.

spero di essermi spiegato

Share this post


Link to post
Share on other sites
batta

Allora sembra tu non abbia letto attentamente la mia prima risposta.

Prova con le istruzioni SCATTER e GATHER.

Riesci a trasferire 8, 16, 32, 64 ingressi od uscite consecutivi.

Share this post


Link to post
Share on other sites
delga.jo

Questo vale anche se ad esempio ho %IW236 ?? o le Uint non vanno bene ? 

 

Share this post


Link to post
Share on other sites
batta

Scatter e Gather vanno bene per trasferire variabili da 8, 16, 32, 64 bit in array o strutture di pari dimensione (e viceversa).

Se vuoi appoggiare a variabili nei DB anche gli ingressi analogici, usa dei MOVE

Se cerchi un comando per trasferire in un unico colpo tutta l'immagine degli ingressi in un DB, non esiste.

Domanda: ma perché stai cercando di fare questa cosa?

Share this post


Link to post
Share on other sites
delga.jo

perché ho piu stazioni di lavoro con le stesse variabili di ingresso e di uscita in quanto hanno lo stesso tipo di telecamera, facendo cosi potevo creare un array con stesse variabili ma per piu stazioni, dando a ciascuno il valore di ingresso senza dover scrivere tutto uno per uno 

 

Share this post


Link to post
Share on other sites
acquaman

Metti gli IO come parametri di ingresso ed uscita al tuo blocco, se fai un simbolico ben fatto tutte le telecamere avranno lo stesso nome cambiando solo un dato es (Camera 1 Ready; Camera 2 Ready; ecc ecc) poi prendi il tuo blocco, gli metti gli IO della camera 1, copi il blocco e fai un trova sostituisci tra Camera 1  e Camera 2 ecc ecc.

 

Gioco fatto.

Share this post


Link to post
Share on other sites
batta

Allora stai sbagliando strada.

Creati un tipo di dati per gli ingressi e uno per le uscite della telecamera.

Poi, nella tabella delle variabili, crei una variabile "IN_Telecamera_1" (metti il nome che vuoi, ovviamente), come tipo scegli il tipo di dati che hai creato per gli ingressi, e come indirizzo metti l'indirizzo del primo ingresso.
Lo stesso fai per le uscite.

A questo punto, nei blocchi funzione della telecamera dichiari in ingresso una variabile col tipo di dati relativo agli ingressi, e in uscita una variabile col tipo di dati delle uscite.
In questo modo alla funzione colleghi in un colpo solo tutti gli ingressi e tutte le uscite.

E risparmi anche il tempo di mettere giù uno per uno gli ingressi e le uscite per tutte le telecamere, perché fai sempre riferimento al tipo di dati.
Se modifichi il tipo di dati, automaticamente si modifica tutto.

 

Altra possibilità è l'utilizzo di DPRD_DAT e DPWR_DAT, che ti permettono di leggere e scrivere interi pacchetti dalla periferia.

 

In entrambi i casi, gli ingressi (e le uscite) devono essere tutti consecutivi ma, se stai comunicando con un dispositivo, è per forza così.

 

Se avessi spiegato subito cosa dovevi fare, avresti risparmiato tempo.

Share this post


Link to post
Share on other sites
acquaman
Quote

 

Altra possibilità è l'utilizzo di DPRD_DAT e DPWR_DAT, che ti permettono di leggere e scrivere interi pacchetti dalla periferia

 

Se sono collegate in profibus/profinet.

Share this post


Link to post
Share on other sites
delga.jo

va bene grazie sono riuscito a risolvere, comunque si sono tutte collegate in profinet

Share this post


Link to post
Share on other sites
batta

Di solito, quando uno risolve dice anche come.

Share this post


Link to post
Share on other sites
delga.jo

si, scusate ma ho avuto da fare, comunque ho usato la funzione fill che mi è servita per poter lavorare con delle db piuttosto che con gli ingressi

Share this post


Link to post
Share on other sites
batta
Quote

ho usato la funzione fill che mi è servita per poter lavorare con delle db piuttosto che con gli ingressi

 

Ripeto...

Secondo me, hai affrontato il problema nel modo sbagliato.
Ci sono soluzioni molto più corrette, eleganti e pratiche.

Share this post


Link to post
Share on other sites
Marco Fornaciari

Appunto i MOVE, se serve coadiuvati dagli AND e OR logici.

 

P:S:

Sono fondamentali di un PLC.

Share this post


Link to post
Share on other sites
dperla

Salve,

anche io di norma faccio una rimappatura degli I/O su DB, sia che siano I/O fisici direttamente collegati al PLC, sia se provengono da dispositivi collegati, ad esempio, in profibus/profinet (tramite DPRD_DAT e DPWR_DAT).

Ovviamente dipende sempre da cosa e come si vuole fare. Per quanto mi riguarda, è un approccio che mi permette di lavorare ad un livello leggermente più alto rispetto al livello fisico.

Spesso mi è capitato che venga modificato il cablaggio. In questo modo vado a modificare solo in un punto, sulla mia mappa.

 

 

Share this post


Link to post
Share on other sites
batta
29 minuti fa, dperla scrisse:

Spesso mi è capitato che venga modificato il cablaggio. In questo modo vado a modificare solo in un punto, sulla mia mappa.

Nei miei programmi capita molto raramente che un ingresso o una uscita vengano richiamati più di una volta.
Adotto però una strategia diversa: o li utilizzo come parametri IN/OUT di funzioni, o li appoggio a variabili (temp o stat, a seconda dei casi) all'interno della funzione.
Appoggiare tutti gli I/O su DB, specialmente ora che si lavora praticamente solo in simbolico (quindi, in caso di modifiche al cablaggio, basta sistemare l'indirizzo nella tabella delle variabili e tutto il programma si "riaggiusta" da solo), mi pare un passaggio in più. Ma è una questione di abitudini.

Share this post


Link to post
Share on other sites
dperla
2 ore fa, batta scrisse:

Nei miei programmi capita molto raramente che un ingresso o una uscita vengano richiamati più di una volta.
Adotto però una strategia diversa: o li utilizzo come parametri IN/OUT di funzioni, o li appoggio a variabili (temp o stat, a seconda dei casi) all'interno della funzione.
Appoggiare tutti gli I/O su DB, specialmente ora che si lavora praticamente solo in simbolico (quindi, in caso di modifiche al cablaggio, basta sistemare l'indirizzo nella tabella delle variabili e tutto il programma si "riaggiusta" da solo), mi pare un passaggio in più. Ma è una questione di abitudini.

Sicuramente l'uscita la scrivo solo una volta ☺️

 

Sì... questione di "standard personale", diciamo che ci sono arrivata dopo aver applicato diversi "stili".

 

Il bello del nostro lavoro è quello di interfacciarsi con altri modi di ragionare e di risolvere lo stesso problema.

Abbiamo la possibilità di crescere e di migliorarci.

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...