Lettura stringa da lettore Barcode
Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Lettura stringa da lettore Barcode
- Questo topic ha 5 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 7 anni fa da
Sergio Bertana.
-
AutorePost
-
Marzo 21, 2018 alle 1:09 pm #36189
Giovanni
PartecipanteDevo leggere uno scanner per barcode in seriale sulla porta di uno SlimLine, avete per caso un qualche esempio, nel forum non ho trovato nulla di specifico ? Lo scanner invia in uscite semplici stringhe in ascii con il codice letto, ecco un esempio.
06789121
08912343Marzo 21, 2018 alle 1:16 pm #40051Sergio Bertana
Amministratore del forumSi l’uscita dello scanner sono effettivamente stringhe ascii, non mi dici se sono terminate con un <CR><LF> oppure no. Sono partito dal programma che trovi illustrato in questo topic, in pratica nel programma veniva inviata una stringa di richiesta ed attesa la stringa di risposta, ho modificato il programma per gestire la sola ricezione della stringa di sposta.
Come vedi dalla stampa il FB BarcodeRead controlla la ricezione dei caratteri dalla porta seriale e li trasferisce nella variabile Barcode. La lettura si arresta alla ricezione del <CR> oppure dopo 100mS che non si ricevono più dati. Al termine della ricezione si attiva per un loop di programma l’uscita ReadOk ed il programma utente può utilizzare il codice acquisito. Puoi scaricare il programma BarcodeReader e modificarlo per le tue esigenze (Download).
Marzo 22, 2018 alle 2:41 pm #40053Giovanni
PartecipanteScusa se disturbo ancora, ma dall’ esempio che mi hai postato nel forum mi ritorna nella variabile Code il valore ascii letto dello scanner solo per un attimo poi mi scompare e mi ritorna un asterisco, come lo catturo ?
Marzo 23, 2018 alle 6:41 am #40054Sergio Bertana
Amministratore del forumCome ti ho scritto non ho fisiscamente il bar code reader in mano per fare delle prove, quindi ti ho dato un programma di esempio che deve essere una traccia per andare avanti nel tuo sviluppo. Nel progetto hai tutti i sorgenti, e questo dovrebbe essere più che sufficente per realizzare quallo che hai bisogno. Naturalmente io non conosco la tua esperienza in programmazione quindi vedo di darti altri indizi per la “caccia al tesoro” dove il tesoro è leggere il bar code.Come vedi dal programma in FBD (Screenshot), quando il FB BarcodeRead attiva l’uscita ReadOk si copia il valore in uscita nella variabile Code. Ma se guardi nel FB vedrai che l’uscita si attiva per un loop alla ricezione di un <CR> (Ho ipotizzato che la stringa del reader termini con <CR>). Ma se segui il flusso del programma vedrai che se dopo il <CR> arrivano altri caratteri questi saranno acquisiti e dopo 100mS che non si riceve più nulla si attiverà ancora l’uscita ReadOk. Se il reader invia la stringa letta seguita da un <CR> e poi altri caratteri tu vedrai in Code la stringa ma subito dopo gli altri caratteri ricevuti, quindi dovrai modificare il FB per adattarlo alle tue esigenze.Consiglio ad esempio di togliere il controllo sul <CR> e lasciare solo quello sul tempo, in questo modo in Code avrai la stringa numerica seguita da <CR> e da quello che viene inviato dopo. Poco male perchè se per convertire la stringa in un numero, visto che il numero dai tuoi esempi ha 8 cifre, puoi utilizzare la funzione SysVarsscanf trasferendo il numero in una variabile UDINT (Range massimo 4294967295). La funzione SysVarsscanf terminerà la conversione al primo carattere non numerico quindi si fermerà al <CR>.
Marzo 27, 2018 alle 7:55 am #40056Giovanni
PartecipanteScusa ti disturbo ancora, ma come ti ho detto non ho molta dimestichezza con il linguaggio strutturale e anche se posso utilizzare altre soluzioni per raggiungere l’obbiettivo, la nostra scelta è stata di utilizzare il Vs. prodotto come base per le Ns. apparecchiature un pò per orgoglio Italiano un pò perchè lo ritengo un buon prodotto. Oggi gli impegni che stiamo prendendo incominciano ad essere importanti come numero di applicazioni da realizzare, nel frattempo abbiamo nuove leve che iniziano a seguire le orme dei genitori quindi presto arriveranno rinforzi.
Nel frattempo potresti farmi un esempio del trasformare una stringa in numero con la funzione SysVarsscanf che dall’ esempio del manuale non mi è chiaro, è possibilmente in FDB… Grazie…
Marzo 27, 2018 alle 12:02 pm #40057Sergio Bertana
Amministratore del forumNon posso che essere contento che hai scelto i nostri prodotti, per la tua applicazione ritengo che possano essere particolarmente adatti. I nostri prodotti pur essendo dei PLC (Vedi la programmabilità secondo la IEC61131) hanno nel loro DNA la possibilità di utilizzo per applicazioni in cui molte volte si usano sistemi a microcontrollore e/o sistemi basati su PC. Grazie al linguaggio strutturato ST, ai blocchi funzioni che gestiscono le comunicazioni (Seriali, CAN, Ethernet), alla possibilità di operare su files, alle funzioni di gestione stringhe, alla gestione web, ecc è possibile realizzare applicazioni anche molto diverse dalla classica automazione.Venendo alla tua domanda, certo è possibile utilizzare linguaggi grafici (LD ed FBD) per fare tutto (O quasi) ma i 5 linguaggi sono nati proprio per poter utilizzare il linguaggio giusto per ogni tipo di problema. La tua esigenza ne è proprio un esempio, gestire la ricezione stringa del Barcode usando linguaggi diversi dal ST anche se possibile sarebbe stata estremamente dispersiva. Ecco allora la scelta di realizzare un FB in linguaggio ST per poi utilizzarlo all’interno di un programma FBD, così da avere graficamente il colpo d’occhio sull’insieme.Venendo alla tua domanda ecco lo screenshot di un programma che esegue quello che ti serve, come vedi ho appoggiato il codice stringa nella variabile Code e poi ho eseguito la SysVarsscanf sulla stringa salvando il risultato numerico in CodeValue. Ma come vedi ho anche inserito la SysVarsscanf direttamente nel FB in modo da avere già in uscita il valore numerico, così in una sola riga di codice si è fatto tutto contro una serie di blocchetti da connettere in FBD (Download programma).
-
AutorePost
- Devi essere connesso per rispondere a questo topic.