Questo blocco funzione da eseguire in task Back utilizzabile con modello a cascata, permette di gestire il lettore RFiD Netronix MW-D7x connesso in seriale RS23 o RS485. Attivando Enable è gestito il lettore con indirizzo indicato in Address, sono inviati i comandi indicati nell’array RSSource, in PButton viene ritornato lo stato del tasto. Se un TAG RFiD viene acquisito dl lettore si attiva per un loop TAGAcq ed in TAGCode viene ritornato il codice letto.
Se il TAG rimane nella zona di lettura del lettore viene ciclicamente attivata l’uscita TAGAcq. In caso di errore esecuzione viene attivata per un loop di programma l’uscita Fault ed incrementato il valore in Errors.
Articoli correlati
Blocco funzione
CODESYS: Non disponibile
LogicLab: eLLabIDAuthLib
Descrizione
Enable (BOOL) Abilitazione blocco funzione. Per rieseguire il comando disabilitare e poi riabilitare questo ingresso.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento del FB (Vedi articolo).
RSSource (BOOL[4]) Array di comandi attuabili sul lettore.
RSSource[0]: Comanda l’uscita logica hardware.
RSSource[1]: Comanda l’accensione del LED verde.
RSSource[2]: Comanda l’Accensione del LED blù.
RSSource[3]: Comanda il buzzer.
Fp (eFILEP) Flusso dati stream di connessione al lettore.
Done (BOOL) Si attiva al termine della esecuzione comando e rimane attiva fino alla disabilitazione di Enable.
Fault (BOOL) Attivo per un loop se errore esecuzione comando.
PButton (BOOL) Stato del tasto sul lettore.
TAGAcq (BOOL) Attivo per un loop se TAG RFiD acquisito.
TAGCode (LWORD) Codice letto dal TAG RFiD.
OKCounter (UDINT) Contatore esecuzioni eseguite correttamente.
Errors (UDINT) Contatore errori esecuzione.
Trigger di spy
Se SpyOn attivo è possibile utilizzare di utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.
Livelli di trigger
Trigger | Descrizione |
---|---|
16#00000001 | Tx: Frame inviato al lettore |
16#00000002 | Rx: Frame ricevuto dal lettore. |
16#10000000 | Lg: Informazione di log |
16#40000000 | Er: Errore esecuzione. |
Esempi
Come utilizzare gli esempi.
Viene gestito un lettore di TAG connesso alla porta seriale definita.
LogicLab (Ptp202, ST_RFiDMWD7xTAGRd)
PROGRAM ST_RFiDMWD7xTAGRd
VAR
TagReaded : BOOL; (* TAG has been readed *)
TimeBf : ARRAY[0..1] OF UDINT; (* Time buffer (mS) *)
Sp : SysSerialPort; (* Serial port management *)
Reader : RFiDMWD7xTAGRd; (* RFiD reader *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_RFiDMWD7xTAGRd"
// *****************************************************************************
// This program manages a TAG reader connected to serial port.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
IF (SysFirstLoop) THEN
// Serial port settings.
Sp.COM:=ADR('COM0'); //COM port definition
Sp.Baudrate:=9600; //Baudrate
Sp.Baudrate:=115200; //Baudrate
Sp.Parity:='N'; //Parity
Sp.DataBits:=8; //Data bits
Sp.StopBits:=1; //Stop bits
Sp.DTRManagement:=DTR_AUTO_WO_TIMES; //DTR management
Sp.DTRComplement:=FALSE; //DTR complement
Sp.EchoFlush:=FALSE; //Received echo flush
Sp.DTROnTime:=0; //DTR On time delay (mS)
Sp.DTROffTime:=0; //DTR Off time delay (mS)
Sp.FlushTm:=0; //Flush time (mS)
Sp.RxSize:=0; //Rx buffer size
Sp.TxSize:=0; //Tx buffer size
// Reader settings.
Reader.SpyOn:=TRUE; //Spy On
Reader.Address:=1; //Module address
Reader.Delay:=T#100ms; //Delay time
END_IF;
// -------------------------------------------------------------------------
// TAG READER MANAGEMENT
// -------------------------------------------------------------------------
// Is managed the TAG reader.
Sp(Open:=TRUE); //Serial port management
Reader.Enable:=Sp.Opened AND NOT(Reader.Done); //FB enable
Reader(Fp:=Sp.File); //File pointer
// When TAG is readed the code is stored and buzzer ring.
// Please note when buzzer rings the reader still return the code read even
// if the TAG is not present. To overtake this behaviour two timers have
// been used.
IF (Reader.TAGAcq) THEN
TimeBf[0]:=SysTimeGetMs(); //Time buffer (mS)
TimeBf[1]:=SysTimeGetMs(); //Time buffer (mS)
IF NOT(TagReaded) THEN TagReaded:=TRUE; Reader.RSSource[3]:=TRUE; END_IF;
END_IF;
// After a time stop the buzzer and reset readed flag.
IF ((SysTimeGetMs()-TimeBf[0]) > TO_UDINT(T#100ms)) THEN Reader.RSSource[3]:=FALSE; END_IF;
IF ((SysTimeGetMs()-TimeBf[1]) > TO_UDINT(T#500ms)) THEN TagReaded:=FALSE; END_IF;
// [End of File]