Vai al contenuto
PLC Forum


Orario Da Cpu A Hmi


roberto8303

Messaggi consigliati

vorrei capire come poter leggere l orario dal plc ed indicarlo sul pannello hmi, i dispositivi sono sempre l s7 1200 cpu1212 e hmi ktp400.

nel plc ho settato l orario, ora vorrei visualizzarlo sul hmi, ho aperto il box RD-sys T per leggere l orario, mi chiede una variabile RET VAL ed un dato in formato DTL cosa indicano?

Poi nel hmi devo creare campo data/ora e indicare la variabile del plc quella inserita in RET VAL?

Link al commento
Condividi su altri siti


Ciao,un dato DTL è una variabile a 12 Bit che devi creare in un DB globale,nelle variabilo del plc credo non te lo faccia mettere.Il DB crealo in maniera compatibile con s 7 300 altrimenti potresti avere problemi!!Su questa variabile scrivi l'ora che legge la funzione RD-SYS T,a questo punto non devi far altro che creare sul pannello una casella campo i/o e fare il collegamento alla variabile del plc,sul pannello visualizzerai data e ora!!

Il ret val è un parametro che ti indica se ci sono stati errori nell'esecuzione del blocco credo.

Vedi se riesci e scusami se sono stato un pò vago ma non ho sotto mano il mio pc col programma della siemens e quindi vado a memoria....Ciao!! :thumb_yello:

Link al commento
Condividi su altri siti

Giuseppe Signorella

Una sola precisazione anche se superflua e sottintesa in aggiunta a quanto detto da luca_82, ovviamente in questo modo visualizzi solo l'ora e la data del PLC sul KTP, ma non sincronizzi quella del PLC.

Quella del KTP (che in genere viene visualizzato in alto a destra), continuerà a correre per i fatti sui perchè il KTP e il PLC hanno entrambi un RTC proprio.

Pertanto sul KTP (in alto a destra) visualizzerai sicuramente un'orario ed una data differente da quella che visualizzerai nella campo I/O.

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

grazie ad entrambi domani provo,pero' per la memoria dell orologio quello del plc dovrebbe rimanere in memoria un po di tempo?quella del hmi in alto a destra quando spengo il pannello e lo accendo l orario si azzera...

Link al commento
Condividi su altri siti

Giuseppe Signorella

Ti conviene far si che i due orari vengano sincronizzati. Che il KTP legga e sincronizzi la propria ora e data con quella del PLC.

Link al commento
Condividi su altri siti

Ti conviene far si che i due orari vengano sincronizzati. Che il KTP legga e sincronizzi la propria ora e data con quella del PLC.

Anche perché potresti poi trovare imbarazzanti differenze tra l'orario visualizzato e lo storico allarmi che normalmente si sincronizza sul terminale.

Link al commento
Condividi su altri siti

DB crealo in maniera compatibile con s 7 300 altrimenti potresti avere problemi!!Su questa variabile scrivi l'ora che legge la funzione RD-SYS T

allora ho creato il db compatibile con s7 300, in esso ho creato la variabile chiamata ''ora'' sotto la voce static, formato DTL e mi esce la data 1970-1-1 ecc ecc questi dati sono anche messi in lista verticalmente.

Poi nel MAIN OB1 ho messo il blocco RD SYS e dove c è la voce OUT ho messo la variabile ora del blocco dati 1, ma esce selezionato rosso come errore. dove sbaglio?

Modificato: da roberto8303
Link al commento
Condividi su altri siti

Fatto funziona, sul pannello vedo l orario, però sia sul data block nella variabile hour che ovviamente sull hmi mi segna un ora indietro come mai? come faccio a portarlo all ora esatta?

eppure ho messo acquisisci data e ora dal pg e li si trova l orario!!

Modificato: da roberto8303
Link al commento
Condividi su altri siti

Giuseppe Signorella

Se guardi nelle istruzioni, noterai che esistono due istruzioni per leggere l'ora della CPU

RD_SYS_T= Leggi ora del sistema

RD_LOC_T=Leggi ora locale.

