Libreria gestione periferiche (eLLabDevicesLib) ----------------------------------------------- Questa libreria contiene un insieme di funzioni e blocchi funzione per la gestione di dispositivi commerciali. MCReader, magnetic card reader ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +----------+----------------------+ | **Type** | **Library** | +----------+----------------------+ | FB | eLLabDevicesLib_A000 | +----------+----------------------+ |image0| Questo blocco funzione gestisce l'acquisizione della traccia 2 o della traccia 3 da una carta magnetica tramite un lettore connesso a due ingressi digitali di un modulo CPU. Sugli ingressi **Strobe** e **Data** occorre appoggiare lo stato dei due ingressi digitali di acquisizione dei rispettivi segnali in uscita dal lettore di carta magnetica In **BData** ed in **BDLength** occorre definire l'indirizzo e la dimensione in bytes del buffer di appoggio dei dati letti dalla carta magnetica. Inserendo la carta magnetica nel lettore si attiverà l'uscita **CPresent** ed al termine della lettura della carta, se lettura corretta si attiverà l'uscita **Done**. I dati letti dalla carta sono trasferiti nel buffer indirizzato da **BData**. Sull'uscita **ByteNr** viene ritornato il numero di bytes letti dalla carta. In caso di errore di lettura si attiva una delle uscite di errore. +-----------------------------------+-----------------------------------+ | **Strobe** (BOOL) | Stato dell'ingresso connesso al | | | segnale strobe del lettore. | +-----------------------------------+-----------------------------------+ | **Data** (BOOL) | Stato dell'ingresso connesso al | | | segnale data del lettore. | +-----------------------------------+-----------------------------------+ | **BData** (@BYTE) | Occorre definire l'indirizzo del | | | buffer di appoggio dei dati | | | letti. | +-----------------------------------+-----------------------------------+ | **BDLength** (UDINT) | Occorre definire l lunghezza del | | | buffer di appoggio dati letti. | +-----------------------------------+-----------------------------------+ | **Connections** (USINT) | Numero di connessioni | | | contemporanee gestite. | +-----------------------------------+-----------------------------------+ | **Done** (BOOL) | Si attiva al termine della | | | lettura della carta magnetica. | +-----------------------------------+-----------------------------------+ | **CPresent** (BOOL) | Attivo se carta in lettura. | +-----------------------------------+-----------------------------------+ | **EParity** (BOOL) | Attivo se errore di parità in | | | lettura. | +-----------------------------------+-----------------------------------+ | **ECheck** (BOOL) | Attivo se errore LRC sul dato in | | | lettura. | +-----------------------------------+-----------------------------------+ | **ELength** (BOOL) | Attivo se errore lunghezza dato | | | in lettura. | +-----------------------------------+-----------------------------------+ | **ByteNr** (USINT) | Numero di bytes dati letti da | | | carta. | +-----------------------------------+-----------------------------------+ |image1| **Esempi** """""""""""" Nell'esempio viene gestito un lettore di carte a strisciamento della `Magtek `__ Connesso a due ingressi digitali di un modulo SlimLine compact. Il programma è eseguito nella task Fast e come si vede è stato impostato il tempo di esecuzione della task a 100uS per permettere la lettura della carta anche quando viene strisciata molto velocemente. Il dato letto dalla carta è appoggiato nell'array **BData**. **Definizione variabili** |image2| **Esempio ST** *(PTP140A000, ST_MCReader)* .. code-block:: none IF (SysFirstLoop) THEN DInp.Address:=255; (\* Module address \*) DInp.Mode:=DI_I_8_LL; (\* Acquisition mode \*) i:=SysSetTaskLpTime(TaskID:=ID_TASK_FAST, Time:=100); Reader.BData:=ADR(BData); (\* Buffer data \*) Reader.BDLength:=SIZEOF(BData); (\* Buffer data length \*) END_IF; (\* Eseguo acquisizione ingressi, gli ingressi sono attivi FALSE. \*) DInp(); (\* Digital inputs \*) DInp.Value:=DInp.Value XOR 16#00000003; (\* Digital inputs \*) (\* Gestione lettore card magnetica. \*) Reader.Strobe:=TO_BOOL(DInp.Value AND 16#00000001); (\* Strobe bit \*) Reader.Data:=TO_BOOL(DInp.Value AND 16#00000002); (\* Data bit \*) Reader(); (\* [End of file] \*) .. |image0| image:: media/image1.jpg :width: 1.49236in :height: 1.49236in .. |image1| image:: media/image2.jpg :width: 2.29167in :height: 2.29167in .. |image2| image:: media/image3.jpg :width: 7.08681in :height: 0.89792in