|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
[VB.NET] Invio numeri interi su porta seriale
Salve a tutti. Devo inviare dei numeri interi positivi via porta seriale. La mia domanda è la seguente: una volta che ho convertito tali numeri in interi a 16 bit senza segno tramite System.Convert.ToUInt16, come vengono inviati dalla porta seriale?
Per spiegarmi meglio faccio un esempio: a me serve riempire locazioni di memoria di 2 byte su un microprocessore. Se volessi inviare il numero 3245, la porta seriale invia 2 byte corrispondenti alla conversione in binario (in questo caso 0000110010101101) oppure invia i 4 byte corrispondenti ognuno ad una cifra del numero 3245? Spero di essere stato chiaro ^^
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Non ho capito se la domanda e'
- come faccio a spedire un numero alla porta seriale oppure se e' - Se spedisco alla seriale la rappresentazione binaria del numero 3245, ovvero 2byte, cosa viene inviato? Se fosse la seconda, ovviamente 3245 sono cifre decimali, e le singole cifre decimali non hanno un vero riscontro. Sta nel codice che segue, ovvero cosa veramente spedisci alla seriale. Ragionevolmente spedisci la rapprensentazione binaria, quindi vengono spediti i 2 byte. Precisazione su cosa transita veramente sulla seriale. Una volta configurata la seriale il tutto e' trasparente, ma ogni volta che si spedisce un byte, in realta' nella codifica piu' comune verrebbero comunque spediti 10bit+10bit, con uno di start e uno di stop Talvolta si usa anche la Encoding 8/10: http://www.answers.com/topic/8b-10b-...cat=technology
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 10-03-2008 alle 12:01. Motivo: Precisazione |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
Praticamente ho il seguente codice:
Codice:
Private Sub Xplus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Xplus.Click Data = Xtext.Text intero = System.Convert.ToUInt16(Data) Sendstring(intero) End Sub Public Sub Sendstring(ByVal intero As Integer) serialPort.Write(intero) End Sub Quello che però vorrei inviare sono effettivamente i 16 di bit dela rappresentazione binaria di un numero decimale che inserisco nel controllo xtext.
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. Ultima modifica di Capello82 : 10-03-2008 alle 13:35. Motivo: Errore |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
E si'. Stai di nuovo spedendo la stringa.
Ci sono 3 prototipi della serialPort.Write: Codice:
serialPort.Write(string); serialPort.Write(byte[],int,int); serialPort.Write(char[],int,int); In pratica il tuo codice sta effettuando un hidden cast (schifo, speravo non ci fossero piu') tra l'integer e di nuovo la stringa (stara' chiamando la toString sull'intero), per spedire poi i caratteri. In pratica e' come se avessi spedito direttamente di nuovo la stringa invece che il numero.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Per risolvere il tuo problema, ti consiglio di provare con gli Stream.
La porta seriale e' essenzialmente uno stream, dove si puo' leggere e scrivere. Prova a vedere se con un codice come questo riesci a farlo funzionare C# Codice:
SerialPort sp=new SerialPort(....); BinaryWriter bw = new BinaryWriter(sp.BaseStream); bw.Write(qualcosa) Non ho modo di testare se funziona perche' non ho nulla da attaccare alla seriale. Ti direi di provare...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
Grazie mille
![]() ![]() Grazie ancora ![]()
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:12.