delga.jo Inserito: 10 giugno 2019 Segnala Share Inserito: 10 giugno 2019 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 More sharing options...
batta Inserita: 10 giugno 2019 Segnala Share Inserita: 10 giugno 2019 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 More sharing options...
delga.jo Inserita: 10 giugno 2019 Autore Segnala Share Inserita: 10 giugno 2019 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 More sharing options...
batta Inserita: 10 giugno 2019 Segnala Share Inserita: 10 giugno 2019 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 More sharing options...
delga.jo Inserita: 11 giugno 2019 Autore Segnala Share Inserita: 11 giugno 2019 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 More sharing options...
batta Inserita: 11 giugno 2019 Segnala Share Inserita: 11 giugno 2019 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 More sharing options...
delga.jo Inserita: 11 giugno 2019 Autore Segnala Share Inserita: 11 giugno 2019 Questo vale anche se ad esempio ho %IW236 ?? o le Uint non vanno bene ? Link al commento Condividi su altri siti More sharing options...
batta Inserita: 11 giugno 2019 Segnala Share Inserita: 11 giugno 2019 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 More sharing options...
delga.jo Inserita: 11 giugno 2019 Autore Segnala Share Inserita: 11 giugno 2019 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 More sharing options...
acquaman Inserita: 11 giugno 2019 Segnala Share Inserita: 11 giugno 2019 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 More sharing options...
batta Inserita: 11 giugno 2019 Segnala Share Inserita: 11 giugno 2019 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 More sharing options...
acquaman Inserita: 11 giugno 2019 Segnala Share Inserita: 11 giugno 2019 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 More sharing options...
delga.jo Inserita: 12 giugno 2019 Autore Segnala Share Inserita: 12 giugno 2019 va bene grazie sono riuscito a risolvere, comunque si sono tutte collegate in profinet Link al commento Condividi su altri siti More sharing options...
batta Inserita: 12 giugno 2019 Segnala Share Inserita: 12 giugno 2019 Di solito, quando uno risolve dice anche come. Link al commento Condividi su altri siti More sharing options...
delga.jo Inserita: 28 giugno 2019 Autore Segnala Share Inserita: 28 giugno 2019 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 More sharing options...
batta Inserita: 29 giugno 2019 Segnala Share Inserita: 29 giugno 2019 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 More sharing options...
Marco Fornaciari Inserita: 29 giugno 2019 Segnala Share Inserita: 29 giugno 2019 Appunto i MOVE, se serve coadiuvati dagli AND e OR logici. P:S: Sono fondamentali di un PLC. Link al commento Condividi su altri siti More sharing options...
dperla Inserita: 16 luglio 2019 Segnala Share Inserita: 16 luglio 2019 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 More sharing options...
batta Inserita: 16 luglio 2019 Segnala Share Inserita: 16 luglio 2019 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 More sharing options...
dperla Inserita: 16 luglio 2019 Segnala Share Inserita: 16 luglio 2019 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora