Avatar billede vips Nybegynder
11. april 2002 - 21:18 Der er 3 kommentarer og
1 løsning

MSComm og flere events på den samme comport?


Jeg har et problem som jeg gerne vil have hjælp til.

Jeg anvender MSComm-control til communication med den serielle port på pcén.
jeg har et antal cmd_buttons som hver især sender / modtager en streng via comporten,
derudover har jeg et timer_event hvert 1 sek som sender / modtager en streng via den samme comport.
Jeg oplever meget ofte en konflikt mellem disse event når jeg aktiverer de forskellige cmd_buttons.
Jeg har prøvet at lave et "transmit-flag" som det først aktive event sætter og de efterfølgende events så skulle vente på, men programmer kører fast i enteløkken og timereventet bliver ikke gjort færdig.

Hvad kan jeg gøre ?

Er det muligt at prioritere events ?

mvh viggo
Avatar billede jespernaur Nybegynder
11. april 2002 - 21:51 #1
http://www.eksperten.dk/spm/197009

Du må sige lidt mere konkret om, hvad dine enkelte knaptryk laver. En vigtig ting er,
at dine ...Click rutiner ikke må foretage sig noget, der 'venter', fx på input fra
COM-porten.

Se fx:

    http://www.eksperten.dk/spm/93698

Det handler ganske vist ikke helt om dit problem, men måske kan du hente
inspiration.

Mvh
Jesper Naur
Avatar billede vips Nybegynder
11. april 2002 - 22:11 #2
Her er lidt af koden til styring af relæ.

Private Sub CmdRelay_Click(Index As Integer)
If CmdRelay(Index).Tag <> "" Then
    ' Er der sat en værdi i "Tag" ?, så træk relæ i det antal sek
    MSComm1.Output = "R" & Index & ",P" & CmdRelay(Index).Tag & vbCrLf
    MSComm1.Output = "R" & Index & ",?" & vbCrLf ' check status på relæ
    Wait (2) 'vent 20 mS
    If MSComm1.Input <> "On" & vbLf & vbCr Then
        MsgBox "Fejl på relæ " & Index, vbOKOnly, "FEJL"
    End If
End If

mvh Viggo
Avatar billede jespernaur Nybegynder
11. april 2002 - 23:39 #3
Jeg fik ikke spurgt: Hvad er det for 'konflikter' du oplever? Hvordan ser
symptomerne ud?

Jeg finder det lidt betænkeligt, at du i en og samme ...Click rutine sender noget
og venter på svaret. Du risikerer at modtage et svar, der slet ikke havde noget at
gøre med det, du sendte.

En anden mulighed (der dog ikke udelukker ovenstående): Måske kræver dit eksterne
apparat en lille pause efter at det har sagt noget, før det atter kan modtage kommandoer.
Hvis dette er tilfældet, kan der opleves problemer, hvis du kommer til at trykke
på en knap så kort tid efter at din timer-rutine har kørt, at dit apparat
endnu ikke er modtageligt for nye kommandoer. Hvorvidt dette sker er selvsagt helt
uforudsigeligt, og kan sagtens føre til tilfældigt udseende 'konflikter'.

Men nu må du sige noget mere, før jeg kaster mig ud i yderligere spekulationer!

Mvh
Jesper Naur
Avatar billede scb Praktikant
12. april 2002 - 19:59 #4
Jeg tror ikke det er dine cmd_buttons der er problemet, med den korte data streng du sender, hele proceduren er jo overstået på nogle mS, alt efter hvilken seriel hastighed du bruger.
Wait (2) er i øvrigt ikke 20 mS men 2 mS.
Jeg tror nærmere det er din timer interuptet kommunikation der driller, du kunne jo f.eks starte alle cmd_buttons med at disable timeren:

Timer1.Enabled = False

kode....

Timer1.Enabled = True

-SCB
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