- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 12 von 12

Thema: RN-Control über RS232 mit PC komunizieren lassen (Vistual Basic)

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.06.2010
    Ort
    Darmstadt
    Beiträge
    136
    Anzeige

    LiFePo4 Akku selber bauen - Video
    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
    Es gibt keine Probleme, es gibt nur Lösungen

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.06.2010
    Ort
    Darmstadt
    Beiträge
    136
    so ich hab immer noch nen Problem^^
    und zwar will das nicht so recht mit dem Übertragen von Daten vom PC auf die RN-Control funktionieren.
    ich hab jetzt auch erstmal nen unabhängiges Programm geschrieben und genau diesen Code von dem Joystick Tutorial eingefügt. aber irgendwie kommen die daten net richtig an bzw nur teilweise.
    ich weis aber auch nicht woran es liegen könnte.
    wenn ich zum Beispiel den Wert X5000 an die RN Control Sende kommt nur 5 an
    bei X1000 nur ne 1

    kann mir da jemand helfen. wie gesagt ich habs eins zu eins von dem tutorial übernommen, nur dass ich die werte die er senden sollt über ein Textfeld manuell eingebe und dass er dies mit einem timer alle paar ms sendet bzw immer dann wenn nen button gedrückt wird.
    Es gibt keine Probleme, es gibt nur Lösungen

Seite 2 von 2 ErsteErste 12

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress