ja natürlich sag ich noch was falsch war. aber es war auf jedenfall nicht GND^^
hab das oben im Quellcode schon angedeutet.
ich hab den Fehler gemacht in der Zeile:
Code:
rtbFehlermeldungen.AppendText(Chr(SerialPort1.ReadByte)) 'Hier ist der Fehler. Man kann ja nicht zweimal Daten auslesen wenn sie schon ausgelesen sind^^
rtbFehlermeldungen.ScrollToCaret()
DatenEmpfangen = DatenEmpfangen & Chr(SerialPort1.ReadByte) & ";"
einmal den SerialPort auszulesen und direkt ins Fenster zu schreiben
und dann gleich nochmal auszulesen um die werte in die variable zu schreiben.
somit hat er das erste zeichen ausgegeben das zweite in die variable geserzt und das dritte wieder ausgegeben und so weiter^^
also eigentlich nen dummer fehler.
Ich hab das jetzt so gelöst: (wobei das einlesen in die RN-Control noch nicht 100%ig funktioniert da noch Fehlermeldungen kommen)
Code vom PC Programm:
Code:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim Licht, BlLicht, IRLicht As Integer
Dim DatenSenden As Boolean
Dim DatenEmpfangen As String
Dim AusgabeArr() As String
'IRAbstand1 = 0
'IRAbstand2 = 0
'UAbstand1 = 0
'UAbstand2 = 0
DatenSenden = False
MotorL = CInt(MoDrehzahl * MotorL / 100)
MotorR = CInt(MoDrehzahl * MotorR / 100)
If MotorL < 0 Then
prbUKetteL.Value = MotorL * (-1)
Else
prbUKetteL.Value = MotorL
End If
If MotorR < 0 Then
prbUKetteR.Value = MotorR * (-1)
Else
prbUKetteR.Value = MotorR
End If
Licht = Scheinwerfer
BlLicht = Blinklicht
IRLicht = IRStrahler
DatenEmpfangen = ""
'Daten vom COM Port empfangen
If SerialPort1.BytesToRead > 0 Then
Do
'DatenEmpfangen = SerialPort1.ReadLine
DatenEmpfangen = DatenEmpfangen & SerialPort1.ReadLine '& ";"
If SerialPort1.BytesToRead = 0 Then
Exit Do
End If
Loop
rtbFehlermeldungen.Text = rtbFehlermeldungen.Text & vbNewLine & DatenEmpfangen
AusgabeArr = DatenEmpfangen.Split(CChar(";")) 'empfangenen Text trennen und in ein String-Array speichern
If CDbl(AusgabeArr(0)) = 1 Then
If CDbl(AusgabeArr(9)) = 23 Then
'Werte aus Ausgabe Array den einzelnen Variablen zuordnen
IRAbstand1 = CInt(AusgabeArr(2))
IRAbstand2 = CInt(AusgabeArr(3))
UAbstand1 = CInt(AusgabeArr(4))
UAbstand2 = CInt(AusgabeArr(5))
Batteriestatus = CShort(AusgabeArr(6))
lblTempA.Text = AusgabeArr(7)
lblTempI.Text = AusgabeArr(8)
rtbFehlermeldungen.Text = rtbFehlermeldungen.Text & vbNewLine & AusgabeArr(1)
Else
MessageBox.Show("Der Startpunkt war falsch", "Warnung", MessageBoxButtons.OK)
End If
End If
DatenSenden = True
End If
If DatenSenden = True Then
'Daten über den COM Port RS232 an die RN-Control senden:
If SerialPort1.IsOpen Then 'folgenden Code nur ausführen wenn auch eine Verbindung besteht
SerialPort1.Write("Motorr" + (MotorR).ToString + Chr(13)) 'per RS232 die aktuelle Motordrehzahl für Rechten Motor senden ' " CHr(13) =Enter drücken"
SerialPort1.Write("Motorl" + (MotorL).ToString + Chr(13)) 'per RS232 die aktuelle Motordrehzahl für Linken Motor senden ' " CHr(13) =Enter drücken"
'SerialPort1.Write("Licht" + (Licht).ToString + Chr(13)) 'per RS232 der Scheinwerfer an aus senden ' " CHr(13) =Enter drücken"
'SerialPort1.Write("BlLicht" + (BlLicht).ToString + Chr(13)) 'per RS232 das Blinklicht an aus senden ' " CHr(13) =Enter drücken"
'SerialPort1.Write("IRLicht" + (IRLicht).ToString + Chr(13)) 'per RS232 der IR-Strahler an aus senden ' " CHr(13) =Enter drücken"
'SerialPort1.Write("SchildH" + (SchildPosH).ToString + Chr(13)) 'per RS232 das SchildHorizontal senden ' " CHr(13) =Enter drücken"
'SerialPort1.Write("SchildV" + (SchildPosV).ToString + Chr(13)) 'per RS232 der Schild Vertikal senden ' " CHr(13) =Enter drücken"
'SerialPort1.Write("Kamerapos" + (KameraPosition).ToString + Chr(13)) 'per RS232 der Schild Vertikal senden ' " CHr(13) =Enter drücken"
End If
DatenSenden = False
End If
lblIRAbstand1.Text = IRAbstand1 & " cm"
lblIRAbstand2.Text = IRAbstand2 & " cm"
lblUAbstand1.Text = UAbstand1 & " cm"
lblUAbstand2.Text = UAbstand2 & " cm"
prbBatterie.Value = Batteriestatus
KameraPosition = 0
SchildPosH = 0
SchildPosV = 0
MotorL = 0
MotorR = 0
End Sub
Programm der RN-Control:
Code:
Do
Taste = Tastaturabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Case 2
Case 3
Case 4
Case 5
Print "Programm wurde abgebrochen"
Sound Portd.7 , 800 , 400
Exit Do
End Select
End If
Fehlermeldung = "Dies ist Ein Test"
Irabstand1 = 20
Irabstand2 = 10
Uabstand1 = 500
Uabstand2 = 100
Batteriespannung
Batteriestatus = Spannung
Temperatura = 2
Temperaturi = 20
If Empfangstatus = 1 Then
Print 1 ; ";" ; Fehlermeldung ; ";" ; Irabstand1 ; ";" ; Irabstand2 ; ";" ; Uabstand1 ; ";" ; Uabstand2 ; ";" ; Batteriestatus ; ";" ; Temperatura ; ";" ; Temperaturi ; ";" ; 23
Empfangstatus = 0
End If
'Input "" , Empfang1 'Einlesen der Daten die vom RS232 Port gesendet wurdne
'Input "" , Empfang2
If Empfangstatus = 0 Then
Data_available = Ischarwaiting()
If Data_available > 0 Then 'Wenn Daten da sind, dann...
Input "" , Inputstring
Motorr_empfangen = Instr(inputstring , "Motorr") 'Gibt den Motorwert des Substrings "Motorr" aus oder NULL wenn nicht gefunden
Motorl_empfangen = Instr(inputstring , "Motorl") 'Gibt den Motorwert des Substrings "Motorl" aus oder NULL wenn nicht gefunden
Empfangstatus = 1
End If
If Motorr_empfangen = 1 Then
Motorr_wert_string = Mid(inputstring , 2) 'Die erste stelle des Strings (Das Motorr) abschneiden
Motorr_wert_integer = Val(motorr_wert_string) 'String in Integer konvertieren
End If
If Motorl_empfangen = 1 Then
Motorl_wert_string = Mid(inputstring , 6) 'Die erste stelle des Strings (Das Motorr) abschneiden
Motorl_wert_integer = Val(motorl_wert_string) 'String in Integer konvertieren
End If
Print Motorl_wert_string
Print Motorl_empfangen
Empfangstatus = 1
End If
Motorr = Motorr_wert_integer
Motorl = Motorl_wert_integer
Motorschalten
Ausgabe1 = Motorr * 4
Ausgabe2 = Motorl * 2
Motorr = 0
Motorl = 0
Sound Portd.7 , 10 , Ausgabe1
'Sound Portd.7 , 10 , Ausgabe2
Waitms 1
Loop
End
Lesezeichen