================================================================================
aprire google maps tramite VI
================================================================================
AUTORE: 11082
DATA :02/01/2016 - 11:05:43
----------------------------------------
vorrei creare un VI che mi apra google maps prendendo le coordinate di un luogo che io ho dato come controllore. inizialmente ho usato web browser collegato ad un invoke node, per aprirmi la schermata internet. il metodo va bene per ogni url tranne che per google maps (come mai?). inoltre non riesco ad inserire queste coordinate affinchè il programma lavori come innanzi detto. sapete aiutarmi?
----------------------------------------
AUTORE: 129
DATA :11/01/2016 - 12:15:23
----------------------------------------
Prova con questo io riesco.
Per inserire le coordinate modifichi l'url inserendo la coordinata del punto dopo la chocciola
https://www.google.it/maps/@44.847398,11.6178011,15z
----------------------------------------
AUTORE: 11082
DATA :11/01/2016 - 18:59:19
----------------------------------------
ciao nicola. ti ringrazio per la risposta ma non mi apre il file perchè è stato salvato con la versione 14. gentilmente potresti salvarlo nella 13 e rinviarlo? grazie mille
----------------------------------------
AUTORE: 11082
DATA :11/01/2016 - 19:05:51
----------------------------------------
un'altra domanda. se io volessi visualizzare su maps le coordinate del mio luogo tramite un punto grafico sulla cartina?grazie ancora
----------------------------------------
AUTORE: 129
DATA :12/01/2016 - 00:07:06
----------------------------------------
Ecco la versione 2013.
Per la seconda domanda prova a vedere qui:
https://decibel.ni.com/content/docs/DOC-7983
e qui
https://decibel.ni.com/content/docs/DOC-29212
Ciao,
Nicola
----------------------------------------
AUTORE: 11100
DATA :16/01/2016 - 15:11:25
----------------------------------------
grazie mille nicola, mi hai aiutato tantissimo. un' ultima cosa se posso. quando inserisco come indirizzo url google maps, il web browser mi mostra un messaggio dicendo che non è supportato. non riesco a capire perchè..aiutami
----------------------------------------
AUTORE: 129
DATA :18/01/2016 - 07:42:33
----------------------------------------
Non saprei, ma mi sembra che sia un problema legato a IE piuttosto che al labview.
se apri la stessa url direttamente sul browser IE, cosa ti dice? penso ti chieda di installare una versione diversa o qualche plugin.
----------------------------------------
================================================================================
Seriale e demux a piu visualizzatori.
================================================================================
AUTORE: 11093
DATA :05/01/2016 - 16:30:42
----------------------------------------
Salve a tutti.
Da seriale leggo e vengono visualizzati i seguenti dati ad esempio:
HUB: Ciccio1, Conte
S001: Ciccio5, conte1
S002: Ciccio2, conte
Io vorrei visualizzare solo HUB:Ciccio1,Conte in un indicatore, un'altro solo per S001:ciccio5,conte1 e
un altro solo per S002.
L'idea che mi sembra praticabile è di fare un qualcosa simile a un DEMUX?
Quindi dovrei fare lo scan e confrontarla e se vero in una parte?
----------------------------------------
AUTORE: 11093
DATA :10/01/2016 - 15:16:40
----------------------------------------
Con due search la cosa funziona.
Ma quando arriva dal seriale i dati visualizzati sulle 6 stringhe "Lampeggiano".
Come posso togliere il "lampeggio" dalle 6 stringhe.
----------------------------------------
AUTORE: 129
DATA :11/01/2016 - 12:06:32
----------------------------------------
Ciao, non riesco ad aprire il tuo allegato perchè uso una versione 2014.
IN ogni caso potrei proporti di utilizzare il carattere di finelinea (\
) per ottenere un array dei valori e quindi prendere ogni singolo elemento ottenuto con un index array.
----------------------------------------
AUTORE: 11093
DATA :12/01/2016 - 17:25:42
----------------------------------------
Ciao Nicola, mi scuso infatti uso Labview 2015
Ho provato con il carattere \
, ma quando inserisco il tutto e il seriale nn
me li demux, ovvero me li mette nello stesso visualizzatore.
----------------------------------------
AUTORE: 129
DATA :12/01/2016 - 18:51:49
----------------------------------------
il carattere \
è un codice corrispondente all'invio a capo.
nella tua stringa puoi o inserire una costante di invio a capo oppure vai sulla costante e imposti la visualizzazione a '\' codes display.
Il vi che ti ho allegato è un vi snippet, basta trascinarlo sul diagramma per avere il codice.
----------------------------------------
AUTORE: 11093
DATA :15/01/2016 - 17:39:08
----------------------------------------
si tutto ok...Grazie
----------------------------------------
================================================================================
Temporizzatore Loop
================================================================================
AUTORE: 11062
DATA :09/01/2016 - 00:22:25
----------------------------------------
Salve qualcuno può spiegarmi come funziona il Wait Until Next ms Multiple?
----------------------------------------
AUTORE: 482
DATA :11/01/2016 - 07:05:41
----------------------------------------
..ma ciao!
il wait until next multiple temporizza la tua attività in modo da farla partire con intervalli sempre regolari e noti.
Ad esempio, se tu hai una routine che impiega 47ms per essere eseguita e metti un wait normale da 100ms, avrai un tempo ciclo di 47+100ms e tieni presente che la durata di esecuzione della routine per vari motivi puo' non essere costante e potresti anche non conoscerla.
Se invece utilizzi un wait until next multiple da 100ms, il tuo tempo ciclo sarà di 100ms.
Nel caso la tuoa routine impiegasse piu' di 100ms a venire eseguita , il tuo tempo ciclo diventerebbe 200ms (Next ms multiple)
----------------------------------------
================================================================================
problema nell'apertura di maps con il web browser
================================================================================
AUTORE: 11082
DATA :15/01/2016 - 13:14:26
----------------------------------------
buon pomeriggio. nel mio VI ho definito un web browser e su di esso volevo aprire maps. tuttavia mi dà sempre sulla schermata il messaggio che ho allegato. ho impostato chrome come browser predefinito del pc, ho anche impostato la compatibilità per internet explorer, ma il problema persiste. non so più come fare. vi chiedo aiuto!!!!!!
----------------------------------------
================================================================================
Errore -1073807346 dopo visa read
================================================================================
AUTORE: 11093
DATA :15/01/2016 - 21:39:59
----------------------------------------
Salve...
Quando attaccato Lanunchpad della Texas instruments e faccio Run mi compare il seguente errore come mostrato in figura. (dopo visa read compare Error -1073807346
se spegno tutto e riattacco per e lo faccio alcune volte parte con la visualizzazione dei dati.
----------------------------------------
AUTORE: 129
DATA :16/01/2016 - 10:16:20
----------------------------------------
l'errore che ricevi viene spiegato con
VISA: (Hex 0xBFFF000E) The given session or object reference is invalid.
Ipotesi:
Probabilmente ricevi un altro errore la prima vola e quindi non ti chiude la porta, quando riprovi più volte poi viene chiusa e la sessione viene ritenuta valida.
Soluzione
1 prova a non collegare il terminale di errore all'ingresso del close VISA, indicizza il nodo di uscita che rimane sul ciclo while e collegaci un array, così vedi tutti i messaggi di errore che sono avvenutio nel ciclo.
Probabilmente ricevi dei messaggi sul buffer in quanto imposti un numero di byte di richiesta predefinito, prova a mettere un bytes at serial port e un delay tra bytes at serial port e il READ.
----------------------------------------
AUTORE: 11093
DATA :16/01/2016 - 14:08:30
----------------------------------------
Ciao Nicola, una cosa di questo tipo se ho capito bene.
----------------------------------------
AUTORE: 11093
DATA :17/01/2016 - 13:11:13
----------------------------------------
Salve, comunque ho fatto una ulteriore prova accendo il pc attacco la mia lanchspad selezione la com ecc avvio la mia vi non c'è l'errore.
Spegno la vi e stacco lanchpad, quando riavvio l'errore si ripresenta.
----------------------------------------
AUTORE: 129
DATA :18/01/2016 - 07:27:53
----------------------------------------
SI proprio così, unica cosa vai sul tunnel in uscita del cluster di errore e seleziona Index in modo che ottieni l'lelenco degli errori, altrimenti più semplicmente metti sul filo di errore in uscita al read un breakpoint e un probe sia prima che dopo il read, così controlli gli errori.
La sessione di comunicazione non la chiudi. MA non è che per arrestare il vi premi il tasto abort(tondo rosso sul menu)? se usi il codice che hai postato per ultimo, premendo il tasto stop di chiude la sessione, e non dovresti avere problemi, cosa che invece avresti se premi abort.
FAcci sapere, Nicola
----------------------------------------
AUTORE: 11093
DATA :19/01/2016 - 13:12:07
----------------------------------------
Ciao Nicola.
Il problema era proprio quello che da principiante cliccavo su abort e non sullo stop...
----------------------------------------
================================================================================
web browser
================================================================================
AUTORE: 11100
DATA :16/01/2016 - 15:01:41
----------------------------------------
ciaoooooo
ho creato un VI con un web browser.il web browser del front panel usa internet explorer, vorrei sostituirlo con chrome. come posso fare?inoltre quando decido di andare su maps mi appare un messaggio sostenendo che il browser non è supportato.aiutooooo
----------------------------------------
AUTORE: 129
DATA :22/01/2016 - 08:40:09
----------------------------------------
prova a leggere qui
http://forums.ni.com/t5/LabVIEW/Trouble ... -p/1567312
in ogni caso ti serve un controllo activex o .net per chrome, non ho mai provato, però potresti anche vedere qui
http://stackoverflow.com/questions/9983 ... l-winforms
parlano di un webkit ma non saprei, se provi facci sapere se funziona.
----------------------------------------
================================================================================
TDMS extract to...
================================================================================
AUTORE: 3428
DATA :18/01/2016 - 10:06:58
----------------------------------------
Salve ragazzi,
devo leggere un tdms formato dal solito root e da diversi gruppi.
Dovrei estrarre tutte le info e scriverle in un file xml.
Al momento la formattazione dell'xml non mi interessa basta che ci siano tutte le info.
Ho cercato un pò in rete ma sembra che non ci sia nulla di già fatto, troppo bello!
Mentre inizio a tirarmi fuori tutti i dati nel frattempo vi scrivo, la mia idea era creare un cluster con tutte le info in modo che il flatten to xml me le scrive già ad albero xml.
Sapete se esiste qualcosa che fa al caso mio?
Grazie
----------------------------------------
AUTORE: 11106
DATA :10/02/2016 - 10:41:19
----------------------------------------
Ciao renaso.
non mi pare ci sia una cosa già pronta e finita che ti permetta di convertire i TDMS in XML.
Innanzitutto una domanda: vuoi estrarre i nomi del canali e replicare l'albero (root -> gruppo -> canale) in un file XML, oppure vuoi inserire nel file XML anche gli attributi e i dati?
La struttura dell'XML è relativamente semplice. Puoi quindi usare formattarlo "manualmente" con un format into string, per esempio.
----------------------------------------
AUTORE: 129
DATA :10/02/2016 - 14:32:18
----------------------------------------
Se hai un cluster per xml potresti usare le librerie GxmL scaricabili dal VI PAckageMAnager.
----------------------------------------
AUTORE: 3428
DATA :15/02/2016 - 16:36:02
----------------------------------------
Grazie ragazzi,
scusate il ritardo..
Ho già visto gxml ma ad ogni modo aggiunge tag con il tipo di dato, quando invece non mi serviva in questo modo.
Inutile dire che la creazione dell'xml tramite la palette nativa XML di labview non l'ho neanche presa in considerazione visti i problemi in termini di performance.
Comunque si, devo mettere nell'xml tutto, sia la pagina root con le proprietà, quindi gli attributi di tutti i gruppi, sia alcuni valori dei canali nelle pagine dei gruppi...
Alla fine sono riuscito a fare tutto ma "a mano" sfruttando cicli for e subvi che mi creassero dato un input una struttura ben definita come dovevo farla...
----------------------------------------
================================================================================
Esportare funzione di un graph XY su una pagina web
================================================================================
AUTORE: 11100
DATA :18/01/2016 - 20:30:34
----------------------------------------
Ciao ragazzi/e. Vorrei riportare la funzione del grafico XY del mio VI sulla pagina web impostata nel web browser contenuto nello stesso VI. Come posso fare?vi ringrazio in anticipo
----------------------------------------
AUTORE: 129
DATA :21/01/2016 - 12:21:54
----------------------------------------
MI viene in mente salvare l'immagine del grafico programmaticamente e richiamarla come URL nel browser, molto basica ma è l'unica idea che mi viene in mente.
----------------------------------------
AUTORE: 11100
DATA :22/01/2016 - 21:21:37
----------------------------------------
Grazie nicola:)
----------------------------------------
================================================================================
Plot bar
================================================================================
AUTORE: 11100
DATA :22/01/2016 - 21:19:57
----------------------------------------
Ciaoo..stavo realizzando un grafico di 2 vettori in plot bar..ma vorrei che per determinati valori(alcune coppie di valori presi dai vettori 1 e 2 per esempio) le barre cambino colore..ho cercato anche sul forum NI ma le discussioni non soddisfavano il mio problema. Help me..
----------------------------------------
AUTORE: 129
DATA :25/01/2016 - 13:01:27
----------------------------------------
Per colorare programmaticamente i plot devi utilizzare la property del grafico Active PLot per puntare al plot che vuoi colorare e la property Fill/point color per colorarla.
Ovviamente ti colora tutto il plot, non una porzione.
----------------------------------------
================================================================================
Lettura / Scrittura Modbus RTU XMC4500
================================================================================
AUTORE: 11099
DATA :27/01/2016 - 13:17:05
----------------------------------------
Salve a tutti,
sono alle primissime armi con LabVIEW e nuovo nel forum. Sto cercando di realizzare un VI che mi permetta di acquisire dati da una scheda con microcontrollore XMC4500 della Infineon.
La comunicazione avviene tramite protocollo Modbus RTU seriale 9600 8 N 1 e i registri son da 16 bit. Sono connesso alla scheda tramite un cavo RS232.Le variabili read only sono memorizzate da 100hex a 1FFhex, e quelle read/write da 200hex a 2FFhex.
Ho utilizzato la libreria Modbus e ho sfruttato gli esempi disponibili, però nel momento in cui tento di andare a leggere i registri non riesco a visualizzare nulla. Inizialmente ottenevo un errore del tipo "Error 6101" ed "Error Error 1073676294".
Allego di seguito il codice.
Vi ringrazio infinitamente fin da subito per eventuali risposte.
----------------------------------------
AUTORE: 482
DATA :28/01/2016 - 07:06:46
----------------------------------------
Per il secondo errore, potresti anteporre un byte at port in modo da leggere il numero giusto di dati dalla porta..il primo non saprei.
Purtroppo le immagini sono troppo piccole per essere zoommate e guardate piu' nel dettaglio.
Potrei ipotizzare un errato utilizzo dell'apertura/chiusura della porta, ma sarebbe buttata li.
Per esportare il codice nel miglior modo possibile, ti consiglio di selezionare il codice che ti interessa e poi dal menu EDIT->Create VI Snippet from selection
in quel modo viene esportata un immagine che se trascinata nel block diagaram genera il codice corrispondente.
----------------------------------------
AUTORE: 11099
DATA :28/01/2016 - 13:53:20
----------------------------------------
Grazie per l'aiuto.
In ogni caso, credo che il problema derivi dall'adattatore USB-RS232 (ho dimenticato di citarlo).
----------------------------------------
AUTORE: 482
DATA :28/01/2016 - 15:47:27
----------------------------------------
Ci sono due cose che mi vengono in mente:
1) All'adattatore è stato dato un numero di COM che non piace al sistema, dovresti provare a modificarlo manualmente
2) L'oggetto a cui ti connetti, puo' comunicare in modbus, ma la comunicazione non è abilitata perchè è in un altro tipo di modalità.
Mi è capitato tempo fa che un oggetto con cui dovevo comunicare in seriale, mi restituiva l'errore "non è accessibile" perchè di default era impostato per mandare continuamente valori alla porta anzichè aspettare le richieste, quindi dovevo prima settarlo dal suo pannellino.
----------------------------------------
AUTORE: 11099
DATA :29/01/2016 - 11:00:52
----------------------------------------
Per quanto riguarda il secondo errore si trattava del convertitore: credo che il problema fosse dovuto al fatto che il driver del prodotto creava un conflitto sulla porta con il driver installato da Windows, quindi risultava occupata.
Continuo però a ricevere un errore di timeout: il codice dell'errore è sempre 6101.
Più precisamente si presenta sugli MB Serial Master query.
Provo a riallegare il codice con il Create VI Snippet from selection.
----------------------------------------
AUTORE: 482
DATA :29/01/2016 - 11:08:40
----------------------------------------
..'nnaggia...non riesco a leggere lo snippet perchè uso la versione 2012.
prova a salvare il vi in versione precedente e postare quello.
----------------------------------------
AUTORE: 11099
DATA :29/01/2016 - 11:09:22
----------------------------------------
E anche il VI
----------------------------------------
AUTORE: 11099
DATA :29/01/2016 - 11:28:01
----------------------------------------
.
----------------------------------------
AUTORE: 301
DATA :29/01/2016 - 12:40:59
----------------------------------------
scusate, mi intrometto.....
Mi sono preso la libertà di modificare un po il tuo vi, il problema potrebbe risiedere nel fatto che non interponi un'attesa tra le due letture.
Aris
----------------------------------------
AUTORE: 301
DATA :29/01/2016 - 12:43:53
----------------------------------------
scusa.....
pigliati questa
----------------------------------------
AUTORE: 11099
DATA :29/01/2016 - 13:36:51
----------------------------------------
Il problema era proprio quello, non l'avevo considerato.
Spero di essere più attento in futuro.
Grazie mille Aris!
----------------------------------------
AUTORE: 301
DATA :29/01/2016 - 13:40:38
----------------------------------------
figurati.
Buon we
Aris
----------------------------------------
AUTORE: 482
DATA :01/02/2016 - 07:14:42
----------------------------------------
..quello che avevo ipotizzato
meglio cosi'
----------------------------------------
AUTORE: 301
DATA :01/02/2016 - 07:47:03
----------------------------------------
Non avevo dubbi, Geppooooo!!!!
----------------------------------------
AUTORE: 482
DATA :01/02/2016 - 15:00:29
----------------------------------------
..mannaggia a voi e labview 2015! ...ma prima o poi lo installa che devo provare il compilatore per arduino e raspberry
..anche se al momento devo tenere su pc la 2009 e la 2012 e avere 3 versioni di labview mi sembra esagerato!
----------------------------------------
================================================================================
sub vi
================================================================================
AUTORE: 11085
DATA :29/01/2016 - 14:26:49
----------------------------------------
Buonasera,
ho una domanda da chiedervi ho un programma un po' esteso e vorrei "comprimerlo" per renderlo più organico;
vorrei mettere un sub vi in un pezzo in cui sono presenti delle variabili locali avete dei suggerimenti su come procedere? ho provato ma mi crea un block diagram con dei riferimenti e sono un po' insicura sulla correttezza dell'operazione grazie anticipatamente
----------------------------------------
AUTORE: 645
DATA :30/01/2016 - 12:24:33
----------------------------------------
Ciao,
quando crei un SubVI la sua icona (in alto a destra) deve essere programmata per visualizzare le variabili collegate al macro programma nel quale il SubVI viene utilizzato.
Se cerchi sul sito di National Instruments trovi tutte le indicazioni su come gestire questa operazione: http://www.ni.com/white-paper/7593/en/
Magari prova a realizzare l'esercizio proposto come esempio prima di passare al tuo VI.
----------------------------------------
AUTORE: 482
DATA :01/02/2016 - 07:19:21
----------------------------------------
La prima domanda da porti credo sia:
Servono davvero li quelle variabili locali?
Magari possono essere piazzate subito dopo il subvi, o magari possono non esserci del tutto ed essere sostituite da dei normali fili che portano il dato.
Un volta constatato questo, se effettivamente ti serve che il subvi stesso modifichi il valore di quegli oggetti, allora si, utilizzi i reference con i quali fai appunto riferimento ad un oggetto che sta al di fuori del subvi e con il quale puoi interagire tramite proprietà e metodi (fondamentalmente utilizzerai la proprietà "Value" se si trattava di variabili locali).
----------------------------------------
AUTORE: 129
DATA :01/02/2016 - 09:41:17
----------------------------------------
IL fatto che ti abbia creato delle reference non è poi così male, se guardi nel codice comunque ti ha creato stavolta una property value riferita a quello specifico controllo, questa è una buona tecnica se devi modificare anche altre propietà di quel controllo (Disable,Visible,Caption tra le più usate e generiche).
Se devi usare la local solo per modificare il valore di un controllo devi seguire il suggerimento di gepponline, hai veramente bisogno di variabili locali?
Allora se devi usare le variabili locali per aggiornare un indicatore, sicuramente non ne hai bisogno, potresti utilizzare una Functional Global Variable o altri metodi (questa [url=http://vishots.com/wp-content/uploads/2013/12/ts2147hollenback.pdf:36idi4xs]presentazione[/url:36idi4xs] ti può essere di aiuto).
Se invece devi impostare un controllo, ti serve se lo devi modificare durante l'esecuzione oppure se lo devi solamente inizializzare all'apertura del tuo subVI.
Se devi inizializzare i controlli di un subvi che è all'interno di un altro VI, puoi crearti dei terminali dei controlli e collegarli nel vi con delle costanti o altro.
A questo punto potresti allora collegare anche le tue local (sempre che siano indispensabili) ai terminali.
Prova a creare il subVI selezionando la sezione di codice senza includere le local (se le hai all'interno di strutture prova a spostarle fuori) in modo che ti crea dei terminali e le local le lasci all'interno del vi principale.
Un altro metodo (non proprio bellissimo per tanti aspetti) è sostituire le local con delle global e li puoi tranquillamente utilizzarle all'interno di subvi.
In generale (e penso tutti saranno d'accordo) usa le local e le global solo se proprio non ne puoi fare a meno.
----------------------------------------
================================================================================
consiglio manuale labview e ni-compact-rio
================================================================================
AUTORE: 11101
DATA :31/01/2016 - 21:19:39
----------------------------------------
Salve a tutti,
sono un nuovo utente ed anche alle prime armi con labview
e vorrei chiedervi qualche semplice info:
-conoscete qualche titolo di un buon manuale per labview2015(anche qualche versione prima va bene), magari con anche qualche esercizio?
- conoscete qualche guida per la configurazione pc-ni compact rio?
Ciao
Gianluca
----------------------------------------
AUTORE: 129
DATA :01/02/2016 - 09:17:13
----------------------------------------
Ciao se hai un contratto di licenza sw, ti consiglio di seguire i corsi Self-Paced Online, che trovi attivi sul tuo account se hai registrato il contratto sw.
Altrimenti se sei proprio alle prime armi un corso in aula è la soluzione migliore.
Per quanto riguarda i manuali o libri ti consiglio
SIto NI.com trovi moltissimi tutorial altrimenti:
[url=http://www.amazon.it/LabVIEW-Everyone-Graphical-Programming-Made/dp/0131856723/ref=sr_1_1?ie=UTF8&qid=1454317957&sr=8-1&keywords=labview+for+everyone:35hpdokj]labview for everyone 3thd ed.[/url:35hpdokj]
[url=http://www.amazon.it/Labview-Style-Book-Peter-Blume/dp/0131458353/ref=pd_sim_14_1?ie=UTF8&dpID=51EqzTwjlPL&dpSrc=sims&preST=_AC_UL160_SR127%2C160_&refRID=093DWFZRV3RR9JEYAGXY:35hpdokj]The Labview Style Book[/url:35hpdokj]
Per il compactRIO ti consiglio:
[url=http://www.ni.com/compactriodevguide/i/:35hpdokj]NI LabVIEW for CompactRIO Developer's Guide[/url:35hpdokj]
----------------------------------------
AUTORE: 11101
DATA :02/02/2016 - 10:52:43
----------------------------------------
Grazie mille nicola.
Però mi sono sbagliato , ho a che fare con una ni my rio, non compact
Ciao
----------------------------------------
AUTORE: 129
DATA :02/02/2016 - 11:12:07
----------------------------------------
allora
http://www.ni.com/myrio/i/
----------------------------------------
AUTORE: 11101
DATA :07/02/2016 - 10:41:38
----------------------------------------
grazie!
----------------------------------------
================================================================================
Grafici non corretti
================================================================================
AUTORE: 11102
DATA :02/02/2016 - 14:13:46
----------------------------------------
Ciao a tutti
Non sono un grande conoscitore di Labview ma devo utilizzarlo per un progetto in università e vorrei chiedere il votro aiuto
Ho un Vi che contiene diversi subVi programmato da altri studenti che ha come compito quello di controllare un banco pneumatico. Uno di questi subVi ha il codice per riportare su un grafico il flusso di aria che passa in un sensore di portata.
Il problema è "semplice", sulla valvola leggo un valore (ad esempio 3,2 l/min) mentre sul grafico mi viene riportato tutt'altro valore (ad esempio 57,4 l/min).
Non riesco a capire dove potrebbe essere il problema. Con il programma Ni Measurement & Automation ho configurato la scheda di acquisizione dei dati (una NI 9201 analogica) e l'ho collegata correttamente al sensore di portata della festo (sigla: SFE3-F500-L-W18-2PB-K1)
Il grafico però mi riporta dei valori totalmente scorretti. Sapreste indicarmi dove potrebbe essere il possibile errore?
Grazie
Buona giornata
Ciaoo!
----------------------------------------
AUTORE: 482
DATA :02/02/2016 - 15:51:10
----------------------------------------
beh..la prima cosa che mi viene in mente è:
usi gli express vi? Se si, hai configurato l'autoscale? o leggi il valore analogico puro?
Se non usi gli express, leggi direttamente il canale? Hai messo il fattore di conversione tra grandezza fisica e grandezza elettrica?
----------------------------------------
AUTORE: 11102
DATA :02/02/2016 - 16:46:42
----------------------------------------
Ciao!
Grazie per la risposta, per quanto riguarda gli express vi si, ho visto nel programma che sono presenti. Come faccio a sapere se uso l'autoscale oppure se leggo il valore analogico puro?
Io ho visto che nella configurazione della scheda su Measurement e Automation è stata creata una funzione chiamata "Flusso", che riporta l'equazione di una retta. Provando ad eliminare quella funzione comunque il grafico resta ancora non corretto.
Grazie mille
Ciao
----------------------------------------
AUTORE: 482
DATA :03/02/2016 - 07:15:12
----------------------------------------
c'e' qualcosa ch enon mi torna...una funzione in max??
Cmq posta un estratto dle tuo vi della parte in cui fa l'acquisizione che gli do un occhio.
Postalo in versione 2012 senno' non posso aprirlo (Save for previous version).
Per vedere se c'e' una conversione, devi fare doppio click sull'express vi e dare unocchio al "Custom Scaling"
----------------------------------------
AUTORE: 11102
DATA :03/02/2016 - 09:25:19
----------------------------------------
Ciao!
Grazie per l'aiuto. In allegato ti ho aggiunto il programma salvato in Labview 12. Il grafico che non funziona è quello presente nel tab: "Analisi Flussi", il primo in l/min.
Dal programma principale ti ho eliminato tutto quello che non serve
Grazie mille per l'aiuto!
Buona giornata
Ciao
PS: il trasduttore di portata ha le seguenti caratteristiche
range: 5 ... 50 l/min
accuratezza: 5% FS
ripetibilità: 3% FS
----------------------------------------
AUTORE: 129
DATA :03/02/2016 - 13:10:17
----------------------------------------
Dal tuo programma acquisisci con il daqmx da un task che ti sei creato in MAX, la scalatura del segnale V/grandezza, la fai in MAX? se usi il test panel in MAX cosa leggi?
----------------------------------------
AUTORE: 482
DATA :03/02/2016 - 13:14:48
----------------------------------------
mi dice che è slavato in versione 14
----------------------------------------
AUTORE: 11102
DATA :03/02/2016 - 13:26:06
----------------------------------------
Ciao!
L'ho salvato nuovamente, adesso dovrebbe essere corretto
Grazie
Ciao!
----------------------------------------
AUTORE: 482
DATA :04/02/2016 - 07:21:02
----------------------------------------
Ok visto il vi.
Premesso che ci sono un po' di cose che non mi tornano in come costruisci il grafico...ma magari è solo perchè non ho una visione di insieme, cominciamo col dire che NO, non stai utilizzando express vi per leggere quei dati.
Come diceva nicola, tu prendi le acquisizioni tramite un TASK creato in MAX ed è quendi quello che crea eventuali scalature.
Per bypassare questo, prova, nel subVI Acquisizione a mettere al posto del task ACQ, i canali fisici. Quindi se sono piu' di uno dovrai scrivere ad esempio "Dev0/ai0, Dev1/ai7" oppure "Dev1/ai0:3" se sono canali contigui.
In questo modo acquisirai direttamente i valori dalla scheda senza conversioni in mezzo.
Per avere piu' chiaro il problema, manda magari anche uno screenshot di come è configurato il task ACQ.
C'e' comunqque qualcosa di sbagliato secondo me in come metti i dati sul grafico...
----------------------------------------
AUTORE: 11102
DATA :04/02/2016 - 19:58:39
----------------------------------------
Ciao!
Grazie per l'aiuto. In allegato ti ho aggiunto la configurazione in MAX dell'ACQ e anche la schermata della funzione che è stata creata per questo flusso. Adesso mi sto leggendo una guida di Labview che spiega i fondamentali in modo da fare la prova che mi hai detto.
Quello che non capisco è come mai è stata creata una funzione y =11,25x -6.25 Se guardo ad esempio la configurazione della pressione è stata aggiunta anche li una scala personalizzata però la funzione è molto diversa: y=x
Domani vado in laboratorio e provo a creare il sistema di acquisizione come mi hai suggerito!
Grazie!
Ciao!
----------------------------------------
AUTORE: 482
DATA :05/02/2016 - 08:13:23
----------------------------------------
non c'e' nessun allegato....
Per la funzione..beh dipende dal significato di quella lettura e dalla grandezza che viene misurata.
aspettiamo notizie
----------------------------------------
AUTORE: 11102
DATA :05/02/2016 - 09:30:34
----------------------------------------
Ciao
Scusa ho dimenticato l'allegato! Lo aggiungo a questo post
Grazie
Ciao
----------------------------------------
AUTORE: 482
DATA :08/02/2016 - 07:35:24
----------------------------------------
Beh, a vederla cosi' direi che è tutto corretto.
C'e' una funzione is caling impostata nella lettura, quindi se in uscita hai un valore che non ti torna direi che quella funzione è sbagliata.
L'unico modo per verificarla è avere le caratteristiche di quella valvola e capire da dove esce quella funzione.
Partiamo dal fatto che c'e' un offset di 6,25 e non so se sia una caratteristica costruttiva o rilevata.
Dopodichè si vede che c'e' un fattore di moltiplicazione di 11,25.
Ipotizzando di avere un ingresso in tensione (non so se è in tensione il tuo), mi aspetterei, se fosse un tipo di ingresso 0-10V, che la tua valvola abbia un range di uscita di 0/112,5 lt/min
E' effettivamente strano come limite nel senso che solitamente le caratteristiche costruttive sono a cifra tonda, ma non conoscendo l'oggetto, potrebbe anche essere
Tenendo presente che è una funzione lineare, hai due strade:
1) recuperare le caratteristiche dell'uscita e inserire la funzione di conversione corretta
2) Misurare il tutto sul canale fisico, quindi senza task (lo puoi fare anche direttamente dal MAX) Vedere l'ingresso a portata 0 e quindi stabilire l'offset, poi portare la valvola ad una portata nota e misurare l'ingresso in modo da avere il moltiplicatore giusto.
P.S. ho fatto una piccola ricerca in base al codice del sensore che hai dato.
Sembrerebbe che il sensore abbia un uscita tra 1 e 5V.
QUi i dettagli: https://www.festo.com/net/SupportPortal ... 8655d2.pdf
Quindi questo valore non va inserito nella pagina di configurazione di ACQ come sembrerebbe essere stato fatto perchè quello richiesto è il valore di input già riscalato.
Poi bisogna vedere che tipo di uscita hai. Ci sono diversi range, da 0.05/0.5 fino a 5/50 qual'e' il range di lavoro del tuo sensore?
Se dici che misuri 57 invece dovrebbe essere 3, direi che il risultato dovrebbe essere circa 20 volte inferiore a quello attuale, quindi quello che è 11,25 è piu' probabile che sia uno 0,5 o qualcosa del genere.
Verifica le caratteristiche costruttive del sensore.
----------------------------------------
AUTORE: 11102
DATA :09/02/2016 - 19:36:46
----------------------------------------
Ciao!
Grazie per il supporto. Domani sono in laboratorio quindi faccio tutte le prove. Solo una cosa:
[quote:epf0l28h]Ci sono diversi range, da 0.05/0.5 fino a 5/50 qual'e' il range di lavoro del tuo sensore?
[/quote:epf0l28h]
Come faccio a vedere quali di questi valori sto utilizzando con il mio sensore? E' un'impostazione che viene data sul sensore oppure sul programma?
Grazie
Ciao
----------------------------------------
AUTORE: 482
DATA :10/02/2016 - 07:05:09
----------------------------------------
Dovrebbe essere una caratteristica fisica del sensore.
Quindi o c'e' un etichetta attaccata dove c'e' scritto (magari c'e' un codice che lo identifica), oppure devi risalire a quando è stato ordinato e vedere se c'e' scritto.
----------------------------------------
AUTORE: 11102
DATA :10/02/2016 - 15:04:01
----------------------------------------
Ciao!
Allora oggi ho fatto un pò di prove e questo è quello che sono riuscito a capire. Ho fatto tutte le prove direttamente in MAX, senza passare da Labiew, in modo da vedere bene i valori che vengono riportati.
Ho tenuto la loro scala del flusso, non l'ho modificata. Questo è il resoconto:
1) Quando sulla valvola della festo c'è 0 l/min sul MAX mi indica 5,7.
2) Quando sulla valvola leggo 5 l/min sul MAX leggo circa 9
Ho fatto poi un'altra prova, ho messo uno strozzatore così da regolare la portata, faccio uscire l'aria e sulla valvola leggo 21 l/min e sul MAX mi esce circa 23-24 quindi sembra tutto corretto.
Sembra come che quando passo da una portata nulla ad una più alta, mi campiona male il segnale e quindi il grafico mi segna valori alti per poi tornare al valore minimo che è 5. Perchè ad esempio se nella valvola non ho passaggio di aria, sulla valvola il valore è zero, mentre sul grafico mi esce circa 5 l/min.
Quando sulla valvola ho un valore costante di 21 l/min anche sul MAX il valore è quasi uguale (due l/min di differenza).
Sul sensore ho visto che ci sono anche questi dati:
ub: 12-24VDC
5 - 50 l/min
Quindi alla fine il flusso sembra uscire giusto, però ci sono questi sbalzi tra inizio e fine!
Grazie
Ciao
----------------------------------------
AUTORE: 11102
DATA :10/02/2016 - 15:18:49
----------------------------------------
Ciao!
Ho fatto altre prove e quello che è sbagliato è la funzione. Perchè quando sulla valvola leggo 0.8 MAX mi riporta 5 che non va bene. Poi ho fatto altre prove con valori sempre piccoli, ad esempio sulla valvola leggo 7,5 e su MAX mi riporta 12 quindi è ancora sbagliato.
Ho provato a modificare la funzione, togliere quel -6.25 dalla y e mettere 1 sulla X ma comunque i valori non tornano. Perchè anche li quando sulla valvola leggo 0.8 MAX mi riporta circa il doppio.
Quello che ora mi manca da capire è come si fa a creare la funzione corretta. Come faccio a convertire il segnale che proviene dal sensore nella misura corretta?
Grazie mille
Ciaoo
----------------------------------------
AUTORE: 482
DATA :10/02/2016 - 15:32:21
----------------------------------------
Come ti dicevo, dovrbebe essere un trasduttore lineare, quindi non dovrebbe esserci da inventarsi chissà quali funzioni.
Abbiamo scoperto che è un sensore tra i 5 e i 50 l/min quindi a priori, [b:r62yszbj]sotto i 5 l/min non li considererei proprio come valore perchè non puo' essere letto dal sensore o se viene letto, è un valore che potrebbe essere completamente sbagliato.[/b:r62yszbj]
L'uscita analogica è tra 1 e 5V.
Quindi tu dovresti avere:
a 5 l/min un uscita di 1V
a 50 l/min un uscita di 5V
quindi avrai, 45l/min di escursione equivalgono a 4V
quindi 1V=45/4=11,25l/min e da qui deriva quindi il valore che trovavi nella funzione...non mi spiego quel 6,25 di offset...
Sotto a 1V sono valori che non dovresti considerare
Anche se a zero, essendoci nella funzione un offset, ovviamente anche a zero ti indicherà il valore di offset.
Riassumendo, leggi da max il valore analogico puro, non riscalato, e leggi solo valori sopra ai 5 l/min
----------------------------------------
AUTORE: 11102
DATA :10/02/2016 - 21:54:27
----------------------------------------
Ciao!
Grazie per l'aiuto! Quindi la funzione alla fine è corretta, solo che bisogna valutare il fatto che va da 1 a 5v e il fatto che sotto i 5 l/min non bisogna tenere conto perchè non è in grado di misurarlo.
Quindi tu mi consigli di acquisire i valori senza utilizzare nessuna funzione? Perchè ho provato ad eliminare la funzione però mi escono dei valori senza senso quasi, ad esempio 2347m che non so cosa indichi quella m.
Quello che non riesco a capire bene è come mai non riesco a rappresentare sul grafico gli stessi valori della valvola, però l'importante è che funzioni correttamente!
Grazie mille!!
Ciao!
----------------------------------------
AUTORE: 482
DATA :11/02/2016 - 07:01:55
----------------------------------------
2347m CREDO sia un valore in millivolts quindi sia un 2,34 Volts.
Tu nel tuo VI puoi leggere il dato analogico puro e mettergli semplicemente, prima di graficarlo un calcolo che è quindi:
(X-1)*11,25+5 E questo dovrebbe essere il tuo valore in l/min, dove X è il valore letto in Volts.
Metterla nel VI o nella funzione di SCaling non cambia niente. Se ce l'hai nel VI forse riesci a tenerla piu' sott'occhio.
----------------------------------------
AUTORE: 11102
DATA :11/02/2016 - 13:08:30
----------------------------------------
Ciao!
Perfetto adesso sono riuscito a far funzionare tutto quanto. L'equazione corretta da inserire in MAX è:
y=11,25x - 11,25
Perchè se tengo solamente y=11,25x ho che tutti i valori sono aumentati di 11,25 infatti quando sulla valvola leggo 3 l/min sul MAX mi riporta 14,25.
Modificando l'equazione e togliendo -11,25 ottengo il valore corretto, adesso quando sulla valvola leggo 3 l/min anche sul mio grafico esce 3 l/min quindi è tutto corretto
Solo una cosa! Quando vedo il grafico in labview non ho una linea "pulita" ma tanti valori (ho allegato la foto).
E' corretta come cosa oppure devo sistemare qualche impostazione in labview? Perchè in tutti gli altri grafici ho dei valori ben definiti. E' dovuto al fatto che effettuo tante misurazioni in poco tempo?
Grazie mille per l'aiuto!
Ciaoo
----------------------------------------
AUTORE: 482
DATA :11/02/2016 - 14:52:13
----------------------------------------
2 cose:
Innanzitutto non mi torna la tua formula...nel senso che quando avrai uscita 1, in teoria dovresti leggere 5, invece con la tua formula leggerai 0...
dopodichè
oddio..1,5 l/min di oscillazione mi sembra tanto..ma non so onestamente la sensibilità del tuo sensore.
Potrebbe essere magari un problema di disturbi sul segnale o sul gnd. potresti trasformare l'ingresso in un RSE cio' non utilizzare il segnale rispetto a GND ma rispetto al suo polo negativo in modo da avere una misurazione assoluta indipendentemente che il GND del sensore e del sistema di acquisizione siano uguali.
----------------------------------------
AUTORE: 482
DATA :11/02/2016 - 14:55:09
----------------------------------------
vedo adesso che dovrebbe già essere RSE.
Quindi ti chiedo, hai collegato giusto i fili? Uno al canale di acquisizione e uno al suo riferimento? (di solito è 8 canali dopo) senno' prova ad impostare il canale come non referenced e attacca il meno a GND.
----------------------------------------
AUTORE: 11102
DATA :11/02/2016 - 18:45:38
----------------------------------------
Ciao!
Quello che non mi torna è il fatto che la valvola mi riporta sul suo display anche tutti i valori sotto a 5 l/min. Per logica la valvola dovrebbe darmi come minimo 5 l/min e non riportarmi valori inferiori come quelli che ho visualizzato questa mattina.
Per quanto riguarda i collegamenti mi sembra di aver fatto tutto correttamente. Alla scheda 9201 ho collegato l'input analogico all'ingresso in AI4, mentre il COM alla GND. Alla stessa scheda mi arriva anche un altro sensore di portata e poi quattro sensori di pressione ed i loro valori sono corretti!
Dalla valvola della festo ho in uscita 5 cavi che servono:
Cavo 1: Collegamento 0V al modulo digitale / analogico
Cavo 2: Collegamento +24V al modulo digitale / analogico
Cavo 3:Collegamento input analogico nella scheda analogica (input -u- canale 3)
Cavo 4: Collegamento input scheda digitale
Cavo 5: Collegamento input scheda digitale
In pratica i primi due li utilizzo per alimentare il sensore, il terzo lo collego alla scheda NI, gli ultimi due non li uso.
Grazie mille, ti devo un caffè con brioches
Ciaoo!
----------------------------------------
AUTORE: 482
DATA :12/02/2016 - 07:28:26
----------------------------------------
[quote="tecfil":86glbanm]
Quello che non mi torna è il fatto che la valvola mi riporta sul suo display anche tutti i valori sotto a 5 l/min. Per logica la valvola dovrebbe darmi come minimo 5 l/min e non riportarmi valori inferiori come quelli che ho visualizzato questa mattina.[/quote:86glbanm]
Se il trasduttore ha un display suo è un altro discorso. L'uscita analogica è per schede esterne internamente avrà un circuito diverso che manda il valore al display e quindi ci sta che legga tutti i valori.
Tral'altro una cosa è una valvola, una cosa è un trasduttore di portata. Non mischiare le due cose.
[quote="tecfil":86glbanm]
Dalla valvola della festo ho in uscita 5 cavi che servono:
Cavo 1: Collegamento 0V al modulo digitale / analogico
Cavo 2: Collegamento +24V al modulo digitale / analogico
Cavo 3:Collegamento input analogico nella scheda analogica (input -u- canale 3)
Cavo 4: Collegamento input scheda digitale
Cavo 5: Collegamento input scheda digitale
In pratica i primi due li utilizzo per alimentare il sensore, il terzo lo collego alla scheda NI, gli ultimi due non li uso.[/quote:86glbanm]
Il primo dovresti collegarlo oltre che al trasduttore, anche al GND della scheda NI, in modo da avere lo stesso GND sia sulla scheda che sul sensore.
Mi sono accorto ora che ho fatto un po' di confusione nella spiegazione del tipo di lettura, quindi riassumo qui sotto:
1) RSE-> + al numero del canale e - a GND
2) Differential -> + al numero di canale e - al (numero di canale+8)
3)NRSE -> + al numero del canale e - al AISENSE
----------------------------------------
AUTORE: 11102
DATA :15/02/2016 - 08:17:40
----------------------------------------
Ciao!
Grazie mille, domani torno in laboratorio e ti faccio sapere, in teoria i collegamenti dovrebbero essere giusti però domani verifico e in caso provo a rifarli. Perchè anche a me sembra un'oscillazione molto elevata!
Il mio trasduttore ha una precisione del 2% se non erro.
Grazie
Ciaoo!
----------------------------------------
AUTORE: 11102
DATA :16/02/2016 - 09:16:23
----------------------------------------
Ciao!
Allora questa mattina ho fatto ulteriori test, e secondo me la funzione con i 12,5 è corretta:
y=12.5x-12.5
Ho provato ad acquisire la misura direttamente in volt senza fare la conversione. Il risultato è il seguente:
Flusso riportato dalla valvola: 0,4 l/min -> Tensione in ingresso: 1V
Flusso riportato dalla valvola: : 3,5 l/min -> Tensione in ingresso: 1,3V
Flusso riportato dalla valvola: : 10,2 l/min -> Tensione in ingresso: 1,8V
Flusso riportato dalla valvola: 17 l/min -> Tensione in ingresso: 2,35V
Provando ad inserire i dati nella mia funzione di conversione ottengo: Valore 3,5 l/min e tensione 1,3V
y=12,5 x 1,3 -12.5= 3,75 l/min
Provando con la 17 l/min e tensione 2,35V ottengo:
y=12,5 x 2,35 -12.5= 16,87 l/min
Quindi direi che ci siamo. anche perchè quando ho un flusso sulla valvola di 1l/min ho come tensione 1.08V in ingresso e quindi mi ritorna nuovamente 1l/min anche in labview!
Probabilmente chi aveva scritto la funzione prima di me ha pensato di iniziare l'acquisizione solamente da 5 l/min però si è dimenticato di aggiungere questo offset, quindi in labview otteneva valori aumentati tutti di 5l/min! Per questo la sua funzione non rappresenta i valori letti sul trasduttore di portata!
Per quanto riguarda l'oscillazione i miei collegamenti dovrebbero essere giusti.
Io ho collegato l'output del trasduttore all'ingresso della scheda, poi l'uscita COM della scheda (canale 9) alla GDN.
Sto utilizzando la configurazione RSE, anche perchè MAX non mi fa selezionare nessun'altra configurazione.
Questi sono gli schemi presi dal Datasheet della schena NI
[attachment=0:w02wzd8y]schema_input.rar[/attachment:w02wzd8y]
Grazie
Ciaoo!
----------------------------------------
AUTORE: 482
DATA :16/02/2016 - 10:51:09
----------------------------------------
..se vuoi lasciare quella, lasciala pure. COntinua ad esserci qualcosa ch enon mi torna, infatti sul valore basso, 3,5 l'errore è positivo, mentre su un valore piu' alto 17, l'errore è negativo, quindi mi aspetto che piu' salirai di portata, maggiore sarà l'errore.
In queste cose di solito non c'e' un piu' o meno. La conversione dev'essere precisa.
Tral'altro era 11,25, non 12,5. Da dove è spuntato quel 12,5 ?
----------------------------------------
================================================================================
Update MySQL
================================================================================
AUTORE: 11084
DATA :08/02/2016 - 11:03:36
----------------------------------------
Ciao a tutti, sto utilizzando il Database Connectivity Toolkit ma non capisco quale condition inserire, o come poter fare per poter aggiornare una riga intera di una determinata tabella, chiaramente utilizzando una solo chiamata.
Sono riuscito ad aggiornare la singola cella, una colonna intera, ma mai una riga intera.
Suggerimenti?
Grazie
----------------------------------------
AUTORE: 482
DATA :08/02/2016 - 15:51:57
----------------------------------------
Se devi aggiornare una riga intera devi collegare all'ingresso "data" un cluster di stringhe con un "to variant" della stessa dimensione e nell'ordine in cui sono presenti i campi nel tuo db.
----------------------------------------
================================================================================
estrazione numeri esadecimali da stringa su CANBus
================================================================================
AUTORE: 116
DATA :11/02/2016 - 08:54:12
----------------------------------------
salve
non riesco a fare un lavoro ben strutturato sulla stringa.
Problema: estrarre da una stringa tutti i dati
tipo di stringa: td 1 1 0x601 0x23 0x01 0x12 0x01 0x01 0x03 0x00 0x00
La stringa l'ho estratta da un file tipo txt dove ce ne sono svariate da gestire.
Queste stringhe servono per testare la comunicazione tra PC e DRIVE tramite CANBus.
Userò dei convertitori della IXXAT (forniscono le librerie e con piccoli esempi li ho testati).
praticamente devo estrarre i singoli valori in esadecimale, ID (in questo caso 601) e gli 8 byte 23 01 12 ecc.
la stringa contiene spazi e tabulazioni e devo gestire 0x23 come 23 in esadecimale.
si accettano suggerimenti & codice
grazie
Alberto
----------------------------------------
AUTORE: 11106
DATA :11/02/2016 - 09:56:31
----------------------------------------
Ti posto la mia proposta
----------------------------------------
AUTORE: 116
DATA :11/02/2016 - 12:33:53
----------------------------------------
1° grazie per il pronto esempio
sembra fare il caso mio
devo testarlo con varie stringhe
ciao
grazie
Alberto
----------------------------------------
================================================================================
Problema evento dimanico
================================================================================
AUTORE: 301
DATA :12/02/2016 - 12:34:23
----------------------------------------
Ciao ragazzi,
provo a girare la domanda anche qui, ormai non so dove sbattere la testa.
Premesso che sto lavorando su di un programma "impestato" ereditato da altri, mi trovo di fronte a quello che penso essere un baco, ma chiedo preziosi consigli anche a tutti voi (magari avete gia visto qualcosa di simile).
Ho una event, che gestisce svariati eventi.
Mi sono ritrovato a dover far eseguire un evento ANCHE in maniera programmatica.
Ho creato e registrato il mio evento utente e lo sono andato a "creare" nel punto in cui mi serve.
Ho prima associato lo user event allo stesso evento che volevo eseguire (mouse up su di un array), poi ho replicato l'evento e l'ho associato solamente all'evento dinamico.
Ora, dopo aver constatato che la parte di codice che genera l'evento viene correttamente eseguita, la struttura ad eventi non se lo considera e va nel suo caso di timeout.
Ho provato a spostarlo, forzarlo, a creare un pulsante fittizio e cercare di forzare un evento tramite il value signaling di questo pulsante.......NULLA!!!!!
Non se lo prende.
Il tutto su LV 2010 64bit....
Ogni proposta è ben accetta, in alternativa anche il numero di un buon esorcista......
Aris
----------------------------------------
AUTORE: 482
DATA :12/02/2016 - 15:39:25
----------------------------------------
Innanzitutto vediamo di chiarire bene le circostanze perchè hai usato troppe volte la parola evento per indicare cose diverse.
Tu hai un EVENT CASE nel quale ci sono diverse ROUTINE.
Una routine devi eseguirla sia in caso di MOUSE UP su un array, che in caso di user event.
Giusto?
Se è giusto, puoi o replicare la routine (spreco di risorse) o aggiungere lo specifier "user event" al case già esistente.
Fatto questo, per generare lo user event, la struttura è:
1) creare uno user event
2) registrare l'evento (collegare il refnum al dynamc event terminal)
3) GENERARE l'evento creato in precedenza
in uscita poi dal ciclo
Distruggere l'evento e DIS-registrare l'evento
se hai fatto tutto quello che ho scritto sopra, deve funzionare. se non funziona, prova a replicare il tutto estrapolando il solo l'essenziale.
Geppo
----------------------------------------
AUTORE: 301
DATA :12/02/2016 - 16:20:58
----------------------------------------
Ciao Ceppo, e grazie....
Tutto fatto esattamente come hai detto, il problema sta proprio nel fatto che dopo che viene eseguita la funzione "generate user event" il programma va nella routine (per adeguarmi) di timeout.
Ovviamente avevo associato lo user event alla stessa routine del mouse up, e visto che non funzionava l'ho poi replicata (sprecando risorse) ma senza risultato.
In pratica, sembra che il motore non riesca ad accodare l'evento utente che ho creato....
Aris
----------------------------------------
AUTORE: 11106
DATA :12/02/2016 - 16:47:34
----------------------------------------
E' molto strano che l'evento venga ignorato. Sarebbe un bug noto.
è possibile che il fire dell'evento (generate user event) avvenga prima della registrazione dinamica degli eventi?
Non usi il VI Flush event queue vero?
----------------------------------------
AUTORE: 301
DATA :12/02/2016 - 16:52:02
----------------------------------------
è veramente strano.
non ho flush event, sto lavorando sul 2010.
La creazione e registrazione dell'evento dinamico la faccio prima di entrare nella event, mentre la generazione dell'evento la eseguo all'interno di quest'ultima.
Ho provato giusto ora a passare il refnum ad un vi in esecuzione parallela al main ed a generare lo user event da quello.......e cosi funziona
...
("G"eppo......scusa, scrivevo dal cellulare)
Aris
----------------------------------------
AUTORE: 11106
DATA :12/02/2016 - 16:55:00
----------------------------------------
Sembra tu faccia tutto correttamente.
Non è possibile vedere il codice vero? (o una versione semplificata di esso)
----------------------------------------
AUTORE: 301
DATA :12/02/2016 - 17:06:34
----------------------------------------
Guarda, è una roba assurda e mastodontica, con in aggiunta il fatto che lavora con un db, quindi impossibile da far girare......
Ma ti assicuro che, come faccio di solito, ho provato a rifare un po il tutto "in scala", e non c'è motivo per cui non debba girare...
sono ore che ci sono sopra.....
----------------------------------------
AUTORE: 11106
DATA :13/02/2016 - 10:11:28
----------------------------------------
Ma è l'unico evento dinanico presente o ne hai altri?
----------------------------------------
AUTORE: 301
DATA :13/02/2016 - 10:16:28
----------------------------------------
L'unico.
Cmq, ieri sera ho iniziato a trovare la quadra....forse.
Il programma (ereditato) ha tutto il codice all'interno della event.
Sembra che mettendo l'evento in coda, se viene impiegato "troppo tempo" ad eseguire le rotine degli eventi precedenti, questo venga ignorato....
Proverò a trovare una qualche soluzione.
Purtroppo il cliente è intestardito a non voler rifare il programma....
Nel mentre, grazie a tutti
Aris
----------------------------------------
AUTORE: 482
DATA :15/02/2016 - 07:45:41
----------------------------------------
Ho visto solo adesso che eri tu, quindi avevo impostato il mio post come se fossi un neofita
Ecco il mio dubbio era che per qualche motivo non si arrivasse all'effettiva generazione programmatica dell'evento e da quanto scrivi sembra qualcosa del genere.
Solitamente la gestione degli eventi dovrebbe occuparsi piu' che altro appunto degli eventi generati perlopiu' dall'utente. tenere tutto il programma nell'event case non mi sembra una grande scelta...rompi le palle al cliente e fagli sganciare la grana!
----------------------------------------
AUTORE: 301
DATA :15/02/2016 - 08:10:09
----------------------------------------
Geppo.......lo prendo come un supercomplimento....
Dire che non è una grande scelta è riduttivo.....
Purtroppo, da quell'orecchio non ci vuol sentire, a causa dei tempi, piu che altro, anche perchè alla fine non dico che arrivi a spendere di piu a modificare questo obrobrio, ma.......
Purtroppo, comunque, penso che questa cosa (mantenendo il tutto cosi) non sia proprio fattibile.
In pratica il programma usa la coda degli eventi come "coda di esecuzione", ma avendo tutto il codice al suo interno, non riesco a gestire (o meglio verificare) la corretta sequenzializzazione degli stati.....
Insomma.....sono alla carretta
Ma grazie ancora...
----------------------------------------
AUTORE: 482
DATA :15/02/2016 - 10:10:01
----------------------------------------
Beh a sto punto, direi invece che usare un evento, visto che comunque la routine l'avevi duplicata, duplicala in un subvi e falla eseguire nel programma principale con un case invece che generare l'evento.
----------------------------------------
AUTORE: 301
DATA :15/02/2016 - 10:31:47
----------------------------------------
Infatti, è quello che voglio provare......
Ma non ti rendi conto del numero di variabili locali che hanno utilizzato...
Aris
----------------------------------------
AUTORE: 129
DATA :15/02/2016 - 10:43:39
----------------------------------------
Non avendo il Flush di altri eventi in coda, io rimango con solo il dubbio che non ci sia un accavallamento di eventi.
La soluzione di Geppo di mettere il codice fuori dagli eventi ti porterebbe a gestire meglio il tutto inoltre se c'è un timeout che gira potrebbe dare fastidio.
Lo so che non è proprio pulita, ma introdurre un piccolo delay prima del FireEvent?
----------------------------------------
AUTORE: 301
DATA :15/02/2016 - 11:00:55
----------------------------------------
Mo anca chi, Nic?!?!?
Si si, ho gia provato con un delay, e funziona......ma non sempre.
In un case fa un caricamento di dati dal db ed un aggiornamento di una miriade di roba, ergo, fin che ho pochi dati ci mette poco tempo, se ne ho molti, ci mette troppo tempo e quando i tempi si allungano......non sempre funziona.
cmq, provo a morirci un'altro po su......
Grazie ancora.
----------------------------------------
AUTORE: 301
DATA :18/02/2016 - 12:45:41
----------------------------------------
Ciao a tutti!!!!!!!!!
Per dovere di cronaca, chiudo il post, visto che ho risolto! (se cosi si puo dire).
Allora, a prescindere dai vari commenti su come è fatto il programma, ho scoperto che il problema era "semplicemente" che la event non mi accodava un evento scatenato o tramite value (signaling) o programmatico di un BOOLEANO!
Questo, ovviamente, messo in coda a tutti gli altri eventi che vengono gestiti.
Preso dalla follia, sconforto, disperazione, ho sostituito un pulsante "nascosto" che avevo provato ad utilizzare per gestirne l'evento di cambio di stato con un numerico.......etvoilà!
Tutto funziona ala perfezione! (o meglio, rimane uno schifo, ma almeno funzione)
Grazie ancora a tutti per l'interessamento.
E grazie a National che non si è fatta piu sentire e non mi ha saputo dire nulla.....
Aris
----------------------------------------
AUTORE: 384
DATA :23/02/2016 - 16:01:02
----------------------------------------
Ci ho già sbatutto la testa (sorry, ho visto solo ora).
Io metto il booleano in un cluster e creo lo user event da quello.
Così, funziona.
----------------------------------------
================================================================================
Cluster variabili e leggeri in memoria
================================================================================
AUTORE: 645
DATA :13/02/2016 - 22:37:54
----------------------------------------
Ciao a tutti,
sto lavorando con i cluster e vi chiedo un paio di consigli:
nel VI che sto realizzando utilizzo un array di cluster, ogni cluster ha un array di stringhe e una variabile booleana al suo interno. La prima domanda riguarda la possibilità di aggiornare il valore di un campo (per esempio il passaggio della variabile booleana da False a True e viceversa) durante il ciclo senza elevato impatto sulla memoria. Vi allego la soluzione che sto usando e vorrei migliorare: per ora modifico le variabili che rispettano un certo criterio e al termine del ciclo "riscrivo" il vettore di cluster. Funziona ma credo che aumentando i cluster il programma rallenti e diventi pesante (ma se sbaglio ditemelo!).
E poi vi chiedo un'altra cosa: immaginiamo che io debba lavorare con due tipi diversi di cluster, uno con una sola variabile booleana, l'altro che al suo interno ha due variabili booleane. L'utente sceglie il tipo tramite un menù a tendina. Una volta scelto il tipo di cluster lo inserisco nell'array di cluster che poi utilizzo nel VI. Come potrei fare?
Ho provato a costruire un tipo personalizzato ma non riesco a dare all'utente la scelta.
----------------------------------------
AUTORE: 301
DATA :15/02/2016 - 08:15:25
----------------------------------------
Giorno Magic,
Per quanto riguarda la memoria, io vedrei di costruirmi una FGV e gestire "l'esistenza" dei tuoi dati e le operazioni su di essi dentro a questa.
Per il tipo di dato.....beh, credo la cosa piu rapida sia trasformare il tutto in un variant.....
Aris
----------------------------------------
AUTORE: 11106
DATA :15/02/2016 - 08:34:26
----------------------------------------
Ciao Magic,
[quote:38x8jak0]E poi vi chiedo un'altra cosa: immaginiamo che io debba lavorare con due tipi diversi di cluster, uno con una sola variabile booleana, l'altro che al suo interno ha due variabili booleane. L'utente sceglie il tipo tramite un menù a tendina. Una volta scelto il tipo di cluster lo inserisco nell'array di cluster che poi utilizzo nel VI. Come potrei fare?[/quote:38x8jak0]
Utilizzare due tipi di cluster a seconda della scelta dell'utente è una strada che non ti consiglio. Diventa difficile da gestire e sopratutto, ogni modifica che fai alla tua struttura dati andrebbe replicata. Secondo me, la soluzione più adata a questo problema è la programmazione a oggetti. Se ti servono dei dettagli, scrivi pure.
[quote:38x8jak0] La prima domanda riguarda la possibilità di aggiornare il valore di un campo (per esempio il passaggio della variabile booleana da False a True e viceversa) durante il ciclo senza elevato impatto sulla memoria. Vi allego la soluzione che sto usando e vorrei migliorare: per ora modifico le variabili che rispettano un certo criterio e al termine del ciclo "riscrivo" il vettore di cluster. Funziona ma credo che aumentando i cluster il programma rallenti e diventi pesante (ma se sbaglio ditemelo!)[/quote:38x8jak0]
Innanzitutto, se hai a che fare con grosse strutture dati, ti consiglio di utilizzare le strutture InPlace; quindi, riferendomi a codice postato, potresti usare un inPlace per fare un bundle/unbundle ed un inPlace per fare l'indicizzazione dell' array. L'utilizzo dell'inPlace ti permette di evitare che venga fatta una copia in memoria dei tuoi dati.
----------------------------------------
AUTORE: 129
DATA :15/02/2016 - 10:30:54
----------------------------------------
Io utilizzerei i Data Value Reference, inserendo le operazioni che vuoi eseguire in due FGV.
In questo modo hai la possibilità di ottimizzare l'uso di memoria come dice sqrt(-1) e avere la possibilità di selezionare uno o l'altro cluster.
----------------------------------------
AUTORE: 645
DATA :25/02/2016 - 18:13:50
----------------------------------------
Aggiornamento... Così potete darmi altri consigli
Sto lavorando con gli oggetti, una programmazione che avevo sfiorato alcune volte senza mai utilizzarla e invece devo dire che è molto comoda e interessante.
Per ora ho due array, uno per tipologia di oggetto e l'utente può aggiungere elementi e inviare comandi.
Appena ho qualcosa di un po' completo ve lo propongo!
----------------------------------------
AUTORE: 11106
DATA :26/02/2016 - 10:01:52
----------------------------------------
[quote:8c2qrfqd]Appena ho qualcosa di un po' completo ve lo propongo![/quote:8c2qrfqd]
Certo, aspettiamo tue notizie
[quote:8c2qrfqd]Per ora ho due array, uno per tipologia di oggetto e l'utente può aggiungere elementi e inviare comandi.[/quote:8c2qrfqd]
Non mi è molto chiara la tua necessità però mi permetto di darti un suggerimento (scusami se può risultarti banale o inutile):
Supponiamo che le classi da te create si chiamino Y e Z. Anzichè creare due array di oggetti (uno per la classe Y e l'altro per la classe Z) puoi creare una classe astratta o padre (classe X) e definire le classi Y e Z come figlie di X. In questo modo, puoi utilizzare un solo array di oggetti X ma che potrà contenere anche gli oggetti Y e Z.
Il ragionamento è un po' contorto ma se ti servon dettagli e pensi che possa tornarti utili, scrivi pure.
----------------------------------------
================================================================================
Cambiare colore ad un plot
================================================================================
AUTORE: 482
DATA :16/02/2016 - 10:41:22
----------------------------------------
...ma ciao!
mi sa che mi sto perdendo in un bicchier d'acqua oppure c'e' qualcosa che veramente mi sfugge....
Ho un grafico e voglio che alcune sue caratteristiche vengano replicate in un altro.
In particolare sto avendo difficoltà coi colori dei plot.
Mi sembra di fare tutto corretto ma i colori della copia non diventano come l'originale.
Dove sbaglio?
----------------------------------------
AUTORE: 301
DATA :16/02/2016 - 12:21:17
----------------------------------------
Geppoooooooooo!!!!!!!!!!!!
Ammetto che mi avevi quasi fregato, e fatto sudare quasi come gli eventi.....
Aggiungi la proprietà fill/point color!
Aris
----------------------------------------
AUTORE: 482
DATA :16/02/2016 - 13:24:13
----------------------------------------
Ottimo!!
..ma...che c'azzecca..se è quella la proprietà da usare allora plot color che cacchio è?
----------------------------------------
AUTORE: 301
DATA :16/02/2016 - 15:22:22
----------------------------------------
Guarda.....non lo so, di preciso.
Credo che per disegnare un'istogramma, sfrutti i i punti, mentre il plot è la semplice linea (o qualcosa di simile).
Ad ogni modo.....l'importante è che vada, no?!?!?
Aris
----------------------------------------
AUTORE: 482
DATA :16/02/2016 - 15:23:40
----------------------------------------
eh già
grazie ancora
----------------------------------------
================================================================================
Labview con Open Office
================================================================================
AUTORE: 11020
DATA :16/02/2016 - 11:09:15
----------------------------------------
Un saluto a tutti
Vorrei aprire un documento Open Office e vorrei scrivere in una determinata cella un valore.
Ho scaricato la libreria .NET AODL ma non c'è alcuna documentazione.
Qualcuno ha già avuto modo di lavorarci.
Vorrei semplicemente aprire un file di calc chiamato prova, e vorrei scrivere, ad esempio 3, nella cella in posizione 0,0.
Un saluto a tutti
Giovanni
----------------------------------------
AUTORE: 482
DATA :16/02/2016 - 11:22:58
----------------------------------------
Non so se puo' essere d'aiuto, ma ho trovato questo per libreoffice
https://lavag.org/topic/19265-cr-libreo ... interface/
----------------------------------------
AUTORE: 129
DATA :16/02/2016 - 13:43:45
----------------------------------------
Sempre su LAVA puoi trovare questa
https://lavag.org/files/file/126-open-office-rgt-addon/
----------------------------------------
AUTORE: 11020
DATA :16/02/2016 - 14:56:11
----------------------------------------
Grazie mille per le risposte.
La libreria di LAVA qualcuno l'ha mai usata?! Perchè l'ho scaricata ma mi chiede di andare a prendere dei vi che non so dove si trovino
----------------------------------------
AUTORE: 129
DATA :16/02/2016 - 15:50:03
----------------------------------------
Devi avere le openG File Library, che scarichi con il VI Package Manager.
Io personalmente non l'ho mai usato però.
----------------------------------------
AUTORE: 11020
DATA :17/02/2016 - 06:24:05
----------------------------------------
Ho scaricato anche quelle. Però non funziona. Mi da errore 1448 ma anche facendo delle ricerce non ho trovato granchè.
----------------------------------------
================================================================================
Labview RDP & web server
================================================================================
AUTORE: 3428
DATA :18/02/2016 - 10:29:16
----------------------------------------
Salve,
vorrei provare ad utilizzare il mio tablet o smartphone per visualizzare un'applicazione che gira su labview 2014.
In particolar modo vorrei testare il wlan e vorrei sapere se qualcuno ha già sviluppato e testato qualcosa sotto questo aspetto.
Cercando un pò in rete ho trovato anche RDP di windows. Anche quì: qualcuno l'ha provato con labview, performance?
----------------------------------------
AUTORE: 11106
DATA :19/02/2016 - 07:44:22
----------------------------------------
Non l'ho mai usato ma forse Data Dashboard potrebbe fare al caso tuo
[url:1b1qetgi]https://www.ni.com/mobile/[/url:1b1qetgi]
----------------------------------------
AUTORE: 129
DATA :19/02/2016 - 08:51:50
----------------------------------------
Ma ti è sufficente avere un controllo tipo desktop remoto?
Conoscendo la tua esperienza so che sto per dirti una banalità, ma te lo dico lo stesso:
Hai provato TeamViewer?
----------------------------------------
AUTORE: 482
DATA :19/02/2016 - 09:02:29
----------------------------------------
Dashboard è uno strumento che ha ancora grossi limiti, bisogna ricreare un interfaccia apposita per mobile per poter accedere ai vari dati.
Il web server di labview funziona bene ma ha due limiti:
1) se bisogna controllare l'applicazione, è permesso ad un utente solo per volta. Ad esempio se abbiamo un interfaccia a piu' pagine, non si puo' cambiare pagina.
2) Il client dovrà avere installato il runtime di labview.
Un alternativa che avevo provato tempo fa e che funzionava ABBASTANZA bene, solo che poi non l'ho utilizzata perchè non aveva ancora la gestione di tutti i tipi di controllo, è il tool WebPager, che trasforma il pannello frontale in html e quindi visualizzabile da chiunque senza bisogno del runtime labview.
----------------------------------------
AUTORE: 3428
DATA :19/02/2016 - 09:47:44
----------------------------------------
Ciao ragazzi,
grazie delle dritte.
[u:3r49ecrl]@Gepponline:[/u:3r49ecrl]
1- beh credo sia normale, ovvero come se avessi 2 monitor per la mia unica applicazione, in un unico PC ed 2 utenti cercassero di interagire in parallelo. Il mouse o puntatore è 1 quindi una sola operazione per volta, un utente per volta;
2-gran bella rogna... io mi aspettavo semplicemente l'apertura del browser predefinito e le classiche prove con l'indirizzo localhost:8080 ecc.. senza labview runtime installato (anche perchè non saprei come installare il runtime sul mio smartphone)
3- la aggiungo io. Risoluzione dell'interfaccia
[u:3r49ecrl]@nicola[/u:3r49ecrl]
ma che banalità!!! ovviamente è la prima prova che ho fatto avendo l'app sul cell di teamviewer e l'applicazione che gira su un pc che però è in rete, vera rete esterna, e non una banale "intranet". Questo è il limite di teamviewer anche se ora che ci penso mi pare di aver letto che si può anche abilitare un qualcosa tipo punto punto senza utilizzare internet...
[u:3r49ecrl]@sqrt(-1)[/u:3r49ecrl]
Vorrei sviluppare la mia applicazione una volta soltanto senza dover rimettere mano all'interfaccia 2 volte, una per desktop e una per mobile...
Banalmente anche il remote desktop di windows andrebbe bene se non fosse che blocca il pc remoto dando il completo controllo al controllore e lasciando il pc remotato con lo schermo bloccato dal classico CTRL+ALT+CANC..
----------------------------------------
AUTORE: 301
DATA :19/02/2016 - 12:38:18
----------------------------------------
Premetto che non l'ho mai provato....ma promette di essere interessante.
http://jeffreytravis.com/lost/labvnc.html
Forse fa al caso tuo.
Aris
----------------------------------------
AUTORE: 482
DATA :19/02/2016 - 15:48:34
----------------------------------------
Stavo appunto per consigliarti a sto punto tight VNC, ma quella di Aris è una soluzione forse piu' interessante
Quello che dicevo al punto 1 è che ad esempio io avevo realizzato un applicazione che faceva delle query suun DB.
Era praticamente un webservice quello che avevo bisogno.
Oppure se ci sono tante info e usi un TAB per visualizzarle tutte, tutti vedranno quello che chi cambia pagina decide di vedere.
Pero' appunto, se non hai esigenze che piu' gente acceda allo stesso front panel facci sapere se ti fai una giocata con sto labvnc
----------------------------------------
================================================================================
Allarme con "riarmo"
================================================================================
AUTORE: 11108
DATA :19/02/2016 - 16:33:52
----------------------------------------
Avrei bisogno di aiuto per sviluppare un VI che controlla una variabile, la quale una volta raggiunto un valore di set point, generi un allarme. Questo allarme dovrebbe rimanere in questo stato fino a quando non si resetta in qualche modo sul pannello frontale, anche se nel frattempo la variabile è scesa sotto il valore di set point.
Che tipo di indicazione potete darmi?
Grazie
Potrebbe essere banale, ma questa cosa mi sta mettendo in crisi.
----------------------------------------
AUTORE: 129
DATA :19/02/2016 - 16:52:24
----------------------------------------
Ti allego un esempio che ho usato per fare una cosa simile.
Ciao
----------------------------------------
AUTORE: 482
DATA :22/02/2016 - 07:24:31
----------------------------------------
Non vedendo il vi di nicola provo a mettere in testo quello che dovresti fare.
1) controlli il valore della variabile.
1a) se la variabile è al di sotto del setpoint non fai niente
1b) se la variabile è al di sopra del valore di setpoint passi al punto 2
2) in questo case verifichi se l'allarme è attivo.
2a) se non è attivo, lo attivi
2b) se è già attivo, non fai niente
3) in un altra parte di codice gestisci il reset dell'allarme tramite ad esempio un pulsante sul pannello frontale.
----------------------------------------
AUTORE: 11108
DATA :22/02/2016 - 20:16:35
----------------------------------------
Ciao non posso aprire il BOOL Latch.vi con LabView 2012.
E' possibile avere in alternativa un'immagine del block diagram?
Grazie 1000 !
----------------------------------------
AUTORE: 129
DATA :22/02/2016 - 21:34:58
----------------------------------------
Te l'ho salvato in una versione inferiore ora dovresti vederlo.
----------------------------------------
AUTORE: 11108
DATA :23/02/2016 - 07:24:17
----------------------------------------
Grazie 1000 !
----------------------------------------
================================================================================
Localizzazione decimale e runtime
================================================================================
AUTORE: 129
DATA :22/02/2016 - 15:31:09
----------------------------------------
Ciao a tutti,
Ho un file contenente una tabella di numeri registrati con la virgola come separatore dei decimali.
Ho il Sistema configurato con separatore dei decimali il punto (.).
Uso il read spreadshet file e modifico i numeri mettendo il punto come separatore.
Il problema è che in ambiente di sviluppo funziona benissimo, in runtime invece mi non mi legge i decimali.
Ho provato anche a mettere nel file ini dell'eseguibile useLocaleDecimalPt=False ma niente.
Sono sicuro che mi sto perdendo in un bicchiere di acqua, ma non capisco perchè si comporta diversamente in runtime.....
Qualcuno ha avuto a che fare con un problema simile?
Grazie, Nicola
----------------------------------------
AUTORE: 11106
DATA :23/02/2016 - 07:39:25
----------------------------------------
Ciao Nicola,
scusa la domanda stupida l'eseguibile e il VI, i quali si comportano in modo diverso, girano sulla stessa macchina?
----------------------------------------
AUTORE: 11106
DATA :23/02/2016 - 07:41:45
----------------------------------------
[url:3bhln2kn]http://forums.ni.com/t5/LabVIEW/include-useLocaleDecimalPt-False-in-ini-file-of-exe/td-p/722804[/url:3bhln2kn]
----------------------------------------
AUTORE: 384
DATA :23/02/2016 - 09:12:31
----------------------------------------
Nel blocco "scan from string" puoi specificare il separatore decimale nella stringa di formato, senza preoccuparti delle impostazioni: %.;
----------------------------------------
AUTORE: 129
DATA :23/02/2016 - 20:25:01
----------------------------------------
Grazie a tutti,
Due PC, impostato con . come separatore decimale e l'altro con la virgola.
Sono stato un ingenuo
, tiravo su i dati come stringhe, rimanendo quindi con il separatore , come decimale. Li convertivo poi in numerici con il "Fract/Exp String To Number".
A questo punto ho dei numeri con la virgola su un sistema impostato con separatore decimale, in pratica la scelta use system decimal point (T) diventa superflua.
Il problema dell'eseguibile era dovuto al fatto che dall'altra parte modificavano il separatore da sistema e non me lo avevano comunicato
.
In pratica ho risolto tirando su i dati già come numerici così non ho problemi e per le visualizzazioni sulle Table(STring) li converto con il format in to string...
Grazie mille a tutti...
----------------------------------------
================================================================================
Problema VISA read + xy graph
================================================================================
AUTORE: 11110
DATA :28/02/2016 - 10:31:35
----------------------------------------
Ciao a tutti.
Mi sono avvicinato da poco al software labview ed ho un problema forse banale ma che non riesco a risolvere e che mi sta bloccando da tempo.
Vorrei costruire un vi che dialoghi via USB con un microprocessore della serie PIC. Labview dovrebbe inviare una stringa (ad esempio "start") atraverso il blocchetto visa write alla pressione del pulsante START e ricevere in risposta una serie di coppie di valori numerici divisi da una virgola del tipo x1,y1 x2,y2 ecc. per un totale di 60 coppie di valori. Queste coppie di valori dovrebbero andare a creare un XY GRAPH e a quel punto il programma dovrebbe rimanere in attesa di una nuova eventuale pressione del pulsante START.
Attualmente funziona la prima parte fino all'invio delle coppie di valori da parte del microprocessore ma non riesco a generare il grafico. Ho configurato il firmware del microprocessore in modo da inviare le coppie di dati molto lentamente (una ogni 700 mS circa) in modo da vedere su LV cosa succede. Quello che vedo sul front panel è che ad ogni coppia di valori ricevuta da LV, il grafico modifica il range dei due assi in modo che il punto ricada al centro del grafico ma senza disegnare nulla e senza collegare i punti precedenti.
Se qualcuno potesse indirizzarmi verso la soluzione, gliene sarei grato.
----------------------------------------
AUTORE: 482
DATA :29/02/2016 - 09:54:08
----------------------------------------
Non posso vedere il VI perchè uso la versione 2012, ma da quello che dici, sembrerebbe che tu mandi solo la coppia di valori ATTUALE all'XY graph, invece l'XY Graph è fatto da due array, l'array di X e l'array di Y, quindi prima di passarli al grafico, devi prendere i valori precedenti, accodargli quelli attuali e poi mandarli al grafico.
----------------------------------------
AUTORE: 645
DATA :29/02/2016 - 13:43:23
----------------------------------------
Non ho aperto il VI ma prova a vedere se
http://digital.ni.com/public.nsf/allkb/ ... 3D006EFF7C
può essere una soluzione.
----------------------------------------
AUTORE: 11110
DATA :29/02/2016 - 20:54:39
----------------------------------------
Ma ciao!
E soprattutto grazie per le risposte.
In effetti dal comportamento sembrerebbe proprio che arrivi all'XY Graph solo la coppia attuale di valori, però ho messo due blocchetti "build array" per cui speravo che gli array venissero creati prima di arrivare al grafico.
Mi viene il dubbio che non sia corretta la scelta di usare un "case structure" ma non sapevo come altro fare.
Con il "case structure" (a parte il problema principale descritto nel mio primo post) si presenta anche l'inconveniente che quando non arrivano dati, il punto sul grafico torna a 0:0.
Mentre cercherò di approfondire, allego il file in formato 2010 dove rispetto alla prima soluzione ho eliminato l'autoscale nel grafico ed ho anche disabilitato la funzione "Clear data on each call". Quello che vedo adesso è che all'arrivo della coppia di dati, il pallino sul grafico si posiziona nel punto corretto mentre quando non ci sono dati in arrivo il pallino è fermo sullo 0:0 cioè all'incrocio degli assi. In ogni caso non riesco a disegnare la curva.
Grazie per le eventuali suggerimenti che mi potrete dare.
Ciao!
----------------------------------------
AUTORE: 482
DATA :01/03/2016 - 07:07:49
----------------------------------------
...aspetta aspetta...
Premesso che non c'e' nessun ciclo nel tuo VI e quindi viene un po' meno l'analisi perchè l'errore potrebbe anche risiedere in quello (dove lo piazzi e come lo piazzi), tu fai un build array di un singolo valore, quindi semplicemente rendi valido per il graph il dato, ma sempre un valore singolo resta.
Se stai simulando il tutto usando la freccetta circolare, sappi che rischi di portarti dietro un sacco di problemi, quindi non farlo e inserisci un ciclo nel tuo VI.
Anche perchè ad esempio la configurazione della porta seriale va fatta una volta sola prima di entrare nel ciclo, non tutte le volte.
Tornando al vi, tu devi prendere il valore precedente e tramite un build array, accodargli quello attuale.
Ci sono diversi modi per farlo.
Se ci fosse un ciclo, lo faresti con uno shift register, in alternativa lo puoi fare utilizzando una variabile locale o una FGV
Ti allego uno snippet di cosa dovresti fare per vedere al successivo passaggio anche il valore precedente.
Ovviamente lo devi fare sia per le X che per le Y.
----------------------------------------
AUTORE: 11110
DATA :04/03/2016 - 19:52:23
----------------------------------------
Grazie alle vostre indicazioni ho fatto un notevole passo avanti (mi accontento di poco...) ma ho ancora un funzionamento anomalo.
Confermo che commettevo gli errori ipotizzati da gepponline ovvero quello di avviare il ciclo tramite il bottone con la freccia circolare (non ero ancora a conoscenza della differenza con l'altro bottone), ed anche quello di non avere inserito il ciclo.
Ho aggiunto un ciclo While che racchiude tutto tranne l'inizializzazione della porta seriale. Adesso riesco a vedere il grafico che si compone man mano che arrivano le coppie di valori.
Una cosa molto strana è che su 10 coppie di punti che il microprocessore lentamente invia, almeno 2 o 3 coppie non vengono rilevate. Nel vi che allego, ho anche eliminato il "delay before read" pensando che potesse essere il problema ma così non è. Attualmente il mio micro invia le coppie (x, 2x) con x che va da 1 a 10 ed infatti vedo sul grafico la retta a 45° che si compone.
Un'altro strano comportamento è che alla prima pressione del pulsante "run" su LV, non parte nulla. Devo stoppare il ciclo e poi farlo ripartire di nuovo con "run", a questo punto comincio a vedere il grafico.
Devo usare il sistema dello snipnet che hai indicato? Però non capisco dove sia quel blocchetto..
Vorrei allegare anche un
----------------------------------------
AUTORE: 482
DATA :07/03/2016 - 07:28:48
----------------------------------------
Intanto che guardo il tuo vi, ti spiego la questione snippet.
Uno snippet è un file di immagine che se lo trascini nel block diagram del tuo VI, ti crea in automatico il codice labview. Provare per credere.
Per creare degli snippet, seleziona una porzione di codice, poi vai sul menu edit-> create VI snippet from selection
----------------------------------------
AUTORE: 482
DATA :07/03/2016 - 07:32:56
----------------------------------------
Ho appena aperto il VI e ho visto subito l'erroraccio.
La close e il simple error handler vanno messi fuori dal ciclo!
Una ltro paio di cosine:
- sostituisci i terminali in ingresso e uscita dal ciclo, con degli shift register per non perdere i riferimenti e gli errori
- Se il tuo sistema risponde solo in seguito ad una richiesta, gestisci anche quello, senno' tu fai una richiesta ma continui a leggere anche se la richiesta non dovesse essere fatta.
----------------------------------------
AUTORE: 11110
DATA :10/03/2016 - 17:00:50
----------------------------------------
Tenchiu !!
Spostando fuori dal ciclo la close e il simple error handler, i dati in arrivo vengono letti tutti senza problemi!
Per quanto riguarda gli altri suggerimenti che mi hai dato, attualmente ho un problema personale che non mi consente di procedere con la sperimentazione in tempi rapidi, comunque, appena possibile, cercherò di seguire i tuoi consigli.
E' chiaro anche il discorso sugli snippet.
Ho notato una cosa: nell'ultimo vi che avevo allegato, togliendo i bocchetti "build array" e i successivi "convert to dynamic data" prima del grafico, il funzionamento non cambia. Pare he non siano necessari.. E' normale?
Grazie ancora
----------------------------------------
AUTORE: 11110
DATA :10/03/2016 - 17:13:26
----------------------------------------
Scusate,
rileggendo i messaggi precedenti, mi sono reso conto che gepponline aveva già dato una spiegazione alla questione "build array"...
----------------------------------------
AUTORE: 11110
DATA :19/03/2016 - 14:50:22
----------------------------------------
Ciao.
Ho fatto qualche progresso e ho alcuni quesiti.
Ho aggiunto gli shift register. Il problema che noto adesso è che il grafico che compare ha ogni punto collegato all'origine degli assi, anzichè collegati l'uno con l'altro come vorrei. Perchè? Allego snapshot del grafico ed anche il vi (non che questo problema debba essere connesso con gli shift register, magari c'è qualche impostazione errata).
Ho anche provato ad usare lo snippet che Gepponline mi avevi suggerito a proposito del build array, puoi verificare che l'abbia implementato come ritenevi opportuno?
Come faccio a rendere permanente l'impostazione del "delay before read"? Ogni volta che apro il vi è settato a 500 e pare che non tenga salvata la modifica che faccio a questo parametro.
Grazie e un saluto a tutti.
----------------------------------------
AUTORE: 11110
DATA :20/03/2016 - 11:53:08
----------------------------------------
Aggiungo una nota.
I punti del grafico vengono collegati insieme soltanto se aumento molto il "delay before read" fino a circa 400 - 500 mS. Così facendo però non faccio in tempo a leggere tutti i dati in arrivo separatamente ed alcuni di essi si accavallano. Se diminuisco il "delay before read" a 5 - 10 mS, leggo tutti i dati correttamente e separatamente ma i punti del grafico vengono tutti collegati all'origine.
Cosa sbaglio?
----------------------------------------
AUTORE: 482
DATA :21/03/2016 - 07:26:06
----------------------------------------
..non mi convince il property node che viene usato per costruire l'array. Perchè non c'e' una variabile locale? E soprattutto, dov'e' l'array originale da cui prendi quel valori?
Altra cosa. BUTTA VIA l'express VI "BUILD XY GRAPH" mannaggia a NI e a quando li ha inventati.
Costrusciti manualmente i valori da passare al grafico.
Prendi gli array e li metti in un bundle (che costruisce un cluster) e li colleghi direttamente all'XY graph.
Altra ccosa.
La scrittura la fai solo la prima volta e poi quello continua a rispondere?
----------------------------------------
AUTORE: 11110
DATA :22/03/2016 - 12:24:10
----------------------------------------
Grazie ancora per la risposta.
Vedo che hai già sistemato varie cose nel vi che hai allegato.
Per quanto riguarda la costruzione degli array, onestamente non ho capito cosa dovrei fare (e non ho capito se lo hai già fatto tu nel vi che hai allegato). Credo che l'array originale dovrebbe essere vuoto e dovrebbe riempirsi man mano che arrivano i dati dalla USB.
Avevo cercato di descrivere il funzionamento del sistema nel mio primo post. In ogni caso, dovrebbe succedere questo:
su LV premo il pulsante start, viene inviata la stringa "start" via USB, questa viene riconosciuta dal microprocessore il quale effettua una serie di test su una apparecchiatura ed invia a LV via USB una serie di 60 coppie di valori divisi da una virgola, questi valori dovrebbero andare a creare il grafico. Finita questa procedura, il sistema potrebbe anche arrestarsi, oppure LV potrebbe rimanere in attesa di una ulteriore pressione del pulsante start per ricominciare il ciclo.
Per la verità, nel mio progetto finale (spero di arrivarci), i dati che il microprocessore invierà non saranno soltanto 60 coppie ma saranno circa 8 serie ognuna composta da 60 coppie di valori; di conseguenza il grafico dovrà essere composto da una famiglia di 8 curve (funzione X-Y multiplot?). In questa fase iniziale credo sia il caso (anche grazie al vostro supporto) di mettere a punto l'acquisizione di UNA SOLA serie di 60 coppie di valori e di generare il relativo grafico X-Y.
Tornando ai problemi inerenti la visualizzazione del grafico e al collegamento dei vari punti, anche con il VI che hai allegato noto lo stesso comportamento.
Grazie
----------------------------------------
AUTORE: 482
DATA :22/03/2016 - 14:17:51
----------------------------------------
Beh, nel tuo vi c'e' una cosa molto sbagliata.
Hai un case, che se non trova la virgola nella stringa che legge, non fa la conversione, ma scrive comunque il dato di default, quindi uno 0 nel grafico.
Qundi, tu sposta anche tutta la parte dopo il case, all'interno del case e la situazioen senz'altro cambia.
----------------------------------------
AUTORE: 11110
DATA :24/03/2016 - 19:19:02
----------------------------------------
Grande Gepponline!
Non sai quanto mi hai reso felice. Da solo ci avrei messo una vita a capire e a risolvere quell'errore.
Attualmente il funzionamento è come lo vorrei, con le ultime modifiche da te suggerite.
Nei prossimi giorni farò delle prove per passare da una singola curva ad una famiglia di DUE curve (per poi arrivare ad una famiglia di 6 o 8 curve). Attualmente (singola curva su LV) il microprocessore invia 60 stringhe del tipo "X1,Y1" ... "X60,Y60" per cui pensavo di modificare il firmware del microprocessore in modo da fargli inviare:
60 stringhe del tipo "A,X1,Y1" , "A,X2,Y2" ... "A,X60,Y60" e poi
60 stringhe del tipo "B,X1,Y1" , "B,X2,Y2" ... "B,X60,Y60"
Su LV pensavo di duplicare tutto il case in modo da averne due uguali dei quali il primo che diventa true soltanto se nella stringa in arrivo c'è il carattere "A" ed il secondo soltanto se nella stringa in arrivo c'è il carattere "B". Porterei poi l'XY Graph e l'ultimo build array fuori dai case ma sempre dentro al while.
Pensi che sia corretto questo approccio?
Mi potresti anche dire con che logica và impostato il valore del delay before read?
Grazie ancora per il prezioso supporto.
Allego l'ultimo vi
----------------------------------------
AUTORE: 482
DATA :25/03/2016 - 07:09:42
----------------------------------------
1) No, la logica di duplicare due case non ha molto senso.
Proprio in quanto case, ne basta 1.
Il case nonn è TRUE o FALSE, è tutto quello che vuoi tu. E' un numerico o una stringa e puo' assumere N valori, quindi N possibilità in un unica case structure, dipende da cosa ci colleghi nel case selector.
Mi raccomando, cerca di lasciare fuori dal case, tutte quelle cose che vengono fatte uguali in tutti.
2) Il delay before read non è che ha proprio una logica, nel senso che non è obbligatorio usarlo.
Dipende appunto dal firmware che hai nel tuo PIC.
Se nel pc gli dici di mandare un carattere scandito regolarmente ogni tot, allora puoi cercare di sincronizzare le due cose (ma prima di tutto devi essere sicuro che il tuo VI riesca a girare a quella velocità senza problemi). In alternativa puoi usare il byte at port e leggere ogni qualvolta tu hai tot Byte sulla porta.
Tipo che se ce ne sono 2 non leggi e se ce ne sono 4 invece leggi.
Altra alternativa è un sistema domanda-risposta, in cui tu fai sempre una scrittura e il pc ti da la risposta.
sta a te scegliere.
----------------------------------------
AUTORE: 11110
DATA :27/03/2016 - 17:46:36
----------------------------------------
Altro problema.
Ho modficato il firmware del PIC che adesso invia una serie composta da 64 stringhe del tipo "AX1,Y1" ... "AX64,Y64" e successivamente una serie composta da 64 stringhe del tipo "BX1,Y1" ... "BX64,Y64" Ho di conseguenza modificato il vi nell'ottica di generare due curve: una per le coppie di valori precedute dalla "A" ed un'altra per le coppie di valori precedute dalla "B".
Succedono due cose strane: durante la trasmissione/ricezione della prima serie di valori (con la "A" davanti), la curva è visibile ad intermittenza e compare soltanto nell'istante della ricezione di una data coppia di valori per scomparire poi tra una ricezione e l'altra; quando arriva la seconda serie di valori (con la "B" davanti), la situazione è ancora peggiore: la prima curca non si vede e compare ad intermittenza uno strano grafico..
Ho cercato di seguire i tuoi consigli creando i case necessari ma avrò commesso qualche altro errore..
Forse il problema è dovuto alla presenza di un case "Default" che non avevo intenzione di inserire ma che senza la presenza di questo, il vi presentava l'errore "No case for some selecotr values".
Chiedo anche come fare per rendere più arrotondata la curva, una sorta di best fit, anzichè avere una spezzata che collega i punti reali ricevuti via seriale.
Grazie e buona Pasqua!
----------------------------------------
AUTORE: 482
DATA :29/03/2016 - 07:35:33
----------------------------------------
Ok, credo che qui interrompero' il mio supporto perchè stai realizzando una cosa per la quale, a quanto pare, ti mancano proprio le basi teoriche piu' che la programmazione labview e poi perchè un forum di discussioen e supporto non puo' risolverti tutto il problema.
Procedo per punti:
1) pensa alla logica di funzionamento del tuo software e alle varie fasi prima di mettere giu' codice cosi' a caso. Quindi, in testa devi pensare, Quando arriva solo la curva A, la curva B cosa deve visualizzare? E quando arriva solo la curva B, la A cosa deve visualizzare? Tieni presnete che la risposta è la stessa per tutte e due le domande e non è UNA CURVA VUOTA.
2) il problema del case di default si risolve semplicemente clikkando su uno dei due case e selezionando "make selected value default" oppure se vuoi veramente un caso di default in cui non sia ne A ne B, sviluppa il codice in modo che faccia qualcosa
3) ti ho appena aiutato a risolvere un problema, e appena inserisci una modifica, lo rimetti tale e quale a prima??
Continui a dare al grafico delle curve vuote e quindi il software quello ti disegna.
Nel caso A gli passi la curva B VUOTA, nel caso B gli passi la curva A vuota.
nel caso default gliele passi TUTTE E DUE VUOTE.
Quindi non c'e' nessun problema, il software fa esattamente quello che gli hai detto di fare.
4) Credo che tu ti debba chiarire l'idea di come si costruiscono gli array e come funzioano gli XY graph.
un XY graph non accoda i dati. cancella completamente quello che c'era alla scrittura pracedente e riscrive il nuovo dato che gli passi.
Essendo l'XY graph, formato da due grafici ed essendo di conseguenza un array, dargli in pasto un array vuoto, crea ovviamente un comportamento che non è quello che vorresti.
5) un consiglio, ISOLA SEMPRE LA PARTE CHE TI CREA PROBLEMI. Cerca di fare in modo di poter simulare le acquisizioni o comunque i dati che arrivano da hardware esterno.
In Questo caso, togli tutta la parte di acquisizione e realizza un VI che prenda dei dati noti (crea tu delle costanti) e fai il debug (clikkando la lampadina)) e osserva cosa succede passo per passo.
----------------------------------------
AUTORE: 11110
DATA :29/03/2016 - 21:08:53
----------------------------------------
Non è un problema di basi teoriche, a meno che non parli di basi teoriche di LV e qui avresti ragione. Quello che mi manca è la conoscenza di LV dato che fino a poco tempo fa non lo conoscevo per nulla ed ora ho soltanto poche nozioni, la maggior parte delle quali imparate grazie a questo forum (e alle tue risposte) e alla lettura di qualche guida.
E' un peccato vedere negato il supporto a chi ne sa meno di altri, al contrario è proprio chi ne sa meno che avrebbe più bisogno di supporto. D'altra parte capisco che sia impegnativo e forse anche noioso per chi ha più conoscenze, seguire e dare risposta a vari utenti che fanno domande per cui capisco le tue osservazioni. Per quanto riguarda le mie richieste di risolvere il mio problema, non mi stupirei più di tanto, la maggior parte dei post contengono (comprensibilmente) domande di persone che cercano di fare funzionare il proprio progetto. Anche le discussioni che possono sembrare troppo specifiche e personali possono sempre tornare utili a qualcuno nel momento in cui fa una ricerca per argomenti trattati.
Premesso ciò, ti ringrazio nuovamente per l'aiuto dato, cercherò di approfondire meglio la teoria e il funzionamento di Array, XY Graph ed anche le altre indicazioni che mi hai dato nell'ultimo tuo msg.
Un saluto
----------------------------------------
AUTORE: 482
DATA :30/03/2016 - 07:11:56
----------------------------------------
Scusa se sono sembrato sconrtroso, non è una questione di negare il supporto, ma su questo forum spesso riceviamo richieste di risolvere problemi che poi in verità diventano richieste di sviluppare l'applicazione senza metterci un minimo di impegno per capire il funzionamento del tutto (non è il tuo caso) e li cerchiamo di evitare.
Benvenga la richiesta sul problema specifico, anzi, qui si preferisc epuntare su quelle, ma se una volta risolto il problema specifico non si cerca di capire il perchè e il percome di una soluzione, per ogni step in avanti che si fa, ci si troverà di nuovo sul forum a chiedere la soluzione.
Quando parlavo di teoria, non mi riferivo a LV ma alla logica di funzionamento del tuo software.
I tuoi errori, seppur capisco la novità dell'utilizzo del mezzo, sono grossolani e facilmente evitabili se prima di metterti a "disegnare codice", butti giu' uno schema a blocchi di cosa deve fare il tuo software.
Perchè al netto del case di default che potevi sapere come fare a non metterlo, il comportamento nel case A e nel case B era sbagliato per una questione logica, non di "sintassi".
E li forse subentra la carenza di conoscenza di LV ma soprattuto del concetto di DataFlow.
Per cui il dato scorre nei fili da destra verso sinistra (tendenzialmente) e ad ogni iterazione del ciclo riparte dall'inizio come in qualsiasi altro linguaggio di programmazione.
Il grosso vantaggio in LV è la possibilità di fare il debug usando il pulsante lampadina, grazie al quale puoi visivamente osservare il dato che scorre e capire che dato viene passato in un determinato momento ad un determinato oggetto.
Quindi come già ti ho suggerito, prova a sfruttare di piu' la lampadina. Per me dopo 15 anni è ancora uno degli strumenti piu' utili insieme ai probe e i breakpoint.
----------------------------------------
================================================================================
Come licenziare il mio sw labview
================================================================================
AUTORE: 11020
DATA :03/03/2016 - 07:56:50
----------------------------------------
Un saluto a tutti,
vorrei licenziare il sw che ho realizzato con labview utilizzando una chiavetta usb. è possibile?!
Non ho mai fatto niente di questo tipo. Non saprei minimamente da dove partire.
Come devo muovermi?!
Devo acquistare una chiavetta usb e con quest'ultima mi verranno fornite le dll da inserire dentro il mio codice sorgente per gestire lo scadere dei giorni?!
Suggerimenti?!
Un saluto e grazie
Giovanni
----------------------------------------
AUTORE: 301
DATA :03/03/2016 - 12:28:34
----------------------------------------
ciao,
scusa la domanda, ma vuoi creare una licenza per un TUO sw?Ossia creato da te, giusto?
Se cosi......spazio alla fantasia.
puoi crearti tu una dll e far si che il sw se la vada a cercare nella chiavetta (dico dll per riallacciarmi a quanto scrivi tu).
Diversamente.....non ho capito.
Aris
----------------------------------------
AUTORE: 11020
DATA :04/03/2016 - 14:31:41
----------------------------------------
Hai assolutamente centrato il punto!!
Però non ho capito cosa intendi.
Come faccio a crearmi una dll?!
Grazie mille per la risposta.
----------------------------------------
AUTORE: 301
DATA :07/03/2016 - 06:40:37
----------------------------------------
giorno!
Ripeto, ho scritto dll solo per allacciarmi a cio che scrivevi tu, una dll la puoi fare con il labview.
La via piu semplice sarebbe farti un file criptato e lavorare su quello.
Puoi crearti un file di testo nel quale puoi scrivere o leggere cio che desideri (data di attivazione, giorni rimanenti, ecc) e che cripti come vuoi tu.
Per cercarti questo file, puoi rinominare la chiavetta con un nome univoco e cercare il file solamente dentro a quella directory.
Ripeto, spazio alla fantasia.....
----------------------------------------
AUTORE: 482
DATA :07/03/2016 - 07:34:30
----------------------------------------
Se non hai bisogno di grossissime sicurezze puoi usare anche un semplice file di testo salvato in binario binario con tutti i dati che ti servono.
----------------------------------------
================================================================================
Progetti per imparare ad usare LabView
================================================================================
AUTORE: 11111
DATA :03/03/2016 - 17:51:03
----------------------------------------
Buonasera a tutti,
sono nuovo come utente.
Scrivo visto l'interesse per il software Labview, per chiedervi se qualcuno potrebbe aiutarmi con qualche progetto svolto per prendere dimestichezza e quindi iniziare la programmazione.
Premetto inoltre che sto partendo da zero consultando manuali e guardando video su youtube.
Cordiali saluti
----------------------------------------
AUTORE: 482
DATA :04/03/2016 - 07:03:49
----------------------------------------
...ma ciao!
un consiglio che ti do è, quando vuoi realizzare qualcosa in labVIEW, andare sul menu HELP->Find Examples... e da li o tramite il search o cercando per categorie (in particolare Fundamentals), cercare degli esempi già fatti, che sono molti e solitamente ben commentati.
Benvenuto!
----------------------------------------
================================================================================
Problema con la graph palette
================================================================================
AUTORE: 11020
DATA :08/03/2016 - 10:14:54
----------------------------------------
Un saluto a tutti.
Ho un problema con la graph palette.
Ho un waveform graph e su questo waveform graph ho aggiunto la graph palette.
Quando vado a selezionare l'opzione dello zoom, vado a selezionare l'area di grafico che voglio ingrandire.
La mia domanda è: esiste un property node che mi dia in uscita il valore minimo e massimo dell'asse delle x?!?!?
Spero di essermi spiegato bene. Ho provato a fare qualche ricerca sulla rete, ma sinceramente non saprei nemmeno che parola chiave inserire.
Un saluto e grazie
Giovanni
----------------------------------------
AUTORE: 43
DATA :08/03/2016 - 17:10:24
----------------------------------------
[quote="Gio88":1puamf16]Un saluto a tutti.
Ho un problema con la graph palette.
Ho un waveform graph e su questo waveform graph ho aggiunto la graph palette.
Quando vado a selezionare l'opzione dello zoom, vado a selezionare l'area di grafico che voglio ingrandire.
La mia domanda è: esiste un property node che mi dia in uscita il valore minimo e massimo dell'asse delle x?!?!?
Spero di essermi spiegato bene. Ho provato a fare qualche ricerca sulla rete, ma sinceramente non saprei nemmeno che parola chiave inserire.
Un saluto e grazie
Giovanni[/quote:1puamf16]
Hai cercato nelle proprietà del waveform Graph?
Non mi pare...
Da diagramma vai sull'indicatore del WaveformGraph. Premi il tasto dx del mouse e seleziona:
Create --> Property Node --> X Scale --> Range --> Maximum
lo stesso con Minimum per ottenere il minimo.
Faccio notare che in questo forum si sono già trattati argomenti correlati a questo.
Aggiungo che, come per le YScale, anche le XScale possono essere + di 1 per grafico, per cui sarebbe meglio prima di modificare una proprietà di XScale, settare l'indice corrente della XScale: Active X Scale.
Il funzionamento di Active X Scale è identico a quello di Active Plot e Active Cursor.
Per approfondimenti cercare nell'help. Senza troppa fatica si trovano tutte le informazioni necessarie.
bye
----------------------------------------
AUTORE: 11020
DATA :21/03/2016 - 08:53:25
----------------------------------------
Il problema è che xScale -> Range -> Maximum e Minimum mi buttano fuori come uscita un numbero (DBL).
Io invece ho l'asse delle x formattata come RelativeTime. è possibile far uscire come valore massimo e minimo della scala anzichè un DBL, un valore di tempo?!
Grazie.
Giovanni
----------------------------------------
AUTORE: 43
DATA :28/03/2016 - 08:05:17
----------------------------------------
[quote="Gio88":2ou0c576]Il problema è che xScale -> Range -> Maximum e Minimum mi buttano fuori come uscita un numbero (DBL).
Io invece ho l'asse delle x formattata come RelativeTime. è possibile far uscire come valore massimo e minimo della scala anzichè un DBL, un valore di tempo?!
Grazie.
Giovanni[/quote:2ou0c576]
Ciao Gio e buona Pasquetta...
Stai attento: non confondere il formato con il tipo.
Il tempo, sia assoluto che relativo, si esprime con un numero.
Quel numero indica un tempo in secondi con tanto di decimali (decimi, centesimi, millesimi di sec. eccetera)
Se per "fare uscire" intendi "visualizzare in un indicatore", basta formattare la visualizzazione del tuo indicatore numerico Double (DBL) come Relative time.
bye
----------------------------------------
================================================================================
Riempire Template TDMS
================================================================================
AUTORE: 11112
DATA :09/03/2016 - 09:56:05
----------------------------------------
Ciao a tutti,
ho qualche problema con i report su file TDMS.
E'possibile riempire un template già scritto?
Come posso poi scegliere quale colonna scrivere?
Vi ringrazio in anticipo per eventuali risposte.
----------------------------------------
AUTORE: 3428
DATA :09/03/2016 - 14:32:12
----------------------------------------
Ciao,
sì puoi utilizzare un template, non l'ho mai fatto ma si può fare.
Da una rapida vista della palette tdms, in advanced trovi un "Set next write position" che credo funzioni come il set position del file di testo ovvero che ti permette di iniziare a scrivere da dove vuoi tu, posizionando il cursore.
Forse vuole però che tu apra il file sempre tramite l'advanced, quindi alla vi "Set next write position" imposti 0 come valore di partenza, e lui dovrebbe posizionare all'inizio il cursore, poi dando sempre lo stesso gruppo (pagina dello sheet tdms) e lo stesso canale (colonna che vuoi aggiornare).
Non so quanto sia articolato questo template ma per me fai prima a crearti il file nuovo...
----------------------------------------
AUTORE: 11112
DATA :11/03/2016 - 14:27:35
----------------------------------------
Ok, grazie mille del consiglio.
----------------------------------------
================================================================================
Diagramma Vettoriale
================================================================================
AUTORE: 11112
DATA :14/03/2016 - 10:53:30
----------------------------------------
Salve a tutti,
sto cercando di creare un diagramma vettoriale in cui rappresentare, relativamente alle 3 fasi, tensione e corrente.
Volevo sapere se per un grafico di questo tipo è necessaria per forza l'Electrical Power Suite, oppure è possibile crearlo senza la necessità di acquistarla.
Vi ringrazio fin da subito per eventuali consigli.
----------------------------------------
AUTORE: 43
DATA :14/03/2016 - 16:18:32
----------------------------------------
[quote="BAgpe":1e94irp0]Salve a tutti,
sto cercando di creare un diagramma vettoriale in cui rappresentare, relativamente alle 3 fasi, tensione e corrente.
Volevo sapere se per un grafico di questo tipo è necessaria per forza l'Electrical Power Suite, oppure è possibile crearlo senza la necessità di acquistarla.
Vi ringrazio fin da subito per eventuali consigli.[/quote:1e94irp0]
Ignoravo l'esistenza dell' "Electrical Power Suite" fino alla lettura di questo post...
Essendo ignorante anche della materia, guardando le info di questo pacchetto sul sito di NI, non ne ho capito e apprezzato nemmeno la potenza.
Per quello che può valere il mio giudizio, penso che[u:1e94irp0][b:1e94irp0] per fare un grafico qualsivoglia, il tool software in questione non sia necessario [/b:1e94irp0][/u:1e94irp0]
bye
----------------------------------------
AUTORE: 11112
DATA :18/03/2016 - 08:49:06
----------------------------------------
Ok, grazie del consiglio.
----------------------------------------
================================================================================
Resettare e riavviare ciclo while loop
================================================================================
AUTORE: 11115
DATA :30/03/2016 - 15:29:26
----------------------------------------
Ciao a tutti! Non sono un esperta di Labview quindi vorrei un vostro parere..
Ho un ciclo while loop con una case structure true\false.
Quando il case structure è false il ciclo continua a runnare;
quando è true dopo un tot secondi dovrebbe mandare il while loop in restart con tutti i [u:2o1h0qyx]valori azzerati[/u:2o1h0qyx].
Vi allego l'esempio.
Grazie in anticipo
[attachment=0:2o1h0qyx]esempio.vi[/attachment:2o1h0qyx]
----------------------------------------
AUTORE: 482
DATA :30/03/2016 - 16:01:32
----------------------------------------
riesci a salvarlo (col save as) in versione 2012? senno' non riesco ad aprirlo.
----------------------------------------
AUTORE: 11115
DATA :30/03/2016 - 17:10:11
----------------------------------------
Ho avuto qualche problema con il salvataggio..spero di esserci riuscita!
[attachment=0:2867m61y]esempio 2012.vi[/attachment:2867m61y]
----------------------------------------
AUTORE: 482
DATA :31/03/2016 - 07:29:17
----------------------------------------
Allora...il comportamento del VI cosi' com'e', non è proprio quello che hai descritto.
Partiamo da una cosa fondamentale, il VI va mandato in run con la freccia singola NON CON QUELLA CIRCOLARE che serve piu' che altro per simulare altre cose.
Detto questo, tu hai un while loop che quando il case è false, se il pulsante "TIME has elapsed" è true si ferma, senno' continua a ciclare.
Quando il case è true verifica se un certo tempo è passato e restituisce da quanto tempo è eventualmente è passato e se è passato o è iniziato da piu del tempo di ritardo, allora ferma il ciclo, altrimenti continua a ciclare.
Quindi in tutto questo non c'e' nessun reset dei valori e soprattutto sembra che tu abbia erroneamente utilizzato il bloccketto elapsed time.
Molto meglio usare direttamente il bloccketto tick count che trovi nella palette Programming->timing.
Ti allego un snippet (è un immagine che una volta scaricata, se la trascini nel block diagram, crea il codice) con un esempio.
----------------------------------------
AUTORE: 11115
DATA :31/03/2016 - 10:29:02
----------------------------------------
Prima di tutto grazie mille per il tuo aiuto!
Sapevo già che dovevo runnare con la freccia singola..infatti l'ho sempre usata, ma ho apprezzato comunque il tuo consiglio!
Per quanto riguarda il mio ciclo sicuramente non mi sono spiegata bene, io non ho inserito il reset dei valori nell'esempio che ho allegato..vorrei inserirlo ma non ci riesco. Visto che non sono stata in grado di fare le iterazioni ho lasciato il ciclo in modo che venga svolto una sola volta (cioè fino a che non va in stop). Vorrei che dallo stop il ciclo ricominciasse dall'inizio con valori azzerati.
C'è qualche comando\collegamento semplice che posso utilizzare per ottenere il restart? Perchè se inserisco troppi cicli ho problemi nella fase successiva..
Accetto comunque qualsiasi consiglio, anzi sei stato gentilissimo a rispondermi!
----------------------------------------
AUTORE: 482
DATA :31/03/2016 - 16:02:56
----------------------------------------
secondo me è proprio li che sta l'errore.
Tu pensi a fare stoppare il ciclo e poi farlo ripartire, invece tu devi fare in modo che il ciclo resetti i valori e non faccia nient'altro in quella iterazione che pero' resta sempre un iterazione. Il ciclo non viene stoppato.
Nel mio esempio ho messo la scritta di dove dovresti inserire l'azzeramento dei valori. Il resto dlele operazioni vanno messe dove c'e' scritto che cicla normalmente.
----------------------------------------
================================================================================
Problema comunicazione utilizzando visa
================================================================================
AUTORE: 11020
DATA :05/04/2016 - 14:06:11
----------------------------------------
Dovrei parlare con un dispositivo utilizzando il protocollo di comunicazione rs232.
Pensavo sarebbe stata una cavolata, invece ho dei problemi. Il property node Bytes at Port mi butta fuori sempre il valore zero. Quindi ci sono dei problemi.
Qualcuno può dirmi dove sto sbagliando?! Non ho mai avuto questo tipo di problema.
un saluto
Giovanni
----------------------------------------
AUTORE: 301
DATA :05/04/2016 - 14:40:51
----------------------------------------
da quello che hai postato, non leggi mai nulla dal buffer della seriale....
----------------------------------------
AUTORE: 11020
DATA :05/04/2016 - 15:04:11
----------------------------------------
Come lo risolvo?!
Non ho capito
Comunque nel frattempo ho cambiato leggermente il codice che è diventato come quello in allegato.
Non va bene?!
Grazie
Saluti
----------------------------------------
AUTORE: 301
DATA :05/04/2016 - 19:06:53
----------------------------------------
ok....chiaro....
Vedi i commenti nell'allegato.
Aris
----------------------------------------
AUTORE: 11020
DATA :06/04/2016 - 13:54:38
----------------------------------------
Anche utilizzando il tuo codice, non ottengo alcuna risposta. Magari non sto mandando i giusti comandi al dispositivo. Conosci qualche tool che mi permetta di effettuare comunicazioni con il mio dispositivo seriale?! Ad esempio uno sniffer?!
Grazie mille
----------------------------------------
AUTORE: 11020
DATA :06/04/2016 - 14:14:35
----------------------------------------
Qua c'è il datasheet del mio dispositivo
https://sick-virginia.data.continum.net ... 035065.PDF
Alla pagina 103 spiega come mandare i messaggi. Io, ad esempio, gli richiedo di mandarmi il valore letto sul laser A (comando : ^BMEASURE A^C), però lui non fa niente. Nessuna risposta.
----------------------------------------
AUTORE: 482
DATA :06/04/2016 - 14:53:10
----------------------------------------
aspetta aspetta..ma tu hai impostato nei settaggi della porta il controllo di flusso?
----------------------------------------
AUTORE: 11020
DATA :06/04/2016 - 15:03:40
----------------------------------------
Non ho capito... Porca miseria.
----------------------------------------
AUTORE: 11020
DATA :06/04/2016 - 15:14:16
----------------------------------------
Ho provato ad impostarlo sia Hardware che Xon/Xoff... Qualunque cosa siano... Però non è cambiato niente.
----------------------------------------
AUTORE: 482
DATA :06/04/2016 - 16:01:03
----------------------------------------
Dal datasheet sembra che bisogna impostare su Xon/Xoff ma poi usa dei caratteri tutti suoi.
Solo che quei caratteri non sono specificati esplicitamente. Li si evincono dagli esempi.
Quindi io proverei a settare Xon/Xoff e non usare i caratteri di inizio e fine stringa.
Oppure valutare se quei ^B e ^C in realtà non siano qualche equivalente carattere HEX ...
Altra domanda idiota ma siccome anni fa ci ho sbattuto la testa...hai verificato che i due fili rx e tx siano crossati? cioè rx va su tx e viceversa? Io usando un cavo seriale già fatto, mi sono trovato che era dritto dritto e quindi non funzionava.
----------------------------------------
AUTORE: 11020
DATA :06/04/2016 - 16:17:49
----------------------------------------
[quote="gepponline":233fbujm]Dal datasheet sembra che bisogna impostare su Xon/Xoff ma poi usa dei caratteri tutti suoi.
Solo che quei caratteri non sono specificati esplicitamente. Li si evincono dagli esempi.
Quindi io proverei a settare Xon/Xoff e non usare i caratteri di inizio e fine stringa.
Oppure valutare se quei ^B e ^C in realtà non siano qualche equivalente carattere HEX ...
Altra domanda idiota ma siccome anni fa ci ho sbattuto la testa...hai verificato che i due fili rx e tx siano crossati? cioè rx va su tx e viceversa? Io usando un cavo seriale già fatto, mi sono trovato che era dritto dritto e quindi non funzionava.[/quote:233fbujm]
Grazie mille.
Gentilissimo.
Domani proverò a controllare se i cavi sono crossati correttamente.
Per quanto riguarda il comando da inviare non ho capito cosa intendi.
Al posto di mandare ^BMEASURE A^C dici di mandare un comando sostituendo a ^B e ^C un altro codice?!
----------------------------------------
AUTORE: 482
DATA :07/04/2016 - 07:47:00
----------------------------------------
Prova con la seriale configurata su Xon/Xoff a non mandare nessun carattere di inizio e fine
----------------------------------------
AUTORE: 11020
DATA :07/04/2016 - 15:18:57
----------------------------------------
Ho risolto.
Bastava trasformare i caratteri utilizzando la tabella ASCII. Che stupido!!
----------------------------------------
================================================================================
Problema nel Salvataggio immagini TIFF
================================================================================
AUTORE: 11118
DATA :07/04/2016 - 11:46:05
----------------------------------------
Buongiorno a tutti,
sono nuovo nel forum e sono un neofita di LabView utilizzato per la ricerca clinica.
Abbiamo assemblato un piccolo programmino per acquisire da una videocamera ad alta risoluzione immagini TIFF. IL programma tuttavia carica in memoria le immagini, svuota la memoria (come è giusto che sia) ma non me le salva.
L'errore che mi ritorna è questo:
IMAQwriteTIFFfile codice: -1074395997
in allegato trovate il programmino. Potete aiutarmi?
Vi ringrazio a nome della ricerca clinica
Michele
----------------------------------------
AUTORE: 482
DATA :07/04/2016 - 15:52:18
----------------------------------------
puoi salvarlo in versione 12?
----------------------------------------
AUTORE: 11118
DATA :08/04/2016 - 09:22:12
----------------------------------------
Ecco, l'ho salvato su versione 12.
Grazie!!
----------------------------------------
AUTORE: 482
DATA :08/04/2016 - 12:55:16
----------------------------------------
Trovato il problema!
E' un banale errore di distrazione...
Non hai collegato il controllo "Experiment Folder" all'ingresso Image Logging Path del vi di salvataggio.
----------------------------------------
AUTORE: 11118
DATA :08/04/2016 - 13:13:07
----------------------------------------
Ciao, purtroppo non ci salto fuori. Ci ho provato (forse sbagliando) ma mi dà lo stesso errore. Riesci a girarmi uno screenshot o farlo direttamente tu nel programma? Poi posso provare subito.
Ti ringrazio ancora,
----------------------------------------
AUTORE: 482
DATA :08/04/2016 - 16:29:37
----------------------------------------
sono su un pc senza labview adesso...comunquw è veramente solo un filo da tirare daiiii!!
Lo vedi il controllo "experimental folder"?
Lo vedi che è collegato all'event case ma da li non va da nessuna parte?
D ali, devi collegarlo al VI del case 2 che fa il salvataggio e che se ci vai sopra, vedrai che ha un terminale non connesso dove devi metterci il path.
----------------------------------------
AUTORE: 482
DATA :08/04/2016 - 16:30:50
----------------------------------------
Aspetta..COSA IMPORTANTISSIMA!!!
Quel controllo non puo' essere vuoto, deve contenere un path prima che mandi in esecuzione il vi, senno' è come se lo mandassi vuoto perchè è all'esterno del ciclo.
----------------------------------------
AUTORE: 11118
DATA :14/04/2016 - 09:47:32
----------------------------------------
Ciao!
Ho tirato il cavo fino al secondo layer. Ma mi da comunque errore.
Come faccio ad inserire una path nel controllo? Di default mi da C:
Grazie
Michele
----------------------------------------
AUTORE: 11118
DATA :14/04/2016 - 10:25:55
----------------------------------------
Funziona!! Risolto, grazie dell'aiuto!!!
----------------------------------------
================================================================================
Problema con blocco Insert Into Array
================================================================================
AUTORE: 11020
DATA :11/04/2016 - 15:44:19
----------------------------------------
Un saluto a tutti
Sto realizzando un mini progettino.
Vorrei che funzionasse nel seguente modo:
- Premendo il tasto inizio acquisizione, il sw si mette in ascolto.
- Ogni volta che io vado a selezionare il led chiamato "induttivo" vorrei che una volta si e una volta no mi venisse popolato l'array che entra nel waveform graph.
Sto maledicendo il mondo, non capisco per quale motivo l'array non venga mai popolato.
Assurdo.
Dove sbaglio?
----------------------------------------
AUTORE: 482
DATA :11/04/2016 - 16:02:23
----------------------------------------
A me sembra che il funzionamento sia corretto, solo che non è chiaro..tu vuoi che in quella che tu chiami "volta no", il grafico si svuotasse?
----------------------------------------
AUTORE: 482
DATA :11/04/2016 - 16:04:26
----------------------------------------
ti sconsiglio di utilizzare il reinit to default, meglio forzare a false, è piu' leggibile
----------------------------------------
AUTORE: 11020
DATA :11/04/2016 - 16:10:47
----------------------------------------
[quote="gepponline":1j1viy4q]A me sembra che il funzionamento sia corretto, solo che non è chiaro..tu vuoi che in quella che tu chiami "volta no", il grafico si svuotasse?[/quote:1j1viy4q]
No, vorrei che: la prima volta che schiaccio il led "induttivo" il grafico venga popolato con i primi due valori. La seconda volta che schiaccio il led, vorrei che il grafico rimanesse cosi, la terza volta vorrei che venisse agigornato con un terzo valore, la quarta volta vorrei che non venisse aggiornato, la quinta volta vorrei che venisse aggiunto un ulteriore valore... e così via. Mi sono spiegato bene?!
Il problema è che il mio array non viene mai popolato e quindi il mio grafico rimane sempre vuoto.
----------------------------------------
AUTORE: 482
DATA :11/04/2016 - 16:24:07
----------------------------------------
Oh cacchio, no, si è persa la risposta.
Riposto!
Ho trovato l'errore.
Usi l'inserto into array.
L'insert into array si usa SOLO per inserire valori ad un certo indice di un array già esistente.
Oltre ad essere sbagliato come concetto, anche se inserissi il primo elemento, poi andrebbe in errore perchè il tuo filo blu incrementa di 2 numeri ad ogni volta che vuoi inserire il nuovo valore, quindi cercherebbe di inserire un valore in un indice che non esiste.
Tu invece vuoi accodare un nuovo valore.
Quindi sostituisci l'insert into array con un build array e hai risolto.
----------------------------------------
AUTORE: 11020
DATA :11/04/2016 - 16:27:37
----------------------------------------
[quote="gepponline":31j1aj9d]Oh cacchio, no, si è persa la risposta.
Riposto!
Ho trovato l'errore.
Usi l'inserto into array.
L'insert into array si usa SOLO per inserire valori ad un certo indice di un array già esistente.
Oltre ad essere sbagliato come concetto, anche se inserissi il primo elemento, poi andrebbe in errore perchè il tuo filo blu incrementa di 2 numeri ad ogni volta che vuoi inserire il nuovo valore, quindi cercherebbe di inserire un valore in un indice che non esiste.
Tu invece vuoi accodare un nuovo valore.
Quindi sostituisci l'insert into array con un build array e hai risolto.[/quote:31j1aj9d]
Grande!! Ora funziona!!
----------------------------------------
================================================================================
Popolare array orizzontalmente anziche verticalmente
================================================================================
AUTORE: 11020
DATA :12/04/2016 - 09:48:46
----------------------------------------
è possibile riempire un array orizzontalmente anziche verticalmente.
Sto utilizzando il blocco build array che mi popola un array mettendo i vari valori in maniera verticale.
Io vorrei metterli direttamente in maniera orizzontale senza utilizzare il blocco per la trasposizione.
è possibile?!
In allegato è presente un mini programmino che va a crearmi l'array verticale. Come posso far si che venga messo in orizzontale?!
Grazie mille
Giovanni
----------------------------------------
AUTORE: 129
DATA :12/04/2016 - 10:50:55
----------------------------------------
devi utilizzare il transpose 2d array nella palette Array
----------------------------------------
AUTORE: 43
DATA :12/04/2016 - 16:05:54
----------------------------------------
Spero possa essere utile
[attachment=0:3qd5jpo0]InsArrayVertical.vi[/attachment:3qd5jpo0]
bye
----------------------------------------
AUTORE: 129
DATA :12/04/2016 - 17:09:23
----------------------------------------
[quote:174jyj7j]senza utilizzare il blocco per la trasposizione[/quote:174jyj7j]
scusa non avevo letto
ecco l'esempio
----------------------------------------
================================================================================
Ritardo seganale analogico su arduino
================================================================================
AUTORE: 11052
DATA :16/04/2016 - 14:28:19
----------------------------------------
salve a tutti
sto cercando di realizzare un piccolo progettino con labview usando un arduino 2009 come scheda di acquisizione,il progetto consiste nel misurare l'irradianza solare e misurare la velocità del vento; le difficoltà che sto riscontrando sono diverse, di cui la prima è cercare di avere un valore medio e non istantaneo dell'irradianza poichè è una grandezza che varia molto velocemente;
all'inizio avevo messo un ritardo temporale al whileloop che contiene entrambi i segnali e avevo dei valori di irradianza più stabili,ma questo va a compromettere la lettura degli impulsi che mi arrivano dall'anemometro,allora ho provato a modificare il subvi dell'elemento analogico inserendo un whileloop con ritardo,ma il risultato non cambia è come se lo rimettessi al whileloop generale
qualcuno ha una soluzione o me lodevo tenere cosi e come è???
altro dilemma è che sto cercando di realizzare un conta impulsi per avere la velocità del vento e avevo visto un contatore simile realizzato su http://www.kopsystem.it/index.php/ardul ... impulsi,ma a me non funziona,secondo me manca qualche passaggio nella spiegazione;
----------------------------------------
AUTORE: 482
DATA :18/04/2016 - 07:29:41
----------------------------------------
Ci sono diversi errori nel tuo vi.
Partiamo dal fatto che non è runnabile perchè ci sono invertiti controlli e variabili locali.
Ma detto questo, innanzitutto tu parli di un anemometro a impulsi digitali
Solitamente quegli anemometri lavorano ad 1 impulso al giro che corrisponde a circa 1m/s, quindi con un timer da 500ms, potrai al massimo leggere 10 m/s, come buona pratica pero' è sempre meglio avere dei tempi almeno doppi a quelli della frequenza necessaria, quindi diciamo che cosi' com'e' al massimo potresti leggere un 5m/s.
Per leggere un anemometro devi avere un tempo ciclo altissimo o rischi di perdere impulsi, quindi inserirei un wait until next multiple da non piu' di 10ms
In piu' c'e' un errorone e cioè inizializzi il pin digitale ad ogni iterazioen del ciclo, invece la configurazione del pin va messa fuori dal ciclo while.
In tutto cio' c'e' poi la questione firmware.
Il firmware che dovresti aver installato in arduino per poter comunicare labview, che tempo di esecuzione ha? verifica anche questo perchè potrebbe inficiare al tua applicazione.
Per verificarlo basta mettere la lettura continua sui canali che ti interessano (senza temporizzatori) e mettendo un calcolo del tempo di esecuzione del ciclo nel ciclo while.
----------------------------------------
AUTORE: 11052
DATA :21/04/2016 - 01:40:39
----------------------------------------
Grazie gepponline per avermi risposto
scusami per quello che ho scritto
,con labview sono agli inizi e imparo qualcosa guardando a destra e sinistra e guardo anche esempi poco chiari come quello riportato su http://www.kopsystem.it/index.php/ardul ... impulsi (che ho cercato di contattare più volte per chiarimenti):
riguardo al ritardo del whileloop,lo so che è sbagliato, per quello che sta alla base della teoria del campionamento ho fatto una mega .......,ma era per vedere se si otteneva un lettura del segnale analogico più normale come infatti avviene e volevo sapere se si può fare un whileloop con ritardo solo per il segnale analogico, io ci ho provato in diversi modi,ma accade che non mi legge più il segnale digitale; in questi giorni ci riprovo mettendo la configurazione del pin digitale fuori dal whileloop come hai detto (grazie per la correzione),anche se ho l'impressione che il segnale analogico me lo devo piangere cosi e come è.
Riguardo alla velocità di comunicazione che arduino ha con labview ho notato che qualche impulso a certe velocità durava un pò troppo,cioè ho avuto l'impressione che a certe velocità due impulsi li legge come unico e mi era venuto il sospetto (ora non più
) che poteva esserci questo tipo di inghippo e se la comunicazione la porto in Xbee che succede
(spero che non si abbassi)
e per quanto riguarda calcolo del tempo di esecuzione del ciclo nel ciclo while mi aiuti a capire cosa dovrei fare? tipo inserire l'elasped Time?
in fine ho visto che nella scheda Waveform Measurements esistono vari sub vi per avere il campionamento del segnale digitale,tipo il Waveform Peak Detection VI ma non ho capito come devo impostare il width (ammesso che sia lì lo sbaglio), oppure cosa posso usare
grazie ancora gepponline per le dritte e l'attenzione dedicatami ciao
p.s.:si può corregere il titolo del topic
----------------------------------------
AUTORE: 482
DATA :22/04/2016 - 07:20:38
----------------------------------------
Pe ril titolo, vai sul primo post e clikka su "edita" (in alto a dx), dovrebbe permetterti di modificare il titolo.
Tornando alla questione pratica.
Normalmente se hai due acquisizioni a velocità diverse da dispositivi diversi, potresti creare due while paralelli, ognuno con la sua frequenza.
Essendo pero' un dispositivo unico quello da cui acquisisci, non puoi fare questa cosa, perchè nel momento in cui fai partire la comunicazione, questa ti tiene occupata la porta.
Per questo devi acquisire il piu' velocemente possibile anche l'acquisizione lenta. Poi eventualmente la visualizzi solo una volta ogni tanto.
Ti allego un VI che visualizza il tempo di ciclo e permette di inserire un temporizzatore nel ciclo.
Se lo mandi in run con tutti i pulsanti a false e il temmpo a zero, vedrai che avrai il tempo di ciclo a 0, cioè il ciclo while gira talmente veloce che è sotto al ms di esecuzione.
Premendo su Inserisci attesa e inserendo un valore di attesa vedrai che il tempo di ciclo corrisponderà al valore inserito.
Se poi in questo ciclo while inserisci il tuo codice, togliendo il tempo di attesa, avrai modo di testare la velocità massima di comunicazione e lettura di arduino.
Come ti dicevo, si consiglia di avere tempi ciclo ALMENO doppi della frequenza di acquisizione necessaria.
Se con l'anemometro vuoi leggere fino a 20m/S (ipotizzando che sia un classico 1 imp/giro =1m/s) ti consiglierei di leggere almeno 4 volte tanto, quindi 40/50 impulsi al secondo, cioè 20ms di tempo ciclo.
Se inserendo solo il codice arduino vedi che passi questa cifra, probabilmente non puoi fare quello che vuoi fare cosi' come l'hai inteso.
Un alternativa potrebbe essere modificar eil firmware in Arduino facendo in modo che sia direttamente lui a gestire l'ingresso digitale, calcolar ela velocità e restituirtela in uscita su un pin analogico.
----------------------------------------
AUTORE: 11052
DATA :24/04/2016 - 16:34:52
----------------------------------------
Ciao gepponline,grazie per l'aiuto,ho inserito il codice e tolto il tempo di attesa,l'ho mandato in run e mi ha dato come tempo di ciclo 32
dimmi che non sono 32ms,dimmi che ho sbagliato qualcosa nei collegamenti
perchè,se sono 32ms,supponendo che l'anemometro faccia 1 giro in 32ms e quindi una velocità massima di 31giri/s per (0.054 metri di raggio dell'anemometro x 6.28) ottengo una velocità di 10m/s che in km/h è 39
mi sa che il progetto finisce qui
----------------------------------------
AUTORE: 482
DATA :03/05/2016 - 07:31:56
----------------------------------------
please versione 2012
Per i dati dell'anemometro, io ho sempre lavorato con anemometri i cui giri corrispondevano al m/s quindi 1giro =1mt/s.
Se le tue specifiche sono quelle, quello è il conteggio.
Bisogna vedere se si riesce a velocizzare un po' il tutto lavorando sul firmware di arduino al limite.
Ma già in partenza l'idea di leggere gli impulsi dall'anemometro e mandarli in tempo reale al pc via seriale non mi sembrava una buona idea.
Come ti ho già scritto, molto meglio fare una funzione in arduino che calcola la velocità in base agli impulsi e poi via seriale ti passa il valore ottenuto.
Intanto aspetto il tuo VI in versione 2012 per vedere se hai sbagliato qualcosa.
----------------------------------------
AUTORE: 11052
DATA :09/05/2016 - 21:24:19
----------------------------------------
Grazie per il tuo intervento gepponline,riguardo al tuo suggerimento di far elaborare il segnale dell'anemometro ad arduino,io pensavo di far lavorare un'altra scheda con l'anemometro e mandare l'informazione già elaborata alla scheda dove gira labview, cioè fare un collegamento tra i pin delle due schede e in questi giorni sto cercando di capire se è possibile farlo;avevo pensato per velocizzare il firmware di andare a mettere mano nei subvi di lifa,ma appena li ho aperti ho avuto una crisi sono come le scatole cinesi e con le conoscenze che ho è impossibile x me e poi sul sito dei fondatori di lifa e linx ho letto che non si può fare molto (arduino non è come la scheda myRIO), avevo anche pensato di cambiare scheda tipo una raspberry,ma su questa scheda sono bianchissimo.
ti allego il file in labview 2012,e vado sul sito di arduino x vedere se è fattibile il discorso delle due schede, ciao e grazie ancora x il tuo interessamento
----------------------------------------
AUTORE: 482
DATA :10/05/2016 - 08:57:25
----------------------------------------
ti confermo che il tuo vi è corretto e quindi quel 32 che leggi sono i ms di tempo ciclo.
Che altra scheda useresti?
In alternativa puoi anche eventualmente usare un altro arduino che non comunichi con labview ma che elabori solo il segnale dell'anemometro e poi lo passa all'altro arduino sottoforma di valore analogico.
----------------------------------------
================================================================================
Come traslare array
================================================================================
AUTORE: 11020
DATA :01/05/2016 - 13:14:59
----------------------------------------
Un saluto a tutti.
Volevo chiedervi un aiuto. Io ho un grafico sul quale vengono stampati dei valori che acquisisco in maniera seriale da un laser. Il problema è che questi valori sono traslati tutti avanti di uno.
è possibile traslare il mio array indietro?!
Spero di essermi spiegato bene
Un saluto e grazie
Giovanni
----------------------------------------
AUTORE: 301
DATA :02/05/2016 - 06:59:24
----------------------------------------
Buogiorno!
Cosa intendi per traslati di uno?!?!
"stampi" un array sul grafico? o sfrutti la sua memoria.
Se puoi, posta un esempio del codice dove fai quello che chiedi, mi sembra di capire che tu abbia semplicemente stampato un valore vuoto (o non desiderato) all'inizio.
Aris
----------------------------------------
AUTORE: 11020
DATA :03/05/2016 - 07:47:12
----------------------------------------
Grazie mille per la risposta.
Ho risolto il problema, non era un problema dovuto ad un array traslato ma era un problema di lettura in seriale del mio dispositivo.
Grazie mille comunque per la disponibilità.
Giovanni
----------------------------------------
================================================================================
Errore -1073807252 VISA
================================================================================
AUTORE: 11020
DATA :03/05/2016 - 07:51:39
----------------------------------------
Un saluto a tutti.
Sto comunicando via seriale con un dispositivo.
Inizialmente sono partito con un semplice comando e lui mi rispondeva correttamente,
cambiando comando non mi risponde più in maniera corretta e dal blocco di lettura seriale di Labview mi esce il codice di errore -1073807252 che nell'help non è molto dettagliato.
A cosa può essere dovuto?!
In allegato c'è un semplicissimo esempio del mio programmino
Saluti
Giovanni
----------------------------------------
AUTORE: 43
DATA :03/05/2016 - 09:37:09
----------------------------------------
ho scaricato il tuo VI ma sto usando una vecchia versione di LabVIEW quindi non lo posso aprire.
Riguardo l'errore
[code:2llsmqkh]VISA: (Hex 0xBFFF006C) An overrun error occurred during transfer. A character was not read from the hardware before the next character arrived.[/code:2llsmqkh]
significa che il buffer della seriale è pieno di caratteri e deve essere svuotato prima di procedere.
In genere il driver windows delle seriali gestisce un buffer (FIFO) di alcuni kB che trattiene i caratteri in attesa che vengano letti.
Ti consiglio al termine dell'esecuzione del programma di chiudere la porta di comunicazione mentre all'avvio, nel caso la porta non sia stata chiusa, meglio eseguire un comando di "Flush" per svuotare l'intero contenuto del buffer
bye
----------------------------------------
AUTORE: 11020
DATA :04/05/2016 - 10:35:35
----------------------------------------
Esattamente così!!
Grazie mille!!
----------------------------------------
================================================================================
IMAQ Image.ctl
================================================================================
AUTORE: 11122
DATA :04/05/2016 - 12:07:30
----------------------------------------
Ciao!
Vorrei sapere se esiste e qual è il pacchetto da installare per utilizzare IMAQ Image.ctl anche in LabVIEW 2014?
Â
con il .exe e labview runtime non mi richiede il controllo, mentre in Sviluppo SI
Â
Grazie
----------------------------------------
AUTORE: 482
DATA :04/05/2016 - 12:46:58
----------------------------------------
Direi che è il pacchetto NI VIsion, ma potrebbe anche essere nel pacchetto NI IMAQ.
----------------------------------------
AUTORE: 11122
DATA :05/05/2016 - 10:28:08
----------------------------------------
Trovato!
il pacchetto è Vision Common Resources 2014
----------------------------------------
================================================================================
Generate Delayed Pulse
================================================================================
AUTORE: 11125
DATA :09/05/2016 - 20:29:32
----------------------------------------
Ciao,
dovrei pilotare un il sensore ultrasonico HC-SR04, quello a 4 pin con Trigger e Echo .
Quindi devo generare un trigger, ovvero un impulso .
Dopo dovrò misurare l'ampiezza dell'impulso che mi ritorna il sensore, ma una cosa alla volta
Per forza di cose devo usare i DAQ traditional , quindi ho usato il Generate Delayed Pulse come da img allegata .
Ho quindi usato un oscilloscopio per vedere l'impulso generato . E cosa strana (almeno per me che sono alle prime armi) se faccio girare il programma con Highlight Execution riesco a vedere l'impulso generato sia che lancio one shot che lancio ciclicamente .
L'impulso al momento è di 1 secondo Low e 1 sec HI proprio per capire solamente se il tutto funziona .
grazie
----------------------------------------
AUTORE: 482
DATA :10/05/2016 - 08:34:49
----------------------------------------
puoi postare il vi? solo la parte che c'e' nel JPG, perchè a vederlo cosi' non capisco cosa sia quel counter stop...
----------------------------------------
AUTORE: 11125
DATA :10/05/2016 - 17:44:15
----------------------------------------
Ciao,
oggi sono andato un pò avanti. Riesco a genereare il trigger a catturare l'ampiezza dell'impulso che mi ritorna il sensore .
Quindi riesco a calcolare la distanza.
I prossimi passi da fare sono quelli di calcolare la velocità e magari l accelerazione.
Ho pensato che invece di generare un solo impulso di trigger ne genero un treno di due impulsi quindi prendo le due misure di distanza .
I tempi li conosco perchè setto io i trigger quindi avrò S0=0 la partenza, e un S1 rispettivamente ai tempi T0 e T1 .
Quindi V0=0, V1=(S1-S0)/(T1-T0) da cui Acc = (V1-V0)/(T1-T0)
Allego il VI fino ad adesso scritto.
Per la seconda parte devo raccogliere (si accettano consigli) idee su come inserire in un buffer le due misure .
Probabilmente dovrò cambiare blocchetti e prendere gli INTERMEDIATE .
----------------------------------------
================================================================================
Lavorare con Labview in multiutenza
================================================================================
AUTORE: 10958
DATA :17/05/2016 - 08:51:17
----------------------------------------
Salve,
avrei necessità di un vostro supporto. Avrei necessità di lavorare in azienda utilizzando Labview. Nasce, però, l'esigenza di lavorare in contemporanea sullo stesso codice da parte di più persone. Vorrei conoscere, se possibile, se esiste qualche tool/Sw tipo "SVN" da far installare sui pc delle diverse persone per lavorare in contemporanea ed effettuare il "commit","merge" e gli eventuali conflitti delle varie versioni che vengono sviluppate.
Grazie mille in anticipo.
----------------------------------------
AUTORE: 3428
DATA :17/05/2016 - 16:47:18
----------------------------------------
Ciao,
io utilizzo tortoise hg con Labview 2014.
Funziona benissimo per lavorare in gruppi.
Ovvio è che non si può lavorare in 2 sulla stessa vi
----------------------------------------
AUTORE: 10958
DATA :17/05/2016 - 16:56:18
----------------------------------------
Il problema è proprio voler lavorare in contemporanea sulla stessa VI e, successivamente, valutare e risolvere eventuali conflitti.
In ogni caso, grazie per la risposta.
----------------------------------------
AUTORE: 3428
DATA :18/05/2016 - 07:38:01
----------------------------------------
ciao,
immagino sia una vi bella grossa, anch'io ho spesso avuto questa necessità.
Risolto facilmente creando subvi ad hoc con in e out utilizzati dal vi condiviso e modificato solo da un utente.
----------------------------------------
AUTORE: 43
DATA :18/05/2016 - 11:16:35
----------------------------------------
[quote="Ingbjt":349myuqe]Il problema è proprio voler lavorare in contemporanea sulla stessa VI e, successivamente, valutare e risolvere eventuali conflitti.
In ogni caso, grazie per la risposta.[/quote:349myuqe]
Se il tuo problema è il merge , puoi utilizzare il tool di merge di ni [url=http://zone.ni.com/reference/en-XX/help/371361J-01/lvhowto/merging_vis/:349myuqe]leggi qua[/url:349myuqe].
Mi sento di sconsigliarti questa pratica. Meglio, se applicabile, scorporare da VI le parti che devono essere modificate contemporaneamente facendole diventare dei SubVI a sè stanti.
Riguardo all'accesso allo stesso VI contemporaneo, io preferirei impedirlo, con un sistema di "lock" automatico, che impedisca a chi voglia modificare quel VI di farlo fintanto non venga rilasciato dall'utente che lo sta modificando, con commit. Ovviamente questo può essere fatto solo se ilsistema di repository è centralizzato (su un server) e non distribuito.
Riguardo alla gestione di SW di Repository integrabili nel Progetto di LabVIEW, ci sono sempre dibattiti in corso. L'argomento è sempre caldo. O almeno tiepido.
Su lava ne parlano per esempio [url=https://lavag.org/topic/13174-repository-for-labview-project/:349myuqe]qua[/url:349myuqe].
Ai tempi stavo cercando un Source Code Repository Software che fosse distribuito come Git ... ma lasciamo perdere.
bye
----------------------------------------
AUTORE: 10958
DATA :18/05/2016 - 11:34:58
----------------------------------------
Ciao,
vi ringrazio per le risposte. Cerco di analizzarle al meglio documentandomi e poi vi faccio sapere.
----------------------------------------
================================================================================
Problemi con FTP
================================================================================
AUTORE: 11020
DATA :19/05/2016 - 09:55:57
----------------------------------------
Ciao a tutti.
Ho un problema con la connessione FTP.
Premetto che non conosco nulla con questo tipo di connessione, in ogni caso quando digito, nella barra in alto dove si trova il percorso delle mie cartelle, il seguente comando: ftp://10.59.8.8 vengo reindirizzato correttamente alla cartella del PLC senza che mi venga chiesto niente.
Utilizzando il blocco FTP Get File mi da l'errore 15530 e mi dice Login Failed.
Come mai?!
----------------------------------------
AUTORE: 43
DATA :19/05/2016 - 13:56:09
----------------------------------------
[quote="Gio88":2uuuh81x]Ciao a tutti.
Ho un problema con la connessione FTP.
Premetto che non conosco nulla con questo tipo di connessione, in ogni caso quando digito, nella barra in alto dove si trova il percorso delle mie cartelle, il seguente comando: ftp://10.59.8.8 vengo reindirizzato correttamente alla cartella del PLC senza che mi venga chiesto niente.
Utilizzando il blocco FTP Get File mi da l'errore 15530 e mi dice Login Failed.
Come mai?![/quote:2uuuh81x]
Perchè il File Transfer Protocol (FTP) permette all' "entità" che si collega a quell'indirizzo IP, di operare sui file in funzione dei privilegi assegnati. Quindi per accedere a un qualunque sito ftp, si devono avere delle credenziali, cioè una username ed una password.
Il codice di errore che riporti indica esattamente questo.
[code:2uuuh81x]Internet Toolkit: (Hex 0x3CAA) 530 Not logged in.[/code:2uuuh81x]
Guarda se questi link ti possoneo essere utili.
http://digital.ni.com/public.nsf/allkb/ ... 2400640233
http://digital.ni.com/public.nsf/allkb/ ... BB005A7684
http://digital.ni.com/public.nsf/allkb/ ... enDocument
https://decibel.ni.com/content/docs/DOC-34176
In generale cerca "FTP login" sul sito NI
bye
----------------------------------------
AUTORE: 11020
DATA :20/05/2016 - 15:09:09
----------------------------------------
In realtà volevo effettuare una connessione ftp con un plc che non richiedeva ne user ne password.
Avevo provato a mettere il campo user e password vuoti ma non funzionava. Mettendo invece uno spazio, sia nella voce user che in quella password, tutto funziona correttamente!!
----------------------------------------
================================================================================
Sheet Excel in PDF
================================================================================
AUTORE: 238
DATA :21/05/2016 - 17:43:54
----------------------------------------
Tempo fa ho trovato un VI che crea un PDF da un file di testo o anche da un file Excel. Il problema: se si vuole creare un PDF da un file xlsx viene stampato il sheet attivo alla chiusura di Excel. Domanda; come si potrebbe stampare tutti gli sheet del file Excel?
----------------------------------------
AUTORE: 482
DATA :23/05/2016 - 07:18:59
----------------------------------------
..domanda da un milione di dollari, ma devi farlo per forza programmaticamente?
Perchè senno' puoi usare PDF creator che è una stampante virtuale che anichè stampare, salva su PDF qualsiasi cosa tu voglia stampare.
Magari c'e' modo trmite activex o simili di interfacciarsi con il processodi stampa e dire di stampare tutta la cartella anzichè solo i fogli attivi
----------------------------------------
AUTORE: 482
DATA :23/05/2016 - 07:20:29
----------------------------------------
sul forum mi visualizza che il VI è per LV2012 ma quando cerco di aprirlo mi dice che è per labview 2014 e quindi non posso aprirlo...
----------------------------------------
AUTORE: 301
DATA :24/05/2016 - 09:39:04
----------------------------------------
la via piu rapida che mi viene in mente (non conoscendo altro) è cambiare programmaticamente lo sheet attivo in excel.
Aris
----------------------------------------
================================================================================
GUI con grafica dinamica
================================================================================
AUTORE: 11127
DATA :24/05/2016 - 13:03:08
----------------------------------------
Ciao a tutti, sono uno studente e mi sto approcciando da poco al mondo labview. per il mio lavoro di tesi devo realizzare una GUI customizzabile in remoto (ad esempio con un foglio excel) che cambi grafica in base ai parametri del controllo remoto. Qualcuno ha esperienza o ha già affrontato questa problematica? sono aperto a qualsiasi tipo di consiglio. Grazie in anticipo a tutti
----------------------------------------
AUTORE: 301
DATA :24/05/2016 - 14:32:03
----------------------------------------
Ciao e benvenuto.
Detta cosi, è un po generica, ed in Labview quello che chiedi non è cosi scontato.
Le prime due risposte che mi vengono in mente sono:
-SubPanels
-XControls
Magari inizia a vederti questi, poi passa a richieste piu puntuali.
Aris
----------------------------------------
AUTORE: 43
DATA :24/05/2016 - 15:12:06
----------------------------------------
[quote="Angels91":3sesct1f]Ciao a tutti, sono uno studente e mi sto approcciando da poco al mondo labview. per il mio lavoro di tesi devo realizzare una GUI customizzabile in remoto (ad esempio con un foglio excel) che cambi grafica in base ai parametri del controllo remoto. Qualcuno ha esperienza o ha già affrontato questa problematica? sono aperto a qualsiasi tipo di consiglio. Grazie in anticipo a tutti[/quote:3sesct1f]
Sì. Ho affrontato queste problematiche ed ho esperienza in merito. Ma è difficile dare suggerimenti se l'obbiettivo non viene delimitato.
C'è stata anche gente (non io) che si è ricostruita un editor tipo "ambiente di sviluppo" di LabVIEW stesso utilizzando il VI scripting. Ale (il Boss di questo Forum) ne sa qualcosa.
Io pricipalmente gioco con la visibilità o meno degli oggetti nei pannelli. Uno o + "Tab Controls" opportunamete gestiti possono fare la differenza in una GUI complessa.
bye
----------------------------------------
AUTORE: 11127
DATA :24/05/2016 - 15:31:58
----------------------------------------
mi spiego meglio (o almeno ci provo
). Ho bisogno di creare una GUI che gestisce 2 o più dispositivi, questi dispositivi possono essere diversi quindi io inserendo il nome di questo dispositivo devo far cambiare l'interfaccia grafica senza modificare nulla. Ho pensato di modificare il tutto con i proprierty node ma essendo tantissime cose da gestire potrebbe essere molto lunga come implementazione. inoltre questa GUI deve avere al suo interno N funzionalità che decido sempre io se attivarle o meno tramite un foglio excel, logicamente ognuna di queste funzionalità ha il suo corrispettivo blocco nel front panel. in pratica creato un sistema chiuso al suo interno posso comandare tutto con un foglio excel, purtroppo non posso dare specifiche maggiori ma è come se volessi creare una GUI che comanda ad es tutti i droni, poi in base alle specifiche del drone che immetto su un foglio excel la GUI deve autoconfigurarsi su quel determinato modello cambiando proprio la grafica del front panel. spero di essermi spiegato un pò meglio.
ps grazie a chi mi ha già risposto.
----------------------------------------
AUTORE: 11127
DATA :24/05/2016 - 17:02:25
----------------------------------------
Potreste linkarmi un sito dove poter studiare bene gli xcontrol? Grazie mille
----------------------------------------
AUTORE: 482
DATA :25/05/2016 - 07:28:46
----------------------------------------
Ipotizzando che le configurazioni possibili siano limitatae, che ne so 5 modelli diversi di dispositivo da pilotare potresti fare ad esempio in 2 modi:
1) Un front panel unico con 5 tab. In ogni tab ci sono tutti i controlli del rispettivo dispositivo che prendono i parametri dal foglio excel. Le linguette del tab possono restare invisibili per non far capire che esistono piu' tab.
2) 5 SubVI differenti. Viene selezionato il subVI interessato in base ad un certo parametro nel file excel.
Sempre dal file excel vengono configurati i vari valori del rispettivo subVI.
Se invece a priori non sai quanti possibili modelli ci sono diventa un po' piu' complesso.
Ti allego un piccolo esempio dei due sistemi che ho elencato.
----------------------------------------
AUTORE: 11127
DATA :27/05/2016 - 07:42:02
----------------------------------------
grazie mille ora vedo i file
----------------------------------------
AUTORE: 11127
DATA :30/05/2016 - 09:13:32
----------------------------------------
percaso avete altre soluzioni?
----------------------------------------
AUTORE: 11106
DATA :03/06/2016 - 17:13:54
----------------------------------------
Userei i subpanel abbinati alla programmazione ad oggetti.
Dovresti creare una classe per ogni dispositivo che vuoi gestire. Ogni classe avrà un metodo (invento) pannello.vi che viene caricato nell'interfaccia principale (usando i subpanel). )Ogni classe andrà a leggersi i dati all'interno del file excel che le servono. Il vantaggio di questo approccio è che aggiungere un nuovo dispositivo non richiedem modifiche al programma principale;
Mi rendo però conto che può risultare complesso per un programmatore non esperto.
----------------------------------------
AUTORE: 3491
DATA :05/06/2016 - 06:06:18
----------------------------------------
[quote="sqrt(-1)":28eg5x7k]Userei i subpanel abbinati alla programmazione ad oggetti.
Dovresti creare una classe per ogni dispositivo che vuoi gestire. Ogni classe avrà un metodo (invento) pannello.vi che viene caricato nell'interfaccia principale (usando i subpanel). )Ogni classe andrà a leggersi i dati all'interno del file excel che le servono. Il vantaggio di questo approccio è che aggiungere un nuovo dispositivo non richiedem modifiche al programma principale;
Mi rendo però conto che può risultare complesso per un programmatore non esperto.[/quote:28eg5x7k]
----------------------------------------
AUTORE: 3491
DATA :05/06/2016 - 06:12:52
----------------------------------------
Penso che la soluzione di sqrt(-1) sia la migliore per due motivi: pulizia del codice e modularità.
Nel mio caso, il cliente mi fa aggiungere un dispositivo ogni due mesi circa e ognuno ha GUI e ciclo di collaudo diverso. Con questa tecnica diventa tutto molto più semplice
Di sicuro si parla di programmazione in po' più avanzata, non perchè è più complicata, ma perchè le basi devono essere solide
Ps. Ovviamente al primo messaggio ho fatto confusione con i quote...
----------------------------------------
================================================================================
Organizzare una stringa dati
================================================================================
AUTORE: 11128
DATA :27/05/2016 - 09:35:39
----------------------------------------
Buongiorno, per un progetto universitario mi sono avvicinato per la prima volta a LabView. Nella prima parte del mio programma sono entrato in collegamento con un ricevitore di interferenza ed ho fatto effettuare una scansione in frequenza al dispositivo che su stringa mi ha fornito una lista di valori ciascuno separato con virgola che rappresentano rispettivamente frequenza, valore e stato dello strumento. A partire da questa stringa devo ora creare un array multidimensionale che abbia per ogni riga tre colonne in cui raggruppo 3 valori dalla lista e poi nella riga successiva ne raggruppi altri 3 e cosi via. Non essendo esperto nell'utilizzo del software non sono sicuro di come realizzare questa funzionalità: la mia idea era quella di realizzare un ciclo while che abbia come loop condition una condizione sulla lunghezza della stringa, ma onestamente non riesco a impostare bene il problema. Qualsiasi suggerimento è ben accetto.
Vi ringrazio anticipatamente
----------------------------------------
AUTORE: 3428
DATA :27/05/2016 - 10:19:49
----------------------------------------
Ciao, ci sono diversi modi per farlo ovviamente, questo è un esempio spero ti sia utile...
----------------------------------------
AUTORE: 11128
DATA :27/05/2016 - 10:59:36
----------------------------------------
Ti ringrazio per la risposta, io nel frattempo avevo implementato un altra soluzione. Sfruttando il fatto che i vari elementi erano separati da una virgola ho usato il blocco "Match pattern function" che mi permetteva discriminando come carattere la virgola di prendere la stringa precedente e successiva. In quel caso ottenevo ad esempio data la seguente stringa 1,2,3,4,5,6,7,8,9 un array cosi costituito:
1 2 3
2 3 4
3 4 5
4 5 6 etc.
quindi ora sorgeva l'esigenza di andare a eliminare a parte la prima riga i primi 2 elementi per ottenere l'array realmente voluto, cioè:
1 2 3
4 5 6
7 8 9
Se potete darmi una mano per questo nuovo problema ve ne sarei grato perchè preferirei proseguire con la soluzione che avevo trovato da solo visto che era più semplice e a livello di un beginner piuttosto che quella che mi avete suggerito e che contiene numerosi blocchi e funzioni che non conosco.
----------------------------------------
AUTORE: 11127
DATA :27/05/2016 - 11:30:49
----------------------------------------
anche io mi sto interfacciando con labview da poco quindi la mia soluzione potrebbe essere errata, comunque nonostante ciò vorrei esprimerti la mia idea: tu hai un array costituito dagli elementi
123
234
345
456
ecc
bene crea un nuovo array che contenga solo gli elementi in posizione 1 4 7 ecc... ad es potresti usare un for dove la i è la lunghezza dell'array che hai creato poi fai un controllo sulla posizione ad es prendi la i del ciclo for e chiedi se (i-1)/3 è un intero, se questa condizione è verificata lo scrivi nel nuovo array.
questo potrebbe essere un modo molto semplice per realizzare quello che vuoi senza stravolgere la tua struttura.
spero di esserti stato utile e di non aver frainteso la tua richiesta.
----------------------------------------
AUTORE: 43
DATA :27/05/2016 - 11:47:31
----------------------------------------
[quote="andrea_94":1xa6ajd4]Ti ringrazio per la risposta, io nel frattempo avevo implementato un altra soluzione. Sfruttando il fatto che i vari elementi erano separati da una virgola ho usato il blocco "Match pattern function" che mi permetteva discriminando come carattere la virgola di prendere la stringa precedente e successiva. In quel caso ottenevo ad esempio data la seguente stringa 1,2,3,4,5,6,7,8,9 un array cosi costituito:
1 2 3
2 3 4
3 4 5
4 5 6 etc.
quindi ora [b:1xa6ajd4][u:1xa6ajd4]sorgeva l'esigenza di andare a eliminare a parte la prima riga i primi 2 elementi per ottenere l'array realmente voluto[/u:1xa6ajd4][/b:1xa6ajd4], cioè:
1 2 3
4 5 6
7 8 9
Se potete darmi una mano per questo nuovo problema ve ne sarei grato perchè preferirei proseguire con la soluzione che avevo trovato da solo visto che era più semplice e a livello di un beginner piuttosto che quella che mi avete suggerito e che contiene numerosi blocchi e funzioni che non conosco.[/quote:1xa6ajd4]
Beh ... Vabbè....
Va bene tutto per carità, ma il masochismo no!!!!
Siccome sbagli a prendere gli elementi da una semplice lista vuoi elimitare gli elementi letti erroneamente.
E' un po' come dire "questa cosa è sbagliata, ma la accetto così com'è. Ci aggiungo, (sopra l'errore), qualcosa che cerca di correggerlo."
non è forse meglio estirpare l'errore alla fonte?
Sforzati di prendere gli elementi nel giusto ordine.
bye
----------------------------------------
AUTORE: 301
DATA :27/05/2016 - 13:14:14
----------------------------------------
vedi se cosi ti può andare.
vediti un po tutte le funzioni stringa ed array, per arrivare al tuo risultato senza strani "magheggi".
Aris
----------------------------------------
================================================================================
Stampare 2D picture control
================================================================================
AUTORE: 482
DATA :31/05/2016 - 15:03:49
----------------------------------------
...ma ciao!
sto avendo un problemino con la stampa di un controllo.
Il controllo è un 2D Picture control.
Io gli faccio visualizzare delle immagini e a volte gliele faccio stampare tramite l'easy vi print panel.
Il poblema sta nel fatto che ho due tipi di immagine, una a 8 bit ma con solo 2 colori (bianco e nero) e un altra che invece è un immagine binaria in bianco e nero.
A display vedo tutte e due le immagini correttamente.
Quando le stampo invece, quella binaria viene stampata con i colori invertiti.
Qualcuno sa come posso evitare questo problema senza dover convertire tutte le immagini?
----------------------------------------
AUTORE: 301
DATA :01/06/2016 - 14:38:26
----------------------------------------
Geppo,
visualizzando la stampa in html, io vedo tutto correttamente.....(Firefox).
Aris
----------------------------------------
AUTORE: 482
DATA :03/06/2016 - 07:21:50
----------------------------------------
Si si il problema è la stampa diretta su stampante, non quella su html. Il pulsante dell'html l'ho lasciato solo perchè non avevo voglia di toglierlo
----------------------------------------
AUTORE: 301
DATA :03/06/2016 - 07:44:14
----------------------------------------
Effettivamente, poi l'ho provato....
Stampando su una stampante PDF, il problema non c'è, un workaround potrebbe essere "salvare" il report e stampare quest'ultimo (non passando per la stampa diretta)
Aris
----------------------------------------
AUTORE: 482
DATA :03/06/2016 - 11:01:36
----------------------------------------
....preferirei non ricorrere a trucchetti, piu' che altro vorrei capire il motivo.
La soluzione adesso l'ho trovata e la allego.
Praticamente vado a verificare la profondità dell'immagine.
Se è 8bit uso il draw flattened image, se è a 1 bit, la "UNFLATTO" e poi uso uso il draw unflattened.
Cosi' funziona, ma non mi è per niente chiaro perchè se l'immagine è visualizzata correttamente anche col flattened, poi quando la stampo me la dovrebbe stampare invertita...
----------------------------------------
================================================================================
peak detector su segnale acquisito continuamente
================================================================================
AUTORE: 129
DATA :16/06/2016 - 14:57:56
----------------------------------------
Ciao a tutti,
Ho una forma d'onda triangolare che acquisisco in un loop continuamente, devo estrarre delle informazioni riguardo ampiezza picco-valle, tempo tra valle precedente e picco e tempo tra picco e valle successiva (il totale è il periodo valle-valle).
Il mio problema è che per farlo facilmente dovrei riuscire a tagliare i valori tra due valli (un periodo ciclo).
Se utilizzo il peak detector sul segnale di uscita, mi da i picchi da una creta soglia in su(peak) o in giu (valley) ma mi dà un insieme di valori (risolvibile parzialmente con il widht), ma soprattutto non riesco a fargli capire quale è la valle prima e successiva ed elaborare le misure.
Ho quasi ottenuto migliori risultati utilizzando un semplice min e max e prendendo i valori solo quando fuori una certa soglia.
Allego il VI se vi venisse qualche ideae voglia, thanx
----------------------------------------
AUTORE: 43
DATA :20/06/2016 - 09:12:37
----------------------------------------
Ciao Nicola,
mi scuso anticipatamente per l'approccio al problema banale e casereccio, ma io partirei con una bella derivata.
Se il segnale non è molto disturbato o frastagliato, nel qual caso applicherei un filtro sw, per ogni cambio di segno della derivata avresti il tuo picco. Picco max se passi da positivo a negativo e picco min da neg a pos. La derivata la otterrei semplicemente con una differenza fra 2 array:
array (a partire da index=1) - array (a partire da index=0)
bye
----------------------------------------
AUTORE: 129
DATA :22/06/2016 - 09:51:08
----------------------------------------
Grazie, mille,
Cavoli arrivi sempre ultimo....mannaggia.
Mitico
----------------------------------------
================================================================================
Leggere versione di una Source Distribution
================================================================================
AUTORE: 11122
DATA :21/06/2016 - 14:41:56
----------------------------------------
Salve a tutti!
Ho inserito nel mio build una Source Distribution.
nelle proprietà ho messo la versione della Source Distribution stessa ma non riesco a leggerla dal Main VI.
come posso fare?
leggo già la versione del build come nell'allegato
grazie!!
----------------------------------------
AUTORE: 482
DATA :04/07/2016 - 09:54:37
----------------------------------------
Non so se puo' fare al caso tuo.
Io quando creo l'eseguibile, gli do il numero di versione.
Solitamente lo lascio spuntato come autoincrementale.
Dopodichè uso il VI che ti allego per verdere il FileVersion.
----------------------------------------
================================================================================
Estrarre l'array dei massimi
================================================================================
AUTORE: 11128
DATA :24/06/2016 - 13:56:50
----------------------------------------
Buonasera, avrei il seguente quesito:tramite labview io ottengo gli array di frequenze scansionate da un EMI receiver e l'array dei rispettivi valori misurati. L'operazione di misura viene ripetuta più volte in condizioni differenti e quindi ottengo vari array di valori misurati. Il mio problema è che non so come far effettuare il confronto tra i vari array dei valori misurati e per ogni frequenza (l'array delle frequenze è comune a tutti gli array di valori misurati) estrarre il valore massimo fra i vari array ottenuti.
Provo a spiegare più semplicemente; questo è ad esempio il mio array di frequenze:
10 20 30 40 50 60 70
Questo è l'array di valori misurati 1:
5 8 9 10 11 20 40
QUesto è l'array 2:
35 38 90 67 78 78 89
Questo è l'array 3:
12 12 23 34 56 77 90
L'array finale che vorrei è che per la frequenza 10 si faccia il paragone fra 5,35 e 12 e si scelga il massimo quindi 35; per la frequenza 20 si faccia il confronto tra 8,38 e 12 e si scelga quindi 38 e così via. Vi ringrazio anticipatamente.
----------------------------------------
AUTORE: 3428
DATA :24/06/2016 - 16:25:27
----------------------------------------
Ciao
se hai già gli array divisi basta fare un semplice index array, magari sfruttando anche un ciclo for.
Ovviamente tutti e 4 gli array devono avere lo stesso numero di elementi all'interno altrimenti il ciclo farà iterazioni fino alla lunghezza dell'array più piccolo.
Ti allego un esempio
ciao
----------------------------------------
AUTORE: 129
DATA :05/07/2016 - 19:39:12
----------------------------------------
Io lo farei così
----------------------------------------
================================================================================
Rotazione valori dentro a ARRAY 2D
================================================================================
AUTORE: 11130
DATA :29/06/2016 - 07:52:21
----------------------------------------
Buongiorno a tutti,
mi chiamo Nicola e premetto che sono un programmatore LabView della domenica mattina
Ho un problema che non riesco a risolvere:
dunque praticamente io leggo un file CSV che mi viene passato da un sensore di visione e il file è cosi composto, 1600 righe x 1000 colonne e lo visualizza su un grafico 3D SURFACE per "vedere" quello che ha letto il sensore e effettivamente ecco che mi appare il mio pezzo sul grafico.....finqui tutto bene.....il problema è che il sensore , per come è meccanicamente montato, mi legge il pezzo da "sdraiato" e invece a me serve visualizzato in piedi perche devo fare dei calcoli stratificando il pezzo in salita sull'asse della Z
Quindi la mia domanda è: come faccio ad invertire gli assi X e Z per poter "girare" il pezzo??
Grazie a tutti in anticipo
Nicola
----------------------------------------
AUTORE: 43
DATA :29/06/2016 - 09:33:01
----------------------------------------
[quote="nicola.grossi":1xwqmxn0]Buongiorno a tutti,
mi chiamo Nicola e premetto che sono un programmatore LabView della domenica mattina
Ho un problema che non riesco a risolvere:
dunque praticamente io leggo un file CSV che mi viene passato da un sensore di visione e il file è cosi composto, 1600 righe x 1000 colonne e lo visualizza su un grafico 3D SURFACE per "vedere" quello che ha letto il sensore e effettivamente ecco che mi appare il mio pezzo sul grafico.....finqui tutto bene.....il problema è che il sensore , per come è meccanicamente montato, mi legge il pezzo da "sdraiato" e invece a me serve visualizzato in piedi perche devo fare dei calcoli stratificando il pezzo in salita sull'asse della Z
Quindi la mia domanda è: come faccio ad invertire gli assi X e Z per poter "girare" il pezzo??
Grazie a tutti in anticipo
Nicola[/quote:1xwqmxn0]
Ciao.
Se non ho capito male, penso che il tuo problema non sia poi così banale...
Fare una "trasposizione" 3D della matrice non è possibile dato che X e Y sono coordinate di una griglia, mentre Z sono valori (quote) misurati dal sensore.
Mi verrebbe da dire che devi girare il sensore, ma la proiezione del pezzo sul piano XZ probabilmente sarebbe insufficiente per la "stratificazione" che vuoi fare...
Serve un SW non banale che ricavi il modello 3D del pezzo dalla misura del sensore o dalla composizione di + misure del sensore.
Penso che con un modello del pezzo 3D completo sarebbe possibile ricostruirlo dandolo in pasto (il modello 3D) alla strumento (stampante 3D?) per la stratificazione.
bye
----------------------------------------
AUTORE: 11130
DATA :29/06/2016 - 10:53:43
----------------------------------------
Beh in realta buona parte del lavoro l'ho gia fatta con Labview...
L'acquisizione della nuvola di punti dai sensori.......fatta
Creazione matrice di punti per il 3D del mio oggetto.....fatto
Calcoli integrali del area sottesa per stratificazione del pezzo.....fatto
l'unico scoglio che mi rimane è "girare" il pezzo...
Ah...purtroppo non posso girare i sensori perche devono tassativamente leggere il pezzo da "sdraiati" lateralmente
----------------------------------------
AUTORE: 11106
DATA :01/07/2016 - 08:30:34
----------------------------------------
Ciao,
non sono sicuro di aver capito bene. Comunque guarda se il file che ti allego può aiutarti.
Viene indicizzato l'array 3D rispetto alle colonne e poi trasposto così da invertire le pagine con righe. Tieni conto che la trasposizione è un'operazione molto dispendiosa.
----------------------------------------
================================================================================
Spettro digitale, numero campioni
================================================================================
AUTORE: 11132
DATA :02/07/2016 - 20:11:26
----------------------------------------
Salve a tutti ragazzi, sono nuovo e ho bisogno del vostro aiuto.
Sto realizzando un analizzatore di spettro digitale (si tratta di un esercizio per l'università).
Nell'esercizio si chiede di finestrare un segnale e successivamente calcolarne la FFT, dopodichè prendere solo la metà dei campioni per l'analizzatore di spettro.
Per quanto riguarda il segnale di ingresso, nella guida si chiede di aggiungere innanzitutto il blocco "Get Waveform Components" da Functions>>Waveform>> e poi crearne automaticamente il controllo tramite il comando Create>>Control. In questo modo mi compare una forma d'onda con una serie di attributi:.
[img:j5pgxdby]https://s32.postimg.org/ilor07fyt/waveform.png[/img:j5pgxdby]
Tuttavia mi serve il numero dei campioni e la frequenza per procedere, e non so da dove prenderli visto che si tratta di una waveform "generica"...ho provato a svolgere lo stesso esercizio con in ingresso un Sine Pattern e non ho avuto nessun tipo di problema proprio perchè il blocco ha tutti i vari controlli tra cui anche i campioni e la frequenza. Sicuramente mi sfugge qualcosa... Potreste per favore darmi una mano?
Grazie mille in anticipo
----------------------------------------
AUTORE: 301
DATA :04/07/2016 - 08:17:30
----------------------------------------
Giorno!
A direi il vero, nel tuo controllo/indicatore waveform, sono gia contenuti questi dati.
t0 è l'istante a cui parte la forma d'onda.
dt è il tempo che intercorre tra un campione ed il successivo.
y è l'array dei dati che compongono il segnale.
Per sapere da quanti punti è formata,estrai l'array "y" e tra le funzioni sugli array trovi "array size".
Spero di aver risposto ai tuoi dubbi.
Aris
----------------------------------------
AUTORE: 11132
DATA :06/07/2016 - 18:20:59
----------------------------------------
Alla fine, guardando un po' meglio, ci ero arrivato (era una cosa abbastanza banale, lo ammetto), ma ad ogni modo grazie mille per aver risposto e per avermi dato questa conferma!
Ciao
----------------------------------------
================================================================================
Ottenere gli array che hanno generato un diagramma!
================================================================================
AUTORE: 11128
DATA :08/07/2016 - 10:44:23
----------------------------------------
Durante delle misure svolte all'università, non avendo tenuto aperto il sottoprogramma che mi forniva l'array di frequenze e valori che restituiva nel main un diagramma, ora ho solo quest'ultimo a partire dal quale vorrei ricavare gli array di valori che lo hanno determinato. Esiste un modo?
----------------------------------------
AUTORE: 11106
DATA :08/07/2016 - 11:53:29
----------------------------------------
Scusami ma la domanda non è molto chiara.
Puoi essere più specifico?
----------------------------------------
================================================================================
Labview ad oggetti
================================================================================
AUTORE: 955
DATA :08/07/2016 - 11:04:19
----------------------------------------
Ciao,
stavo cercando una guida per iniziare a capire come funziona Labview ad oggetti.
Mi potete consigliare qualche cosa di chiaro e semplice per un principiante?
Grazie
----------------------------------------
AUTORE: 11106
DATA :08/07/2016 - 11:51:36
----------------------------------------
Ciao,
effettivamente non c'è moltissimo materiale in rete.
Potresti cominciare da qui:
[url:23po2g1j]http://www.ni.com/webcast/1513/en/[/url:23po2g1j]
[url:23po2g1j]http://www.ni.com/webcast/1718/en/[/url:23po2g1j]
----------------------------------------
AUTORE: 955
DATA :08/07/2016 - 15:32:30
----------------------------------------
Ciao! ti ringrazio! inizio da qui. nel caso aveste altro è ben accetto
----------------------------------------
AUTORE: 11106
DATA :10/08/2016 - 07:42:12
----------------------------------------
Anche qui puoi trovare alcuni link utili
[url:1gxmhda9]https://decibel.ni.com/content/docs/DOC-38455[/url:1gxmhda9]
----------------------------------------
================================================================================
Labview: TARGETDIR IS UNDEFINED
================================================================================
AUTORE: 11134
DATA :11/07/2016 - 16:37:55
----------------------------------------
Buon pomeriggio,
sono nuova del forum e spero potrete aiutarmi.
Premetto che sto lavorando su un pc con Windows 7 Service Pack1 e devo installare un applicativo su un pc con lo stesso sistema operativo, l'unica differenza è il processore.
Premetto inoltre che sto usando Labview 2015 32 bit.
Premetto anche il pc su cui mi serve installato l'applicativo non ha quasi nulla installato ad eccezione di driver legati al pc Dell e legati al processore Intel.
Ho creato tramite l'application builder di Labview un programma da installare su altri computer sprovvisti di Labview.
Il tutto ha funzionato ad eccezione di un solo PC riportandomi come errore in fase di installazione:[b:1oqsvqfo]
Targetdir is undefined, the Directory table seems to be malformed. Aborting...[/b:1oqsvqfo]
Premetto che ho già guardato i forum ma non sono ancora riuscita a risolverlo.
Vi faccio un elenco dei miei tentativi:
-http://digital.ni.com/public.nsf/allkb/24E09BDC314EB93A8625758D004ECBC6 provato e non mi risolve niente neanche dopo averlo riavviato;
-ho provato a fare una scansione di C per verificare la presenza di eventuale file corrotti ma non sono stati trovati errori;
-ho provato a creare una directory apposita di modo da essere sicura che ci fosse la cartella e che non la dovesse ricreare lui ma dava comunque il solito errore;
-ho provato a creare anche altri file di progetto ed altri applicativi per verificare che il problema non fosse dovuto a qualche file corrotto durante la creazione dell'applicativo.
-ho verificato che sono l'amministratore del pc.
Qualcuno ha qualche suggerimento da darmi?
E' possibile che ci sia qualche aggiornamento che mi manca sul pc?
Resto in attesa di qualche consiglio.
Grazie mille.
----------------------------------------
AUTORE: 482
DATA :12/07/2016 - 07:48:59
----------------------------------------
Hai provato anche questa?
http://forums.ni.com/t5/Measurement-Stu ... d-p/781363
----------------------------------------
AUTORE: 11134
DATA :12/07/2016 - 09:05:12
----------------------------------------
Grazie per avermi risposto
Mi manca solo da provare con la partizione del disco creando una Virtual Machine.
Prima di questo volevo però avere altre eventuali opzioni.
Sul pc in cui non mi parte l'installazione non ho neanche driver della NI installati, cosa potrebbe mai essere che gli impedisce di installare?
Grazie e buona giornata
----------------------------------------
AUTORE: 43
DATA :13/07/2016 - 08:52:42
----------------------------------------
Ciao.
Sparo la mia cartuccia a salve, dato che è difficile trovare una soluzione razionale.
anche se amministratore, io eseguirei la applicazione di installazione comunque con l'opzione "Run as Administrator"
bye
----------------------------------------
================================================================================
Channel wires..questi sconosciuti
================================================================================
AUTORE: 482
DATA :12/08/2016 - 07:28:21
----------------------------------------
...ma ciao!
sono appena venuto a conoscenza dell'esistenza in labview 2016 dei channel wires.
Non ho ancora installato LV2016 quindi non posso provarli, potrebbe essere una cosa interessante, ma cosi' dai video e immagini che ho trovato in giro mi sembra che rompano un po' il concetto di dataflow classico o quantomeno lo rendano meno istantaneo perchè creano un eccezione.
In pratica ora si possono far passare dei fili da un ciclo while all'altro senza creare consequenzialità.
Graficamente si distinguono, oltre che pe ril colore, dal fatto che in ingresso e uscita dal ciclo, non creano nessun tipo di tunnel.
Qualcuno di voi li ha provati o ha avuto modo di utilizzarli? come funzionano? Come vi sembrano?
----------------------------------------
AUTORE: 645
DATA :16/08/2016 - 14:45:34
----------------------------------------
Ne avevo sentito parlare in un video di presentazione.
Qui c'è qualche info: http://zone.ni.com/reference/en-XX/help ... res_intro/
Ma secondo voi per applicazioni che girano su pc senza esigenze di Real Time, quali differenze importanti ci sono tra Shared Variables e altri sistemi di passaggio dati? Se non sbaglio anche le Shared Variables non sono bloccanti tra cicli diversi... Giusto? Io in realtà ho sviluppato poche volte applicazioni con Code e altri sistemi per passare informazioni tra cicli.
In più le Shared Variables sono comode per essere lette da altri software, per esempio legati al mondo PLC.
E i Timed Loop quando diventano necessari?
Ho appena trovato anche questo link: http://digital.ni.com/public.nsf/allkb/ ... 6D00711AAE
Ho provato a confrontare tre soluzioni: filo semplice, Channel Wires, Shared Variables.
----------------------------------------
AUTORE: 129
DATA :18/08/2016 - 15:13:39
----------------------------------------
Io non ne vedo un vantaggio, anzi ho paura che si crei ancora più confusione.
Tra local,glabal,FGV,notifier,queue,shared,rt-fifo ecc.
Però non sono molto documentato aspetto di sapere se hanno effettivamente delle performance da renderli validi al posto di chessò una FGV o una Global o una shared...
----------------------------------------
AUTORE: 645
DATA :18/08/2016 - 15:32:40
----------------------------------------
A livello di prestazioni spinte non so, io per ora mi sono fatto questa idea: se devo passare informazioni tra cicli in un VI i Channel Wires sono comodi, se ho bisogno di comunicazione tra dispositivi o software diversi uso le Shared Variabile.
----------------------------------------
================================================================================
Come si apre un rtexe in linux real time?
================================================================================
AUTORE: 129
DATA :18/08/2016 - 15:23:12
----------------------------------------
Ciao a tutti, sto facendo un lavoro su una 9035 in cui è stato richiesto di sfruttare l'interfaccia utente embedded.
Creo l' startup.rtexe e all'accensione tutto parte e tutto bene (quasi). lo chiudo e mi rimane il mio bel desktop linux.
Qualcuno sa con quale e dove trovarla applicazione lanciare direttamente dal SO LinuxRT l'applicazione rtexe?
Ovviamente il doppio click non funziona:-)
Ipotizzavo esistesse chessò un runtime da associare al file in modo che venisse aperto anche dopo una chiusura.
Avete anche dei riferimenti per imparare un pò meglio il Linux RT per i cRIO?
Grazie a tutti, Nicola
----------------------------------------
================================================================================
Filtro ricerca su array stringhe
================================================================================
AUTORE: 3428
DATA :19/08/2016 - 15:21:16
----------------------------------------
Ciao ragazzi,
mi servirebbe un filtro che mi permetta di cercare, in un array di stringhe, qualsiasi cosa faccia al caso mio.
Mi spiego.
Questo è l'array di esempio:
1401-11501-22-521
1231-91567-11-401
1401-11581-19-521
1401-11661-18-201
2401-56581-17-523
La sintassi è sempre questa, cambiano i numeri
Attualmente riesco facilmente a cercare in base al filtro che metto (utilizzando il search & replace string) se ad esempio la stringa 1401-71 è in qualche elemento dell'array. Facile, veloce.
Esiste qualche metodo o vi che mi permetta di cercare come parametro di filtro questo:
1401-?????-??-521
che mi restituisca il match per il primo e per il terzo elemento?
Oppure anche qualcosa come
14??-1????-??-??1
che mi restituisce il primo il terzo e quarto elemento?
Un pò come funziona il pattern del list folder dove posso dare *????-??-?? dove ad esempio nella cartella ho molte cartelle divise per data 2016-08-19, 2015-01-08...
Grazie
----------------------------------------
AUTORE: 43
DATA :25/08/2016 - 15:59:15
----------------------------------------
Match Pattern
questa è la funzione che fa per te.
guardati la sintassi
Al posto di "?" devi usare ".". Nel caso tu voglia cercare il punto dovrai mettere "\."
Per verificare se il match c'è stato basta verificare che "offset past match" sia >= 0 ( < 0 no match )
oppure devi verificare che "match substring" non sia vuota.
Ovviamente devi ripetere la Match Pattern in un loop.
bye
----------------------------------------
================================================================================
Estrapolazione dati da file TXT
================================================================================
AUTORE: 11139
DATA :25/08/2016 - 09:48:53
----------------------------------------
Buongiorno a tutti! Sono nuovo su questo forum e vi ringrazio in anticipo perchè è davvero un bel servizio ed è molto utile.
Spiego il mio problema, su un file di testo genero le seguenti stringhe
T1 1 00000010 00000001 OutIn t1
Ters 1 00110000 00000011 OutIn t2
Ogni riga è separate da un CR e LF finale e tra ogni dato c'è un TAB
Vorrei riuscire a estrapolare questi dati correttamente, in modo da gestirli a gruppi nel ordine contenuto in quel file
Spero di essermi spiegato
Attualmente riesco a estrapolare solo I valori numerici nelle corrette posizioni... nel caso posso allegare foto e schemi
grazie mille
----------------------------------------
AUTORE: 11139
DATA :25/08/2016 - 13:07:09
----------------------------------------
Risolto
----------------------------------------
================================================================================
Libnodave su Siemens S7 1500
================================================================================
AUTORE: 3428
DATA :25/08/2016 - 16:05:43
----------------------------------------
Ciao ragazzi,
sapete se con il PLC siemens S7 1500 la libnodave funziona?
Ovviamente con labview.
----------------------------------------
AUTORE: 43
DATA :25/08/2016 - 16:12:16
----------------------------------------
Non lo so.
Molti, molti anni fa avevo interfacciato labview ad una scheda profibus tramite la dll siemens per comunicare con un S5.
bye
----------------------------------------
AUTORE: 3428
DATA :25/08/2016 - 16:17:46
----------------------------------------
Con il 300 funziona ma con il 1500 sembra proprio di no...
----------------------------------------
AUTORE: 43
DATA :25/08/2016 - 16:22:12
----------------------------------------
certo
nella pagina
http://libnodave.sourceforge.net/
appare:
Supported PLCs: S7-200, 300, 400
bye
----------------------------------------
AUTORE: 3428
DATA :26/08/2016 - 07:45:25
----------------------------------------
RISOLTO:
posto la soluzione.
Il 1500 è l'unico PLC a cui bisogna aggiungere delle parametrizzazioni lato PLC a differenza dei 200-300...
Bisogna togliere la spunta dal TIA Portal a "Ottimizza accesso blocchi" dalle proprietà delle DB, bisogna mettere sotto "Protezione" della CPU il livello di accesso "Full access" e poco sotto mettere la spunta su "Connection mechanism" su "Permit access with PUT/GET..."
Allora dopo funziona la libnodave.
Grazie
----------------------------------------
================================================================================
Ricerca ZONE in un ARRAY 1D
================================================================================
AUTORE: 11130
DATA :29/08/2016 - 08:35:09
----------------------------------------
[img]C:\ValoriD.jpg[/img]
Ciao a tutti,
avrei bisogno di un aiuto per estrapolare da questo grafico il punto nel asse X in cui iniziano e finiscono questi disturbi.....ad esempio il primo inizia a 100 e finisce a 350
Grazie a tutti
----------------------------------------
AUTORE: 11130
DATA :29/08/2016 - 08:39:46
----------------------------------------
Ecco scusate non mi ha allegato l'immagine.......
----------------------------------------
AUTORE: 43
DATA :29/08/2016 - 09:23:19
----------------------------------------
Io userei l'approccio + semplice, come stabilire una soglia, tipo trigger di uno oscilloscopio.
Se il valore è fuori range di un intorno di 0 allora hai trovato l'inizio del disturbo.
Per renderlo + robusto, ma + complicato, si può considerare valido un inizio disturbo solo se ci sono 2 valori consecutivi fuori soglia e un valido fine disturbo solo se ci sono 2 valori consecutivi entro la soglia
Visto che il disturbo è centrato sullo zero puoi usare il valore assoluto (abs)ed un unico valore di soglia anzichè un range
bye
----------------------------------------
AUTORE: 11130
DATA :29/08/2016 - 09:39:52
----------------------------------------
[quote="paracarro":36zo62sv]Io userei l'approccio + semplice, come stabilire una soglia, tipo trigger di uno oscilloscopio.
Se il valore è fuori range di un intorno di 0 allora hai trovato l'inizio del disturbo.
Per renderlo + robusto, ma + complicato, si può considerare valido un inizio disturbo solo se ci sono 2 valori consecutivi fuori soglia e un valido fine disturbo solo se ci sono 2 valori consecutivi entro la soglia
Visto che il disturbo è centrato sullo zero puoi usare il valore assoluto (abs)ed un unico valore di soglia anzichè un range
bye[/quote:36zo62sv]
Grazie intanto Paracarro per la risposta.........
si sicuramente utilizzerei il metodo piu semplice con la ricerca di un valore in assoluto fuori da un range/soglia.......ecco quello che mi manca è proprio la parte software per determinare il punto iniziale/finale del disturbo.....
----------------------------------------
AUTORE: 43
DATA :29/08/2016 - 11:09:19
----------------------------------------
oggi sono in buona...
[attachment=0:qrbufwfd]SearchDisturb.vi[/attachment:qrbufwfd]
fatto e testato
bye
----------------------------------------
AUTORE: 11130
DATA :05/09/2016 - 07:13:03
----------------------------------------
[quote="paracarro":2adtrg0h]oggi sono in buona...
[attachment=0:2adtrg0h]SearchDisturb.vi[/attachment:2adtrg0h]
fatto e testato
bye[/quote:2adtrg0h]
Ciao Paracarro,
grazie mille del VI....mi è stato utilissimo e l'ho gia integrato nel mio progetto di analisi
grazie ancora
saluti
nicola
----------------------------------------
================================================================================
Integrazione SW C# in Labview
================================================================================
AUTORE: 10888
DATA :13/09/2016 - 08:28:58
----------------------------------------
Buongiorno,
premetto che sono un "beginner", mi scuso quindi per la domanda se a qualcuno sembrera' banale o mal posta
Ho un problema con un sw di monitoraggio per PC. Questo software ha una architettura client (sul target) e server (su PC) e comunica con il dispositivo target via seriale (RS232, ma non e' questo il problema).
Cosa fa questo software di monitoraggio? Manda interrogazioni al target e legge le risposte, banalmente.
La parte server (su PC) e' scritta in #C
Vorrei integrare questo server all'interno dell'ambiente NI (veristand) per potere sfruttare le potenzialita' di automazione dei test di testend.
Se dovessi fare acquisizione su un PXI so gia' che in framework di PXI RT non supporta .NET, quindi il discorso e' chiuso.
Ma se dovessi fare girare questa parte si in ambiente NI ma sul PC che si interfaccia con il PXI ?
Mi spiego. Il dato verrebbe acquisito da Seriale su PC (magari via USB converter, so gia' che la cosa funziona) quindi non avrei a che fare con PXI RT.
A questo punto prenderei i sorgenti del mio tool, estraggo le parti che mi servono, genero una DLL compatibile con WIN7 usando VS, integro questa DLL nella parte NI su PC.
Doovrei fare un "wrapper" dei miei sorgenti al fine di ottenere una DLL in grado pubblicare le risposte verso NI
E' fattibile? Sono sulla strada giusta
Grazie per i contributi.
R
----------------------------------------
AUTORE: 11106
DATA :13/09/2016 - 09:42:45
----------------------------------------
Se non ho capito male, tu vuoi fare questo:
- creare una DLL contenente i metodi e funzioni del programma fatto in C#
- creare una serie di VI wrapper che chiamano le funzioni/metodi della DLL. Insomma creare una API.
- Richiamare le funzioni di questa API per comunicare con il client.
Io direi sì: sei sulla strada giusta.
----------------------------------------
AUTORE: 10888
DATA :13/09/2016 - 09:44:53
----------------------------------------
Grazie,
hai capito benissimo
----------------------------------------
================================================================================
Calcolo del SNR
================================================================================
AUTORE: 11132
DATA :14/09/2016 - 23:06:56
----------------------------------------
Salve a tutti, ho bisogno di qualche dritta riguardo la realizzazione di un VI in cui, partendo da un segnale periodico a cui è stato sovrapposto del rumore, calcoli il SNR tramite misure nel dominio della frequenza.
Premetto che dispongo delle due forme d'onda (il segnale ed il rumore) separatamente (le ho addizionate per creare il segnale rumoroso).
Pensavo di calcolare gli spettri rispettivamente del segnale originario e di quello rumoroso, e successivamente le densità spettrali di potenza, infine le due potenze eseguendo la sommatoria su tutti i campioni. Infine pensavo di ottenere la potenza di rumore per differenza e calcolare il rapporto per avere il SNR.
E' un procedimento corretto?
Scusate la domanda forse banale, ma ho qualche dubbio! Grazie in anticipo
----------------------------------------
================================================================================
Comunicazione Labview SQL
================================================================================
AUTORE: 11020
DATA :22/09/2016 - 08:59:43
----------------------------------------
Qualcuno di voi ha conoscenze di SQL?!
Io non ne so assolutamente niente e dovrei cercare di comunicare tra LW ed SQL ma non ci salto fuori.
A disposizione ho anche il connectivity Toolkit.
Ho provato anche utilizzando ODBC, ma non mi trova la connessione.
Mi da il seguente messaggio
can't connect to MySql server on localhost (10061)
Tempo fa funzionava, poi ho disinstallato sql e reinstallato. Non va più niente.
Credo il problema sia con SQL non sapendo minimamente come usarlo.
----------------------------------------
AUTORE: 129
DATA :22/09/2016 - 09:39:26
----------------------------------------
Intanto se lavori su MySql devi installare il driver odbc e utilizzare l'odbc del 32 bit (cartella wowsys se non sbaglio).
Però per my sql potresti andare direttamente su TCP/IP vedi qui https://decibel.ni.com/content/docs/DOC-10453
forse fai meglio.
----------------------------------------
AUTORE: 11020
DATA :22/09/2016 - 09:51:49
----------------------------------------
Intanto grazie per la risposta. Negli esempi che mi hai dato, alla voce user e password cosa devo inserire?!
Io quando mi connetto a mysql non immetto mai niente. Lascio la voce Windows authentication
Usando ODBC, quando primo la voce failed mi da errore di connessione.
Grazie mille
Giovanni
----------------------------------------
AUTORE: 11020
DATA :22/09/2016 - 10:34:04
----------------------------------------
Qua è presente il mio codice in LW.
Continua a darmi l'errore -2147467259
----------------------------------------
AUTORE: 645
DATA :22/09/2016 - 19:47:18
----------------------------------------
Cercando ho trovato:
"(10061) indicates that the network connection has been refused. You should check that there is a MySQL server running, that it has network connections enabled, and that the network port you specified is the one configured on the server"
Scusa la domanda banale, hai controllato la corretta esecuzione del server a bordo del pc sul quale stai lavorando?
Inoltre se come accesso utilizzi i dati di accesso di Windows lo user con cui lavori deve avere i privilegi di amministratore.
Guarda http://www.ni.com/pdf/manuals/371525a.pdf
Un po' di tempo fa avevo scritto una piccola guida sull'utilizzo dei database: viewtopic.php?f=34&t=1623
magari può esserti utile.
----------------------------------------
AUTORE: 11106
DATA :23/09/2016 - 12:13:48
----------------------------------------
Scusate se mi inserisco nella conversazione, ma voi non usate la libreria Database Connectivity Toolkit per gestire i database?
----------------------------------------
AUTORE: 129
DATA :29/09/2016 - 09:06:28
----------------------------------------
Io adesso utilizzo il connectivity toolkit per database odbc, per my sql preferisco il metodo tcp-ip proposto sopra.
Per quanto riguarda l'errore, secondo me devi verificare sul tuo mysql le credenziali di accesso e configurarle alla pari in odbc (quando crei una connessione odbc puoi fare il test direttamente da li).
Ti consiglio il metodo del tcp/ip per my sql, più leggero e diretto senza passare da odbc.
Ciao
----------------------------------------
================================================================================
Come capire dalla legenda quale grafico è selezionato.
================================================================================
AUTORE: 11020
DATA :06/10/2016 - 08:26:40
----------------------------------------
Ciao a tutti,
è possibile capire dalla legenda di un waveform graph quale grafico è stato selezionato?!
Quando io, dalla legenda, seleziono oppure spunto un grafico quest'ultimo compare o scompare dal mio waveformgraph.
è presente un property node che mi dice quali voci della legenda sono state selezionate?!
Grazie mille
Un saluto
Giovanni
----------------------------------------
AUTORE: 11106
DATA :06/10/2016 - 09:04:23
----------------------------------------
Ciao Giovanni,
devi selezionare il plot (Active plot) e leggere la proprietà Visible.
Ti allego un esempio (LV2014).
----------------------------------------
================================================================================
Come estrapolare valori da cursore multi-plot
================================================================================
AUTORE: 11020
DATA :06/10/2016 - 17:32:16
----------------------------------------
Un saluto a tutti.
Ho un waveformgraph all'interno del quale ho un numero variabili di grafici. A ciascuno di questi è associato un nome.
Per poter fare delle analisi su questi grafici ho aggiunto un cursore di tipo multiplot, in questo modo ad un valore di x corrispondono tanti valori di y.
Vorrei prendere i valori x-y che mi mostra il cursore e utilizzarli all'interno del mio sw. Sembrava un lavoro facile, ma in realtà è una cosa tremenda. O, per lo meno, mi sono rovinato la vita e non riesco a farlo.
Mi ripeto: da un cursor multiplot, vorrei estrapolare i diversi valori di coppie x-y. è possibile?! Ho perso una giornata lavorativa per farlo senza saltarci fuori.
Un saluto e grazie
Giovanni
----------------------------------------
AUTORE: 301
DATA :07/10/2016 - 07:40:30
----------------------------------------
Se non ho capito male, ti serve usare semplicemente le proprietà:
Cursor.plot >> ti restituisce il plot su cui sei ancorato al momento
Cursor.Posx >> ti da il valore X del plot su cui sei puntato
Cursor.PosY >> ti da il vaore Y del plot su cui sei puntato
Aris
----------------------------------------
AUTORE: 11020
DATA :07/10/2016 - 07:49:05
----------------------------------------
è quello che ho fatto.
Ho creato un mini esempietto messo in allegato,
però non funziona. è un giorno che ci smanetto.
----------------------------------------
AUTORE: 11020
DATA :07/10/2016 - 07:51:12
----------------------------------------
[quote="Gio88":qb9lbg4e]è quello che ho fatto.
Ho creato un mini esempietto messo in allegato,
però non funziona. è un giorno che ci smanetto.[/quote:qb9lbg4e]
La prima volta che lo lancio funziona, la seconda volta no, la terza volta si, la quarta volta no...
Mettendo il tutto all'interno di un ciclo for per ottenere un array con le varie coppie x y del cursore non funziona...
----------------------------------------
AUTORE: 301
DATA :07/10/2016 - 08:44:03
----------------------------------------
Te lo concedo.....non è semplice.
la maniera piu rapida e sicura che ho trovato è questa.
Aris
----------------------------------------
AUTORE: 482
DATA :07/10/2016 - 09:38:30
----------------------------------------
Io l'ho fatto in questo modo.
Credo ci sia un baco da qualche parte perchè se non metto la sequence ho un comportamento anomalo.
Ovviamente puoi usare direttamente i property node.
Nell'esempio c'e' la reference perchè quando salvi uno snippet te lo trasforma cosi'.
----------------------------------------
AUTORE: 301
DATA :07/10/2016 - 09:41:11
----------------------------------------
esatto, penso sia dovuto alla velocità di aggiornamento del graph.
Se richiami delle proprietà/metodi del cursore prima che il grafico venga "scritto", si hanno dei problemi.
Ad ogni modo, up to you.
Aris
----------------------------------------
AUTORE: 482
DATA :07/10/2016 - 10:42:49
----------------------------------------
Il problema l'ho avuto anche a grafico già scritto, quindi senza aggiornare i valori.
E' come se ci mettesse del tempo nell'esecuzione del property cursor.plot.
----------------------------------------
================================================================================
Costruzione Tensiometro per Cinghie Distribuzione
================================================================================
AUTORE: 11143
DATA :07/10/2016 - 17:55:35
----------------------------------------
Ciao a tutti, sono nuovo del forum e del mondo di Labview. Sono uno studente universitario e ovviamente il prof dopo averci spiegato labview in 10 ore totali più o meno, la maggior parte delle quali perse a cercare di risolvere esercizi semplici come max vettore e cose cosi, c'ha assegnato l'arduo compito di presentare un progetto, in LabView, a nostra scelta per essere ammessi all'esame. Ora la base del progetto è comune. c'è stata assegnata dallo stesso professore. La base è la seguente: Acquisire un segnale audio tramite scheda audio del pc, processarlo attraverso una stackedSequenceStructure dataci dal professore (modificabile a nostro piacimento per implementare le nostre idee) e ovviamente modellarlo e ricavarne qualche tipo di applicazione.
La mia idea era quella di costruire una sorta di tensiometro per la verifica della corretta tensione delle cinghie di distribuzione. Volevo chiederVi aiuto riguardo alcuni passaggi del mio progetto che vorrei applicare. Il segnale audio in ingresso viene suddiviso in due segnali distinti (1 per ogni canale della scheda di acquisizione), vengono estrapolati dai 2 segnali le informazioni relative all'ampiezza e al tempo. Dopo vari passaggi, i 2 segnali vengono ricomposti e trasformati attraverso una fft la cui uscita è collegata ad un waveform graph. Ora la mia idea era quella di prelevare da tastiera la frequenza di riferimento della cinghia da verificare e confrontarla con la frequenza significativa della cinghia montata pizzicata con le dita o con l'aiuto di un pletto o utensile. Dato che la frequenza di riferimento vorrei farla comparire nel waveform graph come un'unica linea di colore diverso rispetto al segnale audio dovuto al pizzicamento della cinghia, avevo pensato di aggiungere al segnale una sinusoide con frequenza pari a quella di riferimento, cosi una volta fatta la FFT sarebbe appunto comparsa nel grafico sotto forma di linea di riferimento. Secondo voi è corretto fare ciò, esiste forse un modo più semplice per creare questa sorta di riferimento corrispondente al valore ideale di frequenza caratteristico di ogni cinghia?
Inoltre il segnale audio vorrei farlo prima passare attraverso un filtro passa basso, per eliminare tutte le frequenze al di sopra dei 1000 Hz, poichè le cinghie di trasmissione hanno una frequenza che varia da poche decine di Hz a max 600 Hz nelle applicazioni più comuni. Dopodichè estrapolare dal segnale filtrato solo la componente più significativa del segnale stesso, da confrontare poi con quella di riferimento. Ecco questo passaggio come può essere effettuato? Io pensavo di applicare al segnale filtrato un'altra fft, e da questa ricavarmi la frequenza più significativa scomponendo il cluster in uscita da FFT tramite un Unbundle, che mi restituisce Magnitudo e Df della trasformata di Fourier. Dalla magnitudo, attraverso un max&min Array estrapolare l'ampiezza maggiore, moltiplicarla per il df per avere la frequenza più significativa. Corretto? Questa diciamo la prima parte del mio progetto che sto cercando di buttare su prima in via teorica, e poi costruirmi il VI. Se ho detto delle castronerie, vogliate scusarmi in partenza.
----------------------------------------
AUTORE: 11106
DATA :10/10/2016 - 08:33:20
----------------------------------------
Ciao,
per quanto riguarda la riga spettrale di riferimento, non aggiungerei una sinusoide teorica dalla quale calcolare l'FFT. Questo perchè l'FFT viene calcolata su una finestra (Hamming per esempio) e ciò inserisce inevitabilmente delle distorsioni (più o meno apprezzabili) sull'FFT finale. Secondo me la cosa più semplice e veloce è costruirti un array con tutti 0 e un valore diverso da zero in corrispondenza della frequenza di riferimento.
Per quanto riguardo il filtro, tu hai detto che il fenomento è limitato a circa 600 Hz. Perchè per il filtro non usi una una frequenza di taglio fissa?
----------------------------------------
AUTORE: 43
DATA :10/10/2016 - 10:56:48
----------------------------------------
ciao a tutti.
Scusate la banalità del mio intervento.
Volevo solo dire che per prima cosa salverei su file acquisizioni vere fatte campionando cinghie + o - tensionate.
Richiamando questi salvataggi, sarà possibile giocare con essi per estrapolare ciò che serve, cercando la formula migliore + semplice o +accurata che si voglia implementare.
Tutto questo xkè non mi sembra che nel testo si parli di salvataggio di dati.
bye
----------------------------------------
AUTORE: 11143
DATA :17/10/2016 - 18:25:55
----------------------------------------
Ciao, innanzitutto ringrazio entrambi per la risposta.
Partendo dalla proposta di sqrt(-1), vorrei capire di più sulla possibilità della costruzione dell'array. Nel senso, io ho adottato la soluzione della sinusoide perchè era facile implementarla da tastiera semplicemente chiedendo prima dell'esecuzione del programma, l'inserimento della frequenza di riferimento della cinghia che si vuole verificare. Se non ho capito male, adottando la tua proposta dovrei andare ad editare ogni volta l'array variando manualmente il valore alla frequenza desiderata? non è più laborioso in questo modo? O forse sono io che ho capito bene il tuo metodo. Per il filtro mi suggerisci di eliminare completamente ogni componente al disopra dei 600Hz?
Per paracarro, penso valga la stessa cosa scritta su. Fare quello che mi chiedi è creare un database con varie frequenze di varie cinghie, ma cosi perderei di vista lo scopo che volevo dare al mio programma. Quello di fornire uno strumento immediato di confronto. Qualora la cinghia da verificare non si trovasse nel database, cosa darei in pasto all'applicativo?
Grazie
----------------------------------------
AUTORE: 11143
DATA :17/10/2016 - 18:32:03
----------------------------------------
Ah scusate, mi sono dimenticato di chiedervi un altro consiglio. Ho notato che facendo fare l'acquisizione al microfono del notebook, anche in luoghi abbastanza isolati e silenziosi, pur rimanendo in silenzio, viene registrata comunque una variazione durante l'acquisizione. Come posso ridurre al minimo questi "rumori"? Utilizzando un microfono di quelli per le conversazioni Webcam pensiate possa migliorare la situazione?
----------------------------------------
AUTORE: 11106
DATA :18/10/2016 - 12:42:58
----------------------------------------
[quote:ez3urdun]Nel senso, io ho adottato la soluzione della sinusoide perchè era facile implementarla da tastiera semplicemente chiedendo prima dell'esecuzione del programma, l'inserimento della frequenza di riferimento della cinghia che si vuole verificare. Se non ho capito male, adottando la tua proposta dovrei andare ad editare ogni volta l'array variando manualmente il valore alla frequenza desiderata? non è più laborioso in questo modo? O forse sono io che ho capito bene il tuo metodo. Per il filtro mi suggerisci di eliminare completamente ogni componente al disopra dei 600Hz?[/quote:ez3urdun]
E' meno laborioso dal punto di vista del codice da scrivere, ma non dal punto di vista computazionale (devi generare una sinusoide e poi calcolarne l'FFT).
Con l'approccio "array" vai a modificare solo un elemento dell'array. Con qualche accorgimento si può evitare l'allocazione di memoria ogni volta che modifichi l'array ma andrei per gradi.
Ti giro un esempio tra poco
[quote:ez3urdun]Per il filtro mi suggerisci di eliminare completamente ogni componente al disopra dei 600Hz?[/quote:ez3urdun]
Considera che per un filtro tipico (Butterworth) il segnale viene attenuato di 3 dB in corrispondenza della frequenza di taglio. Dovresti stare un po' più in alto come frequenza di taglio.
[quote:ez3urdun]Ah scusate, mi sono dimenticato di chiedervi un altro consiglio. Ho notato che facendo fare l'acquisizione al microfono del notebook, anche in luoghi abbastanza isolati e silenziosi, pur rimanendo in silenzio, viene registrata comunque una variazione durante l'acquisizione. Come posso ridurre al minimo questi "rumori"? Utilizzando un microfono di quelli per le conversazioni Webcam pensiate possa migliorare la situazione?[/quote:ez3urdun]
Non ho esperienza con l'acquisizione via microfono. Potresti dimensionare e applicare il filtro di cui hai parlato sopra e vedere cosa ottieni. Se il segnale a valle del filtro non è accettabile, puoi pensare di cambiare microfono.
----------------------------------------
AUTORE: 11106
DATA :18/10/2016 - 12:44:16
----------------------------------------
Come promesso, ecco l'esempio
----------------------------------------
AUTORE: 11143
DATA :19/10/2016 - 15:37:15
----------------------------------------
[quote="sqrt(-1)":2ovhbe6q][quote:2ovhbe6q]Nel senso, io ho adottato la soluzione della sinusoide perchè era facile implementarla da tastiera semplicemente chiedendo prima dell'esecuzione del programma, l'inserimento della frequenza di riferimento della cinghia che si vuole verificare. Se non ho capito male, adottando la tua proposta dovrei andare ad editare ogni volta l'array variando manualmente il valore alla frequenza desiderata? non è più laborioso in questo modo? O forse sono io che ho capito bene il tuo metodo. Per il filtro mi suggerisci di eliminare completamente ogni componente al disopra dei 600Hz?[/quote:2ovhbe6q]
E' meno laborioso dal punto di vista del codice da scrivere, ma non dal punto di vista computazionale (devi generare una sinusoide e poi calcolarne l'FFT).
Con l'approccio "array" vai a modificare solo un elemento dell'array. Con qualche accorgimento si può evitare l'allocazione di memoria ogni volta che modifichi l'array ma andrei per gradi.
Ti giro un esempio tra poco
Ciao sqrt, purtroppo il vi che mi hai inviato non riesco ad aprilo in quanto la mia versione (o meglio quella che ci ha fornito il prof) è antecedente la tua.
[quote:2ovhbe6q]Per il filtro mi suggerisci di eliminare completamente ogni componente al disopra dei 600Hz?[/quote:2ovhbe6q]
Considera che per un filtro tipico (Butterworth) il segnale viene attenuato di 3 dB in corrispondenza della frequenza di taglio. Dovresti stare un po' più in alto come frequenza di taglio.
Per quanto riguarda il filtro, è proprio quello che ho fatto.. Impostando un filtro passa basso di tipo Butterworth con frequenza iniziale di taglio iniziale 1000Hz, poi abbassata a 700. Il fatto è che iniziando l'acquisizione e stoppandola in un punto a caso, non è raro registrare frequenze di acquisizioni superiori ai 1000Hz(o 700Hz). Nonostante io faccia passare il segnale acquisito dal filtro. E' questo che non mi spiego.
[quote:2ovhbe6q]Ah scusate, mi sono dimenticato di chiedervi un altro consiglio. Ho notato che facendo fare l'acquisizione al microfono del notebook, anche in luoghi abbastanza isolati e silenziosi, pur rimanendo in silenzio, viene registrata comunque una variazione durante l'acquisizione. Come posso ridurre al minimo questi "rumori"? Utilizzando un microfono di quelli per le conversazioni Webcam pensiate possa migliorare la situazione?[/quote:2ovhbe6q]
Non ho esperienza con l'acquisizione via microfono. Potresti dimensionare e applicare il filtro di cui hai parlato sopra e vedere cosa ottieni. Se il segnale a valle del filtro non è accettabile, puoi pensare di cambiare microfono.[/quote:2ovhbe6q]
Il problema si presenta proprio con il filtro già incluso. Labview campiona anche in assenza di apparenti rumori o mie azioni..
Ad ogni modo, se non è contro le regole del forum, posso postare la mia bozza cosi vi faccio vedere quello che ho fatto..
Grazie
----------------------------------------
AUTORE: 11143
DATA :19/10/2016 - 15:39:56
----------------------------------------
Scusate il doppio post, ma nel messaggio citato sopra, ho sbagliato il modo di citazione. Alcune delle mie risposte risultano visualizzate come messaggio quotato.
----------------------------------------
AUTORE: 11106
DATA :19/10/2016 - 16:11:43
----------------------------------------
Che versione di LabVIEW stai usando?
----------------------------------------
AUTORE: 11106
DATA :19/10/2016 - 16:15:47
----------------------------------------
Penso che non vada contro le regole del forum, quindi posta pure la tua proposta di VI
----------------------------------------
AUTORE: 11143
DATA :19/10/2016 - 16:45:42
----------------------------------------
Labview 2013...Posto la mia bozza di progetto. Chiedo scusa dall'inizio per il caos all'interno del block diagram e front panel, ma molte cose le inserisco per capire un pò cosa succedere durante le varie fasi dell'elaborazione
----------------------------------------
AUTORE: 11106
DATA :20/10/2016 - 09:24:53
----------------------------------------
Ciao,
intanto ti allego il codice di esempio che ti ho postato un paio di giorni fa convertito per LabVIEW 2013.
Appena riesco do un'occhiata al tuo VI
----------------------------------------
AUTORE: 11143
DATA :20/10/2016 - 20:09:29
----------------------------------------
Ciao sqrt, ho visto il tuo esempio. Credo di aver capito il tuo metodo, ma a quanto pare anche cosi facendo, si hanno delle distorsioni nel grafico della FFT nell'intorno della frequenza di riferimento scelta, cosi come avviene con il sistema della sinusoide. HO provato a restringere l'asse X a valori molto vicino alla freq di riferimento e si possono notare queste "distorsioni".
----------------------------------------
AUTORE: 11106
DATA :21/10/2016 - 08:10:38
----------------------------------------
[quote="TheAlfaRomeo":3iy4pcq4]Ciao sqrt, ho visto il tuo esempio. Credo di aver capito il tuo metodo, ma a quanto pare anche cosi facendo, si hanno delle distorsioni nel grafico della FFT nell'intorno della frequenza di riferimento scelta, cosi come avviene con il sistema della sinusoide. HO provato a restringere l'asse X a valori molto vicino alla freq di riferimento e si possono notare queste "distorsioni".[/quote:3iy4pcq4]
Se con distorsioni intendi che la riga spettrale di riferimento non è esattamente una riga, ciò è dovuto alla visualizzazione del grafico. Puoi cambiare il tipo di visualizzazione del plot corrispondente alla freq. di riferimento. Ti allego un esempio.
----------------------------------------
AUTORE: 11143
DATA :21/10/2016 - 14:59:50
----------------------------------------
Grazie sqrt.. Darò un'occhiata stasera appena rientro a casa...
----------------------------------------
AUTORE: 11143
DATA :26/10/2016 - 09:36:11
----------------------------------------
CIao sqrt, scusa se rispondo solo oggi, ma purtroppo la sfortuna mi perseguita. Si è bruciata la VGA al notebook ed ora è in assistenza. Per fortuna ho la cartella del materiale su cloud. Ad ogni modo sapete se momentaneamente posso usare la mia licenza studente su un altro Pc? O al rientro del mio notebook potrei avere problemi? Grazie
----------------------------------------
AUTORE: 11143
DATA :07/12/2016 - 14:46:35
----------------------------------------
Ciao a tutti, riapro la discussione perchè finalmente il notebook è rientrato dall'assistenza, ed ho ripreso a lavorare sul progetto. Sono andato avanti con la bozza, ma ora mi trovo di fronte ad una nuova difficoltà. Vorrei manipolare solo la parte del segnale che mi interessa, cestinando tutta l'informazione al di sopra della frequenza di taglio del filtro, come posso fare? Avevo pensato ad uno split Array, ma non credo sia compatibile con il tipo di dato che mi esce fuori dalla trasformata di Fourier. Non so se mi sono spiegato, in pratica ricollegandomi allo scopo iniziale del mio progetto, vorrei che labview andasse a ricercare la frequenza più significativa solo all'interno dei miei 700Hz, lasciando stare tutto quello al di fuori di questo range.
----------------------------------------
AUTORE: 11106
DATA :13/12/2016 - 10:21:59
----------------------------------------
Ciao,
mi pare che il blocchetto FFT ritorni un cluster con f0, df e Y (array di DBL).
Potresti usare il blocchetto Treshold 1D array e Array Subset per estrarre la porzione che ti interessa.
----------------------------------------
AUTORE: 11106
DATA :13/12/2016 - 10:23:31
----------------------------------------
*Threshold
----------------------------------------
AUTORE: 11143
DATA :14/12/2016 - 16:09:12
----------------------------------------
Ciao Sqrt,grazie come sempre per le risposte. Il blocchetto che mi hai suggerito non lo conosco, se puoi spiegarmi meglio come funziona. Ad ogni modo se hai dato un'occhiata alla bozza che ti mandai tempo fa, anche li tramite l'unbundle della fft mi estrapolavo le componenti f0, df e Y..potrei applicarlo anche li?
----------------------------------------
AUTORE: 11106
DATA :15/12/2016 - 07:55:28
----------------------------------------
[quote:6holu2a3]Ad ogni modo se hai dato un'occhiata alla bozza che ti mandai tempo fa, anche li tramite l'unbundle della fft mi estrapolavo le componenti f0, df e Y..potrei applicarlo anche li?[/quote:6holu2a3]
Scusami. Rileggendo il tuo post avevo capito dovessi fare un'altra cosa. Il blocchetto threshold non dovrebbe servirti.
Devi calcolare l'indice dell'array Y corrispondente alla frequenza di taglio. Poi, con l'unbundle estrai l'array Y, estrai la porzione che ti interessa e, se ti serve, con il bundle ricomponi il cluster. In altre parole, cambi solo l'array Y; f0 e df rimangono uguali
Ad ogni modo, i blocchetti che ti ho citato fanno questo:
Array Threshold - Ritorna l'indice dell'elemento il cui valore è superiore alla soglia impostata.
Array subset - Ritorna una porzione dell'array; indice di partenza e lunghezza finale dell'array sono input.
Se guardi il context help di questi due blocchetti, vedrai che è molto più chiaro.
----------------------------------------
AUTORE: 11143
DATA :16/12/2016 - 10:00:44
----------------------------------------
Si ho dato un'occhiata al blocchetto e all'Help ed ho visto che per i miei scopi non mi poteva essere d'aiuto.
Il mio problema principale è proprio questo. Ho una frequenza di campionamento pari a 22050Hz, con 5000 campioni presi per ogni canale. Ora dopo aver filtrato il segnale sonoro di partenza,trasformata di fourier, aver separato i canali e scomposto il singolo canale tramite unbundle, mi esce fuori un Array di Y dall'Unbundle, che possiede 2500 index. So che il df è pari a 4,41 semplicemente facendo il rapporto tra lo span e il numero di campioni prelevati. Anche facendo semplicemente il df per i 2500 index mi esce fuori 11025 che è giusto la metà della frequenza di campionamento..Quindi qualora volessi prendermi solo la porzione dell'Array Y corrispondente ai miei 700Hz, dovrei calcolarmi l'index corrispondente ai 700Hz, facendo 700Hz/4,41 e poi tramite un subset Array o uno Split Array ricavarmi la porzione che mi interessa?
----------------------------------------
AUTORE: 11143
DATA :16/12/2016 - 10:15:26
----------------------------------------
Penso di aver risolto proprio in questo modo, tramite split Array, separo la parte dell'Array corrispondente all'Index dato da 700/df... Sembrerebbe funzionare. La frequenza significativa non super i 700Hz
----------------------------------------
================================================================================
Problema con FTP. Error 15451
================================================================================
AUTORE: 11020
DATA :11/10/2016 - 09:47:09
----------------------------------------
Un saluto a tutti.
Ho un problema con la connessione FTP.
Vi allego un vi orribile che sto utilizzando.
In questo vi apro una connessione, dopo che l'ho aperta, faccio un dir per vedere quali file sono presenti all'interno di una cartella.
Successivamente con il blocco get multiple files provo a prendere tutti i file all'interno di questa cartella.
Non capisco come mai mi viene dato l'errore 15451.
Qualcuno può aiutarmi?! Grazie mille
Un saluto a tutti
----------------------------------------
AUTORE: 482
DATA :11/10/2016 - 12:56:38
----------------------------------------
Riesci a salvarlo in versione 12?
----------------------------------------
AUTORE: 11106
DATA :12/10/2016 - 08:02:56
----------------------------------------
Ciao Gio,
ma se provi a fare la stessa operazione manualmente (non con LabVIEW quindi), ottieni lo stesso errore oppure funziona correttamente?
----------------------------------------
================================================================================
Uso delle funzioni Point by point
================================================================================
AUTORE: 11132
DATA :26/10/2016 - 20:52:28
----------------------------------------
Salve a tutti!
Ho bisogno di un chiarimento. Devo realizzare un vi in cui impiego necessariamente le funzioni di Signal Processing di tipo Point by point per eseguire alcune operazioni su un segnale.
Non ho però ben capito come rapportarmi all'utilizzo di valori singoli rispetto ai classici array. Ad esempio, se dovessi eseguire la media sul segnale, normalmente la andrei a calcolare sull'intero insieme dei valori del segnale. Con le funzioni point by point come si procede? Avevo pensato di inserire un loop in modo da accumulare i singoli valori in un array, ma a questo punto non vedo la differenza con il metodo tradizionale.
E' per un esercizio universitario.
Grazie mille a chi mi risponderà!
----------------------------------------
AUTORE: 43
DATA :27/10/2016 - 14:33:51
----------------------------------------
[quote="kandinsky":1vk7p8wf]Salve a tutti!
Ho bisogno di un chiarimento. Devo realizzare un vi in cui impiego necessariamente le funzioni di Signal Processing di tipo Point by point per eseguire alcune operazioni su un segnale.
Non ho però ben capito come rapportarmi all'utilizzo di valori singoli rispetto ai classici array. Ad esempio, se dovessi eseguire la media sul segnale, normalmente la andrei a calcolare sull'intero insieme dei valori del segnale. Con le funzioni point by point come si procede? Avevo pensato di inserire un loop in modo da accumulare i singoli valori in un array, ma a questo punto non vedo la differenza con il metodo tradizionale.
E' per un esercizio universitario.
Grazie mille a chi mi risponderà!
[/quote:1vk7p8wf]
Ciao
La media può anche essere calcolata in modo, passami il termine, "incrementale" cioè
[code:1vk7p8wf]
M(n) =(X1+X2+...+Xn)/n
M(n+1) = M(n) * (n/(n+1)) + X(n+1)/(n+1)
[/code:1vk7p8wf]
quindi noto il valore medio, e noto il n. di elementi su cui è calcolato, si può aggiungere un nuovo valore al calcolo (X(n+1)) senza conoscere nel dettaglio tutti i singoli valori che lo compongono (X1,X2,...,Xn)
Cmq sia, hai ragione tu: per calcolarsi una media mobile, che tra l'altro funziona come filtro, si può gestire un semplice buffer circolare, in cui il singolo valore in uso corrente sovrascrive quello più vecchio presente nell'array.
bye
----------------------------------------
================================================================================
Mettere in pausa una acquisizione analogica
================================================================================
AUTORE: 1670
DATA :27/10/2016 - 11:37:27
----------------------------------------
Buon giorno a tutti,
ho la necessità di acquisire 4 canali analogici con mxDAQ, in modalità continua. Sono segnali che vengono acquisiti simultaneamente usando una PCI6110, che ha appunto 4 ADC. Il sampleClock è un segnale digitale esterno che entra dal PFI7 della scheda PCI6110.
Ho fatto un programma partento dalla base dell'esempio "ContAcq&Graph Voltage-Ext Clk-Dig Start.vi" e modificando ed aggiungendo alcune cose.
Il programma funziona correttamente, ma il mio problema è che avrei la necessità di mettere in pausa l'acquisizione, fare alcune elaborazioni con altri segnali in uscita, e poi riprendere ad acquisire (questo lo dovrei fare più volte senza mai uscire dal programma). Per mettere in pausa intento che nessun canale venga acquisito durante il tempo di pausa. Chiedo se qualcuno di voi conosce qualche soluzione software o se la via più semplice, come avevo pensato, è inibire in modo hardware il sampleClock mediante un comando digitale della NI6110 (cioè un segnale digitale della 6110 lo mando in un ingresso di una porta logica hardware esterna, il secondo ingresso lo collego con il sampleClock esterno e l'uscita della porta sarà il mio Clock controllato che va al PFI7).
In allegato c'è l'esempio in LabVIEW 2011 e uno schema della soluzione hardwere descritta.
Ringrazio in anticipo tutti quelli che mi risponderanno.
----------------------------------------
AUTORE: 43
DATA :27/10/2016 - 14:02:33
----------------------------------------
[quote="Cromosoma":24nbv4ep]Buon giorno a tutti,
ho la necessità di acquisire 4 canali analogici con mxDAQ, in modalità continua. Sono segnali che vengono acquisiti simultaneamente usando una PCI6110, che ha appunto 4 ADC. Il sampleClock è un segnale digitale esterno che entra dal PFI7 della scheda PCI6110.
Ho fatto un programma partento dalla base dell'esempio "ContAcq&Graph Voltage-Ext Clk-Dig Start.vi" e modificando ed aggiungendo alcune cose.
Il programma funziona correttamente, ma il mio problema è che avrei la necessità di mettere in pausa l'acquisizione, fare alcune elaborazioni con altri segnali in uscita, e poi riprendere ad acquisire (questo lo dovrei fare più volte senza mai uscire dal programma). Per mettere in pausa intento che nessun canale venga acquisito durante il tempo di pausa. Chiedo se qualcuno di voi conosce qualche soluzione software o se la via più semplice, come avevo pensato, è inibire in modo hardware il sampleClock mediante un comando digitale della NI6110 (cioè un segnale digitale della 6110 lo mando in un ingresso di una porta logica hardware esterna, il secondo ingresso lo collego con il sampleClock esterno e l'uscita della porta sarà il mio Clock controllato che va al PFI7).
In allegato c'è l'esempio in LabVIEW 2011 e uno schema della soluzione hardwere descritta.
Ringrazio in anticipo tutti quelli che mi risponderanno.[/quote:24nbv4ep]
Ciao.
Purtroppo uso LV2010 e nn posso aprire il tuo esempio.
Tuttavia, è possibile inibire via SW l'acquisizione e riprenderla in moltissimi modi: l'unico limite è la tua fantasia.
La prima soluzione che mi viene in mente è quella di non sospendere l'acquisizione, ma di eseguire cmq e sempre l'acquisizione e scartarne i valori a valle, cioè ad acquisizione già avvenuta.
[attachment=0:24nbv4ep]enable-disable-acq.png[/attachment:24nbv4ep]
La soluzione + banale che ti propongo è di moltiplicare tutti i valori acquisiti * 1 se l'acq. è abilitata e * NaN (Not a number) nel caso sia disabilitata. come vedi in figura.
Bye
----------------------------------------
AUTORE: 482
DATA :28/10/2016 - 07:38:45
----------------------------------------
Un altra soluzione semplice potrebbe essere quella di mettere una semplice case stucture tutt'attorno all'acquisizione collegata al tasto di pausa.
Se pausa è True, nel ciclo while continuo a far circolare i riferimenti all'acquisizione tramite shift register ma senza fare niente.
Se pausa è False faccio l'acquisizione normalmente.
Il file allegato è un VI snippet, quindi un immagine che puoi trascinare nel block diagram e ti crea il VI.
----------------------------------------
AUTORE: 1670
DATA :02/11/2016 - 15:38:50
----------------------------------------
Buona sera a tutti,
la soluzione di paracarro non mi dispiace ed è quella che speravo di poter realizzare, cioè tenere sempre l'acquisizione attiva e selezionare i dati in lettura. Il mio problema è che devo selezionare i dati in funzione del tempo di play (dati validi) e pausa (dati non validi), e ho visto che i dati acquisiti, nel mio caso, non hanno il riferimento di tempo perchè il sample clock è esterno (almeno io immagino che sia questo il motivo). La soluzione di geppoonline, credo che non mi permetta di fare una selezione accurata dei dati, perchè quando vado a mettere in play dopo una pausa, essendo l'acquisizione sempre attiva, mi vado a leggere dei dati che sicuramente appartengono al tempo di pausa e viceversa quando metto in pausa.
Ho trovato comunque una soluzione nell'esempio Acq%26Graph Voltage-Int Clk-SW Trig Restarts, che ho poi adattato alle mie necessità (anche se manca ancora la gran parte del programma di elaborazione). L'ho provato oggi e mi sembra che funzioni bene, non so di preciso cosa faccia il blocco "DAQmx Control Task" però non ho perdita di eventi durante il play e non ho eventi letti durante il tempo di pausa.
Allego il programma in LV10, ditemi se sbaglio qualcosa o se quello che sto facendo è corretto.
Grazie mille
----------------------------------------
AUTORE: 129
DATA :16/11/2016 - 08:25:29
----------------------------------------
La soluzione di geppo fa proprio questo, basta che gli metti uno shift per incrementare il tempo di acquisuzione e uno per il tempo in pausa.
----------------------------------------
================================================================================
Finestra in primo piano rispetto a labview
================================================================================
AUTORE: 482
DATA :03/11/2016 - 13:43:27
----------------------------------------
...ma ciao!
dopo svariati anni, ho deciso di affrontare la questione delle finestre in primo piano con labview.
Succede che realizzo dei programmi con dei subvi, che a loro volta richiamano subvi ecc ecc.
Il problema che ho è che non essendo i vari subvi a pieno schermo, se un utente clikka su un front panel che non è l'ultimo chiamato, o cmq clikka in una parte vuota di schermo, poi per trovare l'ultimo front panel chiamato, devo litigare con i tab ecc.
Io vorrei che l'ultimo vi chiamato sia sempre quello in primo piano.
Escludo l'utilizzo del front panel MODAL perchè per ogni minima cazzata ti ritrovi bloccato a dover chiudere completamente labview.
Al che ho ipotizzato alcune strade:
1) metto i front panel su Floating ma non ho capito se fa al caso mio perchè quando apro i subvi ci mette un po' prima di permettermi di clikkare sui controlli.
2) Setto nel block diagram la proprietà del Vi "is FrontMost" ma mi sa che lo fa già di default quando chiamo il ssubvi, poi pero' se ci clikko via non resta on top.
3) ci dev'essere qualche impostazione che non ho mai usato che permetta di avere l'ultimo subvi chiamato sempre FRONTMOST rispetto agli altri subvi....
Suggerimenti?
----------------------------------------
AUTORE: 301
DATA :03/11/2016 - 15:08:08
----------------------------------------
ciao Geppo,
beh, se l'unico motivo per non usare vi modali è quello che descrivi, potresti farti una semplice funzioncina che te lo piazzi in "modale" solo una volta che compili il tutto....
Per quanto riguarda gli altri punti della lista, penso che l'unica soluzione sia gestire il "IsFrontMost" in un unico punto (penso ad una FGV), nel quale ti memorizzi l'ultimo vi visualizzato.....
Aris
----------------------------------------
AUTORE: 43
DATA :03/11/2016 - 15:11:48
----------------------------------------
Mettere la finestra in primo piano usando le API di windows, non è un problema. Mi è capitato di doverlo fare in modo che la finestra di un certo VI stesse davanti a tutte le altre (anche finestre non LabVIEW) senza distinzione, ma poi non ne ho garantito la "persistenza" in primo piano, che mi sembra la caratteristica che stai cercando.
Io userei invece il solito attributo d'interfaccia MODAL con questa accortezza:
- Le finestre non si aprono automaticamente alla chiamata del VI.
- SE il SW sta girando in ambiente Development (LabVIEW.exe running),
- ALLORA setto la finestra del VI come Floating e la rendo visibile.
- ALTRIMENTI setto la finestra del VI come MODAL e la rendo visibile
- prima di uscire dal VI, chiudo la finestra.
in questo modo non ho problemi modali nel debug (ambiente di sviluppo) ma utilizzo a mani basse la funzionalità MODAL quando faccio l'eseguibile.
bye
----------------------------------------
AUTORE: 482
DATA :03/11/2016 - 15:18:39
----------------------------------------
Il problema che ho è che il modal me lo mette davanti a tutte le altre applicazioni.
Io invece non voglio che sia davanti a tutto, voglio solo che l'ultimo VI chiamato sia davanti a tutti gli altri VI.
----------------------------------------
AUTORE: 301
DATA :03/11/2016 - 15:24:19
----------------------------------------
a dire il vero, il modal rimane davanti SOLO all'applicazione da cui è chiamato.....
sto scrivendo su Firefox con un vi modale che gira!
----------------------------------------
AUTORE: 482
DATA :03/11/2016 - 15:34:44
----------------------------------------
mmhh...allora il mio windows sta facendo qualche minkiata....
----------------------------------------
AUTORE: 482
DATA :03/11/2016 - 15:40:40
----------------------------------------
Comunque, visti i vostri suggerimenti, domani provo le varie soluzioni.
Non ho capito pero' perchè paracarro dicevi di non far aprire in automatico i VI.
Non si puo' settare la proprietà modale verificando se è in ambiente di sviluppo direttamente nel vi aperto?
poi...
Se MODAL vuol dire sempre al di sopra degli altri
e DEFAULT vuol dire che se ci clikki va in primo piano, senno' sta dietro alle ultime finestre aperte...
La modalità Floating cosa mi rappresenta di preciso?
----------------------------------------
AUTORE: 43
DATA :03/11/2016 - 16:16:31
----------------------------------------
[quote="gepponline":h0iexkmg]Comunque, visti i vostri suggerimenti, domani provo le varie soluzioni.
Non ho capito pero' perchè paracarro dicevi di non far aprire in automatico i VI.
Non si puo' settare la proprietà modale verificando se è in ambiente di sviluppo direttamente nel vi aperto?
poi...
Se MODAL vuol dire sempre al di sopra degli altri
e DEFAULT vuol dire che se ci clikki va in primo piano, senno' sta dietro alle ultime finestre aperte...
La modalità Floating cosa mi rappresenta di preciso?[/quote:h0iexkmg]
1) E' solo una finezza. Se da un VI Modal richiami un SubVI non modal e poi ne cambi l'attributo, lo vedresti passare da dietro a davanti, mentre se fai come ho detto appare correttamente da subito.
2) MODAL vuol dire al di sopra di tutti gli altri FP aperti, pannelli Modal compresi ada accezzione di quelli di altri processi.
3)Floating è un "livello di priorità di visualizzazione" intermedio . E' compreso fra Default minimo e Modal massimo
bye
----------------------------------------
AUTORE: 482
DATA :04/11/2016 - 09:43:38
----------------------------------------
Mi aggancio a questa discussione per chiedere un altra cosa che non mi ricordo se avevo già chiesto tempo fa.
Esiste un modo easy per avere una lista dei SubVI nella gerarchia che hanno i Front panel visibili?
----------------------------------------
AUTORE: 301
DATA :04/11/2016 - 09:57:05
----------------------------------------
La roba piu al volo che mi viene in mente è questa.....
----------------------------------------
AUTORE: 482
DATA :04/11/2016 - 12:55:06
----------------------------------------
Il concetto è quello, servirebbe la proprietà Window appareance->Show front panel when called ma non la trovo.
Ho trovato Execution-> Show front panel on Call ma mi restituisce false per tutti i vi in memoria....
----------------------------------------
AUTORE: 482
DATA :04/11/2016 - 13:01:04
----------------------------------------
Come non detto...
Non dava false, era che appena caricava il vi global dava errore perchè una proprietà che non puo' avere e poi l'errore se lo portava dietro nello shift register.
Quindi Aris, va bene la tua soluzione cambiando la proprietà.
Se riesco ad usare questo e settar ele proprietà dei vari subvi nell'eseguibile, potrebbe risolvermi definitivamente il problema...senza pero' la finezza segnalata da paracarro.
----------------------------------------
AUTORE: 482
DATA :04/11/2016 - 13:48:30
----------------------------------------
Ho provato a fare quello che vorrei fare ma ho trovato un intoppo.
L'intoppo si presenta sia in sviluppo che nell'eseguibile.
In allegato un progettino in LV2012.
Il mainVI si apre e setta tutti i subvi come Modal.
Dopodichè se si prova ad aprire il subvi, questo compare dietro al main.
Se pero' stoppiamo il tutto con l'abort button del main VI, chiudiamo il subvi e facciamo ripartire il main, funziona tutto correttamente e il subvi questa volta comparirà davanti a tutti.
In sviluppo ho provato anche ad avere già settati su modali tutti e due i VI, ma il risultato non cambia.
Perchè fa questo scherzo?
----------------------------------------
AUTORE: 301
DATA :04/11/2016 - 14:29:32
----------------------------------------
te lo dico a malincuore.......sul mio pc funziona correttamente
----------------------------------------
AUTORE: 482
DATA :04/11/2016 - 15:19:35
----------------------------------------
.....sia l'eseguibile che i vi!??!
----------------------------------------
AUTORE: 301
DATA :04/11/2016 - 15:33:01
----------------------------------------
provato ora l'exe, e.....si, anche questo funziona correttamente
(nota, con questo sistema, stai solo all'occhio alle chiamate dinamiche, ovviamente i vi saranno in memoria solo una volta che li lanci).
----------------------------------------
AUTORE: 43
DATA :04/11/2016 - 15:35:18
----------------------------------------
[quote="gepponline":3xzakqsq]Ho provato a fare quello che vorrei fare ma ho trovato un intoppo.
L'intoppo si presenta sia in sviluppo che nell'eseguibile.
In allegato un progettino in LV2012.
Il mainVI si apre e setta tutti i subvi come Modal.
Dopodichè se si prova ad aprire il subvi, questo compare dietro al main.
Se pero' stoppiamo il tutto con l'abort button del main VI, chiudiamo il subvi e facciamo ripartire il main, funziona tutto correttamente e il subvi questa volta comparirà davanti a tutti.
In sviluppo ho provato anche ad avere già settati su modali tutti e due i VI, ma il risultato non cambia.
Perchè fa questo scherzo?[/quote:3xzakqsq]
Non ho voglia di postare roba fatta tempo fa, comunque basta fare:
- Un VI che a partire da una cartella carica uno alla volta tutti i file .VI presenti nella cartella e nelle sub-cartelle
-Del VI correntemente caricato (rigorosamente NON running) cambia l'attirbuto si "show panel when called".
- se deve essere cambiato mette il nome del VI (path completo) in una lista in modo da tener traccia delle modifiche
- salva il VI modificato automaticamente (metodo Save)
sfruttando la lista dei VI modificati, si editano uno ad uno §(spero non siano centinaia) e si aggiungono 2 chiamate al medesimo VI; una in apertura con valore enum "Open" e l'altra in uscita con valore "Close".
Tale VI funziona seguendo questi principi:
-Ricava il nome del VI chiamante attraverso la funzione "Callchain"
-Apre il VI
-SE OPEN, setta la modalita Modal o Default o quello che ti pare in funzione di App.kind
-SE OPEN, chiama il metodo open ( se il pannello non risulta aperto (in debug potrebbe restare aperto quindi si chiama il metodo solo se l'FP è effettivamente chiuso
- SE CLOSE chiama il metodo di chiusura FP
- chiude il ref del VI aperto.
bye
----------------------------------------
================================================================================
dither
================================================================================
AUTORE: 4376
DATA :09/11/2016 - 13:05:35
----------------------------------------
Ciao a tutti
devo fare un'applicazione per comandare un'azionamento tramite un segnale analogico da 0 a 10 Vdc sulla quale sovrapporre un segnale o rumore variabile sia in ampiezza che frequenza.
Il segnale da sovrapporre può essere una sinusoide un segnale triangolare oppure un rumore rosa o bianco..
Sapete se labview ha a disposizione blocchetti o VI che facciano al mio caso, oppure ci si deve ingegnare per costruirli??
Ciao e grazie per il supporto
Davide
----------------------------------------
AUTORE: 11106
DATA :09/11/2016 - 13:46:22
----------------------------------------
Ciao Davide,
nella palette Signal Processing -> Waveform Generation/Signal generation trovi numerosi blocchetti per la generazione dei segnali. Ti permettono di generare sinusoidi, pattern specifici, rumore bianco, ecc.. Per il rumore rosa, non c'è un VI specifico. Puoi ottenere il rumore rosa filtrando passa basso del rumore bianco.
Qui trovi un VI di esempio già fatto:
[url:ckdko3e1]http://www.ni.com/example/26023/en/[/url:ckdko3e1]
Se ti serve, anzichè usare i blocchetti della palette citata sopra, puoi usare i VI che generato i vari tipo di segnali punto per punto. Questi Vi li trovi in Signal Processing -> Point by Point. Ogni volta che li chiami, ritornao un singolo valore del pattern voluto. I VI specificati sopra, invece, ritornano l'intera waveform in un solo colpo. Dipende un po' dalle tue esigenze.
----------------------------------------
AUTORE: 4376
DATA :10/11/2016 - 10:46:04
----------------------------------------
Grazie sqrt(-1) per la risposta, in questi giorni farò la vi e vediamo cosa succede
Ciao
----------------------------------------
================================================================================
Datamatrix qr etc.
================================================================================
AUTORE: 129
DATA :16/11/2016 - 08:20:45
----------------------------------------
Ciao a tutti, devo realizzare la generazione di qr code, datamatrix e qr code e altri formati in labview a partire da una stringa.
Purtroppo non posso usare dll, dot net e activex, devo dare tutto in labview.
Qualcuno ha avuto esperienza in merito o mi puo dare una mano?
Grazie, Nicola
----------------------------------------
AUTORE: 482
DATA :16/11/2016 - 15:38:48
----------------------------------------
Avevi già visto questo?
L'ho provato e funziona.
Non mi sembra usi dll esterne.
https://decibel.ni.com/content/docs/DOC-40930
----------------------------------------
AUTORE: 129
DATA :16/11/2016 - 18:18:13
----------------------------------------
Grazie Geppo, questo funziona, l'ho già inserito nel mio progetto. Solo che mi hanno chiesto anche altri supporti come datamatrix e dotcode.
Ora comunque mi sto studiando un pò questa sperando di trovare almeno qualche algoritmo o logica di formazione degli altri.
Bohh
----------------------------------------
================================================================================
Multilingua di un programma esistente
================================================================================
AUTORE: 482
DATA :16/11/2016 - 15:30:04
----------------------------------------
...ma ciao!
ho sviluppato un software, che come capita spesso, doveva essere di test, poi ha cominciato ad essere utilizzato piu' spesso, poi è diventato uno strumento indispensabile.
Proprio epr come è nato, non è stato strutturato ordinatamente.
Ora mi viene chiesto di tradurlo in inglese e cinese.
Tralasciando un attimo il cinese (non so se possano esserci problemi di compatibilità coi caratteri)
Volendo rendere il mio software traducibile senza duplicare tutto e tradurlo, che soluzione mi consigliate?
Uso LV 2012, non so se nelle versioni successive è stato implementato qualcosa di piu' comodo dell'utilizzo dell' "export string" direttamente per la localizzazione.
Suggerimenti?
Dovrei tradurre i controlli visibili e le stringhe nel diagramma.
----------------------------------------
AUTORE: 129
DATA :16/11/2016 - 18:36:36
----------------------------------------
Non so se ti dico una cosa banale per te, ma io utiizzo viserver prendo la ref di tutti i controlli e ne traduco caption,booltext etc.
Tempo fa avevo fatto questa se ti può essere utile.
----------------------------------------
AUTORE: 482
DATA :17/11/2016 - 12:28:16
----------------------------------------
riesci a salvarmelo in versione 2012 ?
----------------------------------------
AUTORE: 482
DATA :18/11/2016 - 07:59:06
----------------------------------------
Intanto scrivo qui un elenco di punti salienti che ho trovato facendo dei test veloci lavorando sui reference:
1) Avrei bisogno di avere i reference dei controlli dei SOLI VI CHE MOSTRANO IL FRONT PANEL. E questo si puo' fare utilizzando la proprietà dei VI in memoria.Poi nell'eseguibile valutero' Adesso mi basta anche un modo easy per creare l'eseguibile direttamente nella lingua interessata.
2)I controlli all'interno dei TAB non vengono prelevati, serve un VI reentrant per andare a prelevare anche quelli.
3)Vorrei prelevare i reference dei SOLI CONTROLLI CHE SI TROVANO NELL'AREA VISIBILE DEL FRONT PANEL.
----------------------------------------
AUTORE: 482
DATA :18/11/2016 - 15:08:17
----------------------------------------
Sto proseguendo nell'avventura e i putni che avevo segnato sono risolti.
Ora riesco a prelevare dai VI in memoria, tutti i controlli nel riquadro visibile del pannello, dai tab prelevo anche i nomi delle tab e dai booleani prelevo le boolean strings.
Ora ho solo un dubbio.
I vari reference dei controlli, se li salvo su un file per poi riaprirli, sono sempre validi o i reference sono dinamici e si generano di volta in volta che carico in memoria un VI?
----------------------------------------
AUTORE: 3428
DATA :18/11/2016 - 15:59:40
----------------------------------------
"Credo proprio che devi attivare lo scripting per avere l'ID univoco e ripetibile del controllo all'interno della vi."
...conosco la sua esistenza ma non l'ho mai usato..in cosa consiste l'abilitazione?
----------------------------------------
AUTORE: 129
DATA :19/11/2016 - 12:05:02
----------------------------------------
Scusa il ritardo. ecco i vi per il 2012.
----------------------------------------
AUTORE: 129
DATA :19/11/2016 - 12:20:38
----------------------------------------
Si per il cinese il discorso è unicode in labview, che non è completamente supportato, su questo esistono tanti workaround ma quando ne ho avuto bisogno mi ricordo ero passato tramite l'abilitazione dell'unicode da file ini quindi la forzatura sugli indicatori del testo in unicode e poi mi sembrava ci fosse un problema sul fatto che dovevi fare un doppio aggiornamento del controllo per poterlo visualizzare correttamente.
----------------------------------------
AUTORE: 482
DATA :23/11/2016 - 09:43:20
----------------------------------------
Ok,
ho realizzato un software che mi permette di creare le caption dove non ci sono ed esportare un file che mi permette poi di rinominare le varie caption, tab page, boolean text ecc solo se visibili a pannello.
Ora mi tocca portare tutte le stringhe in una variabile globale per poi popolare anche quella tramite file esterno (quetso l'ho già fatto in passato).
Ora, la conversione viene fatta caricando un main VI in memoria e lanciando il mio programmino che mi replica poi tutta la gerarchia in una nuova cartella e d ali mi ricompilo l'eseguibile.
Se volessi pero' fare la traduzione all'interno di un eseguibile, quindis elezionabile a posteriori, i VI nell'eseguibile vengono caricati di volta in volta, Non massivamente come succede quando carico un main VI inlabview. Giusto?
Quindi devo caricare il file delle traduzioni all'apertura di ogni vi visibile? o c'e' un altra strada?
Geppo!
----------------------------------------
AUTORE: 301
DATA :23/11/2016 - 12:48:49
----------------------------------------
I vi se richiamati dinamicamente non sono in memoria all'avvio del vi,Se richiamati come subvi nel codice, invece si.
Tutto quello che hai fatto, tranne i controlli visibili, era gia sviluppato nella lib che ti ho girato, c'è anche un esempio per la traduzione.
Cmq, ti consiglierei di lanciare un vi come "startup" che va a cambiare le tue captions e stringhe varie ed alla fine lancia il tuo main.
Avere 2 versioni compilate in lingue diverse è tipo.....bestemmiare in chiesa
Aris
----------------------------------------
AUTORE: 482
DATA :23/11/2016 - 13:15:05
----------------------------------------
Quindi nell'eseguibile, che sono lanciati tutti come subVI posso cambiare tutte le caption!
Perfetto
[quote:32to3fyy]tutto quello che hai fatto, tranne i controlli visibili, era gia sviluppato nella lib che ti ho girato, c'è anche un esempio per la traduzione.[/quote:32to3fyy]
In che vi per l'esattezza le due cose? Non ho trovato il punto in cui verifica che un controllo sia presente nel riquadro visibile del front panel, in piu' mi dava un errore su un typedef quindi non sono riuscito a testarlo.
[quote:32to3fyy]Avere 2 versioni compilate in lingue diverse è tipo.....bestemmiare in chiesa[/quote:32to3fyy]
Eh lo so...è che comunque qui ogni macchina fa storia a se quindi anche il software è diverso anche in base a chi lo usa
Per questo vorrei svilupparmi un sistema di traduzione che permetta di ovviare ai problemi del passato
----------------------------------------
AUTORE: 301
DATA :23/11/2016 - 13:43:37
----------------------------------------
non c'era una castella examples?
Li dovresti trovare un esempio di traduzione ed altri (considera che è sempre rimasta una cosa "per me").
Può essere che i type def e gli strict.type def abbiano problemi....
per quanto riguarda la "identificazione" dei reference dei controlli, avevo cercato di ricrearmi una sorta di "path" per ogni controllo (nome.vi/nome_controllo/ecc) che viene popolata di volta in volta.
Ma la base piu o meno c'è....
----------------------------------------
AUTORE: 482
DATA :23/11/2016 - 13:49:08
----------------------------------------
Si si poi sono risucito a guardare un po' il tuo lavoro, quello che dicevo è che io non voglio portarmi dietro TUTTI i controlli dei front panel perchè magari ho dei front panel in cui la maggior parte dei controlli/indicatori, sono solo funzionali alla programmazione e non all'interfaccia, quindi quei VI non me li porto nella traduzione e quindi anche questo è diventato "PER ME"
Grazie del supporto.
Poi se realizzaero' una versione decente ve la faro' vedere.
E' che tendenzialmente sono un casinista aggrovigliatore di fili e non vorrei spaventarvi
----------------------------------------
AUTORE: 301
DATA :23/11/2016 - 14:55:28
----------------------------------------
Ma infatti!
Ci sono le funzioni per filtrare la lista dei controlli.
Mi rendo conto che la lib non è completa (diventerebbe mastodontica), ma alla fine ti restituisce una LUT dei controlli, con la quale riesci a fare un po quello che vuoi!
Ado ogni modo, spero ti sia utile
Aris
----------------------------------------
AUTORE: 482
DATA :24/11/2016 - 09:38:08
----------------------------------------
QUalcuno mi sa spiegare perchè questo snippet mi da:
[quote:3k084sx1]Error 1077 occurred at Property Node (arg 1) in Untitled 7
Possible reason(s):
LabVIEW: Invalid property value.
Property Name: Tab Caption[/quote:3k084sx1]
Se la stessa proprietà la leggo, non da nessun errore. Se la scrivo (e si puo' scrivere) mi da errore...
----------------------------------------
AUTORE: 3428
DATA :24/11/2016 - 09:41:19
----------------------------------------
Ciao,
cosa nota con i nomi delle pagine
http://digital.ni.com/public.nsf/allkb/ ... 760007D122
----------------------------------------
AUTORE: 482
DATA :24/11/2016 - 09:48:33
----------------------------------------
Come non detto!
Ho scoperto che di default nei tab control, la caption delle pagine è associata alla label delle pagine quindi bisogna disassociarle per poter cambiare le caption. (le lbel non si possono cambiare in runtime)
----------------------------------------
AUTORE: 3428
DATA :24/11/2016 - 10:15:22
----------------------------------------
Devi dare prima la proprietà "indipendent label" al tabcaption
http://digital.ni.com/public.nsf/allkb/ ... 760007D122
----------------------------------------
AUTORE: 3428
DATA :24/11/2016 - 10:16:18
----------------------------------------
Scusate non avevo visto il cambio pagina del forum...
----------------------------------------
AUTORE: 482
DATA :24/11/2016 - 10:22:04
----------------------------------------
Ok, ci siamo quasi
Ora, abbiamo detto che per cambiare le varie proprietà, il VI deve essere in memoria pero' non in run senno' mi inibisce alcune modifiche.
Quindi apro un VI TOP level che poi lancia il mio principale, ma come faccio a far chiudere il top level?
----------------------------------------
AUTORE: 301
DATA :24/11/2016 - 10:35:10
----------------------------------------
Quando richiami un "open vi reference" RICHIAMI il vi in memoria......
----------------------------------------
AUTORE: 482
DATA :24/11/2016 - 16:31:54
----------------------------------------
Sembrerebbe che il vi reference lo carica in memoria solo se gli dai il path completo e non solo il nome del vi come facevo finora utilizzandolo dai vi già in memoria
Quindi presumo che dovro' trattare i path in maniera diversa a seconda che io sia in sviluppo o nell'eseguibile, giusto?
----------------------------------------
AUTORE: 301
DATA :24/11/2016 - 16:49:58
----------------------------------------
Esatto,
se apri un reference, carichi il vi in memoria.
L'apertura del reference, la puoi fare passando alla funzione il nome del vi (se è gia in memoria), altrimenti l'intero suo path (altrimenti l'interprete non sa dove andarselo a prendere).
ovviamente li devi fare il solito giochetto se buildato oppure no....
Aris
----------------------------------------
AUTORE: 482
DATA :24/11/2016 - 17:09:24
----------------------------------------
Che pirla che sono, avevo già fatto sta cosa del path dei subvi in un altra applicazione.
Meglio così, una cosa in meno da fare.
Mi ricordo che ai tempi avevo smadonnato un po'perchè i subvi nell'eseguibile prendevano un path strano che ho dovuto ricavare mettendo un indicatore provvisorio nel front panel
----------------------------------------
AUTORE: 301
DATA :25/11/2016 - 06:36:53
----------------------------------------
Si, quando buildi unapplicazione, il path dei vi cambia, perchè vengono "portati" all'interno dell'exe stesso:
c:\test\
ome.vi ==> c:\app.exe\test\
ome.vi
Questo dalla 2009 in poi (se non sbaglio).
Le versioni 8.x e precedenti, non mantenevao la gerarchia delle cartelle internamente all'exe (c'è una spunta nelle opzioni di build per replicare questa cosa).
Aris
----------------------------------------
AUTORE: 482
DATA :25/11/2016 - 07:52:44
----------------------------------------
ma quindi io che ho i VI sotto questo path:
T:\Ufficio Tecnico Impiantistica Sicurezza\Div. Impianti Elettrici\Altri Impianti\Geppo\manutenzioni - NUOVO
Dovro' risalire tutte ste cartelle per arrivare ai miei subvi?
----------------------------------------
AUTORE: 301
DATA :25/11/2016 - 08:14:06
----------------------------------------
aspe.....dipende tutto dal path relativo del tuo progeto....
L'exe è una sorta di file zippato, quindi l'estrazione del path dei vi che gli buildi dentro, dipende poi da dove "instaii" o sposti il vi.
----------------------------------------
================================================================================
Manuale introduttivo su LabView
================================================================================
AUTORE: 645
DATA :18/11/2016 - 00:31:15
----------------------------------------
In rete si trova questo manuale introduttivo: http://www.ni.com/pdf/manuals/373427j.pdf
Molti magari lo conoscono già ma può essere utile!
----------------------------------------
================================================================================
Analizzare immagini da Webcam WiFi
================================================================================
AUTORE: 645
DATA :01/12/2016 - 14:17:39
----------------------------------------
Ciao a tutti,
vorrei analizzare immagini registrate da una telecamere WiFi. Posso accedere all'immagine tramite browser e apposita stringa. Come potrei iniziare?
Ho cercato in internet ma ho trovato soluzioni che utilizzano CompactRio o FPGA. Io invece vorrei utilizzare LabView installato su pc.
----------------------------------------
AUTORE: 11106
DATA :01/12/2016 - 16:47:43
----------------------------------------
Potresti dare qualche dettaglio in più? (Marca e Modello camera, cosa vuoi farci? Uno streaming?)
[url:2piq44cg]https://www.youtube.com/watch?v=FyM1hQtUfFE[/url:2piq44cg]
----------------------------------------
================================================================================
Analisi modale Labview
================================================================================
AUTORE: 11102
DATA :14/12/2016 - 09:02:51
----------------------------------------
Ciao a tutti!
Dovrei realizzare un VI in Labview per acquisire le frequenze proprie di un oggetto attraverso l'analisi modale, facendo vibrare il pezzo su uno shaker. Ho a disposizione gli accelerometri e le schede di acquisizione del segnale, però non ho ben chiaro come sviluppare il VI.
E' corretto realizzare un Vi che mi mostri la FRF e la FFT del segnale? Sapreste darmi qualche indicazione su come impostare il problema?
Grazie mille
Ciao!
----------------------------------------
AUTORE: 11106
DATA :14/12/2016 - 12:46:30
----------------------------------------
Ciao,
qui puoi trovare del materiale:
[url:351kbrbd]http://www.ni.com/example/8276/en/[/url:351kbrbd]
Posta/spiega la tua proposta, poi noi ti daremo qualche dritta.
----------------------------------------
AUTORE: 11102
DATA :14/12/2016 - 17:12:58
----------------------------------------
Ciao!
Io devo trovare almeno 5 frequenze proprie di un oggetto utilizzando lo shaker. Ho 3 accelerometri con anche la scheda di acquisizione dei segnali, e devo quindi creare il VI per riuscire a visualizzare queste frequenze proprie.
Dovrò quindi impostare un grafico su cui visualizzare la FRF proveniente dai miei accelerometri.
Ho configurato la scheda di acquisizione in NI Max e testato che gli accelerometri funzionino, però ora non so bene come sviluppare il VI.
Ho trovato le funzioni per la FRF e la FTT ma non so bene come realizzare il ciclo di lettura di tutti i segnali provenienti dai miei accelerometri.
Grazie
Ciao
----------------------------------------
AUTORE: 11106
DATA :15/12/2016 - 07:56:48
----------------------------------------
Vuoi fare l'analisi in tempo reale, cioè acquisisci e visualizzi l'FFT e FRF?
Oppure acquisisce per un certo tempo e alla fine fai l'analisi in frequenza?
----------------------------------------
AUTORE: 11102
DATA :15/12/2016 - 15:21:13
----------------------------------------
Ciao!
Posso fare l'analisi in tempo reale, oppure posso farla andare per un minuto ad esempio e poi visualizzare i risultati. A me interessano solo le prime 5 frequenze, quindi in teoria mi conviene farlo andare e visualizzare in tempo reale i valori, una volta individuati i primi 5 fermo l'esecuzione.
Grazie
Ciao!
----------------------------------------
AUTORE: 11106
DATA :16/12/2016 - 14:08:12
----------------------------------------
Facciamo un passo indietro.
Hai parlato di volerti ricavare la risposta in frequenza del sistema.
Ecciti lo shaker a frequenze diverse (quindi fai uno sweep in frequenza) e, per ogni frequenza, acquisisci la variabile di intersse sul tuo oggetto?
Oppure devi applicare una forma d'onda specifica allo shaker?
O altro?
----------------------------------------
AUTORE: 11102
DATA :16/12/2016 - 17:45:43
----------------------------------------
Ciao!
Si esatto io devo fare lo sweep delle frequenze e quindi per ogni frequenza acquisisco il mio valore.
Grazie
Ciao!
----------------------------------------
AUTORE: 11106
DATA :19/12/2016 - 11:36:40
----------------------------------------
Ci vuole sicuramente un ciclo FOR che di volta in volta applica una nuova frequenza e legge la variabile di interesse.
Senza una proposta da parte tua però, è difficile aiutarti.
----------------------------------------
================================================================================
Aiuto! Seriale-USB in cicli while
================================================================================
AUTORE: 11134
DATA :21/12/2016 - 17:13:40
----------------------------------------
Ciao a tutti,
vi espongo brevemente il mio problema: ho due cicli while che vengono eseguiti parallelamente.
Uno di questi cicli vede il messaggio in arrivo dalla USB.
L'altro ciclo viene eseguito ogni 10 msec e attraverso una Ni-DAQ legge i valori che si ottengono da un manometro.
Io vorrei fare in modo che al primo valore della USB corrisponda il primo valore del manometro.
I due cicli non funzionano però allo stesso modo: uno scatta ad evento cioè quando gli arriva un messaggio dalla USB, l'altro viene eseguito ogni 10 msec. Esiste un modo per far si che i due cicli si sincronizzino?
Come posso forzare un ciclo ad aspettare l'altro?
Ho già provato a mettere dei flag ma non va bene perchè non è perfettamente real-time e quindi quando mi trovo a fare la differenza dei valori letti dalla USB e dal manometro ottengo dei valori assurdi.
Grazie mille
----------------------------------------
AUTORE: 645
DATA :21/12/2016 - 17:45:16
----------------------------------------
Domanda: i dati letti ogni 10ms NON corrispondenti ad una lettura USB li perdi? Mi spiego meglio... Tra una lettura USB e l'altra la scheda NiDAQ legge un tot di valori dal manometro (mi sembra di capire): questi valori li usi? Potresti farne una media e affiancare la media al valore letto dalla USB quando su quest'ultima si presenta un evento.
Dico questo senza conoscere bene le esigenze del tuo programma.
Oppure potresti memorizzare dato e momento temporale di acquisizione su scheda NiDAQ e al momento della lettura dalla porta USB prendi il dato del manometro che ha i dati temporali più vicini all'istante temporale del dato USB.
Mi sembra di capire dal tuo post che non puoi modificare il programma... Altrimenti puoi sincronizzare i cicli: nel momento in cui si presenta il dato sulla porta USB visualizzi il dato dalla scheda NiDAQ (o potrebbe essere meglio visualizzare una media degli ultimi dati).
----------------------------------------
AUTORE: 11134
DATA :22/12/2016 - 08:12:06
----------------------------------------
Ciao e grazie per avermi risposto.
Avevo provato a fare come dici, cioè a prendere il dato del manometro solo dopo aver letto il dato in arrivo dalla USB.
Solo che non capisco una cosa: dal VISA Read vedo i messaggi in arrivo. Ma come faccio a capire quando ha cambiato messaggio? Cioè esiste qualche blocco o proprietà che mi dica: il messaggio che hai ottenuto ora è diverso dal precedente, o che mi dica: hai ricevuto il carattere di terminazione quindi hai un messaggio nuovo. Esiste? Ho già messo il carattere di terminazione e lui correttamente lo vede e ho già messo il Flush Receive Buffer dopo il Visa Read.
Perchè dal Visa Read nel read buffer quando finisce un messaggio rimane l'ultimo visto e cambia solo quando ne arriva uno nuovo. Mi servirebbe qualcosa o un flag che cambi il suo stato solo quando arriva un messaggio nuovo, del tipo: messaggio arrivato --> flag a True. Poi il flag passa a False mentre aspetta un messaggio nuovo. In questo modo credo che potrebbe funzionare ma non so come farlo. Mi serve qualcosa che capisca che ho un messaggio nuovo.
Non so se sono riuscita a spiegarmi. Grazie mille
----------------------------------------
AUTORE: 11106
DATA :22/12/2016 - 10:46:28
----------------------------------------
[quote:1abh4pvh]Cioè esiste qualche blocco o proprietà che mi dica: il messaggio che hai ottenuto ora è diverso dal precedente, o che mi dica: hai ricevuto il carattere di terminazione quindi hai un messaggio nuovo. Esiste?[/quote:1abh4pvh]
Puoi settare il carattere di terminazione usando l'opportuno property node([url:1abh4pvh]http://www.ni.com/tutorial/4256/en/[/url:1abh4pvh]).
Ti consiglio di dare un'occhiata anche a questo [url:1abh4pvh]http://digital.ni.com/public.nsf/allkb/3886687689CA29A086256E5B007BC61E[/url:1abh4pvh]. In questo articolo c'è scritto:
[quote:1abh4pvh]VISA Read for serial will return a number of bytes from the serial port buffer to your program. However, the amount of data that it returns depends on 3 important details about your settings and your serial data: your termination character, the amount of data requested, and the timeout period.
Serial VISA Read will stop reading when any of these statements are true:
The number of requested bytes is equal to or less than the number of bytes waiting to be read on the port, OR
The termination character has been received, OR
No more data is available from the serial port and the timeout period has elapsed without any data being received.
[/quote:1abh4pvh]
Quindi se setti correttamente il carattere di terminazione e scegli un numero di byte da leggere sufficientemente grande, il blocchetto VISA Read di ritorna tutta la stringa inviata dallo strumento fino al caratteri di terminazione.
[quote:1abh4pvh]Ma come faccio a capire quando ha cambiato messaggio? [/quote:1abh4pvh]
Quando il blocchetto read ti ritorna un valore (non stringa vuota oppure puoi direttamente leggerti il numero di byte letti, che è un output del blocchetto).
Se vuoi verificare che il messaggio sia cambiato, puoi usare uno shift register (o un feedback node) e verificare ad ogni lettura se il messaggio è diverso dal precedente.
Posta la tua proposta, così riusciamo meglio ad aiutarti
----------------------------------------
AUTORE: 645
DATA :22/12/2016 - 21:00:40
----------------------------------------
Come già indicato da sqrt(-1) potresti utilizzare uno Shift Register nel quale memorizzi l'ultimo valore e controlli se il valore attuale è diverso dal precedente ma nel caso di valori effettivamente uguali (nel senso che la misura rimane uguale in due acquisizioni successive) potrebbero esserci problemi.
In teoria una volta utilizzato il comando Flush Serial dovresti pulire completamente i dati e, di conseguenza, controllando successivamente se i Bytes at Port sono diversi da zero (quindi c'è un dato sulla porta) puoi decidere di acquisire il dato (dopo il comando Flush i Bytes disponibili dovrebbero essere zero se non sbaglio).
----------------------------------------
================================================================================
Estetica degli Xcontrol
================================================================================
AUTORE: 482
DATA :22/12/2016 - 08:59:32
----------------------------------------
...ma ciao!
Ho un paio di problemi estetici con un xcontrol.
ho creato un xcontrol ad hoc per l'inseirmento delle date nel mio programma.
Una volta piazzato nel front panel, lo vedo cosi' come l'ho creato.
Da front panel, gli cambio il colore del background, salvo e chiudo tutto oppure creo l'eseguibile.
Alla riapertura del VI o dell'eseguibile, l'Xcontrol è tornato trasparente.
Devo gestire i cambi di colori all'interno dell'xcontrol per farglieli tenere in memoria?
Altro problema.
Ho solo la caption visible in una certa posizione. (nell'xcontrol la caption non si vede).
Se gli cambio di posizione nel vi, resta tutto a posto, nell'eseguibile invece mi cambia la posizione.
Qualcuno di voi ha avuto esperienze simili? Sapete come risolvere?
grazie!
----------------------------------------
AUTORE: 43
DATA :23/12/2016 - 14:11:47
----------------------------------------
[quote="gepponline":6s8d1n0o]...ma ciao!
Ho un paio di problemi estetici con un xcontrol.
ho creato un xcontrol ad hoc per l'inseirmento delle date nel mio programma.
Una volta piazzato nel front panel, lo vedo cosi' come l'ho creato.
Da front panel, gli cambio il colore del background, salvo e chiudo tutto oppure creo l'eseguibile.
Alla riapertura del VI o dell'eseguibile, l'Xcontrol è tornato trasparente.
Devo gestire i cambi di colori all'interno dell'xcontrol per farglieli tenere in memoria?[/quote:6s8d1n0o]
Se la colorazione non deve cambiare, basta usare una Decoration.
Puoi anche imporgli uno "Scale Object with Pane" se vuoi mantenere lo sfondo in caso di Resize del tuo XControl
[quote="gepponline":6s8d1n0o]Altro problema.
Ho solo la caption visible in una certa posizione. (nell'xcontrol la caption non si vede).
Se gli cambio di posizione nel vi, resta tutto a posto, nell'eseguibile invece mi cambia la posizione.
Qualcuno di voi ha avuto esperienze simili? Sapete come risolvere?
grazie![/quote:6s8d1n0o]
Suppongo ma non sono certo, si tratti del solito problema delle font. Sostituisci x tutti i testi visibili del tuo Xcontrol le font "Dialog", "Application", "System" con delle font note.
Buon Natale. Buon Anno
bye
----------------------------------------
AUTORE: 482
DATA :23/12/2016 - 14:17:43
----------------------------------------
La seconda cosa dei font la provero' nel 2017 , per il colore invece no, purtroppo volevo poterlo cambiare a seconda dell'applicazione in cui lo mettero'.
Avevo già messo un decoration ma avevo lo stesso problema cambiando colore.
grazie e buone feste
----------------------------------------
AUTORE: 43
DATA :23/12/2016 - 14:32:28
----------------------------------------
[quote="gepponline":216081j1]La seconda cosa dei font la provero' nel 2017 , per il colore invece no, purtroppo volevo poterlo cambiare a seconda dell'applicazione in cui lo mettero'.
Avevo già messo un decoration ma avevo lo stesso problema cambiando colore.
grazie e buone feste
[/quote:216081j1]
Classic --> Classic Boolean --> Flat Square button
oppure
Classic --> Classic String &Path --> Simple String
o meglio
Classic --> Classic Numeric --> Color Box
Metti uno di questi indicatori in background e colorali opportunamente usando una proprietà del tuo XControl
tipo "ColorBgd" che dovrai creare.
bye
----------------------------------------
AUTORE: 482
DATA :23/12/2016 - 14:37:08
----------------------------------------
geniale escamotage!
Tempo pero' che una volta cambiato il colore, me lo reimposti al colore di default nell'eseguibile cosi'come fa adesso con le decoration o con lo sfondo del cluster..vedro'
grazie ancora!
----------------------------------------