fbpx

CLA SUMMIT EUROPE 2019

Ogni anno National Instruments ospita il Summit Certified LabVIEW Architect (CLA) negli Stati Uniti e in Europa.
L’evento riunisce programmatori NI LabVIEW  per discutere di architetture, visualizzare in anteprima nuove funzionalità e collegarsi con altri CLA e membri di NI R & D.

Quest’anno l’evento è stato organizzato a Cracovia, una città meravigliosa e accogliente.

Abbiamo partecipato all’evento, raccogliendo un esperienza unica sia per le presentazioni molto avanzate e interessanti, sia per aver incontrato e discusso con i migliori programmatori LabVIEW(TM) in Europa.

Bytelabs si propone come vostro referente per integrare le migliori soluzioni HW e SW per il vostro sistema di Test.

Contattaci ora per raccontarci la tua applicazione di Test.

…..

Costruisci il tuo test sequencer con OOP e Variant LookUpTable

Vogliamo realizzare un test sequencer semplice per testare la versatilità dei Variant Set/Get Attribute, utilizzati come lookup table e l’utilizzo delle classi come valori.

 

Iniziamo con creare le classi per i Test:

Classe Test : Rappresenta la classe astratta con un metodo Test.VI che verrà riscritto(Override) nelle classi che ereditano da Test.

Procedimento: Andare su my computer e NEW/Class quindi spostarsi sulla classe Test appena creata e NEW/Vi from Dynamic Dispatch Template

Classe Test01: Eredita dalla classe Test e ne riscrive il metodo Test.vi

Procedura : Creare una nuova classe, quindi andare nelle property della classe appena creata, quindi in Inheritance , premere change inheritance e selezionare la classe test.

Ora eseguiamo l’override del metodo test selezionando la casse Test01 e New/vi from override, selezioniamo  Test.vi

Classe Test 2 : identica procedura della classe Test01

Al termine della procedura avremo cliccando show hierarchy sulla classe Test, la seguente gerarchia che mostra la relazione Padre/Figli tra la classe astratta Test e le classi figlio Test01 e Test02.

Il progetto mostrerà come da figura le classi con i relativi metodi Test.vi.

 

 

 

 

 

 

 

 

Ora creiamo un vi (da myComputer, New VI) e trasciniamo le classi Test01 e Test02, quindi andiamo nella palette Variant e trasciniamo il Variant Set attribute(ne serviranno 2).

Colleghiamo la classe Test come ingresso del variant(non è obbligatorio, si può mettere anche un variant o altro).

 

 

 

 

 

 

Completare inserendo un For Loop (per farlo eseguire in modo continuo ho messo un while) in cui eseguire i test come nell’immagine successiva.

Quindi eseguendo il vi, il Get Variant Attribute seleziona la classe associata alla chiave di testo che ho associato nel Set Attribute.

Utilizzare questo modello per creare delle lookup table ha il vantaggio di inserire direttamente diversi tipi di dato, diversamente dei modelli basati sugli array è dinamico diversamente dall’utilizzo dei cluster e soprattutto come potrete trovare googlando sul tema, ha un algoritmo di ricerca non lineare che lo rende estremamente piu veloce.

Scarica il progetto e i vi già pronti:

 

 

Approfondimenti e ispirazioni:

ftp://ftp.ni.com/pub/events/webcasts/variant_attribute_lookup_table.pdf

https://forums.ni.com/t5/LabVIEW-Development-Best/Using-Variant-Attributes-for-High-Performance-Lookup-Tables-in/ba-p/3478922


 

 

String to datatype

“Vi” che permette di inserire il valore in formato stringa nel suo datatype originale.

Ho fatto questo vi per comodità nel interfacciare file di testo (es. i file ini) e quindi tenere il codice legato alla estrapolazione di dati stringa, il più possibile riutilizzabile.

Con questo vi, posso ad esempio fare una scansione dui tutti i controlli del pannello e associrae i valori estratti da un array stringa o da un file ini ad esempio.

In ingresso al vi ho un array 2d con colonna(0)=label del controllo da associare, colonna(1) valore del controllo da associare. Un altro array di ingresso contiene 1 array dei control ref.

Non ci sono uscite in quanto modifica i controlli associati alle reference.

 

Potete salvare l’immagine e quindi trascinarla in un vi vuoto (nel diagramma).Salvate come subvi e create i terminali per gli array 2d e l’array delle controlreference.

