Avatar billede phpgris Nybegynder
15. oktober 2002 - 12:21 Der er 20 kommentarer og
2 løsninger

MSComm - besynderlig opførsel

Jeg bruger i et program MSComm komponenten til at kommunikere med en infrarød enhed men jeg har et lille problem. Når jeg starter programmet normalt (i IDE'et) åbnes COM-porten godt nok men der kommer aldrig svar på de kommandoer jeg ligger i komponentens output-buffer. Men hvis jeg derimod indsætter et breakpoint umiddelbart efter porten er blevet åbnet og derefter starter programmet, venter på at det stoppes af breakpointet og starter det igen virker alting som det skal! Sætter jeg breakpointet inden porten er åbnet virker det ikke.

Da det naturligvis hverken er acceptabelt eller teknisk muligt at have et breakpoint midt i sit program går pointene til den der kan få mit program til at fungere på normal vis.

Giv venligst konkrete løsningsforslag, ikke bare links til tilfældige sider hvor man måske (måske ikke) kan finde information om problemet.
Avatar billede dk_akj Nybegynder
15. oktober 2002 - 12:38 #1
Hvilken metode bruger du til at checke om der er sendt data fra den infrarøde enhed ??

//akj
Avatar billede phpgris Nybegynder
15. oktober 2002 - 13:36 #2
Jeg kigger i MSComm komponentens Input property når OnComm event'en udløses.
Avatar billede dk_akj Nybegynder
15. oktober 2002 - 13:44 #3
Det skulle jo også være den helt rigtige måde at gøre det på.
Bliver dit "oncomm" event fyret ??

//akj
Avatar billede phpgris Nybegynder
15. oktober 2002 - 13:47 #4
Nej, ikke uden breakpoint.
Avatar billede dk_akj Nybegynder
15. oktober 2002 - 13:49 #5
Jeg gør tit det at jeg indsætter en msgbox "debug1" i f.eks oncomm eventet når jeg bøvler med en fejl, har du prøvet det ??

//akj
Avatar billede dk_akj Nybegynder
15. oktober 2002 - 14:05 #6
Det er vel ikke sådan at rtreshold bliver sat til 0 på en eller anden underlig måde ??
Avatar billede phpgris Nybegynder
15. oktober 2002 - 14:08 #7
Det havde jeg faktisk men nu da jeg prøvede det igen opdagede jeg at uden breakpoints udløses OnComm lige efter jeg har lagt data i output-bufferen - dog ikke med CommEvent=comEvReceive men med CommEvent=comEvCD. Ikke helt sikker på hvad det vil sige men det sker i hvertfald ikke når jeg bruger breakpoint-tricket.
Avatar billede dk_akj Nybegynder
15. oktober 2002 - 14:15 #8
Selvom du frabad dig links tillader jeg mig lige at poste et her:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconusingcommunicationscontrol.asp

Nederst på siden er der en beskrivelse af de forskellige events.

//akj
Avatar billede phpgris Nybegynder
15. oktober 2002 - 14:29 #9
Jep, den kiggede jeg også lige på men det giver stadigvæk ikke rigtig nogen mening. Men da jeg inspicerede OnComm event'en igen viste det sig at hvis jeg sætter en "MsgBox comMSComm.CommEvent" helt øverst i OnComm proceduren får jeg CommEvent=comEventTxFull (Transmit Buffer Full) - først et par instruktioner senere bliver den CommEvent=comEvCD.

Jeg sender kun nogle få bytes og jeg ikke umiddelbart se noget sted hvor jeg kan forøge bufferstørrelsen. Der er en property på komponenten, OutBufferSize, men den har allerede en langt større værdi (512) end længden af det data jeg sender.

Man kan måske forestille sig at bufferen skal "cleares" eller initialiseres på en eller anden måde før man kan sende og at det er der sker når programmet startes igen efter et breakpoint...
Avatar billede dk_akj Nybegynder
15. oktober 2002 - 14:33 #10
Bufferne bliver flushet når men læser input eller skriver til output.

Jeg tror måske det er et timming problem.

prøv at lægge et loop ind i oncomm
for i = 1 to 100000
doevents
next

//akj
Avatar billede phpgris Nybegynder
15. oktober 2002 - 14:41 #11
CommEvent forbliver comEvCD.
Avatar billede dk_akj Nybegynder
15. oktober 2002 - 14:54 #12
Et sidste bud, indtil videre...
Husker du at afslutte alle data du sender med VbCr ??
Avatar billede phpgris Nybegynder
15. oktober 2002 - 15:05 #13
Jep.
Avatar billede jespernaur Nybegynder
15. oktober 2002 - 17:44 #14
comEvCD angiver at modem signalet Carrier Detect har ændret sig - benyttes dette af din infrarøde enhed, eller kan der være tale om, at dit kabel er forkert bygget?
Avatar billede phpgris Nybegynder
15. oktober 2002 - 18:12 #15
Nej, det benyttes ikke men ... kabel?
Avatar billede jespernaur Nybegynder
15. oktober 2002 - 19:03 #16
Det jeg mener med en mulig kabelfejl er, at hvis ledningen med data fra den infrarøde enhed til COM-porten fejlagtigt er forbundet til COM-portens Carrier-Detect indgang, kunne dette forklare hvad du ser.
Avatar billede jespernaur Nybegynder
15. oktober 2002 - 19:11 #17
Her står lidt om kabelforbindelser

http://www.epanorama.net/documents/pc/rs232cables.html
Avatar billede phpgris Nybegynder
15. oktober 2002 - 19:22 #18
Der er intet kabel - den infrarøde forbindelse går direkte fra computeren til enheden. Driverne til den infrarøde port opretter en virtuel COM-port (COM 4) der gør det muligt at foretage almindelig seriel kommunikation over den infrarøde forbindelse.

Husk også at alting fungerer som det skal (jeg kan både sende og modtage data) hvis jeg bruger det underlige breakpoint-trick, så problemet er helt sikkert ikke hardware-relateret.
Avatar billede phpgris Nybegynder
17. oktober 2002 - 04:45 #19
Løst! Det var faktisk et timing problem men forsinkelsen skulle indlægges umiddelbart efter der hvor porten blev åbnet (ligesom breakpointet - burde jeg have tænkt på før). Tak for hjælpen.

dk_akj>> Hvis du vil have del i pointene så drop lige et svar her inden fredag.
Avatar billede dk_akj Nybegynder
17. oktober 2002 - 06:53 #20
Godt du løste problemmet.

Hvor stor pause måtte du lægge ind ??

//akj
Avatar billede phpgris Nybegynder
17. oktober 2002 - 14:21 #21
20 millisekunder. I praksis vil jeg dog prøve om jeg kan implementere en eller anden "ping"-mekanisme der venter på enheden bliver klar.
Avatar billede dk_akj Nybegynder
17. oktober 2002 - 15:23 #22
ja , det vil nok være en god idé

//akj
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