PDA

View Full Version : [VB.net]comunicazione seriale


18x8x
24-06-2008, 14:11
salve mi servirebbe un grosso aiuto... devo far comunicare due computer tramite porta seriale e guardando un po' in rete sono riuscito ad arrivare a un programma che in teoria dovrebbe funzionare, anzi funziona solo che quando invio0 una lettera lui mi riceve un altro carattere ad esempio:
a --> O
spazio --> y=
c --> N
e così per altri caratteri, se per esempio mando ciao in corripondenza della c e della a ho rispettivamente M e O....qualcuno potrebbe spiegarmi come poter decodificare tutto ciò magari aggiungendomi una riga di codice così almeno mi posso orientare per farlo??? grazie
P.S. ho già visto tutte le soluzioni possibili che forniscono in internet ma da sempre lo stesso problema

Fenomeno85
24-06-2008, 23:40
se non ricordo male (avevo rivisto l'oggetto) tutto si basa sempre sul componete com.
A questo punto o ti cerchi su msdn come usarlo oppure se posti il tuo codice vediamo che c'è di 'sbagliato' :)

~§~ Sempre E Solo Lei ~§~

18x8x
25-06-2008, 07:04
ciao...provo a postarti il codice
questo è il trasmettitore
Imports System.Text

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 0 To _
My.Computer.Ports.SerialPortNames.Count - 1
cbbCOMPorts.Items.Add( _
My.Computer.Ports.SerialPortNames(i))
Next
btnDisconnetti.Enabled = False
For i As Integer = 0 To _
cbbBaudRate.Items.Add(300)
cbbBaudRate.Items.Add(600)
cbbBaudRate.Items.Add(1200)
cbbBaudRate.Items.Add(2400)
cbbBaudRate.Items.Add(4800)
cbbBaudRate.Items.Add(9600)
Next
btnDisconnetti.Enabled = False
For i As Integer = 0 To _
cbbDataBits.Items.Add(4)
cbbDataBits.Items.Add(5)
cbbDataBits.Items.Add(6)
cbbDataBits.Items.Add(7)
cbbDataBits.Items.Add(8)
Next
btnDisconnetti.Enabled = False
End Sub

Private Sub btnConnetti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnetti.Click
If SerialPort.IsOpen Then
SerialPort.Close()
End If
Try
With SerialPort
.PortName = cbbCOMPorts.Text
.BaudRate = cbbBaudRate.Text
.Parity = IO.Ports.Parity.None
.DataBits = cbbDataBits.Text
.StopBits = IO.Ports.StopBits.One
End With
SerialPort.Open()
lblMessaggio.Text = cbbCOMPorts.Text & " Connessa."
btnConnetti.Enabled = False
btnDisconnetti.Enabled = True
txtStato.BackColor = Color.Green
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub btnDisconnetti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnetti.Click
Try
SerialPort.Close()
lblMessaggio.Text = SerialPort.PortName & " Disconnessa."
btnConnetti.Enabled = True
btnDisconnetti.Enabled = False
txtStato.BackColor = Color.Red
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub btnInvia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInvia.Click
Try
SerialPort.Write(txtInvia.Text & vbCrLf)
With txtTesto
.AppendText(txtInvia.Text & vbCrLf)
.ScrollToCaret()
End With
txtInvia.Text = String.Empty
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Public Shared Function ConvertStringToByteArray(ByVal stringToConvert As String) As Byte()
Return (New UnicodeEncoding).GetBytes(stringToConvert)
End Function
Public Delegate Sub myDelegate()
Public Sub updateTextBox()
With txtTesto
.AppendText(SerialPort.ReadExisting)
.ScrollToCaret()
End With
End Sub
Private Sub btnCancella_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancella.Click
txtTesto.Clear()
End Sub
End Class

questo il ricevitore
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 0 To _
My.Computer.Ports.SerialPortNames.Count - 1
cbbCOMPorts.Items.Add( _
My.Computer.Ports.SerialPortNames(i))
Next
btnDisconnetti.Enabled = False
For i As Integer = 0 To _
cbbBaudRate.Items.Add(300)
cbbBaudRate.Items.Add(600)
cbbBaudRate.Items.Add(1200)
cbbBaudRate.Items.Add(2400)
cbbBaudRate.Items.Add(4800)
cbbBaudRate.Items.Add(9600)
Next
btnDisconnetti.Enabled = False
For i As Integer = 0 To _
cbbDataBits.Items.Add(4)
cbbDataBits.Items.Add(5)
cbbDataBits.Items.Add(6)
cbbDataBits.Items.Add(7)
cbbDataBits.Items.Add(8)
Next
btnDisconnetti.Enabled = False
End Sub

Private Sub btnConnetti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnetti.Click
If SerialPort.IsOpen Then
SerialPort.Close()
End If
Try
With SerialPort
.PortName = cbbCOMPorts.Text
.BaudRate = cbbBaudRate.Text
.Parity = IO.Ports.Parity.None
.DataBits = cbbDataBits.Text
.StopBits = IO.Ports.StopBits.One
End With
SerialPort.Open()
lblMessaggio.Text = cbbCOMPorts.Text & " Connessa."
btnConnetti.Enabled = False
btnDisconnetti.Enabled = True
txtStato.BackColor = Color.Green
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub btnDisconnetti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnetti.Click
Try
SerialPort.Close()
lblMessaggio.Text = SerialPort.PortName & " Disconnessa."
btnConnetti.Enabled = True
btnDisconnetti.Enabled = False
txtStato.BackColor = Color.Red
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub DataReceived( _
ByVal sender As Object, _
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
Handles SerialPort.DataReceived
txtLeggi.Invoke(New _
myDelegate(AddressOf updateTextBox), _
New Object() {})
End Sub

Public Delegate Sub myDelegate()
Public Sub updateTextBox()
With txtLeggi
.AppendText(SerialPort.ReadExisting)
.ScrollToCaret()
End With
End Sub
Private Sub btnCancella_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancella.Click
txtLeggi.Clear()
End Sub

End Class