VB.net Programmazione Asincrona??

di il
10 risposte

VB.net Programmazione Asincrona??

Buongiorno a tutti, ho un piccolo quesito da porvi. Sto implementando una soluzione che legge dei dati da un file TXT e invia alcuni di questi ad un sistema automatizzato gestito da PLC, il quale, al termine delle sue operazioni mi invia un segnale per farmi capire che è pronto per il dato successivo. Fatta questa piccola premessa, ho un dubbio... come faccio a tenere il programma in pausa fino al momento in cui il plc mi dice che è pronto? Ovviamente cerco un sistema che non vada a saturare la memoria e/o la CPU. Ho pensato ad un sistema Async. E' corretto??? o avete soluzioni migliori?

Grazie a tutti
E

10 Risposte

  • Re: VB.net Programmazione Asincrona??

    Con quale interfaccia comunichi con il PLC ?
  • Re: VB.net Programmazione Asincrona??

    Ethernet,e con una libreria riesco a leggere i valori delle db. Quindi il ciclo sarebbe:

    Invio il dato
    Attendo fino a quando la db xx.x è uguale a 1
    Invio il dato
    Ecc ecc

    Non so come gestire l'attesa

    Grazie
    E
  • Re: VB.net Programmazione Asincrona??

    Indicativamente, utilizzi un loop che contiene al suo interno Application.DoEvents
    Le condizioni di uscita dal loop sono :
    - ricevi dal PLC il valore di 1
    - timeout (all'ingresso del loop imposti una variabile datetime = now, all'interno del loop fai la differnza tra now e la variabile memorizzata, esci dal loop quando hai superato x secondi)
  • Re: VB.net Programmazione Asincrona??

    Grazie a tutti per l'interesse. Allora avevo gia provato con:
    do
    controllo variabile
    loop

    ma ovviamente blocca tutto.
  • Re: VB.net Programmazione Asincrona??

    Ho fatto una prova veloce, scritta in questo modo:

    Do Until stato_EOJ_plc = "1"

    Application.DoEvents()

    Loop
    MsgBox("uscito")

    in effetti non si blocca, ma in termini di performance è la soluzione migliore? potrebbe capitare che questo loop duri anche 2-3 giorni...anche di più... cosa ne pensate??
  • Re: VB.net Programmazione Asincrona??

    Se il loop potrebbe durare tanto direi che quello che hai fatto tu non va bene.
    Hai sue soluzioni:
    1) sul form metti un timer e ogni x secondi controlli lo stato del PLC

    2) aggiungi un oggetto BackgroundWorker e usi quello
  • Re: VB.net Programmazione Asincrona??

    Grazie...tra poco provo e vi aggiorno. Ma giusto per imparare...la soluzione Async perche secondo voi non è la soluzione giusta???
  • Re: VB.net Programmazione Asincrona??

    Eccomi...allora in sintesi ho adottato il metodo piu semplice...cioe il timer. Ho provato anche l'altra soluzione,ma ho la necessita di modificare delle label sul form,e data la poca esperienza in materia di processi asincroni ho evitato. Comunque ho notato che il timer sollecita molto meno le prestazioni del computer,sbaglio?
    Al momento, credo vada bene... Speriamo che continua a " reggere" anche nei prossimi test.
    Vi tengo aggiornati e se vi fa piacere vi posto anche il codice.


    E
  • Re: VB.net Programmazione Asincrona??

    Emanuele85 ha scritto:


    Ma giusto per imparare...la soluzione Async perche secondo voi non è la soluzione giusta???
    Se posso dare il mio parere, "soluzione Async" è una terminologia che non ha senso e non è chiaro cosa intendi.

    Nei linguaggi .NET, Async è solo una parola chiave per gestire operazioni usando dei Task, ossia delle operazioni che girano in thread separati e quindi in modo asincrono, offrendo diverse metodologie per "attenderli", sicronizzarli, terminarli e così via.

    Senz'altro sono uno strumento più che efficace quando è necessario gestire delle operazioni che devono essere eseguite contemporaneamente, però l'efficacia e la validità della soluzione che adotta queste tecnica dipende appunto da come questi strumenti vengono utilizzati e soprattutto orchestrati.

    Data questa premessa, la "soluzione Async" è giusta se viene implementato nel modo giusto, altrimenti non lo è.

    Per capire come strutturare al meglio l'applicazione, si dovrebbe capire come le varie parti del processo di elaborazione si possono interfacciare tra di loro.

    Io in genere evito di gestire manualmente task, mentre piuttosto mi affido a soluzioni di livello più alto, ad esempio quelle basate su "attori" e architetture simili, in modo da usare comunque una soluzione multitasking, evitando possibilmente tutti i "mal di pancia" che in genere nascono in questi scenari, come l'accesso controllato e bloccante alle risorse in scrittura e simili.

    In questo senso, trovo molto efficace l'uso di package come Akka.NET, che permettono di astrarre sul multithreading concentrandosi maggiormente sulla logica di business.

    Prova eventualmente ad approfondire questi temi o a spiegare meglio come applicheresti la tua "soluzione asincrona" in modo da capire se questi strumenti possono essere di utilità rispetto ad altri approcci.

    Di sicuro a oggi, anno 2022 D.C., non userei mai qualcosa come Application.DoEvents: non siamo su VB6, quindi possiamo evitare gli "escamotage" usando gli strumenti appositamente preposti per lo scopo.

    Ciao!
  • Re: VB.net Programmazione Asincrona??

    Grazie a tutti per il tempo dedicato a questa domanda e soprattutto alle spiegazioni fornite. Programmo generalmente in php,avevo quasi abbandonato i sw win application ma ci sono ricascato. Nel mio caso il timer credo vada bene,ma x cultura personale sicuramente approfondirò questi temi.
    Ora resta il nodo del Libnodave (libreria veramente potente e opensource) ma credo che sto nel posto sbagliato.

    Grazie ancora a tutti.
    A presto
    E
Devi accedere o registrarti per scrivere nel forum
10 risposte