Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    156

    [VB.NET] Utilizzare 2 Timer contemporaneamente

    Buonasera a tutti!

    Come da titolo, vorrei chiedere se potessero esserci problemi, e se si quali, ad utilizzare 2 Timer contemporaneamente.

    Per chiarire meglio, ho questa situazione:

    Ho 1 PLC da cui devo leggere 2 segnali e 1 Telecamera.

    Se Segnale_A = 1, do lo start alla telecamera.

    Se Segnale_B = 1, do lo stop alla telecamera.

    La telecamera restituisce l'immagine dopo aver ricevuto lo stop.

    Questa telecamera, essendo lineare, deve avere il tempo di poter elaborare l'immagine prima di restituirmela, quindi per ottenerla devo fare una richiesta al Buffer di questa.
    Se la risposta è positiva, scarico l'immagine ed eseguo tutto quello che devo fare.
    Da tener conto che il Segnale_1 non può andare a 1 finchè la telecamera non ha restituito l'immagine, ma può farlo prima che l'elaborazione termini (chiaramente dopo che la telecamera ha dato l'immagine)

    Quindi la soluzione che mi è venuta in mente e che sto provando, è di utilizzare 2 Timer.
    Il primo controlla i due segnali, il secondo controlla la telecamera.

    Tutto questo deve essere fatto, chiaramente, nel minor tempo possibile.
    L'elaborazione dell'immagine impiega circa 500ms.

    Io ho necessità di fare il controllo sia dei segnali, che della telecamera ogni 250ms.

    Ho anche provato, dato che effettivamente il Timer che controlla la telecamera non serve sempre ma solamente dopo che ha ricevuto lo stop, a farlo partire solamente appunto dopo aver dato lo stop e fermarlo quando ho ricevuto l'immagine, ma in questo caso perdo ogni volta circa 250ms che sono abbastanza importanti per il lavoro.

    Non posso nemmeno mettere tutto nello stesso timer, perchè dato che l'elaborazione dura 500ms, potrebbe bloccarmi il timer e questo potrebbe non accorgersi in tempo del Segnale_A.

    Concludendo, avete per caso idea se 2 timer da 250ms che lavorano insieme possano creare problemi?
    Se si, c'è qualche altra soluzione?

    Grazie mille!

    Spero di essere stato chiaro, anche se dubito ahah
    Se servono chiarimenti sono qua!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,881
    Il Timer non è lo strumento adatto da utilizzare: benché tu ne possa creare e attivare assieme anche 100, il timer si basa sull'invio periodico (in base all'intervallo) di un messaggio alla coda dell'applicazione Windows, la quale prende in carico la gestione del messaggio generando l'evento Tick e restituendo il controllo solo al termine della gestione, così come avviene per qualsiasi altro evento tradizionale (es. Click su un pulsante).

    Ne consegue che, pur attivando più timer, i "tick" di questi verranno comunque gestiti uno alla volta, e l'esecuzione del "tick" del singolo bloccherà il programma fino al termine della sua gestione, dopodiché potranno essere gestiti altri eventi, come i "tick" di altri timer concorrenti.

    Impostare un valore troppo basso per i timer può essere deleterio e al di sotto dei 50/100 millisecondi non è nemmeno garantita precisione nella loro esecuzione.

    La risposta al problema è quella di adottare il multithreading, quindi creare nell'applicazione più thread concorrenti che leggano periodicamente le informazioni dai device menzionati, senza interferire con l'esecuzione della logica principale del programma.

    Suggerisco di leggere l'articolo linkato e altre risorse per capire come si usa e comprendere le differenze rispetto al timer tradizionale.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Delphi Succinctly (e-book)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.