olaffo Inserito: 7 marzo 2013 Segnala Inserito: 7 marzo 2013 Salve, sto realizzando un progetto in cui devo confrontare una data con un valore impostato da un operatore da HMI. Per recuperare il minuto corrente attuale utilizzo RRTC_DT (DTCorrente_DT); DTCorrente_ARR := DT_to_Arint(DTCorrente_DT); MinutoCorr := and(DTCorrente_ARR[2], 16#00ff); che mi restituisce un intero in rappresentazione esadecimale. lo devo confrontare con il minuto impostato dall'operatore e faccio così: if MinutoCorr = Minuto then................... ma non va bene poiché la variabile "minuto" è rappresentato in decimale. Mi manca un passaggio e non riesco a capire quale. Potete aiutarmi?
batta Inserita: 7 marzo 2013 Segnala Inserita: 7 marzo 2013 Io non conosco i PLC Schneider, ma sei sicuro che il valore sia in esadecimale e non in BCD? Voglio dire, il minuto 59 lo leggi come 0059 (che se fosse in esadecimale, trasformato in decimale diventerebbe 89), non come 003B. Se è così, devi solo fare la conversione da BCD a decimale.
olaffo Inserita: 7 marzo 2013 Autore Segnala Inserita: 7 marzo 2013 Grazie batta, credo sia proprio così. Devo fare dei test che ora non posso fare, ma il quadro è proprio come lo hai descritto tu. non avrei saputo spiegarmi meglio. Grazie
nibble Inserita: 27 marzo 2013 Segnala Inserita: 27 marzo 2013 Per rilevare in modo diretto la data e l'ora potresti anche usare i registri di sistema %SW49-50-51... (guarda nell'. di Unity). In particolare, quello che contiene ora e minuti è il %SW51=16#hhmm. Con un'operazione di questo tipo (minuti:=%SW51 and 16#00FF) puoi estrarre direttamente il valore del registro di sistema (mascherando la parte alta e recuperando solo la parte bassa) e poi convertirlo da BCD in INT. Potresti implementare il codice seguente per recuperare l'intero Oro-Datario: (* ============== AZIONE DI LETTURA ============ *) (* LETTURA SECONDI *) secondi:=BCD_TO_INT(SHR(%sw50,8)AND 16#00FF); (* LETTURA MINUTI *) minuti:=BCD_TO_INT(%SW51 AND 16#00FF); (* LETTURA ORA *) ora:=BCD_TO_INT(SHR(%SW51,8) AND 16#00FF); (* LETTURA GIORNO *) giorno:=BCD_TO_INT(%SW52 AND 16#00FF); (* LETTURA MESE *) mese:=BCD_TO_INT(SHR(%sw52,8)AND 16#00FF); (* LETTURA ANNO *) anno:=BCD_TO_INT(%SW53); Bye
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