In ingresso si possono utilizzare la property del vi “pane.controls” che restituisce l’array delle controlref per tutti i controlli sul pannello.

il vi modifica solo i controlli che sono presenti nell’array stringa.

 

Potete copiare lo snippet di esempio sotto su un diagramma di vi vuoto, questo prende i valori di configurazione da un file csv.

 

 

 

 

Come si vede anche dall’immagine sotto ho la possibilità di modificare dati eterogenei senza ggiunta di codice semplicemente inserendo nel vi di applicazione il vi “string to datatype”.

 

Software gestione banchi simulazione strada

 

Restyling del software esistente per la gestione del banco.

 

 

 

Interfacce e Grafica

E’ stata completamente riconfigurata l’ Interfaccia utente e alcune ergonomie tra i pannelli.

Personalizzazione per temi (colori, immagini di presentazione, logo aziendale etc.).

Localizzazione dell’applicazione dinamica con langloc.

Localizzazione lingue e personalizzazione di etichette controlli con LANGLOC, questo ha permesso che senza il minimo sforzo clienti internazionali possano configurarsi i nomi dei controlli (per questioni di stabilità l’azianda committente ha chiesto di criptare il file in modo che solo il servizio tecnico dell’azienda elabori il file con i testi e inviii al cliente il file modificato su richiesta da incollare semplicemente nella cartella di installazione, operazione che l’utente può fare da remoto.

 

Diagnosi e log

Si è creato inoltre un registratore di eventi criptato che permettesse al servizio tecnico di comprendere meglio l’evento di guasto e individuare manomissioni degli utilizzatori.

Installazione vincolata su chiave di registro

Installazioni vincolate grazie a chiave di installazione, chiave di regsitro e codice MAC del PC installato.

Questo permette un unica installazione su macchina target e installazioni successive solo su richiesta a ditta.

Con il sistema di vincolo su installazione si protegge dal rischio di divulgazione del software non autorizzata.

 

Personalizzazioni

Personalizzazione ,  su richiesta specifica, direttamente dal cliente.

Successi e riconsocimenti

Soddisfazione del team per la localizzazione e la registrazione per ricerca guasti.

 Per saperne di più contattami nicbavar@[nospam]gmail.com

Nominare i file automaticamente con un numero univoco

Per dare un numero univoco ad un file si può utilizzare la data, l’ora e volendo anche i secondi generati dall’orologio di sistema.

Con la funzione “Get Data/time string” si ottengono due stringhe(data e ora), togliendo tutti i caratteri e lasciando solo il numero, si ottiene una stringa che non può essere duplicata se non inferiore al sec.

Per togliere i caratteri “/” e “.” che mi genererebbero errori perchè sono caratteri chiave per il sistema e quindi non è possibile utilizzarli come nome di un file, si può utilizzare il file “Search and replace string”, come nel vi snippet sotto (snippet = trascinalo sul tuop diagramma a blocchi per avere già il codice reale).

Si può ottenere un numero univoco anche con il tick count (il problema è che si ottengono distanze numeriche grandi tra i file, risolvibile dividendo il tick count ottenendo quindi la parte in secondi).

Bisogna ricordarsi che tick count conta fino a 2^32 = 4294967295, quindi si resetta, con la duplicazione dal 424967296 file (in quanto verrebbe dato come 1).

First Call?

 Si trova nella palette Programming/synchronization, restituisce true solo la prima volta che viene chiamato.

Io lo utilizzo spesso, soprattutto nelle “Functional Global Variables”, perchè mi permette di eseguire il codice di inizializzazione all’interno di un loop, beneficiando degli shift register.

Come si vede nell’esempio sopra, la prima volta che viene eseguito il vi (First Call) viene eseguita l’inizializzazione che in questo caso mi restituisce una reference,  che passo nello shift register per le prossime chiamate del vi, dove il First call restituirà sempre FALSE.

Se non inizializzo lo shift register, rimane in memoria il dato registrato, e rimane lì fintanto che non lo modifico (in questo caso solo su first call? avviene la scrittura sullo shift register, dopo il case FALSE, passa direttamente il dato memorizzato.

Altro utilizzo è nel settare correttamente Ignore Previous nelle OCCURRENCE, in modo che sia true (ignori il precedente) al primo ciclo e poi passi a false (tieni conto del precedente) nei loop successivi.