Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Comparazione Interi Decimale Vs Esadecimale


Messaggi consigliati

Inserito:

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?


Inserita:

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.

Inserita:

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

  • 3 weeks later...
Inserita:

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

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