Libreria gestione protocollo ccTalk (eCCTalkProtoLib) ----------------------------------------------------- **Attenzione! Per utilizzare la libreria occorre importarla nel proprio progetto**. Vedere capitolo relativo all'\ `import delle librerie <#ChpLibraryImport>`__. Il protocollo ccTalk è un protocollo seriale a standard aperto, progettato per offrire il trasferimento sicuro delle informazioni sul credito e sullo stato per applicazioni nel settore delle transazioni monetarie automatizzate. Sul mercato sono disponibili unità di accettazione monete, unità di accettazione banconote, serbatoi di monete, e molti altri dispositivi per gestire il denaro gestibili tramite protocollo ccTalk. Questa libreria permette di gestire apparecchi con interfaccia ccTalk, una FB di gestione del protocollo **ccTalkProtocol** connettendosi ad una porta seriale permette di gestire il protocollo. Altre FB “Figlie” si connettono a questa FB e gestiscono apparecchi con interfaccia ccTalk. Il protocollo ccTalk opera su di un bus ad un filo gestito in open collector dai vari dispositivi connessi in multidrop sul bus. Per interfacciare il bus ccTalk con la porta seriale RS232 dello SlimLine viene utilizzato un apposito convertitore. |image0| ccTalkProtocol, manages ccTalk protocol ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +-----------------------+-----------------------+ | **Type** | **Library** | +-----------------------+-----------------------+ | FB | eCCTalkProtoLib_A000 | +-----------------------+-----------------------+ |image1| Questo blocco funzione esegue la gestione del protocollo, deve essere connesso ad una porta seriale **File** a cui si connettono i dispositivi ccTalk. Questo è un blocco funzione protetto per utilizzarlo occorre richiedere il codice di protezione, vedi `protezione funzioni e blocchi funzione <#ChpFctFBProtection>`__. E' comunque possibile utilizzarlo liberamente in modo test per 15 Min. L'FB ritorna un **CCTalkProtoID** che deve essere passato alle FB collegate di gestione dei vari dispositivi ccTalk. L'ingresso **SpyOn** se attivo permette di spiare il funzionamento della FB. L'uscita **Fault** si attiva per un loop di programma in caso di errori di gestione. +-----------------------------------+-----------------------------------+ | **Enable** (BOOL) | Abiltazione gestione protocollo. | +-----------------------------------+-----------------------------------+ | **SpyON** (BOOL) | Se attivo permette di spiarne il | | | funzionamento. | +-----------------------------------+-----------------------------------+ | **File** (FILEP) | Flusso dati stream ritornato | | | dalla funzione **Sysfopen**. | +-----------------------------------+-----------------------------------+ | **Enabled** (BOOL) | Si attiva su comando di | | | **Enable**. | +-----------------------------------+-----------------------------------+ | **Fault** (BOOL) | Attivo per un loop di programma | | | se errore gestione. | +-----------------------------------+-----------------------------------+ | **CCTalkProtoID** (UDINT) | ID protocollo da passare alle FB | | | collegate. | +-----------------------------------+-----------------------------------+ **Trigger di spy** Se **SpyOn** attivo viene eseguita la funzione `SysSpyData <#FctSysSpyData>`__ che permette di spiare il funzionamento della FB. Sono previsti vari livelli di triggers. +-------------+-----------------------------------------+ | **TFlags** | **Descrizione** | +-------------+-----------------------------------------+ | 16#00000001 | 'Tx' Trasmissione frame comando ccTalk. | +-------------+-----------------------------------------+ | 16#00000002 | 'Rx' Ricezione frame risposta ccTalk. | +-------------+-----------------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita **Fault**, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +------------+----------------------------------------------------------+ | 10050010 | Valore di **File** non definito. | +------------+----------------------------------------------------------+ | 10050020 | FB eseguita in task diversa da quella di background. | +------------+----------------------------------------------------------+ | 10050030 | FB protetta, terminato tempo funzionamento in modo demo. | +------------+----------------------------------------------------------+ | 10050100 | Timeout comunicazione. | +------------+----------------------------------------------------------+ | 10050200~4 | Errore sequenze invio comando. | +------------+----------------------------------------------------------+ | 10050300~4 | Errore nelle sequenze di ricezione risposta. | +------------+----------------------------------------------------------+ AlbericiAL66, Alberici AL66 coin acceptor ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +-----------------------+-----------------------+ | **Type** | **Library** | +-----------------------+-----------------------+ | FB | eCCTalkProtoLib_A000 | +-----------------------+-----------------------+ |image2| Questo blocco funzione esegue la gestione di un accettatore di monete Alberici modello AL66V. Si collega al blocco funzione **ccTalkProtocol** di gestione protocollo ccTalk, occorre passare **CCTalkProtoID** in uscita dal blocco funzione. Attivando l'ingresso **Enable** viene attivato il dialogo con l'accettatore di moneta con indirizzo definito in **DAddress**. L'FB dialoga continuamente con l'accettatore inviando i comandi ogni tempo definito in **Cdelay**. Ricordo che per accettare le monete l'accettatore deve essere interrogato via ccTalk almeno ogni 500 mS. Il parametro **CEnable**, permette di definire le monete accettate dall''accettatore, è previsto un bit pattern di 16 bit dove ad ogni bit corrisponde un tipo di moneta (Fare riferimento alla documentazione dell'accettatore). Se la moneta inserita è accettata si attiva per un loop l'uscita **CoinOk** e sulla uscita **CAccepted** (Bit pattern a 16 bits) viene attivato il bit relativo alla moneta accettata. In caso di errore esecuzione viene attivata per un loop l'uscita **Fault** e la variabile **Errors** viene incrementata. +-----------------------------------+-----------------------------------+ | **Enable** (BOOL) | Comando di abilitazione blocco | | | funzione. | +-----------------------------------+-----------------------------------+ | **CCTalkProtoID** (UDINT) | ID gestione protocollo in uscita | | | dalla FB (**ccTalkProtocol**). | +-----------------------------------+-----------------------------------+ | **DAddress** (USINT) | Device address, indica | | | l'indirizzo del dispositivo con | | | cui dialogare. | +-----------------------------------+-----------------------------------+ | **CEnable** (WORD) | Coins enable, bit pattern di | | | abilitazione monete. | +-----------------------------------+-----------------------------------+ | **CDelay** (UINT) | Command delay, ritardo tra | | | l'esecuzione dei comandi (mS). | +-----------------------------------+-----------------------------------+ | **CoinOk** (BOOL) | Attiva per un loop di programma | | | su moneta accettata. | +-----------------------------------+-----------------------------------+ | **Fault** (BOOL) | Attiva per un loop di programma | | | se errore gestione. | +-----------------------------------+-----------------------------------+ | **CAccepted** (WORD) | Coin accepted, bit pattern di | | | indicazione moneta accettata. | +-----------------------------------+-----------------------------------+ | **Errors** (UDINT) | Contatore errori di esecuzione. | +-----------------------------------+-----------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita **Fault**, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +-----------------------------------+-----------------------------------+ | 10051010 | **HMIBuildInID** non definito. | +-----------------------------------+-----------------------------------+ | 10051020 | **HMIBuildInID** non corretto. | +-----------------------------------+-----------------------------------+ | 10051030 | Blocco funzione non eseguito in | | | task di background (Back). | +-----------------------------------+-----------------------------------+ | 10051040 | Non è possibile allocare FB, | | | troppe FB connesse alla FB di | | | gestione protocollo. | +-----------------------------------+-----------------------------------+ | 10051100 | Errore comunicazione con | | | dispositivo. | +-----------------------------------+-----------------------------------+ |image3| **Esempi** """"""""""""" Nell'esempio è gestita una gettoniera elettronica Alberici AL66V con protocollo ccTalk. Il protocollo ccTalk opera su di un bus ad un filo gestito in open collector dai vari dispositivi connessi in multidrop sul bus. Per interfacciare il bus ccTalk con la porta seriale RS232 dello SlimLine viene utilizzato un apposito convertitore. Il programma di esempio definisce le monete da accettare ed esegue il conteggio delle monete accettate in base al loro valore. **Definizione variabili** |image5| **Esempio ST** .. code-block:: none (\* INIZIALIZZAZIONI \*) (\* Eseguo inizializzazioni. \*) IF (SysFirstLoop) THEN (\* Eseguo apertura porta seriale. \*) Fp:=Sysfopen('COM0', 'rw'); (\* Port COM0 file pointer \*) (\* Eseguo configurazione porta seriale. \*) i:=SysGetSerialMode(ADR(Sm), Fp); Sm.Baudrate:=9600; (\* Baud rate \*) Sm.Parity:='N'; (\* Parity \*) Sm.DataBits:=8; (\* Data bits \*) Sm.StopBits:=1; (\* Stop bits \*) Sm.DTRManagement:=DTR_AUTO_WO_TIMES; (\* DTR management \*) Sm.DTRComplement:=FALSE; (\* DTR complement \*) Sm.EchoFlush:=FALSE; (\* Echo flush \*) Sm.DTROffTime:=0; (\* DTR off time \*) Sm.DTROnTime:=0; (\* DTR on time \*) i:=SysSetSerialMode(ADR(Sm), Fp); (\* Eseguo inizializzazione variabili. \*) CCTalk.File:=Fp; (\* File pointer \*) Acpt.DAddress:=2; (\* Device address \*) Acpt.CDelay:=500; (\* Command delay (mS) \*) END_IF; (\* GESTIONE PROTOCOLLO CCTALK \*) (\* Gestione del protocollo ccTalk. \*) CCTalk(Enable:=TRUE); (\* ccTalk protocol management \*) (\* GESTIONE ACCETTATORE ALBERICI \*) (\* Gestione accettatore Alberici. \*) Acpt.CCTalkProtoID:=CCTalk.CCTalkProtoID; (\* Protocol ID \*) (\* Definizione monete accettate da accettatore. Viene definita maschera \*) (\* di bits con il seguente significato. \*) (\* \|F|E|D|C|B|A|9|8|1 Cen|2 Cen|5 Cen|10 Cen|20 Cen|50 Cen|1 Euro|2 Euro\| \*) (\* Con valore 16#0D, accetto 20, 50 centesimi ed 2 euro. \*) Acpt.CEnable:=16#0D; (\* Coins enable \*) Acpt(Enable:=TRUE); (\* CALCOLO DENARO INSERITO \*) (\* Controllo se moneta acettatta da accettatore. \*) IF (Acpt.CoinOk) THEN NrOfCoins:=NrOfCoins+1; (\* Numero di monete inserite \*) (\* Calcolo denaro inserito nell'accettatore. \*) CASE (Acpt.CAccepted) OF 16#0001: Credit:=Credit+200; (\* 2 Euro \*) 16#0002: Credit:=Credit+100; (\* 1 Euro \*) 16#0004: Credit:=Credit+50; (\* 50 Centesimi \*) 16#0008: Credit:=Credit+20; (\* 20 Centesimi \*) 16#0010: Credit:=Credit+10; (\* 10 Centesimi \*) 16#0020: Credit:=Credit+5; (\* 5 Centesimi \*) 16#0040: Credit:=Credit+2; (\* 2 Centesimi \*) 16#0080: Credit:=Credit+1; (\* 1 Centesimo \*) END_CASE; END_IF; (\* [End of file] \*) .. |image0| image:: media/image1.jpg :width: 3.76181in :height: 2.80347in .. |image1| image:: media/image2.jpg :width: 1.81528in :height: 0.88611in .. |image2| image:: media/image3.jpg :width: 1.77986in :height: 1.22014in .. |image3| image:: media/image4.jpg :width: 1.40625in :height: 1.40625in .. |image4| image:: media/image5.jpg :width: 7.08681in :height: 1.44861in .. |image5| image:: media/image5.jpg :width: 7.08681in :height: 1.44861in