Temporizzazioni precise al microsecondo

giovedì 31 maggio 2007 - 16.13

ZefVB Profilo | Newbie

Salve a tutti,
è da un pò che giro in rete ma non ho trovato nessun sistema per avevre delle temporizzazioni minori del millisecondo che ottengo con System.Threading.Thread.Sleep(1), per disperazione ho provato con un ciclo for next e naturalmente la precisione va a farsi benedire

Il tutto mi servirebbe per gestire con la parallela un motore passo passo, e mi servono temporizzazioni più rapide in quando con un millisecondo il motore gira in modo lentissimo

For I = 1 To TBStep.Text IO.Out(Port, Data) System.Threading.Thread.Sleep(TBRit.Text) IO.Out(Port, 0) System.Threading.Thread.Sleep(TBRit.Text) Next

Grazie....
ZefVB

alextyx Profilo | Expert

Secondo me puoi scordartele.
Anche utilizzando un multimediatimer, hai un limite di 10ms e comunque non è garantito che riesca ad eseguire il codice che sta all'interno della sua procedura.
Per arrivare a temporizzazioni di centinaia di microsecondi, o utilizzi roba tipo labView o simili, che è ottimizzata per il real time, oppure ti scrivi una bella routine in Assembler. In tal caso puoi agevolmente scendere sotto il microsecondo eseguendoci anche un bel numero di operazioni.
Comunque, non pensare di riuscire a schedulare task su intervalli inferiori al millisecondo usando VB.Net!

ZefVB Profilo | Newbie

Intanto grazie per la risposta, ora capisco perché non riuscivo a trovare nulla in rete
Labview non l'ho mai sentito nominare, ora faccio una ricerca magari mi da qualche idea.
Scrivere un qualcosa in assembler la vedo un pò dura visto che non so nulla in merito.
Per quanto riguarda invece l'eseguire codice in tempi precisi non è proprio così, a me serve solo fare delle pause precise al microsecondo, e nella pausa non deve eseguire proprio nulla.

Ancora grazie per le info

ZefVB

alextyx Profilo | Expert

Il microsecondo non lo gestisci se non in Assembler. Anche l'idea del threading.sleep di un millisecondo è fuorviante, perchè ti garantisce che il tuo thread si arresterà per almeno un millisecondo, ma dal momento che il PC esegue più thread, se ad un certo punto il 'tempo macchina' viene dedicato ad altri thread (anche di sistema), il tuo non riprenderà a vivere se non al momento in cui diventerà nuovamente il thread attivo. Il che può avvenire ben dopo un millisecondo. Se poi parli di precisione al microsecondo, siamo assolutamente senza speranza. Non ho mai lavorato con gli stepper, ma tempo fa avevamo preso in considerazione l'idea di fare un azionamentino per uno stepper e mi sembra di ricordare che sembrava fattibile, con un microcontrollore che aveva l'istruzione più veloce che veniva eseguita in più di un microsecondo. Quindi, forse le precisioni al microsecondo sono uno scrupolo inutile. Sicuramente i millisecondi ti servono, ma purtroppo non gli otterrai mai da vb.

0v3rCl0ck Profilo | Guru

Ciao,

Concordo con alextyx e l'unica cosa che penso si potrebbe fare da vb e solo di lanciare un segnale di on/off ad un componente hardware esterno dotato di microcontrollore, che si prenda in carico la gestione della periferica al microsecondo, processore permettendo.

http://blogs.dotnethell.it/Regulator/

ZefVB Profilo | Newbie

OK, grazie mille per le spiegazioni, peccato però, iniziava a intricarmi l'idea di pilotare dei motori passo passo con il vb.net, ma evidentemente le mie conoscenze di programmazione sono molto basse per potermi tuffare con successo in un impresa simile.

Grazie per l'aiuto

ZefVB

Brainkiller Profilo | Guru

>OK, grazie mille per le spiegazioni, peccato però, iniziava a
>intricarmi l'idea di pilotare dei motori passo passo con il vb.net,
>ma evidentemente le mie conoscenze di programmazione sono molto
>basse per potermi tuffare con successo in un impresa simile.

Oppure come spesso succede questi apparecchi sono dotati di chip appositi onboard per la gestione del tempo che ti consentono di avere una precisione assoluta, diversamente da quello che succede con i timer creati a livello di software in VB o C che spesso non sono attendibili per applicazioni di robotica o applicazioni dove gli intervalli di tempo sono minimi.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

ZefVB Profilo | Newbie

Certo ma in questo caso andrei a complicare e di molto tutto il circuito, io volevo fare tutto a livello di programmazione in modo da avere più flessibilità, e il tutto a titolo sperimentale/didattico avendo già l'elettronica apposita per essere comandata via parallela con appositi programmi mi sarebbe piaciuto realizzare un qualche semplice programma a mia volta tanto per imparare a gestire l'elettronica con la parallela.

Comunque ringrazio tutti per l'interesse e l'aiuto che mi date, è sempre un piacere poter ascoltare persone più preparate disponibili per principianti come me

Brainkiller Profilo | Guru

>Comunque ringrazio tutti per l'interesse e l'aiuto che mi date,
>è sempre un piacere poter ascoltare persone più preparate disponibili
>per principianti come me

Ok ti consiglio anche, magari ne sai già al corrente di Robotics di Microsoft:
http://msdn.microsoft.com/robotics/
Magari ti può essere utile o aprire nuovi scenari.
Ciao


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

ZefVB Profilo | Newbie

Non lo conoscevo, di solito mi limito a cercare info in italiano, ma darò un'occhiata sembra molto interessante, ancora grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5