Avatar billede Slettet bruger
09. november 2003 - 16:31 Der er 12 kommentarer og
1 løsning

Kontrol af input-data fra COM-port

Hej X-perter…

Har brug for lidt hjælp til noget kode i VB!

Jeg skal behandle data som kommer fra COM-porten.

Dataene kan antage værdier mellem 1-64
For eksempel ”P001M” ”P002M” ”P003M” ... ”P064M”

Ud fra det input jeg får fra com-porten skal programmet udføre noget kode.

Strengen kontrolleres med følgende kode:

    If (CheckAutoRead = 1 And NumCharsInputQue > 0) Then
               
        Text2.Text = Text2.Text + ConvertFromBin(IO1.ReadData(20))
       
            A = Text2.Text
            Text2.Text = ""
            B = A
            C = ""
            A = C
       
        Temp = B
       
           
            For K = 1 To 5
  ------------->  If (Left(Temp, 5) = "P00" & K & "M") Then <----------
                        Debug.Print "Preset nr: " & K & " er nu aktiv!"
                End If
            Next K
   
    End If

Dette virker fint for tallene mellem 1-9, men hvad gør jeg når værdien går fra 10 og opad?

(se koden mellem ------> og <------)

Er der nogen som har et forslag?
Avatar billede sjh Nybegynder
09. november 2003 - 16:51 #1
jeg ved ikke lige hvordan man gør.. men alt hvad jeg kunne finde om "IO1.ReadData..." var den her:

http://www.jspayne.com/io/interface.html
Avatar billede Slettet bruger
09. november 2003 - 16:54 #2
//sih

Jeg har alt info. vedr. IO1.ReadData - det er faktisk den jeg gør brug af i mit program..
Det er heller ikke det der er problemet.

Der må være en el. anden genial måde at bruge den kode der står mellem --> <-- ...
Avatar billede kabbak Professor
09. november 2003 - 16:56 #3
For k = 10 To 64
          If Len(k) = 1 Then
              If (Left(Temp, 5) = "P00" & k & "M") Then
                Debug.Print "Preset nr: " & k & " er nu aktiv!"
                End If
              Else
                If (Left(Temp, 5) = "P0" & k & "M") Then
                Debug.Print "Preset nr: " & k & " er nu aktiv!"
                End If
              End If
            Next k
Avatar billede kabbak Professor
09. november 2003 - 16:57 #4
For k = 1 To 64

sorry
Avatar billede Slettet bruger
09. november 2003 - 17:11 #5
//kabbak..

Hmmm.. lidt underligt.. fik afprøvet din kode inden du rettede
->For k = 1 To 64<-

men det gjorde ikke rigtig nogen forskel....

Når koden ser sådan ud:

        For K = 1 To 9
            If (Left(Temp, 5) = "P00" & K & "M") Then
                    Debug.Print "Preset nr: " & K & " er nu aktiv!"
            End If
        Next K
       
        For K = 10 To 64
            If (Left(Temp, 5) = "P0" & K & "M") Then
                Debug.Print "Preset nr: " & K & " er nu aktiv!"
            End If
        Next K

virker den.... men synes ikke det virker helt logisk... hmmm.. synes at din kode burde gøre det samme...
Avatar billede kabbak Professor
09. november 2003 - 17:13 #6
du kan også gøre sådan

K = Val(Mid(Temp, 3, 2))
Debug.Print "Preset nr: " & K & " er nu aktiv!"
Avatar billede kabbak Professor
09. november 2003 - 17:26 #7
hele koden

If Left(Temp, 2) = "P0" And (Right(Temp, 1) = "M") Then
K = Val(Mid(Temp, 3, 2))
Debug.Print "Preset nr: " & K & " er nu aktiv!"
End If
Avatar billede Slettet bruger
09. november 2003 - 17:27 #8
//kabbak

Den sidste kodestump du tilføjede ville gøre følgende (Ret mig, hvis det er forkert)

Hvis Temp = "P001M" og K = Val(Mid(Temp, 3, 2))

så K = 01

??

Vil du erstatte If(Left... osv med din kode eller ?
Avatar billede Slettet bruger
09. november 2003 - 17:28 #9
//kabbak

Ok kabbak du kom før mig... jeg prøver lige din kode... så vent bare med at svare...
Avatar billede Slettet bruger
09. november 2003 - 17:46 #10
//kabbak

Den sidste stump kode du smed i tråden bruger ->(Right(Temp,1) ="M") men det er ikke så heldigt i dette tilfælde - jeg får faktisk nogle flere data med ind fra COM-porten.
Sidste del af strengen er desværre ikke altid ens...

Hvis allerede én mikrofon har været aktiv får jeg dette ind på COM-porten

Eksempel: P001M<13>R003 <13>

"R003" fortæller at mikrofon nr. 3 netop er deaktiveret...

Hvis derimod en mikrofon aktiveres som den første får jeg kun denne kode

Eksempel: P001M<13>

Da strengen ikke altid har den samme længde - kan jeg ikke umiddelbart bruge (Right(Temp,1))...

Problemet er egentligt løst (se tråden kl. 17.11.24) men hvis du har andre gode forslag, er de velkomne..

//steyr
Avatar billede kabbak Professor
09. november 2003 - 17:48 #11
If Left(Temp, 2) = "P0" And (mid(Temp,5, 1) = "M") Then
Avatar billede Slettet bruger
09. november 2003 - 17:52 #12
//Kabbak

Sådan der! Det virker superb :-) :-)

1000 tak for hjælpen!

P.S.: Sorry, hvis jeg er lidt "slow" - er ny i VB....
Avatar billede kabbak Professor
09. november 2003 - 18:12 #13
selv tak ;-)
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