27. april 2001 - 20:15Der er
9 kommentarer og 1 løsning
rs232 kommunikation
Jeg benytter komponentet MSComm til at modtage data på com1, men når jeg modtager \"karakteren\" NULL (ASCII-værdi 0) og vil gemme det i en variabel får jeg fejlen: \"Invalid procedure call or argument\" - og det er lige meget hvilken type variabel jeg bruger. Er der nogen der kan hjælpe ???
Nu er jeg ikke lige en haj til VB, men som regel er null ikke en egentlig værdi, men rettere mangel på en værdi. Derfor kan null ikke lægges ind i en variabel, det kunne måske løses med en simpel null-catch? f.x: if (data == null) {sæt en ny variabel til 0, eller gå videre, eller på anden vis ignorer null, alt efter behov}
Jeg havde det samme problem med en tilsvarrende komponent til Delphi. Problemet var at karakteren-NULL benyttes til at terminerer tekst-stringe i Windows.
Da jeg skulle lave software til begge ender af RS232 forbindelsen, løste jeg problemet ved at undgå værdien NULL.
Når der tales om serielt input fra en COM-port, er ASCII tegnet 0 i høj grad en lovlig værdi, fuldstændig i lighed med alle de andre tegn fra 1 til 255.
jespernaur >> Meget enig i at ASCII NULL er en lovlig værdi.
Mit problem skyldes en dårlig skrevet Delphi komponent. Hver gang den læste NULL fra recieve-bufferen, opfattede den det som værende en string-terminering, hvorefter der ikke blev læst mere. Det er dårlig programmering, helt klart. Desværre havde jeg ingen source så det kunne ændres.
microtec >> Jeg her ikke mulighed for at undgå at sende null, da alle værdier fra 0 til 255 skal kunne sendes.
jespernaur >> Det du gav mig links til er det samme som der står i hjælpefilen til VB, og det har jeg gennemlæst. Men uden held.
nolle k >> Måden du foreslår at teste på er smart nok, men problemet er bare at når man tester med if-sætningen bliver karakteren slettet fra reciverbufferen. Og hvis karakteren ikke var null så er den blevet slettet.
I skal alle sammen have mange tak fordi i gad svare på mit spørgsmål, selv om i ikke kunne give mig løsningen. Jeg kom selv frem til den, og den kan ses her under.
Dim char as String Dim Data as Byte char = MSComm1.Input If (char = \"\") Then Data = 0 Else Data = Asc(char) End If
Synes godt om
Ny brugerNybegynder
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.