sperando di fare cosa gradita e utile, nei messaggi che seguono condivido come ho fatto il Latency Test sul mio PC.
Quanto segue non e' una guida ufficiale. E' un piu' semplice: io ho fatto cosi'.
Non mi assumo responsabilita'!
Integrazioni, correzioni e/o smentite sono gradite.
Questo messaggio e' un po’ la prosecuzione di -IT- Installazione di LinuxCNC su scheda madre ASUS A7N8X-X e da' per scontato che il sistema operativo Linux sia funzionante e l'applicazione LinuxCNC sia correttamente installata.
Per gestire una CNC professionale si usano PC dedicati, sviluppati appositamente per questo compito.
Gli sviluppatori di LinuxCNC hanno messo a punto un test che permette di verificare se un computer NON sviluppato per lo specifico scopo di gestire una CNC (ma abbastanza potente da riuscirci), puo' comunque essere adeguato a eseguire un simile compito.
Il test consiste nel mettere il piu' possibile sotto sforzo il processore; una volta che il processore e' impegnato "a fondo" si inviano delle richieste e si annota il tempo che trascorre per ottenere la risposta.
I computer piu' adeguati rispondono velocemente alle richieste. Il tempo trascorso tra una richiesta e la relativa risposta e' detto "di latenza". Il processore "latita" perche' e' impegnato a fare altro. Nel nostro test lo stracarichiamo volutamente di compiti inutili, che non servono in nessun modo all'uso di una CNC.
La Latenza e' quindi la misura del tempo che impiega il processore per fermarsi da quanto sta facendo e rispondere a una richiesta esterna.
Nel nostro test il tempo di latenza si misura in nanosecondi. Sistemi con risposte fino a 50000 nanosecondi sono (generalmente) considerati ancora buoni. Tempi di latenza minori sono auspicabili (15000 / 20000 nanosecondi o meno). Tempi di latenza maggiori di 50000 nanosecondi portano a considerare il computer come NON adeguato.
Se ci si ostina a usare computer con tempi di latenza molto alti bisogna essere pronti ad affrontare "strani comportamenti", messaggi di errore inspiegabili, lavorazioni non corrette, etc, etc...
Sul wiki di LinuxCNC esiste un elenco di schede madri che gli utenti hanno testato e di cui hanno condiviso i risultati. Se avete fretta potete fare riferimento ai modelli li menzionati. Se siete intraprendenti potete testare il/i pc in vostro possesso e magari contribuire, condividendo a vostra volta i risultati ottenuti.
Per testare un PC non si e' obbligati a fare un'installazione completa. Si puo' sfruttare la versione live di LinuxCNC senza perdere i dati contenuti nel PC in esame. Finito il test si potra' riavviare il PC e tornare a usarlo per lo scopo a cui era dedicato.
Alcune informazioni raccolte curiosando sulla rete internet che mi hanno aiutato a dare maggiore senso a questo test. Queste informazioni non hanno nessuna pretesa di completezza!
Per gestire una machina utensile, a un computer viene chiesto di elaborare e generare un flusso continuo e costante di informazioni/comandi (importante: non veloce. Continuo e costante!). Questo e’ particolarmente sentito se la macchina utensile e’ mossa da motori stepper.
Una generica macchina utensile lavora a ritmi lentissimi rispetto alle velocita' di elaborazione dei moderni PC.
Un vecchio Z80 o un recente Arduino (entrambi controllori a 8bit) sono in grado di gestire una macchine utensile.
Cosa potrebbe impedire a un generico PC di ultima generazione, dotato di processore multicore a 32 o 64 bit di portare a termine un compito cosi' "leggero"?
L’idea che mi sono fatto e’ che il problema sia il “contorno” al processore.
I moderni computer in vendita nei supermercati sono progettati per assolvere bene tanti compiti, invece di un solo compito in modo eccellente. A un generico PC viene chiesto di essere molto versatile/compatibile/configurabile in base alle richieste/necessita' dell'acquirente. Deve consentire di disegnare, giocare, ascoltare musica, guardare un film, navigare in internet, creare documenti, essere il piu' possibile interfacciabile. Tutto questo porta i progettisti a degli inevitabili compromessi e impedisce di raggiungere l'eccellenza per un solo scopo.
All'opposto esistono schede/computer nati per assolvere un preciso compito (come gestire macchine utensili o simili) che svolgono in modo egregio il loro scopo ma non vi permetttono di fresare mentre guardate film in 4K, ascoltate musica e navigate in internet. Un esempio e' Colibri o la piu' recente RosettaCNC (per rimanere in Italia). Importante: magari possono farlo ma I progettisti non lo considerano prioritario.
Di seguito riporto anche una mia (personalissima) traduzione della storia di LinuxCNC. Qui trovate il testo originale in inglese
Qui invece la stessa storia dal punto di vista del N.I.S.T.
EMC (Enhanced Machine Controller, ovvero: Controllore Macchine Avanzato) è stato creato dal NIST, (National Institute of Standards and Technology, Istituto Nazionale per gli Standard e le Tecnologie), che è un'agenzia del Dipartimento del Commercio del governo degli Stati Uniti.
NIST, prima si dedico' alla scrittura di un pacchetto di controllo del movimento, come piattaforma di test per studiare i concetti e gli standard. Successivamente, grazie alla sponsorizzazione di General Motors, la versione nascente di EMC fu adattata per usare PMAC (Schede di controllo intelligente) e per funzionare su una versione in tempo reale di Windows NT per controllare una grande fresatrice.
Come richiesto da tutti i prodotti realizzati per conto del governo federale degli Stati Uniti, il software risultante e la relazione su di esso, erano tenuti a essere di dominio pubblico. Una relazione su di esso fu regolarmente pubblicata anche su Internet.
Fu lì che Matt Shaver scopri' EMC. Contattato' il NIST ed inizio' una discussione con Fred Proctor per adattare il codice per poterlo utilizzare in un controllo hardware meno costoso, da utilizzare per gli aggiornamenti e le sostituzioni di controlli CNC che erano obsoleti o semplicemente non piu' supportati.
Il NIST fu incuriosito dalla proposta perché anche loro volevano qualcosa di meno costoso. Al fine di avviare uno sforzo cooperativo, fu creato un accordo formale che garantisse che il codice risultante e il design sarebbero rimasti di dominio pubblico.
Le prime considerazioni riguardarono la sostituzione del sistema operativo Windows NT con Linux e una relativamente nuova estensione "Real-Time" del suo kernel. L'idea ebbe successo. Il passo successivo fu rappresentato dalla sostituzione delle costose schede di gestione e controllo del movimento. Le potenze di elaborazione raggiunte dai computer dell'epoca furono considerate piu' che sufficienti per gestire questa funzione e dopo una veloce ricerca di mercato si procedette a usare una scheda di interfaccia Servo-to-Go come prima esperienza per consentire a un PC il controllo diretto dei motori. All'interfaccia furono aggiunti un software per il calcolo della traiettoria e per la gestione del Controllo PID (Closed-Loop), oltre a un interprete RS274 (Gcode). Matt Shaver riusci a usare questa versione per aggiornare due macchine con controlli CNC non piu' supportati e questo fu il primo lavoro che attiro' l'attenzione del mondo esterno su questo sistema. La citazione dell'uso di EMC sul gruppo di discussione "Rec.Crafts.Metalworking USENET" fece si che altri utenti iniziassero ad usare la piattaforma. Io mi fermo qui ma la storia continua...
E dopo questa tediosissima introduzione, ecco la descrizione di quello che ho fatto :
ho avviato l'applicazione "Latency Test":
E’ apparsa la seguente finestra:
Scopo della prova e' ottenere il valore piu' basso possibile di “Max Jitter (ns)” nella riga “Base thread (25.0us)” (nell’immagine sopra e’ arrivato a 14267 nanosecondi)
Ho configurato la finesta affinche' galleggi sempre sopra le altre applicazioni (cosi' non la si perde dietro le altre finestre) e affinche' ci “segua” se cambiamo desktop virtuale.
Ho fatto un click con il tasto sinistro del mouse sull'iconcina bianca (evidenziata dal quadro rosso). Si e' aperto un menu da cui ho selezionato la voce: “Always on Top”
Ho ripetuto l'operazione per selezionare la voce: “Always on Visible Workspace”:
Ho proseguito aprendo un terminale e digitando il comando "top" per vedere il carico del sistema: