Buongiorno.
Questa è la mia prima discussione sul forum e spero di non essermi sbagliato. Non ho trovato una sezione per presentarsi e nel caso servisse lo faccio senza problemi.
Ho un problema con il funzionamento del Timer su VB6.
Il mio programma comunica con un dispositivo esterno che ho creato io e la comunicazione funziona. Lo trova e "dialoga" scambiandosi dati correttamente. Ogni tanto esce un errore ma quello credo sia un BUG che ho trovato. Quello che vorrei ottenere con il Timer è che se il dispositivo non comunica più per un tempo superiore di 6 secondi mi esca un messaggio e chiuda la comunicazione (o provi a ricontattare il dispositivo). Al momento ho scritto questo per gestire questa cosa:
codice:
Sub setta_seriale() 'nella sub che cerca il dispositivo, se lo trova, faccio partire il Timer1'
Call InizioTimer()
end sub
Sub Invio_dati()
RemoveHandler SP1.DataReceived, AddressOf SP1_DataReceived 'arrivo da una sub che intercetta la comunicazione sulla porta, lo tolgo altrimenti a ogni risposta del dispositivo ripartirebbe da zero'
com_attiva = False
'qui ci sono altre istruzioni ma sono solo per "dialogare" con il dispositivo e non credo servano'
Try
Do Dim Incoming As String = SP1.ReadLine()
If Incoming <> "" Then
returnStr = Incoming
End If
Loop
Catch When returnStr <> ""
Catch ex As Exception
End Try
If returnStr = (ritorno & Chr(13)) Then
com_attiva = True
Call ResetTimer()
End If
AddHandler SP1.DataReceived, AddressOf SP1_DataReceived 'riattivo l'intercettazione dei dati dalla porta di comunicazione
End Sub
'**********************************GESTIONE TIMER TEMPO MASSIMO SERIALE**********************************'
Private Sub InizioTimer()
MsgBox("inizio timer")
Timer1.Interval = 6000
Timer1.Enabled = True
End Sub
Private Sub ResetTimer()
MsgBox("reset timer")
Timer1.Enabled = False
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
MsgBox("fine timer")
If com_attiva = False Then
MsgBox("fine")
ElseIf com_attiva = True
MsgBox("fine2")
Timer1.Enabled = False
End If
End Sub
'********************************FINE GESTIONE TIMER TEMPO MASSIMO SERIALE********************************
Ma non si comporta come vorrei.
In pratica se faccio smettere di comunicare nei primi 6 secondi il dispositivo il programma su VB6 si comporta correttamente. Le volte dopo no ma entro correttamente nella sub ResetTimer() ogni volta che finisco il ciclo di comunicazione del dispositivo e quando faccio smettere la comunicazione esternamente (resetto il PIC o stacco USB) e clicco su un tasto di VB6 (con scritto 'disconnetti' che dovrebbe chiudere la comunicazione nel modo corretto) ho messo un msgbox(timer1.enabled) che mi mostra che il timer1 è abilitato ma non succede nulla (e rimane bloccato perchè non riceve risposta dal dispositivo che ha accettato il comando di chiusura comunicazione).
Anche se aspetto molto tempo (so che il timer1 di VB6 non è preciso al millisecondo e dipende molto da che lavoro stà facendo il PC ma non mi serve questa precisione).
La mia conoscenza di VB6 è scolastica e aumentata nel tempo ma sempre come autodidatta e non so tutto e credo sia un mio errore da qualche parte ma non capisco dove. Peccato il dover passare ad altro linguaggio non essendo più supportato.