Avatar billede karsten_quist Nybegynder
27. april 2001 - 20:15 Der 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 ???
Avatar billede psylocke Nybegynder
27. april 2001 - 21:22 #1
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}

Avatar billede microtec Nybegynder
27. april 2001 - 22:04 #2
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.
Avatar billede jespernaur Nybegynder
27. april 2001 - 22:12 #3
Se i første omgang

http://msdn.microsoft.com/library/devprods/vs6/vbasic/comm98/vbobjcomm.htm

men i særlig grad

http://msdn.microsoft.com/library/devprods/vs6/vbasic/comm98/vbpronulldisc_comm.htm

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.

Mvh
Jesper Naur
Avatar billede microtec Nybegynder
27. april 2001 - 22:53 #4
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.
Avatar billede nolle_k Nybegynder
28. april 2001 - 15:52 #5
data == NULL vil ikke fungere!!

I VB gør du følgende!!

if(IsNull(data)) then
  data = 0
end if

Nolle_K
Avatar billede scb Praktikant
28. april 2001 - 15:56 #6
Prøv i properties for MSComm at sætte NullDiscard til True, det er muligt at det hjælper.
-SCB
Avatar billede karsten_quist Nybegynder
28. april 2001 - 16:06 #7
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.
Avatar billede karsten_quist Nybegynder
28. april 2001 - 16:07 #8
scb >>
Det kan jeg ikke gøre, fordi jeg skal bruge alle værdier fra 0 til 255
Avatar billede nolle_k Nybegynder
28. april 2001 - 16:32 #9
Ja så er det et problem???!!
Avatar billede karsten_quist Nybegynder
28. april 2001 - 18:08 #10
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
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