Devi impostare prima il fuso orario/legale e poi utilizza l'istruzione RD_LOC_T per Leggere l'ora locale.

Link al commento
Condividi su altri siti

Ora dovrei fare un'altra cosa, mi servirebbbe segnalare sul pannello, ad ogni ora una scritta Es Fase1 poi Fase2...cosi via fino all ora 24.

Avevo pensato di leggere dal plc l ora e con il confronto vero attivare il merker corrispondente, questo merker nel pannello hmi mi attiva un testo. ovviamente avro 24 merker... :blink: è possibile farlo? oppure c è qualcosa direttamente da plc, cioe sposto in una variabile il nome "Fase1" poi alla seconda ora Fase2...e cosi via...Ovviamente nel hmi avro solo una variabile come campo I/O che cambia a secondo della variabile creata nel plc.

Quindi riassumendo, è possibile nel plc s7 1200 caricare in una variabile una parola formata da lettere e numeri??se si con quale procedura?

Link al commento
Condividi su altri siti

Giuseppe Signorella
possibile nel plc s7 1200 caricare in una variabile una parola formata da lettere e numeri??se si con quale procedura?

Non ho ben capito cosa tu voglia dire con il termine parola. Se ti riferisci ad una word,(parola) oppure al significato puro della terminologia "parola" nella lingua italiana.

Se una variabile contiene numeri e lettere stiamo parlando sicuramente di una stringa, oppure di una variabile espressa in forma esadecimale, ma ritengo da ciò che vuoi fare tu, che stiamo parlando di una stringa. La stringa è un array di char.

ovviamente avro 24 merker.

