onire77 Inserito: 30 novembre 2018 Segnala Inserito: 30 novembre 2018 Salve a tutti, devo collegare uno strumento multifuzione NEMO della IME tramite profibus ad un S7-1500. Ho installato il file gsd ed ho visto che lo strumento mi mette a disposizione un'area di memoria da PED0 a PED124. Vorrei copiare questi valori in una DB con 32 DWord consecutive, mi chiedevo se ci fosse un comando per copiare l'intero blocco in una volta sola, senza dover ricorrere a 32 istruzioni MOVE. Ho provato con MOVE_BLK ma non accetta come parametro di ingresso PED0. Grazie
mirko.trevenzoli Inserita: 3 dicembre 2018 Segnala Inserita: 3 dicembre 2018 Per leggere un'area (es. tutta la comunicazione da un azionamento verso il plc) uso il dprd_dat, mentre per inviargli tutta la parte in scrittura uso il dpwr_dat.
onire77 Inserita: 6 dicembre 2018 Autore Segnala Inserita: 6 dicembre 2018 Ciao Mirko, ti ringrazio per la risposta, però non ho capito come si fa con dprd_dat ad indicargli il numero di byte da recuperare. Tra le funzioni legacy ho trovato BLKMOV, come parametro gli devo passare il primo indirizzo ed il numero di byte es. P#I100.0 BYTE 128 mi sembra semplice da usare, ma essendo una funziona ereditata dal S7 300 forse non è il modo ottimale, o sbaglio?
ken Inserita: 6 dicembre 2018 Segnala Inserita: 6 dicembre 2018 tramite hw_id. premi f1 sul blocco e ti appaiono le istruzioni. nel 1500 da una versione di tia in poi non si usano più gli indirizzi fisici ma si usa l'hardware id che è un numero assegnato a quella periferia. l'harware id viene assegnato in configurazione hardware e lo trovi anche nei simboli. drag and drop e lo porti nel blocco.
mirko.trevenzoli Inserita: 6 dicembre 2018 Segnala Inserita: 6 dicembre 2018 confermo, la cosa importante è che l'area di origine e di destinazione siano uguali
mirko.trevenzoli Inserita: 7 dicembre 2018 Segnala Inserita: 7 dicembre 2018 Intendo come dimensione.
onire77 Inserita: 7 dicembre 2018 Autore Segnala Inserita: 7 dicembre 2018 Grazie ad entrambi, credo di aver capito, appena ho la possibilità di fare qualche test direttamente sul hw reale lo testo 🤩
onire77 Inserita: 7 dicembre 2018 Autore Segnala Inserita: 7 dicembre 2018 Ho visto che c'è anche l'istruzione RD_REC, che differenza c'è con DPRD_DAT? Ovvero quando usare l'una e quando l'altra? Inoltre DPRD_DA legge i dati coerenti, ovvero? Lo so sono tante domande, ho letto un po' di documentazione, ma mi ha solo confuso le idee. Grazie
mirko.trevenzoli Inserita: 7 dicembre 2018 Segnala Inserita: 7 dicembre 2018 Per farti un esempio, supponi di dover comunicare con un dispositivo profinet remoto. Di tale dispositivo dovrai installare il GSDML file . Supponi ora che come comunicazione di proponga es 20 byte, dove i primi 2 byte possono essere lo stato , e gli altri 18 byte dei valori divisi come meglio credi. Andrai a stendere la tua DB rispettando tale divisione , perciò a fine stesura la tua db rispecchierà in pieno quanto hai letto da manuale, quindi 20 byte etc etc. Ora , in un passaggio solo , col DPRD_DAT sposti tutti i 20 byte proveniente da tale dispositivo alla db. Probabilmente leggendo il manuale , troverai degli altri parametri che non sono contemplati nella comunicazione sopra descritta, e che di solito sono indicati in una tabella dove una delle voci è "profinet index" Se vorrai cambiare tali parametri ( e probabilmente il costruttore del dispositivo non ha inserito tali parametri nella comunicazione standard o ciclica sopra descritta, perché tali parametri vanno cambiati con meno frequenza o sono di minor uso comune) dovrai usare il WR_REC per scriverli e il RD_REC se li vorrai leggere. Tale comunicazione , che chiameremo "aciclica" , sarà eseguita solo su tua richiesta, e non ad ogni ciclo plc come quella ciclica. Spero di essermi spiegato.
dimo2474 Inserita: 26 dicembre 2018 Segnala Inserita: 26 dicembre 2018 (modificato) Ciao usa Poke_BLK Cerca la funzione nell’aiuto con F1 ci sono i codici per cambiare l’area sorgente e destinazione se l’area di destinazione è una Db non deve essere ad accesso ottimizzato altrimenti non funziona . Count nel tuo caso 4x32 POKE_BLK(area_src := 16#81, //Memory area for inputsdbNumber_src := 0, //dbNumber of I/O area is equal to 0.byteOffset_src := 0, //read from the first bytearea_dest := 16#84,//Memory area for DBdbNumber_dest := 3,//number of DBbyteOffset_dest := 0, //Write from the first bytecount := #number * 2 //Number of bytes); Modificato: 26 dicembre 2018 da dimo2474
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