jlancelot82 Inserito: 16 ottobre 2014 Segnala Share Inserito: 16 ottobre 2014 (modificato) Snap7 non ha a disposizione i simboli del programma, per cui può accedere solo a DB1.DBD0. Buongiorno a tutti, prima di tutto, Dan ho avuto modo in questi giorni di apprezzare l'incredibile lavoro che hai fatto con snap7, veramente complimenti!! Approfitto dell'argomento per chiederti qualche informazione. Sto lavorando con una S7 connessa a degli inverter Sinvert della Siemens. Sarei interessato ad ottenere i valori di produzione e so che in fase di programmazione della plc tali valori sono stati dichiarati con simboli come "DB401.DBX0.0", "DB401.DBX14.0", ed altri. è possibile attraverso Snap7 ricavare tali valori attraverso il loro "nome simbolico"? Ci sono delle librerie che posso utilizzare? Grazie mille anticipatamente!! Max Modificato: 16 ottobre 2014 da jlancelot82 Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 17 ottobre 2014 Segnala Share Inserita: 17 ottobre 2014 Ciao Max. No, Snap7 attualmente lavora solo con parametri numerici, ho avuto molte richieste per poter accedere alla memoria by literal, non è escluso che la implemento nella prossima major release. Per ora hai due strade. Se tutte le variabili sono predeterminate ti converti a mano l'indirizzo, cioè da DB401.DBX0.0 ottieni: DBNumber=401 Start=0 Amount=1 (ogni bit occupa un byte) WordLen=S7WLBit da DB401.DBX14.0 hai Start=14 e così via. Oppure, se hai un numero elevato di variabili magari in un file e che possono anche cambiare puoi scrivere un mini parser, cioè una funzione che accetta in input una stringa e produce in output i parametri che servono per chiamare DBRead/Write o Read/WriteArea. Ricorda infine che, se hai molti bit da leggere/scrivere e hai problemi di performances puoi usare Read/WriteMultivars che ti permettono di accedere a 20 variabili diverse contemporaneamente (con lo stesso telegramma). Davide Link al commento Condividi su altri siti More sharing options...
jlancelot82 Inserita: 17 ottobre 2014 Autore Segnala Share Inserita: 17 ottobre 2014 Grandioso!! Ho risolto con la prima soluzione, convertendo gli indirizzi a partire dal valore "letterale". Quello che mi mancava era proprio il riferimento sullo "start". Grazie mille Davide! Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 17 ottobre 2014 Segnala Share Inserita: 17 ottobre 2014 Un po' meno grandioso il secondo esempio che ti ho fatto Quando lavori con i bit il parametro Start (l'offset) è espresso in bit, in questo modo puoi "spazzolare" tutti i bit di tutta la DB. Per cui DB401.DBX14.0 ha Start = 14*8+0 = 112 Link al commento Condividi su altri siti More sharing options...
jlancelot Inserita: 17 ottobre 2014 Segnala Share Inserita: 17 ottobre 2014 Per fortuna non ho la necessità di leggere molti parametri, mi occorrono solo i byte in corrispondenza di valori ben precisi di cui ho il valore simbolico. Per altro li devo leggere con un periodo di qualche secondo quindi è andato benissimo il primo esempio. Ho utilizzato il metodo Cli_DBRead, con i parametri giusti c'è voluto veramente un attimo!! 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