Vai al contenuto
PLC Forum


variabili


delga.jo

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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.

 

Link al commento
Condividi su altri siti

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?

Link al commento
Condividi su altri siti

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?

 

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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?

Link al commento
Condividi su altri siti

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 

 

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

  • 3 weeks later...

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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

  • 3 weeks later...

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.

 

 

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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.

 

 

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