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:
einmal den SerialPort auszulesen und direkt ins Fenster zu schreibenCode: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) & ";"
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:
Programm der RN-Control: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
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







Zitieren


Lesezeichen