Ivio caratteri ascii alla seriale

giovedì 19 maggio 2011 - 23.01
Tag Elenco Tags  VB.NET

pedro8a Profilo | Junior Member

Come da titolo,
devo inviare caratteri asci ad un telecomando seriale.
ad esempio devo inviare 1 che equivale a 49
Ho scrrt uestocodice:

SerialPort1.Encoding = System.Text.Encoding.ASCII
Dim VIASER As String
VIASER = scr(1) 'restituisce 49 che corrisponde a 1
SerialPort1.Write(VIASER)

Sul display del telecomando dovrebbe scrivere 1, ma non funziona.
Se apro un programmino scaricato Terminal.exe e scrivo #008 sul display comapre 1

Brainkiller Profilo | Guru

>Sul display del telecomando dovrebbe scrivere 1, ma non funziona.
>Se apro un programmino scaricato Terminal.exe e scrivo #008 sul
>display comapre 1

Scusa, ma non capisco una cosa, se scrivi #008 da Terminal, perchè fai una Write di "1" ?
Non dovresti fare write ("#008") ?
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

pedro8a Profilo | Junior Member

Ciao,
avevo provato con write("#008") ma non funziona.

Brainkiller Profilo | Guru

>Ciao,
>avevo provato con write("#008") ma non funziona.

Le impostazioni che hai definito sono corrette ?
Parità, Baud Rate,ecc.ecc. ?

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

pedro8a Profilo | Junior Member

direi di si, ho messo le stesse impostazione del programma terminal.
Le classiche velocità, bitstop, parità, bit stop, controllo di flusso.
Sul componente serialport ci sono altre prprietà che non so se sono influenti.

Brainkiller Profilo | Guru

>direi di si, ho messo le stesse impostazione del programma terminal.
>Le classiche velocità, bitstop, parità, bit stop, controllo di
>flusso.

Prova ad inviare:

#008\r\n

oppure

#008\n

Quindi con un carriage return e line feed alla fine.
In VB.NET sono VbCr e VbLf o VbCrLf

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

pedro8a Profilo | Junior Member

stasera provo e ti aggiorno.
Volevo anche fare questo: gestire la comunicazione seriale senza mettere il componente seriaplport1.
In questo modo potrei costruirmi una classe da poter utilizzare su + applicazioni, è possibile?

Brainkiller Profilo | Guru

>stasera provo e ti aggiorno.
>Volevo anche fare questo: gestire la comunicazione seriale senza
>mettere il componente seriaplport1.
>In questo modo potrei costruirmi una classe da poter utilizzare
>su + applicazioni, è possibile?

Certamente,
c'è già la classe SerialPort oltre al componente grafico:
http://msdn.microsoft.com/it-it/library/system.io.ports.serialport.aspx
che è la stessa cosa (guarda in basso c'è anche un esempio)
Se vuoi puoi derivare la classe SerialPort e personalizzartela per poi usarla in altri progetti.
Anche io preferisco sempre fare via codice senza usare il componente grafico.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

pedro8a Profilo | Junior Member

non funziona, io ho scritto:

SerialPort1.Encoding = System.Text.Encoding.ASCII
Dim VIASER As String
VIASER = "#008\r\n" 'oppure "#008\n"
SerialPort1.Write(VIASER)

un altra cosa, per controllare cosa arriva dalla seriale ho messo nell'evento DataReceived:

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
a = SerialPort1.ReadByte
TextBox1.Text = a
End Sub

a è una variabile string pubblica, va in errore sulla riga texbox, dice impossibile assegnare,
allora ho messo un controllo timer e all'nterno:
TextBox1.Text = ""
If a = 45 Then
TextBox1.Text = "-"
Else
TextBox1.Text = "+"
End If
+ e - sono i valori che i pulsanti del telec. manda alla seriale in formato ascii

Brainkiller Profilo | Guru

>SerialPort1.Encoding = System.Text.Encoding.ASCII
>Dim VIASER As String
>VIASER = "#008\r\n" 'oppure "#008\n"
>SerialPort1.Write(VIASER)

No ti ho scritto che se usi Vb.NET devi usare:

"#008" + VbCrLf

oppure

"#008" + VbCr

oppure

"#008" + VbLf

Prova con tutte e 3.
CIao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

pedro8a Profilo | Junior Member

niente, non va
sul programma terminal c'è l'opzione "CR" e se la attivo il numero sul telec. non viene visualizzato

Brainkiller Profilo | Guru

>niente, non va
>sul programma terminal c'è l'opzione "CR" e se la attivo il numero
>sul telec. non viene visualizzato

Quindi il programma quando esegue la Write() non dice niente , non va neanche in errore giusto ? E sul display non compare niente.
Hai documentazione disponibile relativa a questo telecomando, istruzioni, ecc. ? Che telecomando è ?
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

pedro8a Profilo | Junior Member

Ok, ti faccio sapere, intanto grazie
Ciao

pedro8a Profilo | Junior Member

un altra cosa, per controllare cosa arriva dalla seriale ho messo nell'evento DataReceived:

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
a = SerialPort1.ReadByte
TextBox1.Text = a
End Sub

a è una variabile string pubblica, va in errore sulla riga texbox, dice impossibile assegnare,
allora ho messo un controllo timer e all'nterno:
TextBox1.Text = ""
If a = 45 Then
TextBox1.Text = "-"
Else
TextBox1.Text = "+"
End If
+ e - sono i valori che i pulsanti del telec. manda alla seriale in formato ascii

Brainkiller Profilo | Guru

>un altra cosa, per controllare cosa arriva dalla seriale ho messo
>nell'evento DataReceived:

Ma la variabile a che cos'è ?
Magari è vuota.
Usa piuttosto Console.WriteLine() magari inserito in un try..catch:

Try Console.WriteLine(a) Catch exc As Exception End Try

Altra cosa io faccio un SerialPort1.ReadLine() e non ReadByte magari la stringa è più lunga.

Hai trovato che modello è il telecomando ?
Ciao


David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

pedro8a Profilo | Junior Member

a è una variabile pubblica di tipo string

Il telec. è fatto in casa da un mio amico.
Ci dobbiamo vedere per fare prove. Ti aggiorno.

Ciao

pedro8a Profilo | Junior Member

Provo con consol..
ma la var. a non è vuota visto che nel timer me la visualizza.

Ciao
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5