Vai al contenuto
PLC Forum


Indicizzazione Dato Date And Time Da Db


mennys

Messaggi consigliati

Salve tutti!Sapreste dirmi per caso come si scrive in kop il formato date and time di una db?

Devo impostare l'ora da pannello operativo usando l'sfc0(set clock) ma non resco i a scrivere il dato in ingresso preso da una db.

Spero abbiate capito..Grazie a tutti e buona serata :blink:

Link al commento
Condividi su altri siti


Sono ancora io ho paura non abbiate capito perchè mi sembra di non essermi spiegato bene.

Il mio problema è di richiamare un dato in formato DATE and TIME presente in una db.

Come per un word si deve scrivere per richiamarla all'ingresso di un blocco DB1.dbw0 ad esempio

qual'è il formato per richiamare un dato di tipo date and time?? DB1.d.....

Così mi sembra di essermi spiegato un attimino meglio..

Grazie e arrivederci

Link al commento
Condividi su altri siti

mennys,

Il dato in uscita all'FC1 , deve per forza essere in formato DATE_TIME , come vuole la sintassi, tale dato poi non può essere trattato come un comune dato semplice , byte,word,int, ma è una via di mezzo tra un dato semplice ed uno complesso (dato composto).

Quindi , devi creare una variabile TEMP , nell'ambiente di interfaccia del blocco, dopo di che lo usi per contenere il dato dell'orologio.

Poi usando un puntatore , vai a scrivere nella DB di appoggio tale valore, o la parte di esso che ti interessa, conoscendo la composizione del formato.

NOSC: CALL  "READ_CLK"
       RET_VAL:=#NotUse
       CDT    :=#PLC_DATE_TIME

      LAR1  P##PLC_DATE_TIME
      L     LB [AR1,P#0.0]              //Refresh Year
      T     DB1.DBB    0
      T     DB1.DBB    8
      L     LB [AR1,P#1.0]              //Refresh Month
      T     DB1.DBB    1
      T     DB1.DBB    9
      L     LB [AR1,P#2.0]              //Refresh Day
      T     DB1.DBB    2
      T     DB1.DBB   10
      L     LB [AR1,P#3.0]              //Refresh Hour
      T     DB1.DBB    3
      T     DB1.DBB   11
      L     LB [AR1,P#4.0]              //Refresh Minutes
      T     DB1.DBB    4
      T     DB1.DBB   12
      L     LB [AR1,P#5.0]              //Refresh Seconds
      T     DB1.DBB    5
      T     DB1.DBB   13

Ciao

Ivan

Link al commento
Condividi su altri siti

se guardi nella libreria di S7 nella Standard Library -> IEC function block

inoltre troverai diverse FC (in particolare FC3,6,7,8) per la costruzione di data e ora attraverso le normali variabili Word e Double word. In generale poi ci sono molte FC per fare confronti tra variabili tipo DT, TOD e DATE.

Quello che ha detto kamikaze ti è già sufficiente, io ti dico solo cose in più che magari ti potrebbero servire od anche solo per curiosità.

Per finire aggiungo che se guardi l'. di sfc0 ed sfc1 (seleziona e premi F1) trovi tutto spiegato molto bene con esempi sorgenti ecc. ecc.

Link al commento
Condividi su altri siti

Scusatemi, sarà l'ora tarda ma solo ora rileggendo il post , mi rendo conto che l'esempio parlava di FC0. :(

Vale lo stesso discorso per il formato , tipo e composizione del dato.

Per il codice è così:

      LAR1  P##PLC_DATE_TIME
      L     DB1.DBB    0
      T     LB [AR1,P#0.0]              //Refresh Year
      L     DB1.DBB    1
      T     LB [AR1,P#1.0]              //Refresh Month
      L     DB1.DBB    2
      T     LB [AR1,P#2.0]              //Refresh Day
      L     DB1.DBB    3
      T     LB [AR1,P#3.0]              //Refresh Hour
      L     DB1.DBB    4
      T     LB [AR1,P#4.0]              //Refresh Minutes
      L     DB1.DBB    5
      T     LB [AR1,P#5.0]              //Refresh Seconds

      CALL  "SET_CLK"
       PDT    :=#PLC_DATE_TIME
       RET_VAL:=#NotUse

Per comporre il dato nel formato richiesto devi sempre usare un puntatore , prima di trasferirlo all'orologio.

Ciao

Ivan

Link al commento
Condividi su altri siti

Non usi l'indirizzo numerico ma quello simbolico. Se vuoi scrivere direttamente una variabile Date and Time di un DB in una funzione iEC lo devi fare così.

Non sarà perciò: DBxx.DBWXX ma sarà quello simolico. perciò se il db è nel programma lo puoi fare benissimo come ho detto, se il db è generato nella CPU devi fare come detto da kamikaze

Link al commento
Condividi su altri siti

Grazie a tutti per i consigli.

Penso che la risposta che fa per me sia l'ultima,quella di Ken, in quanto il dato Date e Time da trattare risiede in una DB che io devo scrivere come ingresso nell'FC0.

Per scrivere in modo simbolico si intende ad esempio se la mia DB simbolicamente si chiama TAB1 e il dato in formato date e time si chiama DataOra all'ingresso dell'SFC0 dovrei scrivere TAB1.DataOra.

Ho capito bene??

Grazie

Link al commento
Condividi su altri siti

Per scrivere in modo simbolico si intende ad esempio se la mia DB simbolicamente si chiama TAB1 e il dato in formato date e time si chiama DataOra all'ingresso dell'SFC0 dovrei scrivere TAB1.DataOra.

Ho capito bene??

Sì , hai capito bene.

      CALL  "SET_CLK"
       PDT    :=DB3.DateTime            //      Indirizzo simbolico DBxx.NomeSimbolicoVariabile
       RET_VAL:=#NotUse

Ciao

Ivan

Link al commento
Condividi su altri siti

  • 1 year later...

Ho letto in alcune riviste che le lampade ad incandescenza andranno presto in pensione (2012) dando spazio a delle lampade di ultimaa generazione ...le lampade a basso consumo!

Perciò in futuro sostituendo le lampade ad incadescenza con quelle a basso consumo (25W pari a 1000 lumen) non è meglio mettere un MT da 6A anzichè da 10A? (solo per la linea luce)

Grazie

Link al commento
Condividi su altri siti

Mauro Dalseno

Ti conviene lasciare il magnetotermico da 10A, in caso di guasto dell' impianto di illuminazione ti farebbe lo stesso servizio, la protezione per sovraccarico sulle lampade non serve (non andranno mai in sovraccarico).

Link al commento
Condividi su altri siti

Devi lasciare il 10A se la linea è dimensionata peer quello.Come dice giustamente Mauro su un circuito luci non potrai avere un sovraccarico ma potresti avere un cortocircuito e in caso di cc un 6A curva C e un 10A curva C intervengono praticamente alla stessa maniera.

Link al commento
Condividi su altri siti

semmai sara' utile inserire un fusibile di protezione dopo ogni interruttore.

le lampade a risparmio DOVREBBERO avere incorporata una resistenza fusibile , ma mi e' capitato di vederne una esplosa e intervento del magnetotermico generale.

ivano65

Link al commento
Condividi su altri siti

Anche a me è capitato di sentire una bomba e lo scatto tempestivo del MT per queso avevo pensato di ridurre l'intensità di orrente mettendo un mt da 6 o 8A

Provvederò all'utilizzo dei fusibili

Grazie

Link al commento
Condividi su altri siti

  • 7 years later...

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