Comunicazione porta seriale esempio

Anonimo
2014-10-23T10:32:16+00:00

Domanda per Giorgio Rancati,

ho preso un esempio da te realizzato per la comunicazione con la porta rs 232 di access,

http://web.tiscali.it/giorgiorancati/msaccess/

l'ho testato e funziona perfettamente.

Io ho modificato la routine che svolge nel time intervallo timer:

ho impostato il timer ad 1 sec,

invio il comando allo strumento

ricevo il dato

lo elaboro

e così via....

Le prime 20/30 transazioni funzionano perfettamente al tempo da me impostato (1 sec)

dopo le quali inspiegabilmente il tempo comincia ad aumentare a 2 3 4 n secondi...

fino a bloccare l'applicazione...

Devo svuotare qualche buffer? qualche memoria?

Aiutami sono disperato

Grazie

Marco

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2014-10-27T18:25:59+00:00

Ciao Marco,

come primo consiglio direi di disabilitare il timer ad inizio sub per poi riattivarlo prima dell'uscita

Private Sub Form_Timer()

  Me.TimerInterval = 0

  txtReceive = txtReceive & Comm.Rx

...

...

...

resto del codice ecc ecc

Me.TimerInterval = TEMPO

End Sub

Questo evita di accumulare chiamate nello stack nel caso la routine durasse più di un secondo, cosa possibile viste le requery.

Togli gli eventuali Me.TimerInterval rimasti nel codice.

Come seconda cosa prova a remmare le righe Immagine117.Visible = True e Immagine117.Visible = False

Poi prova a remmare le righe con i requery.

Così facendo dovresti individuare dove si trova il collo di bottiglia.

Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

13 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-10-29T10:54:46+00:00

    Giorgio, come possa aggiornare il grafico senza appesantire il tutto?

    Marco

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-10-29T09:31:41+00:00

    Ciao Giorgio,

    ho inserito il timer a 0

    e remmato il grafico.requeri

    come da te suggerito e sembra andare meglio

    ...

     1000 Grazie

    Marco

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-10-27T13:14:57+00:00

    Ciao Giorgio,

    da prove che ho fatto, ho notato che se da access leggo solo il dato senza fare controlli funziona,

    quando poi vado ad eseguire dopo la lettura,

    un if e la divisione del dato in 2 var, comincia a rallentare....

    come se la memoria dell'hd si riempisse.

    l'algoritmo è :

    Private Sub Form_Timer()

      txtReceive = txtReceive & Comm.Rx

     If Len(txtReceive) >= 22 Then 

      Dato = txtReceive

      CVOLT = Mid(Dato, 14, 6) 

      CHOM = Left(Dato, 8 )

    If CVOLT = 10# then

    Immagine117.Visible = True

    GoTo FINE

    Else

    Immagine117.Visible = False

      volt = CStr(Mid(Dato, 13, 7))

      hom = CStr(Left(Dato, 8))

      data = Now()

      txtReceive = ""

    DoCmd.GoToRecord , , acNewRec

    FINE:

    End If

    tab_dati.Requery

    GRAFICO.Requery

    Me.TimerInterval = TEMPO

    Comm.Tx Me.txtSend & vbCrLf

    End If

    End Sub

    Se chiudo e riapro la maschera, il sw ricomincia a leggere normalmente, per poi rallentare nuovamente

    Io purtroppo ho necessità di fare una lettura ogni max 2 sec.

    Cosa posso fare per migliorare le prestazioni?

    Grazie

    Marco

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-10-27T08:33:34+00:00

    Ciao MARCOICD,

    probabilmente è il buffer dello strumento che si riempie, prova a controllare dalle sue specifiche.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento