VB2005 e invio caratteri via seriale: vengono inviati valori sbagliati...

martedì 16 gennaio 2007 - 18.13

EYSRG Profilo | Newbie

Come mai, se cerco di inviare via seriale un carattere con codice ASCII maggiore di 127, quello che viene inviato è sempre e comunque il valore 63 (0x3F)?

La mia applicazione ha una risorsa SerialPort che ho chiamato "com0new". Per
testarne il funzionamento, ho inserito dei caratteri in una stringa che ho
chiamato "comTx" e ho usato la seguente linea:

If comTx <> "" Then frmMain.com0new.Write(comTx)

Tutto va bene finché invio caratteri con un codice ASCII minore di 128. Se
provo a inviare caratteri con un codice ASCII da 128 in su, quello che viene
inevitabilmente trasmesso sono caratteri con codice ASCII 63. Così se, per
esempio, compongo in questo modo la stringa da trasmettere:

comTX = "a" + Chr(126) + Chr(127) + Chr(128) + Chr(129)

e visualizzo il risultato come una sequenza di numeri in esadecimale, questo
è quello che ottengo:

[b]61 7E 7F 3F 3F[/b]

Però io ho assolutamente bisogno di trasmettere quei caratteri, perchè fanno
parte di un messaggio modbus trasmesso in modo RTU!
So per certo che con VB6 si potevano trasmettere, usando una linea come
"frmMain.com0new.Output = comTx"... ma come faccio a trasmetterli con
VB2005?

alextyx Profilo | Expert

Ho già sentito qualcosa di simile
Dai un'occhiata qui:
http://forum.masterdrive.it/showthread.php?t=15754

EYSRG Profilo | Newbie

Alla fine ho risolto impostando un altro encoding per la porta seriale, così:
Me.com0new.Encoding = System.Text.Encoding.GetEncoding(1252)

Però adesso ho notato la presenza di un altro problema. Invio il messaggio al dispositivo che lo aspetta, il dispositivo manda la risposta... ma questa risposta non viene vista dal programma in VB2005!
So che la colpa NON è del dispositivo che risponde, perchè funziona usando una versione in VB6 del programma, che "ascolta" la seriale con la seguente istruzione:
comRx = frmMain.com0.Input
(sì, nella versione in VB6 la porta seriale si chiama com0, NON com0new)
Invece, la versione in VB 2005, che usa la seguente istruzione:
comRx = frmMain.com0new.ReadExisting()
...se ne frega bellamente di tutto quello che dovrebbe ricevere, e la stringa comRx resta sempre vuota!

alextyx Profilo | Expert

In questi giorni, invece, io sto comunicando con mezzo mondo tramite le seriali!
Ti invio un po' di codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come vedi, sia nella ricezione che nella trasmissione, uso scrivere i messaggi trasmessi e ricevuti, in delle textbox.
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5