|
| mscomm.ocx Fra : Morten Snedker |
Dato : 09-04-02 22:06 |
|
Hej igen,
Jeg har for en rum tid siden lavet et lille vb-program, der hele tiden
står og læser fra com1-porten. Input kommer fra en stregkode-læser.
Pludselig - efter det har virket upåklageligt i lang tid, fejler
programmet permanent.
Ex. karaktererne 1, 2, 4, 7 og 8 bliver til andre karakterer. Jeg har
midlertidig løst problemet ved at konverterer karaktererne til deres
rette værdi - men det er jo en klude-løsning, som det vil kunne ses
fra min kode nedenfor.
Problemet sker på flere maskiner.
Men: hvis jeg lader HyperTerminal læse input'et fra stregkodelæseren,
så bliver det læst som det skal. Derfor min mistanke til ocx'et. Med
mindre nogen kan se noget fejl i koden ?? Eller mangler der måske en
eller anden setting på mit ocx i designet?
Stregkoden er af typen Code39.
Den væsentlige kode ser således ud:
*****************************************
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = 2 Then
strbuffer = strbuffer & MSComm1.Input
End If
End Sub
Private Sub Timer1_Timer()
'1=177
'2=178
'4=180
'7=183
'8=184
If Len(strbuffer) > 0 Then
Timer1.Interval = 0
For x = 1 To Len(strbuffer)
If Mid(strbuffer, x, 1) = Chr(177) Then
strbuffer = Left(strbuffer, x - 1) & "1" &
Mid(strbuffer, x + 1)
End If
If Mid(strbuffer, x, 1) = Chr(178) Then
strbuffer = Left(strbuffer, x - 1) & "2" &
Mid(strbuffer, x + 1)
End If
If Mid(strbuffer, x, 1) = Chr(180) Then
strbuffer = Left(strbuffer, x - 1) & "4" &
Mid(strbuffer, x + 1)
End If
If Mid(strbuffer, x, 1) = Chr(183) Then
strbuffer = Left(strbuffer, x - 1) & "7" &
Mid(strbuffer, x + 1)
End If
If Mid(strbuffer, x, 1) = Chr(184) Then
strbuffer = Left(strbuffer, x - 1) & "8" &
Mid(strbuffer, x + 1)
End If
Next x
strbuffer = Left(strbuffer, Len(strbuffer) - 2)
List1.AddItem Now & ": " & strbuffer
Call MaintList
Call HandleData(strbuffer)
Timer1.Interval = 1000
strbuffer = ""
End If
End Sub
*****************************************
mvh & på forhånd tak,
Morten Snedker
| |
Carsten Jessen (10-04-2002)
| Kommentar Fra : Carsten Jessen |
Dato : 10-04-02 09:28 |
|
Hej Morten
Jeg er ikke sikker på om dette hjælper dig, men jeg oplevede, da jeg
benyttede mscomm.ocx at ikke al informationen nåede frem til computeren før
min sub var færdig med at læse inbufferen, hvilket resulterede i nogle
mærkelige resultater. (Har du skiftet til en hurtigere computer?)
Prøv følgende for at tjekke om det er din kode eller din læser der er noget
galt med.
Private Sub MSComm1_OnComm()
mscomm1.inputlen=1
do until mscomm1.inbuffercount=0
label1=label1 & mscomm1.input
loop
End Sub
Jeg er ikke helt sikker på om ovenstående kode er Ok. Jeg har mulighed for
at svare igen i aften så kan jeg skrive hvad jeg præcis gjorde.
MVH Carsten
"Morten Snedker" <morten.nospam@dbconsult.dk> wrote in message
news:dcl6buskfsbp86m5bohh41fburi8d682gl@4ax.com...
> Hej igen,
>
> Jeg har for en rum tid siden lavet et lille vb-program, der hele tiden
> står og læser fra com1-porten. Input kommer fra en stregkode-læser.
>
> Pludselig - efter det har virket upåklageligt i lang tid, fejler
> programmet permanent.
>
> Ex. karaktererne 1, 2, 4, 7 og 8 bliver til andre karakterer. Jeg har
> midlertidig løst problemet ved at konverterer karaktererne til deres
> rette værdi - men det er jo en klude-løsning, som det vil kunne ses
> fra min kode nedenfor.
>
> Problemet sker på flere maskiner.
>
> Men: hvis jeg lader HyperTerminal læse input'et fra stregkodelæseren,
> så bliver det læst som det skal. Derfor min mistanke til ocx'et. Med
> mindre nogen kan se noget fejl i koden ?? Eller mangler der måske en
> eller anden setting på mit ocx i designet?
>
> Stregkoden er af typen Code39.
>
> Den væsentlige kode ser således ud:
>
>
> *****************************************
> Private Sub MSComm1_OnComm()
>
>
> If MSComm1.CommEvent = 2 Then
> strbuffer = strbuffer & MSComm1.Input
> End If
>
> End Sub
>
> Private Sub Timer1_Timer()
>
> '1=177
> '2=178
> '4=180
> '7=183
> '8=184
>
> If Len(strbuffer) > 0 Then
> Timer1.Interval = 0
>
> For x = 1 To Len(strbuffer)
> If Mid(strbuffer, x, 1) = Chr(177) Then
> strbuffer = Left(strbuffer, x - 1) & "1" &
> Mid(strbuffer, x + 1)
> End If
> If Mid(strbuffer, x, 1) = Chr(178) Then
> strbuffer = Left(strbuffer, x - 1) & "2" &
> Mid(strbuffer, x + 1)
> End If
> If Mid(strbuffer, x, 1) = Chr(180) Then
> strbuffer = Left(strbuffer, x - 1) & "4" &
> Mid(strbuffer, x + 1)
> End If
> If Mid(strbuffer, x, 1) = Chr(183) Then
> strbuffer = Left(strbuffer, x - 1) & "7" &
> Mid(strbuffer, x + 1)
> End If
> If Mid(strbuffer, x, 1) = Chr(184) Then
> strbuffer = Left(strbuffer, x - 1) & "8" &
> Mid(strbuffer, x + 1)
> End If
> Next x
>
> strbuffer = Left(strbuffer, Len(strbuffer) - 2)
> List1.AddItem Now & ": " & strbuffer
> Call MaintList
>
> Call HandleData(strbuffer)
> Timer1.Interval = 1000
> strbuffer = ""
>
> End If
>
>
> End Sub
> *****************************************
>
> mvh & på forhånd tak,
>
> Morten Snedker
| |
|
|