Se tu hai da eseguire 24 fasi lavorative con cadenza oraria, (una ogni ora) Io sul display metterei una label con su scritto "fase" visto che la parola fase non cambia ma, e di fianco in una campo I/0 farei apparire il numero della fase in lavorazione, che per comodità potrebbe essere l'ora. Ad esempio se la fase 17 ha inizio alle 17.00 in punto, fai visualizzare nel campo I/O l'ora dell'inizio della fase. Appunto le 17. Se invece hai la numerazione delle fasi sfalsate tutte nella medesima maniera, ad esempio alle 17 devi fare la lavorazione della fase 15, puoi fare l'ora meno 2. (ovviamente ricordati di convertire l'ora nel formato che a te necesita).

Se invece vuoi far apparire il nome della lavorazione, ad esempio "fase: Lavaggio", Lasciando sempre la label con su scritto "fase" fissa, puoi crearti un array di tipo stinga, con una indicizzazione di 24 elementi, ed utilizzi sempre l'ora di avvio di quella fase di lavorazione come indice dell'array per richiamarti la stringa corrispondente.

Per il resto, non so esattamente cosa tu stia facendo, se per ipotesi, devi crearti delle lavorazioni uguali ma con tempistiche differenti, puoi sempre crearti degli array, sempre da 24 elementi, dove memorizzi all'interno di essi i valori che ti necessitano di volta in volta, senza la necessità di crearti dei confronti (i tuoi famosi 24 merker) e con la medesima modalità di richiamo dell'indice precedentemente indicato, te li sposti nelle variabili necessarie. In tal modo realizzi un programma molto snello e con poche istruzioni presenti.

Poi tutto dipende da cosa stai facendo e da come la vuoi fare.

Ciao

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

ok allora mi spiego meglio...

Lasciamo stare il fatto dell orario, quando attivo un merker voglio caricare una parola esempio "lunedi1" su una variabile del plc e voglio visualizzarla letteralmente cosi sul pannello hmi.Il fatto della stessa parola non è cosi, mi servirebbe ogni volta cambiare parola esempio: lunedi1,martedi2...ecc ecc come si fa a scrivere lunedi2 in una variabile?

Link al commento
Condividi su altri siti

Giuseppe Signorella

L'istruzione per muovere una stringa è S_MOVE (Muovi stringa).

Per realizzare ciò che vuoi fare, creati un array di tipo stinga, metti in essa tutti i giorni della settimana.

Ti leggi il giorno corrente con l'istruzione RD_SYS_T. Il dato restituito dall'istruzione è espressa in numero e lo puoi utilizzare come indice dell'array "1(Domenica) a 7(Sabato)".

A questo punto la strade da percorrere, è la seguente:

Leggi l'ora della CPU la converti in stringa,e la ragruppi al giorno, e poi fai la visualizzare (ad esempio leggi giorno 3=Martedì, leggi ora, ad esempio= 17 ed unisci martedi+17=martedi17)

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

ahhh noo non ci siamo!!! non riesco a farti un esempio giusto, la parola non deve essere letta nell orologio rtc del plc.deve solo apparire ad un certo giorno ad una certa ora.

la parola la devo scrivere io facciamo che non è lunedi come ho detto,ma è roberto1 poi giuseppe2 ecc ecc quindi non esiste nel plc e ne nel hmi.

Link al commento
Condividi su altri siti

Giuseppe Signorella
ahhh noo non ci siamo!!! non riesco a farti un esempio giusto, la parola non deve essere letta nell orologio rtc del plc.deve solo apparire ad un certo giorno ad una certa ora.

la parola la devo scrivere io facciamo che non è lunedi come ho detto,ma è roberto1 poi giuseppe2 ecc ecc quindi non esiste nel plc e ne nel hmi.

Già detto nel precedente post.

Al verificarsi di un evento, usi l'istruzione S_MOVE per muovere una determinata stringa nella variabile che poi utilizzerai per la visualizzazione nell'HMI.

Le stringhe o le metti sempre in questo benedetto array, oppure ti crei 100.000 istruzioni move.

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

ok benissimo,quindi una stringa ha il formato di una word, il box per richiamarla è s.mov, e come la scrivo la parola in esadecimale o proprio a lettere alfabetiche?non l ho mai utilizzata... :(

Modificato: da roberto8303
Link al commento
Condividi su altri siti

Giuseppe Signorella
quindi una stringa ha il formato di una word

??????????????????

Ma tu i post non li leggi?

La stringa è un array di char.

Per maggior precisione, il primo elemento è la lunghezza massima, il secondo la lunghezza reale, e dal terzo elementi sono i caratteri che compongono la stringa.

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

purtroppo li leggo troppo velocemente quando sono a lavoro, comunque non riesco a seguirti devo vedere su un manuale cosa è un array una stringa ecc ecc insomma devo studiarmeli prima un po in generale e poi nello specifico posso chiedere qui per utilizzarli nella 1200... ;)

Link al commento
Condividi su altri siti

ok risolto anche questo, con S move carico proprio una parola in string nel db1 in un altra variabile. Ora un altra domanda, visto che visualizzo questa db1 nell hmi in un campo I/O è possibile nascondere un campo I/0 con un merker? cioe renderlo visibile con m0.0 on e non visibile con m0.0=off.

Link al commento
Condividi su altri siti

Si ma il fatto è che su visibilita c è il nome della variabile e poi area e bit singolo, perche bit singolo non permette di selezionarlo esce scritto oscurato?...avrei voluto inserire la variabile del bit relativo al merker ed il valore che va da 0 ad 1...

Link al commento
Condividi su altri siti

Giuseppe Signorella

Mi sembra che tu abbia scaricato il mio esempio inerente al cambio pagine del KTP. In quell'esempio vi è una finestra che emula un popup. Per fare ciò viene utilizzata la proprietà visibilità degli oggetti.

Se dai un'occhiata a quell'esempio capirai come utilizzare tale proprietà.

Mi sembra che tu abbia scaricato il mio esempio inerente al cambio pagine del KTP. In quell'esempio vi è una finestra che emula un popup. Per fare ciò viene utilizzata la proprietà visibilità degli oggetti.

Se dai un'occhiata a quell'esempio capirai come utilizzare tale proprietà.

Link al commento
Condividi su altri siti

  • 4 weeks later...

ciao a tutti, sono al punto 7 di questa discussione, come hai fatto a risolvere il problema della variabile del db in roso, e cosa hai messo su ret val

ciao a tutti

Link al commento
Condividi su altri siti

Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...