Gå til innhold

Seriel Comm. og inn-data filtrering hjelp


Anbefalte innlegg

Heihopp.

 

tenkte ny post med nytt tema kunne være på sin plass.

 

Tidligere når jeg har laget VB program som leser inn fra serieporten, så har jeg hatt data-kommunikasjon av typen:

 

VB til "yttre verden": "Gi meg data fra prob 1"

"yttre verden": "Her er data fra prob 1"

 

Dette gjorde det ganske lett å handtere inndataet.

 

Denne gangen er det (desverre) annerledes. Jeg kommer å få inn data mer eller mindre kontinuerlig på serie-porten (9600baud). Formatet er ikke helt støpt i jern ennå, men det blir omtrent som vist under. Hver [firkantparantes] er 1 byte med data.

 

[M][P][1-16 i hex][package# 0-255][HighByte][LowByte]

 

M og P brukes som frame-synch, i kombinasjon med 1-16 (enhets ID) og en package counter (som vil avdekke evnt. packet loss, vi forventer oss fra tidligere erfaring at pakke-tap vil bli minimalt, derfor rekker det med 0-255) føler vi at vi har en ganske bra frame-synch. HighByte og LowByte er det faktiske dataet som vi vil behandle.

 

 

Jeg har laga en mulig løsning på dette, men igjen så er jeg på dypt vann..

min løsning

Private Sub Command2_Click()

Dim scrap As Integer                                    'value never used

ExitRX = False

Do Until ExitRX                                            'ExitRX --> Exit when ExitRX = True

    Do Until MPEGCom.InBufferCount              'Wait for at least 1 byte in inbuffer

        scrap = DoEvents()                              'Let system operate while waiting

    Loop

    tmpBuffer = MPEGCom.Input                    'Get 1 byte from Com-port

    If Chr$(tmpBuffer) = "M" Then                  'If byte is M continue

        Do Until MPEGCom.InBufferCount          'Wait for at least 1 byte in inbuffer

            scrap = DoEvents()                          ' ....

        Loop

        tmpBuffer = MPEGCom.Input

        If Chr$(tmpBuffer) = "P" Then

            Do Until MPEGCom.InBufferCount

                scrap = DoEvents()

            Loop

            tmpBuffer = MPEGCom.Input

            If tmpBuffer > 0 And tmpBuffer < 17 Then

                Do Until MPEGCom.InBufferCount

                    scrap = DoEvents()

                Loop

                tmpBuffer = MPEGCom.Input  'Ignore packet counter for now

                Do Until MPEGCom.InBufferCount

                    scrap = DoEvents()

                Loop

                HByte = MPEGCom.Input

                Do Until MPEGCom.InBufferCount

                    scrap = DoEvents()

                Loop

                LByte = MPEGCom.Input

                Data = HByte * 256 + LByte

                    'Do datahandling and repeat cycle

            End If

        End If

    End If

Loop

 

End Sub

 

Feilen kommer på "linje 10" i koden over, alltså første If satsen. Her prøver jeg å sammenligne en Byte (som jeg konverterer til en karakter vha. Chr$) med bokstaven "M". Feilen jeg får er:

"Type Missmatch"

I C skal man jo bruke "enkel-fnutter" ' rundt karakterer, slik: 'M' men det fungerer ikke.

Lenke til kommentar
Videoannonse
Annonse

Jeg ser ingen deklarasjon på variabelen tmpBuffer. Har du dimmet den globalt i prosjektet eller formen, eller skapes den automatisk ved at Option Explicit ikke er inkludert? I alle fall bør du styre unna en slik tendens; det skaper en langt dårlig kode og gjør det svært vanskeligere å debugge programmet.

 

Uansett, jeg tror problemet kan løses på denne måten:

 

If Chr$(CLng(tmpBuffer)) = "M" Then 

 

Du må selvsagt gjenta dette ved de andre IF-setningene i tillegg.

Lenke til kommentar

Hva er det for feil på forumet nå da? (morgenen den 2. desember)

 

På lista over topics, så står det at det skal finnes 4 svar (5 med denne posten), hvorav den siste (før jeg posta denne) var fra Jonas, men jeg ser bare min original post + aadnk sin post?

 

Edit:

Glem det, nå har den lista endra seg. merkelig bug da.

Endret av Dargar
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...