Hallo,
kann mir jemand helfen?
ich habe einen Tams Master Controll(Digitalessteuergerät für eine
Modellbahn) und will ihn jetzt über den PC steuern. Mein Code sieht so
aus(,aber ich finde den Fehler nicht):
Public Class Form1
Const COM_PORT As String = "COM9"
Dim PufferString As String
Private Delegate Sub DelegateSub()
Private Datenanzeigen As New DelegateSub(AddressOf Anzeigen)
------------------------------------------------------------------------
---
Private Sub Form1Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) _ Handles MyBase.Load
Dim EinzelPort As String
Debug.WriteLine("INFO: Folgende Ports wurden auf dem System
gefunden:")
For Each EinzelPort In My.Computer.Ports.SerialPortNames
Debug.WriteLine(EinzelPort)
Next EinzelPort
With SerialPort1
If Not .IsOpen Then
Try
.PortName = COM_PORT
.BaudRate = 57600
.DataBits = 8
.WriteTimeout = 2000 ' 1000 ms = 1
Sek.
.ReadTimeout = 2000 ' 1000 ms = 1
Sek.
.Handshake = IO.Ports.Handshake.None
.NewLine = vbCr
.Open()
Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Open", _
MessageBoxButtons.OK,
MessageBoxIcon.Error)
Exit Sub
End Try
End If
End With
TextBox1.Multiline = True
TextBox1.ScrollBars = ScrollBars.Both
End Sub
------------------------------------------------------------------------
---
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) _Handles Button1.Click
Try
SerialPort1.WriteLine(TextBox1.Text)
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Senden ...")
Exit Sub
End Try
Debug.WriteLine("Daten übermittelt!")
Try
TextBox1.Text = SerialPort1.ReadLine
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")
End Try
End Sub
'-----------------------------------------------------------------------
---
Private Sub SerialPort1_DataReceived(ByVal sender As Object, _
ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs)_ Handles
SerialPort1.DataReceived
End Sub
Private Sub Anzeigen()
TextBox1.AppendText(PufferString) ' Text
am Ende hinzufügen
TextBox1.ScrollToCaret() ' Scrollen bis
zum neuen Text
End Sub
'-----------------------------------------------------------------------
---
Private Sub Form1_FormClosing(ByVal sender As Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) _ Handles
Me.FormClosing
If SerialPort1.IsOpen Then SerialPort1.Close() ' Port wieder
Schließen
Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
End Sub
End Class
Ich glaube das keine Verbindung mit dem Gerät hergestellt wird.
danke, schon mal im Vorhinaus. :)
Moritz R. schrieb: > Ich glaube das keine Verbindung mit dem Gerät hergestellt wird. zu Glaubens-Fragen sind eher religiös orientierte Boards vermutlich bessere Ratgeber.... Ansonsten soltest du einiges mehr zu deiner Hardware und Umgebung schreiben (mit Produktlinks, Fotos etc). Bei diesem Wetter beschlagen die Glaskugeln nämlich ziemich schnell...
Weil 1. Keine Antwort kommt.
2. Kommt das timeout
...hier ist das Modell:
http://www.tams-online.de/htmls/produkte/EasyControl/produkte_ec1.html
Moritz R. schrieb: > Weil 1. Keine Antwort kommt. Hast du mal versucht, das Modul von einem Terminalprogramm aus anzusprechen?
Wird
Private Sub SerialPort1_DataReceived(ByVal sender As Object, _
ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs)_ Handles
SerialPort1.DataReceived
End Sub
aufgerufen?
nein, es kommt nur bis
Try
TextBox1.Text = SerialPort1.ReadLine
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")
End Try
End Sub
..und dann kommt ist timeout.
grüße Mori
- Kommt bei .ReadByte statt .ReadLine auch Timeout? - Sicher mit NewLine = vbCr und nicht evtl. LF?
juppi, jetzt funktioniert es, musste noch ein paar Eigenschaften einstellen. Danke füre unterstützung :)
Dann lass doch den Rest der Welt an Deiner Freude teilhaben und verrate welche das waren
der gesamte code:
Const COM_PORT As String = "COM9"
Dim PufferString As String
Private Delegate Sub DelegateSub()
Private Datenanzeigen As New DelegateSub(AddressOf Anzeigen)
Private Sub Form1Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) _
Handles MyBase.Load
Dim EinzelPort As String
Debug.WriteLine("INFO: Folgende Ports wurden auf dem System
gefunden:")
For Each EinzelPort In My.Computer.Ports.SerialPortNames
Debug.WriteLine(EinzelPort)
Next EinzelPort
With SerialPort1
If Not .IsOpen Then
Try
'.PortName = COM_PORT
'.BaudRate = 57600
'.DataBits = 8
'.WriteTimeout = 2000 ' 1000
ms = 1 Sek.
'.ReadTimeout = 2000 ' 1000
ms = 1 Sek.
'.Handshake = IO.Ports.Handshake.None
'.ReceivedBytesThreshold = 1
.NewLine = vbCr
.Open()
Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Open", _
MessageBoxButtons.OK,
MessageBoxIcon.Error)
Exit Sub
End Try
End If
End With
TextBox1.Multiline = True
TextBox1.ScrollBars = ScrollBars.Both
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) _
Handles Button1.Click
Try
PufferString = ""
SerialPort1.WriteLine(TextBox1.Text)
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Senden ...")
Exit Sub
End Try
Debug.WriteLine("Daten übermittelt!")
TextBox1.Text = ""
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, _
ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) _
Handles SerialPort1.DataReceived
'hier
Dim response As String
Try
'TextBox1.Text = TextBox1.Text & SerialPort1.ReadExisting
response = SerialPort1.ReadExisting
Debug.WriteLine(response)
PufferString &= response
If PufferString.EndsWith("]") Then
'event auslösen
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")
End Try
End Sub
Private Sub Anzeigen()
Label1.Text = PufferString
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, _
ByVal e As
System.Windows.Forms.FormClosingEventArgs) _
Handles Me.FormClosing
If SerialPort1.IsOpen Then SerialPort1.Close() ' Port wieder
Schließen
Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Anzeigen()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Try
PufferString = ""
SerialPort1.WriteLine("Behfehl") '<----hier befehl eingeben
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Senden ...")
Exit Sub
End Try
Debug.WriteLine("Daten übermittelt!")
TextBox1.Text = ""
End Sub
..und die Eigenschaften:
unter serial_port :
-DtrEnable auf "True"
-RtsEnable auf "True"
Gruß Moritz
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.