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:
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
Quellcode RN-Control (Bascom)
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
Lesezeichen