Har en app som via serieporten och (mscom) tar emot klockslag när en fotocell bryts från ett avancerat tidtagarur, mitt konstiga problem är: Här är lite kod:Mystiskt serieportsfel
Om jag bryter fotocellen så jag får in flera tider (innom 1-3 sek) ska följande ske:
Jag ska få upp en input-box där jag skall ange startnummer för tidpasseringen för första fotocell-brytningen, när jag angett stnr stängs inputboxen och jag ska få upp en ny inputbox för nästa brytning osv.
Det konstiga är att när jag kör i Visual Basic (run-mode) fungerar det som tänkt men skapar jag en .exe-fil beter det sig annorlunda, då vid varje fotocellbrytning får jag upp en ny inputbox, så den första brytningen hamnar underst i "högen" och den sista först, tex. bryter jag fotocellen 5 ggr så får jag upp 5 inputboxar över varandra.
Är det några inställningar för buffertar man kan justera när man skapar en EXE eller vad kan vara galet, vad är skillnaden på att köra i VB eller att köra en fristående kompilerad exe? Sv: Mystiskt serieportsfel
Private Sub kommunikation()
MSComm1.CommPort = timing_port
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
If Err Then
MsgBox "COM" & Combo1.ListIndex + 1 & " not available. Change the CommPort to another port." & vbCrLf & "May be busy by other program!"
MSComm1.PortOpen = Not (MSComm1.PortOpen)
Exit Sub
End If
End If
MSComm1.Settings = "9600,n,8,1"
MSComm1.RTSEnable = True
MSComm1.RThreshold = 1
MSComm1.InputLen = 1
End Sub
Private Static Sub MSComm1_OnComm()
Dim EVMsg$
Dim ERMsg$
' Branch according to the CommEvent property.
Select Case MSComm1.CommEvent
' Event messages.
Case comEvReceive
comm
If MSComm1.InBufferCount > 0 Then comm
Case comEvSend
Case comEvCTS
EVMsg$ = "Change in CTS Detected"
Case comEvDSR
EVMsg$ = "Change in DSR Detected"
Case comEvCD
EVMsg$ = "Change in CD Detected"
Case comEvRing
EVMsg$ = "The Phone is Ringing"
Case comEvEOF
EVMsg$ = "End of File Detected"
' Error messages.
Case comBreak
ERMsg$ = "Break Received"
Case comCDTO
ERMsg$ = "Carrier Detect Timeout"
Case comCTSTO
ERMsg$ = "CTS Timeout"
Case comDCB
ERMsg$ = "Error retrieving DCB"
Case comDSRTO
ERMsg$ = "DSR Timeout"
Case comFrame
ERMsg$ = "Framing Error"
Case comOverrun
ERMsg$ = "Overrun Error"
Case comRxOver
ERMsg$ = "Receive Buffer Overflow"
Case comRxParity
ERMsg$ = "Parity Error"
Case comTxFull
ERMsg$ = "Transmit Buffer Full"
Case Else
ERMsg$ = "Unknown error or event"
End Select
If Len(EVMsg$) Then
' Display event messages in the status bar.
'MsgBox = "Status: " & EVMsg$
' Enable timer so that the message in the status bar
' is cleared after 2 seconds
'Timer2.Enabled = True
ElseIf Len(ERMsg$) Then
' Display event messages in the status bar.
'MsgBox = "Status: " & ERMsg$
' Display error messages in an alert message box.
Beep
ret = MsgBox(ERMsg$, 1, "Click Cancel to quit, OK to ignore.")
' If the user clicks Cancel (2)...
If ret = 2 Then
MSComm1.PortOpen = False ' Close the port and quit.
End If
' Enable timer so that the message in the status bar
' is cleared after 2 seconds
'Timer2.Enabled = True
End If
End Sub
Private Sub comm()
Dim indata As String
Dim stnr As String
Dim text As String
Dim kod As Byte
Dim tc_no As Byte
Dim id As Integer
Dim valid As Boolean
''Dim Start As String
Dim sekundstart As Double
Dim sekundmål As Double
Dim lop As Long
Dim tider As Recordset
Dim sql As String
indata = MSComm1.Input
If indata = vbCr Then
If tecken = 3 Then Call printlog(Now() & " Timersystem time recived")
Text1.text = tid
systemclock = FormatDateTime(Time() - CDate(Mid(tid, 16, 8)), vbLongTime)
tecken = 0
If CDate(Mid(tid, 16, 8)) > Time() Then tecken = 1
If Left(tid, 1) = "T" Then
If Mid(tid, 14, 1) = 1 Then
tc_no = pos
text = "Startnummer startade: " & Right(tid, 15)
stnr = InputBox(text, "Start", , 5000, 5000)
If stnr = "" Then stnr = 0
If stnr = 0 Then
valid = False
Else
valid = True
End If