Avatar billede vips Nybegynder
28. august 2002 - 21:22 Der er 7 kommentarer og
1 løsning

Modtage streng på com port fra måleudstyr

Jeg er ved at udvikle en applikation der kan modtage serielle data fra et måleudstyr.
jeg anvender MSComm control og det virker fint, men.
de serielle data er adskilt af <CR> og strengen har ikke samme længde hvergang, så hvordan får jeg de enkelte strenge adskildt fra hinanden.
når jeg aflæser input bufferen, kan det jo ske at jeg tømmer den midt i modtagelsen af strengen

er der nogen der har en ide / som kan hjælpe
mvh Viggo
Avatar billede krismort Nybegynder
28. august 2002 - 23:47 #1
du adskiller din string  sådan her

dim tokens() as string, ntokens as integer
tokens() = split(buffer, "<CR>")
ntokens = ubound(tokens())-1

Kristian
Avatar billede krismort Nybegynder
28. august 2002 - 23:48 #2
dim n as integer
for n = 0 to ntokens
  debug.print token(n)
next n
Avatar billede vips Nybegynder
30. august 2002 - 11:17 #3
Tak for et hurtigt svar
Jeg har testet det og det ser ud til at virke
De enkelte del-strenge som er afsluttet med <CR> hentes ud, men bufferen er uændret.
Hvordan kan jeg slette de del-strenge i bufferen som er hentet ud, således at bufferen kun indeholder de sidste karakterer.
viggo
Avatar billede krismort Nybegynder
30. august 2002 - 17:13 #4
okay du ser på længden af dine delstreng + længden af "<CR>" og sletter din buffer ved for hver delstreng at slette delstrengens længde i bufferen ... altså noget lign det her:

for n = 0 to ntokens
    inputbuffer = Mid(inputbuffer, 1 + len(token(n))+len("<CR>"), Len(str))
next n

grunden til at du skal have længden af "<CR>" med er fordi der ikke kommer til at stå <CR> men når du splitter dine strenge op.

Kristian
Avatar billede krismort Nybegynder
30. august 2002 - 17:33 #5
Nå jow jeg kom lige på en alternativ løsning ... du kopierer hele tiden input bufferen over i en inputstreng et enkelt tegn af gangen .. så snart der er mere end 3 tegn begynder du at checke om det/de sidste tegn er "<CR>" hvis de er kopierer du bare bufferen over i collection eller behandler den direkte ... sletter derefter hele din input streng... starter forfra med at hente tegn for tegn ind igen osvosv.


Kristian
Avatar billede vips Nybegynder
30. august 2002 - 20:41 #6
<CR> er ikke en streng, men en enkelt karakter , også benævnt som carrige return, VBcr eller chr$(13)
jeg tester dit forslag
tak for hjælpen
Avatar billede soenderhegn Nybegynder
15. december 2003 - 11:46 #7
Til Viggo.
Er i gang med den samme opgave med data fra måleure.
Har søgt her for at finde hjælp til mscomm og er her faldet over dette indlæg.
Har aldrig programmeret til comport med har lavet en masse text stringe mv.
Kan du hjælpe mig igang.
Kan kun få måling en gang. skal derefter afslutte og herefter i hypretaminal for at få data igen.

Har ikke vedlagt kode da jeg lige ville hører om du vil hjælpe mig.

MVH Klaus
Avatar billede vips Nybegynder
15. december 2003 - 12:04 #8
Hej Klaus
Se på eksemplet VBTERM fra MS, det er en god hjælp
betragt den seriele port som 2 variabler, en du kan skrive til og en du kan læse, læs input string vha. en timer
sørg for at hastighed og handshake er sat op så det passer til dit eksterne udstyr.
mvh Viggo
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester