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.