Frank681 Inserito: 14 maggio 2014 Segnala Share Inserito: 14 maggio 2014 Salve Qualcuno sa darmi un idea di come memorizzare 3 dati in un DB , i dati sono data , ore , minuti , moltiplicati per 31 poiché devo fare un report con questi dati prima a fine mese.. Pensavo di creare un DB globale con un array di 31 righe e 3 colonne e scatenando un evento giornaliero con OB10 , fare si che i dati attuali mi vengano messi nel db storico , e' una buona idea in che modo posso realizzarla. Grazie mille Link al commento Condividi su altri siti More sharing options...
ken Inserita: 14 maggio 2014 Segnala Share Inserita: 14 maggio 2014 non è molto chiao cosa devi realizzare. devi memorizzare la data ora e minuti in un db. poi cosa te ne fai? hai la variabile date and time. con sfc20 la scrivi in un db e poi aumenti il puntatore al prossimo inidirizzo utile. Link al commento Condividi su altri siti More sharing options...
Frank681 Inserita: 15 maggio 2014 Autore Segnala Share Inserita: 15 maggio 2014 Ciao Assieme alla data nel db devo anche memorizzare ore e minuti di funzionamento della macchina per quel giorno , pensavo infatti di creare un array con una riga per ogni giorno e li memorizzare i dati , mi e' venuta la malsana idea di memorizzarli in un DB sql , da supervisore , non e' per caso possibile anche da PLC ? esiste nel PLC il modo di recuperare il giorno del mese ? Grazie mille Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 15 maggio 2014 Segnala Share Inserita: 15 maggio 2014 (modificato) Ciao, I dettagli del formato DATE_AND_TIME che ti ritorna SFC1 li trovi quì: http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&objId=22819915&load=treecontent&lang=en&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&viewreg=WW In particolare il giorno del mese è il terzo byte (occhio che è in BCD). Per calcolare l'intervallo di funzionamento di un'apparecchiatura quarda quì: http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&objId=29598009&nodeid0=10805055&load=treecontent&lang=it&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&viewreg=WW non e' per caso possibile anche da PLC ? Memorizzare una DB in un Database SQL è una cosa estremamente semplice. Ovviamente non puoi lanciare una query direttamente da PLC, ma puoi usare alcuni servizi di interfaccia degli HMI commerciali o scrivere un programmino ad hoc. Io personalmente uso un programma che ho scritto tempo fa, abbastanza complesso come funzionalità ma che si basa su un principio molto semplice : trasformare una DB (o parte di essa) in una query di testo "digeribile" da qualunque SQL Server. Tutto si basa su un nodo XML contenuto in un file di configurazione che contiene la query "template" e descrive la posizione ed il formato dei campi nella DB. Ti faccio un esempio: <Station Name="OP10" Block="100"> <Query> INSERT INTO OP10_Results( [IdMaterial], [OutDateTime], [Stroke] [Torque] [Result], [CycleTime]) VALUES( '$DATAMATRIX', $OUT_DATE, $STROKE, $TORQUE, $RESULT, $CYCLE_TIME) </Query> <Item Type="S7Chars" Offset="0" Length="10" Meta="$DATAMATRIX"/> <Item Type="S7DT" Offset="10" Format ="YYYY-MM-DD'T'HH:non:SS.ZZZ" Meta="$OUT_DATE"/> <Item Type="S7Real" Offset="18" Precision="3" Meta="$STROKE"/> <Item Type="S7Real" Offset="22" Precision="1" Meta="$TORQUE"/> <Item Type="S7Int" Offset="26" Meta="$RESULT"/> <Item Type="S7Real" Offset="28" Precision="1" Meta="$CYCLE_TIME"/> </Station> Il programma tramite Snap7 (ovviamente ) quando si accorge che una stazione ha qualcosa da memorizzare carica il blocco corrispondente (Block=100), poi per ogni item sostituisce il valore binario della DB con la sua rappresentazione testuale all'interno della query, sapendo ovviamente l'offset ed il tipo. Nell'esempio il terzo item è un real DB100.DD18 che diventerà qualcosa tipo 21.567 e verrà sostituito nella query alla metavariabile $STROKE. La stringa finale è una query di testo che possiamo passare direttamente ad un componente ADO.NET o ADO o qualunque altra libreria di accesso ai database. Come complessità alla fine non vai oltre una ricerca e sostituzione in una stringa, ma soprattutto una volta scritto, il programma lo riutilizzi sempre cambiando solo i files di configurazione XML. Davide Modificato: 15 maggio 2014 da dan64100 Link al commento Condividi su altri siti More sharing options...
beppo Inserita: 17 maggio 2014 Segnala Share Inserita: 17 maggio 2014 Ciao, io una volta avevo fatto una cosa simile. Mi sono creato 12 DB, una per ogni mese, il db1 "Gennaio" con dentro un array [1..31] Real, io dovevo salvare un valore in virgola mobile, db2 "Febbraio" con dentro un array [1..28] Real, db3 "Marzo" con dentro un array [1..31] Rea e cosi via... Dopo di che mi sono creato un puntatore Any da passare a DSTBLK all'Sfc20 BLKMOV. Quindi in SRCBLK sull'SFC20 ho messo la mia variabile real, e in destinazione la variabile puntatore. Usando l'SFC1 READ CLK mi sono ricavato mese e giorno corrente. Sul puntatore Any passavo come db il il numero mese (Byte 1 dell'sfc1) e come Byte.bit il numero giorno (Byte 2 dell'sfc1). Quindi ogni giorno alle 17 (confrontando 17 con il Byte 3 dell'sfc1) facevo il trasferimento del mio dato. Alla fine ti trovi la tua DB con il valore salvato. Non ti serve scrivere data e ora, perchè è gia scontato. Non so se sono stato abbastaza chiaro, è più facile farlo che spiegarlo. 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