Vai al contenuto
PLC Forum


Storico Allarmi


Frank681

Messaggi consigliati

Ciao Ragazzi

Mi piacerebbe sapere se possibile creare nel PLC un DB con lo storico degli allarmi ?

Normalmente lo crea sul supervisore ma stavolta mi hanno chiesto di farlo sul PLC . Magari un DB con denro un certo numero di righe che riportino data e ora e descrizione allarme , che una volta riempito all'arrivo di un nuovo allarme il più vecchio esca..

Spero di essermi spiegato

Se non ci sentiamoprima faccio a tutti , i migliori auguri di Buone Feste e Felice Anno..

Link al commento
Condividi su altri siti


certamente si,

dichiari 2 array globali di grandezza sufficiente a contenere il n° di allarmi (int) e le ore (dint)

quando si verifica un allarme:

fai un move block delle word nell'array di allarme "A" partendo dall'indirizzo 2

fai un move block delle dword nell'array delle ore "B" partendo dall'indirizzo 2

fai un move della word dell'allarme attuale nell'array "A" all'indirizzo 1

fai un move dell'ora attuale nell'array "B" all'indirizzo 1

per visualizzare sigolarmente puoi usare l'istruzione fieldread.

buone feste a tutti anche da parte mia

Modificato: da sonnyb
Link al commento
Condividi su altri siti

Grazie mille sonnyb

infatti per quanto riguarda data e time nessun problema, ma il messaggio di allarme è una stringa di 80 caratteri , il block move non me la accetta..

di nuovo grazie

Modificato: da Frank681
Link al commento
Condividi su altri siti

Giuseppe Signorella

Per trasferire una stringa da un'area di memoria ad un'altra, devi utilizzare l'istruzione Muovi stringa "S_MOVE"

Ovviamente anche l'array deve essere dichiarata come stringa

Ciao

Link al commento
Condividi su altri siti

Ciao Giuseppe

Ho provato come mi hai suggerito ma così purtroppo devo spostare una strnga alla volta mentre con blk_move era comodo poichè lavoravo come blocco , poichè penso di fare un db per i messaggi con n stringhe vedrò di farmi una funzione.

grazie mille.

Link al commento
Condividi su altri siti

Con S7 300 era possibile inserire nei parametri di blockmove un puntatore ANY cn lunghezza del campo dati (p.es. P#DB1.DBX0.0 BYTE 500), col 1200 non è più possibile?

Link al commento
Condividi su altri siti

selezionando la visualizzazione in SCL nelle operazioni di trasferimento appaiono anche le funzioni POKE che permetto di crearsi un FC che muove blocchi di dati, spero vi possa aiutare.

POKE_BLK(area_src:=#DB_source,
dbNumber_src:=#DB_number_source,
byteOffset_src:=#Bit_offset_source,
area_dest:=#area_dest,
dbNumber_dest:=#DB_number_dest,
byteOffset_dest:=#Bit_offset_dest,
count:=#count);
Modificato: da mrsunday
Link al commento
Condividi su altri siti

Una domanda mi sorge spontanea, è possibile sovrapporre indirizzi sorgente/destinazione? Mi sembra di aver capito che qui si vuole shiftare avanti un blocco di variabili nella stessa db

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