Toon posts:

mscomm1.input in VB6

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Onderstaande code is voor simpele test doeleinde geschreven. Gewoon om te kijken of de data die binnen komt ook goed op een scherm zichtbaar gemaakt kan worden.

code:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Form_Load()
MSComm1.PortOpen = True

End Sub

Private Sub MSComm1_OnComm()
Dim tekst As String
tekst = MSComm1.Input

Text1.Text = Text1.Text & tekst & vbCrLf

End Sub


De data die ik verstuur vanuit VB6 is : 21050722050717001800 alleen ziet het er zo uit op het scherm:
code:
1
2
3
21050722
05071700
1800


Als ik het ontvang. Waarom is dit niet het hele getal aan elkaar ?

Waarschijnlijk maak ik hier een klassieke beginners fout?

[ Voor 4% gewijzigd door Verwijderd op 29-06-2007 13:54 ]


Verwijderd

Haal die vbCrLf eens weg :)

  • kunnen
  • Registratie: Februari 2004
  • Niet online
Soms krijg je het binnen voordat het helemaal verzonden is; mogelijke oplossing:


Visual Basic 6:
1
2
3
4
5
6
 '
    buffer = buffer + trim(tekst)
    If InStr(1, tekst, vbNewLine) Then
        text1.text = text1.text + buffer
        buffer = ""
    End If

Met
code:
1
    Dim buffer as string

bovenaan je code.

Zie ook:
\[C#] TcpClient verstuurd data te snel (strings aan elkaar)

[ Voor 12% gewijzigd door kunnen op 29-06-2007 14:09 ]


Verwijderd

Topicstarter
Als ik vbCrLf weg haal dan krijg ik inderdaad wel het hele getal aan elkaar, maar als ik direct daarna weer een cijfercode stuur zet hij deze er direct achteraan. Het is juist de bedoeling dat ik de cijfers in z'n geheel onder elkaar krijg in het text veld.

Ik ben nu even de oplossing van Pulsher aan het programmeren.

Verwijderd

Topicstarter
De oplossing van Pulsher geeft hetzelfde resultaat als mijn eigen code.

Alleen als ik de vbCrLf weghaal staat alles netjes achter elkaar. ( ik bedoel de 20 cijfers)
Maar ik heb juist de vbCrLf geplaatst zodat het volgende getal er netjes onder zou komen te staan.
Met de vbCrLf lijkt het wel of hij na elke 8 cijfers een nieuwe regel start. (8 bits misschien?)

Waar is de logica hier?

Verwijderd

Zet dit eens in je Form_load:

Visual Basic:
1
2
MSComm1.Settings = "9600,N,8,1"
        ' Tell the control to read the whole buffer when Input is used.

Van: How to access serial and parallel ports by using Visual Basic .NET (wel vb.net, maar werkt volgens mij ook wel voor VB6)

Even googlen kan geen kwaad blijkbaar :) Succes.

[ Voor 9% gewijzigd door Verwijderd op 29-06-2007 14:59 ]


Verwijderd

Topicstarter
In het eigenschappen venster staat dit al ingesteld op "9600,N,8,1" dit hoef ik niet nog eens te doen in de code toch?

(ik bedoel de settings van de commcontrol) _/-\o_

[ Voor 18% gewijzigd door Verwijderd op 29-06-2007 15:05 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Je zult zelf een scheidingsteken moeten introduceren (bijv door de cr+lf ook over de lijn te sturen). Vanwege de seriele communicatie met buffers weet je nooit wat er op het moment van lezen in de buffer staat. Dit kan het gehele getal zijn of steeds een stukje. Je zult de stukjes zelf op de juiste manier aan elkaar moeten plakken.

Idd een klassieke fout :)

[ Voor 4% gewijzigd door Creepy op 29-06-2007 15:42 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1