Vai al contenuto
PLC Forum


Programmatore Orario, Come Eseguire La Conversione?


ambro00793

Messaggi consigliati

ciao a tutti,

devo realizzare per la prima volta un software che includa la possibilità di attivare delle uscite a determinati orari;

sò che l'argomento è stato trattato molte volte, ed infatti mi sono informato ed ho provato a fare qualche prova, ma purtroppo non sono riuscito, vi spiego cosa ho fatto:

p.s. programma tutto in KOP

da OB1 ho inserito una sfc1 che in uscita mi trasferisce il risultato in un database con tipo date and time

poi tramite una fc5 separo l'ora dalle altre informazioni

il dato in uscita da fc5 lo chiamato md10

ora, vedendo altri post online, ho inserito un blocco move per trasferire md10 a mw15

poi ho inserito il confronto da numeri interi a 16 bit tra mw15 e mw20 che imposto da wincc

ma il sistema non funziona, in entrata al blocco di comparazione vedo valori che non corrispondono all'uscita del blocco move.

cosa ho sbagliato?

inoltre in wincc per l'inserimento dell'ora di confronto, volevo chiedere come andrebbe scritta l'ora e i minuti in modo corretto

vi ringrazio anticipatamente, cordiali saluti.

Andrea Ambrosini

Link al commento
Condividi su altri siti


ciao,

io quando ho necessità di fare queste cose faccio così

- con sfc1 estraggo data e ora dal plc e la ottengo in formato date_and_time

il formato date_and_time è fatto da una variabile di 8 byte così composta:

byte 0 = anno

byte 1 = mese

byte 2 = giorno

byte 3 = ora

byte 4 = minuti

byte 5 = secondi

byte 6 = Due cifre più significative di MSEC

byte 7 = Cifre meno significative di MSEC

byte 8 = giorno della settimana

quello di cui devi tenere conto è che il formato del dato contenuto in questi byte è BCD

a questo punto banalmente puoi comparare i singoli byte che ti interessano

esempio in awl

il merker m10.0 si deve accendere se l'ora è uguale o maggiore delle 10,30

stabiliamo che il dato date_and_time sia db10.dbd0

U(

L db10.dbb3

L B#16#10

>=I)

U(

L db10.dbb4

L B#16#30

>=I)

= M10.0

Per farlo in kop

la prima cosa è non si possono comparare i byte in kop

quindi dovresti fare degli spostamenti da byte in word dei byte di ore e minuti

se poi vuoi fare tutto in decimale, invece che in bcd devi convertire ore e minuti in decimale ( in awl istruzione BTI)

ultima cosa se vuoi puoi comparare in un colpo solo ore e minuti

trasferendo i relativi byte in una unica word

saluti da Valvolina

Link al commento
Condividi su altri siti

ciao,

ti ringrazio per l'aiuto che mi hai dato!

alla fine per risolvere questo mio problema ho creato un blocco funzionale solo per gli orologi, e quindi lo messo tutto in awl utilizzando e adattando il tuo codice.

mille grazie, ciao.

Andrea Ambrosini

Link al commento
Condividi su altri siti

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