- LiTime Speicher und Akkus         
Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 50

Thema: VB Problem

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385

    VB Problem

    Anzeige

    Powerstation Test
    Hi,
    Ich versuche mit VB6 und dem Comm Control Daten von einem an den COM1 Port angeschlossenen Micoprozessor zu empfangen und in einer Listbox zu speichern.

    Der VB-Code:
    Code:
    Private Sub Form_Load()
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,N,8,1"
    MSComm1.PortOpen = True
    MSComm1.RThreshold = 1
    MSComm1.SThreshold = 1
    MSComm1.InputLen = 0
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    MSComm1.PortOpen = False
    End Sub
    
    Private Sub MSComm1_OnComm()
    Dim Eingang As String
      Select Case MSComm1.CommEvent
       Case comOverrun:   MsgBox "Datenverlust!"
       Case comRxOver:    MsgBox "Datenverlust!"
       Case comEvReceive: List1.AddItem MSComm1.Input
      End Select
    End Sub

    Der Code im Prozessor ist das Testprogram2:
    Code:
    I = 0
    Do
       Incr I
       Wait 1
       Print "Hallo" ; I
    Loop

    Als Ergebnis bekomme ich folgendes in der List-Box:
    ( || bedeutet, dass da 2 seltsame schwarze balken kommen)
    Hallo1||
    Hallo2||
    Hallo3||
    Hallo4||
    Hallo5||
    Hallo6||
    Hallo7||
    Hallo8||
    Hallo9||
    Hallo10|
    |
    Hallo11|
    |
    Hallo12|
    |


    Meine Frage ist also: Warum kommen da so komische Balken nach dem empfangenen Wert? UND: Warum gibts immer nen neuen Eintrag in dem immer nur ein solcher Balken vorkommt. Schaut irgendwie wie ein Zeilenumbruch aber da es ne Liste ist geht das wohl nicht.

    Bitte um Hilfe !!
    mfg
    jagdfalke

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.08.2004
    Ort
    484..
    Alter
    33
    Beiträge
    339
    Soweit ich das in Erinnerung habe sind das Zeilenumbrüche, die in einer Listbox nicht als solche behandelt werden können, weil es da nur Einträge und keine Umbrüche gibt.
    Es scheint das ganze nicht sorichtig synchron zu sein. Ansonsten musst du empfangene Zeilenumbrüche rausfiltern.
    Die VB-Umgabungskonstante für einen Zeilenumbruch ist "vbCrLf"
    * human knowledge belongs to the world *

    www.domspage.de - Robotik - TobiSAt8

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Es scheinen wirklich Zeilenumbrüche zu sein. Ich hab das ganza mal in ne Textbox schreiben lassen.
    Wenn multiline auf false ist, sind die Balken da. Wenn es auf false gestellt ist, sind sie weg: wahrscheinlich in echte Zeilenümbrüche umgewandelt.

    Wie krieg ich das ganz denn dann synchron? Bzw. Wie kann ich die Zeilenübrüche rausfiltern?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.08.2004
    Ort
    484..
    Alter
    33
    Beiträge
    339
    Speicher den Input von der Comm-Schnittstelle vorher einmal in eine Variable und gehe die dann durch. Wenn du einen Text hast, der "Text" heißt filterst du wie folgt alle Zeilenumbrüche raus:

    Code:
    do
       Text = Left(Text, instr(Text,vbcrlf)-1) & right(Text, len(Text)-instr(Text,vbcrlf))
    until instr(Text, vbCrLf) = 0
    * human knowledge belongs to the world *

    www.domspage.de - Robotik - TobiSAt8

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Hi, ich hab das etz ein wenig anders gelöst, nachdem ich nen alten VB Schmöker gewälzt hab:

    Code:
    Private Sub Form_Load()
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,N,8,1"
    MSComm1.PortOpen = True
    MSComm1.RThreshold = 1
    MSComm1.SThreshold = 1
    MSComm1.InputLen = 0
    End Sub
    
    Private Sub MSComm1_OnComm()
    Dim Eingang As String
    Dim Eingang_replaced As String
    
    Select Case MSComm1.CommEvent
     Case comOverrun:   MsgBox "Datenverlust!"
     Case comRxOver:    MsgBox "Datenverlust!"
     Case comEvReceive: Eingang = MSComm1.Input
    End Select
    Text1.Text = Replace(Eingang, vbCrLf, "")
    VScroll1.Value = 255 - CInt(Replace(Eingang, vbCrLf, ""))
    End Sub
    Das komische ist: Es funktioniert alles wunderbar, bis ich das Fenster (während das proggy läuft) verschiebe. Dann steht in der textbox plötzlich ne ellenlange (nicht immer die gleiche) Zahl und die Fehlermessage lautet:
    "overflow"
    Was zum geier ist da los? liegt es am replace-Befehl?

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Am replace-Befehl liegt es nicht. Ich hab auch deine Methode probiert.

    Mist ich hab vergessen, dass sich der Aufbau mittlerweile geändert hat:
    Ich bewege im Moment mit dem Prozessor einen Servo und übermittle immer die aktuelle Position an den COM1.

    Hier die Subrouting im Prozessor, die den Servo bewegt und die Daten sendet:
    Code:
    Sub Rnb_servo(byval Servonummer As Byte , Byval Go_to_pos As Byte)
       Local Schritt As Integer
       If Curr_pos < Go_to_pos Then
           Schritt = 1
       Else
           Schritt = -1
       End If
    
      For Curr_pos = Curr_pos To Go_to_pos Step Schritt
             Open "comd.7:9600,8,n,1" For Output As #2
                Print #2 , "#s" ; Chr(servonummer) ; Chr(curr_pos)
             Close #2
             Print Curr_pos
             Waitms 10
      Next
    
    End Sub

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.08.2004
    Ort
    484..
    Alter
    33
    Beiträge
    339
    Hm, also wenn das wirklich nur auftaucht, wenn man das Formular verschiebt dann solltest du mal folgendest testen:


    - tritt gleicher Fehler auch bei der compilierten (.exe) Datei auf ?

    - ist das Programm vllt. auch vor dem Verschieben nicht mehr stabil und hängt, der Fehler wird erst bei Aktion sichtbar ?

    - wird das ganze somit wirklich unmittelbar mit dem Verschieben zusammenhängen ?

    - Mir ist nur ein Fehler in dem Zusammenhang bekannt, dessen Lösung lautet Auto-Redraw Eigenschaft des Formulars auf true setzen.
    * human knowledge belongs to the world *

    www.domspage.de - Robotik - TobiSAt8

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.08.2004
    Ort
    484..
    Alter
    33
    Beiträge
    339
    Mir fällt sonst grad noch ein, dass es vllt. nicht unmittelbar an dem Programm liegen könnte sondern unmittelbar an den kommenden Daten oder an der Schnittstelle ???
    Evt. anderen Rechner prüfen...
    * human knowledge belongs to the world *

    www.domspage.de - Robotik - TobiSAt8

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Ich hätte nie daran gedacht, dass es daran liegen könnte:
    Ich hab eine VScroll-Bar mit reingebaut und den Wert der übergeben wurde durch die Scroll-Bar dargestellt. Mit Scroll-Bar freckt mir das Proggy ständig ab, aber ohne machter des ohne mit der Wimper zu zucken. Warum ist das so? ist die Übertragungsgeschwindigkeit zu schnell für die Scroll-Bar? (auch die ProgressBar funktioniert nicht.)
    mfg
    jagdfalke

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.08.2004
    Ort
    484..
    Alter
    33
    Beiträge
    339
    Das könnte man ausprobieren, indem man Pausen einbaut. Ist denn die ober und Untegrenze der Scroll-Bar passende eingestellt ?
    * human knowledge belongs to the world *

    www.domspage.de - Robotik - TobiSAt8

Seite 1 von 5 123 ... LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus