so ich hab das jetzt mal ausprobiert was im Wiki stand
aber irgendwie will der nicht so wie ich will^^
Also was ich machen will, ist Daten zwischen RN-Control und PC austauschen.
Also die RN-Control bekommt vom PC steuerbefehle und der PC bekommt Sensor werte von der RN-Control
und das alles soll per RS232 ausgetauscht werden.
Ich hab es jetzt hinbekommen dass die RN-Control daten an PC sendet aber in meinem Programm kommen die nur gestückelt oder nur teilweise an.
in Bascom kommt alles richtig an. Also muss das ja wohl an meinem Programm liegen aber ich find den Fehler nicht. Hab soweit alles so eingestellt wie in Bascom, also die Schnittstelleneinstellungen (Bautrate, Com1, usw)
und wenn ich vom PC an die RN-Control Daten senden will ging das bisher noch gar nicht. die pipst dann nur komisch.
Kann mir da jemand helfen?
Hier mal nen Ausschnitt aus dem Quellcode:
VB-Net:
Quellcode RN-Control (Bascom)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 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) & ";" If SerialPort1.BytesToRead = 0 Then Exit Do End If Loop If chbRNSenden.Checked = True Then 'Werte aus Ausgabe Array den einzelnen Variablen zuordnen IRAbstand1 = CInt(AusgabeArr(1)) IRAbstand2 = CInt(AusgabeArr(2)) UAbstand1 = CInt(AusgabeArr(3)) UAbstand2 = CInt(AusgabeArr(4)) Batteriestatus = CShort(AusgabeArr(5)) lblTempA.Text = AusgabeArr(6) lblTempI.Text = AusgabeArr(7) rtbFehlermeldungen.Text = rtbFehlermeldungen.Text & vbNewLine & AusgabeArr(0) DatenSenden = True End If End If AusgabeArr = message.Split(CChar(";")) 'empfangenen Text trennen und in ein String-Array speichern 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" KameraPosition = 0 SchildPosH = 0 SchildPosV = 0 MotorL = 0 MotorR = 0 End Sub
Code:'Microcontroller Einstellungen Definieren. $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 ... 'Hauptprogramm Do Taste = Tastaturabfrage() If Taste <> 0 Then Select Case Taste Case 1 Empfangstatus = 0 Case 2 Empfangstatus = 1 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 Fehlermeldung Print Irabstand1 Print Irabstand2 Print Uabstand1 Print Uabstand2 Print Batteriestatus Print Temperatura Print Temperaturi Empfangstatus = 1 'Normal 0 aber zu testzwecken auf 1 umgestellt. End If 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 , 2) 'Die erste stelle des Strings (Das Motorr) abschneiden Motorl_wert_integer = Val(motorl_wert_string) 'String in Integer konvertieren End If 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 900 Loop End







Zitieren


Lesezeichen