Hallo,
für ein größeres Projekt möchte ich gerne eine Steuersoftware schreiben.
Ich habe bisher etwas Erfahrung in PHP und Bascom, bin aber noch Anfänger.
Ich benötige ein Programm, welches über die Serielle Schnittstelle mit Platinen kommuniziert, Zustände Ausgibt und ändern kann.
Nach diversen Beispielen im Internet habe ich nun auch ein Programm geschrieben, welches ganz minimal diese Aufgabe erfüllen soll.
Das Senden zu den Platinen klappt bisher immer gut, Probleme habe ich beim Empfangen der Nachrichten gehabt (bzw. immer noch).
Also hier ist mal das Programm:
Spoiler anzeigen
Im Prinzip macht es erstmal ganz einfach mit fest eingestellten Werten eine Com-Verbindung.
Von der Platine werden Taster zustände übertragen und über farbliche Buttons dargestellt.
LEDs lassen sich über Buttons ein und Ausschalten, der Zustand dieser wird auch von der Platine übertragen und dargestellt.
Das Problem ist nun, das dieses Programm sehr "hakend" funktioniert. Der Empfang von dem Platinen klappt (wenn auch nur langsam), allerdings scheint sich das Programm irgendwie aufzuhängen. Die LEDs lassen sich nur schalten, wenn gerade Daten von den Platinen kommen bzw. auch das Programm lässt sich auf dem Desktop nicht verschieben.
Es liegt vermutlich an dem zum Datenempfang benutzen Timer (Dieser Code-Teil stammt aus dem Internet als Beispiel). Ohne das Unterprogramm zum Datenempfang funktioniert das Senden einwandfrei.
Nun meine Frage, kann mir jemand helfen, das Unterprogramm zum Empfang zu ändern?
Auf dem Prozessor läuft es ja so ab, das sobald ein Zeichen im Buffer liegt dieses zu einem String addiert wird und sobald das Zeichen ein CR ist dieser String ausgewertet wird.
So würde ich das in VB am liebsten ja auch machen, habe aber oft gelesen dass dies schlecht ist.
Danke & viele Grüße
Dirk
für ein größeres Projekt möchte ich gerne eine Steuersoftware schreiben.
Ich habe bisher etwas Erfahrung in PHP und Bascom, bin aber noch Anfänger.
Ich benötige ein Programm, welches über die Serielle Schnittstelle mit Platinen kommuniziert, Zustände Ausgibt und ändern kann.
Nach diversen Beispielen im Internet habe ich nun auch ein Programm geschrieben, welches ganz minimal diese Aufgabe erfüllen soll.
Das Senden zu den Platinen klappt bisher immer gut, Probleme habe ich beim Empfangen der Nachrichten gehabt (bzw. immer noch).
Also hier ist mal das Programm:
Quellcode
- Public Class Form1
- Dim a$, f$, count
- Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
- SerialPort2.Close()
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- SerialPort2.Open()
- End Sub
- Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
- SerialPort2.Write("SLED1:1" + vbCr)
- End Sub
- Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
- SerialPort2.Write("SLED1:0" + vbCr)
- End Sub
- Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
- SerialPort2.Write("SLED2:1" + vbCr)
- End Sub
- Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
- SerialPort2.Write("SLED2:0" + vbCr)
- End Sub
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- Dim xvar As String
- xvar = SerialPort2.ReadLine
- Dim newString As String = xvar.Replace(vbCr, "").Replace(vbLf, "")
- Label2.Text = newString
- If newString = "Taster1:0" Then
- Button1.BackColor = Color.Red
- End If
- If newString = "Taster1:1" Then
- Button1.BackColor = Color.Green
- End If
- If newString = "Taster2:0" Then
- Button2.BackColor = Color.Red
- End If
- If newString = "Taster2:1" Then
- Button2.BackColor = Color.Green
- End If
- If newString = "Taster3:0" Then
- Button3.BackColor = Color.Red
- End If
- If newString = "Taster3:1" Then
- Button3.BackColor = Color.Green
- End If
- If newString = "LED1:1" Then
- Button5.BackColor = Color.Green
- End If
- If newString = "LED1:0" Then
- Button5.BackColor = Color.Red
- End If
- If newString = "LED2:1" Then
- Button8.BackColor = Color.Green
- End If
- If newString = "LED2:0" Then
- Button8.BackColor = Color.Red
- End If
- End Sub
- End Class
Im Prinzip macht es erstmal ganz einfach mit fest eingestellten Werten eine Com-Verbindung.
Von der Platine werden Taster zustände übertragen und über farbliche Buttons dargestellt.
LEDs lassen sich über Buttons ein und Ausschalten, der Zustand dieser wird auch von der Platine übertragen und dargestellt.
Das Problem ist nun, das dieses Programm sehr "hakend" funktioniert. Der Empfang von dem Platinen klappt (wenn auch nur langsam), allerdings scheint sich das Programm irgendwie aufzuhängen. Die LEDs lassen sich nur schalten, wenn gerade Daten von den Platinen kommen bzw. auch das Programm lässt sich auf dem Desktop nicht verschieben.
Es liegt vermutlich an dem zum Datenempfang benutzen Timer (Dieser Code-Teil stammt aus dem Internet als Beispiel). Ohne das Unterprogramm zum Datenempfang funktioniert das Senden einwandfrei.
Nun meine Frage, kann mir jemand helfen, das Unterprogramm zum Empfang zu ändern?
Auf dem Prozessor läuft es ja so ab, das sobald ein Zeichen im Buffer liegt dieses zu einem String addiert wird und sobald das Zeichen ein CR ist dieser String ausgewertet wird.
So würde ich das in VB am liebsten ja auch machen, habe aber oft gelesen dass dies schlecht ist.
Danke & viele Grüße
Dirk