DargarWhiteFang Skrevet 30. november 2004 Del Skrevet 30. november 2004 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øsningPrivate 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
aadnk Skrevet 30. november 2004 Del Skrevet 30. november 2004 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
DargarWhiteFang Skrevet 2. desember 2004 Forfatter Del Skrevet 2. desember 2004 (endret) 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 2. desember 2004 av Dargar Lenke til kommentar
Jonas Skrevet 2. desember 2004 Del Skrevet 2. desember 2004 Forum-databasen kræsjet i går kveld. De tok frem backupen fra kvelden før, så noen poster ble borte. Er allerede en tråd om det. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå