Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Codifica porta seriale in c#
mercoledì 25 maggio 2011 - 18.57
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 4.0
|
Windows 7
|
Visual Studio 2010
Luigi.23
Profilo
| Newbie
3
messaggi | Data Invio:
mer 25 mag 2011 - 18:57
Ciao a tutti,
sto cercando di interfacciarmi con uno scanner codici a barra collegato al pc con Windows 7 64bit tramite un convertitore usb seriale sulla porta COM4.
Ho provato prima a collegarmi tramite HyperTerminal, ho impostato i parametri, ho passato un codice a barra e su HyperTerminal è apparso il valore corretto del codice a barra.
Ho creato quindi un applicazione in C#, ho creato un oggetto di tipo SerialPort, impostato gli stessi parametri usati su HyperTerminal ma il codice a barra viene letto male.
Molti caratteri vengono visualizzati con un punto interrogativo! Probabilmente è un problema di codifica ma non so come risolverlo.
Il valore del codice a barra è 088698857236 ma viene visualizzata la stringa ?88??88?72??, questi sono i byte che il mio codice C# legge: 176 56 56 182 185 56 56 181 55 50 179 182
Qualche idea?
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 25 mag 2011 - 19:14
>Molti caratteri vengono visualizzati con un punto interrogativo!
>Probabilmente è un problema di codifica ma non so come risolverlo.
>Il valore del codice a barra è 088698857236 ma viene visualizzata
>la stringa ?88??88?72??, questi sono i byte che il mio codice
>C# legge: 176 56 56 182 185 56 56 181 55 50 179 182
>Qualche idea?
Eh eh, si fa sempre un po' fatica con queste seriali.
Pare di sì che sia un problema di codifica ma è strano che alcuni vengano letti giusti e altri no.
In realtà per tutti i valori > 100 togliendo un 128 ottieni il valore giusto.
Quindi:
176 - 128 = 48 (che in codice ASCII corrisponde allo 0, proprio la prima cifra del tuo barre)
E così anche con gli altri.
Questo è una prima soluzione che può consentirti di risolvere il problema certo non è la migliore
e forse te n'eri già accorto.
La classe SerialPort ha una proprietà Encoding, di default è ASCIIEncoding. Forse puoi provare ad agire lì.
Io personalmente non ho mai avuto problemi di questo tipo usando le seriali (solo una volta ma era colpa del cavo).
Ciao
David De Giacomi | <empty>
http://blogs.dotnethell.it/david/
Luigi.23
Profilo
| Newbie
3
messaggi | Data Invio:
mer 25 mag 2011 - 19:53
Si avevo già provato a modificare manualmente tutti i byte maggiori di 127 ed in effetti le stringhe così vengono codificate correttamente ma non mi piace per niente come soluzione
Ho già provato tutti i valori possibili per Encoding ma niente, la migliore è quella di default....
Ora ho provato ad impostare la proprietà DataBits dell'oggetto SerialPort a 7 anziché 8 e le stringhe vengono lette correttamente senza bisogno di nessuna modifica ma non è neanche questa la soluzione ottimale.
Infatti lo scanner può anche ricevere dei comandi, per esempio inviando il valore (in esadecimale) 0x45 riesco ad abilitare lo scanner mentre con 0x44 lo disabilito (valori che corrispondono rispettivamente alle lettere E e D, che fantasia
); impostando il DataBits a 8 funziona il comando 0x45 ma non il comando 0x44 mentre impostando il DataBits a 7 accade l'inverso...
Luigi.23
Profilo
| Newbie
3
messaggi | Data Invio:
mer 25 mag 2011 - 20:18
Forse ho risolto, controllando i valori dei byte restituiti e convertendoli in binario mi sono reso conto che i dati vengono inviati con un bit di parità dispari perciò è stato sufficiente impostare la proprietà Parity a Parity.Odd e il DataBits al valore 7, ora tutti i comandi vanno e i codici vengono letti correttamente senza il mio intervento.
Evidentemente questi parametri sono stati cambiati senza informarmi dato che di default sono impostati a 8 bit e senza bit di parità
devo fare altre prove ma credo di essere sulla strada giusta, grazie mille dell'aiuto
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 26 mag 2011 - 13:59
>dato che di default sono impostati a 8 bit e senza bit di parità
>
devo fare altre prove ma credo di essere sulla strada giusta,
>grazie mille dell'aiuto
Si infatti la maggior parte dei problemi derivano da impostazioni errate, ma ti avevo visto sicuro sui parametri quindi non ho obbiettato.
Ciao
David De Giacomi | <empty>
http://blogs.dotnethell.it/david/
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !