================================================================================
Impostare la durata di esecuzione di un VI
================================================================================
AUTORE: 2802
DATA :07/01/2010 - 16:50:33
----------------------------------------
Ho creato un VI che viene eseguito quando clicco il controllo START sul front panel e termina l'esecuzione quando clicco sul controllo STOP sul front panel.
E' realizzato con 2 cicli while.
A questo punto voglio modificare il VI in modo da poter interrompere l'esecuzione sia cliccando su STOP sia impostando la durata dell'esperimento.
E' sufficiente mettere in OR nella condizione di terminazione del ciclo while il blocchetto ELIPSED time (quello che si trova da function palette--> execution control -->elapsed time) ?
Non capisco però la differenza pratica tra il blocchetto elapsed time e time delay!!
----------------------------------------
AUTORE: 2592
DATA :07/01/2010 - 21:08:44
----------------------------------------
Ciao,
L'elapsed time è il tempo trascorso da un cento istante iniziale e ti restituisce un booleano se è trascorso un certo tempo che imposti tu, mentre il time delay inserisce una pausa nel tuo codice.
Quindi è corretto come hai fatto tu usare l'elapsed time per il tuo VI.
Ciao,
----------------------------------------
================================================================================
Chiusura automatica di un VI
================================================================================
AUTORE: 2595
DATA :08/01/2010 - 13:23:42
----------------------------------------
Buongiorno ragazzi, apro questo 3d che chiedere se è possibile uscire automaticamente da un vi senza dover per forza cliccare sulla x in alto a destra. ho realizzato il mio pannello associando al pulsante "uscita programma" lo stop del vi, ma non capisco se c'è un modo per chiudere automaticamente la schermata. magari in fase di compilazione?
grazie a tutti.
----------------------------------------
AUTORE: 129
DATA :09/01/2010 - 05:20:38
----------------------------------------
Potresti usare la funzione quit labview dalla palette Programming/Application control.
Ricordati che questa funzione forza la chiusura dell'applicazione, quindi esguila sempre dopo aver eseguito tutte le procedure che vuoi siano eseguite sulla chiusura.
----------------------------------------
AUTORE: 2595
DATA :09/01/2010 - 20:48:06
----------------------------------------
[quote="nicola":3cy5y506]Potresti usare la funzione quit labview dalla palette Programming/Application control.
Ricordati che questa funzione forza la chiusura dell'applicazione, quindi esguila sempre dopo aver eseguito tutte le procedure che vuoi siano eseguite sulla chiusura.[/quote:3cy5y506]
ok grazie proverò
----------------------------------------
AUTORE: 301
DATA :12/01/2010 - 11:03:33
----------------------------------------
Mi intrometto.....
Io di solito lo faccio con gli application control.
----------------------------------------
AUTORE: 2595
DATA :12/01/2010 - 15:10:21
----------------------------------------
grazie mille per l'aiuto, funziona perfettamente. alla fine ho optato per la funzione quit labview
----------------------------------------
================================================================================
Connessione TCP
================================================================================
AUTORE: 2196
DATA :10/01/2010 - 01:05:34
----------------------------------------
Sto facendo delle prove di comunicazione tcp tra un server da terze parti scritto in c++ e un client scritto in labview.
Per aprire la connessione uso il blocco "TCP open connection" e per leggere le stringhe uso il"TCP Read".
Primo problema se la conessione è attiva, co il server ma questo non ha dati da trasmettere .... l'esecuzione dela vi si blocca ... probabilmente attende lo scadere del time out del blocco TCP read e subito dopo viene segnalato l'errore: "Error 56 occurred at TCP Read in main.vi
Possible reason(s):
LabVIEW: The network operation exceeded the user-specified or system time limit."
Come posso ovviare alla cosa ?
----------------------------------------
AUTORE: 2196
DATA :19/01/2010 - 10:34:10
----------------------------------------
MMM....mi sembra di capire che nessuno usa questo blocco c'è forse un alternativa ?
----------------------------------------
AUTORE: 2235
DATA :19/01/2010 - 10:42:27
----------------------------------------
riflettevo su questo
se utilizzando le applicazioni vi di esempio di cui all'apertura del post è possibile che la mia applicazione in c++ possa lavorando sulla stessa porta, direttamente leggere e spedire dati?
non capisco se con tale protocollo io in pratica possa generare un canale in cui sia labview che l'applicazione in c++ possano leggere e inviare dati tra di loro per poi performare date operazioni nei rispettivi ambienti.
grazie
----------------------------------------
AUTORE: 927
DATA :19/01/2010 - 11:08:02
----------------------------------------
Buddace: abbassa il timeout se vuoi che aspetti di meno, ma è normale che ci sia, le comunicazioni richiedono sempre un po' di tempo... E rendi parallelo il codice se possibile, in modo che il programma possa fare altre cose mentre comunica.
L'errore è altrettanto normale, devi essere tu a gestirlo; se vuoi che non succeda niente puoi usare il blocco Clear Errors.
Cromax: la connessione TCP è a doppio senso, entrambi i lati possono sia leggere sia scrivere
----------------------------------------
AUTORE: 2196
DATA :22/01/2010 - 13:05:39
----------------------------------------
Grazie snam proverò guanto prima
----------------------------------------
AUTORE: 2196
DATA :25/01/2010 - 08:51:21
----------------------------------------
Risolto! Grazie snam grazie per il consiglio!
----------------------------------------
================================================================================
messaggi per user
================================================================================
AUTORE: 2523
DATA :10/01/2010 - 21:23:44
----------------------------------------
Ciao a tutti e buon anno,
sapete se sia possibile far generare ad un codice scritto con labview 8.6 dei messaggi, i quali vengono cancellati
senza nessuna interazione dell'utente col sistema?
Mi spiego meglio: supponete che un codice debba caricare un file enorme. Per segnalare all'utente che il sistema
sta caricando il file, mi piacerebbe che comparisse un messagio del tipo wait e che questo rimanesse visualizzato fino al termine dell'operazione di lettura del file stesso. Al termini vorrei che il messaggio scomparisse automaticamente senza che
l'utente debba schiacciare tasti del tipo OK, ecc...
Potete aiutarmi.
Grazie in anticipo,
Chobin.
----------------------------------------
AUTORE: 129
DATA :10/01/2010 - 23:33:13
----------------------------------------
Un metodo semplice è inserire il vi finestra all'interno del vi che carica i file, il vi finestra deve essere impostato con call setup, scegliendo open when called e suspend when the callers end (sui nomi non me liricordo bene ma dovrebbero essere questi due.
Però per chiudere la finestra devi utilizzare il metodo frontpanel close.
Un modo è utilizzare completamente VIServer, ovvero il vi finestra viene aperto, eseguito, fermato e chiuso dal vi principale dell'applicazione, con il metodo Front panel Open e Front panel close.
----------------------------------------
AUTORE: 278
DATA :11/01/2010 - 05:26:18
----------------------------------------
Ciao,
ti segnalo 2 link che sono sicuro apprezzerai molto!!
[url=http://lavag.org/topic/10276-discuss-jki-progress-bar-dialog/:3k2ibsxr]Progress bar dialog[/url:3k2ibsxr]
[url=http://lavag.org/topic/10273-discuss-jki-please-wait-dialog/:3k2ibsxr]Please Wait Dialog[/url:3k2ibsxr]
Scarica il codice, provalo, modificalo a tuo piacere e, se vuoi, puoi aggiungere anche altre gif animate
buon lavoro!!!
----------------------------------------
AUTORE: 129
DATA :12/01/2010 - 06:00:09
----------------------------------------
Ti allego le immagini di un esempio (se vuoi importare il codice direttamente sul tuo vi, puoi trascinarli sul diagramma a blocchi diretamente, dopo averle salvate facendo salva oggetto con nome).
[attachment=2:vzosadb5]open_close.png[/attachment:vzosadb5]
[attachment=2:vzosadb5]open_close.png[/attachment:vzosadb5]
[attachment=0:vzosadb5]message.png[/attachment:vzosadb5]
----------------------------------------
================================================================================
Leggere dati da file xml
================================================================================
AUTORE: 2435
DATA :11/01/2010 - 09:34:38
----------------------------------------
Ciao a tutti...
ho la necessità di leggere dei dati presenti nel file xml allegato...
(ho modificato l'estensione da .xml a .txt per poterlo allegare)
sapete darmi qualche indicazione sul come fare??
e eventulmente un breve esempio??
ho provato a utilizzare l'esempio presente in LV861 "Load test configuration.vi" ma non ci sono riuscito..
grazie
----------------------------------------
AUTORE: 2435
DATA :11/01/2010 - 10:20:02
----------------------------------------
mi sono dimenticato di dire una cosa....
devo leggere solamente i dati presenti nella tabella "<tabPTCollaudoGruppi>".
intanto ho chiamato anche la national per avere altre info
----------------------------------------
AUTORE: 2435
DATA :11/01/2010 - 16:47:32
----------------------------------------
non importa...
mi ci è voluto un po di tempo ma ho risolto
grazie comunque
----------------------------------------
AUTORE: 645
DATA :21/01/2010 - 15:50:50
----------------------------------------
Guarda http://thinkinging.com/2008/01/21/using ... w-is-hard/ ...
Magari può essere utile
----------------------------------------
================================================================================
NI motion reference move
================================================================================
AUTORE: 2802
DATA :11/01/2010 - 12:11:52
----------------------------------------
Salve a tutti,
ho realizzato un VI in grado di azionare uno stepper motor con attuatore lineare. Volevo aggiungere un subVI in grado di posizinare l'asse al centro della corsa dell'attuatore.
Penso che la soluzione più conveniente sia utilizzare la reference move di NI Motion. Quello che non mi è chiaro è:
Una volta impostata una direzione iniziale di ricerca (es. forward), i limiti li trova lui in automatico?
In NI motion , add step--> reference move --> reference parameters a cosa serve la voce "Final Direction" (into limit or away from limit ). ?
occorre attivare il Reset position counters ?
----------------------------------------
AUTORE: 278
DATA :12/01/2010 - 06:30:12
----------------------------------------
Ciao,
prima di cimentarti con la programmazione di una scheda motion, ti consoglio vivamente di fare qualche prova con il MAX.
I limiti di un asse possono essere di tipo ottico o meccanico, in entrambi i casi, se impostato correttamente, l'asse si ferma una volta raggiunto tale limite.
Per "final direction" si intede l'ultimo movimento che il motore fa dopo aver toccato il limite.
Quando il motore raggiunge il limite devi considerare che necessita di qualche mm di spazio per decelerare ed arrestarsi. Il software della scheda motion, se correttamente configurato, recupera questo spazio di decelerazione muovendo il motore nel verso opposto fino a che il finecorsa non viene "disarmato".
A questo punto devi considerare che per alcuni tipi di motore (step) esiste un "gioco" meccanico che, a seconda del tipo di motore e del collegamento tra motore e asse, può essere dell'ordine di qualche decimo di mm ma anche oltre.
Final Direction serve proprio per "compensare" questo gioco meccanico, consentendotio di mettere "in tiro" il motore nel verso che ritieni + opportuno.
Spero di esseri stato utile
Buon lavoro
Dario
----------------------------------------
================================================================================
pubblicare su web un VI
================================================================================
AUTORE: 2857
DATA :11/01/2010 - 12:40:10
----------------------------------------
Salve a tutti, sono un nuovo utente labview e ho un problema:
ho creato un semplice VI che voglio pubblica in web, se provo a pubblicarlo in modalità snapshot oppure monitor non ho problemi. Ho invece difficoltà nel pubblicarlo in maniera embedded..mi appare una schermata bianca!!
La prima cosa che ho fatto è stata quella di scaricarmi LVRTE90min che dovrebbe essere il labview runtime da utilizzare con il mio labview 2009 ma niente. Allora ho provato a settare il web server tool>>option pero' i valori di defoult sembrano essere corretti..ho dato un'occhiata in tool>>option>>server VI ma anche qui non vedo niente di strano. Sicuramente sto sorvolando qualche settaggio fondamentale.. qualcuno sa darmi un'indicazione??
vi ringrazio in anticipo!!
----------------------------------------
AUTORE: 645
DATA :12/01/2010 - 08:34:08
----------------------------------------
Hai seguito la procedura automatica?
Se ti appare una pagina bianca potrebbe trattarsi di un problema con il pacchetto run-time...
Fai una prova usando il pc sul quale è installato LabView: se su questo pc riesci a visualizzare la pagina correttamente attraverso un browser e su un altro pc (sul quale non c'è LabView) hai problemi allora prova a ricontrollare il pacchetto run-time.
----------------------------------------
AUTORE: 2857
DATA :12/01/2010 - 15:33:10
----------------------------------------
Grazie del consiglio!!sono riuscito a risolvere..il problema era la porta di default impostata a 80. L ho cambiata ed è partito anche in modalità embedded!!
ciao alla prossima
----------------------------------------
================================================================================
Tabella con righe cancellabili
================================================================================
AUTORE: 2435
DATA :12/01/2010 - 10:46:35
----------------------------------------
Ciao a tutti...
Vi spiego quello che vorrei fare....
Ho una tabella dove sono contenuti tutti i dati acquisiti.
Vorrei che l'operatore possa selezionare una riga ed eliminarla..
Come si pò fare??
grazie
----------------------------------------
AUTORE: 2435
DATA :12/01/2010 - 17:02:02
----------------------------------------
Ho fatto in questo modo...
però non è il massimo in quanto il numero della riga da cancellare cambia solamente con l'evento double click....
mentre la riga viene selezionata direttamente con un unico click.
----------------------------------------
AUTORE: 927
DATA :19/01/2010 - 11:16:55
----------------------------------------
Se vuoi il numero della riga selezionata, lo ottieni molto semplicemente dal blocco Multicolumn Listbox nel diagramma a blocchi... prova a collegarlo a un indicatore numerico
----------------------------------------
AUTORE: 2435
DATA :21/01/2010 - 09:08:34
----------------------------------------
E' verissimo......che banalità....
pensare il tempo che ho perso per cercare qualche proprietà o evento utile
grazie
----------------------------------------
================================================================================
Vi per gestione dell'illuminazione..free?
================================================================================
AUTORE: 2784
DATA :12/01/2010 - 17:18:43
----------------------------------------
Esiste qualche vi utile e free per la gestione di illuminazione?? utile nella building automation...
Una cosa più semplice ma simile a questo...
http://www.sitemnet.it/pages_ita/prod_s ... 106ral.htm
----------------------------------------
================================================================================
Creare controllo con proprietà momdificabili
================================================================================
AUTORE: 2435
DATA :13/01/2010 - 09:42:11
----------------------------------------
Ciao a tutti....
Volevo creare un indicatore per la visualizzazione di un valore acquisito.
Ma che se gli clicco sopra o scelgo una proprietà l'indicatore diventa un controllo numerico...
In modo che l'operatore possa visualizzare il dato proveniente da uno strumento di misura o scegliere di inserirlo manualmente....
Avete qualche idea o suggerimento????
grazie
----------------------------------------
AUTORE: 2435
DATA :13/01/2010 - 13:14:04
----------------------------------------
Ho provato a utilizzare degli ocx della NI che usavo in vb....
ma diventa un po troppo elaborioso e non vorrei creassero dei problemi...
Quindi ho pensato di risolvere la cosa semplicemente nel seguente modo
----------------------------------------
AUTORE: 482
DATA :14/01/2010 - 08:11:23
----------------------------------------
Usa un controllo normale.
Poi guardando la proprietà Key Focus fai in modo che quando non c'e' il focus, il controllo, tramite la proprietà Disabled, sia disabilitato e quindi, in pratica, diventa un indicatore.
Mentre pero' scrivevo queste due righe pensavo....
..ma se quando gli clikki sopra devi poterci scrivere...beh allora è un normalissimo controllo.
Semplicemente quando gli devi passare i valori lo fai tramite una variabile locale.
QUindi morale della facvola, credo tu abbia una lacuna riguardo alle variabili locali.
Se dal Block diagram, clikki su un oggetto qualsiasi di tipo Terminale col tasto destro e poi fai create->local variable, ti si crea un oggetto che poi sempre col tasto destro puoi impostare che sia in lettura o in scrittura e quindi puoi collegarlo a qualsiasi filo che contenga un dato dello stesso tipo e quindi leggere o scrivere un dato in un controllo, indipendentemente che questo sia un controllo o un indicatore (la stessa cosa che faresti tamite la proprietà Value, ma molto piu' semplice).
Poi se vuoi puoi comunque fare vedere o meno i bottoni di incremento e altri abbellimenti estetici.
----------------------------------------
AUTORE: 2435
DATA :14/01/2010 - 08:56:32
----------------------------------------
Sinceramente non cedo di avere alcuna lacuna sulle variabili locali....
Che poi mi venga criticato quello che ho fatto mi va benissimo...
A me sinceramente sembra una buona idea e anche abbastanza leggibile(ovviamente ho inglobato tutto all'interno di un vi)....e anche riutilizzabile rispetto a dover gestire tutte le local variable..considera che devo gestire 10 misure in questo modo..
Quindi mi ritrovo con un referece relativo al mio controlo da modificare un bolean che mi dice se il funzionameto è manuale o automatico e un ingresso che mi dice il valore letto dallo strumento....
Se vuoi fai un'esempio e postalo utilizzando le local varable e così lo confrontaimo
----------------------------------------
AUTORE: 482
DATA :14/01/2010 - 11:14:47
----------------------------------------
Ho parlato di lacuna perchè mi è sembrato strano non rpenderle in considerazione, e siccome è capitato spesso che utenti nuovi a labview, non sapessero della possibilità della creazioen di variabili locali, pesavo fosse il caso in questione.
Se ho sbagliato e ti sei sentito offeso ti chiedo scusa.
In ogni caso ecco l'esempio cosi' come l'ho immaginato io, con l'utilizzo di una variabile. Non cambia granchè.
Quello che non mi è chiaro è forse quello che vuoi realizzare, legato al titolo del topic.
Nel senso che le proprietà in gioco sono poche (se vogliamo considerare anche il valore una proprietà) si tratta solo di selezionare quale valore passare in uscita in base ad un booleano. che poi abbia gli increment visibili o meno è solo estetica.
Oppure ho perso qualche pezzo?
----------------------------------------
================================================================================
Controller HITACHI LCD HD44780
================================================================================
AUTORE: 680
DATA :13/01/2010 - 16:18:33
----------------------------------------
Ciao, devo poter gestire un display LCD con controller Hitachi HD44780.
Avrei trovato questi file di esempio: [url:3qg7kpuq]http://decibel.ni.com/content/docs/DOC-2741[/url:3qg7kpuq] dal sito di NI ma non avendo l'ultima versione di LV installata, non riesco ad aprirli...
Se qualcuno per cortesia riuscisse a convertirli per LV 8.5 gliene sarei grato!
Grazie mille...
----------------------------------------
================================================================================
trasformata di hough
================================================================================
AUTORE: 2266
DATA :14/01/2010 - 11:47:02
----------------------------------------
ciao a tutti,
qualcuno di voi ha mai dovuto per caso implementare la trasformata di hough in labview??
mi farebbe comodo in un progetto che sto realizzando, nel quale si vuole individuare la posizione della pupilla in immagini acquisite con webcam e illuminazione a IR. ho già realizzato qualche vi che sfrutta le funzioni disponibili, ma il top (secondo la letteratura) si ottiene con filtro di canny e trasformata di hough. mentre il primo è disponibile in "blocchetto vi", il secondo purtroppo non lo è...
se qualcuno avesse già avuto a che fare con questo problema mi faccia perfavore sapere che soluzioni ha adottato.
io uso labview 7.1, ho installato il 2009 per vedere se c'era qualcosa in più ma fino ad ora non ho trovato niente
grazie a tutti
----------------------------------------
================================================================================
Schermate sovrapposte
================================================================================
AUTORE: 2595
DATA :14/01/2010 - 18:55:20
----------------------------------------
Buona sera tutti ragazzi
ancora una volta ho bisogno del vostro aiuto
.
mi ritrovo con un problema non particolarmente grave, ma abbastanza fastidioso, vi spiego in breve il tutto.
Ho un programma strutturato in modo tale che alcune finestre si sovrappongono ad altre quando vengono premuti determinati tasti, vi allego un'immagine per rendere l'idea (non relativa al programma)
[img:3newc2py]http://img191.imageshack.us/img191/6812/immagine1r.jpg[/img:3newc2py]
La schermata più piccola viene visualizzata quando premo un tasto, il programma comanda una scheda che esegue una misura di resistenza e mi visualizza il risultato, cliccando su ok si chiude e torno alla schermata principale, fino a qui tutto bene il problema nasce quando anzichè cliccare su ok per far chiudere la schermata numero due, si clicca sulla prima schermata, magari per sbaglio, causando la scomparsa della prima schermata e l'impossibilità di ripristinarla.
Nel vi property, ho settato il tutto per togliere il bordo superiore ed i tasti run stop ecc.ecc.e poi compilato il tutto, ma non riesco a capire cosa settare per far si che la seconda schermata non scompaia quando si clicca sulla prima schermata-
grazie a tutti
----------------------------------------
AUTORE: 129
DATA :14/01/2010 - 21:50:23
----------------------------------------
Se vai in Properties/windows appareance scegli customize e modifica il window behavior.
Rciordati che se usi MODAL la finestra rimane sempre in primo piano.
----------------------------------------
AUTORE: 2595
DATA :17/01/2010 - 11:04:31
----------------------------------------
ho risolto settando tutte le finestre che si aprono in questo modo
[url=http://img25.imageshack.us/i/immagineuwj.jpg/:2cf516ex][img:2cf516ex]http://img25.imageshack.us/img25/438/immagineuwj.jpg[/img:2cf516ex][/url:2cf516ex]
grazie ancora
----------------------------------------
================================================================================
Prestazioni: Code vs Array
================================================================================
AUTORE: 1078
DATA :15/01/2010 - 08:00:24
----------------------------------------
Ciao a tutti,
ho realizzato un software per il monitoraggio di messaggi CAN. Una volta letti i messaggi vengono archiviati in una coda che come dati ha un cluster composto da una stringa e da un'altro cluster contenente due double. Mi domandavo se a livello di prestazioni la soluzione coda da me attualmente utilizzata è quella più conveniente tra le opzioni: Array di stringhe in variabile globa; Array di cluster (con la stessa configurazione di quello attualmente utilizzato dalla coda) in variabile globale; coda con dati stringa. Secondo voi quale tra queste quattro soluzioni è la più conveniente in termini di risparmio di tempo e risorse utilizzate nell'inserire il dato, leggerlo e trasportarlo? Faccio presente che i dati sono condivisi da più loop paralleli.
Grazie a tutti anticipatamente.
----------------------------------------
AUTORE: 129
DATA :16/01/2010 - 05:01:42
----------------------------------------
Io userei la coda, è l'ideale quando hai passaggio di dati tra produttore e consumatori (loop nello stesso vi o vi esterni).
Per prestazioni maggiori puoi agire sulla struttura dei dati (limita l'uso del cluster a 1 solo (evita quello interno e porta idue numerici nel cluster principale e usa il tipo di dato + idoneo).
In Pratica accodi un cluster con una stringa e due double.
----------------------------------------
AUTORE: 1078
DATA :18/01/2010 - 07:48:48
----------------------------------------
Grazie per la risposta.
Effittivamente utilizzando le code, ben dimensionate aumentano le prestazioni del programma. Per comodità ho però utilizzato una coda che porta come dati un'unica stringa. Questo perchè nel salvare i dati in un report con formato txt mi trovo la stringa già pronta senza dover fare altre elaborazioni. Penso comunque che a livelli di prestazioni genarali il metodo che hai indicato tu sia ancora più prestante.
Buona giornata e buon lavoro.
----------------------------------------
AUTORE: 43
DATA :18/01/2010 - 09:28:26
----------------------------------------
[quote="Ricky":3l8lcwkf]Ciao a tutti,
ho realizzato un software per il monitoraggio di messaggi CAN. Una volta letti i messaggi vengono archiviati in una coda che come dati ha un cluster composto da una stringa e da un'altro cluster contenente due double. [/quote:3l8lcwkf]
Quindi il tipo di dato della coda è un cluster che contiene 2 cluster. Non sarebbe meglio un unico cluster che contiene una stringa e 2 double?
[quote="Ricky":3l8lcwkf]Mi domandavo se a livello di prestazioni la soluzione coda da me attualmente utilizzata è quella più conveniente tra le opzioni: Array di stringhe in variabile globa; Array di cluster (con la stessa configurazione di quello attualmente utilizzato dalla coda) in variabile globale; coda con dati stringa. Secondo voi quale tra queste quattro soluzioni è la più conveniente in termini di risparmio di tempo e risorse utilizzate nell'inserire il dato, leggerlo e trasportarlo? Faccio presente che i dati sono condivisi da più loop paralleli.[...][/quote:3l8lcwkf]
beh! io direi che dipende molto da cosa fanno questi loop paralleli.
Quando le code non erano ancora disponibili nativamente in LabVIEW, si usavano occorrenze per sincronizzare loop paralleli ed i dati potevano essere messi in VI Functional Global: in questo caso i VI FG non implementavano solo le funzionalità tipiche delle code (Push, Pop), ma anche funzionalità "custom".
In questi tempi sto lavorando anch'io con CAN, perciò mi chiedo questi loop paralleli cosa facciano, soprattutto xchè stai parlando di un SW di monitor.
Francamente oltre alla visualizzazione ed alla memorizzazione su disco non so cosa Tu ci debba fare...
Cmq l'uso di una coda presuppone (secondo me) che possano esserci 1 o + processi produttori che pushano dati ma un solo processo che li elabora.
Tu come hai fatto?
bye
----------------------------------------
================================================================================
Problema con eseguibile
================================================================================
AUTORE: 2523
DATA :16/01/2010 - 16:26:50
----------------------------------------
Ciao a tutti.
Vi scrivo perchè ho un problema con la creazione di un esegubile con Labview 8.6.
Non è la prima volta che creo degli eseguibili con Labview, ma invece è la prima volta che
mi si verificano i warning che ora vi elencherò.
In particolare quando, alla fine della creazione dell'applicazione dell'eseguibile, genero la "preview",
mi vengono generati i seguenti warning :
LabVIEW prevented a file name collision during the build. Duplicate file names cannot be copied to the same destination. You can rename files as part of the build process to avoid name conflicts.
The following files were moved to a unique location:
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append Control Image to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append Control Image to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append File to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append File to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append Horizontal Line to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append Horizontal Line to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append Hypertext Link Anchor to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append Hypertext Link Anchor to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append Image to Report (path).vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append Image to Report (path).vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append Image to Report (string).vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append Image to Report (string).vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append List to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append List to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append Numeric Table to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append Numeric Table to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append Report Text (num).vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append Report Text (num).vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append Report Text (str).vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append Report Text (str).vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append Text Table to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append Text Table to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Append User Formatted HTML to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Append User Formatted HTML to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Clear Report Text.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Clear Report Text.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Clear Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Clear Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Get Report Settings.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Get Report Settings.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Get Report Type.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Get Report Type.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Image in Header or Footer.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Image in Header or Footer.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\Indent Subsquent Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\HTML\Indent Subsquent Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\New Report Line.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\New Report Line.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\New Report Page.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\New Report Page.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\
ew report subVI.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\
ew report subVI.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\Outdent Subsquent Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\HTML\Outdent Subsquent Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Print Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Print Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Save Report to File.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Save Report to File.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Set Report Font.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Set Report Font.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Set Report Footer Text.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Set Report Footer Text.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Set Report Header Text.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Set Report Header Text.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Set Report Margins.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Set Report Margins.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\Dispose Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\NIReport.llb\HTML\Dispose Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\Append image and delete if possible.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\Standard Report\Append image and delete if possible.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\Append Section Break to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\Standard Report\Append Section Break to Report.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\CatchAndConvertInvalidImageTypes.vi
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\printing\ReportDocExtensions.llb\Standard Report\CatchAndConvertInvalidImageTypes.vi
Sapete perchè mi nascono questi warning? Cosa ho fatto di sbagliato per causare questa "collisione" tra i file elencati?
Grazie in anticipo per qualsiasi aiuto.
Ciao,
Chobin.
----------------------------------------
AUTORE: 129
DATA :16/01/2010 - 16:45:06
----------------------------------------
Mi capita anche a me, ed è dovuto al fatto che nel progetto o nelle directory di destinazione sono presenti duplicati di quei vi che hai in elenco.
Probabilmente (o almeno così è nel mio caso) hai salvato lo stesso vi in locazioni differenti e quindi quando compila ti dice : Attento non puoi stare con un piede in due scarpe, definisci una scarpa(directory) univoca.
Dal Project Explorer, guarda la cartella dependencies, se hai dei vi con il simbolo di pericolo/attenzione, fai tasto dx e seleziona resolve conflict.
Oppure dando un occhiata al messaggio di errore, si tratta totalmente di National Instruments e quindi sono normalmente nella directory ...programmi/national instruments/labview x.x, probabilmente però ti ritrovi all'interno della cartella di progetto gli stessi vi, questi li puoi elminare.
Finchè i vi sono identici, nessun problema, ma immagina il disastro quando modificherai uno dei vi e invece l'altro che porta lo stesso nome non viene modificato.
Bisogna risolvere assolutamente anche se è solo un warning.
----------------------------------------
AUTORE: 487
DATA :18/01/2010 - 07:43:23
----------------------------------------
Ciao a tutti,
è capitato anche a me e con i medesimi files. Posso assicurarti Nicola che non ho mai duplicato i sopracitati files; secondo te potrebbe essere un qualche problema d'installazione di Labview? Quando mi è capitato non avevo il tempo di indagare ulteriormente, però è senzaltro un problema da risolvere poichè, oltre alla questione sollevata da Nicola, io mi ritrovo ad avere un programma compilato contenente l'eseguibile e diverse directory ("NI_HTML","NI_report", ecc.) con i files sorgenti.
----------------------------------------
AUTORE: 482
DATA :18/01/2010 - 08:49:46
----------------------------------------
non è questione di duplicati ma di classi.
Il nuovo Vision usa le classi e ste cacchio di classi si portano dietro dei problemi quando si crea l'eseguibile o meglio, quando si crea l'eseguibile dopo esser pasati dalla versione 8.x alla versione 9.
Ho risolto questo problema ma non mi ricordo piu' come.
C'e' un cacchio di flag da segnare nella creazione dell'eseguibile mi pare..
Forse quello nell avoce advanced che dice use Labview 8.x file layout.
prova e fammi sapere.
----------------------------------------
AUTORE: 43
DATA :18/01/2010 - 09:40:19
----------------------------------------
Questo può esserti utile
http://digital.ni.com/public.nsf/allkb/ ... enDocument
La cosa brutta di queste classi è che non possono essere "inglobate" nell'unico EXE.
interessante quindi il suggerimento di raccogliere i VI di queste classi (sparpagliati in files dentro delle cartelle create allo stesso livello di dir dell'exe) in librerie e rinominare tali librerie (.llb) in dll.
Quelli della NI sono furbi come delle faine!!!
bye
----------------------------------------
AUTORE: 487
DATA :18/01/2010 - 10:39:56
----------------------------------------
[quote="gepponline":4fca0xl6]C'e' un cacchio di flag da segnare nella creazione dell'eseguibile mi pare..
Forse quello nell avoce advanced che dice use Labview 8.x file layout.[/quote:4fca0xl6]
nel mio caso il flag di cui parli era già selezionato. Ho provato a deselezionarlo e tutto sembra essere andato a posto, però attualmente non ho la possibilità di provare l'eseguibile per cui non posso essere sicuro che funzioni tutto.
[quote="paracarro":4fca0xl6]La cosa brutta di queste classi è che non possono essere "inglobate" nell'unico EXE.[/quote:4fca0xl6]
se così fosse l'eseguibile che ho creato non dovrebbe funzionare: proverò poi vi farò sapere.
Grazie
----------------------------------------
AUTORE: 43
DATA :18/01/2010 - 11:08:59
----------------------------------------
[quote="coma":4zgp6n83][quote="paracarro":4zgp6n83]La cosa brutta di queste classi è che non possono essere "inglobate" nell'unico EXE.[/quote:4zgp6n83]
se così fosse l'eseguibile che ho creato non dovrebbe funzionare: proverò poi vi farò sapere.[/quote:4zgp6n83]
Ti consiglio di riguardare il link del post precedente cioè
[url=http://digital.ni.com/public.nsf/allkb/2AE85CF95217E60786257540000D818C?OpenDocument:4zgp6n83]Building an EXE in LabVIEW 8.6 using the Report Generation Toolkit[/url:4zgp6n83]
e, fra i "Related Links:" del medisimo guardati anche
[url=http://digital.ni.com/public.nsf/allkb/47272B69E2C167DB862574AC006A258B?OpenDocument:4zgp6n83]Managing the Resulting Files from a Build Containing LabVIEW Classes[/url:4zgp6n83]
ed anche
[url=http://digital.ni.com/public.nsf/allkb/FB9A11C924883B0C8625742D0059D55B?OpenDocument:4zgp6n83]Name Collision Occurs When Building My LabVIEW Executable[/url:4zgp6n83]
Se il Tuo codice passa per "Excel class path.vi" per esempio, non vedo come possa funzionare l'accesso a quella classe nell'exe. (devi cmq installare il tutto su un PC senza ambiente di sviluppo LabVIEW...)
Forse il problema della "sparpagliatura" del codice su + files llb rinominati in dll, si può risolvere con LabVIEW 2009 con il quale è possibile riprodurre all'interno dell'exe la gerarchia di dir dell'ambiente sorgente
bye
----------------------------------------
AUTORE: 487
DATA :18/01/2010 - 12:56:09
----------------------------------------
[quote="paracarro":3pwry7h2]Forse il problema della "sparpagliatura" del codice su + files llb rinominati in dll, si può risolvere con LabVIEW 2009 con il quale è possibile riprodurre all'interno dell'exe la gerarchia di dir dell'ambiente sorgente[/quote:3pwry7h2]
Credo che sia proprio così, infatti io utilizzo Labview 2009 e l'eseguibile che ho creato in precedenza funziona perfettamente.
Ciao
----------------------------------------
AUTORE: 482
DATA :18/01/2010 - 13:08:10
----------------------------------------
Aspetta..forse mi è tornato in mente qualcosa.
Praticamente se aggiornavi i vari vi e il toolkit alla versione 2009, automaticamente ti flaggava quella voce che ti dicevo 8.x ecc.
Bisogna andare manualmente a rimuoverlo e basta e tutto funziona.
Non so perchè ne per come ma io l'ho fatto seguendo le indicazioni che mi erano state date, forse dall'assistenza national, e tutto ha funzionato.
----------------------------------------
AUTORE: 487
DATA :18/01/2010 - 13:24:36
----------------------------------------
[quote="gepponline":2dkfghw0]Aspetta..forse mi è tornato in mente qualcosa.
Praticamente se aggiornavi i vari vi e il toolkit alla versione 2009, automaticamente ti flaggava quella voce che ti dicevo 8.x ecc.
Bisogna andare manualmente a rimuoverlo e basta e tutto funziona.
Non so perchè ne per come ma io l'ho fatto seguendo le indicazioni che mi erano state date, forse dall'assistenza national, e tutto ha funzionato.[/quote:2dkfghw0]
OK, per me è andato proprio così e l'ho scoperto grazie a te. Grazie.
Era un problema vecchio, ma all'epoca non ho avuto tempo di risolverlo (e di contattare National) e visto che comunque tutto funzionava non gli avevo dato grossa importanza. Adesso, grazie a questo post, mi è tornato in mente quello che avevo lasciato in sospeso. Grazie ancora
----------------------------------------
================================================================================
aiuto per uso tcp vi
================================================================================
AUTORE: 2235
DATA :18/01/2010 - 14:06:43
----------------------------------------
Buonasera a tutti
ho il seguente problema. Sto studiando il funzionamento dei vi presenti negli esempi di labview 8.2 e in particolare simple data client. vi e il simple data server.vi .
Il mio problema è che dovrei fare dialogare una applicazione per acquisire dati scritta in labview 8.2 con una applicazione scrittta in c++ esterna da me programmata.
Ho l'esigenza di far comunicare le due applicazioni utilizzando il protocollo tcp/ip anche se sono sullo stesso pc locale.
L'applicazione in labview deve acquisire i dati durante un dato tempo (funzione principale di acquisizione del flusso dati durante un esperimento) ma anche poter passare dei dati numerici quando l'applicazione in c++ lo richiede. Nello stesso tempo l'applicazione in labview deve attendere un dato numerico dalla applicazione in c++ per poter poi eseguire delle altre operazioni (ad esempio il controllo della apparecchiatura durante l'esperimento).
Volevo capire se potevo utilizzare per questa interazione i vi di cui sopra e del perchè vi sia nell'esempio simple data client.vi settato come byte to read il valore integer 4. Nel miocaso devo poter scambiare dati double le cui dimensioni non sono note a priori per cui non so cosa mettere al posto di 4.
in alternativa ho trovato dei vi di esempio, il tcp communicator active.vi e quello passive dove compare una stringa /04 utilizzata per correggere il dato che invio o ricevo tramite tcp ma non capisco perchè usa tale stringa e se è associata al valore 4 di cui sopra. A cosa serve? Come devo cambiarla? E' forse meglio usare tali vi rispetto ai primi citati?
grazie
cromax
----------------------------------------
================================================================================
acquisizione real time con webcam
================================================================================
AUTORE: 2644
DATA :21/01/2010 - 16:06:51
----------------------------------------
Salve a tutti
ho la necessità di analizzare delle immagini riprese da una webcam per poi analizzarle.
Ho Labview 8.6, NI Vision development module 8.5, Vision Acquisition Software 8.6 e ni_imaq_usb_installer_86. Nonostante ciò credo che la librerie IMAQusb non si sia installata infatti come in figura non c'è il modulo IMAQ USB.
Ho provato a installare più volte il tutto ma non risolvo il problema.
Con Vision assistant riesco a rilevare la webcam e ad acquisire ma in LV no.
Come posso fare??
grazie
----------------------------------------
AUTORE: 278
DATA :22/01/2010 - 01:35:37
----------------------------------------
Ciao,
ti rimando a [url=http://www.ilvg.it/forum/viewtopic.php?f=1&t=4346&p=19337#p19337:2vguvnqx]questa[/url:2vguvnqx] discussione trattata qualche tempo fa.
Scarica e dinstalla i driver webcam USB e fai qualche prova, se hai ancora difficoltà noi siamo qui
Buon lavoro
----------------------------------------
AUTORE: 482
DATA :22/01/2010 - 07:55:28
----------------------------------------
[quote="alduuu":21it4amu]Nonostante ciò credo che la librerie IMAQusb non si sia installata infatti come in figura non c'è il modulo IMAQ USB.[/quote:21it4amu]
Non esiste la paletta IMAQ USB.
Le webcam e telecamere USB, una volta installati i driver e il modulo (che nelle ultime versioni è già intergrato nel vision) le telecamere USB vengono lette con i moduli standard IMAQdx che grazie ai moduli USB, riescono ad accedere ai driver di windows per leggere le webcam.
----------------------------------------
AUTORE: 2644
DATA :22/01/2010 - 15:00:45
----------------------------------------
Grazie a tutti per le risposte.
Sto provando ad usare gli esempi imaqdx, ma il problema fondamentale credo che in MAX non è visualizzata nessuna periferica, e quindi non conosco i parametri (camera name) da inserire per l'acquisizione. Ho letto la guida di imaqdx e mi dice che dovrei trovare la periferica in MAX.
Può essere che la webcam (Trust wb-1400) non è supportata?
----------------------------------------
AUTORE: 2644
DATA :22/01/2010 - 15:01:50
----------------------------------------
Dimenticavo di ricordare che con vision assistant riesco tranquillamente ad acquisire
----------------------------------------
AUTORE: 482
DATA :22/01/2010 - 15:06:23
----------------------------------------
Tu hai scritto:
[quote:1dt8sraz]Con Vision assistant riesco a rilevare la webcam e ad acquisire ma in LV no[/quote:1dt8sraz]
QUindi la webcam funziona e si puo' usare.
Ora devi aprire il max (meglio se l'ultima versione), e guardare siotto Devices & Interfaces.
Troverai NI-IMAQdx Devices, li sotto ci sarà la tua telecamera che si chiamerà tipo cam3.
Quello è il camera name. Se la vedevi col vision assistant, la devi vedere anche qui.
Credo che tu poss afare una prova funzionante creando un analisi col vision assistant e facendo oi la creazione automatica del codice Labview.
----------------------------------------
AUTORE: 2644
DATA :31/01/2010 - 13:07:30
----------------------------------------
Eccomi di ritorno
Salve a tutti
dopo un po' di prove sono riuscito ad acquisire in realtime quello che mi serve; il mio problema ora sorge nell'analizi del materriale acquisito.
Mi spiego: ho realizzato un vi che mi permette di acquisire in real time in modo continuo tutto ciò ripreso dalla webcam senza salvare perchè non ne ho bisogno. Il mio scopo è quello di poter identificare l'accensione di una spia di un quadro di controllo ripreso dalla webcam. Avevo pensato di utilizzare il IMAQ Light Meter (Rectangle) VI che mi dà la possibilità di monitorare la luminosità di una porzione dell'immagine per poi gestirla con una soglia... ovvero quando la luminosità supera una soglia impostata si attiva un warning.
Il problema è che il IMAQ Light Meter (Rectangle) VI mi restituisce sempre lo stesso errore: IMAQ Histograph Invalid image type.
Devo convertire le immagini in ingresso??
Grazie a tutti
In allegato le immagini dell'errore e delle specifiche del subVI usato
Allego anche il Vi per eventuali correzioni
----------------------------------------
AUTORE: 645
DATA :02/02/2010 - 11:20:10
----------------------------------------
Domandona... Il modulo IMAQ-USB mi permette di interfacciarmi con webcam e altri sistemi di ripresa USB... ma senza il modulo Vision poi non posso fare nulla?
O meglio... solo con IMAQ-USB posso scattare foto e salvare le immagini?
Eventualmente poi con il modulo Vision posso elaborarle?
----------------------------------------
AUTORE: 2644
DATA :02/02/2010 - 18:19:02
----------------------------------------
considera che senza il modulo Vision non puoi neanche installare il modulo usb.
----------------------------------------
AUTORE: 645
DATA :05/02/2010 - 09:55:38
----------------------------------------
Grazie!
----------------------------------------
AUTORE: 2435
DATA :08/03/2011 - 17:17:32
----------------------------------------
Ciao a tutti,
sto utilizzando lo stesso Vi IMAQ Light Meter (Rectangle) e riscontro continuamente lo stesso problema...
Da cosa è dovuto??e' da un pezzo che ci sbatto la testa..
----------------------------------------
AUTORE: 482
DATA :09/03/2011 - 07:14:25
----------------------------------------
Credo che l'errore dica tutto.
Invalid image type
Magari quel modulino accetta solo immagini a 8 bit e tu gli ne mandi una a 32 o viceversa.
Le soluzioni possono essere 2.
1)Convertire l'immagine via software
2) Nei settaggi della telecamera dal max, impostare il tipo di immagine.
Io ci ho litigato giusto ieri per un errore simile.
La mia telecamera USB monocromatica, restituiva comunque un immagine a 32 bit di default (nonostante l'immagine fosse in scala di grigi).
Mentre nel pc di sviluppo avevo già cambiato questo settaggio portando l'immagine a 8 bit, nel pc target mi ero dimenticato di farlo, ma vedendo l'immagine comunque in bianco e nero, ci ho messo una vita prima di capire che l'errore stava li!
----------------------------------------
AUTORE: 2435
DATA :09/03/2011 - 13:25:42
----------------------------------------
Ciao grazie delle informazioni molto utili
[quote="gepponline":1wj7rfft]Ora devi aprire il max (meglio se l'ultima versione), e guardare siotto Devices & Interfaces.
Troverai NI-IMAQdx Devices, li sotto ci sarà la tua telecamera che si chiamerà tipo cam3.[/quote:1wj7rfft]
il mio problema ora è che sto utilizzando la webcam incorporata del PC e non riesco a trovare la telecamera sotto il Max..
E' normale?
grazie ancora automatica del codice Labview.
----------------------------------------
AUTORE: 482
DATA :09/03/2011 - 15:25:38
----------------------------------------
Il fatto di non vederla in max, puo' essere dovuto a qualche problema con il directshow di quella webcam.
Pero' se ahi un tool qalsiasi per gestire quella telecamera, magari puoi cambiare i settaggi da li.
Magari devi scaricare i driver directshow per quella webcam, cosi' la vedresti anche in MAX.
----------------------------------------
AUTORE: 2435
DATA :09/03/2011 - 15:51:53
----------------------------------------
Tornando a quanto detto prima,il fatto dell'errore sembra proprio dovuto all tipo di immagine che restituisce la telecamera..
Quindi la soluzione più plausibile è settare via max il tipo di risoluzione..
----------------------------------------
================================================================================
Ciclo di zero e Z index
================================================================================
AUTORE: 482
DATA :22/01/2010 - 15:12:15
----------------------------------------
...ma ciao!
ho un attuatore con encoder lineare. Questo attuatore dovrebbe avere 2 o 3 zeri.
Lavorando con una scheda di acquisizione DAQmx come faccio a stabilire quando arrivo ad uno zero e a quale zero sono arrivato?
Non trovo nessun modulo di acquisizione che mi permetta di estrarre lo stato dei tre segnali A,B e Z ma solo un riferimento alla Z nel modulo di inizializzaazione del Counter Input Linear Encoder che pero' non capisco come possa funzionare nel caso di piu' zeri.
----------------------------------------
================================================================================
ListBox: additem, come ?
================================================================================
AUTORE: 2196
DATA :25/01/2010 - 08:58:21
----------------------------------------
Domanda banale...ho letto l'help Su labview dell'oggetto in questione ma non ho capito come fare ad aggiungere un elemento in coda ? Anzi ingenerale la descrizione delle proprietà delle listbox non sono chiare...per esempio come so quante righe ci sono ? Come faccio ad svuotare la listbox ?
----------------------------------------
AUTORE: 482
DATA :25/01/2010 - 10:09:27
----------------------------------------
Ma ciao!
c'e' una properies che si chiama Number of rows che ti dice quanti elementi ci sono.
Per aggiungere un elemento basta che vai sul controllo con lo strumento di editing e scrivi il nome dell'elemento. Dando invio, passi al successivo.
Solitamente, per lavorare sugli elementi si usa la proprietà Item Names che vede il controllo coem un array, e quindi puoi manipolare il tutto da li, aggiungendo ed eliminando dei valori.
----------------------------------------
AUTORE: 2196
DATA :25/01/2010 - 11:03:12
----------------------------------------
Ok grazie per la risposta....quindi per aggiungere un elemento devo prima legggere la tabella da item names , aggiungergli la nuova riga e scrivere il risultato in item names.....un pò complicato mia spettavo una proprietà stile listbox di vb6.
----------------------------------------
================================================================================
azzeramento grafici e memorizzazione dati
================================================================================
AUTORE: 2712
DATA :25/01/2010 - 11:35:06
----------------------------------------
salve ragazzi
è da un paio di mesi che sto progettando un programma per il controllo di uno strumento di misura
vorrei migliorare l'algoritmo e ho necessità di riazzerare tutti i valori nei grafici (waveform chart)
come posso fare ??? non riesco a riazzerarli nemmeno andando manualmente a cliccare su "reinitialize to default value".
ho necessità anche di memorizzare in un unico file dati numerici (array dei valori misurati + loro manipolazioni) e stringhe di carattere ma non so proprio come fare
qualcuno può aiutarmi???
----------------------------------------
AUTORE: 645
DATA :25/01/2010 - 13:35:24
----------------------------------------
Se clicchi sul grafico con il tasto destro del mouse, "Data Operations" --> "Clear Chart".
Se clicchi sul grafico (sempre con il tasto dx) mentre il VI è in esecuzione questo comando dovresti trovarlo subito disponibile.
Se invece vuoi lavorare tramite Property Node all'interno del VI,
tra i Property Node del Waveform Chart trovi "History Data" che inizializzato tramite costante (un vettore senza elementi) azzera il grafico.
----------------------------------------
AUTORE: 2712
DATA :25/01/2010 - 14:33:26
----------------------------------------
grazie per avermi risposto ci provo subito
----------------------------------------
AUTORE: 2712
DATA :25/01/2010 - 16:09:11
----------------------------------------
mi potresti indicare meglio comeimpostare l' invoke node?
----------------------------------------
AUTORE: 2712
DATA :26/01/2010 - 10:11:25
----------------------------------------
[quote="off":kuna5ex0]salve ragazzi
ho necessità anche di memorizzare in un unico file dati numerici (array dei valori misurati + loro manipolazioni) e stringhe di carattere ma non so proprio come fare
qualcuno può aiutarmi???[/quote:kuna5ex0]
nessuno mi puo aiutare sulla memorizzazione dati indicandomi qualche funzione che mi permetta di salvare sia dati numerici che stringhe di testo ?
----------------------------------------
AUTORE: 645
DATA :26/01/2010 - 13:02:27
----------------------------------------
Per quanto riguarda l'uso dei Property Node (non Invoke Node... sono diversi) li trovi lavorando nel Block Diagram e puoi trovare qualche spiegazione in più tra gli esempi e la documentazione di LabView; se nel Block Diagram clicchi con il tasto destro tra i comandi c'è la possibilità di creare un Property Node a scelta tra quelli disponibili per il soggetto analizzato.
Per la precisione:
clic dx sul Chart --> Create --> Property Node
Per memorizzare i dati con diversi formati in un'unica variabile puoi ricorrere alle strutture Cluster o pensare a memorizzazioni "a pezzi", nel senso che in un file di supporto memorizzi i dati che ti servono nell'ordine in cui vuoi (perciò puoi accostare numeri a caratteri): cerca tra gli esempi di LabView quelli riferiti all'uso di Cluster o di File.
----------------------------------------
AUTORE: 2712
DATA :28/01/2010 - 16:43:47
----------------------------------------
grazie per i suggerimenti..
se mi dici come si allegano i file nel post ti faccio vedere come ho risolto il problema della memorizzazione e il resto. ho necessità di confrontarmi con qualcuno che ne sa pù di me di labview
----------------------------------------
================================================================================
problemi con chiusura di un VI
================================================================================
AUTORE: 2784
DATA :25/01/2010 - 14:43:58
----------------------------------------
Salve, ho un problema con un programma formato da due cicli while..il primo acquisisce dati da uno strumento e l altro invia tramite una porta TCP un file di testo ad un client connesso. Il mio problema è sul secondo ciclo while poichè non riesco a bloccare il programma..nel secondo ciclo while la porta TCP è sempre in ascolto per motivi di connessione con client: quando il client connesso vuole il file, la porta del server deve essere già aperta per non darmi errore. Il problema è che ho la funzione TCP listen and wait in modo che il server stia sempre in ascolto per un eventuale client..ma cosi facendo non riesco a stoppare questo ciclo..che risulta sempre attivo e devo sempre usare il pulsante rosso in alto vicino a run e non un pulsante di stop..come posso ovviare a questo?
RIngrazio in anticipo
----------------------------------------
AUTORE: 927
DATA :28/01/2010 - 08:31:13
----------------------------------------
Le funzioni TCP hanno il timeout. Mettici un timeout finito (es. 1 secondo) e ripeti l'ascolto in un ciclo; così ogni secondo puoi decidere se interrompere il programma o ricominciare a ascoltare
----------------------------------------
AUTORE: 2784
DATA :28/01/2010 - 09:05:38
----------------------------------------
[quote="Snamprogetti":32cv2sia]Le funzioni TCP hanno il timeout. Mettici un timeout finito (es. 1 secondo) e ripeti l'ascolto in un ciclo; così ogni secondo puoi decidere se interrompere il programma o ricominciare a ascoltare[/quote:32cv2sia]
allora farò cosi...con una ripetizione del ciclo...
Se il tempo di ascolto però è un minuto...io in questo minuto non posso agire sul server giusto? Ma va bene...l'importante è che dopo un pò si chiuda..
Ringrazio ancora
----------------------------------------
AUTORE: 927
DATA :28/01/2010 - 16:10:46
----------------------------------------
Il server può fare altre cose nel frattempo se nel codice sono in parallelo e non in sequenza al blocco TCP, ma comunque, che bisogno c'è di mettere un tempo di ascolto di un minuto? che sia un'attesa da un minuto o 60 attese da 1 secondo, la connessione in arrivo la becchi ugualmente
----------------------------------------
AUTORE: 2784
DATA :28/01/2010 - 16:36:14
----------------------------------------
[quote="Snamprogetti":1jkihg0t]Il server può fare altre cose nel frattempo se nel codice sono in parallelo e non in sequenza al blocco TCP, ma comunque, che bisogno c'è di mettere un tempo di ascolto di un minuto? che sia un'attesa da un minuto o 60 attese da 1 secondo, la connessione in arrivo la becchi ugualmente[/quote:1jkihg0t]
hai ragione ti ringrazio..
----------------------------------------
================================================================================
pubblicazione remota di uno strumento
================================================================================
AUTORE: 2784
DATA :25/01/2010 - 14:49:59
----------------------------------------
Come si assegnano le priorità da un pannello di controllo remoto? in pratica accade che io server ho una durata di controllo dell'applicazione di un minuto, mentre un client che si connette lo ha infinito..come faccio a fare il contrario?
Grazie ancora..
----------------------------------------
AUTORE: 645
DATA :26/01/2010 - 13:05:22
----------------------------------------
Intendi una situazione del tipo:
io server sto lavorando, arriva un client e si impossessa dell'interfaccia
o un client sta lavorando e quando arrivo io server voglio avere la possibilità di utilizzare l'interfaccia?
Non so se LabView possa gestire queste cose con la pubblicazione "normale", quella realizzabile senza aggiungere il toolkit per internet.
----------------------------------------
AUTORE: 2784
DATA :26/01/2010 - 13:27:44
----------------------------------------
[quote="MagicBotolo":1t5euhsy]Intendi una situazione del tipo:
io server sto lavorando, arriva un client e si impossessa dell'interfaccia
o un client sta lavorando e quando arrivo io server voglio avere la possibilità di utilizzare l'interfaccia?
Non so se LabView possa gestire queste cose con la pubblicazione "normale", quella realizzabile senza aggiungere il toolkit per internet.[/quote:1t5euhsy]
in pratico se avvio la procedura, io server sto connesso per un tot di tempo poi passa al client che si vede essere in coda nel pannello remoto..
----------------------------------------
AUTORE: 2784
DATA :01/02/2010 - 11:28:04
----------------------------------------
[quote="therealdeal":1no19vc5][quote="MagicBotolo":1no19vc5]Intendi una situazione del tipo:
io server sto lavorando, arriva un client e si impossessa dell'interfaccia
o un client sta lavorando e quando arrivo io server voglio avere la possibilità di utilizzare l'interfaccia?
Non so se LabView possa gestire queste cose con la pubblicazione "normale", quella realizzabile senza aggiungere il toolkit per internet.[/quote:1no19vc5]
in pratico se avvio la procedura, io server sto connesso per un tot di tempo poi passa al client che si vede essere in coda nel pannello remoto..[/quote:1no19vc5]
Questo client diventa proprietario totale dell'interfaccia..cioè non ha durata temporale, fattore che invece colpisce me anche se son server
----------------------------------------
================================================================================
error signature eseguibile LW 2009
================================================================================
AUTORE: 2228
DATA :25/01/2010 - 16:01:52
----------------------------------------
Salve a tutti,
ho questo problema quando avvio l'eseguibile creato con labview 2009
AppName: motori b.exe AppVer: 1.0.0.0 ModName: lvrt.dll
ModVer: 9.0.0.4024 Offset: 00828fba
Sapete dirmi dov'è il problema?
Grazie
----------------------------------------
AUTORE: 1050
DATA :26/01/2010 - 08:17:07
----------------------------------------
Ciao,
non sò se può essere questa la soluzione ma per Labview 2009 esistono 2 patch da installare per l'ambiente di sviluppo e per il runtime engine;
se non le hai già installate tenterei:
[url:1okrsupw]http://joule.ni.com/nidu/cds/view/p/lang/it/id/1403[/url:1okrsupw]
----------------------------------------
AUTORE: 2228
DATA :26/01/2010 - 12:08:22
----------------------------------------
Sono riuscito a risalire al problema....
Praticamente nel mio eseguibile girano sub-vi dell' SQL toolkit risalenti al '98 che fino alla versione 8.2 mi funzionavano, ora dopo aver installato il 2009 tale toolkit non è più leggibile.
Cmq ringrazio antea per la risposta.
Buonagiornata a tutti
----------------------------------------
================================================================================
Domanda banale...VI opensurce
================================================================================
AUTORE: 2196
DATA :26/01/2010 - 08:00:45
----------------------------------------
Sto scrivendo del codice labview che vorrei distribuire liberamente in rete......ma poi esiste una qualchw versione free di labview ? Al momento sto usando il labview aziendale ..ma poi ?
----------------------------------------
AUTORE: 2821
DATA :03/02/2010 - 15:37:22
----------------------------------------
i VI li puoi liberamente distribuire, anzi c'è un sito che si occupa proprio di questo (openG.org), ma comunque poi si possono usare solo su LabVIEW di National Instruments, visto che non esiste altro Labview che quello!
----------------------------------------
================================================================================
domanda su generazione eseguibile e seriale
================================================================================
AUTORE: 2600
DATA :26/01/2010 - 09:47:10
----------------------------------------
Ciao,
Ho generato un'eseguibile da un progetto labview che usa la seriale rs232 senza hardware esterno dedicato(uso le visa).
labview ha creato l'exe,ho installato le runtime,l'eseguibile si avvia ma quando deve comunicare con la seriale non comunica.
oltre alle runtime devo installare le visa ?
grazie
Spectre
----------------------------------------
AUTORE: 2712
DATA :26/01/2010 - 10:01:30
----------------------------------------
[quote="spectre1980":1eskuax2]
Ho generato un'eseguibile da un progetto labview che usa la seriale rs232 senza hardware esterno dedicato(uso le visa).
Spectre[/quote:1eskuax2]
ciao anche iodovrei creare partendo da un programmino labview un eseguibile
mi potresti dire qual' è la porcedura
grazie
----------------------------------------
AUTORE: 645
DATA :26/01/2010 - 13:01:41
----------------------------------------
Per lavorare con gli eseguibili che richiamano le librerie VISA sul pc di destinazione devi installare anche le librerie VISA, non solo il RunTime.
Almeno mi pare sia così... è un po' di tempo che non faccio eseguibili che lavorano con porte seriali: forse con le nuove versioni di LabView è cambiato qualcosa ma una volta, per esempio, si poteva creare l'installer anzichè l'exe così le librerie necessarie venivano copiate insieme ai VI.
Comunque fai la prova: sul pc di destinazione, quello sul quale andrai ad usare l'eseguibile, installa sia il RunTime di LabView che le librerie VISA
----------------------------------------
AUTORE: 43
DATA :27/01/2010 - 11:41:41
----------------------------------------
[quote="spectre1980":1qoe27ew]Ciao,
Ho generato un'eseguibile da un progetto labview che usa la seriale rs232 senza hardware esterno dedicato(uso le visa).
labview ha creato l'exe,ho installato le runtime,l'eseguibile si avvia ma quando deve comunicare con la seriale non comunica.
oltre alle runtime devo installare le visa ?
grazie
Spectre[/quote:1qoe27ew]
L'argomento "Installer" è molto presente nel Forum
viewtopic.php?f=29&t=4227
viewtopic.php?f=1&t=4356&p=19376
viewtopic.php?f=1&t=4283&p=19152
viewtopic.php?f=1&t=4293&p=19131
ecc.
Attenzione! quando si crea l'installer (non l'eseguibile) si devono check-are tutti i "runtime" che si vogliono includere nell'installer
nel tuo caso il runtime di LabVIEW e quello VISA.
cioè oltre al runtime di LabVIEW
[attachment=2:1qoe27ew]installer-runtimeSelection2.JPG[/attachment:1qoe27ew]
seleziona runtime visa
[attachment=1:1qoe27ew]installer-runtimeSelection1.JPG[/attachment:1qoe27ew]
Da notare come la libreria VISA sia realtà splittata su + opzioni.
I SW installati x VISA soggetti a versionamento sono infatti ben + di uno...
[attachment=0:1qoe27ew]SW_NI.JPG[/attachment:1qoe27ew]
bye
----------------------------------------
================================================================================
datasocket e architettura client-server
================================================================================
AUTORE: 2784
DATA :26/01/2010 - 14:20:55
----------------------------------------
Come posso fare una diagnostica, cioè avvisare il client che il server non c'è più o che si è verificato un errore e deve attendere un riavvio del server?
Tutto ciò dentro una architettura client-server...
Ringrazio ancora..
----------------------------------------
AUTORE: 927
DATA :28/01/2010 - 08:39:01
----------------------------------------
Un metodo generico è mandare periodicamente un segnale di "battito del cuore" dal server. Se il segnale non arriva entro un certo tempo, il server è assente. Il tipo di segnale dipende da come sono collegati i due
----------------------------------------
AUTORE: 2784
DATA :28/01/2010 - 09:03:11
----------------------------------------
[quote="Snamprogetti":3lcdl44z]Un metodo generico è mandare periodicamente un segnale di "battito del cuore" dal server. Se il segnale non arriva entro un certo tempo, il server è assente. Il tipo di segnale dipende da come sono collegati i due[/quote:3lcdl44z]
ad esempio un dato periodicamente mediante tCP/ip visto che sono comandati cosi?
Nel caso utilizzassi datasocket con dstp però non posso farlo questo vero? cioè non c'è un modo per dire che è ancora presente tramite datasocket? perchè accade questo:
1) il server scrive i dati sul datasocket server;
2) il client li legge.
Se malauguratamente il server non c'è più, il client legge sempre dal datasocket server, leggendo il dato di quando il server c'era ancora.
è giusto quello che penso?
Ringrazio
----------------------------------------
AUTORE: 927
DATA :28/01/2010 - 16:03:35
----------------------------------------
Puoi usare allora un dato che varia nel tempo, io ad esempio in un'applicazione usavo l'orario del server. Se il dato non cambia per tot tempo...
----------------------------------------
AUTORE: 2784
DATA :28/01/2010 - 16:35:34
----------------------------------------
[quote="Snamprogetti":39ll1nq7]Puoi usare allora un dato che varia nel tempo, io ad esempio in un'applicazione usavo l'orario del server. Se il dato non cambia per tot tempo...[/quote:39ll1nq7]
mi fai un esempio???
come faccio a dar un tempo al datasocket?
----------------------------------------
AUTORE: 482
DATA :29/01/2010 - 07:52:48
----------------------------------------
Il cosiddetto livebit puo' fare al caso tuo.
Un semplice booleano che puoi usare come vuoi:
1) Ogni TOT tempo cambia stato. Tu devi leggere quel valore ad almeno la metà del tempo
esempio: ogni 5 secondi cambia stato. Tu ogni secondo lo leggi. Se dopo 6 o 7 secondi ha ancora lo stesso valore, allora c'e' qualcosa che non va.
2) Il server lo mette a TRUE e il client lo mette a FALSE dopo averlo letto. Se il clinet lo legge TRUE, allora c'e' qualcosa che non va.
----------------------------------------
AUTORE: 2784
DATA :29/01/2010 - 16:44:40
----------------------------------------
[quote="gepponline":1tz5xyvz]Il cosiddetto livebit puo' fare al caso tuo.
Un semplice booleano che puoi usare come vuoi:
1) Ogni TOT tempo cambia stato. Tu devi leggere quel valore ad almeno la metà del tempo
esempio: ogni 5 secondi cambia stato. Tu ogni secondo lo leggi. Se dopo 6 o 7 secondi ha ancora lo stesso valore, allora c'e' qualcosa che non va.
2) Il server lo mette a TRUE e il client lo mette a FALSE dopo averlo letto. Se il clinet lo legge TRUE, allora c'e' qualcosa che non va.[/quote:1tz5xyvz]
figo questa cosa..come posso farlo però..??
----------------------------------------
AUTORE: 482
DATA :01/02/2010 - 09:35:07
----------------------------------------
sfruttando il protocollo che usi per l'architettura.
Ad esempio se usi il datasocket o le shared variable, basta che il lifebit lo setti in modo che sia in lettura e scrittura per tutti.
poi diventa semplicemnete una variabile da leggere o scrivere.
----------------------------------------
AUTORE: 2784
DATA :01/02/2010 - 10:01:05
----------------------------------------
[quote="gepponline":2xjfo622]sfruttando il protocollo che usi per l'architettura.
Ad esempio se usi il datasocket o le shared variable, basta che il lifebit lo setti in modo che sia in lettura e scrittura per tutti.
poi diventa semplicemnete una variabile da leggere o scrivere.[/quote:2xjfo622]
uso il datasocket..ma non ho capito come..
esempio??te ne sarei grato..anche in mp se vuoi..
----------------------------------------
AUTORE: 482
DATA :01/02/2010 - 15:59:38
----------------------------------------
non è questione di privato è che mi piacerebbe che fossi tu a svilupparlo.
Alla fine ti ho detto tutto quello che serve.
prova ad implementarlo in un vi unico, senza bisogno del datasocket.
poi passiamo alla configurazione del datasocket.
----------------------------------------
AUTORE: 2784
DATA :01/02/2010 - 17:26:32
----------------------------------------
[quote="gepponline":3tbl63lf]non è questione di privato è che mi piacerebbe che fossi tu a svilupparlo.
Alla fine ti ho detto tutto quello che serve.
prova ad implementarlo in un vi unico, senza bisogno del datasocket.
poi passiamo alla configurazione del datasocket.[/quote:3tbl63lf]
ma non ho capito come fare??
cioè il server scrive falso, il client scrive vero...giusto?
però come faccio? con il TCP IP?
e poi in un vi unico?? ma se ho client e server scusa?
Oddio che casotto però..aiuto geppoooo..sei gentilissimo..
----------------------------------------
AUTORE: 2784
DATA :01/02/2010 - 17:46:49
----------------------------------------
Posso pensare ad un ciclo while dove la variabile è prima true e dopo un certo tempo passa a false? è corretto? Per leggerla poi dovrei usare un datasocket no??
è la strada giusta questa?
----------------------------------------
AUTORE: 482
DATA :02/02/2010 - 08:07:06
----------------------------------------
QUello che intendevo con uno stesso VI erano due cicli paralleli.
e dai e dai e dai, alla fine mi hai tirato fuori la soluzione.
Riadattala alle tue esigenze, sposta i due cicli uno nel client e uno nel server e vedi come funziona.
----------------------------------------
AUTORE: 2784
DATA :02/02/2010 - 08:28:41
----------------------------------------
ho la 8.6 non riesco ad aprirla
----------------------------------------
AUTORE: 482
DATA :02/02/2010 - 13:17:50
----------------------------------------
eccola di nuovo!
----------------------------------------
AUTORE: 2784
DATA :02/02/2010 - 15:05:17
----------------------------------------
figo gepponline..ti ho mandato mp perchè non riuscivo a scrivere qua!
----------------------------------------
AUTORE: 482
DATA :02/02/2010 - 15:09:18
----------------------------------------
come ti ho già detto in privato, piu' di cosi' non posso dirti, senno' faccio il lavoro al posto tuo.
Detto questo, quando posti dei VI perchè hai un problema, cerca sempre di estrapolare solo quello che interessa ed eliminare tutto quello che è la tua applicazione, senno' non ci si capisce niente ne di come funziona, ne dove sta il problema.
E' un esercizio utile anche per trovare il problema il piu' delle volte.
----------------------------------------
AUTORE: 2784
DATA :02/02/2010 - 16:25:06
----------------------------------------
ok...grazie..solo una cosa del vi che tu hai realizzato...
vedrò che posso fare anche in funzione della mia realizzazione..una cosa non ho capito sul datasocket..nel caso io lo metta su due vi differenti e due pc differenti..scrivendo nella variabile prova..sia il server che il client scrivono nella stessa variabile??
----------------------------------------
AUTORE: 2784
DATA :02/02/2010 - 23:45:53
----------------------------------------
Sono ancora qua che tento di risolvere il mio problema..
Innanzitutto ho creato due Vi..un client ed un server..ho avviato il datasocket ma non ho scambio di valori tra i due e non capisco perchè..uff
.
Ora li pubblico inserendo il lifebit del server nel server e quello del client nel client (messi rispettivamente nel frame due per il server e nel frame uno per il client).
Alcune considerazioni:
1. Perchè non ho trasferimento di dati? Sto usando i due Vi sullo stesso pc però non scambiano i dati..e non so perchè.
2. Vorrei un solo stop per ciclo ma visto che mi dà errore (avrei da bloccare anche il ciclo while del lifebit per ognuno e quindi dovrei metterne due)c'è una soluzione?? Mi dice che la variabile locale inserita non ha una azione meccanica valida da consentire il blocco del while..quindi??
3. Vorrei che il client si accorga che il server non c'è ma anche il server una volta che il client si disconnette possa capire che il client non c'è più.
Scusate la mia ignoranza..geppo sopratutto..ma non riesco ad andare avanti..allego i file..
----------------------------------------
AUTORE: 482
DATA :03/02/2010 - 09:41:34
----------------------------------------
Innanzitutto, piantala di usare quei frame che sono solo fastidiosi
Usa quelli flat che sono piu' chiari in questi casi in cui chiedi aiuto, ma soprattutto elimina tutto quello che non serve!!
Per questo non ho fatto caso a come funziona il tuo vi ma penso di aver capito il tuo problema e cerco di spiegartelo.
Tu vai a leggere una variabile locale che si chiama Lifebit ma ch enon ha nessuna connessione con il datasocket.
I dati sul datasocket possono essere creati in due modi:
1) programmaticamente
2) associando la connessioen ad un controllo.
Tu hai usato la prima strada, assegni alla variabile datasocket un valore nel server, solo che nel client, anzichè sare la funzione read per leggere quella variabile, vai a leggere lo stato di un pulsante locale che non ha nessuna associazione ocn quella variabile.
Quindi o colleghi quel pulsante alla variabile datasocket oppure usi la funzione read.
----------------------------------------
AUTORE: 2784
DATA :03/02/2010 - 10:27:06
----------------------------------------
proviamo cosi..ho messo le flat e voglio ora vedere se sto facendo giusto..ho provato ad avviarlo ma non funziona uguale..ho messo nel client la lettura del datasocket ma non ottengo nessun risultato...
il server scrive la variabile datasocket ed il client prima la legge, poi se è ok cioè se è vera la scrive a false..ma non ho scambio di dati..il tutto è stato messo in architettura semplice client-server escludendo tutto il resto..il server acquisisce un dato, vede se c'è il client se il client c'è se c'è allora fornisce i risultati (cosa che comunque non fa)...illuminami..non so che pesci pigliare..l'esempio che sto facendo è di una semplice architettura client server che sfrutta datasocket e che ha un minimo di diagnostica al suo interno (cioè se il server non c'è avviso il client e se il client si disconnette il server si deve accorgere di questo)..
----------------------------------------
AUTORE: 482
DATA :03/02/2010 - 10:48:21
----------------------------------------
No, stavolta mi rifiuto.
Scusami ma ho anche altro da fare.
Se il tuo problema è scrivere il lifebit, mi fai il favore di creare due vi con solo la parte del lifebit.
Già il fatto che in uno stesso vi vedo due cicli legati ad un bottone, vuol dire che devo capire cosa fare e quindi quando premere cosa.
Prendi due vi e fai SOLO il lifebit cosi' come t el'avevo postato io solo ch emetti ogni ciclo in un vi separato.
----------------------------------------
AUTORE: 482
DATA :03/02/2010 - 11:00:58
----------------------------------------
mosso acompassione ho dato un occhiata al tuo vi.
Ci sono PRECCHIE COSE CHE NON TORNANO.
1) fai il controllo del life bit in sequenza con altre operazioni
2) Finchè non premi il pulsante di stop, non esci dal controllo del lifebit
3)Una volta premuto il pulsante di stop,la connesione potrebbe essere persa e tu non lo sapresti.
Ogni struttura, while, sequenza ecc ha un motivo per venire usata.
Il lifebit è una cosa che va controllata continuamente, non ogni tanto, quindi non ha senso che venga messa in sequenza con altre cose, altrimenti non è piu' un lifebit come quello di cui parlavamo ma è qualcos'altro e quindi potrebbe non aver bisogno di un ciclo while.
Fai qualche esercizio mentale e prova a scrivere quello che vuoi fare, in che ordine e in che circostanza. In base a quello poi disegni il tuo vi.
----------------------------------------
AUTORE: 2784
DATA :03/02/2010 - 11:24:16
----------------------------------------
[quote="gepponline":1e0r1fwm]mosso acompassione ho dato un occhiata al tuo vi.
Ci sono PRECCHIE COSE CHE NON TORNANO.
1) fai il controllo del life bit in sequenza con altre operazioni
2) Finchè non premi il pulsante di stop, non esci dal controllo del lifebit
3)Una volta premuto il pulsante di stop,la connesione potrebbe essere persa e tu non lo sapresti.
Ogni struttura, while, sequenza ecc ha un motivo per venire usata.
Il lifebit è una cosa che va controllata continuamente, non ogni tanto, quindi non ha senso che venga messa in sequenza con altre cose, altrimenti non è piu' un lifebit come quello di cui parlavamo ma è qualcos'altro e quindi potrebbe non aver bisogno di un ciclo while.
Fai qualche esercizio mentale e prova a scrivere quello che vuoi fare, in che ordine e in che circostanza. In base a quello poi disegni il tuo vi.[/quote:1e0r1fwm]
Scusa ma non è facile per me..ora ho diviso come detto da te i due lifebit e sembra funzionare cosi..se ti va dai un occhiata..cosi è diviso su due VI..il problema è che non so dove metterlo?..cioè le operazioni sarebbero fatte cosi:
SERVER
acquisisce dato
controlla se c'è client - se c'è manda i dati e attendi prima di riprendere il valore
se non c'è attendi il tempo di campionamento
riacquisisci
CLIENT
chiedi la connessione
una volta connesso ricevi i dati
se vuoi disconnetti schiacciando stop ed invia al server che non ci sei più..passaggio che non si verifica nel mio programma reale e quindi il server continua a mandare anche se il client non c'è più.
Ok nel client il lifebit posso metterlo fuori come un ciclo while separato dal ciclo while delle operazioni...ma nel server dovrei metterlo nel ciclo while delle operazioni, visto che questo è composto dal ciclo while 1 che è quello scritto più un ciclo while 2 che serve a trasferire un file al client.
----------------------------------------
AUTORE: 482
DATA :03/02/2010 - 14:48:55
----------------------------------------
da quanto mi pare di capire, tu non hai bisogno di un lifebit come lo stavamo realizzando adesso, ma semplicemente di un consenso che ti dica se puoi leggere/scrivere oppure no.
In questo caso, non ti serve fare dei cicli while per il controllo.
Visto che ti piace lavorare cosi' tanto con le sequenze, puoi fare una cosa cosi':
SERVER:
1) acquisisce
2)verifica la presenza del client leggendo un booleano su datasocket
3) se c'e' il client, scrive il dato in una variabile datasocket
4)attesa scadenza tempo
Tutto questo in un ciclo unico.
CLIENT-
1)segnala la sua presenza mettendo un booleano a true su datasocket
La fase 1 viene fatta una volta solo all'inizio.
2)legge il dato dalla variabile datasocket dove è stata messa dal server.
Quando mi disconnetto rimetto a false il booleano.
tutto questo in un ciclo while unico.
In totale ti servono due variabili datasocket e due vi con un ciclo while ciascuno.
In questo caso non è implementata la sincronizzazione, semplicemente vai a leggere l'ultimo dato disponibile.
----------------------------------------
AUTORE: 2784
DATA :03/02/2010 - 15:02:31
----------------------------------------
ok su questo dovrei esserci devo solo provare ad implementarlo...ora però può succede che il client voglia verificare se il server c'è giusto??una sorta di verifica che non sia bloccato..posso implementare questa cosa utilizzando una sorta di lifebit??
altro problema: Se il client si blocca (ad esempio non premo stop ma premo il tasto rosso vicino a run)..il server come vede che il client si è disconnesso??
Grazie delle risposte
----------------------------------------
AUTORE: 2784
DATA :03/02/2010 - 15:03:57
----------------------------------------
Un altra cosetta..non sono sincroni cosi?? cioè il client cicla più rapidamente del server giusto? cosi si possono avere errori sul client??
----------------------------------------
AUTORE: 2784
DATA :03/02/2010 - 22:39:05
----------------------------------------
dovrei essere riuscito a configurare correttamente quello che mi hai chiesto..l'applicazione server e quella client come precedentemente detto con le sequenze..non posso però testarlo da questo pc perchè non ho il datasocket..ora però manca il controllo del client e del server..quello che si voleva realizzare con il lifebit..come posso procedere?
Ringrazio ancora
----------------------------------------
AUTORE: 482
DATA :04/02/2010 - 08:35:39
----------------------------------------
se hai capito come funziona la programmazione, il resto è logica.
Devi solo capire cosa fare e quando farlo, e quello non posso fartelo io.
se vuoi un controllo continuo della prsenza del client o del server basta fare un ciclo parallelo che implementi il lifebit, e se trova un errore (il bit non è stato messo a true o non è stato messo a false) allora lo segnala.
----------------------------------------
AUTORE: 2784
DATA :04/02/2010 - 08:56:47
----------------------------------------
[quote="gepponline":2qn7eaoz]se hai capito come funziona la programmazione, il resto è logica.
Devi solo capire cosa fare e quando farlo, e quello non posso fartelo io.
se vuoi un controllo continuo della prsenza del client o del server basta fare un ciclo parallelo che implementi il lifebit, e se trova un errore (il bit non è stato messo a true o non è stato messo a false) allora lo segnala.[/quote:2qn7eaoz]
ok..due domande solamente:
b) posso far sia che il client vede che non c'è il server ma anche il server che non vede più la presenza del client??
a)posso implementare parallelamente 3 cicli while? come ti dicevo il mio server è realizzato con 2 cicli while paralleli ed introducendo il lifebit ne avrei un terzo nel server.
----------------------------------------
AUTORE: 2784
DATA :04/02/2010 - 10:11:01
----------------------------------------
Ho deciso di far cosi..il server scrive true su una variabile all'interno del suo ciclo di acquisizione
il client è formato da due cicli..uno che si connette e acquisisce, l'altro che controlla la presenza del client, leggendo la variabile e mettendola a false, se tale variabile non è stata cambiata entro un certo tempo c'è qualcosa che non va nel server e si stacca..
Ora se dovessi far anche il ciclo inverso: mettiamo il caso che il client vada in blocco ( o si schiaccia il pulsante rosso vicino al run)..quale è la soluzione più adeguata per far capire al server che il client si è connesso ma si è bloccato?
----------------------------------------
AUTORE: 482
DATA :04/02/2010 - 11:17:14
----------------------------------------
In uno stesso vi puoi mettere quanti vi paralleli vuoi. non ci sono limiti (piu' o meno)
Il client puo' controllare se c'e' il server e il server puo' controllare se c'e' il client.(visto che uno mette a true e l'altro mette a false, se la variabile resta sempre a true non c'e' uno e se resta sempre a false non c'e' l'altro). Il concetto è pero' che manc ala comunicazione. Perchè per assurdo potrebbe esserci in run sia il server che il client ma s emanca la comunicazione per qualche problema della rete, tutti e due andrebbero in errore.
Per segnalare la cosa non c'e' una soluzione migliore. Devi decidere tu cosa fare.
Puoi mettere in stand by, puoi ignorare la cosa e andare avanti, puoi far comparire una finestra di allarme, puoi far partire la macchientta del caffè che indica che siccome non va la comunicazione puoi anche fermarti e fare una pausa oppur efar partire l'autodistruzione.
Semplicemente fai un controllo che la variabile PICOPALLINO sia nello stato in cui ti aspetti entro un certo tempo, se non è cosi' fai qualcosa.
----------------------------------------
AUTORE: 2784
DATA :04/02/2010 - 16:21:12
----------------------------------------
[quote="gepponline":2by9y2vy]In uno stesso vi puoi mettere quanti vi paralleli vuoi. non ci sono limiti (piu' o meno)
Il client puo' controllare se c'e' il server e il server puo' controllare se c'e' il client.(visto che uno mette a true e l'altro mette a false, se la variabile resta sempre a true non c'e' uno e se resta sempre a false non c'e' l'altro). Il concetto è pero' che manc ala comunicazione. Perchè per assurdo potrebbe esserci in run sia il server che il client ma s emanca la comunicazione per qualche problema della rete, tutti e due andrebbero in errore.
Per segnalare la cosa non c'e' una soluzione migliore. Devi decidere tu cosa fare.
Puoi mettere in stand by, puoi ignorare la cosa e andare avanti, puoi far comparire una finestra di allarme, puoi far partire la macchientta del caffè che indica che siccome non va la comunicazione puoi anche fermarti e fare una pausa oppur efar partire l'autodistruzione.
Semplicemente fai un controllo che la variabile PICOPALLINO sia nello stato in cui ti aspetti entro un certo tempo, se non è cosi' fai qualcosa.[/quote:2by9y2vy]
una cosa ma da due pc differenti posso scrivere la stessa variabile??
----------------------------------------
AUTORE: 2784
DATA :04/02/2010 - 16:22:53
----------------------------------------
[quote="therealdeal":r2mcehqx][quote="gepponline":r2mcehqx]In uno stesso vi puoi mettere quanti vi paralleli vuoi. non ci sono limiti (piu' o meno)
Il client puo' controllare se c'e' il server e il server puo' controllare se c'e' il client.(visto che uno mette a true e l'altro mette a false, se la variabile resta sempre a true non c'e' uno e se resta sempre a false non c'e' l'altro). Il concetto è pero' che manc ala comunicazione. Perchè per assurdo potrebbe esserci in run sia il server che il client ma s emanca la comunicazione per qualche problema della rete, tutti e due andrebbero in errore.
Per segnalare la cosa non c'e' una soluzione migliore. Devi decidere tu cosa fare.
Puoi mettere in stand by, puoi ignorare la cosa e andare avanti, puoi far comparire una finestra di allarme, puoi far partire la macchientta del caffè che indica che siccome non va la comunicazione puoi anche fermarti e fare una pausa oppur efar partire l'autodistruzione.
Semplicemente fai un controllo che la variabile PICOPALLINO sia nello stato in cui ti aspetti entro un certo tempo, se non è cosi' fai qualcosa.[/quote:r2mcehqx]
una cosa ma da due pc differenti posso scrivere la stessa variabile??
[/quote:r2mcehqx]
mi spiego meglio..come lo faresti il lifebit per due pc aventi indirizzi 666.66.66.66 e 777.77.77.77?? Cioè io non posso farlo come l ho fatto precedentemente perchè multiple scritture non sono permesse....o sbaglio??
----------------------------------------
AUTORE: 2784
DATA :04/02/2010 - 20:00:10
----------------------------------------
ed eccomi di nuovo qua..avrei risolto per il client ma non per il server che impazzisce quando gli metto il controllo di presenza client..
in pratica il server fa:
1)acquisisce
2)controlla il client se c'è se no attende il tempo di campionamento
3)se il client c'è fornisce i dati e attende il tempo residuo prima di acquisire.
Il problema è che in caso di blocco del client ( ad esempio forzando sul pulsante rosso) il server non se ne accorge o meglio va a leggere sempre l'ultimo dato del Datasocket che sarebbe True (il client si era connesso). Cosi facendo continua a far i passaggi che deve fare quando c'è un client cioè fornisce i dati al client ed attende..Cosi una nuova connessione di un client non è possibile e ciò comporta un blocco del server, una riinizializzazione del server e solo cosi un client potrà connettersi. Ma io che non voglio riinizializzare un server, come faccio a dirgli:
Ok il client c'è, manda i dati..fai tutto.. controlla se c'è ancora ops non c'è più
allora disconnetti il client e riparti a far ciò che devi...senza dover rinizializzare il server..
----------------------------------------
AUTORE: 2784
DATA :04/02/2010 - 23:20:08
----------------------------------------
Parto ora da questa condizione..in cui il client da il consenso alla connessione, il server lo vede (si accende il led). Se il client va in blocco allora il server leggerà sempre true...giusto? Allego un server e un client semplicissimo. Il client scrive sulla variabile "ci sono"
Il server verifica "eccolo qua" (led acceso).
Ipotizzando ora che il client si blocca (schiaccio il pulsante rosso)...la variabile Datasocket rimane True e il led rimane acceso.
Non posso controllare la durata però geppo, cioè il client sta connesso fino a che vuole lui..potrei però mettere un altra variabile che scrive ogni volta per verificare che c'è..ma cosi non riesco a cancellare la variabile ciao, che rimane fissa a true. La variabile "ciao" è scritta dal client che ha un dstp pari per esempio a dstp://172.13.244.66/ciao...io dal server non posso mica scrivere su tale dstp...............o mi sbaglio????
ps- illuminamiiiii
----------------------------------------
AUTORE: 482
DATA :05/02/2010 - 08:18:03
----------------------------------------
non lo guardo neanche il vi perchè mi stai inondando di dettagli anche inutili.
Riguardo alla tua ultima domanda SI, TI SBAGLI.
Una volta creata una variabile in lettura e scrittura, tutti possono scriverci e leggerla.
Ovviamente se la variabile sta nell'indirizzo del server, per il client sarà dstp://172.13.244.66/ciao e per il server sarà dstp://localhost/ciao
Detto questo, il controllo dei tempi è fatto con dei tick count in ogni vi.
Il client ad esempio conta quanto tempo è trascorso dall'utlima volta che ha controllato il lifebit, senza comunicare niente al server. Cosi' sa che se dopo x tempo il server non ha ancora rimesso a true il bit, allora manca la comunicazione.
----------------------------------------
AUTORE: 2784
DATA :05/02/2010 - 09:19:05
----------------------------------------
[quote="gepponline":quqtk1oh]non lo guardo neanche il vi perchè mi stai inondando di dettagli anche inutili.
Riguardo alla tua ultima domanda SI, TI SBAGLI.
Una volta creata una variabile in lettura e scrittura, tutti possono scriverci e leggerla.
Ovviamente se la variabile sta nell'indirizzo del server, per il client sarà dstp://172.13.244.66/ciao e per il server sarà dstp://localhost/ciao
Detto questo, il controllo dei tempi è fatto con dei tick count in ogni vi.
Il client ad esempio conta quanto tempo è trascorso dall'utlima volta che ha controllato il lifebit, senza comunicare niente al server. Cosi' sa che se dopo x tempo il server non ha ancora rimesso a true il bit, allora manca la comunicazione.[/quote:quqtk1oh]
bene...parto dal tuo allora...mi dice che multipli writers non sono permessi..questo è quello che mi hai dato tu..se lo metto su due vi..primo passo è che la variabile locale lifebit nel client in lettura è false quindi mi dice bloccato..
altra cosa è che se la metto comunque a true forzandola mi dice che multiple writers non sono permessi... Ora come devo agire? Sono ignorante lo so, però se è il programma che non funge su due pc non è colpa mia..
la struttura che io sto usando è quella che mi hai fornito gentilmente tu..
----------------------------------------
AUTORE: 482
DATA :05/02/2010 - 09:32:12
----------------------------------------
Il problema sta nel COME CREI LA VARIABILE DATASOCKET.
Se vuoi creare una variabile che permetta di essere scritta da piu' persone e non scritta da uno e letta da un altro, devi usare il datasocket server manager.
Lo trovi nel menu START->programmi->national instruments->datasocket->datasocket server manager
Da li puoi creare tutte le variabili che vuoi, assegnargli un nome, un tipo e se puo' accettare la scrittura da piu' utenti.
LI la crei, e poi dal tuo programma ci accedi.
Invece come stai facendo tu adesso, la crei implicitamente dicendogli di andare a connettersi a quell'indirizzo.
----------------------------------------
AUTORE: 2784
DATA :05/02/2010 - 09:54:28
----------------------------------------
ok...ho creato la variabile prova..ma il client legge la variabile lifebit in ingresso al ciclo if come un false e non mi scrive..questo come lo risolvo geppo??
----------------------------------------
AUTORE: 2784
DATA :05/02/2010 - 10:24:17
----------------------------------------
[quote="therealdeal":29u7wr8w]ok...ho creato la variabile prova..ma il client legge la variabile lifebit in ingresso al ciclo if come un false e non mi scrive..questo come lo risolvo geppo??
[/quote:29u7wr8w]
in realtà la variabile è lifebit ..prova è la locazione di memoria dove il datasocket scrive..comunque per sicurezza le ho create entrambe ma nulla..
----------------------------------------
AUTORE: 2784
DATA :05/02/2010 - 10:24:49
----------------------------------------
[quote="therealdeal":1tkxielv][quote="therealdeal":1tkxielv]ok...ho creato la variabile prova..ma il client legge la variabile lifebit in ingresso al ciclo if come un false e non mi scrive..questo come lo risolvo geppo??
[/quote:1tkxielv]
in realtà la variabile è lifebit ..prova è la locazione di memoria dove il datasocket scrive..comunque per sicurezza le ho create entrambe ma nulla..
[/quote:1tkxielv]
cioè il client ha quel lifebit che controlla il ciclo if sempre a false..
----------------------------------------
AUTORE: 482
DATA :05/02/2010 - 11:19:10
----------------------------------------
beh certo, se nessuno lo scrive resterà sempre a false....
innanzitutto:
1) La variabile deve essere creata o nel client o nel server e non in tutti e due i datasocket server manager.
2) In tutti e due i pc ,il dastocket server deve essere in esecuzione.
3) se il server scrive in dstp:\\localhost\prova, il client deve scrivere in dstp:\\"INDIRIZZOIPDELSERVER"\prova.
4)la variabile creata deve avere il check su Allow multiple writer
5) per facilitarti nella visualizzazione e associazione, prendi un controllo booleano e col tasto destro vai sulle proprietà e in databinding associ quel controllo booleano alla tua variabile datasocket.
----------------------------------------
AUTORE: 2784
DATA :05/02/2010 - 14:08:28
----------------------------------------
[quote="gepponline":soeasig6]beh certo, se nessuno lo scrive resterà sempre a false....
innanzitutto:
1) La variabile deve essere creata o nel client o nel server e non in tutti e due i datasocket server manager.
2) In tutti e due i pc ,il dastocket server deve essere in esecuzione.
3) se il server scrive in dstp:\\localhost\prova, il client deve scrivere in dstp:\\"INDIRIZZOIPDELSERVER"\prova.
4)la variabile creata deve avere il check su Allow multiple writer
5) per facilitarti nella visualizzazione e associazione, prendi un controllo booleano e col tasto destro vai sulle proprietà e in databinding associ quel controllo booleano alla tua variabile datasocket.[/quote:soeasig6]
grazie mille
----------------------------------------
AUTORE: 2784
DATA :05/02/2010 - 22:14:15
----------------------------------------
ok ora finalmente "dovrei aver risolto"...grazie a chi ha avuto pazienza (grazie geppo)..ora arrivano altri problemi..
----------------------------------------
================================================================================
visualizzare un numero 0-255 in formato binario
================================================================================
AUTORE: 2600
DATA :26/01/2010 - 14:24:10
----------------------------------------
Ciao,
utilizzo labview 9.0.
Visualizzo tramite quest'ultimo un numero ricevuto sulla seriale del pc.
questo numero è 255.
vorrei visualizzarlo in binario (11111111) anzichè in decimale.
Cliccando con il tasto destro del mouse sul numero ,mi appare "Properties".Cliccando su quest'ultimo "Numeric Properties"
Poi c'e' una tabella con scritto "numeric format code" e come format string ora c'e' "%#_G".
Vedo che per visualizzarlo in binario devo mettere "%b" ma non lo accetta.
cosa devo scrivere dentro la casella "Format string" ?
Grazie
Spectre
----------------------------------------
AUTORE: 2600
DATA :26/01/2010 - 14:37:03
----------------------------------------
[quote="spectre1980":s110tzhh]Ciao,
utilizzo labview 9.0.
Visualizzo tramite quest'ultimo un numero ricevuto sulla seriale del pc.
questo numero è 255.
vorrei visualizzarlo in binario (11111111) anzichè in decimale.
Cliccando con il tasto destro del mouse sul numero ,mi appare "Properties".Cliccando su quest'ultimo "Numeric Properties"
Poi c'e' una tabella con scritto "numeric format code" e come format string ora c'e' "%#_G".
Vedo che per visualizzarlo in binario devo mettere "%b" ma non lo accetta.
cosa devo scrivere dentro la casella "Format string" ?
Grazie
Spectre[/quote:s110tzhh]
Risolto
----------------------------------------
================================================================================
Copia array in stringa
================================================================================
AUTORE: 2585
DATA :26/01/2010 - 15:38:53
----------------------------------------
Buongiorno a tutti.
Ho il seguente quesito da porvi.
Ho un array numerico che voglio copiare in una stringa anch'essa numerica.
L'array può essere composto per esempio cosi: el. 0 = 7
el. 1 = 5
el. 2 = 6
L' indicaatore numerivo deve visualizzare come segue: 756
Ciao e grazie,
Paolo
----------------------------------------
AUTORE: 645
DATA :26/01/2010 - 15:57:18
----------------------------------------
Qualcosa del genere?
[attachment=0:6fne33q0]Array To String.jpg[/attachment:6fne33q0]
----------------------------------------
AUTORE: 43
DATA :27/01/2010 - 10:21:50
----------------------------------------
[quote="Paolo75":169okhf1]Buongiorno a tutti.
Ho il seguente quesito da porvi.
Ho un array numerico che voglio copiare in una stringa anch'essa numerica.
L'array può essere composto per esempio cosi: el. 0 = 7
el. 1 = 5
el. 2 = 6
L' indicaatore numerivo deve visualizzare come segue: 756
Ciao e grazie,
Paolo[/quote:169okhf1]
X stringa numerica intendi una stringa in cui è rappresentato un numero es. 123 (numero) --> "123" (stringa) ?
questo potrebbe andare bene?
[attachment=0:169okhf1]concatenateNumbersInString.JPG[/attachment:169okhf1]
----------------------------------------
================================================================================
legge propagazione errore
================================================================================
AUTORE: 2892
DATA :27/01/2010 - 08:12:02
----------------------------------------
Salve, su consiglio del supporto tecnico NI scrivo sul forum per chiedere il vostro aiuto.
Sto cercando di sviluppare un VI per calcolare l'incertezza di una resistenza termica utilizzando la legge di propagazione dell'errore per grandezze non correlate fra loro.
Qualcuno di voi ha già sviluppato qualcosa di simile?
Se proprio non c'è nulla di già implementato sarebbe sufficiente calcolare la derivata della della resistenza termica rispetto ad ognuna delle tre grandezze che la compongono, però non sono riuscito a capire qual'è la funzione più appropriata da utilizzare.
Grazie.
Saluti.
----------------------------------------
================================================================================
Cambiare un valore default n° porta seriale
================================================================================
AUTORE: 2600
DATA :27/01/2010 - 08:40:26
----------------------------------------
Ciao,
Allego un'immagine per farvi capire rapidamente il problema.
Ho un datalogger che riceve via seriale rs232 / visa.
ogni volta che avvio il mio bel datalogger c'e' un tab dove seleziono la porta com da usare.
Ogni volta che esco dal mio bell'eseguibile,mi perde l'ultima porta selezionata e riappare il valore iniziale
Esempio:
avvio l'eseguibile,nel tab c'e' "COM3",io voglio pero' la "COM4" e la cambio.
al successivo riavvio c'e' ancora nel tab "COM3".
allego foto del "tab"
[img:j7uvrez3]http://picpaste.com/pic0000.JPG[/img:j7uvrez3]
----------------------------------------
AUTORE: 43
DATA :27/01/2010 - 09:06:31
----------------------------------------
[quote="spectre1980":3fdgwdz7]
[...]
Esempio:
avvio l'eseguibile,nel tab c'e' "COM3",io voglio pero' la "COM4" e la cambio.
al successivo riavvio c'e' ancora nel tab "COM3".[/quote:3fdgwdz7]
Il motivo di questo comportamento è facilmente deducibile e non capisco xkè non ci si riesca ad arrivare in modo autonomo.
per ogni "controllo/indicatore" presente in un FP labview (ma lo stesso concetto si può applicare ad ad un qualunque controllo/indicatore di interfaccia sviluppata in un qualunque linguaggio di programmazione) è possibile fissare un "valore di default" o se preferisci in italiano un "valore precaricato" che appare nel controllo indicatore preventivamente, prima che l'operatore o il SW stesso possa agire modificandone il contenuto
Questo valore può essere fissato da colui che crea e sviluppa il SW.
in LabVIEW è possibile cambiare questo valore di default anche programmaticamente, ma ciò costringerebbe al "salvataggio" del VI modificato.
Ciò non è molto "bello" soprattutto per un SW di cui è stato generato un eseguibile...
L'unica possibilità è quella di memorizzare il valore di default in un file di configurazione che il programmatore dovrà predisporre.
Inoltre direi che l'operazione di salvataggio dentro questo file di configurazione deve essere confermata dall' utente/operatore con la pressione di una tasto tipo "salva il valore corrente come default"
bye
----------------------------------------
AUTORE: 2600
DATA :27/01/2010 - 09:11:59
----------------------------------------
[quote="paracarro":2va1e1i2][quote="spectre1980":2va1e1i2]
[...]
Esempio:
"Il motivo di questo comportamento è facilmente deducibile e non capisco xkè non ci si riesca ad arrivare in modo autonomo.
"
bye[/quote:2va1e1i2][/quote:2va1e1i2]
Paracarro è ovvio che sia così non sono mica deficente,
io non ho chiesto perchè succede cosi',ho chiesto come sistemare a questa cosa.
----------------------------------------
AUTORE: 43
DATA :27/01/2010 - 09:39:44
----------------------------------------
[quote="spectre1980":wv6dwqbl]
...Paracarro è ovvio che sia così non sono mica deficente,...
[/quote:wv6dwqbl]
Chiedo scusa, ma il modo in cui hai posto la questione mi ha spinto a rispondere in quel modo...
Cmq la mia risposta dovrebbe essere chiara: salva il valore in un file (possibilmente in modo espicito con richiesta dell'utente/operatore) e ricarica il valore nel controllo leggendolo dal file in cui lo avevi salvato.
In mancanza di file di configurazione, predisponi cmq un default.
per il salvataggio/lettura di questo dato di configurazione (che immagino possa essere correlato ad altre informazioni come baud rate, bit di stop, parità per es.) potresti utilizzare i VI presenti nella palette [File I/0] --> [Configuration File VIs]
bye
----------------------------------------
================================================================================
cambiare risoluzione video ad eseguibile labview
================================================================================
AUTORE: 2600
DATA :27/01/2010 - 09:07:47
----------------------------------------
Ciao,
ho fatto un'eseguibile di una applicazione labview,
vedo che cambiando pc e risoluzione video l'eseguibile non si adatta automaticamente alla nuova risoluzione.
c'e' un workaround ?
grazie
----------------------------------------
AUTORE: 43
DATA :27/01/2010 - 09:28:02
----------------------------------------
[quote="spectre1980":2xs8atyy]Ciao,
ho fatto un'eseguibile di una applicazione labview,
vedo che cambiando pc e risoluzione video l'eseguibile non si adatta automaticamente alla nuova risoluzione.
c'e' un workaround ?
grazie[/quote:2xs8atyy]
Bisogna intenderci su cosa significa "adattarsi automaticamente" al cambio di risoluzione.
Nel predisporre il Front Panel di un VI, si decide la posizione e la dimensione della finestra stessa, a meno dei bordi e del layout del titolo della finestra.
E' possibile prodisporre la finestra affinchè "vada a tutto schermo" cioè che occupi tutto lo spazio visibile dello schermo, senza bordi e titolo.
Questi concetti valgono per tutti i linguaggi di programmazione.
cosa diversa è voler vedere "adattati" i controlli presenti in un Front Panel in funzione della risoluzione dello schermo o in seguito ad un semplice ridimensionamentofatto trascinando i bordi della finestra stessa.
Vorresti vedere i controlli che si allarghino o restringano in funzione della risoluzione?
oppure vorresti che alcuni controlli fossero "ancorati" ad uno dei bordi della tua finestra ed altri controlli fossero automaticamente ridimensionati?
Prima devi decidere cosa deve succedere ad ogni ridimensionamento della tua finestra...
Se sei un programmatore, valuta l'uso degli "splitter" disponibili in LabVIEW dalla versione 8...
bye
----------------------------------------
AUTORE: 2600
DATA :27/01/2010 - 10:01:18
----------------------------------------
[quote="paracarro":2hn7yin6][quote="spectre1980":2hn7yin6]Ciao,
ho fatto un'eseguibile di una applicazione labview,
vedo che cambiando pc e risoluzione video l'eseguibile non si adatta automaticamente alla nuova risoluzione.
c'e' un workaround ?
grazie[/quote:2hn7yin6]
Questi concetti valgono per tutti i linguaggi di programmazione.
Se sei un programmatore, valuta l'uso degli "splitter" disponibili in LabVIEW dalla versione 8...
bye[/quote:2hn7yin6]
Paracarro,
chiedo solitamente sul forum perchè uso labview una volta all'anno per fare due cavolate,principalmente uso altri linguaggi.
grazie comunque per la risposta.
----------------------------------------
================================================================================
Gestire i dati da Daqmx
================================================================================
AUTORE: 2864
DATA :27/01/2010 - 09:26:00
----------------------------------------
Ciao a tutti, premetto che la mia conoscenza di Labview è molto limitata, quindi le mie domande potranno essere sicuramente banali.
Detto questo veniamo al sodo:
Sto facendo la tesi di laurea, devo sviluppare un sistema di acquisizione dati e controllo per un modellino termodinamico.
Devo quindi acquisire i valori di temperatura, pressione e portata di un circuito idraulico e memorizzare i dati.
Tutti i valori sono in corrente (4-20 mA), ho creato un task in cui acquisisco tutti i segnali e li converto da corrente a uno dei tre tipi che ho nominato prima.
Ora però non riesco a capire come posso separare il flusso, cioè come è strutturato il flusso dei dati nel daqmx.
Spiego meglio: per il controllo mi servono solo 2 valori: uno di temperatura ed uno di portata, inoltre vorrei creare un grafico per ogni tipo di variabile. Come posso quindi prendere solo i valori di temperatura per mandarli al grafico esatto e poi prendere il valore del sensore che mi serve per mandarlo al controllo?
Grazie sin da ora a chi mi darà una mano.
----------------------------------------
================================================================================
Aprire una cartella già esistente
================================================================================
AUTORE: 2893
DATA :27/01/2010 - 15:33:57
----------------------------------------
Ciao a tutti,
non sono un espertissimo e ho un problema che spero sia di facile soluzione: devo salvare un file in una opportuna cartella di windows (individuata tramite un path precedentemente specificato) e la cartella si deve poi immediatamente aprire solo per controllare quanti e quali file vi sono contenuti. Non riesco a trovare un blocco che faccia solo la funzione di aprire una cartella! Come posso fare?
Grazie
----------------------------------------
AUTORE: 43
DATA :27/01/2010 - 16:47:31
----------------------------------------
[quote="MicheleMac":2b81b27k]Ciao a tutti,
non sono un espertissimo e ho un problema che spero sia di facile soluzione: devo salvare un file in una opportuna cartella di windows (individuata tramite un path precedentemente specificato) e la cartella si deve poi immediatamente aprire solo per controllare quanti e quali file vi sono contenuti. Non riesco a trovare un blocco che faccia solo la funzione di aprire una cartella! Come posso fare?
Grazie[/quote:2b81b27k]
Premetto che sono contrario a questo genere str..zate, però, in fondo non si tratta di fare una cosa complicata ma inutile.
Non sapendo quale versione di LabVIEW utilizzi Ti posto 2 possibili soluzioni in LabVIEW 8.6.1
La prima utilizza una shell di windows ed apre explorer al path che vuoi tu.[attachment=1:2b81b27k]OpenExplorer.vi[/attachment:2b81b27k]
La seconda utilizza il file dialog di LabVIEW estratto dall'apposito express VI presente nella palette "File I/O" --> "Advanced File Function" --> "File Dialog" [attachment=0:2b81b27k]OpenExplorer1.vi[/attachment:2b81b27k]
Se usi windows, Ti consiglio la prima soluzione perchè LabVIEW non attende che la shell che viene lanciata sia completata per proseguire, mentre nel secondo caso, malgrado si possa cmq parallelizzare l'operazione, LabVIEW attenderebbe il completamento della selezione (o l'annullamento) prima di continuare ad eseguire ciò che non è possibile parallelizzare...
bye
----------------------------------------
AUTORE: 482
DATA :28/01/2010 - 07:48:19
----------------------------------------
Io l'ho letta in un modo un po' diverso...
Credo che il problema stia nella parola "aprire".
Diciamo che mentre un file lo APRI per leggere cosa c'e' dentro, una cartella la sfogli.
Cerca nella palette dei file un blocco che faccia una LISTA di quello che c'e' dentro ad una cartella o che ti dia le INFO riguardanti una cartella e vedrai che troverai quello che cerchi.
----------------------------------------
AUTORE: 2893
DATA :04/02/2010 - 13:17:25
----------------------------------------
[quote="gepponline":115ac128]Io l'ho letta in un modo un po' diverso...
Credo che il problema stia nella parola "aprire".
Diciamo che mentre un file lo APRI per leggere cosa c'e' dentro, una cartella la sfogli.
Cerca nella palette dei file un blocco che faccia una LISTA di quello che c'e' dentro ad una cartella o che ti dia le INFO riguardanti una cartella e vedrai che troverai quello che cerchi.[/quote:115ac128]
Io intendevo effettivamente aprire la cartella con l'explorer, comunque non avevo pensato ad 'aggirare' il problema listando il contenuto della cartella e fare tutto senza coinvolgere direttamente windows. Potrebbe andare bene comunque. Grazie per il consiglio.
----------------------------------------
AUTORE: 2893
DATA :04/02/2010 - 13:30:39
----------------------------------------
[quote="paracarro":26x1n0rn][quote="MicheleMac":26x1n0rn]Ciao a tutti,
non sono un espertissimo e ho un problema che spero sia di facile soluzione: devo salvare un file in una opportuna cartella di windows (individuata tramite un path precedentemente specificato) e la cartella si deve poi immediatamente aprire solo per controllare quanti e quali file vi sono contenuti. Non riesco a trovare un blocco che faccia solo la funzione di aprire una cartella! Come posso fare?
Grazie[/quote:26x1n0rn]
Premetto che sono contrario a questo genere str..zate, però, in fondo non si tratta di fare una cosa complicata ma inutile.
Non sapendo quale versione di LabVIEW utilizzi Ti posto 2 possibili soluzioni in LabVIEW 8.6.1
La prima utilizza una shell di windows ed apre explorer al path che vuoi tu.[attachment=1:26x1n0rn]OpenExplorer.vi[/attachment:26x1n0rn]
La seconda utilizza il file dialog di LabVIEW estratto dall'apposito express VI presente nella palette "File I/O" --> "Advanced File Function" --> "File Dialog" [attachment=0:26x1n0rn]OpenExplorer1.vi[/attachment:26x1n0rn]
Se usi windows, Ti consiglio la prima soluzione perchè LabVIEW non attende che la shell che viene lanciata sia completata per proseguire, mentre nel secondo caso, malgrado si possa cmq parallelizzare l'operazione, LabVIEW attenderebbe il completamento della selezione (o l'annullamento) prima di continuare ad eseguire ciò che non è possibile parallelizzare...
bye[/quote:26x1n0rn]
La prima soluzione che mi hai consigliato è proprio quello che intendevo io. Alla seconda ci ero già arrivato ma non era quello che mi serviva. Grazie mille!
Ci ho messo un po a provarla perchè sto lavorando con una versione precedente (8.5) e quindi ho dovuto scaricare la versione 9 evaluation e convertire il VI in una versione compatibile.
Per quanto riguarda l'utilità o meno della str..zata (come l'hai chiamata tu), sarei anche d'accordo con te (ed infatti non avevo previsto un operazione del genere), ma mi è stata espressamente richiesta dal cliente per il quale sto eseguendo il lavoro. Ubi maior .....
Grazie di nuovo e alla prossima.
Ciao
----------------------------------------
================================================================================
Sorveglianza tramite webcam di una macchina
================================================================================
AUTORE: 1168
DATA :28/01/2010 - 14:09:19
----------------------------------------
Buongiorno. Forse è una domanda banale, ma di immagini io non so proprio nulla e tantomeno di periferiche di acquisizione.
Quello che mi serverebbe fare è una "videosorveglianza" di una macchina di test tramite webcam (logitech). La mia idea è di fare un VI di acquisizione sul PC che gestisce il test e in qualche modo collegarlo a un VI in esecuzione sul mio PC.
Si può fare? Ci sono soluzioni migliori?
Grazie mille
Pietro
----------------------------------------
AUTORE: 482
DATA :29/01/2010 - 07:56:30
----------------------------------------
La risposta alla domanda è SI, SI PUO' FARE!
Ci sono due strade:
o sfruttare gli activeX e quindi le finestre dei programmi proprietari della webcam
oppure installare le librerie vision e li allora puoi sbizzarrirti con tutta la manipolazione delle immagini che vuoi...il problema è che s enon ce l'hai già è un pacchetto a parte di labview e credo costicchi non poco.
----------------------------------------
================================================================================
file in esadecimale
================================================================================
AUTORE: 2659
DATA :28/01/2010 - 14:21:58
----------------------------------------
Ciao a tutti.
Il mio problema è il seguente: vorrei riuscire a leggere un file (e successivamente anche a scriverlo possibilmente) in esadecimale, ovvero riuscire a 'vedere' il suo codice esadecimale, come fanno alcuni programmi (ad esempio Hexplorer).
Questo di qualsiasi tipo di file (non solo .txt).
Grazie a tutti in anticipo
----------------------------------------
AUTORE: 927
DATA :01/02/2010 - 09:55:18
----------------------------------------
Lo leggi come qualunque altro file, quello che conta è solo come visualizzi il contenuto a video: manda il contenuto a un indicatore stringa, poi clicca col destro sull'indicatore e seleziona "hex display"
----------------------------------------
================================================================================
On e off
================================================================================
AUTORE: 2863
DATA :29/01/2010 - 13:55:42
----------------------------------------
Salve a tutti.Non essendo un grande esperto di labview devo chiedervi una cosa che forse per voi sarà molto semplice.Ho bisogno di creare una booleana che si accenda e si spenga il numero di volte da me richiesto.Per spiegarmi meglio:se ad esempio scrivo il numero 10 voglio che il led si accenda e si spenga per 10 volte.Come devo fare?Grazie
----------------------------------------
AUTORE: 2863
DATA :29/01/2010 - 13:59:35
----------------------------------------
Aggiungo ad intermittenza
----------------------------------------
AUTORE: 2550
DATA :29/01/2010 - 14:58:18
----------------------------------------
Ciao,
ti allego un piccolo esempio. Puoi variare i tempi in cui è acceso ed in cui è spento modificando il valore collegato ai blocchetti "Wait".
Ciao
DVD
----------------------------------------
AUTORE: 2863
DATA :29/01/2010 - 15:02:41
----------------------------------------
Ti ringrazio per la rapidità e l'efficienza.Purtroppo l'università mi ha dato a disposizione la versione 8.2.1 di Labview e non posso leggere l'allegato.Potresti al limite mettere un'immagine del Block Diagram così me lo creo da solo.Grazie ancora
----------------------------------------
AUTORE: 2550
DATA :29/01/2010 - 15:06:11
----------------------------------------
Eccotelo per la versione 8.2.
Se ti serve altro chiedi pure
ciao
DVD
----------------------------------------
================================================================================
ListBox: catturare doppio click, come ?
================================================================================
AUTORE: 2196
DATA :29/01/2010 - 14:57:49
----------------------------------------
ListBox: catturare doppio click, come? Ho usato un metodo che secondo la guida quando c'è il doppio click ritorna il numero della riga seleziona..ma il valore rimane fisso a -2....dove sbaglio ?
----------------------------------------
AUTORE: 129
DATA :30/01/2010 - 17:14:18
----------------------------------------
devi usare una event structure evento docuble click e il numero della riga lo trovi su row.
guarda l'esempio che ti allego
[attachment=0:2dn6iekf]listbox row.png[/attachment:2dn6iekf]
----------------------------------------
AUTORE: 2196
DATA :03/02/2010 - 14:23:05
----------------------------------------
Risolto grazie
----------------------------------------
================================================================================
inserimento in array
================================================================================
AUTORE: 2874
DATA :29/01/2010 - 15:40:24
----------------------------------------
Salve, volevo sapere se qualcuno può aiutarmi nel risolvere questo problema: Devo inserire all'interno di un array un numero (uno o zero) ogni 500 microsecondi (il tempo possoanche cambiarlo). Il dato è letto da parallela e quindi dal registro di windows.Cio che vorrei avere alla fine è un array con un sequenza di 1 e 0 letti negli istanti temporali scanditi dal tempo di campionamento prima mensionato. Qualcuno può indicarmi una via per fare tutto cio?Grazie!
----------------------------------------
AUTORE: 2874
DATA :29/01/2010 - 16:50:48
----------------------------------------
Completo il post precedente:
Ho provato con un ciclo utilizzando all'interno del ciclo la funzione insert sub array. Come indice metto quello del ciclo, come array di partenza una costante, e temporizzo il tutto con il wait, ma stranamente il vettore che mi ritorna in uscita non ha gli elementi desiderati
----------------------------------------
AUTORE: 645
DATA :05/02/2010 - 09:55:00
----------------------------------------
Bisogna fare una precisazione:
il tempo di scansione è costante?
Se sì potresti memorizzare i dati con la tecnica dello shift register e al termine avere un array di numeri. Quando poi li analizzi sai quanto tempo c'è tra un valore e l'altro e puoi graficare il tutto senza dover memorizzare anche il dato "tempo".
Se l'intervallo di tempo può cambiare allora dovresti memorizzare il tempo trascorso da un istante iniziale o il tempo corrente (Tick Count o lettura dell'ora corrente) in un array e in un altro array i valori (oppure usare un cluster o, convertendo il dato tempo in numero, un array a due colonne).
Se però non ottieni i dati nel senso che la lettura non avviene quando vuoi tu ma un po' in ritardo e quindi trovi numeri diversi da quelli che ti aspetti allora il problema è legato alla tempistica del VI: potrebbe essere necessario fare considerazioni di programmazione RealTime evitando tutte le operazioni non necessarie e riducendo il più possibile i ritardi (per esempio la soluzione di inizializzare l'array a valori costanti permette di allocare in memoria questo oggetto e rende i tempi di accesso più veloci).
----------------------------------------
================================================================================
new project
================================================================================
AUTORE: 2857
DATA :29/01/2010 - 15:55:13
----------------------------------------
Buona sera a tutti!!
ho bisogno di un aiuto..dopo aver studiato dei corsi in labview adesso devo capire come gestire un progetto. quindi invece di aprire un nuovo VI devo aprive un "new project" solo che non ho la minima idea di come funzioni!! qualcuno mi puo' dare una mano??magari dandomi dei link a dei manuali, o a siti che spiegano i passaggi e il funzionamento di questa sezione???
vi ringrazio in anticipo
----------------------------------------
AUTORE: 482
DATA :01/02/2010 - 09:37:44
----------------------------------------
Un progetto non è nient'altro ch euna raccolta di file che compongono unapplicazione.
Questi file possono essere vi, immagini, testi e tutto quello che riguarda l'applicazione, comprese le istruzioni per compilare l'eseguibile.
Quando crei un nuovo progetto non devi fare altro che usare il tasto destro del mouse e fare ADD e a seconda di cosa vuoi aggiungere, aggiungere quello che vuoi.
Io solitamente parto con una cartella con già dentroi vi della mia applicazione e quando creo il progetto non faccio altro che agiungergli la cartella con dentro i miei vi come AUTOPOPULATING Folder, in modo che se aggiungo dei file o dei vi in quella cartella, il progetto mi si aggiorna automaticamente.
----------------------------------------
AUTORE: 2857
DATA :01/02/2010 - 09:46:42
----------------------------------------
grazie gep, infatti ho capito che un progetto è come avere una cartella organizzata per un lavoro sulla quale puoi impostare delle opzioni per il labview che non andranno ad interessare altri lavori. anche intuitivamente sto cercano di capire le varie opzioni che si possono scegliere all'interno di un progetto, per questo cercavo una guida che me le spiegasse.
grazie ancora!!alla prossima
----------------------------------------
================================================================================
Filtrare un segnale di posizione
================================================================================
AUTORE: 2895
DATA :29/01/2010 - 16:59:34
----------------------------------------
Ciao a tutti
Stò cercando un modo per riuscire a filtrare un segnale che arriva da un sensore di posizione, questo segnale è una sinusoide è molto sporca, ho provato ad usare dei filtri ma con scarso successo, mi è stato suggerito di fare una media su più pacchetti, ma non ho idea di come fare, scusate sono alle prime armi ho bisogno di aiuto
GRAZIE
----------------------------------------
AUTORE: 4
DATA :15/02/2010 - 09:59:17
----------------------------------------
ciao prova a usare la funzione media point by point, trovi esempi tra quelli di labview
----------------------------------------
================================================================================
calcolo tempo
================================================================================
AUTORE: 2712
DATA :29/01/2010 - 17:21:51
----------------------------------------
ragazzi dovrei calcolare il tempo che intercorre tra il comamdo che invio al mio strumento e la risposta come posso fare? che qualche funzione che mi permette di farlo
ho provato andando a confrontare due valori calcolati con get date/time in seconds ma nn sono convinto del risultato
----------------------------------------
AUTORE: 2550
DATA :29/01/2010 - 17:59:07
----------------------------------------
Ciao. Puoi provare con il Tick Count (ms). Salvi il suo valore quando invii il comando e quando ricevi la risposta. fai la sottrazione e ottieni il tempo intercorso tra i due eventi espresso in ms.
questo in generale, poi bisognerebbe vedere se è applicabile al tuo caso specifico.
provaci. se hai qualche dubbio, posta il VI e vediamo.
Ciao
DVD
----------------------------------------
AUTORE: 2712
DATA :30/01/2010 - 11:36:36
----------------------------------------
grazie c provo
mi puoi dire come si postano i file nel forum
grazie
----------------------------------------
AUTORE: 129
DATA :30/01/2010 - 16:28:55
----------------------------------------
Per allegare segui lìimmagine sotto
[attachment=1:3n90fudp]2010-01-30_170200.png[/attachment:3n90fudp]
per il tick count guarda quest'esempio
[attachment=0:3n90fudp]tick count.png[/attachment:3n90fudp]
----------------------------------------
AUTORE: 2712
DATA :31/01/2010 - 11:15:09
----------------------------------------
non ho potuto testarlo ancora non ho lo stumento a disposizione
ti invio anche la prima versione
----------------------------------------
AUTORE: 2712
DATA :31/01/2010 - 13:17:53
----------------------------------------
[quote="nicola":1o1bvj45]
per il tick count guarda quest'esempio
[attachment=0:1o1bvj45]tick count.png[/attachment:1o1bvj45][/quote:1o1bvj45]
come hai ricavato tick?
----------------------------------------
================================================================================
Problemi con waveform Graphs
================================================================================
AUTORE: 2864
DATA :29/01/2010 - 17:38:42
----------------------------------------
Ciao a tutti, il problemaè questo.
Sto facendo delle prove di acquisizione di corrente usando il daqmx. Il problema è che non mi visualizza nulla.
Dove sbaglio?
----------------------------------------
AUTORE: 2864
DATA :30/01/2010 - 11:03:22
----------------------------------------
Mi rendo conto di aver dato troppo pochi elementi, proverò ad essere più esaustivo.
Devo acquisire misure in corrente e poi convertirle in valori differenti, per questo ho pensato di creare un task apposito in cui i valori di corrente di ogni canale vengono convertiti nell'unità di misura di interesse ed ovviamente per ogni canale è settata la frequenza diacquisizione (le misure di temperatura ad esempio non è necessario che abbiano las tessa frequenza di quelle di pressione o di portata).
Ricontrollando il vi che ho postato prima ho capito che è stato fatto con i piedi (ma credo lo sia anche questo nuovo), non devo creare un canale virtuale ma direttamente un task.
Ho provato a generare del codice con esempio dal task constant dopo aver selezionato il task che mi interessa, ora mi visualizza solamente un canale su tre, ma sono alimentati tutti e funzionano bene dato che utilizzando il daq assistant funziona tutto alla perfezione.
Non riesco proprioa capire dove sbaglio.
Allego questo nuovo vi:
----------------------------------------
AUTORE: 2864
DATA :30/01/2010 - 12:42:44
----------------------------------------
Chiedo scusa, ho fatto un casino.
Ho ricreato il codice partendo da un task impostato nel MAX.
Ora non riesce a leggere nessuna delle correnti, sto sicuramente sbagliando qualcosa nell'inizializzazione del task.
Inoltre ho notato che a volte (anche con il daq assistant) mi da problemi di visualizzazione quando imposto una scala differente.
Allego tutti i files.
----------------------------------------
================================================================================
daq seriale RS 232
================================================================================
AUTORE: 2898
DATA :31/01/2010 - 19:15:55
----------------------------------------
Salve a tutti sono nuovo di Labview, ma già programmo in Basic e ladder. Ho progettato e costruito con un picAxe un mini DAQ con input 4-20mA 0-5V che collego alla seriale (RS232) r faccio datalogging con Hyperterminal e un software scritto in free basic. Ho i seguenti problemi:
con il basic ho fatto una applicazione che mostra un voltmetro ma non riesco a implementargli la funzione di datalogging con salvataggio dei dati in foglio excel
con hyperterminal ho il salvataggio e l'esportazione in .csv (excel) ma non ho l'interfaccia grafica.
Mi potreste aiutare a unire le due cose: datalogging e interfaccia grafica user con una VI di labview?
PS io uso LV 7.1 professional
----------------------------------------
AUTORE: 1168
DATA :01/02/2010 - 08:05:41
----------------------------------------
Ciao!
Se usi RS232 non ci dovrebbero essere problemi di banda...
E immagino che i dati arrvino in straming.
Spezza il problema in tre parti:
1- Acquisizione della stringa dalla seriale (c'è un carattere di terminazione che ti permette di separare i messaggi? I dati sono a lunghezza fissa e quindi basta tagliare ogni tot caratteri, etc.)
2- Estrazione dei dati e visualizzazione
3- Datalogging (in che formato? va bene un generico testo, cvs, o puoi usare formati "compressi" ma non direttamente apribili da office?)
Ogni sezione la puoi imparare abbastanza velcoemente con i VI di esempio che trovi in LV... L'unica cosa forse un pochino, ma proprio un pochino, diversa dal facile è il punto 3. Secondo me la solizione "più bella" per questo punto è usare un'architettura producer-consumer e le code (vedi esempi).
Giocaci un po' nel caso siamo qui!
----------------------------------------
================================================================================
REGOLARE IL TEMPO DI OUT PUT
================================================================================
AUTORE: 2895
DATA :01/02/2010 - 17:19:53
----------------------------------------
Salve a tutti, stò lavorando su un VI in cui da labview devo generare una waveform e darla attraverso un task in uscita alla scheda.Questa forma d'onda può essere regolata a piacimento in frequenza(selezionabile dall' utente), il mio quesito è il seguente, la frequenza che viene impostata dall'utente sarà quella effettiva con cui alimenterò la scheda, oppure dipenderà dalla frequenza dei cicli macchina???
----------------------------------------
AUTORE: 482
DATA :02/02/2010 - 08:11:26
----------------------------------------
Per generare un onda, solitamente si riempie un buffer che o viene passato alla scheda di volta in volta, oppure viene passato la prima volta e poi la scheda lo autorigenera.
Questo per dire che non generi un onda punto-punto, nella quale i tempi e le frequenze sono vincolati dai cicli macchina, ma i vincoli che hai sono dovuti alla dimensione del buffer e dal deltaT che intercorre tra un campione e un altro.
Se fai rigenerare alal scheda l'onda, questo problema non sussiste perchè passi in blocco il tutto, e poi ci pensa la scheda.
Se invece passi di volta in volta la tua onda, devi assicurarti di poter scrivere abbastanza velocemente sul buffer. Praticamente devi poter scrivere un buffer intero, prima che la scheda ne esegua 1 intero.
----------------------------------------
AUTORE: 2895
DATA :02/02/2010 - 09:57:53
----------------------------------------
Ti spiego io ho messo un generatore d'onda, i cui parametri sono impostabili dal utente, poi dò in pasto la waveform a un blocco DAQmx write che la scrive su un task. Tutto questo è contenuto in un ciclo while. Il mio problema è il seguente voglio che la frequenza impostata dall'utente sia quella con cui la scheda realmente alimenta la macchina.NON SO COME FARE PERCHè sono un neofita vi prego aiutatemi
----------------------------------------
AUTORE: 482
DATA :02/02/2010 - 13:16:09
----------------------------------------
cos avuol dire "la freqeunza con cui la scheda alimenta la macchina"??
QUi parliamo di segnali, non di alimentazioni.
Cmq se tu la generi con un blocco di creazione di forma d'onda e gli dai una frequenza, quella sarà la frequenza della forma d'onda d'uscita.
----------------------------------------
================================================================================
Numero degli scalini
================================================================================
AUTORE: 2863
DATA :02/02/2010 - 10:12:33
----------------------------------------
Salve a tutti.Ho impostato una funzione che mi crea una funzione a gradino.Vorrei sapere come faccio ad impostare un numero predefinito di gradini.Ho qui allegato la funzione
----------------------------------------
AUTORE: 2863
DATA :02/02/2010 - 22:05:12
----------------------------------------
Scusate...non mi sono spiegato bene.Ripropongo il programma in maniera semplificata.Come vedete il grafico mi crea la funzione a gradino.Vorrei sapere se è possibile impostare il numero di gradini con una qualche funzione.Vi ringrazio per la pazienza!
----------------------------------------
AUTORE: 2863
DATA :04/02/2010 - 17:55:04
----------------------------------------
Nessuna soluzione?
----------------------------------------
================================================================================
event structure
================================================================================
AUTORE: 2712
DATA :02/02/2010 - 11:23:50
----------------------------------------
ragazzi nel mio programma sto utilizzando una event structure.
l'ordine delle operazioni l ottengo nel programma attraverso l'error in e out dei vari blocchetti presenti nel VI
Durante l' esecuzione del programma quando arriva il momento dell esecuzione edl event naturalmente tutto si arresta in attesa che si verifichi l'evento che ho preimpostato (cambiamento di stato di un bottone).
il problema è questo
quando l'evento avviene prima che sia arrivato il momento del esecuzione del event structure mi si blocca il pannello forntale il mouse si fa a forma di manina e non posso più visualizzare i grafici perche impossibilitato ad utilizzare la finestra del front panel anche se il VI contina l'esecuzione in maniera corretta
come posso risolvere??
vi ringrazio in anticipo
----------------------------------------
AUTORE: 2712
DATA :02/02/2010 - 11:56:14
----------------------------------------
ho risolto quandosi va ad impostare l'evento di esecuzione del event structure si deve DEspuntare in fondo alla finestra un opzione che permette di non far bloccare il front panel
----------------------------------------
AUTORE: 645
DATA :02/02/2010 - 12:49:30
----------------------------------------
[quote="off":2c5qpsgz]...DEspuntare in fondo alla finestra un opzione che permette di non far bloccare il front panel...[/quote:2c5qpsgz]
Magari posta un'immagine così la soluzione può essere utile anche ad altri utenti che incontrano lo stesso problema.
----------------------------------------
AUTORE: 2712
DATA :03/02/2010 - 09:56:34
----------------------------------------
non so allegare l'immagine comedevo fare?????
ho provato come file ma non l'accetta..
----------------------------------------
AUTORE: 2712
DATA :03/02/2010 - 10:05:14
----------------------------------------
ho un altro problema..............
il programma utilizza due event structure che ho piazzato in una struttura case.
esse vanno in esecuzione per lo stesso evento.
confidavo nella struttura case per la mutua esclusione ma cosi non è.
io in effetti voglio che il pogramma si blocchi in un determinato punto (in un ciclo di misurazione per apprezzare i risultati)dell' esecuzione e attenda l'evento,
utilizzando la case structure discrimino i casi ma il programma non mi si blocca dove vorrei (durante un successivo ciclo) perchè le due event structure fanno riferimento allo stesso evento
premetto che non voglio inserire un nuovo bottone
come faccio a rende i due rami del mio programma mutuamente esclusivi ?
----------------------------------------
AUTORE: 43
DATA :03/02/2010 - 11:23:06
----------------------------------------
[quote="off":euri27k4]ho un altro problema..............
il programma utilizza due event structure che ho piazzato in una struttura case.
esse vanno in esecuzione per lo stesso evento.
confidavo nella struttura case per la mutua esclusione ma cosi non è.
io in effetti voglio che il pogramma si blocchi in un determinato punto (in un ciclo di misurazione per apprezzare i risultati)dell' esecuzione e attenda l'evento,
utilizzando la case structure discrimino i casi ma il programma non mi si blocca dove vorrei (durante un successivo ciclo) perchè le due event structure fanno riferimento allo stesso evento
premetto che non voglio inserire un nuovo bottone
come faccio a rende i due rami del mio programma mutuamente esclusivi ?[/quote:euri27k4]
Nell'help di LabVIEW, in merito alla "Event Structure" si consiglia di leggere "Caveats and Recommendations when Using Events in LabVIEW".
Clickando il link appare una lista di raccomandazioni:
[quote="LabVIEW Help":euri27k4]Caveats and Recommendations when Using Events in LabVIEW
Because LabVIEW is a graphical programming interface, handling events is different from handling events in other programming languages. The following list describes some of the caveats and recommendations when incorporating events into LabVIEW applications:
Avoid using an Event structure outside a loop.
Remember to read the terminal of a latched Boolean control in its Value Change event case.
Use a Case structure to handle undo operations for a latched Boolean control.
Use caution when you configure one case to handle multiple notify events.
You cannot configure one case to handle multiple filter events with different event data.
If a While Loop that contains an Event structure terminates based on the value of a latched stop Boolean control, remember to handle the latched stop Boolean control in the Event structure.
Consider using the Wait for Front Panel Activity function if you do not need to monitor specific front panel objects programmatically.
User interface events apply only to direct user interaction.
Avoid using dialog boxes in an event case with the Mouse Down? filter event.
[b:euri27k4]Avoid placing two Event structures in one loop. [/b:euri27k4]
When using dynamic registration, make sure you have a Register For Events function for each Event structure.
When using subpanel controls, the top-level VI containing the subpanel control handles the event.
If you need to generate or handle other events while handling the current event, consider using the Register Event Callback function.
Use caution when selecting between a notify or filter event. An event case configured to handle a notify event cannot affect if or how LabVIEW processes a user interaction. If you want to modify if or how LabVIEW processes a user interaction, use a filter event.
Do not use the Panel Close notify event for important shutdown code unless you have taken steps to ensure that the VI does not abort when the panel closes. For example, be sure the application opens a reference to the VI before a user can close the front panel. Alternatively, you can use the Panel Close? filter event, which occurs before the panel actually closes.
[/quote:euri27k4]
In evidenza la raccomandazione dipertinenza col Tuo caso.
Tra l'altro non capisco xchè mettere 2 EventStructure in 2 case diversi.
Dovrebbe essere il contrario.
Un'unica "Event Structure" dentro un loop, e nel loop mettere uno shift register contenente uno "stato" che discrimina i comportamenti da tenere in x ogni caso. Se un evento è possibile che venga generato solo in una particolare situazione (Es. abilitazione/disabilitazione di un tasto) non è necessario alcun discrimine. Se invece a seguito per es. della pressione del medesimo tasto si devono tenere comportamenti diversi, si usa la variabile shiftRegister di stato per fare il discrimine ALL'INTERNO della Event structure...
bye
----------------------------------------
AUTORE: 2712
DATA :03/02/2010 - 11:41:10
----------------------------------------
hai proprio ragione
grazie 1000
----------------------------------------
================================================================================
Eventi KeyDown tastiera tramite una VI in background
================================================================================
AUTORE: 2279
DATA :03/02/2010 - 08:32:36
----------------------------------------
Ciao a tutti...
volevo porvi il seguente quesito: ho una subvi che gestisce un lettore di codici a barre (quando viene acquisito un codice, l'effetto è quello di una sequenza di tasti spinti sul pc).
Il codice che ho scritto gestisce ciò tramite la struttura "event" che "ascolta" l'evento <This VI> -> Key down.
Se lancio tale VI "da sola" funziona perfettamente. Se viene chiamata da un'altra VI senza fare apparire il suo front panel, gli eventi non vengono più sentiti.
In parole povere, se il front panel della VI in cui c'è la gestione dell'evento "keydown" è attivo, tale evento viene sentito, altrimenti no.
C'è il modo di ovviare a tale problema??
Alessanro
----------------------------------------
AUTORE: 43
DATA :03/02/2010 - 09:00:15
----------------------------------------
[quote="Alle":3hmfda14]Ciao a tutti...
volevo porvi il seguente quesito: ho una subvi che gestisce un lettore di codici a barre (quando viene acquisito un codice, l'effetto è quello di una sequenza di tasti spinti sul pc).
Il codice che ho scritto gestisce ciò tramite la struttura "event" che "ascolta" l'evento <This VI> -> Key down.
Se lancio tale VI "da sola" funziona perfettamente. Se viene chiamata da un'altra VI senza fare apparire il suo front panel, gli eventi non vengono più sentiti.
In parole povere, se il front panel della VI in cui c'è la gestione dell'evento "keydown" è attivo, tale evento viene sentito, altrimenti no.
C'è il modo di ovviare a tale problema??
Alessanro[/quote:3hmfda14]
ciao Ale.
La LabVIEW "Event Structure" gestisce eventi di interfaccia HMI ("Human Machine Interface"), ma esiste la possibilità di definire degli "User Event" che possono essere agganciati dalla struttura stessa.
E' evidente che gli eventi HMI sono gestiti "localmente" cioè ogni "Event Structure" piazzata in un diagramma sarà sensibile agli eventi di interfaccia scatenati nel FrontPanel associato al medesimo Diagram cioè gli eventi del VI stesso.
Pur non capendo la Tua reale esigenza, direi che le soluzioni prospettabili sono 3:
1)la Event Structure va integrata nel VI dove esiste il controllo che realizza l'inserimento utente del dato. in questo caso se hai più controlli sparpagliati i uno o più Front panel di interfaccia HMI, allora dovrai duplicare questa gestione integrandola con le Event structure già esistenti.
2)l'inserimento lo fai tramite un VI di popup.
Soluzione che avevo adottato in un mio carissimo SW fatto un po' di tempo fa in LV7.1 che tra l'altro faceva una cosa simile alla Tua cioè era un SW tramite il quale l'operatore inseriva dei S/N di moduli che dovevano essere testati. Di tali moduli non era possibile leggere il S/N tramite interfaccia di comunicazione (via seriale o via CAN) per cui l'operatore usava un BCR (BarCodeReader) per inserire il n. seriale oppurelo lo digitava manualmente...
Si tratta di creare un VI avente FP visibile e "Modal" nel quale c'è questa gestione event structure che, alla pressione del tasto Return esegue il controllo di coerenza del valore inserito e se è valido torna al VI chiamante con tale valore altrimenti non esce e segnala in un indicatore l'errore. La presenza di un tasto "Cancel" con shortcut key associata =Esc consente di annulare l'operazione da parte dell'operatore.
3)Realizza un X-Control e cacciaci dentro la Tua event structure.
Su come realizzare questo Xcontrol passo la palla a chi ha già smanettato pesantemente con questa roba. cmq ci sono sempre i manuali.
Gli Xcontrol sono disponibili, penso, dalla versione LV8.0
bye
----------------------------------------
AUTORE: 2279
DATA :03/02/2010 - 13:38:41
----------------------------------------
Grazie mille!!!
penso che le soluzione 1 o 3 siano quelle che fanno al caso mio... (ora cerco un po di documentazione a riguardo...
)
infatti ciò che voglio fare è semplicemente essere in grado di rilevare eventi della tastiera che avvengono su un front panel da una subvi il cui front panel è nascosto.
Vi allego l'esempio giusto a titolo di conoscenza (magari a qualcuno può interessare) il programma che ho fatto finora: questo permette di aggiornare il controllo associato ad una stringa sia manualmente che via barcode scanner.
(
ovviamente se avete commenti... ben vengano
).
BARSCAN: è una funzione che si accorge se è stata scansionata una stringa tramite uno scanner.
Il tutto si basa sul fatto che lo scanner spara un sacco di caratteri sulla tastiera a distanza di tempo brevissima (circa 10 millisec). Ho allora utilizzato una struttura evento con un timeout (300 msec, che sono anche troppo abbondanti) in modo da eliminare eventuali battute manuali da parte dell'utente. (per simulare lo scanner basta spingere sulla tastiera tasti a caso velocemente poi fermarsi.
L'unico problema è che mi piacerebbe non essere costretto a far visualizazare il pannello della subvi e tantomeno far si che questo debba essere quello "attivo" (perchè altrimenti non è sensibile alle pressioni dei tasti).
Ciao a tutti!!
Alle[code:3ad6xxas][code][/code][/code:3ad6xxas]
----------------------------------------
================================================================================
Problema con event e pulsanti multipli
================================================================================
AUTORE: 660
DATA :03/02/2010 - 09:49:11
----------------------------------------
Scusate, ma è il miglior titolo che mi veniva in mente.
Ho un problema con un VI; questo devo usarlo per leggere e scrivere dei dati via seriale.
All'avvio il VI deve leggere lo stato dei canali all'altro capo della seriale, poi alla pressione di un tasto (bottone1 o bottone2 nell'esempio) deve inviare il nuovo stato in modo tale che il sistema dall'altra parte lo assuma.
Nel VI allegato ho messo input, input2 ed output che si comportano come vorrei, quello che non capisco è dove sia l'errore per cui lo stesso comportamento non riesco ad averlo utilizzando bottone1 e bottone2.
Se premo bottone1 funziona, ma con il 2 no.
Il subVI fake simula l'invio della richiesta e della risposta in modo simile a quello che fa l'hardware reale.
Il VI di esempio l'ho scarnificato da tutto quello che non era inerente al problema perchè altrimenti c'era un marasma di roba inutile alla simulazione.
Ringrazio chiunque sappia aiutarmi.
Max[attachment=0:3s1qwu5o]prova controllo.zip[/attachment:3s1qwu5o]
----------------------------------------
AUTORE: 660
DATA :04/02/2010 - 09:48:44
----------------------------------------
Sono riuscito finalmante a risolvere il problema, vi allego la soluzione così magari qualcuno può suggerirmi come migliorarene il codice.
Max
[attachment=0:199x1gs2]esempio_funz.zip[/attachment:199x1gs2]
----------------------------------------
================================================================================
custom controls
================================================================================
AUTORE: 660
DATA :03/02/2010 - 10:43:11
----------------------------------------
Spesso mi capita di dovermi inventare qualche controllo un po' particolare per i miei FP.
Mi è pertanto venuto in mente che si potrebbe, non so bene dove, condividere questi nostri controlli in modo tale che ognuno possa risparmiare tempo quando c'è già qualcosa di fatto ed eventualmente ritoccabile allo scopo.
Cosa ne pensate?
Max
----------------------------------------
AUTORE: 927
DATA :05/02/2010 - 13:14:28
----------------------------------------
Esiste una sezione del forum intitolata "Download\Upload" (mai usata devo ammettere), va benissimo anche per i controlli
----------------------------------------
AUTORE: 660
DATA :05/02/2010 - 15:10:44
----------------------------------------
ok, allora appena riesco ne carico qualcuno.
Ciao
Max
----------------------------------------
AUTORE: 660
DATA :05/02/2010 - 23:04:31
----------------------------------------
fatto, ho creato un thread per caricare i controlli customizzati e ci ho messo dentro 4 indicatori per bussola.
Ciao
Max
----------------------------------------
================================================================================
Riconoscimento modalità di Funzionamento
================================================================================
AUTORE: 2712
DATA :03/02/2010 - 12:06:06
----------------------------------------
Altro problema purtroppo.....
Devo gestire uno strumento di misurazione tramite labview (ho la versione 8.0) esso in effetti funziona in tre modi (il dialogo avviene tramite porta seriale protocollo RS232)
1)strumento spento
2)in attesa di istruzioni
3)pronto
il programma dovrebbe capire in automatico in che modalità si trova lo strumento e comportarsi di conseguenza
dalla mia documentazione non ci dovrebbero essere istruzioni che in automatico mi permettano di conoscere lo stato dello strumento.
nella modalità 1 il programma dovrà dire all' utilizzatore di accendere lo strmento e successivamente gestire il dialogo iniziale che questo ha con la seriale (insieme di caratteri sempre uguali (sorta di calibrazione fittizia) che lo strumento spara all accensione sulla seriale).
nella modalita 2 lo strumento acceso invia sulla seriale un particolare messaggio (#00@$*)che avverte che e pronto a ricevere istruzioni.
nella modalita 3 lo strumento acceso è in silenzio aspetta comandi per poi rispondere.
attualmente il mio programma chiede al utilizzatore in che modalità è lo strumento per poi comportarsi di conseguenza
ho necessità che lo facci in automatico.
utilizzo i blocchetti visa
come posso fare????
ringrazio in anticipo e vado a vedere se rieco a risolvere il problema
----------------------------------------
AUTORE: 2712
DATA :03/02/2010 - 12:55:55
----------------------------------------
ho provato adiscriminarei casi con "Byte at port"
in esecuzione normale non funziona
in esecuzione rallentata (con lampadina accesa) funziona parzialmente
posto il VI
----------------------------------------
AUTORE: 43
DATA :03/02/2010 - 13:29:23
----------------------------------------
[quote="off":pz9jtg18]Altro problema purtroppo.....
Devo gestire uno strumento di misurazione tramite labview (ho la versione 8.0) esso in effetti funziona in tre modi (il dialogo avviene tramite porta seriale protocollo RS232)
1)strumento spento
2)in attesa di istruzioni
3)pronto
nella modalità 1 il programma dovrà dire all' utilizzatore di accendere lo strmento e successivamente gestire il dialogo iniziale che questo ha con la seriale (insieme di caratteri sempre uguali (sorta di calibrazione fittizia) che lo strumento spara all accensione sulla seriale).
nella modalita 2 lo strumento acceso invia sulla seriale un particolare messaggio (#00@$*)che avverte che e pronto a ricevere istruzioni.
nella modalita 3 lo strumento acceso è in silenzio aspetta comandi per poi rispondere.
attualmente il mio programma chiede al utilizzatore in che modalità è lo strumento per poi comportarsi di conseguenza
ho necessità che lo facci in automatico.
utilizzo i blocchetti visa
come posso fare????
ringrazio in anticipo e vado a vedere se rieco a risolvere il problema[/quote:pz9jtg18]
SE e solo SE lo strumento funziona come Slave e il Tuo SW è il Master, devi obbligatoriamente utilizzare il "polling".
Ci sono un sacco di discussioni in merito anche in questo Forum devi cercare.
Riguardo le modalità di funzionamento, mi verrebbe da dire, che devi periodicamente interrogare il dispositivo ad es. con un messaggio che non modifica parametri o il funzionamento dello strumento stesso ma al quale obbligatoriamente esso risponde (polling).
Se lo strumento non risponde, siamo in modalità 1 cioè cavo di comunicazione sganciato, spezzato, interrotto ( o connettori sganciati) o strumento non acceso.
Se lo strumento risponde allora siamo in uno dei 2 casi da discriminare in base, suppongo, alla risposta ricevuta alla richiesta di polling.
bye
----------------------------------------
AUTORE: 2712
DATA :03/02/2010 - 13:52:27
----------------------------------------
il mio strumento è Master all' accensione (infatti esso dialoga con la seriale inviandomi una sorta di calibrazione fittizzia per poi mettersi in attesa inviando a intervalli regolari la stringa #00@$* ) di conseguenza il mio programma e slave puo solo ascoltare il dispositivo (e memorizzare il dialogo iniziale).
solo dopo l'invio del primo comando (qualsiasi esso sia) lo strumento diventa controllabile a pieno, ovvero a domanda risponde infatti dopo l'invio del primo comando il dispositivo tace risponde solo quando interrogato
non ci sono comandi che mi permettono di capire in che statosi trovi lo strumento
----------------------------------------
AUTORE: 1168
DATA :03/02/2010 - 14:36:24
----------------------------------------
....mmm... secondo me non puoi usare la stringa #00@$* perchè se lo strumento è già acceso quando lanci il programma ti perdi il "passaggio allo stato di acceso".
Se invece è inviato di continuo solo nello stato di "in attesa", mentre in "pronto" e "spento" non hai un messaggio che viene ripetuto, non puoi distinguere questi ultimi due stati.
Quello che probabilmente ti suggeriva Paracarro è inviare continuamente un comando "innocuo" ed aspettare la risposta. Se c'è risposta allora lo strumento è acceso, altrimenti spento. io uso questa tecnica per vedere se tutti gli dispositivi di un banco test o macchian sono on-line... la cosa che faccio è chiedere il nome del dispositivo. Nelle liste di comandi c'è praticamente sempre il comando che restituisce il nome, la release del firmware, ecc..
Se poi ho capito bene, lo stato "in attesa di istruzioni" è quello in cui lo strumento si trova dopo essere stato acceso, ma che alla fine è uno stato inutile (a meno che le configurazioni possono essere inviate solo in questo stato). Quindi se continui a chiedere qualcvosa in polling, lo strumento va in modalità "pronto" alla prima risposta e ti puoi anche dimenticare lo stato "in attesa" che a questo punto l'utente non vedrebbe nemmeno.
Ciao
Pietro
----------------------------------------
AUTORE: 2712
DATA :03/02/2010 - 17:07:23
----------------------------------------
[quote="Pio":3lem7ip0]....mmm... secondo me non puoi usare la stringa #00@$* perchè se lo strumento è già acceso quando lanci il programma ti perdi il "passaggio allo stato di acceso".
Se invece è inviato di continuo solo nello stato di "in attesa", mentre in "pronto" e "spento" non hai un messaggio che viene ripetuto, non puoi distinguere questi ultimi due stati.
Quello che probabilmente ti suggeriva Paracarro è inviare continuamente un comando "innocuo" ed aspettare la risposta. Se c'è risposta allora lo strumento è acceso, altrimenti spento. io uso questa tecnica per vedere se tutti gli dispositivi di un banco test o macchian sono on-line... la cosa che faccio è chiedere il nome del dispositivo. Nelle liste di comandi c'è praticamente sempre il comando che restituisce il nome, la release del firmware, ecc..
Se poi ho capito bene, lo stato "in attesa di istruzioni" è quello in cui lo strumento si trova dopo essere stato acceso, ma che alla fine è uno stato inutile (a meno che le configurazioni possono essere inviate solo in questo stato). Quindi se continui a chiedere qualcvosa in polling, lo strumento va in modalità "pronto" alla prima risposta e ti puoi anche dimenticare lo stato "in attesa" che a questo punto l'utente non vedrebbe nemmeno.
Ciao
Pietro[/quote:3lem7ip0]
se invio un comando e lo strumento è spento non mi risponde e la visa read va in errore (timeout) come gestisco st errore?
----------------------------------------
AUTORE: 43
DATA :03/02/2010 - 21:10:20
----------------------------------------
[quote="off":290edanc]se invio un comando e lo strumento è spento non mi risponde e la visa read va in errore (timeout) come gestisco st errore?[/quote:290edanc]
Semplicemente quando lo strumendo non risponde devi segnalare all'operatore che lo strumento non è raggiungibile (modalità 1).
L'operatore dovrà sincerarsi che il cavo di comunicazione sia integro e connesso alle estremita sui 2 apparati (strumento e PC...) e che lo strumento sia acceso.
Se le funzioni VISA Ti segnalano un errore diverso da "timeout", allora riporta l'errore all'operatore nel modo + dettagliato possibile e, dopo un "acknowledgment" (riconoscimento dell'errore da parte dell'operatore con un bel popup ed un bottone da premere, per es.), resetta la comunicazione e riparti da 0 (chiudi risorsa VISA e reinizializza tutto).
SE la linea è "disturbata" (errori di checksum, ricezione parziale di messaggi ecc) cerca di approntare una soluzione HW al problema.
In una comunicazione l'unico "errore" che sicuramente va gestito SEMPRE è l'errore di Timeout: sei Tu che devi stabilire con quale freq.interrogere lo strumento ed attentere un tempo ragionevole entro il quale valutare una risposta. Oltre quel tempo deve essere lecito suppore che lo strumento non sia raggiungibile.
Per fare una cosa sofisticata, potresti gestire il polling con un "notifier": in un loop si attende x un tot di tempo una notifica che deve essere inviata ad ogni scambio/invio di messaggi verso lo strumento. Se questa notifica non arriva, allo scattare del timeout, si può inviare il "messaggio di polling" , che, nel Tuo caso, ancora devi trovare per far funzionare la comunicazione in modo decente.
bye
----------------------------------------
AUTORE: 2712
DATA :04/02/2010 - 09:18:45
----------------------------------------
GRAZIE DEI CHIARIMENTI VEDO CHE RIESCO A FARE
MI POTETE SOLO DIRE PERCHE I PROGRAMMINI CHE HO POSTATO NON FUNZIONANO?
PERCHE IL "BYTE AT PORT" NON LEGGE I NUMERO DI DATI PROVENIENTI DALLA SERIALE QUANDO ESEGUO IL VI NORMALMENTE E FUNZIONA PARZIALEMNTE QUANDO L'ESEGUO CON LA "LAMPADINA?
----------------------------------------
AUTORE: 1168
DATA :04/02/2010 - 10:22:46
----------------------------------------
Stai tranquillo e non gridare
Beh, per esempio non ci dico cosa non funziona... e manca anche un VI di quelli che chiami.
Una cosa che succede nel tuo VI è che se lanci il programma a metà stringa #00@$* tu ricevi @$*#00 se ti va bene, altrimenti solo @$* e poi avrai un errore di timeout...
Poi inizializzi la porta e subito va a leggere... non ti conviene aspettare un po' o mettere un loop vuoto con un bel "Wait until next ms multiple" settato a un secondo prima del property node? Se proprio proprio devi aspettare dei dati, aspetta che arrivino! (se non hai una stream continuo #00@$* #00@$* #00@$* #00@$* #00@$* #00@$* #00@$* ).
Ciao!
----------------------------------------
AUTORE: 43
DATA :04/02/2010 - 10:48:54
----------------------------------------
[quote="off":1fwwmp78]GRAZIE DEI CHIARIMENTI VEDO CHE RIESCO A FARE
MI POTETE SOLO DIRE PERCHE I PROGRAMMINI CHE HO POSTATO NON FUNZIONANO?
PERCHE IL "BYTE AT PORT" NON LEGGE I NUMERO DI DATI PROVENIENTI DALLA SERIALE QUANDO ESEGUO IL VI NORMALMENTE E FUNZIONA PARZIALEMNTE QUANDO L'ESEGUO CON LA "LAMPADINA?[/quote:1fwwmp78]
ciao, off
E' Inutile, gridare!
Riguardo al Tuo Vi direi che , non ho mai visto un sw che controlla quanti byte ci sono su una porta , inizializzandola un istante prima...
1) la lettura dalla seriale va fatta in un loop.
Supponiamo che il tuo strumento invii 6 bytes. Per coincidenza temporale, è possibile che "Byte at serial port" ti indichi che ci sono 2 bytes pronti ad essere letti anzichè 6, xkè in quel momento ha ricevuto solo 2 dei 6 bytes. Ri-leggendo la stessa proprietà dopo un millisecondo probabilmente avresti che ci sono disponibili tutti e 6 i bytes...
2)l'inizializzazzione fatta quando serve
3) la close chiude e rilascia la risorsa. Per cui terminata l'esecuzione del VI, se vengono inviati altri caratteri dallo strumento sulla porta, questi verranno ignorati.Quindi i caratteri successivamente considerati sono quelli che giungono sulla porta tra l'esecuzione della funzione di apertura/inizializzazione della seriale e la esecuzione della funzione "byte at serial port", cioè probabilmente meno di un millisec.
bye
----------------------------------------
AUTORE: 645
DATA :05/02/2010 - 09:48:20
----------------------------------------
Alcuni strumenti devono essere impostati su "Remote Control" o qualcosa di simile per poter accettare comandi.
Perciò si potrebbe fare una cosa del tipo:
a) se lo strumento non risponde (errore nella comunicazione) si avvisa l'utente che lo strumento è spento o che bisogna controllare la comunicazione
Se lo strumento risponde quando si chiede il "nome" o i "dati identificativi" allora:
b) se lo strumento non è ancora in Remote Control si avvisa l'utente che lo strumento si sta "preparando" e, una volta impostato il controllo da remoto, lo strumento è pronto
c) se lo strumento è in Remote Control si avvisa l'utente che lo strumento è pronto
Dico questo perchè nel protocollo di comunicazione potrebbe esserci la possibilità di chiedere allo strumento se è disponibile ad essere controllato da remoto oppure no (eventualmente gestendo un errore).
E poi, come già detto nella discussione, bisogna decidere un intervallo di tempo allo scadere del quale chiamare lo strumento e controllare l'eventuale Timeout nella risposta.
----------------------------------------
================================================================================
system exec.vi qualcuno ci riesce ?
================================================================================
AUTORE: 2196
DATA :03/02/2010 - 14:25:15
----------------------------------------
a far partire questo eseguibile: http://sourceforge.net/project/showfile ... _id=471315 . cavolo sia con un bat che con un comando da cmd non ne vuol sentire. uso labview 8.2
----------------------------------------
AUTORE: 927
DATA :05/02/2010 - 11:35:44
----------------------------------------
Gli passi la stringa "cmd /C percorsoexe"?
----------------------------------------
AUTORE: 1124
DATA :05/02/2010 - 12:42:28
----------------------------------------
Ciao
se il problema è quello che incontravo io è stato risolto inserendo un valore costante all'ingresso "standard input".
Puoi trovare traccia della discussione (riguardava un'altro argomento, ma è riportato un banale esempio di utilizzo) qui:
viewtopic.php?f=1&t=4242&p=19039&hilit=system+exec#p18959
Stefano
----------------------------------------
AUTORE: 1124
DATA :05/02/2010 - 12:43:55
----------------------------------------
L'esempio è qui:
viewtopic.php?f=1&t=4242&p=19039&hilit=system+exec#p19051
----------------------------------------
AUTORE: 2196
DATA :05/02/2010 - 13:53:40
----------------------------------------
[quote="Snamprogetti":9tqi8c8k]Gli passi la stringa "cmd /C percorsoexe"?[/quote:9tqi8c8k]
Si e niente da fare...provato anche con start ma niente...
----------------------------------------
AUTORE: 2196
DATA :05/02/2010 - 13:55:15
----------------------------------------
[quote="stefanog":lqkj7hys]Ciao
se il problema è quello che incontravo io è stato risolto inserendo un valore costante all'ingresso "standard input".
Puoi trovare traccia della discussione (riguardava un'altro argomento, ma è riportato un banale esempio di utilizzo) qui:
http://www.ilvg.it/forum/viewtopic.php? ... xec#p18959
Stefano[/quote:lqkj7hys]
Avevo provato anche questo in quanto riportato su un altro forum straniero...
----------------------------------------
AUTORE: 927
DATA :05/02/2010 - 14:38:52
----------------------------------------
Prova l'allegato. L'ho fatto io ai tempi del 7.1 perchè anch'io avevo problemi (mai spiegati) con System exec
----------------------------------------
AUTORE: 43
DATA :05/02/2010 - 17:26:53
----------------------------------------
[quote="Buddace":vrpzun52][quote="Snamprogetti":vrpzun52]Gli passi la stringa "cmd /C percorsoexe"?[/quote:vrpzun52]
Si e niente da fare...provato anche con start ma niente...[/quote:vrpzun52]
Ma il path o il filename dell'exe contengono spazi?
ricordati di chiudere il path completo fra doppi apici ""
Per es. Passa la stringa
cmd /C "c:\pippo\pluto e paperino\fratelli merda.exe"
ok?
bye
----------------------------------------
AUTORE: 2196
DATA :09/02/2010 - 08:02:12
----------------------------------------
Provo e viso dire, grazie per le risposte.
----------------------------------------
AUTORE: 2196
DATA :11/02/2010 - 00:13:43
----------------------------------------
[quote="paracarro":3rwvgjko][quote="Buddace":3rwvgjko][quote="Snamprogetti":3rwvgjko]Gli passi la stringa "cmd /C percorsoexe"?[/quote:3rwvgjko]
Si e niente da fare...provato anche con start ma niente...[/quote:3rwvgjko]
Ma il path o il filename dell'exe contengono spazi?
ricordati di chiudere il path completo fra doppi apici ""
Per es. Passa la stringa
cmd /C "c:\pippo\pluto e paperino\fratelli merda.exe"
ok?
bye[/quote:3rwvgjko]
Cosi funziona!
----------------------------------------
================================================================================
time loop
================================================================================
AUTORE: 2857
DATA :03/02/2010 - 15:45:20
----------------------------------------
Salve ragazzi!! una semplice domanda, sto utilizzando i time loop che esegue un ciclo ogni periodo. il periodo lo imposto io,sia all'interno del "loop timing attributes" che esternamente. però non ho capito il significato del "source type". No avendo installato il modulo real time posso scegliere solo il source type di 1 KHz , nelle varie possibilità <absolute time> , <reset at structure start> .
qual è la differenza?? utilizzando questo tipo di source type significa che uso il clock del sistema operativo e non ha niente a che vedere con l'esecuzione del time loop??
grazie dell aiuto!!
----------------------------------------
AUTORE: 927
DATA :05/02/2010 - 14:28:28
----------------------------------------
è spiegato nell'help della pagina di configurazione del TL.
in sostanza "absolute" cambia solo il tipo di alcuni ingressi/uscite del TL (timestamp anzichè ms), "reset at start" azzera il timer se il TL viene ripetuto più volte (ad es. se a sua volta è dentro un while), ma temporizzano tutti uguale
----------------------------------------
================================================================================
Copiare un file
================================================================================
AUTORE: 1921
DATA :05/02/2010 - 10:14:45
----------------------------------------
Ciao,
è un pò di tempo che non visito il forum... come va?
Ho ripreso a lavorare con LV e mi sono imbattuta nel seguente problema:
esiste un comando che mi consente di copiare un file senza accedere al suo contenuto?
In particolare, devo accedere al server aziendale, recuperare un db access e farne una copia in locale.
grazie mille a chi vorrà rispondere!
ANGELA
----------------------------------------
AUTORE: 1921
DATA :05/02/2010 - 10:20:08
----------------------------------------
Trovato da sola... grazie lo stesso!
Sono proprio arrugginita!
----------------------------------------
================================================================================
Tradurre i menù standard
================================================================================
AUTORE: 927
DATA :05/02/2010 - 15:12:59
----------------------------------------
Sapete come si fa a tradurre i menù a tendina standard che spuntano cliccando col destro su un controllo? Intendo a run-time, non durante lo sviluppo (io lo so l'inglese...)
----------------------------------------
AUTORE: 1078
DATA :12/02/2010 - 12:20:35
----------------------------------------
Penso che tu debba di volta in volta creare un nuovo menu a tendina che assegni al controllo (il menu lo crei con le funzioni menu), il codice di traduzione lo devi inserire nell'evento menu "<nome controllo>: shortcut menu selection (user)". Non cambiare il tag di riferimento alle voci di menù però altrimenti devi scrivere codice di interpretazione del menu selezionato per ogni ligua. Mi spiego, per intercettare il menu cliccato si usa il tag del menu e non la voce visualizzata.
Spero di essere stato chiaro.
----------------------------------------
AUTORE: 927
DATA :12/02/2010 - 13:36:42
----------------------------------------
Non ti permette di usare i tag predefiniti con etichette diverse da quelle predefinite.
Usando un evento a runtime come dici tu, se fai "Set menu item info" su un tag predefinito (es. APP_SC_COPY_DATA) dà errore; se fai "Set menu items" se ne frega della tua etichetta e ci mette comunque quella predefinita.
Idem se provi a modificare staticamente i menù da Advanced -> Runtime shortcut menu -> Edit..., se usi un item tag di quelli predefiniti, il bastardo ti ci rimette automaticamente anche l'etichetta predefinita
----------------------------------------
AUTORE: 1078
DATA :15/02/2010 - 07:51:42
----------------------------------------
Non sapevo si comportasse così.
Comunque quello che intendevo io è ricostruire del tutto i menu standard che quindi diventano utente. Ovviamente dovrai riscriverti tutte le funzioni comuni come "taglia", "copia" e "incolla"! Un bel lavoro!
----------------------------------------
AUTORE: 927
DATA :15/02/2010 - 11:21:16
----------------------------------------
Si infatti sarebbe un lavoro duro e assurdo, praticamente devi reinventare la ruota, e solo per cambiare delle scritte. Non sta nè in cielo nè in terra. Ho chiesto anche al forum americano, ma ne sanno anche meno:
http://forums.ni.com/ni/board/message?b ... .id=474802
----------------------------------------
================================================================================
scrittura e visualizzazione di un dato ogni tot tempo
================================================================================
AUTORE: 2784
DATA :05/02/2010 - 22:16:16
----------------------------------------
Salve ho un sistema che non deve perdere la connessione con gli strumenti..cosi facendo la connessione si deve aprire ogni 10 sec...se però non volessi tutti i dati ma vorrei che si visualizzassero solo i valori e in un file si scrivessero solo i dati ogni, ad esempio 5 min,come posso fare???
----------------------------------------
AUTORE: 645
DATA :08/02/2010 - 12:35:55
----------------------------------------
Dai un'occhiata agli esempi riguardanti i cicli: puoi lavorare con un solo ciclo e a seconda del "momento temporale" fai solo la visualizzazione o anche il salvataggio su file o, forse meglio, utilizzare due cicli in parallelo con temporizzazioni diverse, uno responsabile della visualizzazione dei dati e l'altro incaricato di salvare su file.
----------------------------------------
AUTORE: 2784
DATA :08/02/2010 - 12:44:52
----------------------------------------
[quote="MagicBotolo":be8euu55]Dai un'occhiata agli esempi riguardanti i cicli: puoi lavorare con un solo ciclo e a seconda del "momento temporale" fai solo la visualizzazione o anche il salvataggio su file o, forse meglio, utilizzare due cicli in parallelo con temporizzazioni diverse, uno responsabile della visualizzazione dei dati e l'altro incaricato di salvare su file.[/quote:be8euu55]
magic ecco quale è il mio problema...alla fine io prendo un dato ogni secondo..voglio che vengano visualizzati e salvati ogni 5 secondi..quindi non voglio una visualizzazione ogni secondo ma voglio che siano visualizzati e salvati allo stesso tempo!
----------------------------------------
AUTORE: 645
DATA :08/02/2010 - 12:57:07
----------------------------------------
Vediamo se ho capito: ogni secondo hai un dato a disposizione e ogni 5 secondi vuoi visualizzare il dato (quello corrente o un'elaborazione dei dati degli ultimi 5 secondi? Una media o qualcosa di simile...?) e registrarlo su file (anche in questo caso c'è un'elaborazione, vuoi salvare il dato corrente, vuoi salvare tutti i dati degli ultimi 5 secondi...)...
----------------------------------------
AUTORE: 2784
DATA :08/02/2010 - 13:02:57
----------------------------------------
no io prendo un dato ogni secondo
1
2
3
4
5
voglio salvare e visualizzare solo il quinto...il 5
cioè ogni tot di secondi o min visualizzami e salvami quel dato
poi altri dati
6
7
8
9
10
..voglio il dieci ...degli altri me ne frego..cioè ogni tot dammi il dato..
----------------------------------------
AUTORE: 645
DATA :08/02/2010 - 13:55:41
----------------------------------------
Mi vengono in mente due modi al volo:
a) se vuoi il dato "n-simo" fai un ciclo, leggi l'indice del ciclo (variabile "i") e se l'indice del ciclo è multiplo del "n-simo" dato desiderato lo prendi altrimenti non fai nulla
(per esempio, se vuoi il 5°, il 10°, il 15°... usi un ciclo di lettura e se l'indice di ciclo è multiplo di 5 allora usi il dato altrimenti non fai nulla)
b) se vuoi un dato ogni tot di tempo controlli che l'istante in cui viene eseguito il ciclo sia multiplo dell'intervallo di tempo desiderato.
----------------------------------------
AUTORE: 2784
DATA :08/02/2010 - 14:09:11
----------------------------------------
[quote="MagicBotolo":1varccts]Mi vengono in mente due modi al volo:
a) se vuoi il dato "n-simo" fai un ciclo, leggi l'indice del ciclo (variabile "i") e se l'indice del ciclo è multiplo del "n-simo" dato desiderato lo prendi altrimenti non fai nulla
(per esempio, se vuoi il 5°, il 10°, il 15°... usi un ciclo di lettura e se l'indice di ciclo è multiplo di 5 allora usi il dato altrimenti non fai nulla)
b) se vuoi un dato ogni tot di tempo controlli che l'istante in cui viene eseguito il ciclo sia multiplo dell'intervallo di tempo desiderato.[/quote:1varccts]
ciclo for?
----------------------------------------
AUTORE: 1078
DATA :11/02/2010 - 15:52:36
----------------------------------------
Io farei due cicli distinti che lavorano in parallelo. Uno si occuperà della lettura e della visulizzazione del dato e sarà temporizzato ogni secondo, l'altro si occuperà del salvataggio del dato visualizzato ogni 5 secondi. Vi allego quello che farei io! Spero vi sia utile.
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 16:11:11
----------------------------------------
Caruccio..
Ricky,scusa solo una domanda da perfetto ignorante..usando un wait sei proprio sicuro che il valore che prende è il quinto? cioè se ho ad esempio più cicli while paralleli non è il sistema operativo che gestisce la tempistica con cui farli svolgere?Se ho un ritardo su un ciclo (visto che Win deve svolgere più operazioni anche al di fuori di LV), questo si può ripercuotere sul ciclo di scrittura o no?
Grazie della risposta in anticipo
----------------------------------------
AUTORE: 1078
DATA :12/02/2010 - 07:14:09
----------------------------------------
[quote="therealdeal":3c9bic9x]Salve ho un sistema che non deve perdere la connessione con gli strumenti..cosi facendo la connessione si deve aprire ogni 10 sec...se però non volessi tutti i dati ma vorrei che si visualizzassero solo i valori e in un file si scrivessero solo i dati ogni, ad esempio 5 min,come posso fare???[/quote:3c9bic9x]
Nel tuoproblema iniziale non era specificato che avessi bisogno di salvare solo ed esclusivamente il 5° valore ricevuto. Per avere la certazza che un codice venga eseguito ogni tot tempo e non sfori dovresti usare sistemi Real-Time. Sotto win le tempistiche di esecuzione tra thread paralleli non sono garantite, ma se vai "fuori tempo" ne esci per qualche centinaio di millisecondi. Quindi, con tempistiche così lunghe, dovresti essere più o meno sicuro di prendere sempre il quinto valore. Per garantire un maggior controllo di tempistica potresti anzichè usare la funzione "wait " usare la funzione "wait untile next multiple", avresti un piccolo problema sul primo valore per la sincronizzazione dei due cicli, ma poi dovresti aver garantito (sempre win permettendo) l'esecuzione del codice ogni 5sec.
Se vuoi recuperare sempre il quinto valore dei valori acquisiti, ti conviene ( come suggerito da magic) verificare quando il contatore del ciclo diventa multiplo del valore cercato, a quel punto salvi il dato su disco.
----------------------------------------
AUTORE: 1078
DATA :12/02/2010 - 07:23:49
----------------------------------------
In questo esempio salvo un dato ogni 5, con temporizzazione di acquisizione ogni secondo.
----------------------------------------
AUTORE: 2784
DATA :12/02/2010 - 17:27:09
----------------------------------------
Ti ringrazio per le tue precisazioni..
Forse non mi ero spiegato bene...a me serve salvare e visualizzare solo i multipli di un tempo di campionamento
se il tempo di campionamento è 5 sec e l'acquisizione è ogni secondo, allora io visualizzo e salvo il 5, il 10, il 15...
Questo è bello...salva i multipli di 5...visualizza tutti i valori giusto?
----------------------------------------
AUTORE: 1078
DATA :15/02/2010 - 07:46:08
----------------------------------------
Si certo, visualizza tutti i valori.
----------------------------------------
AUTORE: 2784
DATA :15/02/2010 - 22:22:53
----------------------------------------
[quote="Ricky":2ysdkije]Si certo, visualizza tutti i valori.[/quote:2ysdkije]
Per ora ti ringrazio..
----------------------------------------
================================================================================
Domanda stupida..lo zoom di labview
================================================================================
AUTORE: 2784
DATA :05/02/2010 - 22:17:50
----------------------------------------
Salve ho a che fare con un diagramma a blocchi e un front panel moltoooo grande...per cui come posso stampare o creare una immagine del totale...non esiste uno zoom il labview vero??Ringrazio ancora
----------------------------------------
AUTORE: 660
DATA :05/02/2010 - 23:06:33
----------------------------------------
no, però nelle ultime versioni, mi sembra dalla 8.2 in poi hanno aggiunto la navigation window che attivi da un odei menu che ti consente di vedere tutto il block diagram rimpicciolito con evidenziata la parte al momento visibile sul tuoschermo.
Ciao
Max
----------------------------------------
AUTORE: 482
DATA :08/02/2010 - 08:22:34
----------------------------------------
la navigation window si attiva anche con i tasti CTRL+SHIFT+N
----------------------------------------
AUTORE: 2784
DATA :08/02/2010 - 09:28:32
----------------------------------------
[quote="gepponline":2t855lri]la navigation window si attiva anche con i tasti CTRL+SHIFT+N[/quote:2t855lri]
thanks..ma è una finestra piccola uguale...non fa ad aumentarne le dimensioni?
----------------------------------------
AUTORE: 482
DATA :08/02/2010 - 13:52:44
----------------------------------------
la puoi ingrandire quanto tutto lo schermo.
Senno' avevo provato tempo fa una cosa che si chiamava tipo eagle eye view per labview....era proprio uno strumento di zoom
----------------------------------------
AUTORE: 2784
DATA :08/02/2010 - 14:10:26
----------------------------------------
[quote="gepponline":3o5ew1o4]la puoi ingrandire quanto tutto lo schermo.
Senno' avevo provato tempo fa una cosa che si chiamava tipo eagle eye view per labview....era proprio uno strumento di zoom[/quote:3o5ew1o4]
è proprio quello che serve a me...dove posso trovarlo?
----------------------------------------
AUTORE: 482
DATA :08/02/2010 - 14:29:57
----------------------------------------
QUI
http://www.openg.org/tiki/tiki-index.ph ... s+Eye+View
----------------------------------------
AUTORE: 2784
DATA :08/02/2010 - 14:42:00
----------------------------------------
[quote="gepponline":iuaet084]QUI
http://www.openg.org/tiki/tiki-index.ph ... s+Eye+View[/quote:iuaet084]
domanda stupida..ma è una libreria per labview?? devo metterlo nellla cartella delle LLB? anche il file ini?
----------------------------------------
AUTORE: 482
DATA :09/02/2010 - 08:00:08
----------------------------------------
onesamente non mi ricordo.
Mi pare fosse una specie di applicazione.
Nel senso che tu apri la libreria con labview e mandi in run il vi principale e tutto funziona.
Non so se sia ocmpatibile con le ultime versioni di LabVIEW.
----------------------------------------
================================================================================
interfaccia sensore
================================================================================
AUTORE: 2906
DATA :06/02/2010 - 11:40:35
----------------------------------------
Ciao a tutti voi,
sto iniziando con labview, ed ho un dispositivo NI USB 6009
ed un sensore di pressione che mi da in uscita un segnale costante che può variare in un range di 0-3V.
Come visualizzare in una schermata di labview:
l'andamento nel tempo della pressione e il valore attuale della pressione ?
grazie a tutti
----------------------------------------
AUTORE: 645
DATA :08/02/2010 - 12:37:06
----------------------------------------
Hai guardato gli esempi?
Credo che il tuo problema riguardi l'acquisizione del sensore: una volta che riesci a leggere il valore rilevato puoi inserirlo in un grafico insieme ai dati precedenti e visualizzarlo da solo in una casella numerica.
----------------------------------------
================================================================================
Nome curva ..
================================================================================
AUTORE: 2536
DATA :06/02/2010 - 16:06:15
----------------------------------------
Ciao a Tutti, prima di "rompere .." ho cercato sul ns. forum ed anche al di fuori .. ma nulla!
E' possibile ottenere il nome di una curva/traccia su un grafico multitraccia al passaggio del mouse (tipo tooltip) ?
Sempre grazie!
Mauro
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 11:18:32
----------------------------------------
[quote="Mauro63":v5rzt21t]Ciao a Tutti, prima di "rompere .." ho cercato sul ns. forum ed anche al di fuori .. ma nulla!
E' possibile ottenere il nome di una curva/traccia su un grafico multitraccia al passaggio del mouse (tipo tooltip) ?
Sempre grazie!
Mauro[/quote:v5rzt21t]
mah....
Più che visualizzare un tooltip, ti consiglierei di:
-lasciare visibile la legenda dei plot
-abilitare un cursore non "free" (in modo che agganci la traccia + vicina)
- gestire l' evento dim mouse move sul grafico in questione...
- ad ogni evento verificare che il plot sia cambiato o meno.
- evidenziare la traccia gli attributi (ad esempio inspessire la traccia stessa)
Se mi avanza tempo ti confeziono un esempio stasera...
però penso di essere stato chiaro...
bye
----------------------------------------
AUTORE: 2536
DATA :08/02/2010 - 11:51:00
----------------------------------------
Grazie Paracarro, preferirei un tooltip per ragioni di spazio grafico ma se proprio non fosse possibile valuterei di buon occhio una soluzione come quella da te proposta.
Ti ringrazio della tua eventuale disponibilità serale perchè in effetti un esempio mi sarebbe davvero utile: a tal riguardo se tu non potessi questa sera, è sufficiente anche una delle prossime .. Ancora grazie.
Mauro
PS. La mia versione è la 8.6.1 Base (non godo di eventi ..
)
----------------------------------------
================================================================================
Realizzare un menu "options"
================================================================================
AUTORE: 2279
DATA :08/02/2010 - 08:37:59
----------------------------------------
Ciao a tutti,
volevo chiedere se in LW ci sia la possibilità di rellizzare un menu come quello che si visualizza tramite "tools->opions" (per intenderci quello che permette di settare tutte le opzioni di LW).
Sto infatti lavorando ad un VI in cui, oltre al normale funzionamento, l'operatore deve essere in grado di sceglere parametri o impostazioni particolari al programma. Esistono funzioni o template a questo scopo??
Inoltre, per il salvataggio delle impostazioni, esistono soluzioni differenti da quella di creare un file con le impostazioni salvate? (io attualmente sto utilizzando un file binario .cfg, tramite le funzioni della paletta "configuration file"
).
Grazie mille
----------------------------------------
AUTORE: 278
DATA :08/02/2010 - 09:28:17
----------------------------------------
Ciao,
[quote:tihakueg]volevo chiedere se in LV ci sia la possibilità di rellizzare un menu come quello che si visualizza tramite "tools->opions"[/quote:tihakueg]
certo, puoi personalizzare il runtime menù dei tuoi VI cliccando su Edit->Run time Menù, seleziona "Custom" tramite il menù a tendina (di base è impostato su "Default") e crea i tuoi menù a piacimento.
Puoi interagire con i menù tramite le funzioni che trovi nella palette Programming->Function palette->Dialog & User Interface->Menu, qualche esempio sull'utilizzo di queste funzioni lo trovi nell'Example Finder.
[quote:tihakueg]per il salvataggio delle impostazioni, esistono soluzioni differenti da quella di creare un file con le impostazioni salvate?[/quote:tihakueg]
Personalmente ritengo che questa sia la soluzione migliore, anche se, a dire il vero, non so se esistono altri metodi
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 09:32:08
----------------------------------------
[quote="Alle":2q9fars3]...volevo chiedere se in LW ci sia la possibilità di rellizzare un menu come quello che si visualizza tramite "tools->opions" (per intenderci quello che permette di settare tutte le opzioni di LW).
Sto infatti lavorando ad un VI in cui, oltre al normale funzionamento, l'operatore deve essere in grado di sceglere parametri o impostazioni particolari al programma. Esistono funzioni o template a questo scopo??
Inoltre, per il salvataggio delle impostazioni, esistono soluzioni differenti da quella di creare un file con le impostazioni salvate? (io attualmente sto utilizzando un file binario .cfg, tramite le funzioni della paletta "configuration file"
).[/quote:2q9fars3]
Certo si chiamano SubVI.
L'applicazione non deve (possibilmente mai) come un unico VI monoblocco monolitico. Le stessa funzioni richiamabili da Diagram possono essere dei SubVI di libreria il cui FP (FrontPanel) sia Visibile o meno. Il Front Panel, se visibile viene reso visibile quando il SubVI viene eseguita la chiamata (call) come stabilito nel Diagramma del VI
Riguardo i file di configurazione e consigliabile memorizzare le informazioni in un file di testo di tipo .ini o .xml. Trovi funzioni per gestire questo genere di file nell'apposita palette "File".
bye
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 14:28:47
----------------------------------------
Per capire quanto è facile fare un SubVI,te ne ho confezionato uno simile proprio alle option menu che vorresti.
[attachment=0:2y3yy1bd]option_template.vi[/attachment:2y3yy1bd]
Per ottenere un vero Template rinomina il file da . vi a .vit
bye
----------------------------------------
AUTORE: 2279
DATA :08/02/2010 - 18:25:59
----------------------------------------
Caspita... è proprio ciò che voglio fare!!! Grazie mille Paracarro!!
Stavo pensando a come fare apparire e sparire i controlli, e non avevo pensato minimamente al tab control... che pirla...
Ora mi manca solo da salvare i parametri in un file di configurazione... siccome ne ho veramente molti e di vario tipo, userò qualcosa con le variant data... vedrò..
intanto grazie mille!!!
----------------------------------------
AUTORE: 2279
DATA :08/02/2010 - 19:23:25
----------------------------------------
Stavo notando però, se cerco di ottenere una lista di reference a tutti i controlli che ci sono all'interno del VI, quelli che sono dentro al tabcontrol non riesco a vederli (uso un riferimento a this vi, invoco la propietà "front panel" e di quel riferimento guardo la proprietà "controls[]": nell'array di riferimenti che ottengono mancano quelli dei controlli all'interno del tab...).
C'è modo di recuperarli e metterli in un array di riferimenti (che userò poi in seguito in un for loop)??
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 20:59:59
----------------------------------------
[quote="Alle":2o6pq8fw]Stavo notando però, se cerco di ottenere una lista di reference a tutti i controlli che ci sono all'interno del VI, quelli che sono dentro al tabcontrol non riesco a vederli (uso un riferimento a this vi, invoco la propietà "front panel" e di quel riferimento guardo la proprietà "controls[]": nell'array di riferimenti che ottengono mancano quelli dei controlli all'interno del tab...).
C'è modo di recuperarli e metterli in un array di riferimenti (che userò poi in seguito in un for loop)??[/quote:2o6pq8fw]
Ovviamente sì.
Preso il reference del tabcontrol prendi la proprietà [Pages] l' array di ref. delle pagine che compongono il Tab Control.
Del ref. di ogni [Page] prenditi la proprietà [Controls On Page] e il giuoco è fatto.
Dell'esempio che ti ho inviato non so se hai notato la "finezza"dell' uso degli splitter e di come i tasti "OK " e "Cancel" siano ancorati in basso a dx supportando al meglio il "resize" del FP, che , una volta fissata la sua dimensione come meglio ti aggrada, può essere popolato con i controlli di configurazione.
Non conoscendo minimamente i tuoi parametri di configurazione non posso esprimere con precisione un giudizio di merito, ma se penso a come è fatto LabVIEW.ini...
Insomma, LabVIEW.ini è sicuramente un file di configurazione.
Ecco xkè non mi vedi daccordo quando parli di usare variant: immagino che poi Tu voglia memorizzare i dati in forma binaria...
meglio avere uno o più file di configurazione magari divisi in più sezioni (quelle fra parantesi quadre []) ma non il blocco binario che non può essere modificato con un text editor ed al quale non si può procedere aggiungendo o togliendo parametri senza incappare in una fila smisurata di problemi...
Se è come penso... pessima scelta amico!
bye
----------------------------------------
AUTORE: 2279
DATA :08/02/2010 - 22:18:12
----------------------------------------
Tu non immagini quanto ti sia grato...
Ora ragiono un po su come procedere nel salvataggio dei valori dei vari controlli... mi sa che proverò o con file xml o con con le vi "config files".. il fatto è che non avevo mai affrontato un problema del genere...
CIao
----------------------------------------
================================================================================
Variabili shared network published
================================================================================
AUTORE: 2821
DATA :08/02/2010 - 09:08:41
----------------------------------------
Sto preparando un'applicazione con compactRIO, usando un PC come HMI (quindi collegamento ethernet PC<->cRIO). Per la comunicazione tra i due sistemi sto utilizzando le variabili shared network-published, ma sto incontrando un sacco di problemi.
Sulla parte RT ho dei cicli temporizzati che scrivono sulle variabili, allo stesso modo ho dei cicli temporizzati per la lettura sulla parte PC. La comunicazione funziona a seconda dei tempi di ciclo, ovvero se uso dei tempi più stretti, ad es. 500 ms, la comunicazione non va, avviene solo una lettura e poi si ferma tutto, se allungo i tempi ad 1-2 s allora funziona correttamente; la sensazione è che quando i tempi sono brevi la rete si sovraccarica di dati e si blocca tutto, ma probabilmente sono io che sbaglio qualcosa, visto che le variabili sono solo una decina e i tempi di lettura di 500 ms non sono esagerati (tipico valore di refresh di una interfaccia operatore)
qualcuno mi può aiutare?
grazie
----------------------------------------
AUTORE: 645
DATA :08/02/2010 - 12:38:15
----------------------------------------
Puoi postare un'immagine del tuo Block Diagram e della struttura del progetto?
Potrebbe trattarsi di un problema legato alla temporizzazione delle operazioni.
----------------------------------------
AUTORE: 2821
DATA :08/02/2010 - 14:47:32
----------------------------------------
In questo modo sembra che funzioni, ma non sono molto convinto. Qualcuno può dare un'occhiata e controllare se tutto è a posto?
E' corretto questo modo di procedere?
Il mio progetto dovrebbe contenere circa quattro/cinque volte tanto le variabili di questo prog. di prova, secondo voi è fattibile, o posso incorrere in ritardi (tenendo conto che la velocità di refresh dovrebbe essere circa 250/500 ms) ???
grazie.
----------------------------------------
================================================================================
allocazione memoria continua
================================================================================
AUTORE: 838
DATA :08/02/2010 - 10:51:54
----------------------------------------
Salve, ho un problemino di memoria con delle mie applicazioni.
Tramite il task manager di windows noto un continuo allocamento di ram sull'eseguibile di labview, di almeno 8kb/ora, che in sistemi xp embedded con poca ram mi crea problemi (il mio applicativo dovrebbe girare teoricamente a vita, senza mai uscire a win)
Ho visionato tutto il codice e non ho allocamenti strani (tipo array che si gonfiano, reference lasciate aperte) e sia il performance and memory tool e il memory monitor non rilevano nessuna variazione nel tempo, ma il task manager si....
Che cavolo potrebbe essere? E' successo qualcosa di simile anche a voi? Esistono tool più specifici?
Nel codice richiamo sia proprety node, che global variable, ma sembra tutto ok...
Grazie, ciao a tutti
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 11:13:36
----------------------------------------
[quote="minzuk":3hctntm1]Salve, ho un problemino di memoria con delle mie applicazioni.
Tramite il task manager di windows noto un continuo allocamento di ram sull'eseguibile di labview, di almeno 8kb/ora, che in sistemi xp embedded con poca ram mi crea problemi (il mio applicativo dovrebbe girare teoricamente a vita, senza mai uscire a win)
Ho visionato tutto il codice e non ho allocamenti strani (tipo array che si gonfiano, reference lasciate aperte) e sia il performance and memory tool e il memory monitor non rilevano nessuna variazione nel tempo, ma il task manager si....
Che cavolo potrebbe essere? E' successo qualcosa di simile anche a voi? Esistono tool più specifici?
Nel codice richiamo sia proprety node, che global variable, ma sembra tutto ok...
Grazie, ciao a tutti[/quote:3hctntm1]
Scusa ma non hai citato la versione di LabVIEW...
E' arcinoto che dalla versione 8 di LV l'opzione "deallocate memory as soon as possible" non esiste +...
La memoria richiesta al Sistema Operativo non viene rilasciata se non esplicitamente oppure capita che venga liberata (cioè restituita al S.O.) chiudendo (cioè iconizzando) il Front Panel.
La momoria che resta allocata viene gestita da LabVIEW stesso alla bisogna...
bye
----------------------------------------
AUTORE: 838
DATA :08/02/2010 - 13:13:53
----------------------------------------
scusatemi, me lo fa sia con la 8.6 che con la 2009
da quel che ho capito dalla 8 non riesce più a deallocare la memoria??? io ho riempito tutti i mi vi con la request deallocation, è inutile al 100%? (dai miei test mi sa proprio di si!)
grazie
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 14:03:57
----------------------------------------
[quote="minzuk":w3bh4nev]scusatemi, me lo fa sia con la 8.6 che con la 2009
da quel che ho capito dalla 8 non riesce più a deallocare la memoria??? io ho riempito tutti i mi vi con la request deallocation, è inutile al 100%? (dai miei test mi sa proprio di si!)
grazie[/quote:w3bh4nev]
mmmm...
Se hai infarcito il Tuo codice di request deallocation, mi verrebbe da dire che 6 a posto....
La deallocazione viene effettuata sul "return" del SubVI.
A questo punto resterebbe fuori solo il Tuo "main" ho cmq quel VI il cui FP resta sempre aperto.
Se lo iconizzassi e lo riaprissi in automatico ogni 24h?
E poi , x quanti giorni hai lasciato accesa la Tua applicazione ?
Hai lasciato accesa la Tua app. fino al crash?
bye
----------------------------------------
AUTORE: 838
DATA :08/02/2010 - 14:22:33
----------------------------------------
infatti ho paura che devo riavviare l'fp ogni 24 ore
l'applicazione è distribuita per adesso su una 20 di pc, i quali tutti, bene o male, dopo 2 mesi hanno crashato...
come test ora utilizzo sempre aperto task manager, ed effettivamente c'è un incremento continuo di ram occupata, e mi angoscia vedere quanta ne alloca "per niente"
proverò o chiudere e riaprire l'fp e tutti i .vi che posso, mi sa che è l'unica soluzione
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 14:52:35
----------------------------------------
[quote="minzuk":1swwgz01]infatti ho paura che devo riavviare l'fp ogni 24 ore
l'applicazione è distribuita per adesso su una 20 di pc, i quali tutti, bene o male, dopo 2 mesi hanno crashato...
come test ora utilizzo sempre aperto task manager, ed effettivamente c'è un incremento continuo di ram occupata, e mi angoscia vedere quanta ne alloca "per niente"
proverò o chiudere e riaprire l'fp e tutti i .vi che posso, mi sa che è l'unica soluzione[/quote:1swwgz01]
Un ultima cosa, x seminare un po' di panico...
Avevo già citato in una vecchia discussione quanto mi era successo con una vecchia applicazione , ai tempi di Nicola Chiari...
Beh!era successo che compilando del codice fatto in LabVIEW 5 a LV6, venivano convertiti in modo "strano" alcuni property nodes: il property nodes riguardavano la proprietà Xmin, Xmax, Ymin, Ymax, dei Graph perchè ne era cambiata la struttura di appartenenza.
Nel diagrammaqueste proprietà apparivano come "Old_Xmin" "Old_Xmax" ecc. ma non c'era verso di trovarle nei menù delle proprietà, potevano unicamente essere il frutto della conversione da LV5 a LV6
Grazie ad un baco di LabVIEW l'esecuzione di quelle proprietà comportava un'allocazione fissa di pochi bytes ad ogni esecuzione e quella memoria non veniva + deallocata!!!
La soluzione fu sostituire tutti quei property nodes frutto di conversione con equivalenti generati di nuovo e il SW riprese a funzionare regolarmente.
Le ricompilazioni da una versione ad un'altra mi fanno spesso paura soprattutto sul cambio di "major revision" xchè si innescano meccanismi di conversione che tengono conto della retro-compatibilità che non sono mai sufficientemente noti e (dico io) testati...
bye
----------------------------------------
AUTORE: 838
DATA :08/02/2010 - 15:40:28
----------------------------------------
orko boia, ne ho visti un paio di _old in giro, corro subito a sostituirle!!!
grazie, provo immediatamente!!!!
----------------------------------------
AUTORE: 838
DATA :08/02/2010 - 15:57:21
----------------------------------------
ho scoperto di richiamare e inserire dei fp nel subpanel tramite le funzioni convertite in open_old, sostituite con open e vediamo che succede.
di propriety node _old non ne ho trovati per ora, continuo la ricerca
mannaggia alle conversioni di applicativi! il mio me lo trascino dal 8.2 -> 8.6 -> 2009, chissà che casini mi son creato!
----------------------------------------
AUTORE: 838
DATA :09/02/2010 - 08:48:28
----------------------------------------
purtroppo questa notte ha allocato circa 40 Kb/h, allucinante!
----------------------------------------
AUTORE: 43
DATA :09/02/2010 - 09:10:14
----------------------------------------
Meglio 40 Kb/h che 1 Kb/gg...
Maggiore è la velocità con cui cresce l'allocazione di memoria e + facile è individuare ed isolare il problema.
Usa tutti i mezzi a Tua disposizione e auguri.
Controlla che tutte le funzioni "open" corrisponda una "close" e che non vengano eseguite delle "open" senza aver eseguito prima una "close" della medesima risorsa.
Ricordati che i reference ricavati da proprietà di controlli o altro vanno sempre chiusi. Evita come la peste i "Build Array" specialmente se vengono eseguiti in continuo...piuttosto allocati degli array di lunghezza fissa e poi modificali...
Tutte cose che probabilmente sai già, come "commentare" pezzi di codice per isolare il problema...
bye
----------------------------------------
AUTORE: 838
DATA :09/02/2010 - 10:07:29
----------------------------------------
eh! testando a zone l'applicazione non da questo problema, tutta insieme si.... si vede che si incastra qualcosa, tipo lettura e scrittura di variabili globali da vi diversi, secondo il supporto non dovrebbe dare problemi ma per me....
----------------------------------------
================================================================================
Eliminare misure spurie
================================================================================
AUTORE: 2864
DATA :08/02/2010 - 14:23:06
----------------------------------------
Ho la necessità di attivare un allarme quando la tensione in un canale scende al di sotto di una certa soglia, ho sviluppato un vi con un semplice controllo ed ho staccato un paio di ingressi dalla morsettiera.
Lanciando il programma però il vi rileva comunque delle tensioni che sono dello stesso ordine di grandezza di quelle effettivamente rilevate, come posso eliminare questo fenomeno?
Sto utilizzando una configurazione rse.
----------------------------------------
AUTORE: 2864
DATA :08/02/2010 - 14:25:46
----------------------------------------
Allego uno screenshot: [img:w89t9oqp]http://forums.ni.com/ni/attachments/ni/7170/2740/1/Test%20Sensori.JPG[/img:w89t9oqp]
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 14:55:45
----------------------------------------
[quote="Pablo!":2lxvlfqg]Ho la necessità di attivare un allarme quando la tensione in un canale scende al di sotto di una certa soglia, ho sviluppato un vi con un semplice controllo ed ho staccato un paio di ingressi dalla morsettiera.
Lanciando il programma però il vi rileva comunque delle tensioni che sono dello stesso ordine di grandezza di quelle effettivamente rilevate, come posso eliminare questo fenomeno?
Sto utilizzando una configurazione rse.[/quote:2lxvlfqg]
Non lasciare gli ingressi "floating" . Mettici in ingresso lo "0 ref"...
----------------------------------------
AUTORE: 2864
DATA :08/02/2010 - 15:38:12
----------------------------------------
[quote="paracarro":2q6tciqv]
Non lasciare gli ingressi "floating" . Mettici in ingresso lo "0 ref"...[/quote:2q6tciqv]
Non ho capito, comunque questo è il vi dell'acquisizione
----------------------------------------
AUTORE: 2864
DATA :08/02/2010 - 15:50:15
----------------------------------------
Chiedo scusa ma non trovo il tasto per modificare il messaggio.
Quello che non ho capito è dove dovrei inserire lo zero ref, se nell' AI voltage o dove.
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 16:44:34
----------------------------------------
[quote="Pablo!":rrf4wyn6]...ed ho staccato un paio di ingressi dalla morsettiera...[/quote:rrf4wyn6]
Questi ingressi devono essere posti a 0 zero. Altrimenti fluttuano!!!(floating)
Se un ingresso fluttuante viene acquisito appena dopo un altro ingresso correttamente cablato finisce col diventare , spesso, un' "ombra" dell'ingresso cablato...
[quote="Pablo!":rrf4wyn6]Chiedo scusa ma non trovo il tasto per modificare il messaggio.
Quello che non ho capito è dove dovrei inserire lo zero ref, se nell' AI voltage o dove.[/quote:rrf4wyn6]
Lo 0 ref non è altro che lo 0 V usato per tutti gli ingressi analogici acquisiti in modalità rse (Referenced Single Ended)
bye
----------------------------------------
AUTORE: 2864
DATA :08/02/2010 - 16:54:03
----------------------------------------
[quote="paracarro":12rcxolb][quote="Pablo!":12rcxolb]...ed ho staccato un paio di ingressi dalla morsettiera...[/quote:12rcxolb]
Questi ingressi devono essere posti a 0 zero. Altrimenti fluttuano!!!(floating)
Se un ingresso fluttuante viene acquisito appena dopo un altro ingresso correttamente cablato finisce col diventare , spesso, un' "ombra" dell'ingresso cablato...
bye[/quote:12rcxolb]
Come temevo.
Quindi non c'è modo per controllare un eventuale malfunzionamento di un sensore (ad esempio si guasta e non trasmette più o più semplicemente si stacca un cavo dalla morsettiera)?
----------------------------------------
AUTORE: 43
DATA :08/02/2010 - 17:06:00
----------------------------------------
[quote="Pablo!":2picny3r]Come temevo.
Quindi non c'è modo per controllare un eventuale malfunzionamento di un sensore (ad esempio si guasta e non trasmette più o più semplicemente si stacca un cavo dalla morsettiera)?[/quote:2picny3r]
bah! se il segnale fosse un TTL, mi verrebbe in mente di utilizzare una resistenza di pullup o pulldown, ma un analogico...
A me vengono in mente sensori in corrente che sono nel range 4 -20 mA proprio perchè lo 0 mA fosse considerato "mancanza di sensore" o qualcosa del genere...
Cmq non sono un elettronico.
Se fosse possibile offset-tare i l tuo segnale ed avere cmq l'ingresso a gnd (tipo pulldown) nel caso il filo fosse staccato, ....
Se ci fosse qualche elettronico all'ascolto potrebbe dire la sua... grazie
bye
----------------------------------------
AUTORE: 645
DATA :09/02/2010 - 09:04:24
----------------------------------------
In teoria un sensore staccato o rotto dovrebbe restituirti un valore di fondoscala che in alcuni sistemi può essere impostato a piacere per andare oltre i limiti di accettazione del valore valido.
Per "malfunzionamenti" si intendono tante cose diverse: sensore staccato o rotto è forse il caso più facile.
Poi, come diceva Paracarro, puoi affidarti ai valori di fondoscala o tenere sottocontrollo l'andamento dei dati (se c'è un punto di malfunzionamento o una deriva del sensore potresti trovare un dato particolarmente diverso dai dati vicini o vedere un segnale che piano piano si sposta verso un valore completamente sbagliato).
La gestione dello "zero" deve essere fatta in modo tale che LabView sostituisca un valore "sbagliato" con "zero" ma restituisca una segnalazione in caso di errore o presunto problema.
So che è un po' generico...
----------------------------------------
AUTORE: 2864
DATA :09/02/2010 - 10:57:07
----------------------------------------
In realtà sto usando sensori che trasmettono in 4-20mA. Però siccome la mia scheda di acquisizione lavora in tensione la conversione la faccio io direttamente, infatti la soglia di tensione è quella corrispondente ai 4mA con le resistenze che sto usando.
Questo aspetto non è necessario per il lavoro che sto facendo ora, ma già che ci sono lo voglio sviluppare a tempo perso perchè è comunque interessante.
Purtroppo non ho ancora avuto la possibilità di interfacciare il "mio" pxi con l'aggeggio che dovrò controllare, quindi ovviamente questo tipo di test lasciano un po' il tempo che trovano, controllare i canali staccati è la prima cosa che mi è venuta in mente.
Al limite provo a fargli leggere una tensione molto inferiore a quelle con cui sto lavorando, giusto per vedere come si comporta.
Grazie per il supporto
----------------------------------------
AUTORE: 43
DATA :09/02/2010 - 11:24:07
----------------------------------------
[quote="Pablo!":20xcsp2v]In realtà sto usando sensori che trasmettono in 4-20mA.[/quote:20xcsp2v]
Urpo!
Ma allora perchè farsi del male usando una configurazione rse... con tutte le correnti che girano sullo 0 comune o no?
Usa tutti gli ingressi in differenziale!
Lo so il numero degli ingressi così si dimezza ma sicuramente hai una gestione + robusta. Soprattutto se questo è uno dei tuoi obiettivi!
La resistenza per la caduta la metti direttamente sui morsetti + e - di ogni ingresso analogico!!
bye
----------------------------------------
AUTORE: 2864
DATA :09/02/2010 - 12:48:08
----------------------------------------
[quote="paracarro":ctf794up][quote="Pablo!":ctf794up]In realtà sto usando sensori che trasmettono in 4-20mA.[/quote:ctf794up]
Urpo!
Ma allora perchè farsi del male usando una configurazione rse... con tutte le correnti che girano sullo 0 comune o no?
Usa tutti gli ingressi in differenziale![/quote:ctf794up]
scb-68 8 input analogici, sistema da controllare 9 ingressi analogici.
A dire il vero a mia disposizione ho 2 scc-68 ed una scb-68, quindi volendo potrei anche usare la configurazione differenziale, all'inizio ci avevo pure fatto un pensierino ma diciamo che per i miei scopi (è una tesi di laurea) non è indispensabile per cui ho deciso di optare per la single-ended e risparmiare una morsettiera.
Poi vediamo, sono sempre in tempo per cambiare, all limite potrei fare successivamente dei confronti sull'accuratezza delle misure o menate del genere, vedrebbimo.
----------------------------------------
AUTORE: 645
DATA :10/02/2010 - 15:54:18
----------------------------------------
[quote="paracarro":27hgz5fj]
Usa tutti gli ingressi in differenziale![/quote:27hgz5fj]
Yes! Mi sa che potresti ottenere risultati migliori.
[quote="paracarro":27hgz5fj]
Urpo![/quote:27hgz5fj]
Eh eh eh... mi piaceva come esclamazione...
----------------------------------------
================================================================================
array 2x4x5: reshape dell'array
================================================================================
AUTORE: 1317
DATA :09/02/2010 - 00:30:06
----------------------------------------
Buon giorno a tutti. Ricevo in uscita un array di dati 2x4x5 che vorrei salvare con la funzione "Array To Spreadsheet String" + "Write to Text File". Il file creato in questo modo è composto dalle due matrici 4x5 una sotto l'altra. Io vorrei invece post-processare il file utilizzando un programma come origin e in questo caso sarebbe molto più comodo avere le due matrici di dati sullo stesso livello (AFFIANCATE). Per intenderci, aprendo il file, non vorrei ritrovarmi con una matrice 8x5 ma piuttosto una matrice 4x10. HO provato anche a fare il Reshape dell'array prima di convertirlo ma in questo modo non ottengo le due matrici affiancate; le colonne vengono invertite alle righe.
Ringrazio tutti per l'aiuto.
----------------------------------------
AUTORE: 482
DATA :09/02/2010 - 07:51:25
----------------------------------------
Non so se è il tuo caso, ma devi tener presente che nelle funzioni di accodamento di nuovi record, di default labview tiene come parametro le righe.
Questo nel caso tu non connettessi niente agli ingressi che indicano gli indici per l'accodamento.
Detto questo, il tuo mi sembra un problema di procedura, quindi sarebbe utile avere un vi di esempio per capire cosa fai di sbagliato.
----------------------------------------
AUTORE: 1317
DATA :09/02/2010 - 15:23:30
----------------------------------------
grazie per la risposta. ti riporto una versione semplificata del problema esposto. nel VI completo dovrei estrarre dei valori numeri da un file txt e con il ciclo for estraggo dei subarray. dopo di che, come riportato nell'esempio, formo degli array 2x4x2 ma quando salvo questi array le COLONNE dei dati appaiono una sotto l'altra. Vorrei che i due array salvati fossero affiancati piuttosto che uno sotto l'altro. in questo modo la post elaborazione dei dati con "origin" risulta più semplice perchè potrei direttamente selezionare la colonna di interesse (visto che i due array 4x2 rappresentano diversi cicli di misura).
Grazie per l'aiuto
----------------------------------------
AUTORE: 482
DATA :10/02/2010 - 08:08:51
----------------------------------------
Domanda... per SOTTO intendi come livello?
Se intendi questo, credo sia normale, usi un indicatore di array a 3 dimensioni ma le dimensioni visibili sono solo 2, quindi la 3 non potrai mai vederla.
Se vuoi averle affiancate non devi usare l'autoindexing del ciclo for ma sfruttare lo shift register.
Ti allego un esempio in cui:
1) ho affiancato le colonne
2) ho messo le righe una sotto l'altra.
Alla fine avere colonne affiancate o righe sovrapposte, non cambia niente a livello di calcoli, è solo una cosa estetica, solo che avere righe sovrapposte, come puoi notare, è molto meno laborioso che non avere le righe sovrapposte.
fammi sapere se ho capito il tuo problema.
----------------------------------------
AUTORE: 43
DATA :10/02/2010 - 09:19:35
----------------------------------------
Ciao Danelli
Detto che ritengo la Tua richiesta veramente inutile, ma considerando che si tratta di un semplice esercizio di programmazione, vorrei proporti questa soluzione.[attachment=0:2xwn5lfi]AffiancaMatriciInutile.vi[/attachment:2xwn5lfi]
bye
----------------------------------------
AUTORE: 1317
DATA :10/02/2010 - 17:35:33
----------------------------------------
grazie geppo. in effetti era proprio quello il problema. non riuscivo ad utilizzare lo shift register. nel VI in cui stavo lavorando, in cui avevo provato anche la soluzione "shift register" facevo la transposta dell'array prima di uscire dal ciclo e questo incasina i valori. per paracarro, richiesta inutile..(almeno nel mio caso) non è stata visto che ho risolto il problema. il file che devo ottenere DEVE essere necessariamente formattato come risulta dall'esempio di geppo. Per quanto riguarda la tua soluzione in effetti quello che ho riportato era un esempio in cui la terza dimensione dell'array è fissata. nel VI su cui sto lavorando non conosco a priori la terza dimensioni quindi non saprei se la tua soluzione sarebbe in quel caso funzionale.
Grazie a tutti per l'aiuto
----------------------------------------
AUTORE: 43
DATA :11/02/2010 - 09:55:13
----------------------------------------
[quote="danelli":2saymq7y] per paracarro, richiesta inutile..(almeno nel mio caso) non è stata visto che ho risolto il problema. il file che devo ottenere DEVE essere necessariamente formattato come risulta dall'esempio di geppo. Per quanto riguarda la tua soluzione in effetti quello che ho riportato era un esempio in cui la terza dimensione dell'array è fissata. nel VI su cui sto lavorando non conosco a priori la terza dimensioni quindi non saprei se la tua soluzione sarebbe in quel caso funzionale. [/quote:2saymq7y].
Vero è che Salvare dati, specie se in virgola mobile, in un file di testo non è mai una cosa opportuna.
Meglio salvare i dati in formato binario, + compatti e senza perdita di precisione per i valori floating point.
Diverso è prevedere, all'interno della propria applicazione, funzioni di Export di dati per elaborazioni di post-processing (cioè al termine dell'acquisizione dei dati stessi) fatte da altre applicazioni.
Ritengo che sia inutile esportare dati in formato testo se per es. devono essere elaborati da SW di gestione di "fogli elettronici". Specialmente se l'elaborazione consiste nel farne un grafico o calcolare 2 banalissimi valori medi, o varianza o similari.
E' decisamente meglio fare queste banalità direttamente con LabVIEW !!! Che mette a disposizione sofisticati strumenti matematici e di calcolo in genere sottoforma di librerie di funzioni, e strumenti come i controlli/indicatori grafici di ogni tipo molto apprezzati da ogni tipo di utente.
Cmq sia, ognuno può fare quello che gli pare per cui...
Dato che anche la mia soluzione era corretta a meno di una operazione di "trasposizione" finale. Ti invio la mia soluzione che gestisce N pagine (matrici bidimensionali) con e senza operazione di trasposizione finale.
[attachment=0:2saymq7y]AffiancaMatriciInutile1.vi[/attachment:2saymq7y]
bye
----------------------------------------
================================================================================
Visualizzazione dati
================================================================================
AUTORE: 2895
DATA :09/02/2010 - 14:24:23
----------------------------------------
Ciao a tutti
il mio problema è il seguente: devo misurare il tempo di salita di un segnale, per farlo ho utilizzato il blocco Elapsed time, che opportunamente resettato cronometra la salita del segnale, il problema è che il cronometro comincia a contare e al momento del reset torna a 0 e risulta difficile riuscire a leggere il tempo trascorso. Chiedevo se era possibile una volta terminato il conteggio visualizzare a schermo l'ultimo valore del cronometro,che corrisponde al tempo di salita del mio segnale.
----------------------------------------
AUTORE: 43
DATA :09/02/2010 - 14:38:46
----------------------------------------
io userei un contatore... HW intendo!
bye
----------------------------------------
================================================================================
label array
================================================================================
AUTORE: 2908
DATA :10/02/2010 - 11:34:45
----------------------------------------
come faccio ad assegnare diversi nomi (lable) agli elementi di un array? ad esmpio ho un array di 3 valori numerici come faccio a impostare nella lable dell'elemento valore 1 valore 2 valore 3, ho provato e se modifico il primo di conseguenaza anche gli altri prendono lo stesso nome in attesa di un vostro aiuto vi ringrazio
----------------------------------------
AUTORE: 43
DATA :10/02/2010 - 11:43:53
----------------------------------------
[quote="diodozener84":35107qc1]come faccio ad assegnare diversi nomi (lable) agli elementi di un array? ad esmpio ho un array di 3 valori numerici come faccio a impostare nella lable dell'elemento valore 1 valore 2 valore 3, ho provato e se modifico il primo di conseguenaza anche gli altri prendono lo stesso nome in attesa di un vostro aiuto vi ringrazio[/quote:35107qc1]
Infatti... gli elementi dell'array sono tutti uguali nella loro "foggia" e denominazione.
Stesso tipo di dato, stessa "estetica" (Foreground e background color, font ecc.) stessa label. Può variale solo il contenuto noto come "value" cioè valore.
Se vuoi un tipo di dato aggregato dove ogni elemento può avere le caratteristiche sopracitate diverse fra loro non devi usare "array" ma "cluster".
I "cluster" di LabVIEW corrispondono alle "struct" del linguaggio C, per intenderci.
bye
----------------------------------------
AUTORE: 2908
DATA :11/02/2010 - 11:11:40
----------------------------------------
ciaoo a tutti sono incappato in un altro problema certo che è dura imparare, allora se ho un aray di 2 controlli come faccio a usare i due controlli in due event case diversi ? nn riesco perchè quando vado ad associare l'azione da fare all'event case mi da solo un solo controllo cioè l'array e nn i due controlli al suo interno datemi una mano grazieee ancora raga
----------------------------------------
AUTORE: 927
DATA :11/02/2010 - 12:04:57
----------------------------------------
Anche in questo caso ti conviene usare un cluster, i cluster possono generare anche eventi separati per ogni elemento.
Altrimenti, con l'array credo che l'unica strada sia usare un evento unico, e poi al suo interno distinguere i due casi controllando a mano quale elemento è cambiato. Consigliabile se hai un array grande e/o di dimensione variabile, ma per due elementi fissi sono meglio i cluster...
----------------------------------------
AUTORE: 2908
DATA :12/02/2010 - 11:15:28
----------------------------------------
intanto vi ringrazio per i suggerimenti siete davvero grandi raga e vi pongo un altro quesito come faccio a fare la trasformata di fourier di un segnale acquisito??? grazieee ancora per le risposte
----------------------------------------
================================================================================
calcolo durante un ciclo while media rms
================================================================================
AUTORE: 2712
DATA :10/02/2010 - 13:50:47
----------------------------------------
ragazzi dovrei calcolare in maniera dinamica media e rms di una serie di dati in un ciclo while
rms e media sono semplicissimi da calcolare alla fine del ciclo accedendo all' array generato dal ciclo stesso
ma se volessi calcolarli istante per istante.....
come posso accedere ai dai prima che finisca il ciclo?
lo shift register è sicuramente una soluzione ma limitata
ho necessità di accedere a tutti i campioni acquisiti fino a quell' istante non solo una parte
vi ringrazio anticipatamente
----------------------------------------
AUTORE: 645
DATA :10/02/2010 - 15:51:53
----------------------------------------
Puoi popolare man mano un array aggiungendo l'elemento corrente.
Questo, rispetto all'uso dello shift register, è un processo che richiede più memoria e tempo ma puoi provare se è fattibile nel tuo VI.
Non so se tra i blocchi "Build Array" e "Insert into array" ci siano grandi differenze a livello prestazionale.
Se a priori conosci il numero di dati da inserire nell'array puoi anche inizializzare il vettore prima del ciclo: questo semplifica la gestione della memoria e dovrebbe ridurre i tempi necessari per l'aggiunta di dati.
Se invece acquisisci i dati dall'esterno puoi controllare se tra i blocchi dedicati all'analisi puntuale (PtbyPt) c'è qualcosa per media e RMS.
Ma forse anche in questo caso devi passare l'intero array dei dati acquisiti fino a quel momento.
----------------------------------------
AUTORE: 1078
DATA :10/02/2010 - 15:53:10
----------------------------------------
Così dovrebbe farti il calcolo in modo istantaneo!!
[attachment=0:2iyqilxs]RMS_Media_Istantanea.vi[/attachment:2iyqilxs]
----------------------------------------
AUTORE: 2712
DATA :11/02/2010 - 11:19:37
----------------------------------------
io ho la versione 8.0 non riesco ad aprire il tuo VI
ti posto anche la mia soluzione
ho problemi nel reset
se si fa giraredue volte il VI il reset del grafico non è completo comeposso fare?
----------------------------------------
AUTORE: 2712
DATA :11/02/2010 - 11:21:08
----------------------------------------
posto nuovamente i VI non l'avevo salvato
----------------------------------------
AUTORE: 2712
DATA :11/02/2010 - 11:39:48
----------------------------------------
ho risolto il problema del mio Vi non inizializzavo il shift register
sarei curioso di vedere la tua soluzione
----------------------------------------
AUTORE: 1078
DATA :11/02/2010 - 15:38:09
----------------------------------------
Quello che ho fatto io è qualcosa di meno comlicato... comunque
----------------------------------------
================================================================================
FTP datasocket...
================================================================================
AUTORE: 2784
DATA :10/02/2010 - 14:31:23
----------------------------------------
L'FTP consente di trasferire file di testo da un pc ad un altro?
----------------------------------------
AUTORE: 1078
DATA :10/02/2010 - 15:41:11
----------------------------------------
Devi avere un FTP server abilitato su uno dei due PC. Se usi Windows, puoi installare IIS e abilitare il servizio FTP (trovi tutte le informazioni per farlo su MSDN microsoft) . A questo punto però il tuo PC diventa un server!
----------------------------------------
AUTORE: 2784
DATA :10/02/2010 - 15:43:08
----------------------------------------
[quote="Ricky":2kj3o4ya]Devi avere un FTP server abilitato su uno dei due PC. Se usi Windows, puoi installare IIS e abilitare il servizio FTP (trovi tutte le informazioni per farlo su MSDN microsoft) . A questo punto però il tuo PC diventa un server![/quote:2kj3o4ya]
è molto complicato??? con il datasocket c'è un modo di trasferire file di testo?
----------------------------------------
AUTORE: 1078
DATA :10/02/2010 - 15:59:26
----------------------------------------
Si, con il datasocket puoi passare tutti i tipi di dati labview. Esistono però altri metodi, tra cui le "shared variable". Sicuramente però il più prestante è quello di gestire una connessione TCP/IP.
Trovi qualche informazione qui: [url:280d8ltw]http://zone.ni.com/devzone/cda/pub/p/id/79[/url:280d8ltw]
Sul sito national e negli esempi di LV (che trovi con il find example) trovi diversi softwerini che spiegano come utilizzare tutte le tecnologie.
Ciao e buon lavoro.
----------------------------------------
AUTORE: 43
DATA :10/02/2010 - 16:47:06
----------------------------------------
[quote="therealdeal":zvsanx0i]L'FTP consente di trasferire file di testo da un pc ad un altro?[/quote:zvsanx0i]
Quando si parla di FTP si parla di un protocollo di trasferimento di Files.
FTP = File Transfer Protocol
Come è ovvio supporre, quando si parla di trasferimento File si intendono File di qualunque tipo, incluso quelli di formato testuale (.txt, .ini, .xml, .html, .url ...).
Stabilita una connessione fra due entità (due PC o 2 processi) attraverso un canale di comunicazione sia esso HW o solo SW(tra processi), possono essere scambiati messaggi di ogni genere incluso quello di trasferire grosse quantità di dati. Purchè le due entità adottino il medesimo protocollo, insomma, parlino la stessa lingua.
Andando a cercare banalmente su Wikipedia,informazioni riguardo la comunicazione[url=http://en.wikipedia.org/wiki/Transmission_Control_Protocol:zvsanx0i]TCP[/url:zvsanx0i] e gli standard ad essa collegati, si nota che alcuni di questi protocolli utilizzano delle "porte TCP" predefinite cioè:
FTP (21) = File Transfer Protocol (trasferimento file fra PC supportato dai SO)
SSH (22) = Secure SHell (trasferimento dati generici fra dispositivi prevalentemente usato in ambiente Unix/Linux)
TELNET (23) = TELetype NETwork (standard trasferimento dati "digitati" direttamente da interfaccia HMI testuale)
SMTP (25) = Simple Mail Transfer Protocol (standard trasferimento posta elettronica e-mail)
HTTP (80) = HyperText Transfer Protocol (standard scambio dati ipertestuali usato dai browsers Internet)
In generale la comunicazione TCP passa attraverso l'uso di porte ed alcune di queste sono quindi "riservate" o tipiche di standard come quelli elencati.
[url=http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers:zvsanx0i]Altre sono di utilizzo libero[/url:zvsanx0i]
Per concludere:
Se ho 2 PC connessi in rete TCP e devo spostare un file da un disco ad un'altro, non sono così fesso da implementarmi il protocollo FTP aprendo una connessione sulla porta 21. Sfrutto piuttosto le funzionalità date dal S.O. di copia e trasferimento file curando le problematiche relative ai diritti e delle modalità di accesso ai file stessi. In pratica: faccio una copia di file.
Se voglio spostare dei dati da un PC all'altro, stabilita una connessione ed un canale invio i dati, cercando di avere un controllo ottimale della comunicazione, compreso la possibilità di interropere per es. tale operazione...
bye
----------------------------------------
AUTORE: 2784
DATA :10/02/2010 - 18:01:11
----------------------------------------
il mio problema...ho realizzato una architettura client-server...il server deve inviare a richiesta del client un file di testo..ho implementato tutto con Datasocket, solamente il file viene trasferito tramite TCP/ IP come quello degli esempi per intenderci...il problema è che se passo in modalità remota utilizzando la funzione embedded di labview il file non viene trasferito dandomi un errore 43...tutto il resto posso cambiarlo ed interagire..ma il file non passa..non viene trasferito..posso implementare il passaggio del file in altro modo o sto sbagliando io qualcosA?
----------------------------------------
AUTORE: 43
DATA :10/02/2010 - 20:43:40
----------------------------------------
[quote="therealdeal":g3gmw605]...il server deve inviare a richiesta del client un file di testo..[/quote:g3gmw605]
Vedi il problema è tutto qua. xkè se ci si parla con linguaggi diversi si finisce col non capirsi.
L'unica cosa che penso, suppongo, di aver capito, è che la tua applicazione ha 2 comportamenti differenziati: un comportamento "locale" ed uno "remoto".
Comportamenti che vorresti uniformare utilizzando Datasocket.
Questo senza spiegare:
- cosa fa la Tua applicazione
- cosa significa veramente per te "trasferire un file di testo" (aprire e chiudere un file su un pc remoto o trasferire dei dati letti da file ad un altro SW)
- in quale ambito preciso della Tua applicazione si deve intervenire, dato che non posti mai uno straccio di pezzo di codice finito della Tua mega-applicazione.
Tra l'altro questa è una [url=http://ilvg.it/forum/viewtopic.php?f=1&t=4228&p=18900:g3gmw605]vecchia discussione[/url:g3gmw605]
Secondo me il problema sta nel riuscire ad esprimere un file path/url corretto.
http://www.w3.org/Addressing/rfc1738.txt
Cmq sia, spero che qualcuno Ti possa aiutare xchè io non riesco a capire cosa vuoi.
bye
----------------------------------------
AUTORE: 2784
DATA :10/02/2010 - 21:08:26
----------------------------------------
chiedo scusa..ma alla fine sembro essere tornato alla stessa discussione..hai ragione da locale fa tutto, anche il trasferimento..da remoto fa tutto meno il trasferimento file..eppure apre correttamente la realizzazione ma al momento di scaricarlo mi esce un bel errore 43..operazione cancellata dall'utente anche se l'utente si comporta alla stessa maniera di come fa il locale..ma il trasferimento viene fatto con l esempio di labview..che ti allego, quello che è fatto con una porta tcp/ip...a me non costa nulla postarti anche tutto il programma tanto non fa nulla di che. Se mi dai una mano te ne sarei grato. Sono ignorante quel file di testo che hai messo è per me arabo in gran parte.
Chiedo ancora scusa per il doppio 3d..se volete chiudere no problem..ecco come è realizzato il trasferimento del file, con l'esempio tcp file transfer..se vuoi posso darti o darvi l'implementazione del resto ma è questo il passaggio a me critico che da remoto non esegue.
grazie e ancora scusa
----------------------------------------
AUTORE: 1078
DATA :11/02/2010 - 07:33:33
----------------------------------------
... Ma non è più semplice se fai salvare alla tua applicazione (sia locale che remota) il file di testo in una cartella condivisa? Ha verificato ad esempio che la cancellazione dell'operazione di trasferimento non la faccia un firewall attivo sulla macchina di destinazione o attivo a livello di rete? Hai tutti i permessi necessari? Hai verificato che l'applicazione server non vada in timeout per le eccessive dimensioni del file o per altro (proverei ad aumentare il timeout)?
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 07:58:40
----------------------------------------
[quote="Ricky":1jitmnc6]... Ma non è più semplice se fai salvare alla tua applicazione (sia locale che remota) il file di testo in una cartella condivisa? Ha verificato ad esempio che la cancellazione dell'operazione di trasferimento non la faccia un firewall attivo sulla macchina di destinazione o attivo a livello di rete? Hai tutti i permessi necessari? Hai verificato che l'applicazione server non vada in timeout per le eccessive dimensioni del file o per altro (proverei ad aumentare il timeout)?[/quote:1jitmnc6]
forse non ho i permessi necessari..mi è già stato detto di questa cartella condivisa ma o sono io impedito (probabile) o non funziona..
----------------------------------------
AUTORE: 482
DATA :11/02/2010 - 09:58:25
----------------------------------------
come dice paracarro, sembra che si voglia fare una comunicazioen senza parlare la stessa lingua.
Io ho capito solo che hai un applicazione che fa tutto in datasocket ma poi devi trasferire un file.
A sto punto ti chiedo:
1) se hai delel risorse condivise, perchè non fai semplicemente una copia del file dandogli come path l'ip del pc destinazione?
2) in alternativa perchè non apri il file di testo, lo metti in un controllo stringa e lo passi tramite datasocket per poi salvarlo come file di testo dall'altra parte?
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 10:13:45
----------------------------------------
[quote="gepponline":1j7lkxxh]come dice paracarro, sembra che si voglia fare una comunicazioen senza parlare la stessa lingua.
Io ho capito solo che hai un applicazione che fa tutto in datasocket ma poi devi trasferire un file.
A sto punto ti chiedo:
1) se hai delel risorse condivise, perchè non fai semplicemente una copia del file dandogli come path l'ip del pc destinazione?
2) in alternativa perchè non apri il file di testo, lo metti in un controllo stringa e lo passi tramite datasocket per poi salvarlo come file di testo dall'altra parte?[/quote:1j7lkxxh]
Chiedo scusa ancora per il casotto..
non ho risorse condivise..cioè dovrei condividere una cartella con l esterno??ma così chiunque può accedere dall'esterno a quella cartella ma io voglio che solamente quando sia richiesto il file venga trasferito.
come posso trasformarlo in stringhe? Non so farlo..
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 10:27:20
----------------------------------------
cioè se il file fosse questo..come lo scindo per realizzare le stringhe da poi inviare con il Datasocket e poi come lo leggo??
----------------------------------------
AUTORE: 482
DATA :11/02/2010 - 10:55:56
----------------------------------------
Non ci siamo...
Credo che tu abbia bisogno di un bel corso di Labview per capire cos'e'. Ti perdi in banalità.
Un controllo stringa è un controllo in cui ci sta tutto il testo che vuoi.
Un file di testo sta tutto in un unico controllo stringa. Non devi scindere niente.
Apri il file di testo e lo metti in un indicatore di tipo stringa.
Queste sono LE BASI. se non sai fare questo, forse è il caso di documentarti un po' prima di metterti a programmare.
Poi l'indicaore stringa lo condividi tramite datasocket.
Per quanto riguard ainvece la risorsa condivisa in rete, li si tratta delle BASI DEL SISTEMA OPERATIVO IN RETE.
Condividi una cartella SOLO A CHI VUOI TU.
Poi il tuo software farà una richiesta e dallaltra parte, in quel momento copieranno il file richiesto.
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 11:34:18
----------------------------------------
Qualcosa che è banale per qualcuno può anche non esserlo per qualcun altro, magari per qualcuno che "sta iniziando".
Ho guardato qualche guida come ho fatto per realizzare gran parte dei passaggi del mio programma, tutto quello che volete, ma ci son cose che le guide non dicono. E allora esistono pure i forum dove chiedere, perchè ci sono persone che ne sanno e da cui è possibile carpire informazioni..se questi te le vogliono dare.
Gran parte delle informazioni le capisci solo con la pratica perchè le guide non ti spiegano tutto di tutto, fanno anche bene perchè ci si dovrebbe sbattere a farle..ma se uno non ci arriva, allora può pure chiedere no?
E allora chiedo..guardo guide, sfrutto l'help..ma..ogni tanto torno qua perchè voi mi aiutate..molto
Ci sono cose che io ignoro..sfido chiunque a trovarmi una persona che sa tutto di tutto.
Ho provato a condividere pure una cartella in rete, ma tale cartella è disponibile solo localmente. Anche della condivisione di cartelle ho trovato ben poco: fai cosi cosi e colà..la cartella al di fuori non è disponibile.
Chiedo scusa di nuovo.
----------------------------------------
AUTORE: 482
DATA :11/02/2010 - 13:18:27
----------------------------------------
Vedi che non ascolti...ti sei sentito accusato quando ho semplicemente fatto notare che hai delle lacune grosse di base.
Se condividi una cartella in rete, non è possibile che sia visibile solo localmente, senno' che razza di condivisioen hai fatto??
Ma soprattutto non è un argomento legato a labview ma a Windows.
Detto questo, quello che mi fa "innervosire" nelle tue richieste è che parti dal voler andare sulla luna, quando si scopre che il tuo problema è costruire la scaletta per poter entrare nell'astronave.
Tu vuoi trasferire un file e ok.
Ma vuoi traferire il file o il suo contenuto? Sei in grado di riprodurre in locale quello che vuoi fare in remoto?
Sai che i path possono essere composti da percorsi di rete?
Quindi se tu condividi il disco c:\ e il tuo indirizzo è 192.168.1.1, se vuoi aprire da remoto il file c:\pippo.txt. basta che dai il percorso \\192.168.1.1\pippo.txt
Sapendo questo, devi comunque trasferirlo questo file? non ti basta leggerne il contenuto?
Se non ti basta, puoi fare una copia del file originale sfruttando le funzioni dei file, che in labview sono messe nella palette con l'immagine del dischetto. Li trovi le funzioni di spostamento,copia eliminazione, apertura,chiusura,lettura e scrittura di file.
QUindi detto tutto questo, se i ltuo problema è condividere una cartella in rete, non puoi chiedermi "L'FTP consente di trasferire file di testo da un pc ad un altro?" quando l'FTP è un protocollo apposta per trasferire i file e per pensare di utilizzarlo bisogna sapere almeno cosa sia.
QUindi ti prego, non fare il permaloso, vorrei solo che le tue richieste fossero piu' specifiche.
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 13:29:06
----------------------------------------
non so facendo il permaloso..credevo che l FTP funzionasse allo stesso modo di un DSTP solo che al posto di dati, con questo potevo trasferire file.
Detto questo, prego che il titolo venga cambiato..o che si unisse all'altro 3d, se volete.
Io vorrei trasferire ciò che c'è dentro al file su un file chiamato come vuole l'utente che lo desidera, non mi interessa se l utente finale lo chiama testo o gino..
mettiamo che il file sia testo.txt, come quello postato precedentemente, lo carico sulla stringa e posso trasferirlo con Datasocket?Oppure come posso trasferirlo?
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 13:35:29
----------------------------------------
In locale ciò avviene..un server risponde correttamente al client..con l'apertura delle porte TCP/IP (l'esempio postato anche quello)..in remoto no..avviene cosi:
il client dice voglio scaricare il file
Il server si prepara---sono pronto, dimmi se vuoi scaricare un file o l'altro
il client ora può scegliere il file da scaricare
il server dice ok scaricamento avviato
il client ora scarica
una volta concluso il client dice grazie, spegnendo il led dello scaricamento avviato..e tutto è pronto per un altro ciclo.
Se lo faccio da remoto succede:
il client dice voglio scaricare il file
Il server si prepara---sono pronto, dimmi se vuoi scaricare un file o l'altro
il client ora può scegliere il file da scaricare...arriva l errore
ERRORE 43 nel server OPERAZIONE CANCELLATA DALL'utente...premo continue...ma il file non viene trasferito cosi. Se volete posso un immagine del file.Ma il problema, in remoto, è, SECONDO ME, sulla porta TCP/IP.
----------------------------------------
AUTORE: 482
DATA :11/02/2010 - 14:25:09
----------------------------------------
Facciamo come nell'altro topic.
Eliminiamo tutte le cose inutili.
1) dimentichiamoci il termine TCP/IP e tutto quello che si porta dietro.
2) Usiamo il DSTP
Il server mette su una variabile datasocket un elenco di file a disposizione per il download.
Il client dice al server che vuole scaricare un certo file.
Il server legge questo file e lo mette su una variabile datasocket di tipo stringa.
Il client legge la variabile stringa e la salva su file in locale.
In totale sul datasocket ci sono:
N°1 variabile con l'elenco dei file
N°1 variabile con il nome del file da scaricare
N°1 variabile stringa con il contenuto del file
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 14:38:03
----------------------------------------
[quote="gepponline":21jrvygm]Facciamo come nell'altro topic.
Eliminiamo tutte le cose inutili.
1) dimentichiamoci il termine TCP/IP e tutto quello che si porta dietro.
2) Usiamo il DSTP
Il server mette su una variabile datasocket un elenco di file a disposizione per il download.
Il client dice al server che vuole scaricare un certo file.
Il server legge questo file e lo mette su una variabile datasocket di tipo stringa.
Il client legge la variabile stringa e la salva su file in locale.
In totale sul datasocket ci sono:
N°1 variabile con l'elenco dei file
N°1 variabile con il nome del file da scaricare
N°1 variabile stringa con il contenuto del file[/quote:21jrvygm]
bene..diciamo che fa tutto tranne il passaggio della stringa..come procedo?
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 14:39:16
----------------------------------------
cioè la cosa che non mi è chiara è...come si converte una stringa in un file di testo?
----------------------------------------
AUTORE: 482
DATA :11/02/2010 - 14:58:35
----------------------------------------
L'errore è nel passaggio mentale che fai di conversione tra file di testo e stringa.
Tu non devi far enessuan conversione, semplicemente LEGGERE un file.
Come si legge un file di testo? Con la funzione "read text file".
Cosa restituisce la funzione "read test file"?
Una stringa(quidi del testo). Basta andarci sopra col destro e fare create indicator e il contenuto del tuo file verrà messo in un indicatore.
Come si scrive un fiel di testo invece?
Con la funzione "write text file"
Cosa bisogna passare in ingresso?
Una stringa(quindi del testo).
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 16:43:01
----------------------------------------
ok ora ci provo a realizzarlo..thanks
----------------------------------------
AUTORE: 2784
DATA :11/02/2010 - 17:39:19
----------------------------------------
hihih...grazie...ora non resta che provarlo in remoto..yuuuuuuuuuuuuuuuuu
una cosa..siccome io per remoto per ora intendo "dalla stessa rete" ma da pc separati usando il web browser(sfrutto la funzione embedded)..devo sbloccare qualche protezione o qualcosa per renderlo disponibile a un pc posto a km di distanza?
Grazie geppo..mi hai illuminato!..era banale davvero..mannaggia a me!
----------------------------------------
AUTORE: 482
DATA :12/02/2010 - 08:02:14
----------------------------------------
La distanza in Km non è influente a livello di network.
La questione è avere accesso ad un indirizzo conosciuto.
Se la tua connessione non è su VPN (sai cos'e'? è una rete privata virtuale) ma tramite internet normale, allora dovrai avere una condizione imprescindibile.
L'indirizzo INTERNET dei pc comunicanti dovrà essere noto, quindi o usi un IP fisso (devi richiederlo al tuo provider internet) oppure ci sono dei servizi DNS che permettono di identificare con un nome fisso un indirizzo che varia di volta in volta.
(perchè usi il web browser?? per fare cosa?)
----------------------------------------
AUTORE: 2784
DATA :12/02/2010 - 17:20:29
----------------------------------------
in pratica ecco cosa ho :
un applicazione server che prende il file e lo trasforma in stringa
un client che riceve la stringa e la trasforma in file di testo. FACENDO GIRARE I DUE VI sullo stesso pc..il file viene creato...yessss!
Proviamo in remoto...
Su questa base metto in run il server nel mio pc ...e pubblico il client sul web...ecco a cosa mi serve il web browser geppo..con la funzione embedded dal web publishing tool pubblico il client.
Problemi: dallo stesso pc che pubblica, apro il browser, vedo lo strumento, lo faccio partire ...MA non viene creato il file....
altri pc...per esempio tu non puoi vedere il vi che ho pubblicato...perchè??
DOve sbaglio???
Ringrazio e allego la banale architettura..
----------------------------------------
AUTORE: 482
DATA :15/02/2010 - 08:26:26
----------------------------------------
non ho ancora guardato il vi pero' comincio a porti due quesiti:
Hai il runtime di labview sul pc target dove vuoi aprire il vi tramite browser?
Ok che lo appri sul browser, ma devi comunque avere il runtime engine di labview per poterlo vedere.
Quindi in seguito a questo ti chiedo, è veramente necessario usare un browser (diversi utenti devono accedere a questo vi da posti sconosciuti) o conviene installare un vi client per ognuno che deve accedere da remoto?
----------------------------------------
AUTORE: 2784
DATA :15/02/2010 - 22:20:55
----------------------------------------
[quote="gepponline":cf5a3ot0]non ho ancora guardato il vi pero' comincio a porti due quesiti:
Hai il runtime di labview sul pc target dove vuoi aprire il vi tramite browser?
Ok che lo appri sul browser, ma devi comunque avere il runtime engine di labview per poterlo vedere.
Quindi in seguito a questo ti chiedo, è veramente necessario usare un browser (diversi utenti devono accedere a questo vi da posti sconosciuti) o conviene installare un vi client per ognuno che deve accedere da remoto?[/quote:cf5a3ot0]
nel pc target tu non c'è runtime..c'è labview direttamente..
installando un vi su ogni pc che deve accedere da remoto non ho la gestione della coda come invece ha la funzione embedded usando web browser geppo!
Spero di esser stato chiaro..e ti ringrazio di nuovo
----------------------------------------
AUTORE: 482
DATA :16/02/2010 - 09:03:24
----------------------------------------
Quindi, riepilogando:
Tu hai un vi server che pubblica i dati.
Un vi client che pero' non viene eseguito ma viene richiamato tramite browser, giusto?
Io ho pubblicato il client, richiamato il client dal browser, richiesto il controllo, mandato in run e mi ha salvato correttamente il file.
Quetso d alocale
Da remoto, se richiamo il client tramite browser,innanzitutto il client deve essere in memoria del pc dove lo pubblico, poi, alla funzione di write, devi passare un percorso assoluto dove slavare il file.
Se non scrivi niente, non ti si apre la finestra di dialogo perchè va a richiamare una dll di windows del pc dove è in memori ail client. Idem se gli passi un percorso tipo C:\pippo.txt, ti salverà il file in c:\pippo.txt del pc dove c'e' in memoria il client e non dove hai il browser.
Il consiglio è quello di passargli un percorso assoluto tramite un controllo di tipo path.
----------------------------------------
AUTORE: 2784
DATA :17/02/2010 - 09:45:21
----------------------------------------
[quote="gepponline":2irmfyvn]Quindi, riepilogando:
Tu hai un vi server che pubblica i dati.
Un vi client che pero' non viene eseguito ma viene richiamato tramite browser, giusto?
Io ho pubblicato il client, richiamato il client dal browser, richiesto il controllo, mandato in run e mi ha salvato correttamente il file.
Quetso d alocale
Da remoto, se richiamo il client tramite browser,innanzitutto il client deve essere in memoria del pc dove lo pubblico, poi, alla funzione di write, devi passare un percorso assoluto dove slavare il file.
Se non scrivi niente, non ti si apre la finestra di dialogo perchè va a richiamare una dll di windows del pc dove è in memori ail client. Idem se gli passi un percorso tipo C:\pippo.txt, ti salverà il file in c:\pippo.txt del pc dove c'e' in memoria il client e non dove hai il browser.
Il consiglio è quello di passargli un percorso assoluto tramite un controllo di tipo path.[/quote:2irmfyvn]
Proprio così...
cosa intendi per percorso assoluto??
----------------------------------------
AUTORE: 482
DATA :17/02/2010 - 13:51:56
----------------------------------------
C:\pippo.txt è un percorso che fa riferimento alla macchina dove c'e' il vi client
//192.168.1.5/pippo.txt è il percorso che fa riferimento alla macchian che si collega al client tramite browser.
----------------------------------------
AUTORE: 2784
DATA :17/02/2010 - 16:18:10
----------------------------------------
[quote="gepponline":q8o0jc8j]C:\pippo.txt è un percorso che fa riferimento alla macchina dove c'e' il vi client
//192.168.1.5/pippo.txt è il percorso che fa riferimento alla macchian che si collega al client tramite browser.[/quote:q8o0jc8j]
mmh.. non ti seguo..
io pubblico il client..sul web..
da un altro pc avente indirizzo ip 192.168.1.5 ad esempio apro il browser...giusto???
Se io però metto questo indirizzo..io posso scaricare il file solo da tale pc avente quell'indirizzo ip...
Se io entro da un altro pc..avente un indirizzo ip 192.168.1.2...il file non lo scarico!....ho capito bene?
----------------------------------------
AUTORE: 482
DATA :18/02/2010 - 07:48:11
----------------------------------------
non è che non mi segui, NON MI LEGGI!!
io avevo scritto:
[quote:9p8ucz6z]Il consiglio è quello di passargli un percorso assoluto tramite un controllo di tipo path.[/quote:9p8ucz6z]
Quindi nell'interfaccia del tuo client dovresti includere un controllo dove l'utente vada ad inserire l'IP della sua macchina.
Comunque tutti questi problemi te li eviteresti sviluppando una vera architettura client/server con dei vi, anzichè sfruttare il browser che per lo piu' è la soluzione da scegliere per applicazioni di supervisione da remoto.
----------------------------------------
AUTORE: 2784
DATA :18/02/2010 - 08:57:33
----------------------------------------
[quote="gepponline":2yn0ld98]non è che non mi segui, NON MI LEGGI!!
io avevo scritto:
[quote:2yn0ld98]Il consiglio è quello di passargli un percorso assoluto tramite un controllo di tipo path.[/quote:2yn0ld98]
Quindi nell'interfaccia del tuo client dovresti includere un controllo dove l'utente vada ad inserire l'IP della sua macchina.
Comunque tutti questi problemi te li eviteresti sviluppando una vera architettura client/server con dei vi, anzichè sfruttare il browser che per lo piu' è la soluzione da scegliere per applicazioni di supervisione da remoto.[/quote:2yn0ld98]
non avevo capito che dovevo metterglielo esterno..
cioè dici di fare come lo realizzo localmente...con un server principale fisso e un client esterno che si connette al server, senza utilizzare il browser?
----------------------------------------
AUTORE: 482
DATA :18/02/2010 - 10:24:13
----------------------------------------
esatto.
----------------------------------------
AUTORE: 2784
DATA :19/02/2010 - 14:43:18
----------------------------------------
e cosi riesce a connettersi pure da remoto?? credevo che si utilizzasse solo la funzione embedded e quindi la pubblicazione su web per il controllo remoto...
----------------------------------------
AUTORE: 482
DATA :19/02/2010 - 14:55:33
----------------------------------------
ovvio devi conoscere l'ip della macchian a cui ti colleghi
----------------------------------------
AUTORE: 43
DATA :19/02/2010 - 15:06:01
----------------------------------------
[quote="gepponline":3pkymbey]ovvio devi conoscere l'ip della macchian a cui ti colleghi[/quote:3pkymbey]
Geppo, per favore, don't feed the troll!!
Siamo già a 3 pagine per un argomento utile solo ad una persona, o meglio che nessun altro leggerà mai, quante ne vuoi scrivere ancora?
ScriveteVi delle e-mail private...
Scusate la polemica...
bye
----------------------------------------
AUTORE: 482
DATA :19/02/2010 - 15:36:08
----------------------------------------
A dir la verità ho forzato io la comunicazione qui in pubblico perchè la cosa poteva essere interessante per qualcun altroalle prime armi..pero' effettivamente mi rendo conto che siamo all'eccesso...
----------------------------------------
AUTORE: 2784
DATA :19/02/2010 - 21:00:40
----------------------------------------
[quote="gepponline":35nqo587]A dir la verità ho forzato io la comunicazione qui in pubblico perchè la cosa poteva essere interessante per qualcun altroalle prime armi..pero' effettivamente mi rendo conto che siamo all'eccesso...[/quote:35nqo587]
per le tue delucidazioni ti ringrazio..
----------------------------------------
================================================================================
problema di luminosità...
================================================================================
AUTORE: 2266
DATA :10/02/2010 - 14:42:50
----------------------------------------
ciao a tutti,
per caso vi risulta che con labview sia possibile far sì che un programma imposti in modo automatico la laminosità del monitor, così che durante l'esecuzione possa visualizzare la stessa immagine ma con luminosità differenti?
grazie in anticipo..
----------------------------------------
AUTORE: 1078
DATA :10/02/2010 - 15:38:18
----------------------------------------
A me non risulta possibile controllare direttamente la luminosità del monitor neanche con altri software (intendo l'osi dei monitor). Puoi tentare di controllare la luminosità di visualizzazione pilotando il driver della scheda video. Forse puoi fare la stessa cosa se hai a disposizione il driver dedicato del monitor e non utilizzi il driver microsoft plug and play. Per utilizzare una dll in modo diretto da LV devi richiamarla con il "Call library function", attento però devi conoscere che tipo di parametri si aspetta la dll in questione. Per sapere quali sono le dll che vengono utilizzate dalla tua scheda video, devi visualizzare il driver della scheda click destro sul desktop --> impostazioni --> avanzate --> scheda --> proprietà --> driver --> dettali driver.
----------------------------------------
AUTORE: 2266
DATA :10/02/2010 - 16:44:42
----------------------------------------
grazie della speigazione, sei stato chiarissimo. forse ho trovato un modo alternativo per risolvere il mio problema, ma dovesse fallire provero con le dll come suggerisci tu.
ciao
----------------------------------------
================================================================================
Lista delle porte com
================================================================================
AUTORE: 2196
DATA :11/02/2010 - 00:33:36
----------------------------------------
Mi serve sapere la lista delle porte com disponibili sul pc, come faccio ? non mi serve per nessun blocco labview ma come informazione da mostrare.
----------------------------------------
AUTORE: 1124
DATA :11/02/2010 - 07:32:23
----------------------------------------
ciao
la cosa più immediata è inserire nel FP il controllo "I/O -> Visa resource name".
Alla prima esecuzione il controllo si riempie con i nomi delle porte presenti, ma devi scorrerlo con il puntatore.
----------------------------------------
AUTORE: 1078
DATA :11/02/2010 - 08:12:44
----------------------------------------
[quote="Buddace":2353k0ig]Mi serve sapere la lista delle porte com disponibili sul pc, come faccio ?[/quote:2353k0ig]
Non so se esite un modo semplice, quello che ho trovato io è abbastanza complicato. Devi crearti una funzione che chiami direttamente un'API di windows. La funzione API da chiamare è la SetupDiEnumInfo. Trovi informazioni su come utilizzarla qui: [url:2353k0ig]http://social.msdn.microsoft.com/search/en-us/?query=setupdienumdeviceinfo[/url:2353k0ig]. Per utilizzare una funzione API devi chiamarla con il "Call library function" e configurare i parametri di ingresso, quelli di uscita ed eventualmente gli eventi di callback.
Non è un lavoro semplice.
Buon lavoro.
----------------------------------------
AUTORE: 1078
DATA :11/02/2010 - 08:27:16
----------------------------------------
Come non detto, ho realizzato un softwarino che penso faccia quello che chiedi. Vedi se ti va bene.
----------------------------------------
AUTORE: 927
DATA :11/02/2010 - 08:37:29
----------------------------------------
Non ricordo da dove viene, ma ho questo VI che fa il lavoro senza API e senza... andare per tentativi
----------------------------------------
AUTORE: 2196
DATA :11/02/2010 - 08:45:22
----------------------------------------
Grazie a tutti, provo!
----------------------------------------
AUTORE: 2196
DATA :11/02/2010 - 08:47:42
----------------------------------------
Dimenticavo ho labview 8.2!
----------------------------------------
AUTORE: 1078
DATA :11/02/2010 - 10:18:49
----------------------------------------
[quote="Snamprogetti":3g4g7b1n]Non ricordo da dove viene, ma ho questo VI che fa il lavoro senza API e senza... andare per tentativi[/quote:3g4g7b1n]
Non capisco cosa intendi per "andara per tentativi"!
Comunque il mio softwerino in versione LV 8.2
----------------------------------------
AUTORE: 1078
DATA :11/02/2010 - 10:26:25
----------------------------------------
Ha ragione snam-progetti. Il software che ha postato lui è più funzionale. Mi sono permesso di convertirla in LV 8.2
Buon lavoro.
----------------------------------------
================================================================================
salvataggio pdf
================================================================================
AUTORE: 2913
DATA :11/02/2010 - 10:09:36
----------------------------------------
Buongiorno a tutti vorrei sapere se è possibile ed eventualmente come si fà,a salvare il front pannel in formato pdf.
In attesa di una risposta pongo coordiali saluti
----------------------------------------
AUTORE: 482
DATA :11/02/2010 - 10:57:08
----------------------------------------
credo che come funzione di labview non si possa fare.
Pero 'si puo' esportare il front panel sotto forma di immagine sfruttando il menu principale di labview e poi da li, usando una stampante virtuale, salvarlo in pdf.
----------------------------------------
AUTORE: 2913
DATA :11/02/2010 - 14:29:31
----------------------------------------
neanche con il pdf crator che si trova sul sito della national?
grazie mille per la risposta
----------------------------------------
AUTORE: 1124
DATA :12/02/2010 - 07:30:27
----------------------------------------
ciao
scusa Tamberlo, ma per "pdf creator che si trova sul sito dela national" intendi l'esempio riportato in http://decibel.ni.com/content/docs/DOC-4552?
Non l'ho mai usato,ma adesso provo a vedere come funziona con LV7.1.
In genere uso PDF creator come stampante virtuale e se necessario eseguo le stampe programmaticamente dai VI. Con la opzione di salvataggio automatico evito di fornire il nome file ogni volta: non è comodo, ma se il programma (VI) deve eseguire parecchie stampe non resta in attesa sulla prima richiesta.
----------------------------------------
AUTORE: 1124
DATA :12/02/2010 - 07:45:05
----------------------------------------
Tambelo,
ti confermo che il programma scaricabile in : http://decibel.ni.com/content/docs/DOC-4552 funziona con LV7.1.
Sembra anche comodo!
----------------------------------------
AUTORE: 482
DATA :12/02/2010 - 07:50:51
----------------------------------------
A vederlo cosi' direi che innanzitutto bisogna installare PDFCreator ma soprattutto mi sembra sia un programma che permette di trasformare i documenti in PDF, ma il front panel non è un documento, quindi mi sembra strano che faccia quello che è stato chiesto.
----------------------------------------
================================================================================
CONSULTARE CRONOLOGIA ERRORI
================================================================================
AUTORE: 2914
DATA :11/02/2010 - 15:12:28
----------------------------------------
Ciao, mi sto cimentando con LabVIEW per una tesi e avrei bisogno di sapere se esiste un modo per vedere la "cronologia degli errori" di un VI.
Mi spiego meglio....utilizzo LabVIEW per controllare un impianto termico. Durante la notte lasciamo il programma in esecuzione e al mattino seguente tiriamo giù i dati e vediamo com'è andata.
Nella prova eseguita ieri notte i dati "scompaiono" alle 3 (dopo circa 8 ore che il VI era in funzione)...molto probabilmente ha crashato ma purtroppo non sono stato io il primo ad arrivare stamattina (quindi non ho trovato il messaggio con il codice Errore!!!!).
C'è modo di scoprire cosa è successo????
Grazie
----------------------------------------
AUTORE: 43
DATA :11/02/2010 - 15:21:43
----------------------------------------
[quote="DR_strangeLove":2h0s13fb]Ciao, mi sto cimentando con LabVIEW per una tesi e avrei bisogno di sapere se esiste un modo per vedere la "cronologia degli errori" di un VI.
Mi spiego meglio....utilizzo LabVIEW per controllare un impianto termico. Durante la notte lasciamo il programma in esecuzione e al mattino seguente tiriamo giù i dati e vediamo com'è andata.
Nella prova eseguita ieri notte i dati "scompaiono" alle 3 (dopo circa 8 ore che il VI era in funzione)...molto probabilmente ha crashato ma purtroppo non sono stato io il primo ad arrivare stamattina (quindi non ho trovato il messaggio con il codice Errore!!!!).
C'è modo di scoprire cosa è successo????
Grazie[/quote:2h0s13fb]
Siamo sempre all' abbiccì della programmazione!!!!
Mai sentito parlare di "log"?
Tutti gli eventi significativi del Tuo sistema compreso cambi di stato, allarmi ed ERRORI devono essere scritti in un file o , come si dice in gergo devono essere "loggati su file".
Ogni messaggio che deciderai di scrivere in quel file dovrà essere preceduto possibilmente da un "timestamp" per avere un 'idea dell'esatto istante in cui ciò è successo.
bye
----------------------------------------
AUTORE: 2914
DATA :11/02/2010 - 18:44:14
----------------------------------------
Evidentemente non mi sono spiegato...è proprio dal log che mi sono accorto che ad un certo punto non avevo + registrazioni...comunque tutto risolto... era solo saltata la corrente alle 3 di notte durante la prova!!!
----------------------------------------
================================================================================
visualizzare variabili di un subVI
================================================================================
AUTORE: 925
DATA :13/02/2010 - 15:00:17
----------------------------------------
Ciao a tutti,
ho la necessità di visualizzare sul front panel di un VI alcune variabili d'uscita di un suo subVI mentre questo subVI è ancora in esecuzione e non semplicemente dopo che questo sia terminato. In allegato trovate un banale esempio di un subVI così fatto: un while ripetuto 11 volte che produce un numero casuale ogni secondo e alla fine mette tutti questi valori in un array. Supponiamo ora di mettere questo subVI all'interno di un VI che prende questo array e ne restituisce la somma: ovviamente io non posso vedere durante l'esecuzione i diversi valori della variabile "number 0 to 1". Come posso fare? Ho provato con variabili globali e functional global ma non ne vengo a capo...sarà una stupidaggine ma non riesco. Qualcuno potrebbe darmi una mano?
Grazie e ciao
PS: uso LV 7.1
----------------------------------------
AUTORE: 1078
DATA :15/02/2010 - 07:44:08
----------------------------------------
Ciao diodo,
Esistono diversi metodi che ti consentono di condividere informazioni tra thread (cicli) paralleli e tra subvi. Uno di questi sono le variabili globali. Puoi crearne una molto semplicemente cliccando su File --> New --> (Nella finestra che ti appare, nell'elenco di sinistra trovi) Global Variable. Ti si aprirà un VI, all'interno dovrai mettere il tipo di dato di cui vuoi creare la global variable (nel tuo caso un array di double), salvi il VI e dal quel momento hai a disposizione la variabile globale. Nel thread di scrittura userai la variabile globale in scrittura, nel trhead di lettura (dove devi visualizzare i dati) usarai la variabile in lettura.
Un'altra tecnica che ti consente di condividere dati e aggiornare controlli, è quella dei VI server. Alla tua subVI passi un riferimento al controllo che deve essere aggiornato e tramite Property node, gli aggiorni la proprietà value. Secondo il mio parere, nel tuo caso, il metodo migliore è quello dei VI server. Ti posto il tuo esempio modificato, nell'esempio ti illustro come usare la tecnica dei VI server.
Trovi altri esempi sul sito NI:
[url:2lv41gdi]http://decibel.ni.com/content/docs/DOC-2236[/url:2lv41gdi]
[url:2lv41gdi]http://search.ni.com/nisearch/app/main/p/bot/no/ap/tech/lang/it/pg/1/sn/catnav:ex/searchScope/en%2Cit/q/vi%20server[/url:2lv41gdi]
Ciao e buon lavoro
----------------------------------------
AUTORE: 925
DATA :17/02/2010 - 09:41:04
----------------------------------------
Ciao Ricky,
con le global avevo già provato ma non riesco...riguardo i VI server, non posso aprire il file che hai postato perchè ho LV7.1 mentre il tuo file è in LV8.6. Riesci a salvarlo in una versione precedente?
Grazie di nuovo.
Ciao
----------------------------------------
AUTORE: 1078
DATA :19/02/2010 - 09:49:56
----------------------------------------
Purtroppo non posso salvre il mio esempio in un formato precedente a LV 8.0. Ci vorrebbe la mano di qualcun'altro. Comunque puoi trovare un sacco di informazioni sull'utilizzo dei VI server. La tecnica è potentissima e molto facile da implementare. Si basa sull'utilizzo dei property node dei controlli e degli invoke node degli stessi.
Scusami se non posso fare di più.
Buona giornata.
----------------------------------------
AUTORE: 927
DATA :22/02/2010 - 09:59:46
----------------------------------------
Con le variabili globali è semplicissimo. In che senso non riesci?
----------------------------------------
================================================================================
Application builder, come alleggerire ?
================================================================================
AUTORE: 2196
DATA :15/02/2010 - 09:38:47
----------------------------------------
Ho compilato una VI generando il suo exe..ma sorpresa..o meglio non sapevo...per funzionare richiede l'installazione di un pacchetto National Labview Runtime da 60Mb: Ho visto che si può creare un pacchetto di installazione ma anche qui sonia altri 60Mb. C'è modo di fare un pacchesto custom con le sole dll che servono per alleggerire il tutto ?
----------------------------------------
AUTORE: 927
DATA :15/02/2010 - 11:33:11
----------------------------------------
Purtroppo sono quelle le dll che servono... Anzi, aumenta se devi includere funzioni particolari come il VISA.
Esiste un run-time engine più leggero solo se devi visualizzare solo VI remoti nel browser
----------------------------------------
AUTORE: 2196
DATA :15/02/2010 - 12:28:02
----------------------------------------
MMmm..ho cercato con goole che mi ha riportato a delle faq di cui però non ho tenuto il link. In sostanza dicono che ne ne può fare a meno includendo sia nella cartella dell'eseguibile che al momento della compilazione una dll che contiene il runtime.
----------------------------------------
AUTORE: 927
DATA :15/02/2010 - 15:22:24
----------------------------------------
Una?? se funziona davvero faccelo sapere...
----------------------------------------
AUTORE: 838
DATA :15/02/2010 - 16:36:18
----------------------------------------
l'ho letto anche io, ma nel dettaglio devi inserire quasi tutte le dll installate dalla runtime, si può togliere qualcosa (non servono tutte), ma poi si deve sempre allegare le lib nella cartella dell'eseguibile...
meglio installare le runtime e rilasciare a parte solo l'eseguibile...
----------------------------------------
AUTORE: 2196
DATA :15/02/2010 - 18:54:56
----------------------------------------
http://www.ni.com/pdf/manuals/322513a.pdf
----------------------------------------
AUTORE: 2196
DATA :15/02/2010 - 20:09:27
----------------------------------------
Peccato che non mi funziona.
----------------------------------------
AUTORE: 838
DATA :16/02/2010 - 07:30:49
----------------------------------------
peccato che sia un documento di 10 anni fa, e parla di runtime che sta su 2 floppy, non i 60 e passa megabyte di adesso....
----------------------------------------
AUTORE: 2196
DATA :16/02/2010 - 10:10:40
----------------------------------------
[quote="minzuk":pxki16dz]peccato che sia un documento di 10 anni fa, e parla di runtime che sta su 2 floppy, non i 60 e passa megabyte di adesso....[/quote:pxki16dz]
LOL mi era proprio sfuggito...scusa....
----------------------------------------
AUTORE: 838
DATA :16/02/2010 - 16:02:58
----------------------------------------
magari stesse su 2 floppy, più aumenta la release più aumentano i mb delle runtime
----------------------------------------
AUTORE: 2196
DATA :16/02/2010 - 16:20:37
----------------------------------------
[quote="minzuk":zox9hp31]magari stesse su 2 floppy, più aumenta la release più aumentano i mb delle runtime
[/quote:zox9hp31]
CMQ ho fatto delle ricerche con google è su lava dicono che sino alla 8.0 bastava copiare tutto ilc ontenuto della cartella shared del runtime dentro la cartella dell'eseguibile. Dalla 8.2 in poi sembra non basti più e ci vuole dell'altro che non è ben chiaro.
----------------------------------------
AUTORE: 838
DATA :16/02/2010 - 16:37:07
----------------------------------------
sarebbe una bella comodità in certi aspetti, però si sta gonfiando un pò troppo ste runtime
pensare di installare 200mb di roba, di cui ne usi 20 se è tanto mi sembra esagerato
e allegare solo le lib usate sarebbe comodo, anche come passaggio da una versione ad un'altra sarebbe meno indolore
----------------------------------------
================================================================================
Consiglio su programma che deve visualizzami questi dati...
================================================================================
AUTORE: 2918
DATA :15/02/2010 - 12:29:27
----------------------------------------
Ciao a tutti, sono appena entrato nel mondo LabView e credo sia quello che fa per me.
Ho scaricato la versione demo e spero di riuscire a far qualcosa prima che scada
Il mio interesse era rivolto a monitorare l'impianto solare termico della mia abitazione per avere un riscontro "grafico" del rendimento dei pannelli.
Pensavo di controllare 4 temperature e di tracciare dei grafici del loro andamento nell'arco delle 24h (anche di notte per vedere le "perdite") con un riferimento a quando la pompa è attiva.
Tutto questo lo visualizzerei su un piccolo monitor lcd e chi lo sa magari tuch....
Non sono nuovo nella programmazione, in qualsiasi cosa abbia a che fare con il 'concreto' si.
Sono qui per chiedervi dei consigli, su come inziare, cosa mi occorre, dove posso trovare del materiale, eventualmente se ci sono altre possibilità per fare tutto ciò (non mi sembra il caso di spendere oltre 1000€ per realizzare un programma simile acquistando il software
).
Se qualcuno vuole darmi una mano o dei buoni consigli sono qui in attesa
Grazie in anticipo
----------------------------------------
AUTORE: 482
DATA :15/02/2010 - 14:30:20
----------------------------------------
Beh direi che ti serve innanzitutto l'infrastruttura.
Le termocoppie che arrivano dai pannelli esistono già o le devi mettere tu?
Poi ti servirà un condizionatore di segnali di termocoppie compatibile con labview che abbia quindi i driver per labview oppure che comunichi in seriale (tramite USB magari).
Se hai tutto questo puoi cominciare a programmare senza problemi un applicazione di monitoraggio che non comporta niente di difficile.
----------------------------------------
AUTORE: 2918
DATA :15/02/2010 - 14:51:43
----------------------------------------
Dispongo di tutte le sonde.. per l'interfaccia non ho idea di cosa cercare.... per labview la versione demo va bene? Si riesce a trovare la versione "vecchia" a prezzi bassi?
----------------------------------------
AUTORE: 482
DATA :15/02/2010 - 15:42:09
----------------------------------------
Per TROVARE LABVIEW non saprei che dirti...non penso cisiano distributori, lo acquisti direttamente dalla National Instruments e credo che a livello commerciale vendano solo l'ultima versione.
Per l'interfaccia esistono dei comodi lettori USB di termocoppie sia National che non, che possono fare al caso tuo.
Vai sul sito della National e trovi un po' di informazioni a riguardo.
----------------------------------------
AUTORE: 2918
DATA :15/02/2010 - 17:11:07
----------------------------------------
Con la versione Demo riesco a fare quello che mi serve?
Una volta che ho l'hardware, come posso cominciare ad utilizzarlo? Ci sono guide a riguardo?
Grazie ancora
----------------------------------------
AUTORE: 2918
DATA :15/02/2010 - 17:15:19
----------------------------------------
Non penso che un'interfaccia da 1200€ sia quella che fa per me
L'utilizzo di questi sistemi è così oneroso anche dal punto di vista hw??? Calcolando che devo fare qualcosa di "sperimentale" non posso investire così tanto... Anche se non saprei dove orientarmi altrimenti...
----------------------------------------
AUTORE: 482
DATA :16/02/2010 - 08:23:56
----------------------------------------
Purtroppo labview è un ambiente di sviluppo proprietario.
Se vuoi utilizzarlo devi comprarlo e pagare la licenza, senno' niente da fare.
A livello legale è l'unica soluzione.
----------------------------------------
AUTORE: 2918
DATA :16/02/2010 - 08:58:57
----------------------------------------
una volta comperato LabView ce l'ho per sempre ma.... per fare il progettino che dicevo hardware economico non esiste? Cavoli per rilevare 4 temperature 1200€??
----------------------------------------
AUTORE: 482
DATA :16/02/2010 - 10:24:15
----------------------------------------
ma che hardware hai guardato???
Va bene che NI è cara ma 1200 euro...
questo puo' fare al caso tuo e costa molto di meno, ma sicuramente sul mercato c'e' altro.
http://sine.ni.com/nips/cds/view/p/lang/it/nid/201881
oppure ci sono cose come queste che pero' devi implementarti la comunicazione via seriale
http://www.picotech.com/thermocouple.html
http://www.superlogics.com/usb-data-acq ... 10-771.htm
----------------------------------------
AUTORE: 2918
DATA :16/02/2010 - 12:31:03
----------------------------------------
Siamo quindi sui 400€ in media... e posso aquisire solo temperature... ma usare un pic non si reisce??
----------------------------------------
AUTORE: 482
DATA :16/02/2010 - 13:14:39
----------------------------------------
certo, se sai come comunicarci, puoi usare quello che vuoi. peor' non puoi far girare labview sul PIC
----------------------------------------
AUTORE: 2918
DATA :16/02/2010 - 13:50:29
----------------------------------------
chiaro chiaro
Parlo dell'acquisizione dati... non c'è qualche guida che mi può aiutare sul come fare??
----------------------------------------
AUTORE: 482
DATA :16/02/2010 - 14:02:13
----------------------------------------
La comunicazione seriale si impara facilmente usando gli esempi che ci sono in labview.
Se conosci il protocollo di comunicazione si tratta solo di scrivere e leggere delle stringhe.
L'acquisizione da strumenti national è ancora piu' semplice perchè ha i suoi modulini di comunicazione con gli strumenti.
Onestamente su manuali o roba simile non so aiutarti se non dicendoti di cercare bene qui nel forum e sul sito della national.
----------------------------------------
AUTORE: 2918
DATA :17/02/2010 - 10:53:42
----------------------------------------
Per materiale intendo... Non so dove cominciare, vorrei realizzare quel progetto senza spendere un capitale, ho utilizzato in passato il pic 16F84, non con valori analogici in imput però.
Sono base base e vorrei imparare, ma non so cosa mi serve per farlo ;:D
----------------------------------------
AUTORE: 482
DATA :17/02/2010 - 13:50:23
----------------------------------------
Io non ho mai usato PIC e quindi non saprei dirti se e quali analogie ci sono.
Ti posso dire che per imparare labview devi conoscere le teorie della programmazione generica e magari guardarti un po' di esempi.
collegare l'hardware al pc e cominciare a leggerlo con degli esempi.
è una cosa che a dirla è piu' complicata che a farla, di contro a farla ci vogliono dei soldi, a dirla no.
----------------------------------------
================================================================================
Eseguibili e Linux
================================================================================
AUTORE: 727
DATA :16/02/2010 - 14:01:42
----------------------------------------
Ciao,
vorrei creare un'applicazione che giri in ambiente linux, però ho LV e application builder per windows. Qualcuno ha idea di come convertire il .exe generato da application builder in modo che giri con ubuntu? Necessito di run-time engine per linux?
Scusate ma non ho la più pallida idea di come fare.
Grazie
----------------------------------------
AUTORE: 482
DATA :16/02/2010 - 14:43:34
----------------------------------------
Devi procurarti labview per linux con l'application builder per linux.
Potresti provare con wine se è un applicazione semplice ma ho i miei dubbi che funzioni.
----------------------------------------
AUTORE: 727
DATA :16/02/2010 - 15:35:35
----------------------------------------
Grazie,
ma l'applicazione deve controllare anche una scheda PCI e generalmente gli emulatori non vanno molto bene.
Grazie ancora
----------------------------------------
AUTORE: 660
DATA :22/02/2010 - 13:12:42
----------------------------------------
[quote="PxEL":32nkjm5y]Grazie,
ma l'applicazione deve controllare anche una scheda PCI e generalmente gli [b:32nkjm5y]emulatori [/b:32nkjm5y]non vanno molto bene.
Grazie ancora[/quote:32nkjm5y]
Ma [b:32nkjm5y]W[/b:32nkjm5y]ine [b:32nkjm5y]I[/b:32nkjm5y]s [b:32nkjm5y]N[/b:32nkjm5y]ot an [b:32nkjm5y]E[/b:32nkjm5y]mulator....
Scusate la facezia ma non ho resistito, comunque interesserebbe anche a me scoprire se wine funziona.
Max
----------------------------------------
================================================================================
trasformata di fourier
================================================================================
AUTORE: 2908
DATA :16/02/2010 - 16:48:16
----------------------------------------
come faccio a fare la trasformata di fourier di un segnale acquisito in ingresso grazieee
----------------------------------------
AUTORE: 482
DATA :17/02/2010 - 08:00:02
----------------------------------------
non vorrei dire cavolate ma tra le funzioni matematiche credo ci sia il modulino apposta.
----------------------------------------
================================================================================
come togliere i campi multipli da una array?
================================================================================
AUTORE: 822
DATA :17/02/2010 - 11:48:16
----------------------------------------
ciao,
c'è qualcuno di voi che abbia già creato un vi, e che abbia voglia di regalarmelo, che permette di cancellare da un'array i valori uguali e ne restituisce solo uno in uscita?
per esempio come input ho un'array i cui valori sono 1 0 1 2 3 1 2 4 3 0 in uscita vorrei un'array con valori 1 0 2 3 4
sembra una stupidata ma io mi ci sto incasinando..
grazie a tutti
utilizzo LV8.5
----------------------------------------
AUTORE: 43
DATA :17/02/2010 - 13:58:25
----------------------------------------
Classico
[attachment=1:iz1mdbaq]RemoveDoublets.vi[/attachment:iz1mdbaq]
Per evitare "Build Arrays"...
[attachment=0:iz1mdbaq]RemoveDoublets1.vi[/attachment:iz1mdbaq]
bye
----------------------------------------
AUTORE: 822
DATA :17/02/2010 - 14:58:41
----------------------------------------
grazie paracarro, geniale come sempre
----------------------------------------
================================================================================
visualizzazione due vettori in un grafico
================================================================================
AUTORE: 2840
DATA :17/02/2010 - 15:54:29
----------------------------------------
Salve a tutti
volevo chiedere a qualcuno come faccio a visualizzare due segnali nello stesso grafico.
Mi spiego meglio ho un programma di acquisizione dati per la pressione attorno ad un profilo alare ed ottengo due vettori uno per il coefficiente di pressione sul dorso e una sul ventre!ora vorrei metterli su un grafico dove sull'asse delle ascisse c'è la posizione (x/c) e su quella delle ordinate i due diversi coefficienti di pressione!
Grazie anticipatamente
----------------------------------------
AUTORE: 645
DATA :18/02/2010 - 10:27:51
----------------------------------------
Dai un'occhiata agli esempi: puoi tranquillamente inviare ad un grafico "tot" segnali con la stessa asse X e la stessa asse Y o visualizzare due scale Y per visualizzare due segnali completamente diversi aventi in comune solo l'asse X (per esempio il tempo)...
----------------------------------------
================================================================================
analisi statistica-calcolo pdf e cdf
================================================================================
AUTORE: 2712
DATA :18/02/2010 - 15:13:17
----------------------------------------
ragazzi devo calcolare partendo da un array (in cui ho dei dati di misurazione) la pdf(funzione didensità di probabilità) e la cdf(funzione di distribuzione cumulativa)
ci sto sbattendo la testa da ore ma niente
potete aiutarmi?
grazie
----------------------------------------
AUTORE: 2712
DATA :18/02/2010 - 15:43:04
----------------------------------------
dopo ore sono arrivato a questo ma ho forti dubbi
----------------------------------------
================================================================================
importare una dll matlab
================================================================================
AUTORE: 2712
DATA :18/02/2010 - 18:17:00
----------------------------------------
buona sera
vorre creare una dll in matlab contenente un determinato gruppo di funzioni
per poi importarla in un programma scritto in labview
è possibile?
qualcuno mi può dare qualche dritta?
grazie
ps sonocompletamente imbanato con il matlab
----------------------------------------
AUTORE: 1078
DATA :19/02/2010 - 07:26:56
----------------------------------------
Ma perchè non importi direttamente gli script MathLab? Sai che esiste una funzione LV (Mathscript) che ti permette di eseguire direttamente del codice MathlLab da Labview?
Comunque, se vuoi eseguire delle funzioni contenute in una DLL (è indifferente che tipo di dll) a patto che tu conosca come strutturare i dati da passare alla DLL (le sue strutture e i tipi di dato) devi utilizzare la "Call by Library Function". La trovi nella Functions palette ---> Connectivity ---> Libraries and Executable.
Se cerchi nel "Find example" di Labview trovi anche un sacco di esempi. Anche sul sito NI e direttamente in questo forum trovi un sacco di esempi su come si utilizza quella funzione.
Ciao e buon lavoro.
----------------------------------------
AUTORE: 2712
DATA :19/02/2010 - 10:19:23
----------------------------------------
grazie 1000 per la risposta
anche io volevo utilizzare gli script
è stato il mio committente che mi ha chiesto questa particolare cosa
volevo almeno provare a soddisfarlo prima di usare direttamente gli script
vedo che riesco a fare
----------------------------------------
AUTORE: 2712
DATA :22/02/2010 - 18:54:01
----------------------------------------
ragazzi non riesco a creare il dll in matlab
sto cercando info su internet da ore
mi potete aiutare ? qual' è il procedimento
----------------------------------------
AUTORE: 2712
DATA :23/02/2010 - 10:12:18
----------------------------------------
girando un po ho trovato qualcosina
qualcuno mi potrebbe fare il favore di passarmi questo VI dalla versione 8.6 alla 8.0 qui in laboratorio non posso farlo
grazie
----------------------------------------
AUTORE: 2550
DATA :23/02/2010 - 10:34:14
----------------------------------------
eccolo qui. buon lavoro
ciao
DVD
----------------------------------------
AUTORE: 2712
DATA :23/02/2010 - 16:25:11
----------------------------------------
ho problemi con la creazione della dll in matlabe in particolare con il wrapper
quando richiamo la libreria in labview non riesco ad utilizzare le funzioni che sono andato a raggruppare
qualcuno può aiutarmi?
grazie
ps grazie per laconversione del file
----------------------------------------
AUTORE: 2712
DATA :25/02/2010 - 10:05:09
----------------------------------------
nessuno mi piò aiutare???
Riformulo il problema che ho:
devo creare una dll in matlab con una serie di funzioni per effettuare una analisi statistica nel mio VI (chiamo le funzioni attraverso il blocchetto "call library function node") dei dati acquisiti durante la misurazione.
le funzioni che voglio inserire nella dll sono tipo ksdensity.m, normfit.m, ecdf.m e altre.
giro oramai da giorni in cerca di notizie ho trovato qualcosa ma non sono riuscito neanche a far funzionare l' esempio più stupido. in effetti ho problemi con il cosiddetto wrapper file necessario, a quanto ho capito, per far riconoscere i dati inviati da labview a matlab e vice versa.
io utilizzo labview 8.0 versione studente e matlab 7.0 (so che anche questo influisce)
ho allegato un pdf che ho trovato navigando. è un po vecchiottala la procedura descritta infatti perecchie delle opzioni utilizzate non vengono più utilizzate in matlab.
volevo inviati anche un altro file con estensione doc piu recente mail forum non me lo permete.
in esso si utilizza una procedura che richiede l'utilizzo di microsoft visual c++ 6.0.
----------------------------------------
AUTORE: 645
DATA :25/02/2010 - 14:08:03
----------------------------------------
Con il MathScript node si può eseguire codice MatLab in LabView...
Ma se il tuo committente ti ha chiesto qualcosa di diverso continuiamo a cercare...
[attachment=0:6hmd02jt]MatLab in LabView.jpg[/attachment:6hmd02jt]
----------------------------------------
AUTORE: 2712
DATA :26/02/2010 - 13:49:35
----------------------------------------
per andare avanti perchè mison bloccato su le dll sto andando avanti utilizzando gli script node matlab.
secondo voi perche la funzione [F,z]=ecdf(x) che mi dovrebbe restituire lacdf empirica dei valori misurati x non funziona???
naturalmente in matlab lo script che ho scritto funziona benissimo
perche in labview no??????
mi restituisce zero per F e un valore solo per z quando dovrebbero essere due array di double
qualcuno mi può inoltre dire come sono visti i vettori di labview in matlab???
comevettori colonna o riga???
grazie
----------------------------------------
AUTORE: 645
DATA :02/03/2010 - 09:02:11
----------------------------------------
http://lavag.org/index.php?app=core&mod ... ach_id=108
Può aiutare?
----------------------------------------
AUTORE: 2712
DATA :24/03/2010 - 15:08:56
----------------------------------------
ho pensato sia a creare un dll per ogni funzione che vado ad utilizzare che a creare un unica dll partendo da un m-file che contenga tutto il codice che ho scritto nel Matlab script
in un mese non sono riuscito a fare progressi
sostanzialmente utilizzo fuizioni quali: ksdensity, normfit;ecdf;normpdf;normcdf;
non conosco la grandezza dei dati restituitimi da queste funzioni ed e difficile in queste circostanze andare a memorizzare i dati in memoria in modo che labview possa capirli
qualcuno mi può aiutare???
----------------------------------------
AUTORE: 2712
DATA :25/03/2010 - 11:14:15
----------------------------------------
ho cambiato approccio
l'idea è fare l'eseguibile della funzione matlab e la richiamo da labview
il problema è che non riescoa passare i parametri di input al eseguibile
qualcuno mi può aiutare
----------------------------------------
AUTORE: 2274
DATA :05/05/2010 - 12:25:22
----------------------------------------
hai capito come superarlo anche io ho lo stesso problema...
ciao Barciuz
----------------------------------------
AUTORE: 645
DATA :06/05/2010 - 08:52:22
----------------------------------------
Già... c'è stato qualche sviluppo?
Sei riuscito a preparare il VI come volevi?
----------------------------------------
================================================================================
Velocizzare comunicazione seriale
================================================================================
AUTORE: 2435
DATA :19/02/2010 - 14:23:52
----------------------------------------
Ciao a tutti...
ho il seguente problema,nel senso che la comunicazione funzione solo che mi risulta lenta..
E' spiegato tutto nel .vi ...
Cmq come posso velocizzare il sistema??
Grazie
----------------------------------------
AUTORE: 1078
DATA :19/02/2010 - 14:43:04
----------------------------------------
Ma sei sicuro che la tua applicazione ti restituisca valori?
----------------------------------------
AUTORE: 2435
DATA :19/02/2010 - 14:48:19
----------------------------------------
Certo che funziona
Ovviamente non ho messo tutto il codice di inizializzazione porta,gestione errori ecc...
ho messo solo la parte di invio richiesta dati e lettura....
Inizialmente non avevo impiegato il Clear.vi e la comunicazione era a volte traballante....usando il clear è diventata stabile però lenta.....
Il problema è che non esiste un Checksum per il controllo della stringa ricevuta.
----------------------------------------
AUTORE: 43
DATA :19/02/2010 - 14:54:07
----------------------------------------
[quote="nic81_2007":2hsa6onv]...
ho messo solo la parte di invio richiesta dati e lettura....
Inizialmente non avevo impiegato il Clear.vi e la comunicazione era a volte traballante....usando il clear è diventata stabile però lenta.....
Il problema è che non esiste un Checksum per il controllo della stringa ricevuta.[/quote:2hsa6onv]
Mah! e se il cavo di comunicazione si staccasse? se per qualche ragione lo strumento non rispondesse?
Sai cosa succede?
Che la Tua bella applicazione resta "appesa" nel punto in cui legge i 2 byte di risposta.
Non c'è gestione di timeout di risposta x cui non sai se lo strumento è connesso oppure no!
Eppoi un programma che si impalla per una simile str..zata...
Pessimo. Rifarei tutto daccapo
bye
----------------------------------------
AUTORE: 43
DATA :19/02/2010 - 15:10:59
----------------------------------------
In tutte i programmini e programmoni che ho scritto, che realizzano una comunicazione seriale, non ho mai usato il vi "VISA Clear".
Incuriosito mi sono guardato l'help e ... ho visto che manda un "break" sulla linea seriale.
Mi chiedo che senso abbia usare questa funzione.
Toglierla fa solo che bene!
----------------------------------------
AUTORE: 2435
DATA :19/02/2010 - 16:18:16
----------------------------------------
E' vero il fatto del timeout...e infatti ho sistemato
Per il clear lo so non lo avevo mai usato però avevo visto che tra le sue funzionalità aveva quelle di ripulire i buffer in lettura e scrittura.
E utilizzandolo le letture risultavano corrette anche se lente.
Adesso ho sistemato in questo modo...però non ho possibilità di testarlo
Il punto è che il protocollo dello strumento non fornisce un check sum.
Così comunque può andar meglio??
Grazie
----------------------------------------
AUTORE: 2435
DATA :19/02/2010 - 16:30:14
----------------------------------------
Eventualmente sapete dirmi un modo per ripulire il buffer in lettura e scrittura??
Grazie
----------------------------------------
AUTORE: 43
DATA :19/02/2010 - 16:56:55
----------------------------------------
[quote="nic81_2007":m4964jro]E' vero il fatto del timeout...e infatti ho sistemato
Per il clear lo so non lo avevo mai usato però avevo visto che tra le sue funzionalità aveva quelle di ripulire i buffer in lettura e scrittura.
E utilizzandolo le letture risultavano corrette anche se lente.
Adesso ho sistemato in questo modo...però non ho possibilità di testarlo
Il punto è che il protocollo dello strumento non fornisce un check sum.
Così comunque può andar meglio??
Grazie[/quote:m4964jro]
Allora: ben diverso da prima, però ci sono sempre un po' di cose incomprensibili che sembrano fatte un po' a caso senza capire bene cosa si sta facendo.
specialmente nella conversione.
Ma andiamo x ordine:
1) Manca la pulizia iniziale del buffer, descritta nella fase iniziale.
basta una "byte to SerialPort" se il numero NON è 0, allora leggi la seriale (lo stesso n. di byte indicati dalla funz. precedente) e butti via quanto letto
2) il loop di attesa risposta non è temporizzato
nel caso non ci siano esattamente 2 bytes quel loop succhia il 100% di tempo della CPU x 200 msec. cmq non ha molto senso se hai altra roba che gira in parallelo meglio mettergli una temporizzazzione seppur minima diciamo 30 msec.?
3) non è giusto attendere esattamente 2 bytes.
Se per disgrazia te ne arrivano 3 non consideri alcuna risposta. Se x disgrazia ne hai 0, esegui una read di 0 bytes? Meglio evitare read di 0 bytes e tutto il resto. Quindi se ci sono + di 2 bytes, puoi leggerli tutti e prendere i primi 2 scartando tutto il resto...
4) non c'è gestione del "retry"
Se una comunicazione fallisce si può provare una ritrasmissione o no?
5) la conversione:
sembra un numero intero di 13 bit senza segno.dei 3 bit + significativi il primo indica il segno (vuol dire che puoi avere i valori +0 e -0? il numero non è espresso in complemento a 2 o a 1?) gli altri 2 bit non sono usati.
tutto ciò è vero?
6)Non si capisce xkè la conversione produca un Double.
Non hai decimali, non ci sono conversioni di scalain Unità ingegneristiche, quindi perchè usare un double quando basta un banale I16?
7) La conversione è un colabrodo.
per mascherare un numero intero non è necessario usare un array di booleani.
Un numero intero può essere visualizzato in forma binaria è la Funzione "And" che hai utilizzato lavora anche con gli interi.
Per unire 2 byte e formare un I16 non è necessario fare (byte basso ) + (byte alto)*256 esiste l'apposita funzione labVIEW
Se hai una stringa di 2 byte e devi farne un I16 o un U16 basta fare un cast con l'apposita funzione.
lista della sequenza di messaggi da inviare
Invece di usare una matrice di bytes che costringe ad avere messaggi tutti lunghi uguali, meglio usare un array di stringhe. Le stringhe possono essere visualizzate in formato esadecimale.
bye
----------------------------------------
AUTORE: 2435
DATA :22/02/2010 - 15:37:25
----------------------------------------
Ciao grazie per aver risposto
mi rifaccio ai tuoi punti:
2)verissimo è stata una mancanza...in quanto ho già sperimentato problemi dovuti a questo
3)Ma non avendo checksum se il numero di byte ricevuti è >2 non posso rischiare di convertire il dato in quanto potrei andare a visualizzare un numero che non centra nulla...L'unica sicurezza è che quando invio una richiesta successivamente ricevo una risposta di 2byte.
(per il fatto di evitare read di 0 bytes è vero)
5)Per quanto riguarda il punto 5) è proprio così....
7)Per la conversione in double hai ragione e anche per il modo di convertire il dato..
La conversione instringa la faccio sucessivamente in quanto il valore effettivo deve prima essere calcolato in base ai fondoscala di V e I impostati.
DOMANDA::ispirandomi ai sub vi del Modbus subito dopo l'inizializzazione della porta seriale ho messo un "byte to SerialPort" e un"Read" per pulire il buffer è una cosa giusta e funzionante??
OPINIONE SU VI NATIONAL:::Ma ti chiedo una cosa....Allora cosa ne pensi di questi blocchi forniti dalla national????sono tutti fatti con questa struttura
----------------------------------------
AUTORE: 43
DATA :22/02/2010 - 17:03:23
----------------------------------------
[quote="nic81_2007":nwxh6qgh]...3)Ma non avendo checksum se il numero di byte ricevuti è >2 non posso rischiare di convertire il dato in quanto potrei andare a visualizzare un numero che non centra nulla...L'unica sicurezza è che quando invio una richiesta successivamente ricevo una risposta di 2byte...[/quote:nwxh6qgh]
Bah! più che mancanza di checksum mi sembra una mancanza di carattere terminatore configurabile fra gli attributi di comunicazione della seriale.
I messaggi scambiati via seriale possono essere di lunghezza fissata oppure essere delimitati da un carattere terminatore nel caso la lunghezza possa variare.
Il checksum è un controllo sulla correttezza di invio messaggio tipo il bit di parità che verifica sommariamente la correttezza del singolo byte.
Cmq se la comunicazione è di tipo master/slave vanno letti/tolti tutti i byte presenti dal buffer di ricezione, ed al limite si riprova a trasmettere.
[quote="nic81_2007":nwxh6qgh]5)Per quanto riguarda il punto 5) è proprio così....[/quote:nwxh6qgh]
Cosa? E' un numero in complemento a 2 oppure no?
il realtà il 13esimo bit è mascherato (cioè non considerato nel computo numerico) il numero è quindi a 12 bit (da 0 a 2^12-1 cioè 4095) e il suo segno è deciso dal 14esimo bit. E' una roba che non si può vedere. 6 sicuro che funzioni così? Informati bene plz.
[quote="nic81_2007":nwxh6qgh]DOMANDA::ispirandomi ai sub vi del Modbus subito dopo l'inizializzazione della porta seriale ho messo un "byte to SerialPort" e un"Read" per pulire il buffer è una cosa giusta e funzionante??[/quote:nwxh6qgh]
Sì. Ricordati di leggere la porta solo se c'è qualcosa da leggere
[quote="nic81_2007":nwxh6qgh]OPINIONE SU VI NATIONAL:::Ma ti chiedo una cosa....Allora cosa ne pensi di questi blocchi forniti dalla national????sono tutti fatti con questa struttura[/quote:nwxh6qgh]
OK, non mi piace , nonostante sia implementato il meccanismo error in/error-out, nonostante funzioni sia per una comunicazione seriale che GPIB ( io quel VI lo userei solo con interfaccia GPIB), nonostante si possa attendere un carattere terminatore configurandolo fra i parametri iniziali.
bye
----------------------------------------
AUTORE: 2435
DATA :24/02/2010 - 13:37:36
----------------------------------------
Ciao grazie per gli aiuti...
ieri ho sistemato velocemente la comunicazione...
ho aggiunto anche la parte relativa al numero di tentativi per richiedere e ricevere i dati...
adesso funziona correttamente e velocemente(considerando che il baud rate dello strumento può essere solo di 4800)
----------------------------------------
================================================================================
Dialogare con un database, come?
================================================================================
AUTORE: 482
DATA :19/02/2010 - 14:40:32
----------------------------------------
...ma ciao!
come da oggetto ho delle lacune per quanto riguard ala comunicazione con i database.
Fino ad adesso mi è capitato didialogare con:
1)databse Access e lo facevo tramite ADO configurando il database tra i DSN
2)database SQLite con l'SQLite wrapper per labview.
Ora ho un database SQLServer e stavo pensando di comunicarci tramite il Database connectivity toolkit di labview che già ho ma che non ho mai usato.
Già la funzione open mi chiede in ingresso un path a un file che contiene le connection information.... dove lo trovo sto file??
Quale strada mi conviene seguire per collegarmi a questo database?
C'e' qualche altro tool che mi faceilita la vita?
----------------------------------------
AUTORE: 482
DATA :19/02/2010 - 15:39:34
----------------------------------------
Il file con le connection information, non ho ancora capito coem sia fatto e dove lo trovo, in compenso ho scoperto che posso passare in ingresso il nome della connessione DSN e tutto funziona.
----------------------------------------
AUTORE: 129
DATA :20/02/2010 - 13:38:18
----------------------------------------
secondo me è il file .dsn generato con ODBC manager.
Ma puoi usare anche ado per sql server continui ad usare DSN solo che devi aver creato appunto un accesso in ODBC, esattamente come fai per Access.
----------------------------------------
AUTORE: 482
DATA :22/02/2010 - 07:39:33
----------------------------------------
Il fatto è che io ho fatto una ricerca dei file .dsn in c: e non ha trovato niente, quindi non ho idea di dove andarlo a cercare.
Cmq come dicevo il problema è stato risolto perchè se creo la connessione in ODBC, posso passargli in ingresso una stringa col nome della connessione e basta.
..pero' resto curioso
----------------------------------------
AUTORE: 129
DATA :23/02/2010 - 11:08:49
----------------------------------------
Sono contento che hai risolto, cque se vuoi lavorare con file .dsn prima lo devi creare da ODBC manager,
[attachment=0:x2fxfijp]odbc.png[/attachment:x2fxfijp]
è comodo perchè basta che punti l'applicazione al file, e ti evita di configuarare tutte le volte l'odb della macchina che accede al database.
----------------------------------------
AUTORE: 482
DATA :23/02/2010 - 11:13:47
----------------------------------------
Ecco cosa mi mancava!
grasssie!
----------------------------------------
================================================================================
Comunicazione seriale con PLC OMRON
================================================================================
AUTORE: 2920
DATA :22/02/2010 - 08:30:15
----------------------------------------
Ciao a tutti,per motivi di lavoro mi trovo a dover comunicare via seriale con un PLC Omron CJ1G CPU42H.Ho già testato la comunicazione seriale tra il mio pc e il PLC,quello che sto cercando di fare è di scambiare stringhe tra il PLC e il Labview.Utilizzo il vi basic serial write and ride presente negli esempi di labview (utilizzo la versione 8.2), inserisco nel vi tutte le caratteristiche della porta com del mio pc (baud rate,data bits...) e scrivo nella porzione write string la seguente stringa:
00RD0100000156*| utilizzata nella lettura della data memory 100 del plc utilizzato.mando in esecuzione il vi ma nella porzione read string non visualizzo nessuna risposta.Qualcuno può darmi qualche suggerimento?
Grazie anticipatamente per la vostra disponibilità.
----------------------------------------
AUTORE: 660
DATA :22/02/2010 - 13:06:12
----------------------------------------
io uso lo stesso tipo di comunicazione con un CJ1M e non mi da problemi, l'unica cosa che posso dirti di provare è:
- nel tuo messaggio manca la @ davanti alla stringa che invii: gliela mandi? altrimenti non credo che riconosca il messaggio
- verifica il valore del FCS, anche se dovrebbe comunque risponderti che è errato
- questo tipo di stringa funziona con il protocollo Sysmac Way e per il CJ1M funziona solo se lo switch 5 sul PLC è messo su off (è quello che definisce sulla porta seriale cui mi connetto fisicamente che deve usare un protocollo custom anzichè automatico)
- prova se la stringa ti funziona da hyperterminal in caso contrario l'errore potrebbe essere lì
Per il protocollo FINS ci ho provato senza alcun successo
spero di esserti stato un po' di aiuto
Se ti serve vedo di recuperarti la bozza del file di comunicazione che ho iniziato ad implementare
Max
----------------------------------------
AUTORE: 2920
DATA :22/02/2010 - 13:27:29
----------------------------------------
Grazie mille per la tua risposta.La chiocciola è stata una mia dimenticanza.L'FCS l'ho calcolato con un altro software con il quale comunico senza problemi con il plc.Ho controllato la posizione ad off dello switch 5 del PLC, ho provato a comunicare via seriale con il pc di un collega con un altro software per la comunicazione seriale e il mio vi mi permetteva di leggere e inviare stringhe.Se ti fosse possibile inviarmi il vi che usi mi faresti un grande piacere.non vorrei che in realtà il plc mi trasmette stringhe di risposta ma il mio vi "non fa in tempo" a visualizzarle.Grazie per l'immediata risposta e per la disponibilità
----------------------------------------
AUTORE: 660
DATA :22/02/2010 - 21:36:37
----------------------------------------
Eccoti il mio VI, c'è anche quello che calcola l'FCS se ti serve. L'ho salvato con la versione 8.2 spero che ti funzioni.
Il codice non è nè bello nè ottimizzato, ma al momento non avevo tempo di pensare a questo.
Non riuscivo a caricare un file unico per cui ho dovuto spezzarlo: estrai tutto nella stessa cartella, nel secondo file c'è una cartella con le librerie ogtk nel caso non le avessi già installate.
Provalo e se hai dei dubbi chiedi pure.
Per farlo funzionare inserisci i parametri della comunicazione, quelli che trovi dentro sono i miei di default.
Poi scegli il comando che vuoi dal menu a tendina, non li ho ancora implementati tutti ma se guardi il block diagram vedi quelli che non sono utilizzati.
Poi indichi punto di inizio che nel caso di un canale è il suo valore (es per leggere D100 metti lettura DM e punto di inizio a 100)
Poi inserisci quanti valori vuoi leggere (es. se vuoi solo D100 metti 1 se vuoi anche D101 metti 2, etc.)
Poi premi la freccia run (non run continuously).
Nei campi stringa inviata e stringa ricevuta vedi direttamente cosa hai incviato e cosa ti ha risposto (se non hai sbagliato i parametri o i settaggi la risposta arriva).
Poi nel marasma di campi sparsi attorno trovi i vari dati in funzione di cosa hai letto; ad es. per il valore D100 lo trovi sia nell'array che nel numeric array.
Se guardi i campi codice di risposta e risposta PLC (che sostanzialmente sono la stessa cosa solo che uno è testuale e quindi più user friendly) sai in caso di errori qual'è il motivo per cui lui non ti ha risposto o non ha risposto come avresti voluto.
Spero si esserti stato utile.
Max
[attachment=1:glqj1h0s]CJ1M LV 8.2.zip[/attachment:glqj1h0s]
[attachment=0:glqj1h0s]CJ1M LV 8.2_segue.zip[/attachment:glqj1h0s]
----------------------------------------
AUTORE: 660
DATA :22/02/2010 - 21:38:40
----------------------------------------
Una cosa: passi l'avere impostato ad OFF lo switch 5 del PLC, ma gli hai anche impostato la comunicazione a Sysmac Way con i relativi parametri di velocità, parità, e bit?
Ad esempio 9600,7,2,E?
Max
----------------------------------------
AUTORE: 2920
DATA :23/02/2010 - 08:41:56
----------------------------------------
Ciao Max,
grazie tante per la tua risposta e per il vi che mi hai allegato.ieri sera ero riuscita a leggere la DM utilizzando il vi basic read and write aggiungendo un tempo di attesa prima della chiusura della seriale.In maniera "rudimentale" ero anche riuscita a calcolare l'FCS utilizzando parecchie porte XOR.certo mi chiedevo come fosse possibile leggere più celle di una DM,ti ringrazio quindi ancora di più per avermi inviato un vi completo anche di questa informazione.adesso cercherò di costruire qualcosa di mio partendo dai tuoi suggerimenti.Grazie ancora e se avrò di nuovo dubbi....a presto
Mary
----------------------------------------
AUTORE: 660
DATA :23/02/2010 - 12:36:57
----------------------------------------
prego.
Eventualmente se, avendo tempo a disposizione, riuscissi a far funzionare il protocollo FINS anzichè quello che ho implementato io mi piacerebbe sapere come hai fatto.
Ciao
Max
----------------------------------------
AUTORE: 2920
DATA :10/03/2010 - 14:25:37
----------------------------------------
Ciao a tutti!
sono riuscita a comunicare con il mio PLC grazie ai suggerimenti del forum.adesso ho il seguente problema: la comunicazione mi risulta lenta....sto cercando di accendere e spegnere un' uscita del PLC da Labview: premendo il pulsante dal front panel il led dell'uscita del PLC si accende quasi subito,invece la lampada sul front panel ci mette tempo a visualizzare lo stato dell'uscita.Allego il vi che ho realizzato,sicuramente è molto elementare ma sono una principiante autodidatta del Laview.
Grazie per la disponibilità
Mary
----------------------------------------
AUTORE: 660
DATA :11/03/2010 - 13:09:41
----------------------------------------
ciao, ho dato un'occhiata ai VI che hai postato e penso che dovresti fare un paio di modifiche per vedere se migliora il funzionamento.
Nel VI del pulsante non hai messo nessun temporizzatore per cui questo viene eseguito alla massima velocità che il processore riesce a mantenere compatibilmente con quello che ha da fare, dovresti aggiungerne uno da 100 o 200 ms così da non sovraccaricare il processore.
Seconda cosa: così come hai posto il pulsante ad ogni ciclo vai comunque a scrivere (mi manca un VI per essere sicuro che tu non faccia la verifica li) la stringa anche se non è cambiata.
Dovresti usare, ad esempio un event case in modo da scrivere la stringa solo quando viene premuto il pulsante.
Max
----------------------------------------
AUTORE: 660
DATA :11/03/2010 - 13:33:35
----------------------------------------
ti allego il VI modificato
ciao
Max
[attachment=0:c1fusaib]Pulsante_Lampada_Lettura_Continua1.vi[/attachment:c1fusaib]
----------------------------------------
AUTORE: 2920
DATA :11/03/2010 - 14:27:03
----------------------------------------
Ciao Max,
ti ringrazio per la tua tempestiva risposta.Mi sono dimenticata di dirti che ho la versione 8.2 di LabVIEW e quindi non riesco ad aprire il tuo vi.Potresti ri-inviarmelo salvato con la mia versione?
grazie mille e scusa se non te l'ho detto
Mary
----------------------------------------
AUTORE: 660
DATA :11/03/2010 - 21:37:21
----------------------------------------
scusa tu, lo avevi scritto ma me ne sono dimenticato.
Eccoti l'esempio nelal versione 8.2.
Ciao
Max
[attachment=0:2p37uy9d]Pulsante_Lampada_Lettura_Continua1.vi[/attachment:2p37uy9d]
----------------------------------------
AUTORE: 2920
DATA :15/03/2010 - 11:29:16
----------------------------------------
Ciao Max,
grazie mille per la tua risposta, non avevo mai usato la struttura event case,adesso con essa posso risolvere anche altri esempi che sto realizzando.Stamattina ho provato il vi che mi hai inviato,la comunicazione è migliorata rispetto a prima ma secondo il mio collega che utilizza altri sw di supervisione, si può fare di meglio....io non mi arrendo e sto cercando di rendere il mio vi il più performante possibile.Ho separato i subvi che invoco per scrittura e lettura,per la scrittura ho utilizzato solo la funzione write della seriale senza la read, invece per la lettura ho tolto il ritardo fisso tra scrittura e lettura e ho cercato di legare la lettura ai byte scritti sulla seriale.Ti allego quello che ho realizzato.....spero di riuscire a realizzare programmi sempre più efficienti....per ora ci provo!
grazie per la disponibilità
Mary
----------------------------------------
AUTORE: 3056
DATA :10/05/2010 - 08:55:36
----------------------------------------
salve a tutti,
ho visto che nei vostri VI usate per scrivere i dati sulla porta seriale usate il VI "VISA Write". vorrei riuscire a capire come questo VI effettua questa operazione. provo a spiegarmi meglio. vorrei riuscire a capire cosa realmente questo vi trasmette sulla porta (magari se usa una codifica o un tipo di dati particolare) quando in ingresso ha una determinata stringa. Esempio.... devo inviare una stringa di due caratteri. il vi cosa trasmette? un array di due byte in cui ogni byte rappresenta la codifica ascii di un carattere? o cosa?
c'è qualcuno che può darmi una mano?
grazie mille
----------------------------------------
AUTORE: 660
DATA :11/05/2010 - 09:57:15
----------------------------------------
sinceramente non ti saprei dire, penso che in uscita ci sia la stringa come l'hai creata con i codici ASCII.
Max
----------------------------------------
AUTORE: 3056
DATA :13/05/2010 - 14:32:30
----------------------------------------
grazie machyaer,
avrei una domanda da porti. ho provato il tuo VI " SubVI lettura-scrittura CJ1M 8.51.vi" (postato in questa discussione) ma non ottengo risultati, nel senso che il VI viene eseguito senza errori ma non ricevo nessuna stringa (nell'indicatore "Stringa Ricevuta") in risposta dal PLC. sapresti darmi qualche dritta in merito? ho pensato che potesse essere il cavo di comunicazione che utilizzo. saresti così gentile da postarmi la piedinatura del cavo che hai usato tu?
ti ringrazio ancora.
----------------------------------------
AUTORE: 660
DATA :13/05/2010 - 21:41:41
----------------------------------------
la piedinatura è quella che fornisce omron sul manuale del CJ1M:
lato PLC lato PC
1----schermo 1
2--------------------2
3--------------------3
4 con 5 plc 4 con 6 pc
5 con 4 plc 5 con 9 plc
6 6 con 4 pc
7 7 con 8 pc
8 8 con 7 pc
9 con 5 pc 9
spero che sia chiaro.
Ciao
Max
----------------------------------------
AUTORE: 660
DATA :13/05/2010 - 21:44:11
----------------------------------------
dimenticavo...
devi anche verificare di:
- aver impostato la comunicazione del plc (tramite cx-programmaer) in hostlink (9600,7,e,2)
- aver messo ad off il micro5 della cpu che per la comunicazione toolbus deve essere impostato ad on
ciao
Max
----------------------------------------
AUTORE: 10827
DATA :10/07/2013 - 21:50:53
----------------------------------------
[quote="Mary80":62um6zwh]Ciao a tutti!
sono riuscita a comunicare con il mio PLC grazie ai suggerimenti del forum.adesso ho il seguente problema: la comunicazione mi risulta lenta....sto cercando di accendere e spegnere un' uscita del PLC da Labview: premendo il pulsante dal front panel il led dell'uscita del PLC si accende quasi subito,invece la lampada sul front panel ci mette tempo a visualizzare lo stato dell'uscita.Allego il vi che ho realizzato,sicuramente è molto elementare ma sono una principiante autodidatta del Laview.
Grazie per la disponibilità
Mary[/quote:62um6zwh]
Qualcuno ha esaminato il VI hai pubblicato e lui che si dovrebbe creare una serie di modifiche per vedere se migliora la funzione.
----------------------------------------
================================================================================
TASK OUt & IN
================================================================================
AUTORE: 2895
DATA :22/02/2010 - 14:25:34
----------------------------------------
Qualcuno sa spiegarmi in parole povere che cos'è un task in labview e che differenza c'è tra un canale e un task.
GRazie
----------------------------------------
AUTORE: 43
DATA :22/02/2010 - 15:06:20
----------------------------------------
[quote="62063":25cmxni6]Qualcuno sa spiegarmi in parole povere che cos'è un task in labview e che differenza c'è tra un canale e un task.
GRazie[/quote:25cmxni6]
Risposta data a spanne, cioè spannometrica.
Il canale è il mezzo che unisce 2 entità: il PC (o PXI o altro, insomma il Software) e la grandezza che si vuole misurare.
Il canale può anche essere costituito da una linea di comunicazione o da un BUS.
Attraverso il canale si accede alla risorsa, ma il canale è esso stesso una risorsa.
L'etichetta che lo identifica rappresenta l'insieme delle informazioni che specificano il modo attraverso cui si accede alla risorsa stessa.
Il task, come puoi immaginare, rappresenta uno specifica azione in corso di svolgimento.
L'etichetta che lo identifica si riferisce ad una operazione in corso appunto che utilizza risorse in modo esclusivo o condiviso.
Volendo fare dei paragoni se un file fosse la risorsa Harware che si vuole accedere, direi che:
il percorso (path) del file è il [channel]
il riferimento (reference) del file aperto rappresenta il [task]
bye
----------------------------------------
================================================================================
Come si può compattare un DB da codice labview?
================================================================================
AUTORE: 822
DATA :24/02/2010 - 15:34:30
----------------------------------------
Ciao a tutti,
all'avvio della mia applicazione vorrei compattare un database di access (al quale mi collego in ODBC), come posso fare da codice labview?
grazie
----------------------------------------
AUTORE: 482
DATA :24/02/2010 - 15:42:30
----------------------------------------
Cosa intendi per compattare? esguire la funzione di compattazione che c'e' in access o pulire lo spazio vuoto lasciato allocato?
----------------------------------------
AUTORE: 822
DATA :24/02/2010 - 15:52:51
----------------------------------------
intendevo la funzione di compattazione che c'è all'interno di access, ma visto che me lo hai chiesto è interessante sapere anche come liberare lo spazio allocato
grazie
----------------------------------------
AUTORE: 482
DATA :24/02/2010 - 16:04:25
----------------------------------------
Allora, per liberare lo spazio allocato bisogna lanciare il comando purge o qualcosa del genere stramite SQL.
Invece per lanciare il comando di compattazione, se si puo', lo devi fare tramite metodi e proprietà activex.
----------------------------------------
AUTORE: 822
DATA :24/02/2010 - 16:08:38
----------------------------------------
[quote:1wnvwlw0]lo devi fare tramite metodi e proprietà activex[/quote:1wnvwlw0]
è proprio quello che stò cercando di fare.. speravo che qualcun altro lo avesse già fatto è mi spiegasse come..
----------------------------------------
AUTORE: 482
DATA :25/02/2010 - 08:05:42
----------------------------------------
ecco c'e' il comando VACUUM in SQL supportato da alcuni database, ma in Access non credo.
----------------------------------------
================================================================================
Ordinare array 2d
================================================================================
AUTORE: 482
DATA :24/02/2010 - 15:45:22
----------------------------------------
Qualcuno di voi ha per caso in giro dle codice per ordinare un array 2d in base alla colonna scelta?
C'e' qualche modo veloce o devo fargli spulciare record per record?
----------------------------------------
AUTORE: 645
DATA :25/02/2010 - 08:28:29
----------------------------------------
Può servire?
http://zone.ni.com/devzone/cda/epd/p/id/2502
----------------------------------------
AUTORE: 482
DATA :25/02/2010 - 11:26:05
----------------------------------------
Mi dice che è fatto in una versione troppo vecchia e quindi con il 2009 non posso aprirlo
tu riesci a convertirmelo?
----------------------------------------
AUTORE: 645
DATA :25/02/2010 - 14:12:35
----------------------------------------
No... troppo vecchio anche per me...
Questo è molto semplice (forse troppo) ma magari con qualche modifica:
http://decibel.ni.com/content/docs/DOC-2122
Questo mi sembra più completo ma non ho scaricato tutti i pacchetti e perciò non ho potuto provarlo:
http://decibel.ni.com/content/docs/DOC-2332
----------------------------------------
AUTORE: 482
DATA :31/05/2010 - 08:37:00
----------------------------------------
Oggi avevo quest'esigenza su una multicolumn listbox e ho trovato questo:
http://zone.ni.com/devzone/cda/epd/p/id/712
Decisamente comodo
----------------------------------------
================================================================================
Capire programm. struttura dati complessa
================================================================================
AUTORE: 1033
DATA :24/02/2010 - 15:59:20
----------------------------------------
Ciao, l'obiettivo è quello "capire" programmaticamente una struttura dati complessa. Il programma è complesso e dovrebbe uasre degli algoritmi ricorsivi. Ma mi fermo all'inizio. Come faccio ad avere la reference di un cluster all'interno di un altro cluster? Ricordo di averlo già fatto in passato ma non trovo più il modo.
Grazie.
----------------------------------------
AUTORE: 1078
DATA :26/02/2010 - 07:54:54
----------------------------------------
[quote="Altomare":pi80awef]Come faccio ad avere la reference di un cluster all'interno di un altro cluster?[/quote:pi80awef]
Per creare un cluster di "Reference" devi andare nella Controls Palet --> Modern/Classic --> Refnum --> Control refnum. Inserito il controllo Tasto dx del mouse sul controllo --> Select VI Server Class --> Generic --> GObjects --> Controls --> Cluster --> Cluster. Adesso il tuo control Refnum punto ad un cluster ed è inseribile in un'altro cluster.
Non capisco però a cosa ti serve un riferimento ad un cluster all'interno di un'altro cluster in una struttura di analisi come quella che hai postato?
----------------------------------------
AUTORE: 1033
DATA :26/02/2010 - 10:16:20
----------------------------------------
Credo di non esseremi spiegato bene. Il mio obiettivo è quello di fare una cosa simile ad un parser per XML. In pratica, data una struttura dati complessa (Cluster di array....) vorrei tirar fuori una stringa capace di definirmi in modo univoco la struttura con tipi di dato e nome variabili.
Sintetizzo in una domande: nell'esempio allegato come faccio in modo programmatico a conoscere il nome delle variabili contenute all'interno del cluster? Il nome di anche quelle contenute nel "Cluster In"?
Spero di essere stato più chiaro
----------------------------------------
AUTORE: 1078
DATA :26/02/2010 - 10:31:11
----------------------------------------
Non sono sicuro di aver capito cosa vuoi fare. Vediamo se spiegandolo io ci intendiamo: tu vorresti caricare dinamicamente da un database le informazioni di entità composte da più campi di cui non conosci il tipo di dato a priori. Il cluster sarebbe la tua entità e i dati nel cluster sarebbero i campi dell'entità. Ho capito bene?
----------------------------------------
AUTORE: 1078
DATA :26/02/2010 - 10:43:08
----------------------------------------
[quote="Altomare":253e9joa]data una struttura dati complessa (Cluster di array....) vorrei tirar fuori una stringa capace di definirmi in modo univoco la struttura con tipi di dato e nome variabili[/quote:253e9joa]
Credo sia più opportuno parlare di [b:253e9joa]Array di cluster[/b:253e9joa] e non il contrario. Il nome della variabile lo ricavi dalla property Label.Text, mentre per il tipo di dato e l'ID del tipo di dato il tuo VI va benissimo. L'ID associato è univoco quindi puoi risalire in senza errori al tipo di dato. Il problema sta nel costruire dinamicamente e programmaticamente un array di cluster di cui non sai a priori la loro composizione. Dovresti creare un cluster che contenga un dato di ogni tipo possibile nel tuo database e poi visualizzare solo i dati contenuti nella tua struttura.
----------------------------------------
AUTORE: 43
DATA :26/02/2010 - 13:25:32
----------------------------------------
[quote="Altomare":n27bf700]... l'obiettivo è quello "capire" programmaticamente una struttura dati complessa. Il programma è complesso e dovrebbe uasre degli algoritmi ricorsivi. Ma mi fermo all'inizio. Come faccio ad avere la reference di un cluster all'interno di un altro cluster? Ricordo di averlo già fatto in passato ma non trovo più il modo...[/quote:n27bf700]
Spero Tu non stia guardando codice scritto da altri, senza che Tu sia in grado di comprendelo
E' semplicissimo.
Supponiamo di voler ottenere le label di tutti i controlli presenti nel FrontPanel di un VI
Aprire il VI ed ottenere il referece del FrontPanel [FrontPanel]
Dal REf. del FP ottenere l'array dei ref. dei controlli "Controls[]"
Scorrere con un'iterazione i ref. controlli sapendo che sono di classe 'Generic Control'
Da ognuno di essi ricavare "Label"->"Text" ma soprottutto "ClassName" anch'esso di tipo stringa.
collegate ad un apposito case selector proprio "Classname" per individuare i tipo complessi: "array", "cluster","tabcontrol", "page"
a questo punto "castate" il reference del controllo in un "To More Specific Class" imponendo come Target il tipo corretto (array, cluster,tabcontrol, page)
Processare aggiungendo in coda all'array dei controlli i nuovi ref. fino ad esaurire la lista...
da [array] ricavare "Array Element" --> "Reference"
da [cluster] ricavare "Controls[]"
da [tabcontrol] ricavare "Pages"
da [Page] ricavare "Controls On Page[]"
bye
----------------------------------------
AUTORE: 1033
DATA :26/02/2010 - 14:02:26
----------------------------------------
No, non sto guardando codice scritto da altri. Semplicemente ricordavo di averlo già fatto, ma qualcosa ora non tornava. L'errore, come si può vedere nell'esempio che ho allegato all'inizio, è che non mi ero accorto di aver preso come property del cluster la "AllObject" anziche "Controls". E quindi poi non avevo tutte le proprietà a seguire.
Grazie.
----------------------------------------
================================================================================
Come creare una waveform segnale di strumento RS232
================================================================================
AUTORE: 2435
DATA :24/02/2010 - 16:13:33
----------------------------------------
Ciao a tutti...
Vi dico il mio problema(facendo un esempio)...
Io ho uno strumento seriale in 232 che attraverso un driver in LV mi fornisce un valore ogni dt=200ms(ma questo tempo può variare ad esempio da 100ms a 250ms).
Da queste acquisizioni vorrei crearmi una waveform che poi potrebbe essermi utile per utilizzare dei VI per l'analisi già presenti in LV???
Come si può fare visto che nella struttura della waveform bisogna inserire il "dt" che è un valore inicante il tempo di campionamento..e che nel mio caso è variabile??
La soluzione può essere quella di fare un'interpolazione dei dati acquisiti??
----------------------------------------
AUTORE: 2435
DATA :24/02/2010 - 16:14:36
----------------------------------------
(mi ero dimenticato)
grazie
----------------------------------------
AUTORE: 482
DATA :25/02/2010 - 07:58:47
----------------------------------------
O campioni a tempi costanti e poi metti su grafico quello che hai trovato (indipendentemente che sia chart o graph) oppure se proprio vuoi mettere tutti i dati rispettando anche il tempo, a cui l'hai acquisiti, devi utilizzare un XY graph cioè un grafico fattoda due array in cui uno indica i valori in y e uno i valori in x.
la sfiga di questo tipo di grafico è che ogni volta gli devi ripassare tutti i valori a differenza di un chart in cui puoi accodare solo l'ultimo.
----------------------------------------
AUTORE: 2435
DATA :25/02/2010 - 08:22:30
----------------------------------------
Ciao grazie per la risposta...
Ti spiego,effettivamento non so se potrà mai essermi utile questa cosa ma era per curiosità...
alla fine ho fatto in questo modo:
1)l'acquisizione di un singolo dato avviene ogni 200ms(ma per vari motivo può variare di +-50ms)
2)ogni acquiszione vado a memorizzarla in un array e in un'altro array iene salvato il dt(circa 200ms)+il tempo precedente
quindi mi otterò due array fatti così:
Valore tempo(ms)
400,5 0
402,3 200
401,4 389
ecc
3) per inserirli in una struttura waveform devo stabilire un dt costante quindi eseguo un'interpolazione dei dati
specificando un'incremento dell'asse delle X che può essere di 1/10 o 1/100 dei 200ms
4)alla fine ottengo una curva interpolata con un dt costante e posso se voglio processala con i VI waveform contenuti in LV..
ripeto,non so se mi sarà mai utile
Per quanto riguarda i grafici XY faccio già come hai detto....praticamente vado a salvarmi le acquisizioni in una tabella o array dopodichè quando l'operatore preme il pulsante aggiorno i grafici
----------------------------------------
AUTORE: 645
DATA :25/02/2010 - 08:26:36
----------------------------------------
Potresti fare una specie di interpolazione mediando i dati letti (con tempi di campionamento diversi) su intervalli scelti da te e poi rappresentando questi ultimi dati nel grafico.
Potresti lavorare sulle singole posizioni dell'array iniziale con qualcosa del tipo:
"Se tra il campione precedente e il corrente c'è un dt superiore al dt scelto allora lascia i dati come sono, altrimenti media i dati"...
Così molto a spanne.
Potresti fare questa operazione ogni "tot" dati acquisiti e graficare pacchetti di dati: in questo modo, forse, rendi il VI un po' più snello e veloce (dico forse perchè in realtà avrai comunque un ciclo veloce che continua ad acquisire i dati)... Però facendo le elaborazioni ogni tanto e non in continuo carichi meno la CPU.
Prova a guardare anche http://zone.ni.com/devzone/cda/tut/p/id/3979#toc1 dove si parla del "Resample".
----------------------------------------
AUTORE: 2435
DATA :25/02/2010 - 08:56:00
----------------------------------------
Si,si potrebbe fare una verifica sul dt però penso che difficilmete su 100 acquisizioni rimanga sempre stabile..
Esatto..infatti l'idea è quella di acquisire solo in determinati momenti o su determinate richieste..non continuamente..
o comunque acquisire(magari mantenendo in memoria solamente gli ultimi N campioni) ma eseguire il processo di interpolazione solamente se richiesto.
adesso guardo il link
grazie
----------------------------------------
================================================================================
IP-camera
================================================================================
AUTORE: 238
DATA :24/02/2010 - 17:49:34
----------------------------------------
Qualcuno sa dirmi come si fa a visualizzare l´immagine di una IP-camera sul front-panel di un VI
L´immagine la vedo senza problemi utilizzando “Internet explorer†scegliendo come indirizzo di rete quella della camera (http\\â€indirizzo IPâ€)
----------------------------------------
AUTORE: 482
DATA :25/02/2010 - 07:54:49
----------------------------------------
hai il pacchetto vision?
Se non ce l'hai credo ch el'unica soluzione sia aggiungere al tuo pannello un oggetto di tipo browser.
----------------------------------------
AUTORE: 238
DATA :26/02/2010 - 11:21:14
----------------------------------------
Grazie ! con oggetto di tipo browser funziona perfettamente
----------------------------------------
AUTORE: 838
DATA :26/02/2010 - 13:56:56
----------------------------------------
devi inserire l'activex della camera nel tuo vi, e passargli tutti i parametri per la connessione come farebbe explorer
l'ho fatto con 4 tipi diversi e funziona, l'unica cosa che generalmente ogni ipcamera ha un activex diverso e devi vedere che ti propone quella che hai tu
----------------------------------------
================================================================================
Istogrammi per Labview
================================================================================
AUTORE: 482
DATA :25/02/2010 - 11:35:38
----------------------------------------
..ma ciao!
c'e' modo di creare degli istogrammi decenti con labview che non siano ungrafico classico in modalità istogramma o il grafico 3D a barre che è pesante e mi incricca labview ogni 3 per 2 ?
So che labview non è l'ideale per fare reportistica ma le funzionalità delgrafico 3D sarebbero fighe se non fosse cosi' pesante e magari fosse anche solo in 2D.
----------------------------------------
AUTORE: 1078
DATA :26/02/2010 - 07:42:04
----------------------------------------
Se io fossi in te mi creerei un'immagine ad-hoc che mi riproduce l'istogramma. Avendo il valore del'asse delle Y e quello dell'asse delle X potresti creare un rettangolo che abbia la base appoggiata all'asse X di larghezza (x+k)-(x-k) e con l'angolo inferiore sx con valore (x-k) [x= valore del'asse X; k= costante scelta da te]. Con le funzioni di disegno di immagini messe a disposizione da LV non è complicato disegnare grafici di questo tipo in modo automatico. Oltretutto l'immagine risulterebbe facilmente esportabile nei diversi formati immagine, funzioni sempre messe a disposizione da LV.
Spero l'idea ti piaccia. Buon lavoro.
----------------------------------------
AUTORE: 482
DATA :26/02/2010 - 08:20:35
----------------------------------------
Carina coem idea, pero' poi dovrei ridisegnare ogni volta gli assi e i valori associati ad essi...
...nel senso, se è uan cosa fattibile bene, senno' piuttosto mando i dati ad un template su excel o qualcosa di simile
----------------------------------------
AUTORE: 1078
DATA :26/02/2010 - 10:45:57
----------------------------------------
Bhe... In entrambe i casi devi lavorarci su un po!
A te la scelta!
----------------------------------------
AUTORE: 482
DATA :26/02/2010 - 11:21:55
----------------------------------------
eh già, ti ringrazio comunque dell'idea, ma credo che utilizzero' excel in modo da poter sfruttare gli esempi già presenti in labview e facilitarmi il lavoro
----------------------------------------
================================================================================
Interfacciare Labview con altro software
================================================================================
AUTORE: 2644
DATA :25/02/2010 - 18:28:38
----------------------------------------
Salve a tutti
mi chiedevo se labview può interfacciarsi con un altro siftware.
E' possibile avviare un'azione di un altro software da labview?
Grazie a tutti
----------------------------------------
AUTORE: 1078
DATA :26/02/2010 - 07:34:02
----------------------------------------
[quote="alduuu":6xdq8q05]E' possibile avviare un'azione di un altro software da labview?[/quote:6xdq8q05]
Ciao alduu,
Dipende da come è fatto l'altro software e cosa intendi per interfacciarsi. La connettività di labview verso altri software è veramente estesa, permette la gestione di oggetti activeX (OCX) o la gestione di classi e oggetti dotNET o addirittura la connessione a DLL di varia natura. Software come Excel e Word o l'intero pacchetto Office, ma anche CAD come Autocad possono essere comandati da labview utilizzando appunto la tecnica degli ActiveX server. Ora la mia domanda è il software che vorresti pilotare espone delle classi condivise? Se si puoi pilotarlo conoscendo la struttura delle sue classi e la struttura dei suoi dati anche attraverso labview.
Trovi parecchi articoli su come controllare software esterni attraverso la tecnologia ActiveX. Puoi cercarli sul sito NI inserendo nel campo cerca la parola "ActiveX server" o solo "ActiveX".
Spero di essere stato esaustivo, ti auguro una buona giornata e buon lavoro.
----------------------------------------
AUTORE: 43
DATA :26/02/2010 - 13:58:22
----------------------------------------
[quote="alduuu":37ab7w9v]Salve a tutti
mi chiedevo se labview può interfacciarsi con un altro siftware.
E' possibile avviare un'azione di un altro software da labview?
Grazie a tutti[/quote:37ab7w9v]
Spiegare il termine "avviare un'azione".
Questa discussione potrebbe essere tranquillamente spostata in "LabVIEW e Dintorni" visto la sua totale genericità
Activex, classi .NET, dll, DDE, DataSocket a parte, è possibile fare molto (non tutto) simulando interazioni di un operatore virtuale con un'interfaccia HMI di una applicazione di cui non si hanno i sorgenti, ma tutto deve avere un costo giustificabile.
Essere un po' + specifici quando si fanno domande è assai gradito
Cmq una domanda generica merita una bella risposta generica:
- E' possibile avviare un'azione di un altro software da labview?
- Sì, è possibile.
bye
----------------------------------------
================================================================================
Rilevare carattere di fine riga su stringa
================================================================================
AUTORE: 2435
DATA :26/02/2010 - 09:11:03
----------------------------------------
Ciao a tutti...so che sarà una banalità
io ho una stringa rilavata da letore codice abarre di questo tipo:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
123456789012
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
gli apici li ho messi per evidenziare che il lettore alla fine del codice aggiunge un carattere di nuova riga
Volevo sapere come posso analizzare questa stringa per togliere il Carattere di nuova riga
Grazie
----------------------------------------
AUTORE: 2435
DATA :26/02/2010 - 09:27:57
----------------------------------------
ho risolto...però non credo proprio sia il modo migliore anzi
----------------------------------------
AUTORE: 482
DATA :26/02/2010 - 10:40:34
----------------------------------------
puoi usare un match pattern e come ingresso a regular espression metti \
e poi prendi in uscita "before substring"
In questo modo avrai la stringa che precede il carattere di nuova riga
----------------------------------------
================================================================================
Forzare valori all'uscita da un VI
================================================================================
AUTORE: 2864
DATA :27/02/2010 - 17:32:39
----------------------------------------
Ciao a tutti, devo controllare un'uscita tramite un pulsante, e questo è banale.
Ho però la necessità di fare in modo che interrompendo l'esecuzione del programma l'uscita assuma un valore ben definito (cioè torni a zero).
Sono riuscito a fare in modo che il tasto stop resetti l'uscita, però una volta attivata la posso disattivare solo con lo stop e non con il pulsante di controllo, qualcuno ha qualche suggerimento?
Grazie.
----------------------------------------
AUTORE: 129
DATA :28/02/2010 - 22:41:25
----------------------------------------
Usa una variabile locale che imposti con una costante in uscita.
Se devi pilotare un dispositivo e non necessariamente un led a video, puoi usare il subvi che pilota l'hardware, all'interno del loop legandolo al bottone di controllo, e lo stesso blocco lo ripeti in uscita dal loop con una costante false.
----------------------------------------
AUTORE: 1078
DATA :01/03/2010 - 07:36:06
----------------------------------------
Prova a vedere se questo ti può andare bene!
Buon lavoro e buona giornata.
----------------------------------------
AUTORE: 2864
DATA :01/03/2010 - 07:43:11
----------------------------------------
@nicola: si, devo pilotare dei dispositivi, però non ho capito bene il tuo suggerimento, potresti spiegarti meglio per cortesia?
@Ricky: Ti ringrazio però non me lo apre, ho la versione 8.6.
----------------------------------------
AUTORE: 1078
DATA :01/03/2010 - 09:17:37
----------------------------------------
Eccoti la versione per LV 8.6
----------------------------------------
AUTORE: 2864
DATA :02/03/2010 - 15:01:18
----------------------------------------
Allora, grazie a tutti per le risposte, avrei ancora 2 domande. ^_^'
1-Se io volessi forzare il valore a prescindere dal modo in cui si esce dal VI (ad esempio chiudendo la finestra oppure fermandolo tramite il tasto Abort Execution dovrei per forza usare una event structure?
2-Non mi è molto chiaro nel vi di Ricky come è stato possibile duplicare la variabile output per inserirla nella flat sequence (si lo so è una domanda stupida ma io sono scarsissimo
).
----------------------------------------
AUTORE: 1078
DATA :03/03/2010 - 07:20:23
----------------------------------------
[quote="Pablo!":8s1u98ja]1-Se io volessi forzare il valore a prescindere dal modo in cui si esce dal VI (ad esempio chiudendo la finestra oppure fermandolo tramite il tasto Abort Execution dovrei per forza usare una event structure?[/quote:8s1u98ja]
Si, l'unico modo è quello di gestire un evento anche se non mi sembra esista l'evento [b:8s1u98ja]<Application-Abort> [/b:8s1u98ja], solitamente quando si distribuisce l'applicazione la tools bars con i bottoni [b:8s1u98ja]run[/b:8s1u98ja], [b:8s1u98ja]run continous[/b:8s1u98ja] e [b:8s1u98ja]abort[/b:8s1u98ja] non viene visualizzata all'utente. Si preferisce gestire oltre al [i:8s1u98ja]value-change[/i:8s1u98ja] del bottone stop anche l'evento [b:8s1u98ja]pannel close[/b:8s1u98ja] del vi, oppure per aver maggior controllo l'evento [b:8s1u98ja]pannel close?[/b:8s1u98ja]. Questi eventi vengono scatenati quando l'utente chiude il vi dalla X della finestra di windows, la differenza tra i due è che nel [b:8s1u98ja]pannel close?[/b:8s1u98ja] si può abortire l'operazione di chiusura impostando a true il nodo di uscita [b:8s1u98ja]cancel[/b:8s1u98ja] dell'event structure.
[quote="Pablo!":8s1u98ja]2-Non mi è molto chiaro nel vi di Ricky come è stato possibile duplicare la variabile output per inserirla nella flat sequence[/quote:8s1u98ja]
Per inserire una variabile locale di un controllo nel tuo block diagram: click con il tasto dx del mouse sul terminal (il tuo controllo nel block diagram) del tuo controllo --> create --> local variable. Ti viene creata una variabile locale che per default è in scrittura, per cambiarla e farla diventare in lettura: click con il tasto dx del mouse sulla variabile --> change to read.
[quote="Pablo!":8s1u98ja]Allora, grazie a tutti per le risposte[/quote:8s1u98ja]
Prego e buon lavoro.
----------------------------------------
AUTORE: 2864
DATA :04/03/2010 - 10:43:20
----------------------------------------
Ancora grazie, dovrò citarti nei ringraziamenti della tesi.
----------------------------------------
AUTORE: 1078
DATA :05/03/2010 - 07:37:18
----------------------------------------
[quote="Pablo!":3nbf2dv2]dovrò citarti nei ringraziamenti della tesi[/quote:3nbf2dv2]
Questo mi fa piacere. Sarebbe utile al forum se una volta finita e pubblicata la facessi leggere anche a noi, magari postandola come pdf o come articolo... Potremmo imparare qualcosa di nuovo!
[quote="Pablo!":3nbf2dv2]Ancora grazie[/quote:3nbf2dv2]
Prego, sempre a disposizione!
----------------------------------------
AUTORE: 2864
DATA :05/03/2010 - 16:27:57
----------------------------------------
[quote="Ricky":wf2oe1sg][quote="Pablo!":wf2oe1sg]dovrò citarti nei ringraziamenti della tesi[/quote:wf2oe1sg]
Questo mi fa piacere. Sarebbe utile al forum se una volta finita e pubblicata la facessi leggere anche a noi, magari postandola come pdf o come articolo... Potremmo imparare qualcosa di nuovo!
[/quote:wf2oe1sg]
Perchè no?
Almeno avrei fatto qualcosa di utile nella vita.
----------------------------------------
================================================================================
Labview Database Toolkit e app builder
================================================================================
AUTORE: 2514
DATA :02/03/2010 - 14:06:47
----------------------------------------
Ciao a tutti. Sto usando il Database Connectivity Toolset per accedere ad una mia base dati. Ho questo problema: dovendo distribuire l'applicazione che sto costruendo con LabView 8.5 ho la necessita' di usare il suo application builder.
Nella documentazione del toolkit esiste un capitoletto (Building applications, appunto) che spiega come fare per inserire nel build tutto cio' che serve a rendere stand-alone l'installazione su un PC che non abbia mai visto LabView.
Purtroppo le istruzioni sono pensate per il Tool->Build Application che usavo con il Labview 7.1 e non per l'Application Builder della versione 8.5. Voi avete idea (o documentazione o,addirittura, qualche template) su cosa necessiti al nuovo Application Builder per rendere autonoma e installabile su ogni PC la mia applicazione? Io mi interfaccio con un database Access usando il driver JET, mi consigliate strade alternative o credete possa essere un approccio "comodo" per l'installazione su macchine generiche della mia applicazione?
Grazie dell'aiuto!
----------------------------------------
AUTORE: 2592
DATA :02/03/2010 - 15:34:33
----------------------------------------
Ciao Goblin,
dai una occhiata a questa guida che è sicuramente più aggiornata:
http://www.ni.com/pdf/manuals/371525a.pdf
In sostanza se usi l' UDL lo devi includere nel progetto LabVIEW e quando fai il build lo aggiungi come file "Always Included" e lo inserisci direttamente nell'eseguibile. In alternativa puoi sempre aggiungerlo manualmente a posteriori.
Se invece usi il DSN devi crearlo manualmente sulla macchina target come descritto nel tutorial al capitolo 3.
Ciao
Andrea
----------------------------------------
AUTORE: 2514
DATA :03/03/2010 - 07:26:06
----------------------------------------
Grazie mille! Provo a fare come dici poi aggiorno il topic con i risultati. Grazie di nuovo!!!
----------------------------------------
AUTORE: 2514
DATA :10/06/2010 - 12:10:24
----------------------------------------
Ciao a tutti e un grazie ad Andrea, soprattutto, per le indicazioni che mi diede gentilmente qualche mese fa a proposito di un problema sull'application builder di una applicazione database-oriented con Labview.
A distanza di qualche mese "resuscito" il topic perche' quel problema, forzatamente accantonato per altre priorita', ritorna ... in tutto il suo splendore.
Riepilogo le puntate precedenti:
- Ho sviluppato un'applicazione (un centinaio di VI di varia natura) tutti facenti capo ad un VI Top level che si chiama (che fantasia) MASTER.VI
- Questa applicazione fa uso intensivo di database, per cui viene utilizzato il Database Toolkit
- Il database e' di tipo ACCESS e si chiama BATTMON.MDB, risiede nella directory C:\BATTMON assieme al file BATTMON.UDL.
- L'applicazione, sul PC in cui ho installato Labview 8.5 e il Toolkit Database funziona senza problemi di sorta.
Ho a disposizione il file database application template.bld fornito con il toolkit, che ho convertito con l'utility Convert di Labview 8.5. Ho cosi' creato un nuovo progetto.
Ho inserito come TOP LEVEL VI il mio MASTER.VI.
Ho inserito come file di supporto BATTMON.UDL, BATTMON.MDB, i 4 file mdac_typ.exe, mdac_eula.txt, Readme.htm e mdac_ReleaseManifest.htm
A questo punto eseguo il build della mia applicazione, che riesce. Il file generato, pero', eseguito su un computer diverso dal mio, non sembra riuscire ad accedere al database (che io ho copiato manualmente, in verita', in una directory adeguata in modo da ricreargli lo stesso ambiente di lavoro del mio PC).
Ne deduco che mancano dei pezzi, per cui procedo alla creazione di un installer che si occupi di recuperare tutto il necessario ed installarlo al posto giusto.
Ma quando provo a lanciare la creazione dell'installer, ecco che mi compare questo criptico messaggio:
CDK_Build_Invoke.vi.ProxyCaller >> CDK_Build_Invoke.vi >> CDK_Engine_Main.vi >> CDK_Engine_BuildDevPart.vi >> NI_MDF.lvlib:MDFBuildDevPart_SetOtherProperties.vi
Loading product deployment information
Adding files to installer
**************
*** Error: An internal tool or library returned an error. (Error code -21)
*** End Error Report
**************
**************
*** Error: Windows SDK function returned an error. (Error code -12)
*** End Error Report
**************
e dell'installer rimane solo una desolata speranza. Qualcuno sa aiutarmi? Grazie in anticipo.
----------------------------------------
================================================================================
Progetto esame
================================================================================
AUTORE: 2937
DATA :02/03/2010 - 14:10:00
----------------------------------------
Ciao a tutti,
sono un nuovo utente e girando per internet (e poi capirete il perchè) mi sono imbattuto su questo sito che faceva proprio al mio caso. Dopo aver dato una letta a quasi tutte le discussioni sul forum ho integrato le mie poche conoscenze di LabView, ma visto che molti di voi sono dei grandi esperti, avevo una richiesta da farvi. Non so se sia intanto la sezione giusta su cui postare il mio problema, in ogni caso ora ve lo espongo:
dovrei realizzare un progetto (logicamente utilizzando il software LabView) semplice e non troppo complesso, da portare a un esame all'università. Ora, non avendo molte idee ma sapendo che il software è in grado di realizzare praticamente tutto, stavo cercando di realizzare un impianto semaforico di un incrocio classico. Essendo come già detto alle primissime armi, e avendo fatto durante le lezioni solo pochi esempi sull'utilizzo del software, volevo chiedervi se qualcuno poteva darmi qualche dritta o comunque delle istruzioni da seguire per poter portare a termine questo progetto. Vi ringrazio anticipatamente per le vostre risposte,
ciao,
Luca
----------------------------------------
AUTORE: 2937
DATA :02/03/2010 - 14:15:37
----------------------------------------
ah, dimenticavo...non possiedo nessuna scheda di acquisizione
...ho solamente il software e basta..
ciao,
Luca
----------------------------------------
AUTORE: 2514
DATA :02/03/2010 - 14:28:13
----------------------------------------
Ciao, devi realizzare una simulazione di un impianto semaforico o un impianto semaforico vero e proprio che potrebbe essere installato ad un incrocio (quindi che pilota lampade, temporizzatori, rele e via discorrendo?)
----------------------------------------
AUTORE: 2937
DATA :02/03/2010 - 14:31:54
----------------------------------------
ciao,
no, dev'essere solo una simulazione di un impianto semaforico...intanto grazie per la risposta
----------------------------------------
AUTORE: 2514
DATA :02/03/2010 - 14:36:25
----------------------------------------
Figurati, ci mancherebbe. Allora non ti servono schede di acquisizione...praticamente vuoi realizzare un'applicazione che sincronizza una serie di controlli (dei led di Labview) tra di loro, simulando le luci di un semaforo, giusto? Suppongo tu voglia parametrizzare i tempi di accensione delle luci, gli attraversamenti pedonali e cosi' via. Parliamo di un incrocio a quattro braccia?
----------------------------------------
AUTORE: 2937
DATA :02/03/2010 - 16:02:02
----------------------------------------
hai colto nel segno...esattamente quello che pensavo io..il classico incrocio a 4 braccia con attraverso pedonale e logicamente il transito dei veicoli...già sapere che non servono schede di acquisizione mi piace...cmq si, hai proprio colto nel segno...ci si può riuscire vero??
----------------------------------------
AUTORE: 2514
DATA :03/03/2010 - 07:49:22
----------------------------------------
Si', ci puoi riuscire. Posso darti qualche consiglio su come lo farei io, soprattutto se devi usare anche un'animazione del traffico pedonale e veicolare.
Prima di tutto: ogni semaforo e' di fatto formato da tre lampade -> tre boolean rappresentati da led circolari sul Front Panel. Li affianchi e ci metti come sfondo un bel jpeg di semaforo in modo che risultino proprio come le lampade del semaforo.
Tieni poi conto che negli incroci a quattro braccia i semafori sono sincronizzati a coppie, per cui nel tuo software ti sara' sufficiente pilotare un semaforo e replicare il suo stato sul "gemello".
Per simulare il traffico pedonale e veicolare ti consiglio di crearti un bel gif animato con omini stilizzati o meglio persone reali che camminano, viste dall'alto, su una "striscia" lunga quanto il tuo attraversamento pedonale. Poi, usando un ring e "sfogliando" i fotogrammi avrai un effetti movimento molto realistico. Lo stesso puoi fare per il traffico veicolare. Basta che tieni un fotogramma in cui le macchine sono ferme al semaforo e una serie di fotogrammi in cui transitano e poi visualizzi in sequenza quelli che ti servono. E' piu' difficile da dire che da fare. Trovi molti esempi sui ring animati, anche nell'help di Labview.
Il sistema dei ring grafici lo puoi usare anche per i semafori, se vuoi. Se vuoi rendere tutto molto realistico potresti addirittura fotografare un semaforo reale ed usare le immagini giallo, verde e rosso acceso come stati del tuo ring, invece di usare i boolean. Se ti beccano mentre fotografi il semaforo atteggiati da giornalista e fai la classica domanda: "sto facendo un'inchiesta sui semafori truccati, lei cosa ne pensa?" (il Sindaco del tuo paese ti ringraziera' del panico che avrai scatenato tra i tuoi concittadini raddoppiandoti le tasse sulle immondizie
)In pratica il tuo software lavorera' sugli stati VERDE, VERDEGIALLO, ROSSO (e, al limite, GIALLOLAMPEGGIA) che sono quattro fotogrammi, invece di pilotare i led con dei TRUE/FALSE. Non cambia nulla.
Per le temporizzazioni puoi usare un ciclo while temporizzato, o un ciclo while e basta con il metronomo se vuoi fare un briciolo di fatica in piu' e puoi (anzi sarebbe meglio lo facessi) sfruttare il "parallelismo" dei cicli while sincronizzandoli. Trovi moltissimi esempi in questo forum che e' una miniera di idee (e di persone molto competenti e gentili che mi hanno aiutato parecchio ogniqualvolta ne ho avuto bisogno). Puoi parametrizzare la temporizzazione piazzando il classico controllo sul front panel (una slitta, un potenziometro oppure puoi costruirti tu un controllino fatto a forma di temporizzatore, c'e' solo da sbizzarrirsi).
Spero di averti dato qualche dritta utile. Alla prossima!
----------------------------------------
AUTORE: 482
DATA :03/03/2010 - 07:53:01
----------------------------------------
Se poi vuoi aggiungergli un tocco di classe, puoi anche accendere dei semafori verie propri fatti con dei led veri utilizzando la porta parallela del pc (se ne hai una a disposizione)
----------------------------------------
AUTORE: 2937
DATA :03/03/2010 - 08:59:14
----------------------------------------
bhè che dire...grazie mille per le mille idee che mi avete proposto...ora guardo con attenzione gli esempi sui ring animati e poi inizio a buttare giù qualcosa...vi ringrazio davvero tanto...nel corso del progetto probabilmente mi farò risentire per eventuali problemi o per eventuali altre idee da poter sviluppare sempre inerenti al progetto da fare (per esempio blocco del traffico al passaggio di un'ambulanza o vigili del fuoco)
...devo dire che puoi verament fare di tutto con questo software...e scommetto che non avendo scede di acquisizione non si sfruttano neanche a pieno le sue ptenzialità...grazie ancora...
ciao,
Luca
----------------------------------------
AUTORE: 2514
DATA :03/03/2010 - 09:11:15
----------------------------------------
Ottima idea quella dei led veri pilotati dalla parallela. Mi raccomando se decidi di fare questa superfigata stai attento agli assorbimenti (qualche mA per un led va bene, ma se cominciano ad essere 12 led per i semafori piu' altri sei per gli attraversamenti diventano un centinaio di mA almeno (ci sono led che mangiano parecchio in commercio, ad esempio quelli ad alta efficienza). E mi raccomando: non dimenticare la resistenza in serie ai led per limitare la corrente, se non usi led con la resistenza integrata. Sono ovvieta' ma se non hai un minimo di pratica con l'elettronica magari non ti viene in mente e "ciucci" un ampere dalla parallela
... A presto.
----------------------------------------
AUTORE: 2937
DATA :03/03/2010 - 17:15:38
----------------------------------------
si, l'idea dei led è davvero ottima...però il tempo ahimè scarseggia e l'esame è troppo vicino per riuscire a preparare in tempo tutto quanto...magari mi ci metto per puro diletto personale...
gtazie ancora,
ciao,
Luca
----------------------------------------
AUTORE: 2937
DATA :03/03/2010 - 20:50:25
----------------------------------------
scusa una cosa...non riesco mica a trovare esempi sui ring animati...finchè si tratta da comandare dei led con dei vero/falso ok...ma volevo provare a usare quello che dicevi te sui ring...oppure una cosa...c'è il modo per temporizzare l'accensione o meno dei led con i classici interuttori??
ciao,
Luca
----------------------------------------
AUTORE: 2514
DATA :09/03/2010 - 11:23:03
----------------------------------------
Ciao e scusa ma ritorno solo ora sul forum. Ti manderei un esempio di ring animato con una campanella che si muove, ma a causa della mia rospaggine (e nonostante abbia provato ad usare il BBCODE con il comando attachment) non riesco ad allegarti il VI. Chiedo quindi aiuto a qualche anima pia che mi insegni come allegare i VI (ho cercato sul forum, ho i permessi per allegare i file, ho letto il messaggio di ALE nella sezione supporto sugli allegati e anche le FAQ ma nisba). In alternativa se vuoi mandami il tuo indirizzo email in MP e ti mando l'allegato sulla tua casella di posta personale. A risentirci!
----------------------------------------
================================================================================
Problema con waveform array
================================================================================
AUTORE: 2864
DATA :02/03/2010 - 17:01:37
----------------------------------------
Devo prelevare un canale da un array 1D waveforms per poi eliminare gli spike, l'ho estratto con l'index array ma a quanto pare è un formato che non va bene quando poi vado ad usare la select palette.
Stavo pensando di usare un for, ma come faccio ad estrarre solo il canale che mi interessa?
Grazie sin da ora per le eventuali risposte.
----------------------------------------
AUTORE: 2864
DATA :02/03/2010 - 17:06:14
----------------------------------------
Mi sono scordato di mettere uno screenshot di quello che ho fatto, ecchilo.
----------------------------------------
AUTORE: 1078
DATA :03/03/2010 - 07:43:18
----------------------------------------
Io farei così.....
----------------------------------------
AUTORE: 2864
DATA :03/03/2010 - 10:15:27
----------------------------------------
Grazie per la risposta.
Io però devo sostituire gli spike con il valore medio, il VI che mi hai dato tu non mi è chiaro se lo faccia o meno.
In ogni caso ho provato a modificare il mio però ho qualche dubbio sul grafico
----------------------------------------
AUTORE: 1078
DATA :03/03/2010 - 12:11:34
----------------------------------------
Attento, la funzine MEAN PtByPt costruisce un buffer di dati di cui fa la media, se gli passi una waveform ti toppa la media in base a cui scremi successivamente i valori. Usando le funzioni di limite invece, scremi i valori dopo aver creato la waveform. Il mio Vi taglia tutti i valori che superano il limite impostato. Puoi ripetere l'operazione impostando un limite inferiore in modo da fare stare i tuoi valori in un range e successivamente farne la media, ma meglio usare la funzione MEAN by Array.
----------------------------------------
AUTORE: 2864
DATA :03/03/2010 - 14:23:47
----------------------------------------
Vediamo se ho capito, secondo te la funzione mean ptbypt mi sfasa la media perchè con degli spike troppo frequenti ovviamente questa risulterebbe sfasata, quindi è meglio prima eliminare gli spike e [b:23188119]successivamente[/b:23188119] sostituire ai valori nan il valore medio, giusto?
----------------------------------------
AUTORE: 1078
DATA :03/03/2010 - 15:51:30
----------------------------------------
si... esattamente.
----------------------------------------
AUTORE: 1078
DATA :03/03/2010 - 15:53:14
----------------------------------------
[quote="Pablo!":1hkeph0z]quindi è meglio prima eliminare gli spike e successivamente sostituire ai valori nan il valore medio[/quote:1hkeph0z]
Ma non è meglio eliminare e basta gli spike senza sostituirli con niente?
----------------------------------------
AUTORE: 1078
DATA :03/03/2010 - 15:59:16
----------------------------------------
[quote="Pablo!":1fyakyb6]secondo te la funzione mean ptbypt mi sfasa la media perchè con degli spike troppo frequenti ovviamente questa risulterebbe sfasata[/quote:1fyakyb6]
In realtà è che usi la funzione MEAN PtbyPt in modo sbagliato. La tua waveform fornisce un'array di dati alla funzione che salva l'ultimo valore in un buffer interno di cui verrà fatta la media con l'ultimo valore del pacchetto successivo.... quindi la tua media sarà sfalsata!
Alla funzione MEAN ptbypt devo fornire uno scalare, se vuoi usare quella funzione devi cambiare il tuo modo di acquisire, sostituendolo con l'acquisizione singlepoint.
Spero di essere stato chiaro.
----------------------------------------
AUTORE: 2864
DATA :03/03/2010 - 16:18:42
----------------------------------------
In effetti ho dato informazioni incomplete, cercherò di essere più esaustivo.
Non posso limitarmi ad eliminare gli spike perchè poi il segnale ripulito mi serve come ingresso ad un controllore (sto cercando di sviluppare un PID digitale), quindi non posso eliminare campioni ma al limite sostituire quelli che si discostano eccessivamente con il valore medio "istantaneo".
Riguardo al tuo secondo messaggio non capisco una cosa: per come ho impostato l'acquisizione io ho un campione per ogni canale ogni tot secondi, riguardo alla funzione mean mi era sembrato che tenesse in un buffer gli ultimi tot campioni in ingresso (di default sono 100) e facesse la media su quelli.
In ogni caso se mi dici che non è così cerco di modificare il vi che mi hai dato tu, alla fin fine quel che mi interessa è avere in ingresso al controllore un certo tot di dati attendibili, il come ora come ora è relativo. ^_^'
----------------------------------------
AUTORE: 1078
DATA :03/03/2010 - 20:29:36
----------------------------------------
[quote="Pablo!":20rcizdo]riguardo alla funzione mean mi era sembrato che tenesse in un buffer gli ultimi tot campioni in ingresso (di default sono 100) e facesse la media su quelli.[/quote:20rcizdo]
ed è proprio così, questo è il funzionamento corretto di quella funzione.
[quote="Pablo!":20rcizdo]per come ho impostato l'acquisizione io ho un campione per ogni canale ogni tot secondi[/quote:20rcizdo]
Nell'esempio che hai postato leggi i valori e li restituisci sotto forma di waveform. Quel tipo di lettura non restituisce punto punto il valore istantaneo letto ma costruisce un'array di punti, secondo un buffer preimpostato (non ricordo la sua dimensione ma se guardi dovrebbe essere indicato nella documentazione di funzionamento della funzione e se non ricordo male è anche impostabile). Per definizione una waveform non ha un unico punto. Se hai impostato il buffer su 1 non ha molto senso....
----------------------------------------
AUTORE: 2864
DATA :03/03/2010 - 21:06:38
----------------------------------------
[quote="Ricky":qb5edme7]
Nell'esempio che hai postato leggi i valori e li restituisci sotto forma di waveform. Quel tipo di lettura non restituisce punto punto il valore istantaneo letto ma costruisce un'array di punti, secondo un buffer preimpostato (non ricordo la sua dimensione ma se guardi dovrebbe essere indicato nella documentazione di funzionamento della funzione e se non ricordo male è anche impostabile). Per definizione una waveform non ha un unico punto. Se hai impostato il buffer su 1 non ha molto senso....[/quote:qb5edme7]
Si è impostabile, io infatti l'ho impostata sul singolo campione. In ogni caso se estraessi l'array dalla waveform potrei fare le operazioni e poi ricostruire l wafeform per graficarla, giusto?
----------------------------------------
AUTORE: 1078
DATA :04/03/2010 - 07:06:55
----------------------------------------
[quote="Pablo!":v51r5jz1]Si è impostabile, io infatti l'ho impostata sul singolo campione. In ogni caso se estraessi l'array dalla waveform potrei fare le operazioni e poi ricostruire l wafeform per graficarla, giusto?[/quote:v51r5jz1]
Certo che è giusto, ed è esattamente quello che ho fatto io nel mio esempio....!!
----------------------------------------
AUTORE: 2864
DATA :04/03/2010 - 10:04:52
----------------------------------------
[quote="Ricky":yui7s08o][quote="Pablo!":yui7s08o]Si è impostabile, io infatti l'ho impostata sul singolo campione. In ogni caso se estraessi l'array dalla waveform potrei fare le operazioni e poi ricostruire l wafeform per graficarla, giusto?[/quote:yui7s08o]
Certo che è giusto, ed è esattamente quello che ho fatto io nel mio esempio....!![/quote:yui7s08o]
Mi era sembrato che nel tuo esempio tu eliminassi gli spike senza sostituirli con il valore medio, poi magari non ho capito bene il tuo vi.
----------------------------------------
AUTORE: 1078
DATA :04/03/2010 - 10:36:38
----------------------------------------
si giusto, io elimino gli spike senza sostituirli con i valori medi. Quello che intendevo io è che operavo sull'array dati della waveform. Comunque è banale trovare la media e sostiuirla al posto dei valori NaN che vengono inseriti dalla funzione limit.
----------------------------------------
AUTORE: 2864
DATA :04/03/2010 - 10:41:19
----------------------------------------
[quote="Ricky":ffy199tc]si giusto, io elimino gli spike senza sostituirli con i valori medi. Quello che intendevo io è che operavo sull'array dati della waveform. Comunque è banale trovare la media e sostiuirla al posto dei valori NaN che vengono inseriti dalla funzione limit.[/quote:ffy199tc]
Ok, grazie mille per la disponibilità.
----------------------------------------
AUTORE: 2864
DATA :05/03/2010 - 17:51:57
----------------------------------------
Un'altra domanda, se io volessi fare questa cosa per n canali come dovrei fare?
Mi incasino brutalmente con l'indicizzazione delle waveform in labview.
----------------------------------------
AUTORE: 1078
DATA :08/03/2010 - 07:42:39
----------------------------------------
Ciao, io farei così.
----------------------------------------
AUTORE: 2864
DATA :09/03/2010 - 15:04:54
----------------------------------------
[quote="Ricky":1s5sl32u]Ciao, io farei così.[/quote:1s5sl32u]
Ho LV 8.6
----------------------------------------
AUTORE: 1078
DATA :10/03/2010 - 10:42:33
----------------------------------------
ooppss... scusa!
----------------------------------------
AUTORE: 2864
DATA :10/03/2010 - 19:04:04
----------------------------------------
Grazie mille Ricky.
Vediamo un po' se ho capito il funzionamento del vi:
Nel primo ciclo for, quando il Not a Number restituisce T (cioè ha trovato un valore non valido) manda al secondo ciclo direttamente la posizione del valore non valido, cosicchè si possa sostituire con il valor medio nel secondo ciclo.
Quando invece in ingresso c'è un numero, il Not a Number restituisce F , viene costruito un array con l'indice dei valori validi valori validi.
Non capisco 2 cose: perchè inizializzare il primo ciclo for ed il bisogno di creare un array con gli indici dei valori validi.
Quando ho un attimo di tempo me lo studio meglio.
Per ora grazie ancora
----------------------------------------
================================================================================
event structure
================================================================================
AUTORE: 2821
DATA :03/03/2010 - 08:41:51
----------------------------------------
ciao a tutti!
volevo chiedervi se ci sono inconvenienti ad usare due o più "event structure" nello stesso VI (naturalmente in due diversi cicli while).
thanx
----------------------------------------
AUTORE: 1078
DATA :03/03/2010 - 09:30:57
----------------------------------------
Io lo sconsiglio altamente (mi sembra lo sconsigli anche la NI ma non ne sono sicuro), inserendo due event structure nello stesso VI labview cercherebbe di gestirle entrambe facendole diventare antagoniste e questo potrebbe causare problemi di gestione in esecuzione. Oltretutto non ne vedo l'esigenza, le event-structure servono a gestire un unico front-panel quindi puoi inserire il codice di gestione di tutti gli eventi legati a quel front pannel nella stessa eventstructure.
----------------------------------------
AUTORE: 838
DATA :03/03/2010 - 16:34:24
----------------------------------------
sconsiglio pure io, l'ho provato tempo fa e a volte mi impallava il vi in attesa di non so che
butta tutto dentro ad un unico event, magari in un suo while separato dedicato, quello lo puoi fare
----------------------------------------
AUTORE: 645
DATA :04/03/2010 - 16:07:32
----------------------------------------
Concordo... Meglio una Event Structure grossa che due piccole nello stesso VI...
Non so bene come LabView possa gestirle.
----------------------------------------
================================================================================
Regolatore digitale
================================================================================
AUTORE: 2864
DATA :05/03/2010 - 16:33:13
----------------------------------------
Devo progettare un regolatore discreto, per essere precisi è un regolatore PID con un predittore di Smith.
Il mio dubbio è questo: posso discretizzare il regolatore usando il vi cd convert continuous to discrete, per non riesco a capire come interfacciarla al banco di prova che devo controllare, è possibile o devo cercare un'altra strada?
----------------------------------------
================================================================================
Problema con FIFO e QUEUE
================================================================================
AUTORE: 2949
DATA :05/03/2010 - 18:06:17
----------------------------------------
Buonasera,
sto sviluppando un progetto in LV che prevede l'utilizzo di un EVS per l'acquisizione real time di immagini.
Il mio problema sta nelle prestazioni della trasmission (via TCP), se utilizzo un semplice VI che trasforma le immagini in stringhe e le invia sul canale TCP e le scompatto e salvo in locale il tutto funziona in maniera molto rapida (tutta l'operazione è intorno ai 1,2 secondi). Nel momento in cui utilizzo 2 timed loop e abilito l'utilizzo delle queues le prestazioni calano notevolmente, sto sui 2 secondi per completare tutta l'operazione. Mi sembra molto strana come cosa, allego il vi se potete darmi qualche consiglio!
http://img28.imageshack.us/img28/4091/duecicli.png
----------------------------------------
AUTORE: 927
DATA :11/03/2010 - 09:06:35
----------------------------------------
Non posso vedere l'immagine, ma probabilmente non ti servono i timed loop. I timed loop aspettano (qui inutilmente) istanti di tempo precisi, mentre da te dovrebbero bastare i timeout delle attese a temporizzare i cicli.
----------------------------------------
================================================================================
Usare la scheda audio del pc per acquisire suoni ambientali
================================================================================
AUTORE: 2950
DATA :05/03/2010 - 20:32:47
----------------------------------------
Raga vi chiedo una mano perkè devo realizzare questo programma vediamo ke siamo in grado di fare insieme perkè da solo nn riesco... dovrei realizzare un VI che acquisisca ad intervalli periodici di tempo(impostabili da interfaccia grafica) i suoni ambientali attraverso il microfono della scheda audio e generi automaticamente un report contenente i valori di picco di ampiezza del rumore,banda in ciascun evento di misura. Il VI deve mettere in evidenza sull'interfaccia il fatto che i valori di picco abbiano superato una soglia fissata da interfaccia grafica per almeno 5 volte consegutive.
ora sostanzialmente riesco ad acquisire da labview il segnale audio dal pc,sò come generare i report ma nn riesco a capire come beccare i valori di picco e la banda del rumore del segnale acquisito....se riesco a a fare questo riesco anche a realizzare l'ultima parte da solo...qualcuno ke vuole cimentarsi?
----------------------------------------
AUTORE: 645
DATA :25/03/2010 - 08:33:02
----------------------------------------
Credo proprio che ci sia da dare un'occhiata alla FFT e relative trasformazioni; una volta trasformato il segnale nel dominio delle frequenze puoi rilevare le componenti e i loro valori.
Probabilmente sarà utile filtrare il segnale o applicare qualcosa tipo "finestra". Fai un po' di prove, magari visualizzando tutto su un grafico.
Poi, a seconda del livello di precisione che vuoi raggiungere (immagino che acquisendo i segnali d'ambiente con una scheda audio... e credo relativo micorfono integrato nel pc, quindi una sola posizione senza particolare condizionamento... ti possa bastare un basso livello di precisione sufficiente per un'indagine qualitativa) decidi quali blocchetti applicare.
Guarda nella paletta "Signal processing".
----------------------------------------
================================================================================
Inserimento in cluster..
================================================================================
AUTORE: 2435
DATA :08/03/2010 - 13:12:47
----------------------------------------
Ciao a tutti,
vi spiego il mio problema:
ho un'array di "I16" e voglio convertirli in array di bolean(da 8bit ciascuno) e inserirli in un cluster di array di bolean..
Il punto è che voglio rendere la struttura dinamica.
Per adesso faccio come nell'esempio..sapete darmi qualche consiglio su come procedere???
Nota:l'unica cosa di fissa è la definizione del cluster.
Grazie
----------------------------------------
AUTORE: 838
DATA :08/03/2010 - 15:06:17
----------------------------------------
Ma non ti conviene fare un array di cluster?
[img:3ncd99a9]http://www.saisrl.com/Immagine.JPG[/img:3ncd99a9]
----------------------------------------
AUTORE: 43
DATA :08/03/2010 - 15:11:36
----------------------------------------
[quote="nic81_2007":23l77jzx]Ciao a tutti,
vi spiego il mio problema:
ho un'array di "I16" e voglio convertirli in array di bolean(da 8bit ciascuno) e inserirli in un cluster di array di bolean..
Il punto è che voglio rendere la struttura dinamica.
Per adesso faccio come nell'esempio..sapete darmi qualche consiglio su come procedere???
Nota:l'unica cosa di fissa è la definizione del cluster.
Grazie[/quote:23l77jzx]
Ciao nic,
Ti propongo questa soluzione
[attachment=0:23l77jzx]I16_2_ClusterBoolMatrix.vi[/attachment:23l77jzx]
Anche se x la conversione I16 -> bool array s'ha da fare solo se strettamente necessario.
Nota che come esplicitato nel FP del VI stesso:
- la visualizzazione binaria del numero risulta speculare rispetto alla matrice di booleani.
Cioè lsbit (bit 0) nella rappresentazione numerica booleana è il + a dx mentre nella matrice è il + a sx come il bit 8
- la word splittata in byte è big-endian per cui il MSByte della word ha indice di riga della matrice + basso del byte - significativo.
bye
----------------------------------------
AUTORE: 2435
DATA :08/03/2010 - 16:14:49
----------------------------------------
Ciao grazie per i suggerimenti,
infatti tutte e due le idee mi andrebbero bene solo che dovrei modificare del codice e mi richiederebbe del tempo..
partendo dai vostri spunti sono riuscito a riportarmi all'idea di base cioè aggiornare i valori di un cluster predefinito di partenza.
metto in allegato l'esempio.
Grazie
----------------------------------------
================================================================================
Evento cluster non intercettato
================================================================================
AUTORE: 2435
DATA :08/03/2010 - 17:27:04
----------------------------------------
Ciao a tutti..
sto gestendo un certo numero di informazioni utilizzando un cluster...
pensavo di intercettare il value change del cluster ma non ci riesco...
(mi aspetterei che modificando il valore della stringa l'evento venisse intercettato)
sapete dirmi cosa sbaglio???
grazie mille
----------------------------------------
AUTORE: 1078
DATA :09/03/2010 - 07:36:17
----------------------------------------
Ciao nic81_2007,
[quote="nic81_2007":2v394h74]pensavo di intercettare il value change del cluster ma non ci riesco...[/quote:2v394h74]
Ma non è vero che non intercetti l'evento, nel tuo codice non lo scateni in modo corretto. Assegnando il valore direttamente al tuo controllo non scateni l'evento "Value change". Per scatenare questo evento da codice devi utilizzare il property node "Value segnalling". Sostituendo al terminal del controllo quel property node il tuo codice scatena l'evento cercato ogni 100ms anche se il controllo stringa non è stato cambiato dall'utente. Per ottenere maggior controllo sulle modifiche effettuate dall'utente, devi controllare anche l'evento "value change" del controllo stringa esterno al cluster.
Guarda come ho modificato il tuo esempio, penso ti possa aiutare.
----------------------------------------
AUTORE: 43
DATA :09/03/2010 - 09:02:50
----------------------------------------
[quote="nic81_2007":hg70ar7e]Ciao a tutti..
sto gestendo un certo numero di informazioni utilizzando un cluster...
pensavo di intercettare il value change del cluster ma non ci riesco...
(mi aspetterei che modificando il valore della stringa l'evento venisse intercettato)
sapete dirmi cosa sbaglio???
grazie mille[/quote:hg70ar7e]
Sbagli x il fatto che l'evento "Value change" è valido solo per controlli (abilitati e visibili e non per gli indicatori) che vengono modificati dall'operatore interattivamente, da HMI e non da programma.
"Event case" gestisce quasi esclusivamente gli eventi di interazione uomo/macchina.
Nel Tuo esempio, la temporizzazione del del loop degli eventi è pure sbagliata ( se premi il tasto di stop non si esce dal programma).
Piuttosto di mettere -1 per il event case di timeout, potevi collegarci il "100" e tralasciare di usare "Wait Until Next ms Multiple" oppure per dare un senso alla gestione eventi, avresti potuto tralasciare completamente la temporizzazione, togliere l'evento timeout dall'event case e aggiungere l'evento value change del tasto stop.
La gestione eventi serve ad evitare di fare "polling" sulla pressione dei tasti da parte dell'operatore.
Tornando all'event case eccoti un esempio in cui l'evento è generato programmaticamente ogni circa 5 sec. riguardo la copia del valore della stringa ed ogni secondo per il conteggio esecuzioni del 2ndo loop
bye
----------------------------------------
AUTORE: 43
DATA :09/03/2010 - 09:20:40
----------------------------------------
Nel caso tu voglia fare cose ad ogni aggiornamento del contenuto di un certo indicatore, meglio creare un subVI che può essere richiamato in un qualunque punto del codice.
il subvi aggiornerà il controllo avendone memorizzato staticamente (in uno shift register) il ref. del controllo stesso che può risiedere in un VI che resta sempre caricato in memoria.
----------------------------------------
AUTORE: 2435
DATA :09/03/2010 - 13:29:32
----------------------------------------
Ciao,grazie per i consigli
dai vostri esempi ho preso spunto per adattare il mio esempio...
in questo modo intercetto "il value change"del cluster(come era nel mio intento).
ho sistemato anche il timeout ed effettivamente ho visto che il wait until risulta inutile in questo caso.
cosa ne dite??
grazie per l'aiuto
----------------------------------------
AUTORE: 43
DATA :09/03/2010 - 14:02:06
----------------------------------------
[quote="nic81_2007":2fmhibgt]Ciao,grazie per i consigli
dai vostri esempi ho preso spunto per adattare il mio esempio...
in questo modo intercetto "il value change"del cluster(come era nel mio intento).
ho sistemato anche il timeout ed effettivamente ho visto che il wait until risulta inutile in questo caso.
cosa ne dite??
grazie per l'aiuto[/quote:2fmhibgt]
ciao.
beh! il loop dell'attesa eventi resta cmq "stonato" perchè l'evento di pressione del tasto di uscita viene intercettato in "polling" proprio nel loop di gestione eventi di interfaccia HMI.
E' una soluzione mezzo e mezzo di chi non apprezza veramente la gestione ad eventi.
Inoltre dato che c'è un evento processato ogni 50 msec. potresti mettere la lettura del booleano di uscita e l'aggiornamento dell'orologio proprio dentro l'event case "timeout". E' un 'alternativa.
Nel secondo loop ti consiglio di clickare col tasto dx del mouse su il confronto fra cluster "diverso" [not Equal?] scegliere "Comparison Mode" -> "Compare Aggregates" x semplificare il macchinoso confronto.
bye
----------------------------------------
AUTORE: 2435
DATA :09/03/2010 - 14:32:19
----------------------------------------
ok,
quello del timer era solo una verifica per vedere effettivamente il tempo di ciclo(dovevo cancellarlo)
Ho capito cosa intendi per lo stop..e anche il "Compare Aggregates"..
grazie e Ciao
----------------------------------------
================================================================================
Estrazione Dati da una matrice ottenuta da un file csv
================================================================================
AUTORE: 2955
DATA :09/03/2010 - 14:45:25
----------------------------------------
Buon pomeriggio,
Sono un neo utlizzatore di labview 8.2 vorrei sapere come generare dei cilci for per estrarre dei dati da una matrice ottenuta tramite read spreadsheet da un file csv. I dati che andro ad estrarre mi serviranno per generare dei grafici.
Vi ringrazio ancipatamente per le risposte;
----------------------------------------
AUTORE: 2592
DATA :09/03/2010 - 16:19:19
----------------------------------------
Ciao Davide, puoi semplicemente utilizzare due cicli for annidati. Con il primo ciclo estrai una singola riga, e con il secondo estrai ogni elemento di tale riga.
Ti allego una immagine per capire meglio.
Ciao,
Andrea
----------------------------------------
AUTORE: 2592
DATA :09/03/2010 - 16:22:16
----------------------------------------
Ops, ecco l'allegato...
[img:22g0aqgg]http://www.ilvg.it/forum/download/file.php?mode=view&id=2405&sid=4b4651eeba59724c70293823787bd95f[/img:22g0aqgg]
----------------------------------------
AUTORE: 2955
DATA :09/03/2010 - 17:29:04
----------------------------------------
Ti ringrazio per la risposta e mi scuso per il disturbo, ma la soluzione proposta non risolve il mio problema dato il fatto che io vorrei estrarre i dati avviene in excel andando a confrontare le colonne e non le righe;
Ti ringrazio anticipatamente della risposta;
P.S. Vorrei anche sapere come poter alegare dei file sul forum in modo tale da postare la mia vi per renderla disponibile a chi sappiarisovere tale problema
----------------------------------------
AUTORE: 2955
DATA :10/03/2010 - 14:38:02
----------------------------------------
[img]F:\Tirocinio_jonica_Impianti\Prova_Labview\Prova5[/img]
----------------------------------------
AUTORE: 482
DATA :10/03/2010 - 15:22:07
----------------------------------------
Sotto alla finestra dove scrivi i messaggi, c'e' una scritta "Upload attachment". Cliccaci sopra.
Poi fai sfoglia, selezioni il file e dopo aver selezionato il file devi clikkare su "Add the file".
Quando avrà finito di uploadare il file,allor apuoi madare il messaggio premendo il solito "Submit".
Se vuoi inserire un immagien con i tag [img], devi inserire un indirizzo internet, non un percorso locale del tuo computer che ovviamente non è visibile a tutti.
----------------------------------------
AUTORE: 2955
DATA :10/03/2010 - 16:06:26
----------------------------------------
Grazie per il chiarimento su come allegare i file, ora allego la ma mia vi in modo tale che chi può aiutarmi possa vedere di cosa si tratta. Ricordo che il mio problema è legato all'estrazione di dati da una matrice molto grande, mi sarebbe utili se qualcuno sapesse come estrarli in modo tale da poterli diagrammare come avviene in excel selezionando le sole colonne o se è possibile inserire i soli campi da utilizzare in un array da utilizzare in seguito. Vi chiedo un aiuto dato il fatto che sono nuovo dell'utilizzo di labview 8.2 quindi molte potenzialtà di tale programma mi sono oscure.
Ringrazio anticipatamente per l'aiuto fornito;
----------------------------------------
AUTORE: 482
DATA :11/03/2010 - 09:38:46
----------------------------------------
Calma...la soluzione pe rocme l'ho capita io è molto piu' semplice del previsto.
In uscita dalla lettura dello spreadsheet file, tu hai già una matrice.
L'esempio che tu hai fatto la divide elemento per elemento e poi la rimette insieme.
Se tu vuoi estrarre uan riga o una colonna d auna matrice invece, devi semplicemente usare il blocchetto "Index Array" al quale dai in ingresso la tua matrice e l'indice della riga o della colonna che vuoi prelevare.
Questo blocchetto è estensibile pe rpoter prelevare piu' colonne o righe nello stesso momento.
Poi gli array monodimensionali che ottieni in uscita li manipoli come vuoi per poi diagrammarli.
----------------------------------------
AUTORE: 2955
DATA :11/03/2010 - 11:13:22
----------------------------------------
Grazie per la celere risposta se posso ancora disturbarti potresti farmi vedere un esempi con una vi, se non ti crea problemi, ti chiedo questo dato i lfatto che sono nuovo dell'utilizzo di questo programma e per motivi di lavoro devo realizzare questo programmino in poco tempo;
Ti ringrazio anticipatamente per la tua risposta;
----------------------------------------
AUTORE: 482
DATA :11/03/2010 - 14:40:41
----------------------------------------
Ecco qui, salva l'immagine sul tuo pc e poi trascinala in un block diagram.[attachment=0:2lxf7js2]snippet.png[/attachment:2lxf7js2]
----------------------------------------
AUTORE: 2955
DATA :11/03/2010 - 14:43:13
----------------------------------------
Grazie mille ottimo forum il migliore in circolazione ;
----------------------------------------
AUTORE: 2955
DATA :13/03/2010 - 10:56:28
----------------------------------------
Buongiorno,
Vi devo chiedere un ulteriore aiuto mentre estraevo le righe dalla matrice tramite index arry ho avuto un problema nel momento in cui vado ad estrarre i singoli elementi tramite Scan from string mi da i seguenti errori :
1-One or more required inputs to this function are not wired or are wired incorrectly. Show the Context Help window to see what the connections to this function should be.
2-You have connected an array data type to its element data type. This type conflict may be resolved by indexing the array to access individual elements of the array. Check for a tunnel on a loop that has indexing incorrectly enabled.
The type of the source is 1-D (sub)array of string.
The type of the sink is 1-D array of string.
Un altro problema è legato al fatto che non mi permette di diagrammare tali stringhe su dei waveform ma suppongo che il problema sia lrgato a quello precedentemete esplicitato;
Vi ringrazio anticipatamente per la risposta;
----------------------------------------
================================================================================
[LV8.5]Come inibire il tasto start di windows? 2° puntata
================================================================================
AUTORE: 822
DATA :10/03/2010 - 12:04:10
----------------------------------------
Rieccomi alle prese con la disabilitazione di alcuni tasti di tastiera..
ho trovato in rete un paio di vi (che allego) che fanno al caso mio, l'unico problema è che l'evento Vkey non intercetta la pressione del tasto "Start" di windows. Stò provando a generarmi l'evento per poi inibirlo, ma senza buoni risultati (è la prima volta che utilizzo event structure e eventi in generale). In rete ho trovato un programma molto interessante che modifica il registro di windows assegnando ai tasti le funzioni che voglio io (anche la disattivazione) che allego (magari potrà essere utile a tanti..), ma io vorrei slegarmi da sw esterni (da installare e configurare ogni volta) e fare tutto all'interno della mia applicazione. Quello che io voglio ottenere è impedire all'operatore di andare su windows (desktop o cartelle) mentre è in esecuzione la mia applicazione. Che cosa mi sfugge?
----------------------------------------
AUTORE: 927
DATA :11/03/2010 - 09:33:47
----------------------------------------
Se ti va bene disabilitarlo globalmente, quindi anche al di fuori di Labview, bastano delle modifichine al registro di Windows. Cerca "disabilitare tasto windows" su Google e ne trovi a pacchi
----------------------------------------
AUTORE: 822
DATA :11/03/2010 - 10:00:42
----------------------------------------
Questa è una soluzione, ho anche trovato un programma molto interessante che ho allegato al precedente post (sharpkeys), che si occupa di fare le modifiche al registro in automatico e ti permette di configurare qualunque tasto. Però volevo evitarla e avere tutto all'interno dell'applicazione di labview, anche perchè se lo disabilito dal registro viene disabilitato per sempre, mentre vorrei che all'uscita di labview questo tasto tornasse ad avere la sua funzione
Grazie per la tua risposta
----------------------------------------
AUTORE: 927
DATA :11/03/2010 - 10:32:42
----------------------------------------
Al limite, quando sai le modifiche da fare al registro, le fai fare e disfare da Labview all'avvio e alla chiusura dell'applicazione. Sotto Connectivity ci sono i VI per modificare il registro
----------------------------------------
AUTORE: 822
DATA :11/03/2010 - 10:38:14
----------------------------------------
avevo pensato anche a questo..
purtroppo però queste modifiche al registro sono attive solo al successivo riavvio del PC..
----------------------------------------
AUTORE: 43
DATA :11/03/2010 - 14:08:02
----------------------------------------
[quote="Snamprogetti":2uo1ascy]Se ti va bene disabilitarlo globalmente, quindi anche al di fuori di Labview, bastano delle modifichine al registro di Windows. Cerca "disabilitare tasto windows" su Google e ne trovi a pacchi[/quote:2uo1ascy]
Resto sempre perplesso di fronte a queste ostinazioni.
Secondo me l'unico approccio, il + semplice, è quello di far sparire la tastiera all'operatore, dotare lo schermo di touch screen (economicamente ormai molto abbordabile) ed implementare la tastiera direttamente a video...
La tastiera deve essere collegata ma fuori dalla portata dell'operatore.
Vabbè disabilitare l'inutile tasto Windows.. ma chemmidici di <Ctrl>+<Esc>, <Alt>+<Tab>, <Ctrl>+<Alt>+<Del>, <Alt>+F4 ...
Meglio le soluzioni semplici...
bye
----------------------------------------
AUTORE: 822
DATA :11/03/2010 - 17:31:08
----------------------------------------
paracarro.. sante parole le tue, io cerco sempre di farglielo capire al cliente.. ma sono duri! vogliono la tastiera, ma poi hanno paura che gli operatori facciano casini oppure sabotino.. e pensano che disabilitando un tasto risolvano i loro problemi (basta inserire una chiave usb in autorun, e l'operatore può andare dove vuole..)
----------------------------------------
================================================================================
Grafico torta excel
================================================================================
AUTORE: 482
DATA :10/03/2010 - 15:19:29
----------------------------------------
...ma ciao!
sto usando l'esempio di labview Pie Graph (excel).vi
Vorrei visualizzare i valori delle percentuali sulla torta.
Qualcuno ci ha già smanettato e sa dirmi come fare? che proprietà devo toccare? Sarebbe bello farlo senza modificare le librerie di labview.
Si puo' utilizzare il grafico torta 3d di labview volendo, lo so, ma a parte che se gli faccio visualizzare le percentuali me le mette in posizioni del cacchio e non si possono spostare, lo sto facendo in excel perchè, come scrivevo in un altro post, devo fare anche degli istogrammi che con labview sono troppo macchinosi da realizzare mentre co nexcel sono istantanei.
qualche suggerimento?
----------------------------------------
================================================================================
VI+movicon+RTU
================================================================================
AUTORE: 2964
DATA :12/03/2010 - 17:48:33
----------------------------------------
Buonasera a tutti,
sto per iniziare un progetto per un'automazione di un impianto in cui è installata una rtu proprietaria, tale rtu comunica con lo scada movicon11 in modbus/tcp ed ora vorrei aggiungere una logica con un VI (sviluppato però da altri ragazzi) che dialoghi con movicon via opc.
L'ultima volta che ho lavorato con la NI mi sono limitato a leggere,attraverso gli Item OPC settati opportunamente in movicon, i canali da un compact field point.
Questa volta la situazione è un pò diversa, la logica nel VI esegue degli algoritmi che dovranno leggere e scrivere nelle variabili movicon che a sua volta poi spedira (solo nel caso di scrittura del VI ovviamente) in una trama modbus impacchettata in ethernet alla rtu.
La logica non deve avere per forza tempistiche rigide, diciamo che fino a 15 secondi è tutto buono ...
Volevo sapere da voi, visto che ho letto diverse esperienze simili, se la cosa può stare in piedi e quali sono gli applicativi national che serviranno sicuramente.
GRAZIE
----------------------------------------
================================================================================
Creazione applicazione con application builder
================================================================================
AUTORE: 2523
DATA :12/03/2010 - 20:50:16
----------------------------------------
Ciao a tutti,
ho realizzato un'applicazione con LV 8.6 nella quale in particolari circostanze d'allarme
viene generato un suono (in pratica l'applicazione riproduce un piccolo file wav che si va a
pescare seguendo un percorso che gli ho dato come path costante).
Ora vorrei realizzare un'applicazione per poter distribuire l'eseguibile e vorrei chiedervi se
sia possibile fare in modo che l'applicazione porti con se il file audio...evitando così di distribuirlo
a parte. L'ottimale sarebbe che durante l'installazione dell'applicazione venga, in automatico,
generata una cartella dove sarà copiato il file audio.
Sono conscio che poi dovrò fare in modo che il path del file audio non sia costante ma dinamico, cioè dipenda
da dove l'utente ha installato l'applicazione.
Spero di essere stato sufficientemente chiaro.
Ringrazio anticipatamente.
Saluti,
Chobin
----------------------------------------
AUTORE: 927
DATA :31/03/2010 - 15:52:26
----------------------------------------
Quando si compila un eseguibile si possono allegare altri file di qualunque tipo. Devi prima aggiungerli al progetto, poi nella Build specification, sotto Source files, li metti tra gli Always included.
Al momento non ho controllato ma mi pare che se fanno parte dell'eseguibile vengono automaticamente inclusi anche nel relativo installer.
----------------------------------------
================================================================================
Preblema scrittura file di testo
================================================================================
AUTORE: 2523
DATA :14/03/2010 - 16:54:47
----------------------------------------
Ciao a tutti,
Ho realizzato un VI con LabView 8.6 che mi scrive in un file txt una serie di numeri contenuti
in un array a due dimensioni.
Il problema che incontro è il seguente: quando apro il file creato mi trovo il mio array, ma
il file non si chiude con l'ultimo numero presente nell'array, ma con un a capo. Quindi se l'array è il seguente:
01 02 03
04 05 06
il file sarà:
01 02 03
04 05 06
(più questa riga vuota)
Quindi, in altre parole il file creato contiene una riga in più rispetto a quelle contenute nell'array.
Sapreste indicarmi come evitare che nel file vi sia questa riga aggiuntiva?
Grazie in anticipo.
Saluti.
Chobin.
----------------------------------------
AUTORE: 645
DATA :15/03/2010 - 08:51:52
----------------------------------------
Nel VI seguente (riporto l'immagine) ho aggiunto un blocco IF: se ci troviamo nell'ultima iterazione non aggiungere il CR,
altrimenti aggiungi anche questa costante.
[attachment=0:34hbni2u]Scrittura_File_di_Testo.jpg[/attachment:34hbni2u]
----------------------------------------
================================================================================
Recorder & Player
================================================================================
AUTORE: 1168
DATA :16/03/2010 - 10:18:14
----------------------------------------
Salve a tutti. Per un nuovo banco test che dobbiamo sviluppare, mi piacerebbe cambiare un poco l'approccio che uso normalmente. Di solito eseguo il mio test acquisendo i dati e processandoli prima di salvarli in un formato leggibile da altri (aka excel o database).
Questa volta, oltre che ai normali file di post process, mi piacerebbe registrare tutte le grandezze e l'immagine presa dalla webcam in un file (TDMS?) così che con un apposito player si possa rivisualizzare quello che è successo durante il test.
Qualcuno di voi ha già esperienza in tal senso? Si deve usare una base tempi per campionare e poi riprodurre con la stessa base tempi o c'è qualche metodo un po' più furbo?
Per esempio, l'immagine dalla webcam avrà una banda efficace molto minore delle grandezze fisiche. Se mi basta un'immagine al secondo, e invece devo campionare una tensione a 100Hz, avrò anche 100 immagini identiche che mi occupano un sacco di spazio...
Grazie mille
Pietro
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 14:38:26
----------------------------------------
penserei di associare ad unarray "immagini" un array di stessa dimensione "base tempi", popolato da campioni presi dalla base tempi della grandezza fisica che vai a misurare.....
In pratica allinei le tue immagini al punto della base dei tempi del dato ce vai ad acquisire, senza la necessità di replicarla N volte quanto sono i dati.....
immagino di essere stato chiaro come la notte......
----------------------------------------
================================================================================
Elementi file
================================================================================
AUTORE: 2585
DATA :16/03/2010 - 10:32:22
----------------------------------------
Ciao a tutti,
ho il seguente problema:
posseggo un file .txt con 2 000 000 di elementi, prelevati da una misura.
siccome tutti gli elementi non mi servono devo prendere un elemento ogni 60
e trasferire gli elementi prelevati in un altro file.
Qualche suggerimento ?
Grazie,
Paolo
----------------------------------------
AUTORE: 43
DATA :16/03/2010 - 10:40:56
----------------------------------------
[quote="Paolo75":1k4du01a]Ciao a tutti,
ho il seguente problema:
posseggo un file .txt con 2 000 000 di elementi, prelevati da una misura.
siccome tutti gli elementi non mi servono devo prendere un elemento ogni 60
e trasferire gli elementi prelevati in un altro file.
Qualche suggerimento ?
Grazie,
Paolo[/quote:1k4du01a]
Solo suggerimenti ovvi.
Non hai scritto in che formato è scritto il file, ma è ovvio che è meglio non caricarti tutto il file in RAM e per poi procedere alla decimazione ed alla scrittura.
Procederei alla lettura del file spostando il file pointer (usa Set File Position) leggi solo ciò che ti serve e scrivilo immediatamente nell'altro file.
bye
----------------------------------------
================================================================================
Resetting VI
================================================================================
AUTORE: 2864
DATA :16/03/2010 - 17:28:38
----------------------------------------
Ho scritto un piccolo programmino che controlla 3 apparecchi, due tramite un segnale di tensione che comanda una bobina ed un altro in corrente 4-20mA che controlla una valvola di regolazione.
Quando questo è in esecuzione per molto tempo il vi si blocca, non risponde più ai comandi, non funziona nemmeno il tasto stop e chiudendolo con il tasto abort appare il messaggio "Resetting VI"
Da questo articolo http://zone.ni.com/reference/en-XX/help ... _for_exec/ mi è sembrato di capire che è probabile che uno dei thread sia occupato nel finire una operazione di I/O, CIN, or DLL.
Ora, dato il vi che allego, da dove potrebbe dipendere il problema secondo voi?
----------------------------------------
AUTORE: 1078
DATA :17/03/2010 - 09:41:28
----------------------------------------
[quote="Pablo!":24clvid9]Ora, dato il vi che allego, da dove potrebbe dipendere il problema secondo voi?[/quote:24clvid9]
Ciao Pablo!,
Ho dato un'occhiata al tuo VI e la prima cosa che ho notato è che non stoppi il ciclo dopo un'errore. Questo potrebbe bloccare i VI nell'esecuzione successiva. Una seconda cosa è la temporizzazione, non hai temporizzato il ciclo, solitamente cicli a loop continuo come questo vengono temporizzati per non occupare la CPU al 100%, utilizzare la CPU al 100% significa bloccare tutto. Ho modificato il tuo VI, io non posso provarlo, non ho i tuoi attuatuori. Prova a verificare se funziona meglio. Ho impostato un tempo di attesa di 100ms, secondo me un tempo accettabile, ovviamente dovrai vedere se per la tua applicazione va bene!!
Ciao e buon lavoro.
----------------------------------------
AUTORE: 2864
DATA :17/03/2010 - 10:20:46
----------------------------------------
[quote="Ricky":2ipv2hw6][quote="Pablo!":2ipv2hw6]Ora, dato il vi che allego, da dove potrebbe dipendere il problema secondo voi?[/quote:2ipv2hw6]
Ciao Pablo!,
Ho dato un'occhiata al tuo VI e la prima cosa che ho notato è che non stoppi il ciclo dopo un'errore. Questo potrebbe bloccare i VI nell'esecuzione successiva. Una seconda cosa è la temporizzazione, non hai temporizzato il ciclo, solitamente cicli a loop continuo come questo vengono temporizzati per non occupare la CPU al 100%, utilizzare la CPU al 100% significa bloccare tutto. Ho modificato il tuo VI, io non posso provarlo, non ho i tuoi attuatuori. Prova a verificare se funziona meglio. Ho impostato un tempo di attesa di 100ms, secondo me un tempo accettabile, ovviamente dovrai vedere se per la tua applicazione va bene!!
Ciao e buon lavoro.[/quote:2ipv2hw6]
Ola.
Ora capisco perchè questo si pianta e quando uso la timed structure no. Ero talmente convinto di aver temporizzato anche questo che non avevo fatto caso che invece mancava la temporizzazione.
Grazie mille.
----------------------------------------
AUTORE: 2864
DATA :17/03/2010 - 10:41:17
----------------------------------------
Aggiornamento:
Con il vi modificato succede una cosa stranissima, in pratica si attiva l'heater, come se ricevesse un impulso, e poi si spegne, dura un istante.
Quel che mi lascia perplesso è che il probe non lo rileva.
Ora provo a memorizzare i valori in un txt e poi vedo come fa.
----------------------------------------
================================================================================
Problema con vi.lib ed eseguibile
================================================================================
AUTORE: 2821
DATA :17/03/2010 - 07:44:39
----------------------------------------
buongiorno a tutti!
Sto cercando da qualche giorno di far funzionare un eseguibile, ma senza successo.
Ho completato un progetto, ed all'interno del progetto c'è il mio vi principale, i subvi e c'è la cartella "dependencies" contenente la vi.lib.
Quando lancio il mio vi da Labview funziona tutto. Quando creo l'eseguibile, e provo a lanciarlo, mi si apre una finestra di dialogo che mi chiede uno per uno tutti i vi che sono in vi.lib e che ho incluso nel progetto!
Sicuramente ho sbagliato qualcosa in build specifications, ma non so esattamente cosa; alla voce "source file settings" le dependencies sono configurate "include if referenced", in "source files" le dependencies non sono tra i files includibili... boh...
grazie per l'aiuto
----------------------------------------
AUTORE: 645
DATA :18/03/2010 - 10:09:39
----------------------------------------
I SubVI vengono richiamati nel VI principale tramite path?
Se è così quando crei l'eseguibile il path cambia: non ricordo come esattamente (mi sa che c'è una discussione nel forum) ma viene aggiunto qualcosa al path originale.
Per risolvere questo inconveniente si possono chiamare i VI tramite percorso relativo.
Trovi qualche indicazione nella sezione Download, "Percorso relativo".
----------------------------------------
AUTORE: 2821
DATA :18/03/2010 - 15:32:43
----------------------------------------
> I SubVI vengono richiamati nel VI principale tramite path?
Il problema non sono i miei subvi, ma i vi contenuti in vi.lib, quelli di NI, sono quelli che non trova!! Cioè quelli standard che si trovano nella paletta, ad esempio quelli per le stringhe, per i file, ecc. ecc. che mi vanno a finire nella cartella "dependencies".
----------------------------------------
AUTORE: 1078
DATA :19/03/2010 - 08:22:36
----------------------------------------
Ciao tostapane,
Hai già provato a reinstallare (o si dice rinstallare!! Bhe, prendetela per buona!) labview?
----------------------------------------
AUTORE: 2821
DATA :19/03/2010 - 10:19:45
----------------------------------------
[quote:1ed7kpau]Ciao tostapane,
Hai già provato a reinstallare (o si dice rinstallare!! Bhe, prendetela per buona!) labview?
[/quote:1ed7kpau]
Diciamo che vorrei riservarmi questa opzione come ultima spiaggia, visto che sul mio pc ci vuole quasi una giornata per reinstallare tutto!
Comunque ho fatto delle prove, ed ho visto che se prendo la directory [b:1ed7kpau]vi.lib[/b:1ed7kpau] che si trova in [b:1ed7kpau]c:\programmi\National Instruments\LabVIEW 8.6[/b:1ed7kpau] e la copio dove si trova il mio file eseguibile ([b:1ed7kpau]d:\builds\Myproject\app[/b:1ed7kpau]) allora posso lanciare il mio .exe senza problemi.
A questo punto mi chiedo: perchè il file .exe cerca la vi.lib nel posto sbagliato, e non nel posto dove si trova normalmente, mentre il VI non compilato la cerca nel posto giusto?
----------------------------------------
================================================================================
Posizione dialog Box sullo schermo
================================================================================
AUTORE: 2514
DATA :17/03/2010 - 11:47:37
----------------------------------------
Ciao a tutti e scusate la banalita' della domanda, ma non riesco a cavarci i piedi. Nel mio VI ho bisogno, talvolta, di utilizzare dei dialog box con uno o due pulsanti, i classici "Premi un tasto per continuare" con l'OK e il Cancel sotto. Ebbene non riesco a capire come fare per posizionare questi dialog, ad esempio, al centro della mia finestra Front Panel. Io ho un Front Panel piccolo (300x300) e mentre alcuni dialog mi compaiono esattamente al centro della finestra (ed e' questo che desidero) altri mi compaiono addirittura fuori dal front panel, in alto a destra. Qualcuno sa darmi una dritta? Grazie mille!
----------------------------------------
AUTORE: 278
DATA :17/03/2010 - 16:03:48
----------------------------------------
ciao,
per far apparire i VI al centro dello schermo, devi accedere alle VI Properties facendo tasto Dx sull'icona del vi, a questo punto, tramite il menù a tendina, devi accedere alla voce Window Run-Time position e selezionare "Centered".
Dovrebbe essere sufficiente per ottenere quello che desideri
----------------------------------------
AUTORE: 2514
DATA :17/03/2010 - 16:10:39
----------------------------------------
Ciao Esodar e grazie della tua indicazione. La proprieta' che mi indichi e' gia' settata come tu mi indichi giustamente. Nel frattempo, casualmente, ho scoperto il giochino. Io sto sviluppando il VI con il Block diagram aperto sullo sfondo. In questo caso la posizione del dialog box esce dalla finestra. E' sufficiente ridurre ad icona il block diagram e "costringere" il dialog box ad apparire nella finestra del Front Panel perche' tutto si risolva magicamente. Misteri di Labview...
Grazie in ogni caso!
----------------------------------------
AUTORE: 2514
DATA :16/06/2010 - 10:53:01
----------------------------------------
A distanza di tempo puntualizzo questo post. Non e' vero che il problema scompare se chiudo il Block Diagram. La posizione fuori schermo del dialog si aggiusta magicamente al centro dello schermo se chiudo la Navigation Window. Sembra essere lei l'imputata del problema. Solo per la precisione, nel caso qualcun altro si trovasse con i miei stessi problemi...
----------------------------------------
================================================================================
Come creare cicli paralleli ??
================================================================================
AUTORE: 2948
DATA :19/03/2010 - 09:18:11
----------------------------------------
Salve a tutti, mi presento,
sono Emilio, è il primo post su questo forum, sono un chimico ricercatore e da pochissimo ho iniziato ad usare LV per gestire l'acquisizione dati da strumenti di laboratorio, fino ad ora ho sctitto programmi in Visual Basic per fare la stessa cosa... devo dire che da quando ho scoperto LV (solo un paio di settimane..) mi si è aperto un mondo di possibilità.
Vado dunque all'oggetto del mio post, ho realizzato un semplice VI che legge tramite seriale con VISA dei canali analogici su una proto-board con un PIC 16F88 , poi mi converte i dati U10 bit nelle corrispondenti grandezze fisiche che sto acquisendo e poi salva i valori su un file .CSV, nel VI c'è anche un PID Autotuning che mi gestisce un set point su una temperatura.
Il VI funziona egregiamente, ma avrei il seguente problema, vorrei eseguire il PID e la scittura sul file in modo asincrono, ovvero avrei bisogno di eseguire il PID molto velocemente , mentre la scittura su file più lentamente.
Ho provato a mettere il VI che scive su file in un ciclo while esterno al ciclo principale, con un timer dentro, ma i due cicli non girano in parallelo (pensavo di aver capito che a differenza di altri lunguaggi LV potesse farlo facilmente...)
ho pensato anche di mettere il vi di scittura in un ciclo if che scrive ogni "n" cicli del PID, ma sinceramente mi sono perso, sono ancora troppo abituato a scivere programmi nel modo classico, alcune operazioni con il linguaggio G mi spiazzano...
A proposito, volevo chiedere un ultima cosa, nei "normali" programmi spesso si usano delle variabili che vengono sia lette che scritte , per fare una miriade di cose, ad esempio
x=0
do
x=x+1
y=f(x)
if x>10 then exit do
loop
come si "ragiona" in G ?
Ringrazio anticipatamente tutit coloro che vorranno aiutarmi.
Ciao, Emilio.
----------------------------------------
AUTORE: 482
DATA :19/03/2010 - 11:19:36
----------------------------------------
Innanzitutto ecco il tuo dubbio sul linguaggio G chairito in un immagine.
Poi, per quanto riguard ai cicli paralleli asincroni.
Come dicevi tu, Labview li gestisce senza problemi.
Non avendo visto l'esempio del tuo codice posso ipotizzare che tu abbia tirato un filo che da un ciclo va ad un altro.
Questo non puo' essere, perchè un filo comporta la consequenzialità di due blocchi. Nessun dato va su un filo che esce, finchè il ciclo non termina e quindi l'altro ciclo resta in attesa del dato.
Se devi passare dei dati da un ciclo ad un altro devi usare le variabili.
----------------------------------------
AUTORE: 2948
DATA :19/03/2010 - 11:34:37
----------------------------------------
Ciao Geppo ,
si esattamente come dici, io ho semplicemente "tirato fuori" i fili dal ciclo principale e ho portato le stringhe ecc. ad un ciclo esterno con dentro il salva file + timer, e ero arrivato a capire, facendo prove, quello che mi dici, ovvero che fintanto che il ciclo principale va avanti, ovvero fino a che io non lo fermo con un interruttore, il ciclo con il salva file non salva niente.
Quello che speravo di sentire è proprio il discorso delle "variabili" ovvero oggetti che, come nei registri dei PIC, io da un lato scrivo con la tempistica che voglio, dall'altro vado a leggere quando mi serve, trovando il valore ultimo aggiornato.
Ma come si fa ????? potresti farmi un esempio elementare, per poter capire e poi potermi muovere da solo ?
immagino si tratti di cose banali, ma sai comè, all'inizio uno risolve "a c..o" cose più complesse subito, poi, cose estremamente semplici, quasi scontate per tutti, lo bloccano...
Grazie per la risposta !
----------------------------------------
AUTORE: 2821
DATA :19/03/2010 - 15:40:01
----------------------------------------
clicchi con il destro su un indicatore o un controllo e selezioni "create -> local variable".
Questa variabile la puoi mettere dove ti pare, e con il tasto destro puoi selezionare la modalità, in lettura o scrittura
----------------------------------------
AUTORE: 1078
DATA :19/03/2010 - 16:01:43
----------------------------------------
Per ottimmizare operazioni di lettura e scrittura tra cicli differenti ti consiglio di utilizzare le code. Nel primo caso accodi il dato recuperato dal PID e nel secondo, comodamente, lo estrai e lo salvi su disco. Ti posto un piccolo esempio! Attento alle temporizzazioni, devi cercare di fare in modo che l'operazione di deaccodamento (dequeue) viaggi ad una velocità tale (multipla dell'accodamento <enqueue>) in modo da lasciare spazio ai nuovi elementi; al resto pensa labview!
Qui maggiori inforzioni:
[url:fd8d1qx8]http://decibel.ni.com/content/docs/DOC-6961[/url:fd8d1qx8]
Ciao e buon lavoro.
----------------------------------------
AUTORE: 2948
DATA :22/03/2010 - 08:54:28
----------------------------------------
Grazie mille,
come immaginavo la soluzione era così semplice che.... vabbè,
ho provato entrambe le possibilità, ma devo dire che la gestione delle code non l'ho ancora compresa delm tutto... , l'ho solo scimmiottata...
in ogni caso semplicemente usando le variabili in lettura messe nel ciclo while con il vi che scrive su disco tutto funziona egragiamente.
Grazie ancora, sto divorando tutorial ed esempi, è davvero user friendly sto LV!
Ciao, Emilio.
----------------------------------------
AUTORE: 645
DATA :25/03/2010 - 08:25:00
----------------------------------------
Si può lavorare su cicli paralleli anche usando variabili locali o, ancora meglio perchè ottimizzate a livello software, shared variables.
L'importante è non collegare fili tra due cicli (questo causa sequenzialità) e temporizzare in maniera corretta (in realtà a volte si va un po' per tentativi... Può sempre capitare qualcosa che porta ad avere un tentativo di lettura prima della scrittura del dato o, viceversa e potenzialmente più dannoso, la scrittura prima che il dato precedente sia stato letto).
Si può ricorrere a strutture buffer (tipo FIFO... poichè la shared variables possono implementare questo tipo di struttura [se non sbaglio si possono utilizzare solo se si ha il pacchetto RealTime] la gestione diventa quasi "trasparente"); la struttura più completa (e che può risultare anche più complessa... ma sicuramente funzionante molto bene) è la coda come ha detto Ricky.
Dipende dall'applicazione che si vuole realizzare: io ti consiglierei di fare un po' di prove, prima con le variabili e poi complicando sempre di più fino ad arrivare alle occorrenze e alle code.
Ci sono anche i Timed Loop, strutture e cicli temporizzati nati con lo scopo di semplificare l'utilizzo di cicli paralleli: la caratteristica interessante è la possibilità di controllare tutti i cicli tramite una sola variabile (in pratica quello che si può fare implementando variabili locali è già stato preparato).
----------------------------------------
================================================================================
Basics.llb
================================================================================
AUTORE: 2984
DATA :19/03/2010 - 10:53:13
----------------------------------------
Ciao a tutti.
Sono nuovo del forum e sto imparando ad usare il labview. Ho iniziato giusto ieri... sto seguendo il 7.0, e purtroppo sono vincolato. Il manuale che sto seguendo, della stessa national, era corredato da alcuni file di esempio necessari per usare la guida. Sono:
Disco 1:
LV Basics I
basics1.llb
nidevsim.zip
Disco 2:
bas1soln.exe
Qualcuno di voi ne ha? Vi ricordo che sto usando la versione 7.0
Grazie a tutti
----------------------------------------
AUTORE: 2984
DATA :19/03/2010 - 14:50:50
----------------------------------------
ragazzi ho risolto, mi sono preso la demo dell'ultima versione e vedrò di studiarmi li le cose.
Grazie lo stesso
----------------------------------------
AUTORE: 4187
DATA :27/03/2012 - 09:56:15
----------------------------------------
servirebbe anche a me come l'hai trovato?
----------------------------------------
================================================================================
realizzare Effetto eco
================================================================================
AUTORE: 2989
DATA :22/03/2010 - 11:45:23
----------------------------------------
Ciao ho bisogno di un piccolo aiuto da parte vostra per realizzare un programma in labview.
Il programma acquisisce un segnale vocale dalla scheda audio attraverso un microfono,vorrei realizzare una sorta di effetto eco sul suono.
(la parte che acquisisce, riproduce ecc. è già fatta) come posso fare? se volete posso postare qualche immagine del block diagram.
----------------------------------------
AUTORE: 1165
DATA :22/03/2010 - 23:00:15
----------------------------------------
Se ad un segnale audio nel tempo A(t) aggiungi una componente ridotta di una sua replica esatta ma ritardata di un tempo T: A(t-T) e cioè se fai A(t)+kA(t-T) dovresti ottenere un effetto eco se 0<k<1 e sopratutto se T è un po' maggiore di circa 20 millisecondi. Infatti credo che l'orecchio umano non distingua bene separazioni temporali tra due suoni inferiori ai 20 ms e quindi con un valore piccolo di T avresti solo del riverbero, mentre con valori di T superiori ai 20 ms dovresti ottenere un effeto eco. Io non ci ho mai provato, ora sono curioso di sapere come va la tua prova. Ciao ed in bocca al lupo.
----------------------------------------
================================================================================
Plot costituito da due tratti di curva separati
================================================================================
AUTORE: 2893
DATA :22/03/2010 - 12:20:41
----------------------------------------
Ciao a tutti,
volevo sottoporvi un problema che spero sia banale:
ho una curva corrente-tensione acquisita sperimentalmente e su questi dati devo fare due diversi fit su due tratti di particolare interesse. Il problema è che devo visualizzare in un XY Graph un unico plot formato dall'unione dei due fit in modo che ciascun tratto sia visualizzato come linea continua mentre tra i due tratti non ci sia alcun collegamento. Non riesco a trovare il modo di farlo!
Grazie
----------------------------------------
AUTORE: 43
DATA :22/03/2010 - 15:38:08
----------------------------------------
[quote="MicheleMac":rjw6cvgd]Ciao a tutti,
volevo sottoporvi un problema che spero sia banale:
ho una curva corrente-tensione acquisita sperimentalmente e su questi dati devo fare due diversi fit su due tratti di particolare interesse. Il problema è che devo visualizzare in un XY Graph un unico plot formato dall'unione dei due fit in modo che ciascun tratto sia visualizzato come linea continua mentre tra i due tratti non ci sia alcun collegamento. Non riesco a trovare il modo di farlo!
Grazie[/quote:rjw6cvgd]
Non capisco.
Posta un esempio che mostri il punto a cui 6 arrivato nello sviluppo del sw.
Se il problema è la non continuità, allora basta "plottare" 2 tracce invece di una sola. Devi solo ricordarti di fissare correttamente i valori delle X (ascisse).
Un altro trucco (usato + che altro con grafici tipo "waveform graph", dove le X sono equidistanziate) consiste nel porre a "NaN" (Not A Number) tutti i valori delle ordinate che non devono essere plottati.
bye
----------------------------------------
AUTORE: 2738
DATA :22/03/2010 - 15:45:23
----------------------------------------
Ciao MicheleMac,
se ho capito bene il tuo problema puoi provare a collegare i due tratti di curva tra loro separati con un NaN (Not a number). Sia l'XY Graph control, che il Waveform control in questo caso non visualizzano nulla.
Ciò funzionava per LW 7.0 e ha continuato afunzionare sino ad ora il LV2009.
Più che mille parole vale un esempio, che ti allego.
[attachment=0:1u9k495k]Esempio curve separate.png[/attachment:1u9k495k]
Spero di esserti stato utile.
Ciao.
----------------------------------------
AUTORE: 2893
DATA :23/03/2010 - 14:55:47
----------------------------------------
[quote="ironman99":37y9vgkt]Ciao MicheleMac,
se ho capito bene il tuo problema puoi provare a collegare i due tratti di curva tra loro separati con un NaN (Not a number). Sia l'XY Graph control, che il Waveform control in questo caso non visualizzano nulla.
Ciò funzionava per LW 7.0 e ha continuato afunzionare sino ad ora il LV2009.
Più che mille parole vale un esempio, che ti allego.
[attachment=0:37y9vgkt]Esempio curve separate.png[/attachment:37y9vgkt]
Spero di esserti stato utile.
Ciao.[/quote:37y9vgkt]
Quello che intendevo fare è proprio quello che dici tu. Ho provato con il NaN e funziona. Tutto ok.
Grazie mille e alla prossima.
----------------------------------------
================================================================================
trasformare una stringa in un array
================================================================================
AUTORE: 2955
DATA :22/03/2010 - 14:32:11
----------------------------------------
Buonpomeriggio,
Io sono un neo utilizzare di labview 8.2, vorrei porvi un problema che non riesco a risolvere io ottengo dalle rillevazioni una stringa contenente un numero binario da 16 bit vorrei far diventare questo numero binario da 16bit un vettore della stessa lunghezza in modo tale da andare ad analizzare i singoli bit tramite l'index array.
Vi ringrazio anticipatamente per le risposte fornite al mio quesito;
----------------------------------------
AUTORE: 43
DATA :22/03/2010 - 15:28:02
----------------------------------------
[quote="Davide_1":bzpaehvj]Buonpomeriggio,
Io sono un neo utilizzare di labview 8.2, vorrei porvi un problema che non riesco a risolvere io ottengo dalle rillevazioni una stringa contenente un numero binario da 16 bit vorrei far diventare questo numero binario da 16bit un vettore della stessa lunghezza in modo tale da andare ad analizzare i singoli bit tramite l'index array.
Vi ringrazio anticipatamente per le risposte fornite al mio quesito;[/quote:bzpaehvj]
Guarda se ti va bene questa soluzione
bye
----------------------------------------
AUTORE: 2955
DATA :22/03/2010 - 20:05:21
----------------------------------------
Grazie per larisposta ma non rislve il mio problema dato il fatto che io vorrei suddividere una stringa del tipo 1000001100101010 in un vettore dove ogni cella dove contenere un bit di tale stringa es.
index 0 = 1
index 1= 0
e cosi via dato il fatto che ogni bit rappresenta un dato stato della macchina;
ti ringrazi anticipatamente per la risposta ;
----------------------------------------
AUTORE: 2738
DATA :22/03/2010 - 20:49:33
----------------------------------------
Questo dovrebbe fare al caso tuo.
[attachment=0:3vf84jqb]Bin Str to Bool array.png[/attachment:3vf84jqb]
N.B. Il comparison mode del VI "X=Y?" è settato per "compare elements".
Ciao.
----------------------------------------
================================================================================
Disegna Cilindro
================================================================================
AUTORE: 2701
DATA :23/03/2010 - 09:00:32
----------------------------------------
Devo disegnare un cilindro su cui posso andare a scrivere delle informazioni tipo altezza.........Qualcuno ha una idea di come lo posso fare?
Grazie in anticipo
Rik
----------------------------------------
AUTORE: 1078
DATA :25/03/2010 - 10:20:01
----------------------------------------
Con un'immagine e con le fantastiche funzioni di disegno messe a disposizione da LV
Ciao e buon lavoro.
----------------------------------------
================================================================================
generare una sinusoide e visualizzarla in labview
================================================================================
AUTORE: 2996
DATA :23/03/2010 - 09:56:29
----------------------------------------
salve,
la domanda vi sembrerà stupida, ma ho conosciuto labview da pochi giorni.
praticamente mi serve un semplice programmino, il quale scegliendo frequenza, fase iniziale e ampiezza, mi genera una sinusoide e me la visualizza su un grafico,dove sulle ascisse vi è il tempo e sulle ordinate l'ampiezza.
vi prego di postarmi questo semplice programmino...
non posso usare funzioni già presenti in labview.
Praticamente la sinusoide deve essere generata da un loop (for), e non deve contenere pattern, ma deve usare la funzione seno. Devo poter scegliere frequenza, fase e ampiezza.
la mia funzione è x(t)=A(2)^(1/2)sin(2*3.14*f*t+fase)
sulle ascisse devo visualizzare il tempo e non i punti di campionamento
----------------------------------------
AUTORE: 1078
DATA :25/03/2010 - 10:24:30
----------------------------------------
[quote="selfservice":4t4uwiq2]Praticamente la sinusoide deve essere generata da un loop (for), e non deve contenere pattern[/quote:4t4uwiq2]
Cosa intendi per non deve contenere pattern?
Puoi semplicemente usare la funzione WaveForm Sin Generator e poi estrarre solo l'array dati. Ancora meglio, visto che sei un nuofita, puoi usare i vi Express di labview. Signal Generator.
Buon lavoro.
----------------------------------------
================================================================================
Ottimizzare la comunicazione seriale con un PIC 16F88
================================================================================
AUTORE: 2948
DATA :24/03/2010 - 11:05:23
----------------------------------------
Salve di nuovo a tutti,
avrei alcune altre domandine:
Al momento la mia applicazione funziona bene, ma vorrei velocizzare la lettura e scrittura tramite RS232 con la protoboard con PIC 16F88.
Io leggo tutti e 7 gli ingressi analogici del micro e quando serve vado a cambiare lo stato di uscita dei pin della porta B del PIC (4 uscite di cui 3 digitali e una in PWM hardware , la PORTB.0 che uso come uscita analogica con filtro RC).
come prima cosa vorrei modificare la modalità di invio dei dati dal PIC a labview, adesso il PIC mi manda un pacchetto con i 7 valori analogici in formato decimale testuale, ovvero qualcosa tipo :
(1023,1023,1023,1023,1023,1023,1023)
----------------------------------------
AUTORE: 2948
DATA :25/03/2010 - 09:18:24
----------------------------------------
Grazie Botolo,
dunque ieri sera ho creato il nuovo VI che comunica mediante RS232 con un PIC 16F88,
ho usato un solo ciclo che scrive prima 2 byte, i cui bit rappresentano la configurazione richiesta delle porte in uscita al PIC, e poi il PIC risponde con 14 byte (7 word) che rappresentano i valori analogici letti sulle 7 porte AN a 10 bit del PIC. Il VI READ (VISA) attende i 14 byte prima di proseguire, quindi mi crea la giusta temporizzazione del ciclo e non perdo nulla. Ho inserito due tickcounter con cui calcolo la frequenza di lettura/scrittura, e misuro ben 180 Hz !!
credo che non sia affatto male leggere 7 ingressi analogici 10 bit e scrivere 4 uscite di cui una analogica a 180 Hz, su un chippettino.. da 4 € !
Questo VI verrà inserito nelle mie applicazioni per acquisire valori analogici o controllare uscite in digitale e con le variabili locali andrò a leggere o scrivere gli indicatori e controlli del VI SERIALE quando voglio.
Il concetto è che i dati fluiscono continuamente a 180 Hz, mentre io vado a leggere o scrivere quello che in quel momento mi serve, non mi importa di perdere i valori intermedi, non so se mi spiego.
Adesso è rimasto in sospeso solo il pezzo di VI che partendo dalla stringa ricevuta di 14 byte (ASCII) me la converte nei 7 valori decimali U16 , 0-1023, ma non credo sia cosa difficile, solo che ieri sera erano le 2:20 e non era il caso di continuare
...
Ciao e grazie.
----------------------------------------
AUTORE: 2948
DATA :26/03/2010 - 10:27:51
----------------------------------------
Ciao di nuovo,
vi chiedo un aiuto, ho quasi finito il programma di acquisizione ad alta velocità con il PIC 16F88, funziona egregiamente, ma ho 2 problemi da rsisolvere:
1) mi manca la conversione della stringa di byte ASCII che ricevo nei 7 valori analogici 0-1023 quindi U16, le stringhe che arrivano sono formate esattamente da 14 byte (infatti tolgo tutti i caratteri di ritorno a capo ecc...) quindi qualcosa tipo [ò0y°§ù*çèè#§ì?], io la devo prima spezzare in 7 stringhe da 2 byte e poi convertire le coppie di byte in numeri U16, sto probando con TYPECAST e le funzioni sulle stringhe, ma non ci sono ancora.
Per quanto riguarda invece la creazione dei 2 byte da inviare che rappresentano la configurazione delle porte in uscita del PIC tutto funge alla grande con TYPECAST.
2) questo VI così comè funziona perfettamente, ma se lo salvo come file e lo carico in un altro VI con subVI non mi restituisce valori, nè invia dati al PIC, si comporta come cun ciclo che finchè gira "è sordo" infatti qualcosa avviene solo all'avvio del programma ed alla chiusura... non capisco, eppure ho tirato fuori dal ciclo while gli indicatori ed i controlli usando le variabili locali... perchè ??? vi ripeto, da solo il VI funziona perfettamente a circa 120 Hz !!!!
Grazie mille a chi vorrà aiutarmi,
HELP
----------------------------------------
AUTORE: 2948
DATA :27/03/2010 - 10:12:28
----------------------------------------
HELP HELP ..
Ho risolto la conversione della stringa in 7 U16 tutto ok, ma non riesco a capire perchè sce chiamo questo Vi da un altro Vi non gira... ????
HELP HELP
----------------------------------------
AUTORE: 2948
DATA :27/03/2010 - 22:55:10
----------------------------------------
"Is there anybody... out there... ?!"
----------------------------------------
AUTORE: 482
DATA :29/03/2010 - 07:29:28
----------------------------------------
Tasto destro sull'icona del subVI in alto a destra, VI Properties->Window Apparence->Customize e li selezioni SHOW FRONT PANEL WHEN CALLED e CLOSE AFTERWARDS IF ORIGINALLY CLOSED.
----------------------------------------
AUTORE: 2948
DATA :29/03/2010 - 09:39:06
----------------------------------------
Ciao Geppo,
cosi facendo non risolvo, a me servirebbe semplicemente che il SUBVI gira per i fatti suoi in background e io nella mia applicazione vado semplicemente a leggere o scivere sul PIC.
ti allego il mio primo VI per la comunicazione che funziona , ma che è lento "EMI-SERIAL.vi" ed il nuovo che funziona da se lanciato da solo, ma che, se chiamato da un altro Vi, non restituisce valori "EMI-SERIAL-SPEED.vi".
Ciao
----------------------------------------
AUTORE: 482
DATA :29/03/2010 - 10:59:40
----------------------------------------
Hai usato il debug?
Quando si hanno dei comportamenti anomali, conviene sempre usare la lampadina!
Adesso non ho tempo di dargli un occhiata ai tuoi vi, quindi:
Metti un bel breakpoint appena fuori dal subvi e accendi la lampadina nel subvi, cosi' quando lo richiami, il subVI andrà in debug e potrai vedere cosa fa e, appena terminato, blocchi l'esecuzione e accendi la lampadina anche fuori, cosi' puoi vedere che valori ti ha restituito.
----------------------------------------
AUTORE: 482
DATA :29/03/2010 - 11:05:44
----------------------------------------
ok, mi son ritagliato un attimo.
Nel vi speed, c'e' il booleano Accensione che se è TRUE, fa si che il programma continui a ciclare e quindi in uscita non ci sara' mai niente. Se è false, non assegna nessun valore alle uscite, quindi gli lascia quello precedente.
----------------------------------------
AUTORE: 645
DATA :29/03/2010 - 12:59:18
----------------------------------------
Io farei una modifica alla struttura del VI che deve funzionare come SubVI: toglierei il ciclo e le operazioni di apertura comunicazione, configurazione, chiusura seriale.
Lascerei queste operazioni al VI principale (o al massimo si può creare un SubVI incaricato della sola configurazione della porta seriale); il SubVI potrebbe essere incaricato della scrittura e della lettura dei valori verso e da la porta seriale.
In questo modo il SubVI verrebbe richiamato ad ogni iterazione restituendo i valori tramite connessioni (già impostate... ho visto che l'icona del VI, almeno quella del EMI_SERIAL_SPEED, è già programmata per avere ingressi e uscite).
----------------------------------------
AUTORE: 2948
DATA :30/03/2010 - 16:14:47
----------------------------------------
ok grazie,
sono fuori per lavoro,
appena posso proverò le modifiche,
thanks!
----------------------------------------
================================================================================
contare i doppioni in un array
================================================================================
AUTORE: 482
DATA :24/03/2010 - 15:42:29
----------------------------------------
...ma ciao!
ho un array bidimensionale ma lo posso trasformare in un array di cluster di due elementi, quindi poniamo il caso dell'array monodimensionale.
QUalcuno di voi ha una soluzione semplice e veloce per contare i doppioni?
Ho un vi per eliminarli, magari qualcuno di voi ne ha uno per contarli.
----------------------------------------
AUTORE: 645
DATA :25/03/2010 - 08:38:35
----------------------------------------
È una roba un po' accrocchiata però permette di risparmiare alcune operazioni...
Una volta a me era capitato di fare così: cercavo il massimo nel vettore; se trovavo valori uguali salvavo le posizioni in un altro vettore e poi eliminavo i massimi uguali trovati dal primo vettore e ricomincavo la ricerca. Se non trovavo valori uguali al massimo eliminavo solo il massimo e ricominciavo la ricerca.
Questo implica un vettore "copia" dal quale cancellare "il o i" massimo/i di volta in volta trovato/i e un vettore nel quale salvare le posizioni degli elementi doppi (oppure puoi direttamente cancellarli dal vettore di partenza). In realtà se devi cancellarli si potrebbe fare un'analisi sul vettore di partenza, salvare le posizioni in un secondo vettore e memorizzare il valore del massimo corrente in una variabile in modo da non cancellare il massimo ad ogni iterazione ma semplicemente cercare il nuovo massimo imponendo la condizione che sia più piccolo del massimo utilizzato nell'iterazione precedente (e memorizzato nella variabile).
Lo so... ho mal di testa anche io...
----------------------------------------
AUTORE: 482
DATA :25/03/2010 - 14:55:25
----------------------------------------
mi sono scervellato un po' e alla fine ho tirato fuori una soluzione abbastanza semplice e performante.
Dategli un occhiata e ditemi se vi sembra ok.
Ho messo l'array bidimensionale sottoforma di array di cluster prima di analizzarlo.
----------------------------------------
================================================================================
Tipi "misti"
================================================================================
AUTORE: 2993
DATA :24/03/2010 - 23:16:45
----------------------------------------
Premetto: sono neofita.
Domandina 1) Dovendo inviare, attraverso seriale, dei comandi formati da una stringa e successivo valore di tipo numerico, come fare?
Perchè la funzione "seriale" accetta solo stringhe; Convertendo un tipo numerico in stringa si invia una stringa e non un numero, e il dispositivo che riceve il comando non lo interpreta.
Domandina 2) Se io uso la funzione di concatenamento stringhe, alternando in ingresso una costante stringa ad un controllo stringa (quindi una stringa variabile), per un certo numero di volte, in uscita ho solo il concatenamento delle costanti. Perchè?
Grazie.
Maurizio.
----------------------------------------
AUTORE: 482
DATA :25/03/2010 - 07:48:02
----------------------------------------
...ma ciao!
andiamo per punti:
1) La seriale accetta solo stringhe. QUindi se devi passargli dei numeri, li devi convertire in stringhe.Non è un vezzo di LabVIEW è cosi' per tutte le seriali.
2) Il dispositivo che riceve quel numero, non lo interpreta perchè SICURAMENTE glielo mandi in modo sbagliato, non rispettando il protocollo di comunicazione.
3) Quando fai il concatenamento di costanti e controlli, il controllo probabilmente è vuoto, per quello vedi solo delle costanti. Devi dare un valore di default al controllo oppure scriverci un valore.
Detto questo, se tu mandassi un esempio, sarebbe piu' facile aiutarti.
...ma ciao!
----------------------------------------
AUTORE: 2993
DATA :26/03/2010 - 21:51:16
----------------------------------------
Grazie.
Non riesco a spedire file... mi dà un errore del server... comunque appena riesco...
Problema risolto grazie all'aiuto...
Ancora grazie e se magari avessi ancora bisogno... ma prima devo riuscire a spedire il file...
----------------------------------------
AUTORE: 2993
DATA :26/03/2010 - 21:52:18
----------------------------------------
prova di allegazione file...
----------------------------------------
AUTORE: 2993
DATA :26/03/2010 - 21:57:49
----------------------------------------
Riuscito...
beh... banale e per niente ottimizzato...
la seriale non è ancora implementata, per separare le parti e capire meglio dove sono gli errori, e per essere, poi, sicuro del funzionamento in modo da isolare altri errori.
Prima del blocco "build array + index" vedo la stringa, dopo no... suggerimento?
Grazie ancora.
----------------------------------------
AUTORE: 2993
DATA :27/03/2010 - 16:52:07
----------------------------------------
Risolto.
Consideravo il primo elemento dell'array come 1 anzichè 0.
----------------------------------------
================================================================================
Indice ciclo For
================================================================================
AUTORE: 2999
DATA :25/03/2010 - 08:52:32
----------------------------------------
Buongiorno a tutti, sono nuovo nel forum e volevo avere un vostro parere riguardo un programma che sto realizzando in università.
Vi cito brevemente il problema:
ho un SubVI nel quale vi è un [i:2r7btikg]for loop [/i:2r7btikg] e dal quale devo estrapolare l'indice [i:2r7btikg]i[/i:2r7btikg] per portarlo nel VI principale all'interno di un [i:2r7btikg]while loop[/i:2r7btikg]. Io avevo provato semplicemente a metterci un'indicatore sull'indice e a passarglielo come uscita ma purtroppo mi visualizza solo il valore dell'indice relativo all'ultimo ciclo effettuato. In altre parole quando lo faccio girare nel for loop vedo l'indice che varia mentre nel while loop del VI principale resta fermo all'ultimo valore.
Spero di essere riuscito a spiegarmi.
Grazie anticipatamente.
Emanuele
----------------------------------------
AUTORE: 482
DATA :25/03/2010 - 08:56:52
----------------------------------------
come lo passi il valore dell'indice del for al While loop?
Non puoi usare un filo, perchè un filo esce dal ciclo solo quando ha finito completamente il for.
Devi usare una variabile locale dell'indicatore e la crei clikkando col destro sull'indicatore e facendo "create local variable".
----------------------------------------
AUTORE: 2999
DATA :25/03/2010 - 09:14:54
----------------------------------------
Scusa la mia ignoranza ma se clicco con il destro sull'indice del for tutto quello che mi dice è create constant, control, indicator. Per creare una variabile locale prima li creo un'indicatore e poi lì con il tasto destro mi fa fare il cambio il local variable ma anche così non funziona.
----------------------------------------
AUTORE: 482
DATA :25/03/2010 - 09:51:16
----------------------------------------
L'indicatore pensavo l'avessi già infatti ti ho scritto difare tasto destro sull'indicatore.
Poi la variabile che hai creato la devi mettere nel ciclo while, clikkarci col destro fare "change to read" e da li collegarla a quello che ti interessa.
----------------------------------------
AUTORE: 2999
DATA :25/03/2010 - 10:36:52
----------------------------------------
ok, ho capito ma la local variable come faccio a dargliela nel while loop ovvero, io la creo nel SubVI dove ho il for ma come la trascino nel VI dove ho il While?
So che le domande potrebbero essere banali ma sto cercando di imparare
----------------------------------------
AUTORE: 482
DATA :25/03/2010 - 11:24:39
----------------------------------------
Sorry, errore mio, non avevo capito che l'indice era nel subvi.
Quindi diamo per scontato che il while loop e il subvi cmq girino in parallelo.
Allora non devi creare una variabile ma devi lavorare sulle reference.
Prendi un indicatore nel tuo while loop e col tasto destro crei una reference a questo indicatore.
Questa reference la passi in ingresso al subvi.
Dentro nel subvi dalal reference, crei un property node con la proprietà "value" e ci mandi in ingresso il valore della i.
----------------------------------------
AUTORE: 2999
DATA :25/03/2010 - 12:38:27
----------------------------------------
Ciao, io ho provato a fare così ma ancora non funziona sempre che abbia capito esattamente quello che intendevi dire
Adesso ti allego un esempio di quello che ho fatto seguendo le tue indicazioni così forse ci capiamo meglio.[attachment=1:2065jkrr]prova for.vi[/attachment:2065jkrr][attachment=0:2065jkrr]main.vi[/attachment:2065jkrr]
i due VI sono senza operazioni solo per capire il passaggio for loop==> while loop
Grazie
----------------------------------------
AUTORE: 1078
DATA :25/03/2010 - 13:12:38
----------------------------------------
C'eri quasi arrivato, anche se i reference vanno passati al for loop, guarda il mio esempio.
----------------------------------------
AUTORE: 2999
DATA :25/03/2010 - 15:18:34
----------------------------------------
C'ero quasi dai
Grazie mille adesso vedrò di continuare con il progetto.
Emanuele
----------------------------------------
================================================================================
Comunicazione RS-232 e multimetro KEITHLEY 2000
================================================================================
AUTORE: 3002
DATA :25/03/2010 - 16:44:39
----------------------------------------
Vi espongo subito quale sia il mio problema.Come da titolo, non riesco a comunicare con il multimetro.Uso labview vers 6i.Sono sicuro che la porta e il cavo, da me fatto, funzionino correttamente (dato che ho provato un programma scaricabile dal sito della keithley). Ho impostato rate, bits dati, bit di stop e no parity correttamente sia sulla porta che sullo strumento.
Ho scaricato anche il programma esempio dal sito della keithley valido per la vers 6i di labview(che aggiungo in allegato). Tale programma interroga il multimetro(tramite seriale) richiedendogli l'identification che dovrebbe venire scritto sul display. Purtroppo non è cosi. Non riesco proprio a capire dove sia il problema.
Grazie per l'aiuto
----------------------------------------
AUTORE: 15
DATA :25/03/2010 - 17:08:58
----------------------------------------
se hai a disposizione
due seriali,
o due porta seriale
o magari un "monitor" per seriali
oppure con opportuno collgamento dei fili fai un "loopback" e rileggi ciò che stai inviando con una sola porta seriale
a questo punto rileggi ciò che stai mandando con il programmino funzionante e confronta con l'esempio non funzionante
----------------------------------------
AUTORE: 3002
DATA :25/03/2010 - 17:35:48
----------------------------------------
Il mio strumento (il multimetro nn presenta 2 porte seriali), ma credo di poter ovviare a questo problema con un paio di fili (mi faccio un 'altra seriale e la metto nella com 2 del pc). In mancanza di altre soluzioni posso provare a vedere che cosa riceve il mio strumento e cosa mi manda indietro.
Grazie per ora del consiglio.
----------------------------------------
AUTORE: 15
DATA :25/03/2010 - 18:07:36
----------------------------------------
Sei sicuro che il programma Keinley funzioni in entrambe le direzioni?
il cablaggio della seriale può funzionare perfettamente in write ma essere sbagliato in read. a me capiò tempo fa e ci misi parecchio a capire cos'era.
----------------------------------------
AUTORE: 3002
DATA :25/03/2010 - 18:43:03
----------------------------------------
il programma keithley (che gira su windows e per intendersi nn è lab view) funziona cosi:
-scelgo la seriale per comunicare (com1 o 2)
- scelgo il baud e lo xon xoff
-apro la porta
-dopodiche posso sia scrivere sulla porta ( e quindi inviare una stringa allo strumento) che leggere quello che lo strumento mi "sputa"(ad esempio io leggo una tensione di dc).
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 06:22:12
----------------------------------------
OLA!
In primis:"Hai i driver VISA installati sul pc?", domanda tipica......
Quante volte mi è capitato di parlare con utenti che "hanno provato di tutto, ma NON FUNZIONA!".....poi si scopre che non avevano i VISA sul PC.....
In seconda battuta......hai LV 6.1?!?
se così non fosse, prova a riscriverti quel semplice vi con la versione che utilizzi tu, e metti qualche temporizzazione tra la scrittura e la lettura con lo strumento!
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 09:36:15
----------------------------------------
Intanto vi dico che mettere una seconda seriale nn serve dato che il programma dellakeithley nn mi permette di vedere cosa cerco di scrivere sulla porta seriale (insomma la prova proposta dall'utente ROM non funziona).
I driver VISA credo di averli installati (anche se nn ne sono sicuro).Come faccio a vedere se lo sono?
Comunque si ho la vers 6i di LB.
Specifico meglio :
il programma che ho allegato(e che è per la versione 6i di labview) mi invia tramite porta seriale il comando *IDN?. Sul reading buffer invece di leggere qualcosa del tipo nome strumento, numero modello etc rileggo *IDN? cioè quello che ho inviato.TUtto molto strano..
Grazie
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 09:57:27
----------------------------------------
tipicamente tutto ciò che riguarda i drivers Nat. lo trovi sotto il MAX.....
Temporizza i passaggi del programma!
scrivi [aspetta tot ms] leggi
Per assurdo potresti anche veramente leggere la stringa che hai inviato tu....
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 09:58:45
----------------------------------------
Ho notato un'altra cosa : col programma di labview dandogli un run continuously sullo strumento mi da error -363 (che corrisponde a Input buffer overrun) e error -350 (che corrisponde a queue overflow). Voglio precisare che ho controllato che la porta com1 abbia il software handshaking (cosi come lo strumento). Non è possibile impostare un hardware handshaking poichè il mio strumento ne è sprovvisto.
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 10:09:41
----------------------------------------
Scusate se tempesto questo thread, ma sempre dandogli run continuously alla fine mi da il seguente errore su labvie : error -1073807339 occured at VISA write in nome del programmadi labview. possible reaseon: visa
0xBFFF0015) timeout expired before operation completed.
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 10:16:16
----------------------------------------
se gli dai un run cont. il programma viene eseguito continuamente alla massima vel possibile ed ovviamente la seriale si riempie.
e' inutile che continui in quel modo, cerca anzi di effettuare una richiesta dando il tempo al controller seriale di inviare i dati e riceverli!
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 10:25:15
----------------------------------------
Mi sembra strano che la seriale si riempia visto la presenza del software handshaking. In ogni caso, stavo pensando potesse essere un problema di termination della riga di comando *IDN?. Non so come fare a impostare tramite labview il comando di termine (che sia CR, LF , CRLF o LFCR) quando invece sul programma della keithley veniva espressamente detto che tra una riga di comando e l'altra il programma metteva in automatico un LFCR.
Grazie infinite per la disponibilità
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 11:29:49
----------------------------------------
li dovrebbe mettere in autom.....
Tra il write ed il read, metti una funzione "bytes at serial port" e collega l'uscita al read, in questo modo vai a leggere il numero es di bytes di risposta (ora sono a dim fissa)....
sappi dire!
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 12:13:18
----------------------------------------
Dunque, ho fatto come hai detto..ho attaccato il reference al bytes at serial port e poi il bytes serial port l'ho attaccato al count bytes della funzione read visa. il risultato è che se mentre prima sul buffer read leggevo *IDN? (cioè il comando che inviavo) ora non piu. Ho fatto un 'altra cosa nel frattempo ho scaricato serial port monitor per vedere che cosa veniva scritto sulla porta seriale e cosa letto. Sulla porta riesco a scrivere e a leggere. Mi spiego meglio se io gli invio *IDN? (cioè scrivo) leggo sulla porta sempre *IDN?. Sembra che lo strumento nn riconosca il comando e quindi nn risponde al comando. Non so se sono fuori strada.
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 12:31:04
----------------------------------------
Già un passo avanti, no?!?
Hai provato a mandare altri comandi?!?
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 13:26:56
----------------------------------------
Mica tanto passo avanti...il problema è che con il programma della keithley il comando *IDN? funziona e leggo il nome dello strumento, numero di serie etc. Non riesco proprio ad arrivare ad una soluzione.
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 13:34:34
----------------------------------------
Aggiungi i caratteri di terminazione "a manazza".....
Non avendo uno strumento qui mi è difficile dirti cosa può essere.....
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 13:58:10
----------------------------------------
ho aggiunto i caratteri di terminazione..ecco quello ch mi da il pannello!! Come sempre mi restituisce il comando che invio..ho messo in allegato anche il programmino che ho scritto in labview per la scrittura/lettura su seriale. Dove sta l'inghippo??
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 14:26:35
----------------------------------------
se dovessi iniziare a fare un programma per com in seriale io comincerei in questo modo (tralascio la stringa da inviare e l'apertura porta....[attachment=0:25tk40bi]esempio.JPG[/attachment:25tk40bi]
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 14:49:25
----------------------------------------
Intanto grazie per il tempo che mi dedichi
ho fatto come avevi proposto te..ho inserito il tempo di attesa ed ho aggiunto la funzione bytes to serial ( con la quale ho verificato che scrivo 7 bytes= 1 per carattere quindi oltre ai 5 caratteri del comando *IDN? ci sono altri due caratteri che dovrebbero essere le terminazioni). Il problema è che mi restituisce sempre il comando..
Cosa diavolo manca ancora???
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 15:08:50
----------------------------------------
il bytes to serial port piazzato dopo il comendo write e prima del read, ti restituisce i bites che lo strumento ti sta inviando, non quelli che spedisci!
Nel manuale dello strumento hai una lista di altri comandi?
Ho come l'impressione che i drivers visa non siano installati sul tuo pc.....
Hai il max installato? (o qualcosa di simile?)
riesci a verificarlo?
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 16:21:36
----------------------------------------
si ho una lista di comandi..ho provato a dargliene altri ma mi restituisce quasi sempre init ignored..non ho niente con MAX..ho molte funzioni visa quindi penso che i driver siano installati.
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 16:34:39
----------------------------------------
purtroppo no, il fatto che tu abbia tante funzioni non significa che facciano chiamate a drivers non installati....
ti consiglio di scaricarti i driver ed installarli....altre idee non me ne vengono.....
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 16:46:20
----------------------------------------
Ho fatto progressi...ho provato a dare un comando tipo spengi il display dello strumento e lo ha eseguito..quindi, dimmi se erro, i driver dovrebbero essere installati. Adesso ho un 'altra certezza che la il pc riesce a scrivere sulla seriale e che il comando che invio viene ricevuto e capito dallo strumento( che esegue il comando , in questo caso spengendo il display). Resta da capire il perchè lo strumento nn riesce a scrivere sulla seriale e quindi perchè labview nn riesce a leggere quello che lo strumento scrive.
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 17:28:29
----------------------------------------
Buenos!
Si, dici bene, si parlano.....ora resta a te capire tutti gli altri "perchè"....
hai provato ad inserire altri termination char?
----------------------------------------
AUTORE: 3002
DATA :26/03/2010 - 18:42:54
----------------------------------------
si addirittura ho fatto questo..nel programma di labview ho scritto il comando senza termination char( per esempio il comando di spengimento) e il dispositivo si spenge ugualmente ( sullo strumento ho impostato come termination char crlf). Maremma miseria...non ne vengoa capo...
----------------------------------------
AUTORE: 301
DATA :26/03/2010 - 18:55:55
----------------------------------------
benvenuto ne mondo informatico!!!!
Sinceramente non ne ho la più pallida idea.....dovrei provare, ma non ho uno strumento come il tuo..
Sinceramente, dopo che ti sarai scornato un bel po, credo che dovresti provare una versione più recente del LV con pacchetto di drivers correlato, non vorrei che ad un certo unto ci fossero inspiegabili bachi con il sistema operativo e sw (LV o drivers) troppo obsoleti.....
Ma, sottolineo, sto già andando mooooolto oltre ai vari steps di risoluzione....
Auguri
----------------------------------------
AUTORE: 482
DATA :29/03/2010 - 07:36:58
----------------------------------------
A me sembra strana la scritta che gli mandi qual'e' la risposta che ti aspetti?
vista cosi' sembra la richiesta dell'indirizzo dello strumento pero' non saprei.
Fai una cosa, manda una copia della pagina del manuale dove c'e' descritto il comando che vuoi mandare, o dove c'e' spiegato il protocollo.
Secondo me è un problema di tipo di richiesta.
----------------------------------------
AUTORE: 3002
DATA :29/03/2010 - 14:36:50
----------------------------------------
eccomi qua di ritorno..grazie anche a te geppo!!!HO RISOLTO
ho provato a fare un altro cavo semplice semplice(solo i 3 cavi: trasmissione, ricezione e terra) e adesso il comando *IDN? (che richiede l'identificativo alla macchina) funziona. In questa maniera sono sicuro che :
1- il cavo faccia
2- la trasmissione da pc a strumento funzioni
3- lo strmuento riconosce il comando ed invia la risposta
4- la risposta viene correttamente inviata al pc e riconosciuta
Ora posso finalmente cominciare a programmare il multimetro
grazie per l'appoggio e la pazienza.Se avete bisogno di qls chiarimento io ci sono
----------------------------------------
================================================================================
tutorial
================================================================================
AUTORE: 2993
DATA :28/03/2010 - 13:14:00
----------------------------------------
Conoscete un link ad un tutorial su come funziona la porta sariale e su come si costruisce una comunicazione seriale con labview?
Grazie.
----------------------------------------
AUTORE: 1078
DATA :29/03/2010 - 07:38:16
----------------------------------------
Ciao maurifabi,
L'uso della parta seriale è un'argomento che è stato ampiamente trattato in questo forum, se cerchi Porta seriale, ti appariranno diversi post con problemi simili affrontati in molti modi, troverai anche vari esempi. Oltre a questo se cerchi "Serial port" o "COM port" nel find examples di LV troverai una miriade di esempi. Anche sul sito della NI trovi diversi documenti che trattano l'argomento, a tal proposito ti suggerisco di guardare questi articoli:
[url:3qnwtjf0]http://zone.ni.com/devzone/cda/tut/p/id/2897[/url:3qnwtjf0]
[url:3qnwtjf0]http://zone.ni.com/devzone/cda/tut/p/id/2895[/url:3qnwtjf0]
[url:3qnwtjf0]http://zone.ni.com/devzone/cda/tut/p/id/4049[/url:3qnwtjf0]
Normalmente comunque la comunicazione su porta seriale si esegue così:
1. Configuro la prota di comunicazione
2. Scrivo un comando seriale (il comando dipende dal protocollo di comunicazione dello strumento)
3. Flusho (non so se in italiano si scrive così) il comando in trasmissione in modo da essere sicuro che venga scritto sul buffer della seriale
in un preciso momento
4. Attendo qualche millisecondo (il tempo necessario allo strumento per recepire il comando)
5. Verifico se sono presenti byte sul buffer della porta
6. Leggo ciclicamente il contenuto del buffer della seriale
7. Svuoto il buffer della seriale (flushando il buffer in ricezione)
8. Chiudo i riferimenti alla porta di comuicazione
Alcuni passaggi possono essere saltati, classicamente si saltano i comandi di Flushing. Ma io prefirisco usarli in modo da essere sicuro del momento della scrittura dei comandi e del momento in cui il buffer torna vuoto.
Il tutto può essere inserito in un loop, ovviamente devi conoscere le tempistiche necessarie allo strumento prima di accettare un nuovo comando. Nel caso di un loop [i:3qnwtjf0][b:3qnwtjf0]scrivo comando - ricevo risposta,[/b:3qnwtjf0][/i:3qnwtjf0] ti consiglio di configurare la porta una volta sola (non è necessario configurare la porta prima di ogni scrittura) e di chiuderne il riferimento una volta terminata la comunicazione.
Spero di esserti stato utile e che la spiegazione sia sufficiente. Per ogni altro dubbio sul tuo software ti consiglio di postare un esempio.
Buona giornata e buon lavoro.
----------------------------------------
AUTORE: 2993
DATA :29/03/2010 - 18:01:09
----------------------------------------
Grazie. Cercherò di sviluppare uno per uno i punti che mi hai descritto.
Devo capire come realizzarli "in pratica", ma lo devo fare da solo...
Per quello che riguarda l'esempio, devo mandare via seriale ad uno strumento di misura, la stringa di comando
realizzata con il .vi che ho postato nel 3D intitolato "tipi misti", e leggere le risposte.
Lo strumento in questione è un tester di isolamento e rigidità elettrica, il cui nome di modello è quello del nome file.
Grazie ancora.
Maurizio.
----------------------------------------
AUTORE: 2993
DATA :29/03/2010 - 22:36:26
----------------------------------------
@ Ricky:
E' molto lontano lo schema del BD che allego, da ciò che intendevi nel tuo post?
----------------------------------------
AUTORE: 1078
DATA :30/03/2010 - 08:13:31
----------------------------------------
Ciao maurifabi,
Hai interpretato sufficientemente bene il mio post precedente, commettevi due errori fondamentali, uno è quello di flushare il buffer seriale per la ricezione prima di aver letto qualcosa; l'altro anche se meno grave, di flushare il buffer in scrittura prima di aver scritto qualcosa. Il flushing in ricezione non fa altro che garantire la lettura di tutti i byte svuotando il buffer, quello in scrittura ti garantisce l'istante in cui viene scritto il comando sul buffer. Ho modificati il tuo esempio e ho inserito una lettura del buffer più robusta, provalo e fammi sapere se funziona.... dovrebbe!
----------------------------------------
AUTORE: 2993
DATA :30/03/2010 - 18:19:48
----------------------------------------
Grazie mille. Posso provare se funziona solo al lavoro, quindi ti saprò ridire...
Intanto devo capire a cosa serve e come funziona tutto quello che hai aggiunto, anche perchè lo scopo principale di questo progettino è proprio IMPARARE!
Grazie ancora.
Maurizio.
----------------------------------------
AUTORE: 2993
DATA :01/04/2010 - 21:19:42
----------------------------------------
"[color=#FF0000:1dfb8gmw]Error -1073807202 occurred at Property Node (arg 1) in VISA Configure Serial Port (Instr).vi->Porta seriale forum.vi
Possible reason(s):
LabVIEW: (Hex 0xBFFF009E) VISA or a code library required by VISA could not be located or loaded. This is usually due to a required driver not being installed on the system.[/color:1dfb8gmw]"
@Ricky:
Ho provato la porta seriale che mi hai proposto: mi dà sempre il messaggio di errore che riporto sopra...
Ho tentato qualche piccola modifica al b.d. senza risultato...
Ho tentato con nessun dispositivo collegato, col dispositivo a cui è destinata e con un loopback trovato su internet (chiamato anche "tappo seriale", che consiste in un db9 collegato alla seriale con i pin 2-3, 4-5, 1-6-4 cortocircuitati), ma nulla...
sai darmi qualche suggerimento?
Scusa se approfitto della tua disponibilità e grazie.
Maurizio.
----------------------------------------
AUTORE: 2993
DATA :01/04/2010 - 21:24:19
----------------------------------------
Dimenticavo di dire che la porta è installata, i driver sono a posto, le impostazioni pure (uguali nel pc e nel file).
Dal messaggio sembra che non trovi le librerie dei codici delle funzioni sue (property note, configurazione porta, ecc.); ma non sono comprese in labview?
----------------------------------------
AUTORE: 482
DATA :02/04/2010 - 07:56:00
----------------------------------------
Hai copiato la cartella data nella setsa posizione dell'eseguibile?..non si sa mai...
----------------------------------------
AUTORE: 1078
DATA :12/04/2010 - 07:22:41
----------------------------------------
Dalla descrizione dell'errore mi sembra di capire che non hai installata la versione dei driver seriali corretta.
Prova a installare l'utlima versione disponibile dei driver visa, il problema dovrebbe risolversi.
[url:3plds6k7]http://zone.ni.com/devzone/cda/tut/p/id/11040[/url:3plds6k7]
----------------------------------------
AUTORE: 2993
DATA :12/04/2010 - 17:38:46
----------------------------------------
Si, grazie. Mancavano i driver, che pensavo fossero "incorporati" in labview essendo presenti le funzioni relative... non era così. Un'altra cosa imparata.
Scaricati ed installati sia i driver visa che seriali.
Funziona tutto. Almeno usando un loopback di prova. Resta da provare tutto sullo strumento a cui è destinato il programmino. Come porta seriale ho usato il vi propostomi da "ricky", al quale ho apportato alcune piccole modifiche per "adattarlo" alla perfezione al mio progettino (fatemelo chiamare cosi...). Posto il vi modificato, nel caso potesse servire a qualcuno, ed anche per avere commenti in merito a cio che ho "combinato".
Grazie ancora.
Maurizio.
----------------------------------------
================================================================================
ignorare eventi
================================================================================
AUTORE: 482
DATA :29/03/2010 - 13:46:17
----------------------------------------
...ma ciao!
ho una event structure che mi apre un subvi.
Se per caso l'utente fa doppio click sul tasto o ci clikka mentre il subvi è gia' aperto, appena chiudo il subvi, ecco che questo si riapre, perchè presumo che il case tenga in memoria le pressioni del tasto.
E' possibile fargli ignorare queste pressioni?
Vorrei evitare di far scomparire o diabilitar eil pulsante ogni volta.
----------------------------------------
AUTORE: 1078
DATA :29/03/2010 - 15:30:55
----------------------------------------
Hai provato a impostare il subVI come Modale. Se fai così l'utente non potrà cliccare in giro fino a quando non avrà chiuso la subVI. Altrimenti devi controllollare dai property node "All VI in memory" se l'FP del tuo VI è visibile, in quel caso devi ingorare l'evento... Basta inserire la chiamata in un select case etc, etc...
Buon lavoro!
----------------------------------------
AUTORE: 482
DATA :29/03/2010 - 15:41:45
----------------------------------------
non vale è un altro escamotage coem quello di rendere invisibile il pulsante.
Il problema è che se io clikko tre volte su quel pulsante PRIMA CHE IL SUBVI MI SI APRA (perchè ci mette un po' di tempo), anche chiudendo il subvi, mi si riaprirà per altre 2 volte consecutive.
----------------------------------------
AUTORE: 1078
DATA :29/03/2010 - 16:04:48
----------------------------------------
Allora, potresti bloccare il pulsante property node --> disabled = 1 o 2 dopo il primo click e riabilitarlo dopo che l'utente ha finito di utilizzare quel subVI....
Che cos'hai contro gli escamotage? Io li uso spesso, proprio il nascondere i pulsanti.... fa parte del gioco, no?
----------------------------------------
AUTORE: 482
DATA :29/03/2010 - 16:16:28
----------------------------------------
non ho niente, pero' mi pareva di ricordare che c'era da qualche parte una spunta apposta per dirgli di ignorare gli eventi in coda e tenere buoni solo quelli che becca in diretta...forse è qualcosa legato all'evento timeout (che adesso non uso)?
----------------------------------------
AUTORE: 482
DATA :30/03/2010 - 09:54:28
----------------------------------------
Niente d afare, anche usando la prorietà disable e anche addirittura usando la visible, il problema permane.
Se io faccio due o 3 click uno in fila all'altro mi apre la finestra piu' volte di seguito..ppff...
----------------------------------------
AUTORE: 43
DATA :30/03/2010 - 10:29:49
----------------------------------------
[quote="gepponline":27jpkad0]Niente d afare, anche usando la prorietà disable e anche addirittura usando la visible, il problema permane.
Se io faccio due o 3 click uno in fila all'altro mi apre la finestra piu' volte di seguito..ppff...[/quote:27jpkad0]
CRAXXO GEPPO!!!!!
[attachment=0:27jpkad0]ignora eventi1.vi[/attachment:27jpkad0]
LE ELABORAZIONI "PESANTI" VANNO FATTE FUORI DALL' "EVENT CASE"!!!!!!!!
bye
----------------------------------------
AUTORE: 482
DATA :30/03/2010 - 10:40:11
----------------------------------------
si ma io non ho un solo evento ma tanti eventi e per ogni evento c'e' la sua "elaborazione pesante", mi torverei con un bel event e fuori dall'event un sacco di case che non vengono eseguiti...
Alla fine è una gestione di eventi.
Se c'e' questo evento faccio questa cosa, indipendentemente da quello che devo fare.
è comodo come concetto ed è comodo a livello grafico, non capisco perchè mai una volta entrato nell'evento non si possa ignorare quello che succede fuori, visto che c'e' anche l'opzione di bloccare il front panel mentre sono nell'evento.
Nelel occorrenze c'e' la voce che permette di fare "ignore previous"...
----------------------------------------
AUTORE: 43
DATA :30/03/2010 - 11:12:19
----------------------------------------
[quote="gepponline":6yuhtdyy]si ma io non ho un solo evento ma tanti eventi e per ogni evento c'e' la sua "elaborazione pesante", mi torverei con un bel event e fuori dall'event un sacco di case che non vengono eseguiti...[/quote:6yuhtdyy]
Falso. Puoi avere un unico case che elabora tutte le possibili varianti (al pari dell'event case stesso) ed al termine riabilita i tasti in funzione dell'esito dell'elaborazione dentro il case.
[quote="gepponline":6yuhtdyy]Alla fine è una gestione di eventi.[/quote:6yuhtdyy]Appunto
[quote="gepponline":6yuhtdyy]Se c'e' questo evento faccio questa cosa, indipendentemente da quello che devo fare.
è comodo come concetto ed è comodo a livello grafico, non capisco perchè mai una volta entrato nell'evento non si possa ignorare quello che succede fuori, visto che c'e' anche l'opzione di bloccare il front panel mentre sono nell'evento.[/quote:6yuhtdyy]
Vedi proprio non hai capito il concetto.
l'opzione "Lock Front Panel until the event case for this event completes" non blocca la generazione degli eventi ma il Front panel, per cui, se per prima cosa disabiliti un tasto, questa operazione verrà portata a termine quando TERMINA l'esecuzione del case (il controllo o icona del tasto premuto DEVE essere inclusa nel event case del corrispondente value change comunque dato che si tratta di un Latch When Release...)
Quindi se vuoi gestire il malloppone DENTRO l'event case, allora DEVI [u:6yuhtdyy]togliere la spunta[/u:6yuhtdyy] a Lock Front Panel.... e disabilitare
il tasto (o i tasti) appena entri nell'event case
[quote="gepponline":6yuhtdyy]Nelel occorrenze c'e' la voce che permette di fare "ignore previous"...[/quote:6yuhtdyy]vabbè ma questa è una gestione di un singolo evento....
bye
----------------------------------------
AUTORE: 482
DATA :30/03/2010 - 11:32:44
----------------------------------------
Si occhei, il fattio è che io non è che non so come risolvere il mio problema.
Io loso benissimo come fare pero' mi sarebbe tanto piaciuto e non mi sembar una cosa cosi' strana, avere una spunta tipo:
Ignora eventi generati da questo oggetto mentre ne stai già processando uno
Io adesso ho nei mei vari eventi dei case gestiti da dei booleani, ora mi tocca trasformare quei booleani in dei nuemrici o ring o qualsiasi altra cosa per poi processarli fuori e sta cosa mi fa girare le palle, il tutto solo perchè ho un subvi che ci mette quei 500 msec di troppo ad aprirsi e quindi l'utente fa in tempo a cliccarci una seconda volta...pppfff
----------------------------------------
AUTORE: 1078
DATA :30/03/2010 - 11:43:39
----------------------------------------
Mai sentito parlare di Producer e Consumer? Se hai calcoli e codice pesante da eseguire è il sistema migliore di eseguire le funzioni, sei anche slegato dall'interfaccia grafica.....
----------------------------------------
AUTORE: 43
DATA :30/03/2010 - 11:45:53
----------------------------------------
[quote="gepponline":ux8fxm0v]...
Io adesso ho nei mei vari eventi dei case gestiti da dei booleani, ora mi tocca trasformare quei booleani in dei nuemrici o ring o qualsiasi altra cosa per poi processarli fuori e sta cosa mi fa girare le palle, il tutto solo perchè ho un subvi che ci mette quei 500 msec di troppo ad aprirsi e quindi l'utente fa in tempo a cliccarci una seconda volta...pppfff
[/quote:ux8fxm0v]
no. I case con i booleani li lasci. dentro l'event case dei booleani metti una costante enumerata diversa che esce dall'event case e entra nel selettore del case esterno...
bye
----------------------------------------
AUTORE: 482
DATA :30/03/2010 - 13:06:13
----------------------------------------
si, il mio trasformare era per dire che non faccio piu' uscire il booleano ma un numerico.
Fattao sta che la soluzione che pensavo esserci, non esiste...ppff...
----------------------------------------
AUTORE: 838
DATA :02/04/2010 - 07:35:45
----------------------------------------
esiste una funzione all'interno dell'event case che è il discard, che teoricamente dovrebbe scartare gli eventi accumulati
provato più volte non ci sono mai riuscito
io ho risolto nel mettere in un ciclo parallelo velocissimo (pochi ms) con solo la event, che con l'evento x alza una booleana che nell'altro ciclo fa partire il vi
all'uscita del vi, resetto questa variabile, così, anche se nel frattempo la event l'ha settata x volte, me la ritrovo in uscita sempre false
prova, dovrebbe andare
----------------------------------------
AUTORE: 482
DATA :02/04/2010 - 07:54:17
----------------------------------------
Avevo trovato qualcosa di simile ma era presente solo negli eventi..mmhh..come si chiamano...quelli con la freccetta rossa!...ppf...vabbhè, quelli.
L'ho provata ma non faceva quello che volevo.....o non ho capito come funziona o non serve per quello che voglio fare io.
Io facevo doppio click e anche se settavo il discard, mi veniva comunque ripetuto l'evento.
----------------------------------------
================================================================================
Estrarre l0indice N da un ciclo for
================================================================================
AUTORE: 2955
DATA :29/03/2010 - 15:33:41
----------------------------------------
Buonpomeriggio,
Sono un neo utilizzatore di labview 8.2, vorrei chiedere se qualcuno sa darmi una risposta al mio problema.
Io ho un vi molto corposo ho bisogno di vedere l'evoluzione del processo quindi riprodurre una situazione simile a quando si attiva la funzione hightlight execution in modo tale che i cicli for vengono eseguiti per tutti gli elementi e non come avviene mi forniscano a video il risultato dell'ultima operazione, ho pensato ad una soluzione che inserisce un ciclo for in un ciclo while in modo che il ciclo venga ripetuto ogni volta fino a che non si raggiunge la lunghezza massima dell'array per farev questo devo confrontare la lunghezza dell'array con il numero di operazioni fatte dal ciclo for quindi devo estrarre il valore N dal ciclo.
Ringrazio anticipatamente per la risposta ;
----------------------------------------
AUTORE: 1078
DATA :29/03/2010 - 16:11:08
----------------------------------------
Ciao Davide_1,
[quote="Davide_1":l02f6s2t]di vedere l'evoluzione del processo quindi riprodurre una situazione simile a quando si attiva la funzione hightlight execution in modo tale che i cicli for vengono eseguiti per tutti gli elementi e non come avviene mi forniscano a video il risultato dell'ultima operazione[/quote:l02f6s2t]
Probabilmente hai messo il controllo che visualizza quello che sta succedento all'esterno del ciclo for (ecco perchè visualizzi l'ultimo valore. Prova ad inserire il tuo controllo all'interno del ciclo for, vedrai che cambierà ad ogni esecuzione del ciclo.
[quote="Davide_1":l02f6s2t]ho pensato ad una soluzione che inserisce un ciclo for in un ciclo while in modo che il ciclo venga ripetuto ogni volta fino a che non si raggiunge la lunghezza massima dell'array per farev questo devo confrontare la lunghezza dell'array con il numero di operazioni fatte dal ciclo for quindi devo estrarre il valore N dal ciclo.[/quote:l02f6s2t]
Non si capisce molto bene cosa intendi fare. Non potresti essere un pochino più chiaro? Se hai un esempio, postalo, così possiamo cercare di capire cosa stai cercando di fare e cosa vuoi ottenere!
----------------------------------------
AUTORE: 2955
DATA :30/03/2010 - 14:35:46
----------------------------------------
Ti ringrazio per la risposta , ti spiego meglio il mio problema, il mio programma funziona in modo tale che una volta inseriti i dati essi vengono diagrammati ma un certo numero di questi devono essere ciclati per poter vedere gli stati della macchina durante l'elaborazione. Solo che il ciclo avviene in un tempo troppo veloce e questo comporta che mi visualizza a schermo solo l'ultimo valore del ciclo. Devo dire anche che il file che vado elaborare rappresenta una rillevazione secondo x secondo dello stato della macchina quindi analizzo all'incirca 3600 array . Quindi il mio problema è quello di generare un for rallentato che mi permetta di analizzare ogni valore quindi generare lo stesso stato di elaborazione che si ottiene attivando hightlight execution.
----------------------------------------
AUTORE: 1078
DATA :31/03/2010 - 14:36:10
----------------------------------------
Per realizzare un ciclo for rallentato è sufficiente inserire all'interno del tuo ciclo for un wait time con un tempo sufficiente alla visualizzazione dei valori. Trovi le funzioni di temporizzazione nella Functions palette --> Programming --> Timing
----------------------------------------
AUTORE: 645
DATA :01/04/2010 - 11:12:06
----------------------------------------
Vediamo se ho capito... Tu analizzi una macchina (o comunque uno strumento esterno) acquisendo dati relativi al funzionamento. Vuoi analizzare i dati e quando trovi qualcosa che non va devi fare indagini più approfondite sui dati riguardanti il malfunzionamento.
Due indicazioni:
a) se vuoi visualizzare i dati puoi rallentare i cicli nel caso ci siano problemi; in pratica se ti trovi in situazioni problematiche puoi attivare il delay all'interno del ciclo;
b) se invece vuoi gestire situazioni particolari (per esempio allarmi) puoi continuare a lavorare con i cicli a velocità normale, senza dover visualizzare tutti i punti e lasciando al VI il compito di elaborare i risultati.
----------------------------------------
================================================================================
generare onda sinusoidale
================================================================================
AUTORE: 3006
DATA :30/03/2010 - 18:04:19
----------------------------------------
Salve, sono alle prime armi con Labview, e per prendere familiarità sto cercando un po di esercizi qua e là in internet.
In particolare mi sono fermato su questo:
http://www.itisnobili.org/MATERIALI_DID ... ni_III.pdf
Si tratta di generare un segnale sinusoidale per via matematica, senza usare il relativo blocco a disposizione.
Allego il file .VI di quello che ho fatto... se qualcuno ha voglia di darmi una mano gli sarei molto grato
----------------------------------------
AUTORE: 1078
DATA :31/03/2010 - 10:47:57
----------------------------------------
Ciao, vedi se questo può aiutarti....
----------------------------------------
AUTORE: 3006
DATA :31/03/2010 - 12:38:46
----------------------------------------
Continua ad esserci qualcosa che non torna.
Devo mandare alla funzione seno dei valori in radianti, ottenibili con quella formula data anche nel testo (che hai usato anche te nell'esempio), ed inserire il tutto in un ciclo while affinchè il tutto venga generato di continuo finche non si prema il pulsante stop.
Ho provato a togliere la funzione randon numbers, e mandare direttamente al blocco seno il valore in radianti, ma esce fuori una sorta di onda smorzata!
----------------------------------------
AUTORE: 43
DATA :31/03/2010 - 14:00:32
----------------------------------------
Questo è il VI totalmente generalizzato
[attachment=0:2iq4smiz]SinWaveGen.vi[/attachment:2iq4smiz]
Numeric = N. di punti da generare
Numeric 2 = Start phase (fase iniziale in radianti)
Numeric 3 = Step Increment (incremento in radianti)
Numeric 4 = Amplitude (ampiezza - fattore moltiplicativo)
Numeric 5 = Offset
bye
----------------------------------------
AUTORE: 1078
DATA :31/03/2010 - 14:01:05
----------------------------------------
Proviamo così..... Il VI che sto postando genera una sinusoide in modo continuo, se non ho capito male è quello che ti serve. Altrimenti dovresti provare a spiegarti meglio.
----------------------------------------
AUTORE: 3006
DATA :31/03/2010 - 14:38:28
----------------------------------------
ricky, è esattamente quello che mi serve!
non capisco però un paio di cose:
il blocco double precision è indispensabile?
ho provato a spostare i blocchi delle costanti numeriche all'interno del ciclo, e non mi sembra cambi nulla... dov'è la differenza tra metterli fuori e dentro?
grazie infinite per l'aiuto!
----------------------------------------
================================================================================
Inizializzazione continua dentro il case structure
================================================================================
AUTORE: 2999
DATA :31/03/2010 - 11:54:30
----------------------------------------
Buon giorno a tutti,
il mio problema è il seguente:
ho un VI principale dove vi sono i miei controlli di frequenza, ampiezza, ecc e vi sono inoltre dei SubVI. Uno di questi SubVI contiene un ciclo for e ha al suo interno un'altro SubVI che presenta una case structure dove in ingresso gli fornisco i controlli dal main. il problema è che quando guardo il front panel del SubVI con il case structure vedo i valori dei controlli che oscillano tra il valore di default e quello impostato nel main.
perchè non restano fissi al valore che impongo io dal main principale?
Spero di essermi spiegato abbastanza bene da farvi capire il problema
Grazie a tutti
Emanuele
----------------------------------------
AUTORE: 1078
DATA :31/03/2010 - 12:10:27
----------------------------------------
Perchè non posti il tuo VI o qualcosa che gli assomiglia così possiamo aiutarti meglio. Probabilmente richiami lo stesso VI più volte, continuando a passargli valori diversi. Oppure hai degli shift register che vengono costantemente inizializzati quando non dovrebbere essere inizializzati. Oppure è sufficiente eliminare la spunta di inizializzare i controlli ogni volta che viene richiamato il VI.... possono essere tante le cause, posta il tuo esempio: è meglio!
----------------------------------------
AUTORE: 2999
DATA :31/03/2010 - 12:33:30
----------------------------------------
come faccio a eliminare l'auto inizializzazione dei controlli? nel caso non funzioni vedrò di postare l'esempio ma è molto corposo
----------------------------------------
AUTORE: 482
DATA :31/03/2010 - 12:43:52
----------------------------------------
Usa la forza luke!!
estrapola solo l'ultimo subvi ed elimina tutto il resto, aggiungi solo le cose fondamentali per riprodurre il funzionamento.
----------------------------------------
AUTORE: 2999
DATA :31/03/2010 - 13:24:44
----------------------------------------
Siccome è veramente corposo cerco di realizzarne uno simile ma meno complesso e lo posto quanto prima.. nel frattempo se avete idee dite pure
Grazie
----------------------------------------
AUTORE: 43
DATA :31/03/2010 - 13:44:39
----------------------------------------
[quote="Emish":18j9dpdh]Siccome è veramente corposo cerco di realizzarne uno simile ma meno complesso e lo posto quanto prima.. nel frattempo se avete idee dite pure
Grazie[/quote:18j9dpdh]
secondo me , in questo specifico caso non è necessario postare alcunchè.
Si sta parlando del normale funzionamento di un subVI.
In particolare quei controlli che da Front Panel che sono definiti come "parametri" di ingresso alla funzione, hanno un valore di default che è fondamentale per stabilire il comportamento di una funzione (o subVI).
I parametri della funzione (subVI) possono essere di 3 tipi: Required, Recommended, Optional (controlli - input) oppure Recommended, Optional (indicatori output). Di default i parametri sono di tipo Recommended.
Rimando alla lettura dei manuali per un dettaglio maggiore.
Cmq sia, Required a parte, gli input di una funzione possono essere collegati o meno al momento della chiamata.
E' essenziale sapere quale valore di default venga assunto da ogni ingresso della funzione per capirne il funzionamento, tanto che consiglio di indicare sempre fra parentesi tonde () il valore di default di ogni parametro in input.
Ad ogni chiamata viene eseguita una "reinit all to default" e vengono caricati nei controlli solo i valori che vengono effettivamente passati.
Diverso è il caso di quando viene eseguito dinamicamente un VI (Metodo "Run VI") che di fatto simula la pressione del tasto Run (freccia di esecuzione)...
Cmq sia è implicito nel meccanismo di "call" l'esecuzione di una "Reinit all to default"
bye
----------------------------------------
AUTORE: 482
DATA :01/04/2010 - 07:37:23
----------------------------------------
Si ma se sti valori glieli passa sempre da main, non dovrebbero reinizializzarsi.
A meno che.....
Non è che hai messo il tuo subvi anche da qualche altra parte del main che viene eseguito in contemporanea, senza collegargli gli ingressi?
In questo caso tu vedresti i valori che variano perchè vedresti una volta l'esecuzione con i valori passati dal main e subito dopo l'esecuzione del subvi senza valori passati.
Per verificare se ne hai in giro un altro, che magari hai piazzato per sbaglio, clicca sul subvi, poi con ctrl+F trovi tutte le istanze di quel subvi.
----------------------------------------
AUTORE: 43
DATA :01/04/2010 - 08:46:07
----------------------------------------
[quote="Emish":33vfoh6k]come faccio a eliminare l'auto inizializzazione dei controlli? nel caso non funzioni vedrò di postare l'esempio ma è molto corposo
[/quote:33vfoh6k]
2 possibilità:
- non eseguire una "call" al subVI ma caricato in memoria esegui il subVI con il metodo Run VI.
Cio può risultare inutilmente complicato
- usi shift register.
Se non ti interessa avere un valore noto a priori, sia esso il default di un parametro in ingresso oppure no, per conservare in una variabile il valore assunto dall'ultima chiamata si utilizzano shift register che ovviamente non devono essere inizializzati. Gli shift register sono gli equivalenti delle variabili "static" del linguaggio C, cioè sono variabili statiche che conservano il loro valore tra una chiamata e la successiva.
bye
----------------------------------------
AUTORE: 2999
DATA :01/04/2010 - 09:05:27
----------------------------------------
grazie a tutti adesso mi metto al lavoro e vi farò sapere qualcosa al più presto!
----------------------------------------
AUTORE: 2999
DATA :01/04/2010 - 15:59:24
----------------------------------------
Risolto grazie a tutti
----------------------------------------
AUTORE: 482
DATA :02/04/2010 - 07:56:48
----------------------------------------
grazie....qual'era il problema?
----------------------------------------
AUTORE: 43
DATA :02/04/2010 - 19:26:56
----------------------------------------
[quote="gepponline":dbxtgg5n]grazie....qual'era il problema?[/quote:dbxtgg5n]
Abbozzo un'ipotesi.
Con un cut & paste o trascinando l'icona della chiamata a subVI (tenendo premuto Ctrl) ha duplicato la chiamata stessa dentro lo stesso loop
Oppure ci sono 2 loop in parallello che fanno la stessa chiamata a subVI.
Il punto è che la chiamata non voluta non ha gli ingressi collegati hai controlli o a valori costanti magari la chimata è nascosta in modo non visibile dentro un case... o nel loop stesso.
Aprendo il FrontPanel del subVI vede eseguire chiamate che si alternano: una con passaggio di parametri l'altra no.
Cmq sia, ha risolto il problema cercando tutti i puntim in cui viene effettuata la chiamata.
bye
----------------------------------------
AUTORE: 43
DATA :02/04/2010 - 19:47:40
----------------------------------------
[quote="gepponline":20e6n6pa]grazie....qual'era il problema?[/quote:20e6n6pa]
Correggo l'ipotesi.
Ha duplicato la chiamata sovrapponendo le icone.
bye
----------------------------------------
AUTORE: 482
DATA :06/04/2010 - 07:29:35
----------------------------------------
EH, ma siccome quella er al'ipotesi che avevo fatto anche io, vorrei capire...ma mi sa che questo è un altro che prende cio' che gli serve e se ne va
----------------------------------------
================================================================================
Tutorial sui sistemi di controllo
================================================================================
AUTORE: 645
DATA :02/04/2010 - 14:24:59
----------------------------------------
Forse l'avete già incontrata... Vi segnalo la pagina http://zone.ni.com/devzone/cda/tut/p/id/6368
un punto di partenza per lo studio dei sistemi di controllo con LabView
----------------------------------------
================================================================================
Aggiornamento software condiviso
================================================================================
AUTORE: 482
DATA :02/04/2010 - 14:49:07
----------------------------------------
...ma ciao!
ho un software in una cartella condivisa.
Diversi utenti dovranno usare questo software.
Fino a pochi minuti fa, lo usavano in 2, vicino a me di scrivania, quindi gli chiedevo di uscire dal programma e sostituivo l'eseguibile.
Ora ho messo un controllo in polling nel software che verifica la presenza di un certo file nella cartelal condivisa, se c'e' quel file, spunta un popup che dice che c'e' un aggiornamento in corso e dopo un po' chiude l'applicazione, cosi' io posso fare il mio copia e incolla e sovrascrivere il vecchio eseguibile con il nuovo.
Resta il problema che se qualcuno si incaponisce e continua a lanciare l'eseguibile anche se gli si richiude subito, rischio di non poter fare l'installazione.
Cmq diciamo che fino ad adesso ho usato questa strada perchè mi faceva comodo usare un solo eseguibile per tutti.
Quali altre soluzioni mi consigliate?
----------------------------------------
AUTORE: 43
DATA :02/04/2010 - 19:44:54
----------------------------------------
[quote="gepponline":21usb14p]...ma ciao!
ho un software in una cartella condivisa.
Diversi utenti dovranno usare questo software.
Fino a pochi minuti fa, lo usavano in 2, vicino a me di scrivania, quindi gli chiedevo di uscire dal programma e sostituivo l'eseguibile.
Ora ho messo un controllo in polling nel software che verifica la presenza di un certo file nella cartelal condivisa, se c'e' quel file, spunta un popup che dice che c'e' un aggiornamento in corso e dopo un po' chiude l'applicazione, cosi' io posso fare il mio copia e incolla e sovrascrivere il vecchio eseguibile con il nuovo.
Resta il problema che se qualcuno si incaponisce e continua a lanciare l'eseguibile anche se gli si richiude subito, rischio di non poter fare l'installazione.
Cmq diciamo che fino ad adesso ho usato questa strada perchè mi faceva comodo usare un solo eseguibile per tutti.
Quali altre soluzioni mi consigliate?[/quote:21usb14p]
Ma scusa!
In Azienda si usano vari SW tra cui cacca-MS-Office, Antivirus, ecc, ma sono tutti, per totalità dei casi, installati "localmente" su ogni PC. Anche quando l'applicazione è in rete ed è comune, richiede sempre una installazione locale...
Così dovresti fare Tu.
Con il polling avverti l'utente che è disponibile una nuova versione che verrà installata su esplicita conferma dell'operatore. Se vuole tenersi la versione vecchia che si arrangi!!!
Guarda che questo genere di implementazioni non è poi così complicato...
Cmq la soluzione sta nel fatto che devi fare il SW meno bacato
, e rilasciare meno versioni!!
bye
Buona Pasqua a Tutti!!!!!
----------------------------------------
AUTORE: 482
DATA :06/04/2010 - 07:34:22
----------------------------------------
[quote="paracarro":1z9gvm5a]
Cmq la soluzione sta nel fatto che devi fare il SW meno bacato
, e rilasciare meno versioni!!![/quote:1z9gvm5a]
Impossibile! mi diverto cosi' tanto a crare gli eseguibili che ne faccio uno ad ogni modifica e quindi poi lo correggo
A parte gli scherzi, mi piacerebbe molto rilasciare una versione definitiva, ma è un software con funzionalità ON DEMAND, ongi tre per due agli utenti viene in mente una nuova minchiata che potrebbe fare questo software e quindi, via di modifiche...quindi il problema è che è un software nato senza che si sapesse cosa doveva fare
Stavo valtando effettivamente l'ipotesi di distribuirlo in locale con controllo di aggiornamento all'inizio del programma.
Alla fine averlo condiviso torna comodo solo quando sono in fase di test.
QUindi chiedo, per chiudere il vi che sto eseguendo e continuare con un altro, cosa mi conviene fare? Lancio dinamico? Esecuzione di riga di comando?
----------------------------------------
AUTORE: 645
DATA :06/04/2010 - 10:44:52
----------------------------------------
[quote="gepponline":1w1vzoph]... è un software con funzionalità ON DEMAND, ongi tre per due agli utenti viene in mente una nuova minchiata che potrebbe fare questo software ...[/quote:1w1vzoph]
Sicuramente volevi dire che è un programma aperto a successive personalizzazioni e dotato di caratteristiche mutevoli nel tempo a favore dell'utente finale, caratteristiche atte a soddisfare un ampio ventaglio di richieste per divenire sempre più performante e user friendly.
Anche io farei come Paracarro: tu preparare di volta in volta gli eseguibili e poi avverti gli utenti che c'è una nuova versione.
Eventualmente puoi inserire qualcosa nel codice che rende obbligatorio l'aggiornamento: so che è una soluzione più brutta di quelle presentate ma prendo spunto da programmi che usiamo in laboratorio... Spesso esce una versione nuova del software e noi veniamo avvisati tramite email. Spesso le librerie nuove sono molto simili a quelle precedenti ma richiedono per forza l'ultima versione del software.
----------------------------------------
AUTORE: 482
DATA :08/04/2010 - 10:36:40
----------------------------------------
[quote="MagicBotolo":11ej39e6]Spesso esce una versione nuova del software e noi veniamo avvisati tramite email[/quote:11ej39e6]
Ecco, diciamo che vorrei evitare questo passaggio e fare tutto in automatico.
Praticamente metto all'avio del software un controllo che verifica se cisono aggiornamenti e s ecisono chiede se si vuole aggiornare.
Se la risposta è NO, si va avanti e non ci sono problemi.
Se la risposta è SI, devo far chiudere l'eseguibile e farne partire un altro che sostituisce quello vecchio con quello nuovo.
Comelo faccio sto passaggio? Cio' come faccio a far chiudere se stesso e lanciare un altro eseguibile dal mio programma?
----------------------------------------
AUTORE: 645
DATA :08/04/2010 - 11:10:36
----------------------------------------
E se invece fai il contrario?
Il nuovo eseguibile lo chiami in un modo diverso (per esempio aggiungendo la data e l'ora), avvi il nuovo eseguibile dal VI in funzione (quello da aggiornare), il nuovo eseguibile chiude il VI in funzione (io non sono molto pratico ma mi sembra che si possa creare un elenco dei VI in funzione e lavorare su questi) e poi parte l'aggiornamento.
Al termine dell'aggiornamento il VI installato dovrà avere lo stesso nome del VI precedentemente in funzione per evitare problemi fraintendimenti con i nomi (questo passaggio non so bene come si faccia... Non sono molto pratico con i VI autoinstallanti... sempre che si tratti di un VI autoinstallante...).
----------------------------------------
AUTORE: 482
DATA :08/04/2010 - 13:10:14
----------------------------------------
Diciamo che la sostituzione dell'eseguibile è il minore dei problemi perchè faccio una copia del nuovo eseguibile e la incollo al posto del vecchio.
Il problema adesso è:
1) come faccio a far chiudere un programma da un altro programma? uso una riga di comando o che altro?
2) E' possibile vedere la versione di un eseguibile dall'esterno? Perchè senno' come faccio a sapere se il file è già stato aggiornato o meno? Non voglio usare dei nomi diversi ogni volta perchè senno' si sputtanano i vari link che gli utenti si mettono sul desktop o altrove.
----------------------------------------
AUTORE: 482
DATA :09/04/2010 - 11:32:45
----------------------------------------
Vabbhè il punto due l'ho risolto.
Faccio un confronto di versione dell'eseguibile e se in remoto vedo che c'e' una versione piu' aggiornata chiedo se si vuole fare l'aggiornamento.
Il problema del chiudere l'eseguibile e lanciarne in automatico un altro persiste.
L'idea è:
apro un eseguibile
chiudo il programma
l'eseguibile che ho lanciato mi fa la sostituzione dell'eseguibile vecchio con quello nuovo.
dite che è corretta come procedura?
----------------------------------------
================================================================================
USB camera
================================================================================
AUTORE: 2889
DATA :04/04/2010 - 17:53:43
----------------------------------------
Salve,
è la prima volta che scrivo su questo forum.
Ho scaricato una versione prova (30 giorni) di Labview 2009 (che tra l'altro sta per scadere, quindi please rispondete...
). Penso di aver installato la versione completa, quindi tutti i SW.
Allora, da vari link (messi in fondo alla pagoina) dovrei dedurre che posso usare la mia USB web cam per acquisire immagini. Ma non mi viene riconosciuta.
Le domande che sono:
1- come faccio a vedere se ho installato (come credo di aver fatto), il modulo di Acquisizione(cioè che cartella installa sotto C:)?
2- perchè non mi riconosce la USB web cam?
3 - il SW "ni_imaq_usb_installer_86.exe" non mi isntalla praticamente nulla, qualcuno sa dirmi di più?
Idee sono ben accette.
p.s.: lo scopo è acquisire con la mia web cam una immagine e poi elaborarla. La parte di elaborazione è stata fatta. Manca la parte di acquisizione....
Ecco i link di cui vi parlavo all'inizio:
http://digital.ni.com/public.nsf/websea ... enDocument
http://zone.ni.com/devzone/cda/epd/p/id/5030
http://decibel.ni.com/content/docs/DOC-3928
http://ftp.ni.com/support/softlib/visio ... notes.html
http://zone.ni.com/devzone/cda/tut/p/id/2977
----------------------------------------
AUTORE: 482
DATA :06/04/2010 - 07:27:57
----------------------------------------
Per utilizzare dell'hardware devi installarti l'NI Measurement & Automation Explorer, detto MAX, piu' i vari driver per l'hardware tra cui i driver USB.
Nel tuo caso, ti servirebbe solo la parte vision dei driver, che puoi trovare anche quella sul sito della National credo.
----------------------------------------
AUTORE: 2889
DATA :08/04/2010 - 15:57:18
----------------------------------------
Molte grazie. In realtà ho installato tutto l'installabile, ma ricontrollerò anche tali drivers. Credo che uno dei problemi è che nella schermata del MAX non mi viene visualizzata la parte (come appreso da alcune immagini in internet) relativa agli strumenti USB. Come se non avessi strumenti USB attaccati o cose del genere. Mi sembra di aver visto che altri hanno avuto lo stesso problema ma non ho avuto tempo di investigare.
----------------------------------------
================================================================================
Icone e oggetti personalizzati
================================================================================
AUTORE: 645
DATA :06/04/2010 - 10:36:13
----------------------------------------
Vi segnalo questo link http://decibel.ni.com/content/docs/DOC-9921
riguardante gli oggetti "System" da utilizzare nei VI per richiamare grafica normalmente utilizzata.
Nella pagina viene indicato anche il sito http://openiconlibrary.sourceforge.net/ dove trovare alcune icone.
----------------------------------------
AUTORE: 838
DATA :06/04/2010 - 11:06:41
----------------------------------------
bello, grazie della segnalazione
----------------------------------------
================================================================================
Problemi con tdms
================================================================================
AUTORE: 2864
DATA :07/04/2010 - 15:03:48
----------------------------------------
Sto acquisendo dati da un processo e li sto memorizzando in tdms, sono sequenza brevi che durano massimo un paio di minuti.
Quando vado poi a visualizzare i dati con tdms viewer vedo che la scala dei tempi è stravolta, un paio di minuti vengono riportati nella scala dei tempi come oltre una decina di ore.
Uso una timed loop ed il periodo di campionamento è 100Hz
----------------------------------------
AUTORE: 1078
DATA :04/05/2010 - 08:56:01
----------------------------------------
ci posti un'immagine del software di salvataggio?
----------------------------------------
================================================================================
Chiudere l'anello via seriale
================================================================================
AUTORE: 482
DATA :07/04/2010 - 15:34:00
----------------------------------------
...ma ciao!
sto pilotando un pistone idraulico con un uscita analogica e una retroazione data da una cella di carico che vado a leggere via seriale da uno strumento apposito.
Se chiudo l'anello sull'encoder, non ho problemi, se lo chiudo sulla cella di carico, non riesco a trovare le giuste impostazioni.
Puo' essere dovuto al fatto che la seriale anche facendola lavorare al massimo è comunque lenta in lettura e scrittura rispetto all'uscita?
Avete consigli da darmi?
La lettura della cella genera dei gradini perchè anche la variazione del carico data dallo strumento, non è continua, puo' essere un problema?
Che tipo di configurazione conviene usare con un anello del genere? Solo proporzionale va bene?
Come funziona il blocchetto PID con l'autotuning? ho provato a dusarlo ma non mi ha cambiato niente...
----------------------------------------
AUTORE: 301
DATA :15/04/2010 - 16:01:51
----------------------------------------
Bèh,
dei gradini li hai sempre, solo che di solito non li vedi perchè sono troppo piccoli.....
Il problema credo stia proprio nelle velocità e di comunicazione (quindi il tempo in cui ricevi i dati), ma sopratutto nella velocità del fenomeno.
Se hai un sistema veramente veloce non credo che tu possa riuscire a fare una retroazione diretta, ma dovrai vedere di fare una sorta di autotuning, ergo un vero e prorpio autosettaggio del banco.....
----------------------------------------
AUTORE: 482
DATA :16/04/2010 - 07:42:41
----------------------------------------
Ho sincronizzato la lettura della cella e il ciclo di PID e sembra migliorato qualcosina......
il problema pero' persiste, la cella ci mette 60/70 msec a restituirmi il dato.
Sto usando soloil guadagno P.
Se lo imposto a 2 arriva lento al target, se lo imposto a 6 oscilla di brutto.
Le vie di mezzo non cambiano praticamente niente....ppff...
----------------------------------------
AUTORE: 1124
DATA :16/04/2010 - 11:08:51
----------------------------------------
Ciao
non lasciare solo il parametro proporzionale, ma inserisci anche un valore al tempo di riporto Ti. Questo ti permette di avere una risposta del loop di retroazione più fluida.
Per trovare i parametri giusti potresti privare con la regola di Ziegler-nichols che ti riporto pari pari da wikipedia.
Il metodo di Ziegler-Nichols, risalente al 1942, è tra i più usati ed è apprezzato per la sua semplicità, per il fatto di non richiedere un modello matematico del processo e per le prestazioni che riesce a produrre.
Si tratta di un algoritmo per trovare il cosiddetto "guadagno critico", dal quale si deriveranno gli altri parametri del PID.
1. Il processo viene fatto controllare da un controllore esclusivamente proporzionale (τI e τD vengono impostati a zero);
2. Il guadagno K del controllore proporzionale viene gradualmente aumentato;
3. Il guadagno critico Ku è il valore del guadagno per cui la variabile controllata presenta oscillazioni sostenute, cioè che non spariscono dopo un transitorio: questa è una misura dell'effetto dei ritardi e della dinamica del processo;
4. Si registra il periodo critico Pu delle oscillazioni sostenute;
5. Secondo la seguente tabella, si determinano le costanti per il controllore P, PI o PID.
Tipo K τI τD
P 0,5 × Ku - -
PI 0,45 × Ku Pu/1,2 -
PID 0,6 × Ku Pu/2 Pu/8
Ciao
----------------------------------------
AUTORE: 482
DATA :16/04/2010 - 12:44:52
----------------------------------------
Grazie per avermi ricordato che odio la matematica e affini!
di solito aumento P=> oscilla => SI/NO
NO=> raddoppio
SI=> dimezzo
OSCILLA => SI/NO
ecc ecc...
fino a trovare la giusta via di mezzo
Solo che con i motori, basta staccare la puleggia e sono a posto se ho dei dubbi.
Il carico se lomonto e sbaglio spacco il pezzo e simularlo con qualcos'altro non è cosi' semplice
----------------------------------------
================================================================================
Problema con funzione ricorsiva
================================================================================
AUTORE: 2864
DATA :10/04/2010 - 20:18:04
----------------------------------------
Sto cercando di impostare una funzione ricorsiva in cui alla fine ho una somma tra 2 array, di cui uno proviene direttamente da uno shift register.
Questa somma però rimane sempre nulla, sebbene uno degli array non lo sia.
Siccome sono sicuro di essermi spiegato veramente male allego i vi, non riesco a capire dove sto sbagliando.
----------------------------------------
AUTORE: 1078
DATA :12/04/2010 - 07:43:15
----------------------------------------
Ho dato un'occhiata al tuo esempio. Il tuo problema sta nelle inizializzazioni degli array all'inizio del cilco. Inizializzando gli arry con array vuoti le funzioni di calcolo fanno casino e fanno passare l'array vuoto. Ho provato ad inizializzare gli shift register con degli array di 100 valori tutti uguali a zero e il tuo VI funziona correttamente. Allora hai due strade: 1 inizializzzare in modo diverso i tuoi shift register (come ho fatto io); 2 fare i calcoli solo dopo il primo ciclo, controllando che tutti gli array siano inizializzati, puoi usare la funzione <IsEmpity Array>.
Buon lavoro.
----------------------------------------
AUTORE: 2864
DATA :12/04/2010 - 08:44:02
----------------------------------------
Ciao Ricky.
Immaginavo che il problema fosse proprio l'inizializzazione ma non sapevo come uscirne.
Grazie ancora una volta
----------------------------------------
================================================================================
Salvataggio su file
================================================================================
AUTORE: 3003
DATA :14/04/2010 - 11:31:23
----------------------------------------
Salve a tutti e scusate il disturbo.Mi sono iscritto da poco perchè ho un problema...Sto utilizzando un programma che è già stato svolto tempo fa nel laboratorio dove sto svolgendo il tirocinio, che tratta di un sistema per la ricostruzione del profilo di velocità di superfici vibranti.In pratica tramite labview comunico da remoto con l'oscilloscopio,il generatore di funzione ed il sistema di movimento x y,per poi fornire in uscita i dati relativi alla velocità di vibrazione superficiale di un'attuatore piezoelettrico.Il prof mi ha chiesto di fare un salvataggio su file di questi dati in uscita inserendolo nel programma pricipale
Spero qualcuno possa aiutarmi...vi allego il programma pricipale con i relativi subvi...Grazie
----------------------------------------
AUTORE: 645
DATA :15/04/2010 - 09:30:37
----------------------------------------
Hai dato un'occhiata agli esempi LabView?
Ci sono diverse funzioni per il salvataggio dei dati su file in diversi formati.
Dovresti trovare il formato che ti è più utile (o quello che ti è stato chiesto); poi la procedura è qualcosa del tipo:
a) Apri comunicazione con il file (crea nuovo file o apri file se esiste già)
b) Scrivi i dati nel file dopo averli eventualmente impacchettati (per esempio tramite array o cluster)
c) Chiudi la comunicazione con il file
Prova a mettere insieme una struttura così poi, se serve, possiamo darti qualche consiglio!
----------------------------------------
================================================================================
Calcolare i parametri del PID
================================================================================
AUTORE: 2984
DATA :21/04/2010 - 09:09:46
----------------------------------------
Ciao a tutti.
Sto facendo un progetto per l'università e sto cercando un modo per calcolare i parametri del PID attraverso la prima tecnica di Ziegler-Nichols, e Labview.
Posso ottenere il segnale di uscita dal mio sistema per mezzo della scheda di acquisizione (NI-6008), ma poi come lo tratto il segnale?
Mille grazie a tutti
----------------------------------------
AUTORE: 645
DATA :26/04/2010 - 12:27:18
----------------------------------------
Di che sistema si tratta?
Giusto per dare un'occhiata prova a vedere http://automatica.ing.unibs.it/mco/tco/3_pid/zn.html .
Se lavori con un sistema ad anello chiuso le regole di taratura prevedono di portare il sistema ai limiti della stabilità. Poichè parli di scheda di acquisizione immagino che tu non disponga del modello matematico del sistema... Quindi le analisi che puoi fare rigurdano i dati reali e non le simulazioni.
Ci sono due strade possibili:
a) fai un po' di tentativi per il guadagno proporzionale e selezioni un tempo integrale un po' più grande delle tempistiche del processo in analisi. Questo dovrebbe darti la possibilità di arrivare a valori PID al'incirca validi... poi devi fare qualche regolazione più fine (sistema valido se, per esempio, le tempistiche di risposta del fenomeno sono lunghe e quindi non facilmente ottenibili e modificabili come invece si può fare con un fenomeno elettrico);
b) porti il sistema ai limiti della stabilità: devi ottenere un'uscita che oscilla sempre tra due valori estremi. A questo punto puoi usare la taratura in anello chiuso di Ziegler-Nichols e dovresti trovarti nell'intorno delle soluzioni che desideri.
Altrimenti puoi fare qualche ipotesi sulle tempistiche del processo: sapendo che in circa 4 - 5 volte questo tempo dovresti arrivare alla stabilità puoi tarare il guadagno proporzionale per non avere oscillazioni troppo elevate e scegliere guadagno integrale e derivativo adatti.
----------------------------------------
AUTORE: 2653
DATA :11/05/2010 - 20:20:09
----------------------------------------
Dico qualche sciocchezza se provi ad ausare l'autoTune?della libreria PID?
----------------------------------------
AUTORE: 2864
DATA :14/05/2010 - 12:34:55
----------------------------------------
[quote="MagicBotolo":u0rhtx7a]Di che sistema si tratta?
b) porti il sistema ai limiti della stabilità: devi ottenere un'uscita che oscilla sempre tra due valori estremi. A questo punto puoi usare la taratura in anello chiuso di Ziegler-Nichols e dovresti trovarti nell'intorno delle soluzioni che desideri.
[/quote:u0rhtx7a]
A seconda del sistema potrebbe essere complicato portarlo al limite di stabilità, io per esempio nel mio lavoro di tesi ho dovuto utilizzare la taratura ad anello aperto.
In ogni caso mimo servono più informazioni.
----------------------------------------
================================================================================
convertitore 4 20mA USB
================================================================================
AUTORE: 2435
DATA :21/04/2010 - 13:21:59
----------------------------------------
Ciao a tutti...
vorrei interfacciarmi con le USB...ci sono librerie apposite? come si può fare??
grazie
----------------------------------------
AUTORE: 1078
DATA :21/04/2010 - 14:48:26
----------------------------------------
Scusa ma cosa intendi per interfacciarmi? Non hai i driver dell'apparecchiatura che intendi usare?
----------------------------------------
AUTORE: 2435
DATA :21/04/2010 - 15:25:23
----------------------------------------
devo ancora acquistarlo...
volevo farmi intanto un'idea..
comunque vero...mi son perso in un bicchiere d'acqua
La stanchezza del mercoledì si fa sentire..
Grazie
----------------------------------------
================================================================================
Lanciare un VI esterno
================================================================================
AUTORE: 2274
DATA :21/04/2010 - 14:50:00
----------------------------------------
Caio a tutti
Ho un problema molto semplice ma non riesco a trovare la soluzione. Dal mio suoervisore realizzato in LabView dovrei lanciare un'altro vi (non un sub vi, ma un vi esterno) come posso farlo?
ciao e grazie
Barciuz
----------------------------------------
AUTORE: 660
DATA :22/04/2010 - 09:06:39
----------------------------------------
se è un VI lo puoi lanciare nè più nè meno di come lanceresti un subVI...
o forse non ho capito bene la tua domanda....
Max
----------------------------------------
AUTORE: 43
DATA :22/04/2010 - 09:58:03
----------------------------------------
[quote="barciuz":2avrr9dy]Caio a tutti
Ho un problema molto semplice ma non riesco a trovare la soluzione. Dal mio suoervisore realizzato in LabView dovrei lanciare un'altro vi (non un sub vi, ma un vi esterno) come posso farlo?
ciao e grazie
Barciuz[/quote:2avrr9dy]
Per fare ciò devi, da programma, caricare in memoria il VI in questione ("Open VI Reference"), caricare nei controlli i valori necessari (Metodo "Control Value.Set")
e lanciare l'esecuzione del VI premendo il tasto "freccia" (Metodo "Run VI").
L'esecuzione del VI può essere sincrona o meno, cioè si puo' attendere o meno il termine dell'esecuzione di questo VI("Wait Until Done")
Per usare il metodo RunVI il VI deve perciò avere un FrontPanel (non necessariamente visibile ma lo deve avere!!!!).
Il Web è costellato di esempi... cerca e troverai.
bye
----------------------------------------
AUTORE: 2274
DATA :22/04/2010 - 10:36:56
----------------------------------------
non è che avresti qualche link per indirizzarmi verso gli esempi??
Ho provato a cercarli ma non ne ho trovato nemmeno uno!!!
Ciao e grazie per la risposta
Barciuz
----------------------------------------
AUTORE: 2274
DATA :22/04/2010 - 10:50:14
----------------------------------------
Io in realtà devo lanciare il vi esterno (il quale comunica con il supervisore tramite variabili globali) all'avvio del supervisore e lo devo far girare fino a che il supervisore non si ferma...
praticamente vorrei automatizzare l'operazione di aprire manualmente il vi esterno e lanciarlo, cioè volgio lanciare solo il supervisore il quale automaticamente lancia anche i vi correlati (che poi scambiano info tramite variabili globali)
spero di essere stato più chiaro adesso
ciao Barciuz
----------------------------------------
AUTORE: 43
DATA :22/04/2010 - 10:58:51
----------------------------------------
[quote="barciuz":13t0ju1m]non è che avresti qualche link per indirizzarmi verso gli esempi??
Ho provato a cercarli ma non ne ho trovato nemmeno uno!!!
Ciao e grazie per la risposta
Barciuz[/quote:13t0ju1m]
viewtopic.php?f=1&t=3499
segui la discussione,
scarica zippalo.zip
apri il il VI "main2.vi"
dimentica il parametro "8" in ingresso alla "Open VI reference", cioè dimentica il fatto che il VI è rientrente e l'esempio è bello che servito.
bye
----------------------------------------
AUTORE: 2274
DATA :22/04/2010 - 13:06:28
----------------------------------------
grazie mille... lo provo subito
----------------------------------------
AUTORE: 2274
DATA :22/04/2010 - 14:10:27
----------------------------------------
E' due ore che li sto guardando e non ci ho capito nulla...
riusciresti a farmi una breve guida all'uso...
tra l'altro a me serve una cosa molto più semplice con un solo bottone che mi lancia un vi esterno "pannello di controllo.vi"
ciao e grazie ancora
Barciuz
----------------------------------------
AUTORE: 43
DATA :26/04/2010 - 10:02:07
----------------------------------------
[quote="barciuz":rdsawvod]E' due ore che li sto guardando e non ci ho capito nulla...
riusciresti a farmi una breve guida all'uso...
tra l'altro a me serve una cosa molto più semplice con un solo bottone che mi lancia un vi esterno "pannello di controllo.vi"
ciao e grazie ancora
Barciuz[/quote:rdsawvod]
Serve sempre una cosa "molto + semplice". LabVIEW è facile da usare, quasi banale ed è ricco di esempi.
Però anche cercare e sforzarsi di capire + essere oneroso.
Ti ho fatto un esempio. Se non capisci qualcosa fai domande specifiche. Devi dettagliare.
----------------------------------------
AUTORE: 2274
DATA :26/04/2010 - 15:24:24
----------------------------------------
grazie mille dell'aiuto ma ho risolto smanettando un pò da solo... grazie ancora
----------------------------------------
AUTORE: 3364
DATA :10/09/2011 - 22:21:22
----------------------------------------
Salve ma come si fa a compilare un VI che chiama un altro VI???
I due VI devono essere compilati in modo separato oppure bisogna includere il vi chiamato nella application principale???
Grazie
Vincenzo
----------------------------------------
AUTORE: 43
DATA :12/09/2011 - 08:26:14
----------------------------------------
[quote="perceptron":1uc01lrl]Salve ma come si fa a compilare un VI che chiama un altro VI???
I due VI devono essere compilati in modo separato oppure bisogna includere il vi chiamato nella application principale???
Grazie
Vincenzo[/quote:1uc01lrl]
Se per compilazione intendi la "costruzione di un eseguibile attraverso l'uso dell' "application builder",
allora non devi fare nulla perchè i VI che vengono richiamati all'interno del VI principale vengono automaticamente inclusi nell'eseguibile, compreso i VI delle librerie NI.
Se pensi invece a VI caricati dinamicamente, questi vanno aggiunti nell'apposito "spazio"
[attachment=0:1uc01lrl]dynamicVI_AppBuilder.JPG[/attachment:1uc01lrl]
bye
----------------------------------------
AUTORE: 3364
DATA :15/09/2011 - 09:53:27
----------------------------------------
Innanzitutto ti ringrazio per avermi risposto.
Sto usando il metodo RunVI per chiamare delle VI da un programma chiamante.
In realtà ho visto che compilando solamente la VI che contiene il metodo su citato riesco a lanciare le altre VI, non ho aggiunto però alcun file nella sezione che mi hai indicato(intendo le VI da chiamare).
In realtà su una delle VI che chiamo adesso mi vien fuori un altro problema(che potrebbe essere collegato) cioè :
Ho fatto una macchina a stati che contiene all'interno uno stato in cui faccio la configurazione della seriale con un modulo VISA.
Dopo la compilazione eseguo il SW e quando chiamo questa VI mi vien fuori un errore "Missing SubVI Serial Config VI...".
Cioè come se non trovasse la Sub VI di configurazione della seriale(alla partenza la freccetta del run è rotta).
Nell'ambiente di sviluppo invece non mi da problemi cioè funziona come mi aspetto.
Grazie
Vincenzo
----------------------------------------
AUTORE: 3364
DATA :15/09/2011 - 13:50:27
----------------------------------------
Era proprio come pensavo ho caricato il VI che conteneva Serial Configuration in always loaded ed è andato.
Grazie molte per la disponibilità
Vincenzo
----------------------------------------
================================================================================
Come rendere un SW multilingua
================================================================================
AUTORE: 2435
DATA :27/04/2010 - 15:14:22
----------------------------------------
Ciao a tutti,
recentemente mi è sorto un problema...
Dovrei rendere un SW multilingua come potrei fare??
pensavo di salvare tutte le descrizioni di pulsanti e indicatori su file csv nelle varie lingue e poi all'avvio del SW passare le descrizioni alla proprietà text della label del controllo..
però non è permesso.
Grazie
----------------------------------------
AUTORE: 2550
DATA :28/04/2010 - 09:48:40
----------------------------------------
Ciao nic.
Questo è un porblema che ho affrontato anche io non molto tempo fa.
L'idea del file contenente tutte le stringhe di testo utilizzate dal programma, è la più immediata.
La property label.text non è modificabile in runtime. Ti conviene utilizzare le Caption al posto delle label per etichettare i tuoi campi. Questa infatti è liberamente modificabile. Per i pulsanti invece dovrai utilizzare la proprietà Boolean Text.Text.
Io l'ho risolto in questo modo. Ho creato un file INI contente tutte le stringhe utilizzate, identificando ognuna di loro con un indice. All'avvio del vi carico il contenuto nel file in una tabella. Poi è bastato realizzaare un vi che mi restituisse la stringa in base all'indice. Quindi per cambiare lingua basta solo sostituire il file originale con uno che contenga altre lingue per tradurre il programma.
Spero di esserti stato utile
Ciao
DVD
----------------------------------------
AUTORE: 2435
DATA :28/04/2010 - 15:12:16
----------------------------------------
OK...
grazie per le informazioni
la mia idea è simile...con la variazione che voglio creare un array 2D che suddivide le lingue per colonne.
Quindi tramite una scelta fatta magari sempre da file di testo posso modificare la lingua senza bisogno di sostituire il file.
(non cambia tanto)
grazie e ciao
----------------------------------------
AUTORE: 927
DATA :04/05/2010 - 09:24:34
----------------------------------------
Per completezza segnalo un altro metodo, che penso sia quello proposto da NI. Labview permette di esportare/importare automaticamente tutte le stringhe di un VI in un file di testo, rendendo abbastanza semplice la traduzione, vedi Tools->Advanced->Export...
Tu però se ho ben capito vuoi cambiare lingua dinamicamente, a runtime. Per importare le stringhe da programma c'è l'Invoke node "VI strings.Import"; il problema è che questo metodo non è disponibile mentre il VI è in esecuzione, quindi un VI non può cambiare le stringhe a sè stesso, ma può farlo un altro VI "traduttore" che modifica il VI e poi lo fa partire.
----------------------------------------
AUTORE: 2550
DATA :05/05/2010 - 18:16:51
----------------------------------------
Salve.
Per completezza, vi informo che la versione 8.5 di Labview (e suppongo anche le precedenti) non permette la modifica al volo dei "Tip Strip" nei VI rientranti.
L'ho scoperto purtroppo a mie spese. Il problema è stato risolto dalla versione 8.6.
Ciao
DVD
----------------------------------------
================================================================================
utilizzo dello "SCOPE Soft front panel"
================================================================================
AUTORE: 822
DATA :28/04/2010 - 15:43:01
----------------------------------------
ciao a tutti voi,
c'è per caso qualcuno che abbia già provato ha ricrearsi il sorgente dello SCOPE Soft Front Panel?
Giuseppe
----------------------------------------
================================================================================
Dubbi su segnali da/verso scheda d'acquisizione
================================================================================
AUTORE: 3047
DATA :29/04/2010 - 03:21:54
----------------------------------------
Ciao a tutti,
innanzitutto, essendo nuovo, colgo l'occasione per ringraziare gli utenti e gli organizzatori di questo forum che reputo estremamente utile per chi, come me, è alle prime armi con LabVIEW e che pertanto risulta uno strumento utilissimo oltre che uno dei pochissimi in italiano!
Detto ciò, arrivo al punto: prima di tutto ammetto, come dicevo, di non avere grandi basi nè di LabVIEW nè di azionamenti di motori, sto ancora studiando entrambi, pertanto cercate di capire l'ignoranza
Quello che dovrei fare è tracciare la curva caratteristica di un motore asincrono a controllo vettoriale del flusso (trifase) frenato da un brushless. Tutto viene pilotato tramite LabVIEW usando la scheda d'acquisizione NI PCI-M6229 con la quale leggo i dati dei sensori (torsiometro, velocità di ambo i motori e correnti di alimentazione) e invio i segnali di movimento ai motori.
Oltre ad accettare ben volentieri consigli su come organizzare al meglio la logica della VI, avrei alcune domande da porre sperando in un atto di carità di qualcuno
- Torsiometro: il segnale in ingresso è in tensione e differenziale per cui avrò una connessione su una porta AI e una su un GND. Per convertire da Volt a Nm, basta imporre una condizione del tipo: massimo-voltaggio-in-ingresso diviso massima-coppia-leggibile-dal-sensore moltiplicato per la tensione realmente letta in ingresso? La massima coppia leggibile è un dato che mi è stato fornito e vale 10/25 Nm...
- Velocità: le letture di velocità vengono fatte tramite 2 encoder angolari assoluti che quindi hanno un uscita digitale (in questo caso su 3 linee, canali A, B e Z). Per quanto riguarda le connessioni ai counter della scheda non ho problemi, il vero dubbio è però su quale sia il segnale che ottengo dal "lato LabVIEW", cioè: io ricevo delle onde quadre che vengono contate dal counter; dopo la lettura cosa otterrò? In che unità di misura?
- Segnali di movimento: prendendo il caso del motore asincrono (penso che il caso del brushless sia speculare), che segnale devo generare verso la scheda per comandare il motore? Se non ho capito male devo solo generare una tensione "proporzionale" alla velocità che desidero raggiunga il motore, dato che sarà la scheda a gestire poi tutto quello che riguarda il trifase... o sbaglio?
Chiedo scusa per l'immane wall-of-text ma sono dubbi che mi attanagliano e bloccano completamente il lavoro, anche perchè, al momento, non ho a disposizione nulla di "fisico", non posso nemmeno vedere nè sapere ulterori specifiche sui sensori!
Ringrazio anticipatamente chiunque potrà pazientemente aiutarmi a risolvere questi dubbi!
Grazie e ciao!
----------------------------------------
AUTORE: 3047
DATA :29/04/2010 - 03:29:29
----------------------------------------
EDIT: nella parte sottostante
[quote="Robb":1lv528kw]
- Torsiometro: il segnale in ingresso è in tensione e differenziale per cui avrò una connessione su una porta AI e una su un GND. Per convertire da Volt a Nm, basta imporre una condizione del tipo: massimo-voltaggio-in-ingresso diviso massima-coppia-leggibile-dal-sensore moltiplicato per la tensione realmente letta in ingresso? La massima coppia leggibile è un dato che mi è stato fornito e vale 10/25 Nm...
[/quote:1lv528kw]
ho sbagliato a scrivere, intendevo dire: "Per convertire da Volt a Nm, basta imporre una condizione del tipo: massima-coppia-leggibile-dal-sensore diviso massimo-voltaggio-in-ingresso moltiplicato per la tensione realmente letta in ingresso?"
----------------------------------------
AUTORE: 278
DATA :29/04/2010 - 09:03:01
----------------------------------------
Ciao e benvenuto ne forum!
per cominciare con le schede di acquisizione, ti consiglio di giocare un pò con il Measurement Automation Explorer (MAX), non è altro che un programma che ti consente di accedere rapidamente alle funzioni disponibili dalle schede di acquisizione. Se hai già installato la scheda 6229 all'interno del pc puoi cominciare a fare qualche prova, tipo generazioni ed acquisizioni di segnali digitali e/o tensioni.
[quote:2kgw4nyz]- Torsiometro: il segnale in ingresso è in tensione e differenziale per cui avrò una connessione su una porta AI e una su un GND[/quote:2kgw4nyz] se vuoi fare una misurazione in differenziale non devi utilizzare il GND, ma un'altro ingresso della scheda DAQ e configurare la porta di acquisizione come differenziale.
[quote:2kgw4nyz]- Velocità: le letture di velocità vengono fatte tramite 2 encoder angolari assoluti[/quote:2kgw4nyz] riposto da wikipedia [quote:2kgw4nyz]Negli encoder assoluti i segnali elettrici d'uscita codificano l'esatta posizione istantanea del rotore rispetto al corpo; così, in qualsiasi momento, un adeguato circuito di decodifica può decodificare e visualizzare la posizione angolare dell'asse in esame. I dati relativi allo spostamento dell'asse (direzione, velocità e accelerazione) sono derivati dall'elaborazione della sua posizione assoluta nel tempo.[/quote:2kgw4nyz] se sei sicuro che l'encoder è di tipo assoluto, avrai necessariamente bisogno di un'elettronica di interfaccia tra l'encoder stesso e la scheda di acquisizione 6229.
[quote:2kgw4nyz]- Segnali di movimento: prendendo il caso del motore asincrono (penso che il caso del brushless sia speculare), che segnale devo generare verso la scheda per comandare il motore?[/quote:2kgw4nyz] questo non dipende dal motore.. ma dal suo driver.
Con la scheda 6229 non puoi comandare direttamente il motore, ma devi interfacciarti con un driver o inverter, che si occuperà di gestire le fasi e di fornire potenza al motore. E qui ti si apre un mondo, esistono centinaia di driver differenti, alcuni sono molto semplici e possono essere comandati con un segnale in tensione, altri invece sono molto + complessi, programmabili e comandabili tramite protocolli di comunicazione industriale (seriali, profibus, canbus, modbus, ethernet ecc).
Essendo un motore trifase mi aspetto che in controller sia abbastanza evoluto, in quanto ti deve consentire di variare la velocità in modo programmatico; non credo sia sufficiente pilotare il sistema con una tensione variabile, come nel caso del driver che utilizzerai per il motore brushless.
Spero di esserti stato d'aiuto e di aver condiviso con te un pò della mia esperienza in ambito di automazione.
Ciao
----------------------------------------
AUTORE: 3047
DATA :29/04/2010 - 22:18:33
----------------------------------------
Ciao! Prima di tutto grazie mille per la risposta illuminante
Resterebbero un paio di chiarimenti se non ti dispiace:
[quote="esodar1981":1vjnp7wt] se sei sicuro che l'encoder è di tipo assoluto, avrai necessariamente bisogno di un'elettronica di interfaccia tra l'encoder stesso e la scheda di acquisizione 6229.
[/quote:1vjnp7wt]
Quindi il semplice circuito di counter della scheda non può bastare per convertire i segnali in onda quadra che decodificano la posizione in un segnale "comprensibile" ed utilizzabile direttamente da LabVIEW?
Mentre riguardo al motore asincrono, pensi io debba utilizzare uno di quei protocolli di comunicazione LabVIEW-Inverter di cui parli?
Grazie ancora!
----------------------------------------
================================================================================
Ridimensionare il Front Panel
================================================================================
AUTORE: 487
DATA :29/04/2010 - 08:16:47
----------------------------------------
Ciao a tutti,
il problema è il seguente: ho creato un vi come message box, ma la lunghezza del messaggio è molto variabile per cui vorrei ridimensionare il front panel a secondo della lunghezza della stringa di messaggio. Per completezza d'informazione direi che nel vi sono presenti anche dei pulsanti e delle picture e dovrei riuscire a gestire il tutto in maniera dinamica sempre a secondo di quanto è lunga la stringa di messaggio. Fino ad ora sono riuscito a ridimensionare la finestra del vi e a posizionarla dove voglio sullo schermo, ma quello che non sono riuscito a fare è di spostere il front panel in maniera da rendere sempre visibile la parte che mi interessa. Da quello che mi sembra d'aver capito è che l'angolo superiore sinistro del front panel è fisso.
Forse non sono stato molto chiaro, ma spero che qualcuno possa ugualmente darmi una mano. Grazie.
----------------------------------------
AUTORE: 1078
DATA :04/05/2010 - 08:30:32
----------------------------------------
[quote="coma":315nwqss]ma quello che non sono riuscito a fare è di spostere il front panel in maniera da rendere sempre visibile la parte che mi interessa[/quote:315nwqss]
Ciao Coma,
Per risolvere il tuo problema, devi muovere l'oggetto posizionato sul tuo FP e non muovere l'FP. Per fare questo puoi prendere i riferimenti Left e Top del tuo FP dalla proprietà position del Pane 0 del tuo front pannel. I Front pannel di labview sono organizzati in Panes, se ne hai solo uno (il tuo background) devi accedere da property node all'array pane del tuo FP, estrarne l'elemento 0 e lavorare sempre con property node su quello. L'area del pane e le proprietà left e top si riferiscono all'area interna del tuo FP senza i bordi e il titolo. Adesso hai l'origine e la dimensione della tua area di disegno, ti sarà sufficiente dimensionare e posizionare correttamente la tua stringa in modo da visualizzarla correttamente.
Buon lavoro.
----------------------------------------
AUTORE: 487
DATA :06/05/2010 - 07:27:11
----------------------------------------
Ok Ricky, grazie per il suggerimento. Ci provo e poi ti faccio sapere.
----------------------------------------
AUTORE: 487
DATA :06/05/2010 - 15:07:42
----------------------------------------
Ecco quà quello che sono riuscito a fare.
Aspetto fiducioso commenti e critiche costruttive.
Grazie.
----------------------------------------
AUTORE: 1078
DATA :06/05/2010 - 15:54:35
----------------------------------------
Molto carino... bravo, ottimo lavoro!
----------------------------------------
================================================================================
Lanciare SubVi in parallelo
================================================================================
AUTORE: 3049
DATA :29/04/2010 - 13:51:39
----------------------------------------
Ciao a tutti,
In primo luogo, complimenti per il forum ! Mi sono appena avvicinato al mondo labview per motivi di lavoro, e devo dire che siete una risorsa davvero utile ! In secondo luogo, scrivo per proporre un quesito al quale non sono risucito a trovare una risposta in rete.
Più o meno per sfizio, vorrei sapere se/come sia possibile mandare in esecuzione contemporaneamente un numero a priori variabile di subVi uguali fra loro. Mi sembra di aver capito che è possibile per certi versi equiparare dei while-loop a dei thread, ma come posso eseguire un numero varibile di while-loop ?
Spero di essermi spiegato e grazie dell'attenzione =) !
Marco
----------------------------------------
AUTORE: 278
DATA :29/04/2010 - 16:42:22
----------------------------------------
Ciao e benvenuto!!!
Ti rispondo un pò velocemente.. in 2 parole.. [b:okqfeh8p]VI Server[/b:okqfeh8p]!!
VI server è una "tecnica", chiamiamola così, per comandare un vi da un'altro vi.. è un'argomento trattato millemilavolte sul forum, prova a spulciarlo un pò, se hai domande specifiche siamo a tua disposizione
Ciao e buon lavoro
----------------------------------------
AUTORE: 3049
DATA :30/04/2010 - 13:21:42
----------------------------------------
Ah ! Non ne avevo mai sentito parlare, e ho evidentemente cercato parole-chiave che non avevano nulla a che fare con questo "VI-Server". Vedrò di trovare più info a proposito, ti ringrazio molto per la dritta =) !
Marco
----------------------------------------
AUTORE: 1078
DATA :03/05/2010 - 16:09:14
----------------------------------------
Ricordati prima di impostare a true la proprietà reentrant di esecuzione del VI.
Se non hai impostata a true la proprietà reentrant del VI (attento alla condivisione delle risorse), anche con i VI-Server non è possibile lanciare più volte lo "stesso" VI già caricato in memoria. Per fare una cosa di questo tipo devi creare un numero di vi identici che hanno però nomi diversi e poi lanciarli. Creare un numero di VI identici di cui a priori non ne sai il ne sai il numero è una cosa banale se usi le funzioni di copia file messe a disposizione da Labview. Al momento del lancio creerai il VI_001, VI_002, ... , VI_00N prima di lanciarli e quando chiuderai il processo ti consiglio di eliminare anche le copie clone con la funzione kill. Quindi dipende da cosa devi fare con i tuoi VI.
Buon lavoro.
----------------------------------------
================================================================================
come posso gestire più monitor in un unico VI [LV8.5]?
================================================================================
AUTORE: 822
DATA :30/04/2010 - 10:48:34
----------------------------------------
Ciao,
la mia applicazione deve essere in grado di gestire 5 monitor e su ogni monitor deve essere presente una immagine diversa. Con Labview è possibile indirizzare immagini diverse su ogni monitor?
Considerando che i monitor possono trovarsi anche a 15/20 metri di distanza dal PC, che tipo di collegamento mi consigliate di utilizzare?
Utilizzo un PC con sistema operativo windows xp, ma non sono sicuro che un unico pc possa gestire 5 schede video contemporaneamente, magari potrei utilizzare un collegamento ethernet..
Che soluzione mi consigliate?
Grazie, Giuseppe
----------------------------------------
AUTORE: 660
DATA :03/05/2010 - 13:30:28
----------------------------------------
per quello che mi è capitato di fare ho usato 4 monitor senza problemi.
MA
- I 4 monitor erano collegati tutti alla stessa scheda video (una NVIDIA Quadro) con 4 uscite monitor
- Per utilizzarli contemporaneamente basta impostare XP in modo che utilizzi l'estensione del desktop su tutti e quattro
- Poi da LV basta semplicemente dare le coordinate di dove vuoi che posizioni il VI all'apertura (tieni in considerazione che saranno anch'esse in modalità "estesa" quindi anzichè, ad esempio, uno schermo 500x500 ne avrai uno 2000x500 dove i punti fuori dal tuo monitor principale sono su uno degli altri; la risoluzione del monitor esteso dipenda anche da come imposti in XP la posizione dei monitor, nel mio esempio erano 4 in linea ma potresti anche avere una matrice 2 x 2).
- Che io sappia non si possono utilizzare più schede video su di un solo PC anche se una volta avevo letto di qualcuno che ci era riuscito (io provare ci ho provato, ma XP disattivava le altre lascaidomene sempre solo 1)
Spero di averti aiutato
Max
----------------------------------------
AUTORE: 822
DATA :03/05/2010 - 13:53:47
----------------------------------------
grazie max, la tua esperienza mi è di aiuto. se esistessero schede video con 5 uscite risolverei il problema anche se avrei comunque il problema della distanza (15 metri tra pc e monitor, i monitor sono posizionati lungo una linea), il segnale vga si indebolirebbe?
----------------------------------------
AUTORE: 660
DATA :03/05/2010 - 20:38:14
----------------------------------------
credo che 15 metri non darebbero problemi al segnale, l'ho provato (però con un solo monitor) non sono sicuro che con più di uno la cosa funzioni.
Che sappia però non ci sono schede con più di 4 uscite indipendenti...
Max
----------------------------------------
AUTORE: 822
DATA :03/05/2010 - 21:16:02
----------------------------------------
si, anche io credo non ce ne siano.. tu sai se esistono monitor con ingressi ethernet? sul web ho trovato solo adattatori VGA-ETHERNET..
altrimenti potrei risolvere con due pc: uno master che gestisce il monitor principale e uno slave con 4 uscite video per gli altri 4 monitor.
grazie
----------------------------------------
AUTORE: 822
DATA :04/05/2010 - 09:02:08
----------------------------------------
max scusa se ti rompo, ma mi dici il modello esatto della scheda che hai utilizzato, se ti ricordi? E' una scheda commerciale che si può trovare nei normali rivenditori informatici?
Grazie,
ciao
----------------------------------------
AUTORE: 660
DATA :04/05/2010 - 18:50:56
----------------------------------------
il modello esatto purtroppo non lo ricordo, però era una scheda commerciale della NVidia, quelle che si trovano dai normali rivenditori informatici, solo che costava un'occhio perchè al tempo (circa 4 anni fa) non erano all'ordine del giorno schede con 4 uscite indipendenti per i monitor.
Credo che oggi oltre a costare molto meno siano più semplici da trovare.
dai un'occhiata a questa ad esempio:
- QUADRO NVS 450
oppure fai un salto sul sito nvidia e cerca perchè tempo fa anzichè utilizzare una scheda con 4 uscite era anche disponibile un kit o qualcosa del genere che ti consentiva di collegare insieme due schede a 2 uscite (al tempo!!!!) in modo che il pc le vedesse entrambe e poi iil sw di gestione delle schede si occupava di far funzionare il tutto....
ciao
Max
----------------------------------------
AUTORE: 822
DATA :04/05/2010 - 18:53:51
----------------------------------------
grazie!
giuseppe
----------------------------------------
================================================================================
Driver GPIB-USB-HS
================================================================================
AUTORE: 3050
DATA :30/04/2010 - 16:10:47
----------------------------------------
Ciao a tutti,
mi servirebbero urgentemente i driver GPIB-USB-HS a trovare, neanche in rete.
Se qualcuno li ha a disposizione spero possa aiutarmi.
Grazie ragazzi.
----------------------------------------
AUTORE: 1078
DATA :03/05/2010 - 15:22:40
----------------------------------------
Ciao erika,
potresti specificare meglio di che strumento si tratta?
----------------------------------------
AUTORE: 1323
DATA :04/05/2010 - 15:03:52
----------------------------------------
Ma intendi tipo questi?
[url:bz4mq1we]http://joule.ni.com/nidu/cds/view/p/id/1529/lang/it[/url:bz4mq1we]
Ciao
M.
----------------------------------------
================================================================================
scrittura o lettura simultanea su una scheda NI
================================================================================
AUTORE: 3052
DATA :30/04/2010 - 20:42:35
----------------------------------------
Salve a tutti,
Mi presento sono un giovane studente universitario e da poco tempo ho iniziato a programmare con labview (sono alle prime armi
).
Volevo sapere come si puo acquisire simultaneamente o scrivere sempre contemporraneamente su una scheda della NI.
Ho fatto un sistema di acquisizione come nell[u:3ey8wge0]'immagine 1[/u:3ey8wge0] ma vorrei fare un sistema simile all'[u:3ey8wge0]immagine 2[/u:3ey8wge0] perchè vorrei maggior velocità di esecuzione del programma.
Quest'ultimo (immagine 2) pero mi da dei problemi, cioe me lo fa fare solo con l'ausilio della DAQ ASSISTANCE (e lo voglio evitare).
Vorrei chiedere se sto facendo una castroneria e se c'è qualcuno che ha la pazienza di spiegarmi come posso fare il sistema veloce di lettura (o scrittura) digitale simultaneo.
----------------------------------------
AUTORE: 3052
DATA :30/04/2010 - 20:52:34
----------------------------------------
scusate qui ci sono gli allegati!!
----------------------------------------
AUTORE: 1078
DATA :03/05/2010 - 15:54:17
----------------------------------------
Ciao ing.samu,
Comunque ti posto una configurazione che potrebbe risolverti il problema. Configuro il task da labview impostando la lettura della linea digitale da 0 a 3. poi leggo l'intera linea, scompongo l'array restituito e con ogni buleano controllo un'incatore. Mi sembra che nella tua prima immagine fai lo stesso.
A disposizione per chiarimenti.
Buon lavoro.
----------------------------------------
AUTORE: 1078
DATA :03/05/2010 - 15:57:12
----------------------------------------
ooppsss....!!! Ho dimenticato di allegare l'immagine....
----------------------------------------
AUTORE: 3052
DATA :07/05/2010 - 17:19:32
----------------------------------------
OK grazie mille!!
è esattamente quello che volevo!!
----------------------------------------
================================================================================
Reperire le informazioni di versione dell'eseguibile
================================================================================
AUTORE: 1078
DATA :04/05/2010 - 10:10:36
----------------------------------------
Ciao a tutti,
Devo reperire a runtime le informazioni di versione dell'eseguibile distribuito. Non della versione di labview o del runtime di labview come da property node [b:1kucfb1n]application.Software version[/b:1kucfb1n] e [b:1kucfb1n]application.nuber of version[/b:1kucfb1n], ma la versione effettiva dell'eseguibile da me compilato. Questo mi serve per verificare se esistono versioni più recenti ed eventualmente avvisare l'utente che esiste una nuova versione.
Sapete dove sono reperibile le info sull'eseguibile?
Grazie!!
----------------------------------------
AUTORE: 1078
DATA :04/05/2010 - 16:08:18
----------------------------------------
Ho risolto da solo, posto la soluzione per condividerla con tutti.
Per estrarre le informazioni relative ad un file EXE, bisogna appoggiarsi ad una libreria .NET. Il resto viene da se.....
Ciao a tutti e grazie comunque....
----------------------------------------
AUTORE: 482
DATA :05/05/2010 - 08:27:06
----------------------------------------
questa è una soluzione un po' piu' vecchia che si appoggiava alla kernel32.dll
----------------------------------------
================================================================================
Set Focus
================================================================================
AUTORE: 2196
DATA :05/05/2010 - 08:28:19
----------------------------------------
Come faccio a fare il setfocus di un vi (.exe) ?
----------------------------------------
AUTORE: 1078
DATA :05/05/2010 - 09:34:26
----------------------------------------
Devi utilizzare i VI-Server:
1. Fai riferimento al VI con la funzione OpenVIReference
2. Tramite un Invoke note chiami la funzione front pannel --> Open Front Pannel
3. Chiudi i riferimenti al VI
Se lo devi mandare anche in esecuzione invoke node --> RunVi
Spero sia quello che ti serviva.
Buon lavoro.
----------------------------------------
AUTORE: 2196
DATA :05/05/2010 - 10:09:07
----------------------------------------
Forse mi sono spiegato male...la Vi inquestione ed unica...non è una VI chiamata da un altra Vi
----------------------------------------
AUTORE: 645
DATA :06/05/2010 - 08:53:23
----------------------------------------
Scusa la domanda... Con Set Focus cosa intendi esattamente?
Passare il focus ad un VI o ai singoli elementi all'interno del VI?
----------------------------------------
AUTORE: 2196
DATA :06/05/2010 - 14:46:04
----------------------------------------
[quote="MagicBotolo":195bjndk]Scusa la domanda... Con Set Focus cosa intendi esattamente?
Passare il focus ad un VI o ai singoli elementi all'interno del VI?[/quote:195bjndk]
descrivo cosa devo fare:
-lancio la VI
-la VI lancia un programma esterno
..questo rimane in primo piano...mentre io vorrei la mia VI di nuovo in primo piano.
----------------------------------------
AUTORE: 645
DATA :06/05/2010 - 15:17:24
----------------------------------------
Se non sbaglio puoi risolvere il problema nascondendo il Front Panel del secondo VI chiamato...
Se però ti serve il Front Panel del secondo VI allora prova a guardare tra le proprietà del VI (nel menù del VI stesso).
Scusa... vado a memoria perchè non ho LabView sottomano in questo momento!
----------------------------------------
AUTORE: 2196
DATA :07/05/2010 - 08:43:03
----------------------------------------
[quote="MagicBotolo":33rb66yx]Se non sbaglio puoi risolvere il problema nascondendo il Front Panel del secondo VI chiamato...
Se però ti serve il Front Panel del secondo VI allora prova a guardare tra le proprietà del VI (nel menù del VI stesso).
Scusa... vado a memoria perchè non ho LabView sottomano in questo momento![/quote:33rb66yx]
L'altro programma che l'ancio non è un VI ma un altra applicazione che non ha nulla a vedere con labview.
----------------------------------------
AUTORE: 1078
DATA :07/05/2010 - 11:51:17
----------------------------------------
Ciao Buddace,
guarda se il mio esempietto ti può andare bene.
Il call by library function richiama la User32-GetFocus di windows prima di avviare il ciclo in modo da avere l'handel della finestra del vi, poi alla prima iterazione del ciclo avvia il notepad e dalla seconda in poi richiama la User32 - SetFocus per riportare il fuoco sulla finestra del VI. Il mio VI diventa proprietario dell'interfaccia windows piazzandosi sempre in primo piano indipendentemente dalle finestre e dai programmi sottostanti. Se vuoi permettere all'utente di selezionare anche altro, devi filtrare la seconda volta che viene eseguito il ciclo, puoi copiare quello che ho fatto io per la prima volta.
----------------------------------------
AUTORE: 2196
DATA :07/05/2010 - 13:06:44
----------------------------------------
Grazie provo e ti so dire.
----------------------------------------
================================================================================
"Ripulire" un array per una serie di misure
================================================================================
AUTORE: 3051
DATA :05/05/2010 - 11:57:56
----------------------------------------
Salve a tutti,
avrei qualche domandina...immagino che siano cose piuttosto terra-terra, ma sono nuovo sia del forum che della programmazione con Labview.
1) Ho creato una routine per fare più volte un coclo di misure, cambiando alcuni parametri. Ad ogni ciclo memorizzo una serie di array 1d di dati che, alla fine del ciclo, scrivo in un file. Quello che non capisco è se ci sia una funzione per svuotare in automatico questi array all'inizio del ciclo di misure successivo, oppure devo usare un ciclo FOR per cancellare in sequenza gli n elementi di ogni array.
2) Ho notato che i programmi che ho realizzato (modificando quelli fatti da altri prima di me) a volte sembrano un po' instabili e mi restituiscono degli errori (in genere "no listener detected" o qualcosa di questo tipo). E' possibile che sia dovuto al tempo troppo scarso per comunicare con gli strumenti? Io di solito imposto un "wait 500ms" per ogni comunicazione, è troppo breve? Oppure che l'operazione di salvaschermo&affini del pc disturbi il programma in esecuzione?
Grazie a tutti
----------------------------------------
AUTORE: 1168
DATA :05/05/2010 - 13:38:35
----------------------------------------
Ciao
1) Sei un po' generico... Dipende come hai fatto tu il ciclo di acquisizione... di sicuro da qualche parte puoi usare "initizlize array" con comodo da qualche parte! Che struttura di programmazione hai utilizzato?
2) 500ms di timeout possono essere più che sufficienti... anche qui, che strumenti sono? Il dato loro lo mandano in straming oppure il tuo messaggio scatena un'acquisizione, filtro, condizionamento, qualcos'altro e quindi 500 ms possono essere pochi? soprattutto su che bus comunichi?
Il salvaschermo di per sè non è un problema, come invece lo possono essere le altre impostazioni di risparmio energetico...
Ti conviene comunque dividere le domande in due post, in modo da non mischiare le cose.
Ciao
Pietro
----------------------------------------
AUTORE: 3051
DATA :05/05/2010 - 17:15:15
----------------------------------------
Ciao,
prima di tutto grazie della risposta.
Allora nell'ordine:
1)Mi stai quindi dicendo che se ogni volta che ricomincia un ciclo uso "Initialize Array" sui miei array 1-dim che voglio riutilizzare (immagino mettendo come element=0) Labview li svuota e li rende pronti per un nuovo ciclo di acquisizioni? Voglio dire, non è che resta da qualche parte memoria dei vecchi dati e si crea qualche errore?
2) Mi pare che in generale il problema sia abbastanza complesso (per me): in generale ogni volta che voglio acquisire UN SINGOLO DATO devo comunicare con gli strumenti, così come quando voglio cambiare in sequenza dei parametri. Per quello mi chiedo se una sequenza troppo fitta di comunicazioni possa magari OGNI TANTO ( e questo però lo trovo strano) dare un errore. Per ora comunque ho trovato un compromesso ch pare stabile, magari più avanti approfondirò la questione.
Grazie ancora!
----------------------------------------
AUTORE: 1168
DATA :06/05/2010 - 07:25:33
----------------------------------------
1) yes... tutto dipende da come fai l'acquisizione. Male che vada, con l'inizializzazione dell'array ti trovi una fila di zeri o NaN, a seconda di come inizializzi. Puoi anche inizializzare con un array vuoto. e il gioco è fatto.
2)la cos apuò essere, anche se 500 ms sono tantini, anche per una comunicazione seriale. tutto dipende se lo strumento è abbastanza veloce!
----------------------------------------
AUTORE: 645
DATA :06/05/2010 - 08:49:19
----------------------------------------
Dunque...
1) I vettori in LabView possono essere scritti e riscritti senza problemi di memoria; tra le funzioni dedicate agli array ci sono quelle per scrivere in determinate posizioni: la cosa importante è che prima di scrivere ti posizioni all'inizio dell'array. Se invece vuoi mantenere i dati vecchi puoi iniziare a scrivere dopo l'ultima posizione. E se vuoi modificare solo alcuni valori è sufficiente posizionarsi (o eventualmente cercarli) e poi scrivere il nuovo dato. Quando registri l'array su file LabView registra il vettore così com'è senza problemi di reset.
1bis) In realtà ci sono casi in cui è bene inizializzare l'array: si consiglia di inizializzare un array nullo prima dell'inizio del ciclo se si vogliono particolari prestazioni in termini di velocità. L'inizializzazione prepara la memoria e la "mette in attesa" di dati. Solitamente però non è un'operazione indispensabile.
2) Ogni strumento è un mondo a sè e nello stesso tempo uguale a tutti gli altri... Mi spiego: la struttura di comunicazione con strumenti realizzabile con LabView è abbastanza simile per porte seriali, ethernet, bluetooth e chi più ne ha più ne metta. Solitamente si eseguono le operazioni:
a) apertura comunicazione (con eventuale configurazione della porta)
b) invio di un comando
c) lettura della risposta
d) chiusura della comunicazione.
Come comunichi con gli strumenti? Porta seriale? Daq-mx?
A seconda della tecnologia ci sono accorgimenti particolari da seguire... Dici che l'errore ti viene resistituito ogni tanto... Quindi il programma in sè sembrerebbe funzionare...
Forse c'è qualche accorgimento da fare... Prova ad allegare il VI al post o anche solo un'immagine del Block Diagram.
----------------------------------------
AUTORE: 3051
DATA :06/05/2010 - 13:52:29
----------------------------------------
Ho capito ma una cosa....come si fa a definire l'array inizializzato come "vuoto"?
Con quasi tutti gli strumenti comunico con interfacce GPIB. Non ne so quasi niente, infatti per la maggioranza di questo ho aggiunto parti ad un programma preesistente, per inserire un nuovo strumento. Con quest'ultimo, che è quello che a volte mi dà problemi (no listener condition detected), uso i subVI che ha fornito la casa produttrice (è un generatore KEPCO). In questi tutti le comunicazioni sono tramite VISA (che ancora non ho capito COSA sia...un software, un linguaggio???).
Ho allegato il VI che sto usando, anche vi sfido a capirci qualcosa!!!
Faccio presente che in realtà ora funziona abbastanza bene, però per sicurezza ogni volta che lo riutilizzo credo sia meglio chiudere COMPLETAMENTE Labview e riaprirlo: non so se questo sia già sintomatico di qualcosa di sbagliato...
Comunque se qualcuno fosse così santo da dargli un'occhiata e dirmi a colpo d'occhio se c'è qualcosa che proprio è migliorabile, lo apprezzerò moltissimo.
Vi ringrazio di nuovo in anticipo...
----------------------------------------
AUTORE: 1078
DATA :06/05/2010 - 14:59:30
----------------------------------------
[quote="jankafi":3loo18wz]Ho allegato il VI che sto usando, anche vi sfido a capirci qualcosa!!! [/quote:3loo18wz]
Sarebbe carino se postassi anche tutti i suoi subvi.
Per semplicità comunque è sufficiente un esempio semplificato del tuo VI, potrebbe essere sufficiente un esempio della funzione interessata. Da lì poi prenderai spunto per risolvere il tuo problema.
----------------------------------------
================================================================================
Input a .dll
================================================================================
AUTORE: 2274
DATA :05/05/2010 - 12:44:52
----------------------------------------
Ciao a tutti,
sto utilizzando il SIT (simulation interface toolkit) per convertire dei modelli simulink in delle .dll d apoter utilizzare in Labview. La conversione è riuscita ed inoltre sono riuscito anche a creare il Vi che mi gestisce la .dll
Ora il mio problema sta nel come dare gli input alla .dll, in quanto posso usare come input solamente dei controlli (numerico o altro) del front panel, ma se volessi aggiornare gli input dinamicamente (ad esempio all'interno di un loop) non mi è permesso di farlo o meglio la .dll non si accorge del cambiamento del valore della variabile.
qualcuno sa come superare il problema?
oppure cambiare il valore di una variabile dinamicamente non è possibile?
cioa e grazie
Barciuz
----------------------------------------
AUTORE: 2274
DATA :05/05/2010 - 13:32:25
----------------------------------------
nel dettaglio il mio sistema è un supervisore (realizzato in Labview) con all'interno un sistema di controllo (dll del simulink). Questo sistema di controllo, quindi la dll, gira in un loop e gli devo dare in ingresso i valori raccolti dai sensori che ho a disposizione, valori contenuti in delle variabili.
La dll però non si accorge delle variazioni dei valori delle variabili dei sensori ma continua a funzionare con il valore che gli arriva in ingresso allo start del "vi".
quindi vorrei sapere se esiste un metodo per passare alla dll i valori dei sensori che variano nel corso della simulazione.
ciao Barciuz
----------------------------------------
AUTORE: 645
DATA :06/05/2010 - 08:51:25
----------------------------------------
Strano... Non è che hai lasciato le variabili fuori dal ciclo? Se è così i valori non vengono aggiornati ma rimangono fissi alla condizione iniziale.
Eventualmente prova ad inserire nel ciclo i Property Node legati ai valori delle variabili (Value) o le Local Variable anzichè i controllo veri e propri.
----------------------------------------
AUTORE: 1078
DATA :06/05/2010 - 09:38:49
----------------------------------------
Ciao baricuz,
Mi sembra un comportamento della DLL alquanto strano. Normalmente quando chiami una dll esterna con il [b:bjwrrahp]call by library function[/b:bjwrrahp] puoi aggiornargli i valori ogni volta che fai la chiamata. Alla fine si comporta come un SubVI qualunque. Sicuramente puoi aggiornare i valori ciclicamente all'interno di un loop (che esso sia For o While).
Per farci capire meglio e magari aiutarti un po' più nel dettaglio, potresti postare un'immagine del ciclo di chiamata?
Meglio ancora sarebbe se potessi postare un'esempio significativo su cui poter lavorare....
Nell'esempio che ti sto postando chiamo la funzione CompareStringA della Kernel32 di windows. Dovrebbe funzionare su tutti i pc che montano wondows. Come puoi vedere al momento della chiamata non so che valori ho in ingresso alla DLL.
Spero ti sia di aiuto.
----------------------------------------
AUTORE: 2274
DATA :06/05/2010 - 10:36:31
----------------------------------------
Forse non ho premesso che l'interfacciamento del Labview con la libreria Simulink è stato effettuato automaticamente dal SIT (simulation interface toolkit) Connection Manager, e quindi io in realtà non ho agito direttamente sulla libreria.
Il problema sta nel fatto che riesco i valori dei parametri cambiano solo quando modifico direttamente un controllo (es- knob) ma non cambiano se modifico il valore della variabile locale relativa al controllo.
Nei file che vi ho allegato il principale è Controllo_PID, ed l'interfacciamento con la libreria viene fatto dal drive.vi che trovate all'interno del progetto allegato. Interessante nel progetto è anche valutare blocco_1_traduzione_Base Rate Loop.vi, dove blocco_1_traduzione è il file del modello matlab ".mdl" che ho tradotto in .dll
grazie dell'aiuto
ciao Barciuz
----------------------------------------
AUTORE: 2274
DATA :06/05/2010 - 10:40:46
----------------------------------------
Ecco i file che avevo dimenticato di allegare.
----------------------------------------
AUTORE: 2274
DATA :06/05/2010 - 10:44:58
----------------------------------------
scusa io lavoro con labview 8.6, sit 5.0, matlab 2008.a.
potresti rimandarmi l'esempio in labview 8.6?
grazie mille
----------------------------------------
AUTORE: 2274
DATA :06/05/2010 - 10:54:02
----------------------------------------
per completezza ti allego anche il file .mdl che ho tradotto in libreria tramite il Sit 5.0
----------------------------------------
AUTORE: 1078
DATA :06/05/2010 - 13:23:39
----------------------------------------
Purtroppo non posso aprire il tuo progetto, non ho la libreria SIT installata.
Ti giro il mio esempio nella versione richiesta.
[quote="barciuz":2zebmbgi]Il problema sta nel fatto che riesco i valori dei parametri cambiano solo quando modifico direttamente un controllo (es- knob) ma non cambiano se modifico il valore della variabile locale relativa al controllo.[/quote:2zebmbgi]
Probabilmente stai gestendo la chiamata alla DLL all'interno di una event structure, penso nel valuechange del knob. Se la mia supposizione è esatta, non vedrai mai il cambiamento del valore restituito dalla DLL, perchè cambiando il value del knob con local variable non scateni l'evento change. Prova a sostituire la local variable con il property node Value change segnalling, questo property node a differenza del suo gemello e delle local variable scatena l'evento value change del controllo.
----------------------------------------
AUTORE: 2274
DATA :06/05/2010 - 16:55:00
----------------------------------------
ciao, scusa la mia ignoranza ma potresti postarmi un esempio di utilizzo di un property node, in particolare se possibile uno sul value change, che non so come fare... ciao e grazie
----------------------------------------
AUTORE: 2274
DATA :06/05/2010 - 17:30:54
----------------------------------------
sono riuscito da solo ad usare il property node e penso che un passo avanti l'ho fatto, però rimane il fatto che non riesco a cambiare i valori alla dll
ciao Barciuz
----------------------------------------
AUTORE: 1078
DATA :07/05/2010 - 07:21:24
----------------------------------------
prova a postare un esempio semplificato che più o meno rispecchia la tua applicazione... così gli diamo un'occhio insieme e magari risolviamo il problema!
Nell'esempio, usa una libreria windows così nessuno di quelli che voglio intervenire avranno problemi nel far girare il codice!
----------------------------------------
AUTORE: 2274
DATA :10/05/2010 - 09:58:11
----------------------------------------
Sinceramente non ho mai usato una dll e quindi non saprei da dove partire per creare un esempio semplice, ed inoltre non so se con una libreria di windows si possa riprodurre il mio caso in cui utilizzo il SIT connection manager per creare l'host VI ed i vari driver.
L'esempio più giusto su cui lavorare penso sia il codice da me già postato
----------------------------------------
AUTORE: 645
DATA :11/05/2010 - 10:20:35
----------------------------------------
Puoi inviare un'immagine del Block Diagram?
----------------------------------------
AUTORE: 2274
DATA :11/05/2010 - 11:25:31
----------------------------------------
Ciao...
allora allego due immagini, la prima del drive.vi che gestisce la libreria, e la seconda che è il blocco 5.a (all'interno del driver.vi) "...base rate loop.vi" ed è dove penso che devo inviare in ingresso i valori alla libreria.
Questi file sono contenuti anche all'interno della cartella che avevo allegato in precedenza.
----------------------------------------
================================================================================
Clear Graph XY - Perdita formattazione
================================================================================
AUTORE: 1168
DATA :05/05/2010 - 13:29:03
----------------------------------------
Buongiornoa tutti.
per un semplice programma di acquisizione sforzo-deformazione, sto plottando tre grandezze, ognuna rispetto ad una quarta su un grafico XY (acquisizione trmite FP).
Per avere coerenza di colori, dove tutte le grandezze (4) sono in relazione al tempo di acquisizione, vado amodificare le proprietà del colore e stile punto del grafico direttamente a VI fermo agendo sul grafico.
Il mio problema che se cancello il grafico XY facendo "tasto destro"->"clear graph", mi si perde tutta la formattazione dei plot.
Al momento ho risolto mettendo un tasto di "reset" che quando premuto porta l' History size a zero.
Allego il VI per comodità in formato 8.6. I sub VI dovreste averli, fanno parte degli esempi di LV.
Per esempio settate il plot 0 rosso, il plot 1 verde e il plot 2 azzurro sul grafico di destra e poi lo stile "a punti" e non con la linea che congiunge i campioni. Poi fare tasto destro e "clear graph". Quello che succede a me è il primo plot che rimane rosso, il secondo rosso anch'esso e il terzo verde, tutti con la linea tra i campioni.
Vorrei non dover reimpostare la leggenda programmaticamente, anche perchè mi sembra strano.
Grazie tutti.
----------------------------------------
AUTORE: 1078
DATA :06/05/2010 - 11:14:48
----------------------------------------
Cioa pio,
il problema sta nel fatto che quando fail il "clear graph" ti vengono fisicamente eliminati i Plot. Io ho risoltoil problema controllando l'evento scatenato dalla selezione dello short cut menu che pulisce il grafico e rimodellandomelo a misura.
Ti posto l'esempio, vedi tu come inserirlo nel tuo codice, io lo inserirei in un loop parallelo.
----------------------------------------
AUTORE: 1168
DATA :06/05/2010 - 19:18:08
----------------------------------------
Grazie Ricky!!!
Ci si vede al prossimo corso!
----------------------------------------
AUTORE: 1078
DATA :07/05/2010 - 07:18:23
----------------------------------------
Certo....
sempre pronto a mettere in crisi gli insegnanti NI...!
----------------------------------------
================================================================================
SW con comunicazione con 8 strumenti
================================================================================
AUTORE: 2435
DATA :06/05/2010 - 13:38:06
----------------------------------------
Ciao a tutti...
volevo chiedervi una cosa...tra non molto dovrò sviluppare un SW che consenta nel caso peggiore la comunicazione con 8 strumenti tra cui:
1 in Ethernet
4 in RS232
3 in 485
presupponendo che il progetto utilizzerà cicli while paralleli per ogni strumento di comunicazione o protocollo,
credete che per qualche motivo il SW finale possa essere rallentato dalle comunicazioni?
O avete qualche consiglio o qualche accorgimento su cui devo fare attenzione??
Grazie
----------------------------------------
AUTORE: 1078
DATA :06/05/2010 - 15:02:17
----------------------------------------
sicuramente dovrai sincronizzare bene le tempistiche di esecuzione dei vari thread.
Il consiglio che ti posso dare è quello di usare le code ed eventualmente i notifier per ottimizzare le operazioni di scambio dati....
Siamo a disposizione per aiutarti nell'ottimizzazione dei vari thread, quando hai dubbi chiedi pure!
In bocca al lupo.
----------------------------------------
AUTORE: 2435
DATA :06/05/2010 - 16:06:03
----------------------------------------
Grazie per la risposta...
infatti uso già delle strutture QSM per sviluppare il progetto....tipo l'esempio che si trova nel forum qsm-example (mi sembra)..
Ovviamente con alcune modifiche per non andare ad intasare la struttura dei dati e ottimizzare le tempistiche..
Comunque grazie ancora...farò sicuramente altre domande più avanti
----------------------------------------
================================================================================
determinare il tipo di onda
================================================================================
AUTORE: 1078
DATA :07/05/2010 - 07:36:59
----------------------------------------
Ciao a tutti,
ho un problemino e credo che voi mi potreste aiutare. Avendo una waveform come posso determinarne il tipo di forma d'onda? Ovviamente la waveform in ingresso è una forma d'onda nota: sinusoide, quadra, triangolare, costante, rampa o a dente di sega.
Grazie in anticipo!
----------------------------------------
AUTORE: 645
DATA :10/05/2010 - 08:56:54
----------------------------------------
Forse si può fare qualcosa con la trasformata di Fouriere e l'analisi delle componenti in frequenza ottenute.
Non ricordo bene ma mi pare che ogni forma d'onda possa essere distinta dalle altre (almeno le principali) per il numero di componenti in frequenza trovate, l'ordine esponenziale o il fatto che siano componenti pari o dispari.
----------------------------------------
================================================================================
VISA Write
================================================================================
AUTORE: 3056
DATA :08/05/2010 - 08:05:51
----------------------------------------
Salve a tutti,
sono un nuovo iscritto a questo forum e volevo porgervi un quesito a proposito del VI VISA Write.
Spero di non sbagliare dicendo che questo VI scrive la stringa che riceve in ingresso sulla porta seriale indicata. La mia curiosità è questa: In che modo vengono inviati i dati sulla seriale? Cerco di spiegarmi meglio...
Secondo voi volendo inviare sulla porta una stringa del genere "00MM40*", il VI cosa invierà realmente? Un array di 8 byte in cui ogni elemento rappresenta la codifica, magari in ascii, di un carattere? la stringa così com è? o che cosa?
Mi scuso per la banalità e forse l'inutilità della domanda ma spero che qualcuno voglia comunque aiutarmi.
Grazie a tutti
----------------------------------------
AUTORE: 1078
DATA :10/05/2010 - 13:05:24
----------------------------------------
[quote="eduardoc":uw7uyly2]Secondo voi volendo inviare sulla porta una stringa del genere "00MM40*", il VI cosa invierà realmente? Un array di 8 byte in cui ogni elemento rappresenta la codifica, magari in ascii, di un carattere? la stringa così com è? o che cosa?[/quote:uw7uyly2]
Se vuoi capire cosa sta uscendo dalla seriale, dovresti per prima cosa attaccargli un'oscilloscopio. Così vedi il segnale fisico. Altrimenti penso venga passata direttamente la stringa come passata al driver VISA!
----------------------------------------
AUTORE: 645
DATA :11/05/2010 - 10:18:50
----------------------------------------
Riparto dalla risposta di Ricky: cosa effettivamente venga inviato non lo so però sono sicuro che se dall'altra parte c'è una porta (per esempio seriale) che aspetta, riceverà un comando alfanumerico che poi verrà interpretato per fornire una risposta. So che non è molto...
----------------------------------------
================================================================================
vettori di digitali
================================================================================
AUTORE: 3061
DATA :11/05/2010 - 14:33:05
----------------------------------------
Aquisisco in un while loop un digitale per una decina di volte, formando successivamente quando esco dal ciclo un vettore di 10 elementi costituito da 1 e 0 o livello logico alto e basso che dir si voglia.
questa operazione viene eseguita per 10 volte, al termine della quale vorrei mettere tutti questi vettori in una specie di matrice o tabella (non so se è la stessa cosa)cosi da avere prima riga primo vettore acquisito, seconda riga secondo vettore acquisito e così via.
Ancora meglio sarebbe se riuscissi a vedere la composizione della tabella/matrice man mano che il programma viene eseguito (non è indispensabile).
Qualcuno mi può dare un mano???
Io ho fatto qualcosina con gli shift register ma non so se sto facendo la cosa migliore o quanto meno vorrei sapere chi è molto + programmatore di me la farebbe.
Grazie mille
Fabio
----------------------------------------
AUTORE: 2653
DATA :12/05/2010 - 09:13:05
----------------------------------------
Secondo me con gli shift register va bene.. Se sai che le acquisizioni sono sempre 10 allora puoi usare un for e con l'indicatore del numero di ciclo che sta effettuando lo usi per inserire il vettore in una matrice...
----------------------------------------
AUTORE: 1168
DATA :12/05/2010 - 09:57:56
----------------------------------------
Ciao!
Se ho capito bene alla fine quello che vuoi vedere è una matrice 10x10, con le righe che si riempiono una per volta(tutta la prima riga, poi tutta la seconda, ecc ecc.)
Si può fare tranquillamente... vedi allegato.
Nell'esempio ho messo un attesa di 1 s nel for esterno per simulare il tempo tra le acquisizioni dei 10 valori. Il random col paragone simula l'acquisizione dei booleani.
Se poi la matrice ti serve anche fuori dal doppio basca prendere l'uscita dallo shift register.
----------------------------------------
AUTORE: 2653
DATA :12/05/2010 - 10:00:33
----------------------------------------
Ottimo direi..
----------------------------------------
AUTORE: 3061
DATA :12/05/2010 - 10:02:51
----------------------------------------
Ciao Pio, intanto grazie mille per l'interessamento, ti chiedo cortesemente se puoi girarmi l'esempio in LV8.5 grazie
Fabio
----------------------------------------
AUTORE: 1168
DATA :12/05/2010 - 10:12:13
----------------------------------------
Eccolo in 8.5!
----------------------------------------
AUTORE: 1078
DATA :12/05/2010 - 11:20:37
----------------------------------------
una soluzione alternativa....
Unica differenza da quello che ti ha postato pio (a proposito, ciao pio!) è che nella mia versione visualizzo l'accensione dei led uno ad uno e non per vettore...
Funzionalità identica, estetica diversa! Scegli tu quale usare.
Buona giornata a tutti.
----------------------------------------
AUTORE: 3061
DATA :13/05/2010 - 11:27:58
----------------------------------------
Grazie mille ragazzi per il supporto che mi avete fornito, non speravo in così tanta attenzione, ho "sfruttato" a pieno i vostri suggerimenti.
Ciao a tutti
Fabio
----------------------------------------
================================================================================
Acquisizione continua e scrittura dati
================================================================================
AUTORE: 3060
DATA :11/05/2010 - 14:41:15
----------------------------------------
Salve, sono uno studente alle prime armi con LabView... attualmente uso la versione 8,6, una scheda scxi 1520 con relativa terminaliera e degli estensimetri...
La prova che devo effettuare si divide in 2 acquisizioni continue: una a 40hz come frequenza di campionamento (prova statiche) e una a 60khz (prove dinamiche, impulsi e urti)...
Utilizzando il DaqAssistant ho elaborato un VI che in tutti e due i casi mi calcola prima la media su un relativo lungo periodo e poi la sottrae in maniera da avere le deformazioni che partono da un valore prossimo allo zero.
Per il salvataggio dei dati invece utilizzo la funzione "write to measurement" che per la parte statica a 40hz di frequenza di campionamento non mi dà problemi, ma che per la parte dinamica a 60khz mi blocca il pc. Credo che il problema sia dovuto al grande flusso di dati che il pc elabora e che non riesce a scrivere man mano...
Vi lascio il VI per la parte dinamica, così da far capire bene la situazione attuale:
[url=http://img7.imageshack.us/i/dinamico60khz.jpg/:2m94usy0][img:2m94usy0]http://img7.imageshack.us/img7/5966/dinamico60khz.th.jpg[/img:2m94usy0][/url:2m94usy0]
Uploaded with [url=http://imageshack.us:2m94usy0]ImageShack.us[/url:2m94usy0]
La domanda è quindi: cosa utilizzare per permettere il salvataggio dei dati in maniera comandata (scelta dell'istante di tempo in cui partire e fermare il salvataggio) che sia insomma simile a "write to measurement"?
Utilizzare le funzioni: "open storage [TDM]", "write data [channel]" e "close storage" potrebbero essere utili?
Vi ringrazio anticipatamente per la disponibilità, la professionalità e la gentilezza...
Ogni ulteriore domanda chiarificatrice e ogni possibile soluzione sono ben accetti...
----------------------------------------
AUTORE: 1078
DATA :13/05/2010 - 16:07:45
----------------------------------------
Non riesco a capire esattamente di cosa hai bisogno, prova a spiegarti meglio.
----------------------------------------
AUTORE: 3060
DATA :13/05/2010 - 16:34:36
----------------------------------------
Avrei bisogno di un sistema\funzione di scrittura file che mi permetta di salvare in maniera semplice e diretta i dati elaborati... attualmente utilizzando "write to measurement" riesco a salvare qualche secondo di dati campionati a 60khz...
Vorrei utilizzare qualche altra funzione che mi permetta di salvare i dati per un tempo maggiore e che si avvii e stoppi tramite boolean (interruttore o pulsante che sia)...
P.s. vorrei continuare ad utilizzare il DaqAssistant...
----------------------------------------
================================================================================
Remote Panel via Web
================================================================================
AUTORE: 2653
DATA :11/05/2010 - 15:07:40
----------------------------------------
Salve a tutti.. Ho un piccolo problema sui remote panel..
Ho sbviluppato una applicazione che acquisisce H24 e che faccio girare su un pc agganciato alla rete internet...
Ora la mia idea era quella di poter accedere dall'esterno sull'interfaccia, sulla macchina dove sviluppo usando il tool->web publishing ci sono riuscito e riesco a vedere la mia interfaccia a meno di qualche problema di permesso per il controllo però è andato tutto a buon fine. Ora la mia idea è quella di costruire un exe e portarlo sulla macchina target dove non ho l'ambiente di sviluppo ma soo il run-time e i relativi driver dei dispositivi. Le ho provate di tutti i colori ma non sono riuscito a mettere sul web la mia applicazione.. Qualche potrebbe aiutarmi???
Grazie mille anticipatamente....
----------------------------------------
AUTORE: 838
DATA :11/05/2010 - 16:55:17
----------------------------------------
ma in locale dove c'è solo il runtime funziona la pagina web?
hai il firewall che blocca le porte del webserver della national?
----------------------------------------
AUTORE: 2653
DATA :11/05/2010 - 18:35:41
----------------------------------------
Allora in locale dove tengo l'ambiente di sviluppo funziona tutto ok anche se mi collega da un'altra macchina funziona( senza fare l'exe) mentre se faccio l'exe e lo porto sulla macchina target non funge la parte web..e in + il firewal l'ho configurato sia sulla mia macchina che su quella target
----------------------------------------
AUTORE: 482
DATA :12/05/2010 - 08:14:02
----------------------------------------
hai provato con l'exe dalla tua macchina locale?
ma soprattutto, hai installato il web server insieme al runtime sulla macchina target?
----------------------------------------
AUTORE: 2653
DATA :12/05/2010 - 08:37:09
----------------------------------------
si ho installao sia il run-time engine e anche il web server national
----------------------------------------
AUTORE: 1078
DATA :12/05/2010 - 11:22:55
----------------------------------------
hai abilitato il server web quando hai creato l'exe? è un'opzione dei VI...
----------------------------------------
AUTORE: 2653
DATA :12/05/2010 - 11:33:54
----------------------------------------
come lo abilito quando creo l'exe ??? con il file di configurazione aggiunto al progetto? se è così l'ho fatto....
----------------------------------------
AUTORE: 1078
DATA :12/05/2010 - 11:35:40
----------------------------------------
prova a dare un'occhio a quest'articolo...
[url:p1ra4b2o]http://digital.ni.com/public.nsf/allkb/CE910645DA1AAB2A86256B14006C8C98[/url:p1ra4b2o]
----------------------------------------
AUTORE: 2653
DATA :12/05/2010 - 11:53:41
----------------------------------------
Oggi faccio delle prove e ti faccio sapere...
----------------------------------------
AUTORE: 2653
DATA :13/05/2010 - 10:23:26
----------------------------------------
Ok funziona.. ho ancora qualche problema con la lrvt.dll una cosa del genere ora ho aggiornato il .net runtime visto che era l'origine dell'event viewer... Questo errore mi porta al blocco dell'applicazione... Allora ho pensato di prendere una strada diversa ovvero quella di passare attraverso le DataSocket.. Creo un Software parte client che mi visualizza i valori e lo spro sul web in modo tale se ho il blocco di questo me ne frega tanto il software che deve girare gira sempre senza nessun tipo di problema...
----------------------------------------
AUTORE: 2435
DATA :19/05/2010 - 13:57:06
----------------------------------------
Ciao,anche io ho fatto delle applicazioni in remote panel..
però tutte funzionanti in rete locale...
Sapete darmi delle indicazioni su come renderle disponibili in remoto a distanza?
Grazie e ciao
----------------------------------------
================================================================================
Movimentare piano XY
================================================================================
AUTORE: 3053
DATA :13/05/2010 - 15:38:05
----------------------------------------
Salve,
non ho trovato nessun argomento simile nel forum.
Dovrei movimentare un piano in X, Y e Z, che avro a breve,Sono dei motori passo passo che spostano un piano nelle 3 direzioni; dovrei scrivere una vi ad hoc per il mio progetto, non ho mai lavorato in tal senso, comando > movimento, ma solo acquisizioni dati.
Qualcuno ha qualche vi da farmi studiare per capire la logica di programmazione o suggerimenti su come impostare una vi di questo tipo.
[b:z9vdf7nd]grazie[/b:z9vdf7nd]
----------------------------------------
AUTORE: 1078
DATA :13/05/2010 - 16:05:32
----------------------------------------
Per muovere questi assi usi il pacchetto motion della NI?
oppure hai un driver a cui devi mandare dei comandi?
Nel secondo caso devi interpretare il protocollo di comunicazione del driver per movimentare gli assi, altrimenti trovi un sacco di esempi sull'utilizzo della libreria motion sul sito della NI.
Prova a specificare meglio che tipo di sistema stai realizzando!
----------------------------------------
AUTORE: 3053
DATA :14/05/2010 - 12:13:02
----------------------------------------
Grazie Ricky,
allora aspetto che mi arrivi l'hardware (martedi o mercoledi prossimo) e vedrò di essere piu dettagliato.
Conto comunque su un tuo suggerimento.
ciao
----------------------------------------
AUTORE: 1078
DATA :17/05/2010 - 20:26:48
----------------------------------------
Se posso, "sai" che ti aiuterò volentieri....
A proposito, devo chiamarti dottore adesso!!!
----------------------------------------
================================================================================
Una dritta, per favore?
================================================================================
AUTORE: 2993
DATA :15/05/2010 - 14:15:34
----------------------------------------
Vorrei una dritta per risolvere un problemino, se potete...
Poniamo il caso che io riceva una stringa da seriale e la visualizzi su un indicatore stringa.
Questa rimane visibile solo per l'istante in cui si riceve, poi si cancella.
Come fare per farla rimanere nel tempo ed eventualmente accodare le nuove ricezioni (magari sulla riga successiva, ma per questo non ho problemi)?
Penso bisogni realizzare una specie di "memoria", ma come?
Help me, please...
Grazie.
Maurizio.
----------------------------------------
AUTORE: 1165
DATA :16/05/2010 - 13:45:10
----------------------------------------
Sotto molti aspetti, il grafo del diagramma a blocchi di un VI implementa una macchina combinatoria (senza memoria). Per farlo diventare una macchina sequenziale (con memoria), il primo e più immediato elemento della sintassi del Labview è lo "Shift Register", quell'elemento che permette di trasferire nel tempo (ricordandoli) i valori tra una iterazione e l'altra di un loop (FOR o WHILE che sia). Per crearlo devi fare click col tasto destro del mouse sul bordo esterno di un cliclo e scegliere l'opzione "Add Shift Register". Guardati lo help contestuale per il suo uso. Questo ti permette di accodare una stringa ad ogni giro, semmai intercalando un "ritorno a capo" ogni volta, per visualizzare le stringhe su righe separate (attento che il carattere terminatore di riga è diverso per ogni sistema operativo, su Win è un doppio carattere ASCII, un Line Feed LF e un Carriage Return CR, che trovi già uniti in un unico carattere tra le costanti di stringa). Ciao.
----------------------------------------
================================================================================
programma labview
================================================================================
AUTORE: 3052
DATA :17/05/2010 - 20:42:54
----------------------------------------
salve,
Forse faccio una domanda stupida ma volevo chiedere se esistono versioni di labview, anche vecchie, che non hanno bisogno di una licenza(o che hanno bisogno di una licenza a basso costo) e che funzioni correttamente per essere adoperato da un prinicipiante come me (non demo o prove di 30 giorni).
Vorrei usarlo per scopo personale, per hobby e non per lavoro o per fini di lucro.
Se non ci fossero, esistono linguaggi G ( grafici) simili a labview gratuiti o non costosi come labview??
----------------------------------------
AUTORE: 1323
DATA :18/05/2010 - 10:37:39
----------------------------------------
Puoi acquistare la versione Student, ideale per scopi hobbistici e con le stesse funzioni di LabVIEW Full ma la scritta "Student Edition" in trasparenza su tutte le schermate, dal catalogo Futura Elettronica a meno di 40 €:
http://www.futurashop.it/allegato/8100- ... t=&d=39,95
Ciao
M.
----------------------------------------
AUTORE: 4
DATA :18/05/2010 - 12:05:22
----------------------------------------
[quote="teo74":o3bxi0jr]Puoi acquistare la versione Student, ideale per scopi hobbistici e con le stesse funzioni di LabVIEW Full ma la scritta "Student Edition" in trasparenza su tutte le schermate, dal catalogo Futura Elettronica a meno di 40 €:
http://www.futurashop.it/allegato/8100- ... t=&d=39,95
Ciao
M.[/quote:o3bxi0jr]
Ciao Matteo, questo e' interessante... ma e' da molto che esiste questa possibilita' ? Ammetto che non ne sapevo nulla.
Ciao
----------------------------------------
AUTORE: 3052
DATA :18/05/2010 - 14:37:43
----------------------------------------
GRazie mille, era proprio quello che cercavo!!
----------------------------------------
AUTORE: 1323
DATA :19/05/2010 - 22:19:41
----------------------------------------
@ ing. samu - ottimo!
@ ale: lanciato ufficialmente ad NIDays, se vogliamo mettere un post in home page sul ilvg sarebbe molto utile per i tanti partecipanti del forum!
A presto!!
M.
----------------------------------------
================================================================================
Troppi errori nel checksum, perchè?
================================================================================
AUTORE: 482
DATA :18/05/2010 - 10:28:48
----------------------------------------
...ma ciao!
sto comunicando con un nuovo strumento USB per la lettura di celle di carico.
Funziona tutto piu' o meno bene, salvo per il fatto che mi sembra che gli errori del checksum siano troppo frequenti.
Allego il vi di lettura che ho sviluppato e uno screenshot con la descrizione del protocollo.
Mi sembra di aver tralasciato qualcosa ma non capisco cosa.
Nella descrizione del protocollo si parla dei primi 4 bit del primo byte come sincronismo. Come li dovrei usare?
----------------------------------------
AUTORE: 1168
DATA :18/05/2010 - 14:52:27
----------------------------------------
Ciao!
ho dato un occhio... ma non mi è chiara una cosa: Lo strumento trasmette in straming? Se si il problema potrebbe essere quello... nel senso che il tuo VI va a prendere tutto quello che c'è nel buffer della VISA e lo "spacchetta" come da protocollo. Ma in questo modo tu non ti assicuri di leggere una trasmissione dall'inizio.
Io ho avuto lo stesso problema con delle stringhe NMEA0183... devi prendere tutto ciò che hai nel buffer, e poi cerchi 1111. Quando lo trovi, cominci a contare 16 bit e lì chiudi il pacchetto che analizzerai.
Quello che rimane non lo devi buttare, perchè è la testa del messaggio successivo. Lo metti quindi in uno shift register così da averlo a disposizione la prossima volta che chiami il VI. A questo punto attacchi la coda del giro antecedente in testa al pacchetto di bytes che leggi dal buffer VISA e ricominci a cercare 1111.
Male che ti vada, butti via la prima lettura.
Spero di essere stato chiaro.
Pietro
----------------------------------------
AUTORE: 482
DATA :19/05/2010 - 07:48:19
----------------------------------------
Tutto chiaro, confermo che lo strumento butta fuori dati continuamente senza bisogno di richieste di lettura.
----------------------------------------
AUTORE: 482
DATA :19/05/2010 - 10:10:34
----------------------------------------
Pero' stavo pensando....
Tra una lettura e l'altra, la porta potrebbe mandarmi piu' dati, quindi quello che io ho letto prima, potrebbe non essere la prima parte del dato che leggo dopo, giusto?
Quindi la soluzione è sempre e comunque leggere almeno 9 byte contro i 5 che mi vengono trasmessi in modo da avere un pacchetto completo ad ogni lettura, giusto? Senno' come faccio a sapere di aver letto i 5 byte subito successivi a quelli che ho letto prima?
----------------------------------------
AUTORE: 1168
DATA :19/05/2010 - 10:46:13
----------------------------------------
Correggetemi se sbaglio, ma se il buffer della porta è di una dimensione ragionevole, i dati non vengono persi, ma accodati fino al riempimento del buffer. Quindi finchè non vengono letti non vengono tolti dalla coda.
Tornando alla tua applicazione: secondo me ti conviene leggere tutti i bytes disponibili alla porta e accodarli allo shift register. A questo punto cerchi nello shift register 1111 e ti assicuri che dopo ci siano almeno 4 bytes. Se si allora levi dalla coda e post process, se no non fai nulla e aspetti che le letture dalla porta di accodino più bytes.
Unica accortezza è che potresti avere una coda di molti pacchetti di 5 bytes perchè il tuo VI viene chiamato con frequenza inferiore al riempimento del buffer della porta.... in questo caso ci sarebbe da aggiungere anche il controllo di quanti "1111+4 bytes" hai nello shift register e poi in un ciclo for inserire la parte che estrae, spacchetta e processa i dati.
Ciaoooooo
Pietro
----------------------------------------
AUTORE: 482
DATA :19/05/2010 - 13:49:21
----------------------------------------
Continua a non essermi chiaro qualcosa cazzarola...
Quando io leggo dal buffer, che dati leggo? gli ultimi arrivati o i primi?
Perchè se leggo i primi, e il buffer è lasciato settato di default a 4096 io leggerei un dato che risale a X tempo fa e non quello istantaneo.
Nella funzione di settaggio del buffer, specifica di dare una dimensione di poco superiore a quella dei dati che ci si aspetta.
Io ho bisogno del dato istantaneo e basta, per quetso pensavo ai 9 byte. Cosi' sono sicuro che un dato da 5 byte c'e' sicuro. e poi svuoto il buffer, cosi' sono sicuro di non andare a rileggere il dato appena letto.
Ovviamente tra una lettura e l'altra perdo dei dati, ma come faccio a non perderli visto che lo strumento continua a mandarmeli cosi' a muzzo e non ho niente che mi sincronizzi la lettura con la scrittura!?!?
----------------------------------------
AUTORE: 1168
DATA :19/05/2010 - 13:57:18
----------------------------------------
Se ti serve soltanto il valore istantaneo è ok settare il buffer a 9 byte, pensavo ti servissero tutti. E che per sincronizzare "spannometricamente" potessi inviare anche dei comandi di start/stop, e che l'intervallo di tempo tra un pacchetto e il successivo fosse fisso e settato dal filtro (quei famosi da 40 Hz a 400 Hz).
Ripeto se ti serve solo il dato attuale, leggine 9, e via sereno.
L'importante è che ti allinei su un 1111 e che non hai errori di checksum!
----------------------------------------
AUTORE: 482
DATA :20/05/2010 - 07:47:39
----------------------------------------
grazie mille per il supporto
----------------------------------------
================================================================================
Datasocket
================================================================================
AUTORE: 2653
DATA :18/05/2010 - 18:53:22
----------------------------------------
salve a tutti ho un piccolo problema.. Ho un software ( produttore) che scrive dati ogni secondo su un server datasocket remoto, che gira su 2003 server. Su questa macchina 2003 gira un software ( consumatore) che legge i dati è li publica sul web.. il mio problema è capire se il produttore sta scrivendo sul datasocket poichè se non scrive devo lanciare un allarme..
Sapresti dirmi come posso fare a capire se succede questo?
grazie mille anticipatamente...
----------------------------------------
AUTORE: 952
DATA :21/05/2010 - 04:27:08
----------------------------------------
Scusa non è chiara una cosa: l'allarme lo deve lanciare l'applicazione client o quella server?
Se il client puoi usare un watchdog se la server basta che recuperi gli errori generati dai vi di scrittura al DSS, generalmente se c'è qualche problema in scrittura al DSS viene generato un errore.
Ciao
----------------------------------------
================================================================================
Errore Comunicazione OPC
================================================================================
AUTORE: 2920
DATA :19/05/2010 - 11:42:55
----------------------------------------
Salve a tutti!
Approfitto di nuovo di questo forum in cui trovo sempre utili suggerimenti.Sto cercando di realizzare una comunicazione tramite protocollo OPC passando attraverso Movicon.Ho un PLC Omron collegato in seriale al mio pc, con Movicon comunico in seriale con il plc e metto a disposizione sul protocollo OPC le variabili che voglio visualizzare sul Labview.Facendo una diagnostica tramite Diagnostic OPC Client verifico che l'OPC funziona correttamente.Il problema si verifica quando entra in gioco Labview: creo un nuovo progetto,un nuovo I/O Server OPC, prendo le variabili messe a disposizione da Movicon e le trasferisco sul mio vi. Per semplicità voglio visualizzare sul vi una lampada che si accende in corrispondenza del passaggio a ON di un'uscita del PLC.Mando in esecuzione il vi e mi compare la seguente schermata:
Error -1950679035 occurred at ni_tagger_lv_read
Possible reason(s):
Labview: (Hex 0x8BBB0005) Unable to locate variable in the Shared Variable Engine. Deployment of this variable may have failed.
Qualcuno ha avuto qualche problema simile?
grazie mille per l'aiuto.
Mary
----------------------------------------
================================================================================
Com Virtuale su PDA
================================================================================
AUTORE: 3072
DATA :19/05/2010 - 13:56:06
----------------------------------------
Salve, sono nuovo del forum sono uno studente di ingegneria informatica e sto facendo la tesi ad un progetto in Labview...sto effettuando l'upgrade su un programma pre-esistente ke si interfaccia ad un multisensore ambientale dotato di interfaccia RS232 e di un'antennina bluetooth. Il software funziona perfettamente tramite PC con la seriale RS232 e con il bluetooth. Abbiamo deciso in un secondo momento di portare lo stesso software su palmare, ho provato vari approcci per rendere funzionante tutto anke su PDA (HTC Touch cruise)....il metodo di collegamento al sensore è quello bluetooth solo che l'unico modo x far interfacciare il palmare al sensore è tramite com virtuale (poichè il programma è già impostato in questo modo)...riesco a fargli assegnare la com 2 tramite il bluetooth del telefono solo ke una volta avviato il programma è come se non rilevasse la com. Qualcuno ha mai creato un software di questo tipo????Sapreste darmi una mano????
----------------------------------------
================================================================================
Leggere file e generare segnale analogico con PCI 6733
================================================================================
AUTORE: 3076
DATA :19/05/2010 - 19:11:28
----------------------------------------
ciao a tutti, sono uno studente e un neofita di labview. Uso la versione 2009.
Avrei bisogno di alcune indicazioni per un progetto.
Dovrei leggere molti campioni di uno o più segnali da file txt o excel e mandarli continuamente a una PCI 6733 per generare i segnali analogici corrispondenti.
La mia domanda è quel'è un metodo efficente per leggere e mandare continuamente i segnali alla PCI 6733?
è più conveniente leggere da file txt o excel?
Devo riimmagazzinare i dati prima di spararli fuori alle uscite?
Infine avete qualche esempio che possa aiutarmi?
vi ringrazio in anticipo
wasabi
----------------------------------------
AUTORE: 1078
DATA :21/05/2010 - 10:19:45
----------------------------------------
Ciao Wasabi,
Andiamo per ordine:
[quote="wasabi22":3hdc9743]è più conveniente leggere da file txt o excel? [/quote:3hdc9743]
Se per file excel intendi un file xls è sicuramente più conveniete un file txt. Il perchè è molto semplice: non devi utilizzare nessun componente excel per caricare i dati. L'estrapolazione delle informazioni da file excel in LV è una cosa un pochino complessa e oltretutto abbastanza dispendiosa in termini di risorse. Se invece intendi un CSV, le due operazioni hanno lo stesso peso; i CSV sono file di testo con una particolare formattazione: utilizzano il carattere ";" come delimitatore dei campi e il carattere LF come delimitatore di righe.
Per la lettura di dati da file txt trovi un sacco di esempi su questo forum.
[quote="wasabi22":3hdc9743]Devo riimmagazzinare i dati prima di spararli fuori alle uscite?[/quote:3hdc9743]
I metodi di generazione di un segnale sono molteplici, dipende dal tipo di segnale, dalle tempestiche ed eventualmete dalla sua sincronizzazione con altri HW.
Non è un argomento banale, ti consiglio quindi di leggere questo tutorial:
[url:3hdc9743]http://zone.ni.com/devzone/cda/tut/p/id/4089[/url:3hdc9743]
Se poi dovessi avere dei problemi specifici siamo a disposizione per aiutarti...ricordati sempre di creare esempi semplici che rispecchiano il tuo problema e su dove possiamo intervenire cercando di darti le dritte necessarie.
Buon lavoro.
----------------------------------------
AUTORE: 3076
DATA :27/05/2010 - 10:39:16
----------------------------------------
Grazie per la risposta ricky,
entro più nel dettaglio del mio progetto. Dovrei leggere dei dati campionati (salvati su file txt) provenienti da segnali elettrocardiografici. Fatto ciò devo mandare, il pezzo di segnale replicato più volte, ad una PCI-6733 che mi converta i segnali campionati in segnali analogici, cioè ricostruire il segnale elettrocardiografico di partenza per andare poi a testare degli elettrocardiografi. Al momento non ho a disposizione la PCI 6733 e stavo provando ad usare LV Signal Express con cui ho importato il file txt e per ora stavoo cercando di usare un simulated device (in measurement & automation) e importarlo in LV Signal express.
La domanda è : posso mandare i miei segnali usando solo questi due programmi e poi eventualemente importare questa parte in labview per aggiungere altro?
cioè non ho ben capito come fare lo streaming dei miei dati alla PCI? come si fa a mandare come ingresso al simulated device i dati del file e poi andare a vedere che uscita analogica fornisce il simulated device? c'è il sistema per visualizzarlo (tipo oscilloscopio)?
spero di esser stato chiaro,
Wasabi
----------------------------------------
AUTORE: 3076
DATA :27/05/2010 - 10:44:23
----------------------------------------
ah i dati nel file txt sono di questo tipo:
...
300.000 -0.095 -0.140
300.003 -0.110 -0.140
300.006 -0.110 -0.120
300.009 -0.115 -0.110
300.012 -0.115 -0.120
300.015 -0.110 -0.110
300.018 -0.100 -0.120
300.021 -0.100 -0.120
300.024 -0.105 -0.110
300.027 -0.115 -0.110
300.030 -0.100 -0.105
...
----------------------------------------
================================================================================
TCP/IP error 56
================================================================================
AUTORE: 1124
DATA :20/05/2010 - 17:08:49
----------------------------------------
Ciao
ho il seguente problema: un vi server, in esecuzione su un controller PXI-8156b, invia sulla porta 6430 un array di circa 200 single ogni 200ms, mentre un vi client in esecuzione su un'altro pc legge i dati. Tutto ha funzionato giorno e notte per più di una settimana, ma oggi mi sono accorto che non venivano più aggiornati i dati. Eseguendo un riavviamento prima del server e successivamente del client vedo su quest'ultimo un unico aggiornamento dei dati. Sul server la catena degli errori mi segnala:
[quote:27n3prts]Error 56 occurred at an unidentified location
Possible reason(s):
LabVIEW: The network operation exceeded the user-specified or system time limit.[/quote:27n3prts]
Il vi server gira in LV5.1 ed è derivato dal vi "Simple data server" presente negli esempi. Il VI client , derivato dall'esempio "simple data client", in LV7.11. Entrambi i pc sono collegati in rete mediante uno switch 10/100. A questo switch fa capo anche un ulteriore pc e un ramo della rete aziendale.
Come posso risolvere il problema in modo definitivo? Ovviamente senza cambiare il controller.
Grazie a tutti.
Stefano
----------------------------------------
AUTORE: 1078
DATA :20/05/2010 - 21:07:58
----------------------------------------
Dalla segnalazione d'errore sembrerebbe un problema di timeout. Siccome però, come hai detto in precedenza, tutto ha funzionato correttamente per giorni direi che potrebbe essersi guastat la porta ethernet dello switch. Prova a cambiare porta di connessione, prima al client e se ti dovesse tornare lo stesso errore, al server. Avrei una domanda da fare: non è che avete un firewall sulla rete aziendale? se così fosse, non è che i tuoi colleghi dell'ICT hanno cambiato policy e ti bloccano uno degli indirizzi IP delle due macchine?
Alcuni firewall o antivirus, riconosco lo scambio eccessivo di dati tra due PC come potenziali minacce, se i due pc non sono nell'elenco delle macchine a cui è permesso fare "streaming" in modo continuo è probabile che sia il firewall che l'antivirus, o uno dei due, intevenga bloccando il passaggio dei dati. Se fossi in te controllerei!
Ciao e buon lavoro.
----------------------------------------
AUTORE: 1124
DATA :21/05/2010 - 07:30:09
----------------------------------------
Ciao Ricky
grazie per la risposta.
Non mi è del tutto chiaro il meccanismo TCP/IP, ma pensavo anche io che l'errore fosse dovuto a un timeout.
E' vero che il pc non direttamente coinvolto nel giro del fumo era collegato ad una pagina internet esterna alla rete aziendale, ma anche nei giorni precedenti ho navigato pesantemente senza nessun problema al resto del sistema. Escludo modifiche di policy, comunque stiamo verificando nel log data del firewall se ci sono stati particolari conflitti.
L'antivirus potrtebbe essere concausa del problema, ma anche nei giorni precedenti ha attivato il download degli aggiornamenti.
La cosa ideale sarebbe separare il sistema di datalogging dal resto della rete, ma devo comunque mantenere attivo l'accesso ad internet.
Il tutto nasce dal fatto che ho versioni differenti del NI-DAQ sul controler e sul pc client e non riesco ad usare il servizio di RDA server per fare datalogging. Sarei quasi tentato a rimettere in pista un vecchio W98SE e allineare le due versioni di NI-DAQ, ma prima vorrei riprovare il sistema TCP/IP magari limando ulteriormente il volume dei dati trasferiti.
E vorrei anche andare al mare...
Stefano
----------------------------------------
AUTORE: 1124
DATA :21/05/2010 - 15:04:11
----------------------------------------
Ciao
ho risolto il problema distribuendo i dati dal data logger al client mediante DataSocket.
Il sistema è partito subito e finora sembra stabile.
Ho derivato questo sistema rispettivamente dagli esempi "DS writer" e "DS reader".
Non sarà il sistema migliore, ma è lo ritengo una buona alternativa quando non si può utilizzare il servizio "RDA server".
Stefano
----------------------------------------
AUTORE: 43
DATA :24/05/2010 - 14:30:42
----------------------------------------
[quote="stefanog":rr1xghah]Ciao
ho risolto il problema distribuendo i dati dal data logger al client mediante DataSocket.
Il sistema è partito subito e finora sembra stabile.
Ho derivato questo sistema rispettivamente dagli esempi "DS writer" e "DS reader".
Non sarà il sistema migliore, ma è lo ritengo una buona alternativa quando non si può utilizzare il servizio "RDA server".
Stefano[/quote:rr1xghah]
Pazzesco!!!
Ma carissimi raga,
mi sembra che il banale errore di [56 timeout scaduto] che può occorrere utilizzando i VI di gestione TCP (in particolare sulla "TCP Open connection" e nella "TCP Read") nasce dal fatto che questi VI richiedono espressamente un parametro di Timeout per il quale è cmq previsto un default diverso da 0.
I VI attendono l' "evento" per un tempo infinito specificando il timeout = -1.
Ma -1 è un tempo non accettabile se l'unico modo di uscire dall'attesa sia quella di chiudere la comunicazione aperta.
Però ciò non può essere portato a compimento per il fatto che un solo VI alla volta può gestire lo stesso ref. di comunicazione, cioè non è possibile scrivere e leggere contemporaneamente (peccato!)
Perciò timeout deve essere sempre un valore >=0 e questo errore (56) è "da testare" SEMPRE nelle comunicazioni TCP.
A mio modo di vedere non ha senso nemmeno loggarlo, va filtrato...
bye
----------------------------------------
================================================================================
25i47hvu', 1, 0, '', 0, 0, 0);
================================================================================
AUTORE: 1
DATA :21/05/2010 - 10:44:06
----------------------------------------
----------------------------------------
AUTORE: 1078
DATA :21/05/2010 - 12:02:38
----------------------------------------
sul loro sito?!?
----------------------------------------
AUTORE: 1078
DATA :21/05/2010 - 12:05:19
----------------------------------------
prova a dare un'occhiata qui.... [url:2lgx60yo]http://www.picotech.com/drivers.html[/url:2lgx60yo]
----------------------------------------
AUTORE: 1
DATA :26/05/2010 - 15:44:12
----------------------------------------
----------------------------------------
AUTORE: 43
DATA :26/05/2010 - 17:19:50
----------------------------------------
[quote="sandro.mosfet":2r1d8vq9]c'hai l'occhi boni assai, pe vedè quello che nun c'è![/quote:2r1d8vq9]
aaaaaaaaaaaaaaa mosfet apri bène l'occhi Tu
da quella paginetta vai in quella di download
cioè questa
http://www.picotech.com/software.html
nello step1 scegli
Piscope 3204
Nello step 2 scegliere
Other software - Software Development Kit R6.4.28
Estrai da
PS3000sdk_r6_4_28.zip
lo zip
ps3000_labview_examples.zip
e
ps3000.dll
I VI sono in versione LV 8.2
bye
----------------------------------------
================================================================================
SAE J1939
================================================================================
AUTORE: 1168
DATA :24/05/2010 - 09:20:06
----------------------------------------
Buongiorno a tutti. Per un sistema di log di dati particolare, mi piacerebbe interfacciare delle misure acquisite con delle schede ordinarie a un sistema che fornisce continuamente altri dati tramite CAN e in particolare SAE J1939.
Ho scaricato l'exempio
dal sito di NI e più o meno mi torna tutto... solo che...non ho capito cos'è un PGN! La spegazione dell'esempio dice "This new combination of fields is referred to as the Parameter Group Number (PGN)". Ma di che campi? Priorita, PDUF e PDUS?
Come faccio poi a "spacchettare" l'informazione? Nel senso dal PGN di 130306, come estraggo le informazioni?
Grazie e scusate le domande probabilmente banali....
Pietro
Per la cronaca è un bus NMEA2000 (nautico)... se qualcuno lo usa mi piacerebbe fare due chiacchere con lui!
----------------------------------------
================================================================================
un po' di ordine nella gestione della seriale...
================================================================================
AUTORE: 3079
DATA :24/05/2010 - 09:50:02
----------------------------------------
Buongiorno a tutti, questo è il mio primo post in questo forum.
Mi sono iscritto perchè, dopo il passaggio da labview 7.1 a labview 2009 ho incontrato un po' di difficoltà.
Premetto che sviluppo semplici driver in LV da circa 4 anni e che in questo tempo ho imparato a conoscere abbastanza bene questo linguaggio di programmazione.
Fino a un mesetto fa in azienda usavamo LV 7.1 e da quest'anno abbiamo deciso di fare il "grande salto" e passare al 2009, il tutto gestito con TestStand
Ora, per il mio lavoro (sviluppo sw di test) spesso mi trovo a dover effettuare scritture/letture su rs232.
Con LV 7.1 la cosa funzionava così: avevo un driver che gestiva la configurazione/apertura della comunicazione su seriale e da quel momento LV teneva occupata la porta con la sessione aperta. Ogni volta che volevo
potevo andare a leggere il buffer di ricezione della rs232 per trovare i dati che nel tempo erano arrivati (ad esempio dopo la pressione di un tasto sul dispositivo in test).
Questo comportamento alle volte ha dato qualche problema, ad esempio quando dovevo intervenire con un altro sw sulla stessa seriale e la sessione aperta di LV me lo impediva; il tutto è stato poi risolto con un sistema di salvataggio delle sessioni e un driver di chiusura apposito.
Il passaggio a LV 2009 è stato da questo punto di vista un po' più traumatico: il driver di configurazione VISA non tiene più aperta la seriale, questo comporta il fatto che ogni volta che voglio andare a leggere il buffer devo rieseguire la configurazione (baud rate, parity ecc.) andando, di fatto, a resettare il buffer stesso perdendo così i dati.
Non potendo andare a fissare i settaggi della rs232 perchè diversi dispositivi da testare richiedono dati diversi, come posso gestire al meglio le comunicazioni?
spero di essere stato abbastanza chiaro nell'esposizione del problema, vi ringrazio in anticipo per l'eventuale aiuto...
----------------------------------------
AUTORE: 1078
DATA :24/05/2010 - 10:01:23
----------------------------------------
Ciao d.moretti,
[quote="d.moretti":22m5lx1o]Il passaggio a LV 2009 è stato da questo punto di vista un po' più traumatico: il driver di configurazione VISA non tiene più aperta la seriale, questo comporta il fatto che ogni volta che voglio andare a leggere il buffer devo rieseguire la configurazione (baud rate, parity ecc.) andando, di fatto, a resettare il buffer stesso perdendo così i dati.[/quote:22m5lx1o]
Ma questo a me non risulta. Mi suona molto strano il fatto che tu debba tutte le vote riconfigurare il driver VISA in quanto il comportamento di LV dalla versione 7.1 alla versione 2009 nella gestione delle porte seriali non è cambiata....
Probabilmente il tuo problema risiede altrove.
[quote="d.moretti":22m5lx1o]come posso gestire al meglio le comunicazioni?[/quote:22m5lx1o]
Esattamente come facevi in 7.1!
----------------------------------------
AUTORE: 3079
DATA :24/05/2010 - 10:50:40
----------------------------------------
[quote="Ricky":7wskwyg1]Ciao d.moretti,
[quote="d.moretti":7wskwyg1]Il passaggio a LV 2009 è stato da questo punto di vista un po' più traumatico: il driver di configurazione VISA non tiene più aperta la seriale, questo comporta il fatto che ogni volta che voglio andare a leggere il buffer devo rieseguire la configurazione (baud rate, parity ecc.) andando, di fatto, a resettare il buffer stesso perdendo così i dati.[/quote:7wskwyg1]
Ma questo a me non risulta. Mi suona molto strano il fatto che tu debba tutte le vote riconfigurare il driver VISA in quanto il comportamento di LV dalla versione 7.1 alla versione 2009 nella gestione delle porte seriali non è cambiata....
Probabilmente il tuo problema risiede altrove.
[quote="d.moretti":7wskwyg1]come posso gestire al meglio le comunicazioni?[/quote:7wskwyg1]
Esattamente come facevi in 7.1![/quote:7wskwyg1]
ciao e grazie per la risposta così celere
purtroppo, però, devo contraddirti dicendoti che la gestione delle porte è differente.
Eccoti un esempio:
ho preparato due driver identici, uno con LV2009 e uno con LV7.1, che si limitano a settare i parametri della COM1.
eseguendo quello con LV2009 ottengo questo (i risultati li vedi nella schermata sotto che è uno sniffer di seriale):
[img:7wskwyg1]http://www.imagenerd.com/uploads/open2009-ZUWTx.jpg[/img:7wskwyg1]
in pratica, Labview ha aperto la sessione sulla seriale impostando i parametri e subito dopo l'ha chiusa.
Eseguendo lo stesso driver generato con Labview 7.1 ottengo questo:
[img:7wskwyg1]http://www.imagenerd.com/uploads/open7.1-XaI74.jpg[/img:7wskwyg1]
come vedi, la sessione qui viene aperta ma non viene chiusa fino a quando
- o eseguo una VISA close passando come "VISA resource name" l'uscita della "VISA configure serial port"
- oppure chiudo tutto labview
in questo modo la sessione di comunicazione viene chiuso e l'accesso alla seriale viene rilasciato.
----------------------------------------
AUTORE: 645
DATA :24/05/2010 - 13:15:51
----------------------------------------
Interessante... Si può fare qualche prova!
Potrebbe però essere che National abbia fatto qualche modifica al funzionamento del blocco: probabilmente Write e Read adesso eseguono l'apertura della porta prima del loro comando effettivo.
Prova comunque a gestire le cose come facevi prima: inizializzazione porta seriale, ciclo con all'interno comunicazione (lettura e scrittura), chiusura ciclo, chiusura porta seriale.
Hai già provato? Funziona?
Oppure riscontri problemi?
----------------------------------------
AUTORE: 1168
DATA :24/05/2010 - 13:16:16
----------------------------------------
Forse il 2009 è un po' più furbo e rilascia le risorse allocate al termine del VI anche se non si chiudono esplicitamente... Prova a contattare NI in tal senso.
E' comunque molto strano che il tuo VI non funzioni per questo motivo... a meno che tu non hai un subVI che setta la porta, poi questo termina, e ne apri uno per legger/scrivere/tuttoquellochevuoi senza che ci sia il filo col riferimento alla risorsa che li unisce... mah...
Prova a postare il VI che non ti funziona, levando tutto quello che non serve....
Io uso col 2009 dei VI fatti col 7 e non ho mai avuto problemi di sorta.
Ciao
Pietro
----------------------------------------
AUTORE: 1078
DATA :24/05/2010 - 13:24:21
----------------------------------------
Come dicevo prima, mi sembra un comportamento molto strano. Io faccio la stessa cosa che fai tu e la risorsa rimane occupata fino a quando non la libero specificatamente o non chiudo LV. Il test per vedere se la risorsa è impegnata lo faccio con Hyperterminal, il messaggio che mi viene visualizzato è quello che puoi vedere nell'immagine che ti allego.
Ti ho ingrandito il messaggio di risposta di Hyperterminal, faccio presente che ho un sola porta seriale.
----------------------------------------
AUTORE: 43
DATA :24/05/2010 - 13:43:49
----------------------------------------
mah! a occhio mi sembra un problema/non problema.
Non vorrei che questa montagna di discussione partorisse un topolino.
Avete dato un'occhiata alle opzioni di labview?
[attachment=1:1bhzt0wd]visaCloseLV71.JPG[/attachment:1bhzt0wd]
Non uso LabVIEW 2009 ma immagino la musica non cambi...
[attachment=0:1bhzt0wd]visacloseLV861.JPG[/attachment:1bhzt0wd]
bye
----------------------------------------
AUTORE: 3079
DATA :24/05/2010 - 13:51:46
----------------------------------------
[quote="Ricky":1ih2pgdr]Come dicevo prima, mi sembra un comportamento molto strano. Io faccio la stessa cosa che fai tu e la risorsa rimane occupata fino a quando non la libero specificatamente o non chiudo LV. Il test per vedere se la risorsa è impegnata lo faccio con Hyperterminal, il messaggio che mi viene visualizzato è quello che puoi vedere nell'immagine che ti allego.
Ti ho ingrandito il messaggio di risposta di Hyperterminal, faccio presente che ho un sola porta seriale.[/quote:1ih2pgdr]
curioso...
la prova mostrata qui è stata fatta con 2009?
----------------------------------------
AUTORE: 3079
DATA :24/05/2010 - 13:56:32
----------------------------------------
[quote="paracarro":38vcwfam]mah! a occhio mi sembra un problema/non problema.
Non vorrei che questa montagna di discussione partorisse un topolino.
Avete dato un'occhiata alle opzioni di labview?
[attachment=1:38vcwfam]visaCloseLV71.JPG[/attachment:38vcwfam]
Non uso LabVIEW 2009 ma immagino la musica non cambi...
[attachment=0:38vcwfam]visacloseLV861.JPG[/attachment:38vcwfam]
bye[/quote:38vcwfam]
e topolino fu.
Giuro che ci stavo bestemmiando sopra da almeno una settimana, ero già pronto a creare un daemon da far girare in background quando invece bastava solo una spunta nelle opzioni....
che dire: grazie mille!
----------------------------------------
AUTORE: 645
DATA :24/05/2010 - 14:22:20
----------------------------------------
E a me che piacciono i criceti...
----------------------------------------
AUTORE: 1078
DATA :24/05/2010 - 15:50:50
----------------------------------------
Scusate, anch'io davo per scontato che la spunta non fosse true....
L'importante è aver risolto!
----------------------------------------
================================================================================
Grafico XY con latitudine/longitudine
================================================================================
AUTORE: 2328
DATA :24/05/2010 - 13:29:45
----------------------------------------
Salve a tutti,
dovrei creare un grafico xy al quale io do in ingresso latitudine e longitudine e mi genera il movimento dei due valori sul grafico....esiste un semplice blocchetto di labview che mi permette di fare questo???
Grazie..
----------------------------------------
AUTORE: 1168
DATA :24/05/2010 - 14:31:33
----------------------------------------
Ciao!
Intendi un qualcosa che ti disegna il percorso che stai facendo su "una cartina"? Se si è molto facile da fare...
Qui c'è un esempio che ho usato qualche tempo fa!
http://sine.ni.com/devzone/cda/epd/p/id/2197
Ciao
Pietro
----------------------------------------
AUTORE: 2328
DATA :24/05/2010 - 16:17:07
----------------------------------------
Grazie mille...conosci per caso anche un modo per cambiare l'immagine di fondo del grafico proprio per metterci una cartina? Grazie ancora...
----------------------------------------
AUTORE: 1168
DATA :24/05/2010 - 16:28:35
----------------------------------------
Beh, la cartina ha senso solamente se correlata alle coordinate geografiche ovviamente...
E quindi ti servirebbe un collegamento a Internet che ti scarica la cartina e la mette come sfondo del grafico, oppure una megacartina dalla quale isoli la parte che ti serve, o la cosa più semplice è che la tua "zona di vagabondaggio" sia delimitata.
In ogni caso non ci ho mai provato, ma forsea te basta rendere trasparente sia lo sfondo del grafico, che il frame. In questo modo basta metterci un'immagine sotto!
Ciao
Pietro
P.S. Per curiosità... nautica, strada, montagna, volo?
----------------------------------------
AUTORE: 2328
DATA :24/05/2010 - 16:43:49
----------------------------------------
Volo...la devo utilizzare per un simulatore di volo...
----------------------------------------
================================================================================
Terminare un ciclo FOR
================================================================================
AUTORE: 3051
DATA :25/05/2010 - 17:50:55
----------------------------------------
Salve a tutti, dopo un po' di assenza dovuta al lavoro sono tornato con una nuova domanda...
Sapete se esiste un modo per interrompere un ciclo FOR all'accadere di un determinato evento e far proseguire oltre il programma?
Mi spiego meglio: ho creato una routine che ripete in automatico delle misure in successione, assegnando ogni volta al parametro che le distingue un nuovo valore, preso in sequenza da un elenco preimpostato all'inizio. Dato che ogni misura dura in media 15 minuti, e a volte mi accorgo che che qualcuna di queste è inutile (dopo che è partita), volevo creare una specie di tasto "SKIP MEASURE" per passare alla successiva senza dover interrompere tutto il ciclo.
Il punto è che ogni singola misura è già una successione di punti presi all'interno di un ciclo FOR che si ripete un numero fisso di volte: vorrei trovare il modo di far saltare il programma direttamente alla fine del ciclo FOR per passare alla misura successiva.
Spero di essermi spiegato, sennò provo a fare uno schema del programma...
----------------------------------------
AUTORE: 43
DATA :25/05/2010 - 19:36:05
----------------------------------------
[quote="jankafi":texrgpdr]Salve a tutti, dopo un po' di assenza dovuta al lavoro sono tornato con una nuova domanda...
Sapete se esiste un modo per interrompere un ciclo FOR all'accadere di un determinato evento e far proseguire oltre il programma?
Mi spiego meglio: ho creato una routine che ripete in automatico delle misure in successione, assegnando ogni volta al parametro che le distingue un nuovo valore, preso in sequenza da un elenco preimpostato all'inizio. Dato che ogni misura dura in media 15 minuti, e a volte mi accorgo che che qualcuna di queste è inutile (dopo che è partita), volevo creare una specie di tasto "SKIP MEASURE" per passare alla successiva senza dover interrompere tutto il ciclo.
Il punto è che ogni singola misura è già una successione di punti presi all'interno di un ciclo FOR che si ripete un numero fisso di volte: vorrei trovare il modo di far saltare il programma direttamente alla fine del ciclo FOR per passare alla misura successiva.
Spero di essermi spiegato, sennò provo a fare uno schema del programma...[/quote:texrgpdr]
Da LabVIEW 8.5 in avanti è possibile utilizzare all'interno di ogni ciclo for una condizione booleana di uscita, tipo while..loop
in alternativa usa un ciclo while
bye
----------------------------------------
AUTORE: 3051
DATA :27/05/2010 - 11:03:35
----------------------------------------
Purtroppo ho solo a disposizione Labview 8.2.
Riguardo al ciclo Whilw, cosa intendi?
Se metto il FOR dentro il WHILE non credo avrebbe effetto, perchè anche se si realizzasse la condizione di stop del While, prima di interromperlo, terminerebbe di eseguire il ciclo FOR iniziato...o sbaglio?
Le li dispongo al contrario mi sembra inutile...
Mi puoi spiegare meglio?
----------------------------------------
AUTORE: 3079
DATA :27/05/2010 - 11:09:01
----------------------------------------
non uno dentro l'altro ma uno al posto dell'altro.
un for è strutturato per girare un certo numer definito di volte
un while invece è un loop condizionato.
visto che vuoi che il ciclo ti si fermi all'avvenire di una certa condizione, perchè vuoi usare un for?
----------------------------------------
AUTORE: 3051
DATA :27/05/2010 - 11:32:05
----------------------------------------
Devo essermi spiegato male...
Io uso un ciclo FOR perchè ogni ciclo è composto da un certo numero di misure: ma questo numero di punti misurati è fissato all'inizio, e ad ogni ripetizione del FOR assegno un valore ad un certo parametro preso da un elenco. Per questo uso il FOR, non mi serve solo ch eripeta l amisura indefinitivamente, ma deve seguire una sequenza precisa di step.
A questo, mi piacerebbe inserire anche un'ulteriore condizione, cioè la possibilità di interrompere questa misura della serie di punti e passare oltre, senza dover fermare l'intero programma.
----------------------------------------
AUTORE: 3079
DATA :27/05/2010 - 11:59:10
----------------------------------------
invece di usare un for usa un while con, come condizione per il ciclo successivo, un controllo sul numero di iterazioni eseguite (che siano minori del numero da te prestabilito) in OR con la negazione della condizione d'uscita che vuoi: in questo modo se non tocchi la condizione d'uscita il ciclo andrà in loop per il numero di volte prestabilito, altrimenti si fermerà prima.
----------------------------------------
AUTORE: 43
DATA :27/05/2010 - 12:12:09
----------------------------------------
[quote="jankafi":2p6fpq00]Devo essermi spiegato male...
Io uso un ciclo FOR perchè ogni ciclo è composto da un certo numero di misure: ma questo numero di punti misurati è fissato all'inizio, e ad ogni ripetizione del FOR assegno un valore ad un certo parametro preso da un elenco. Per questo uso il FOR, non mi serve solo ch eripeta l amisura indefinitivamente, ma deve seguire una sequenza precisa di step.
A questo, mi piacerebbe inserire anche un'ulteriore condizione, cioè la possibilità di interrompere questa misura della serie di punti e passare oltre, senza dover fermare l'intero programma.[/quote:2p6fpq00]
Effettivamente hai ragione.
Noi abbiamo perfettamente capito il Tuo problema ma Tu non hai capito la risposta.
Per questo motivo ti ho confezionato un esempio. non andrò oltre.
bye
----------------------------------------
AUTORE: 3051
DATA :05/07/2010 - 17:25:55
----------------------------------------
Ok finalmente ho capito...
Grazie a tutti
----------------------------------------
================================================================================
Autofocus: consigli, suggerimenti
================================================================================
AUTORE: 3079
DATA :26/05/2010 - 10:14:57
----------------------------------------
Rieccomi con una nuovo topic, questa volta meno "tecnico" e più concettuale, visto che nasce più che altro da una mia personale curiosità.
Here's the challenge:
Ho a disposizione una telecamera cmos con obiettivo pinhole, un motore passo passo accoppiato all'obiettivo e labview.
Mi piacerebbe realizzare un algoritmo di messa a fuoco automatica della telecamera, tipo quella delle telecamerine/macchine fotografiche in commercio.
Secondo voi è una cosa fattibile?
----------------------------------------
AUTORE: 43
DATA :26/05/2010 - 11:13:56
----------------------------------------
[quote="d.moretti":3q12jkwd]Rieccomi con una nuovo topic, questa volta meno "tecnico" e più concettuale, visto che nasce più che altro da una mia personale curiosità.
Here's the challenge:
Ho a disposizione una telecamera cmos con obiettivo pinhole, un motore passo passo accoppiato all'obiettivo e labview.
Mi piacerebbe realizzare un algoritmo di messa a fuoco automatica della telecamera, tipo quella delle telecamerine/macchine fotografiche in commercio.
Secondo voi è una cosa fattibile?[/quote:3q12jkwd]
Ce l'hai un telemetro?
come percepisci la distanza a cui dei mettere a fuoco?
sapendo la distanza regoli la messa a fuoco...
bye
----------------------------------------
AUTORE: 3079
DATA :26/05/2010 - 11:39:20
----------------------------------------
[quote="paracarro":3jn40psr][quote="d.moretti":3jn40psr]Rieccomi con una nuovo topic, questa volta meno "tecnico" e più concettuale, visto che nasce più che altro da una mia personale curiosità.
Here's the challenge:
Ho a disposizione una telecamera cmos con obiettivo pinhole, un motore passo passo accoppiato all'obiettivo e labview.
Mi piacerebbe realizzare un algoritmo di messa a fuoco automatica della telecamera, tipo quella delle telecamerine/macchine fotografiche in commercio.
Secondo voi è una cosa fattibile?[/quote:3jn40psr]
Ce l'hai un telemetro?
come percepisci la distanza a cui dei mettere a fuoco?
sapendo la distanza regoli la messa a fuoco...
bye[/quote:3jn40psr]
come fanno le macchine fotografiche digitali?
non hanno un telemetro, non è una telecamera da cinema, la messa a fuoco è fatta avvitando/svitando l'obiettivo nella sua sede e già un decimo di giro sposta il punto di fuoco di parecchio...
----------------------------------------
AUTORE: 4
DATA :26/05/2010 - 11:48:17
----------------------------------------
Ciao, il trucco è capire quanto sono netti i bordi all'interno di una zona dell'immagine, più sono netti più sei a fuoco, un modo semplice è usare un algo di calcolo dei valori statistici dei pixel di una zona, tendenzialmente se hai una standard variation alta vuol dire che i bordi sono netti altrimenti sarà bassa.
Spero di averti aiutato cmq cerca su wikipedia trovi molte info
Ciao
----------------------------------------
AUTORE: 3079
DATA :26/05/2010 - 11:49:51
----------------------------------------
[quote="ale914":3qi2y825]Ciao, il trucco è capire quanto sono netti i bordi all'interno di una zona dell'immagine, più sono netti più sei a fuoco, un modo semplice è usare un algo di calcolo dei valori statistici dei pixel di una zona, tendenzialmente se hai una standard variation alta vuol dire che i bordi sono netti altrimenti sarà bassa.
Spero di averti aiutato cmq cerca su wikipedia trovi molte info
Ciao[/quote:3qi2y825]
grazie mille! mi documento un po'
----------------------------------------
AUTORE: 43
DATA :26/05/2010 - 13:27:13
----------------------------------------
[quote="d.moretti":2ypkcz0z]Ciao, il trucco è capire quanto sono netti i bordi all'interno di una zona dell'immagine, più sono netti più sei a fuoco, un modo semplice è usare un algo di calcolo dei valori statistici dei pixel di una zona, tendenzialmente se hai una standard variation alta vuol dire che i bordi sono netti altrimenti sarà bassa.
Spero di averti aiutato cmq cerca su wikipedia trovi molte info
Ciao[/quote:2ypkcz0z]
mi sono informato
http://www.zmphoto.it/articoli/autofocus/autofocus.php
Non avendo lenti, per gli obiettivi pin hole non è possibile regolare una messa ma fuoco.
Quindi certamente l'immagine sarà a fuoco nel centro del sensore e non a fuoco sui bordi , xkè il sensore non è curvo ma piatto...
----------------------------------------
AUTORE: 3079
DATA :26/05/2010 - 14:42:47
----------------------------------------
[quote="paracarro":2yxosly7][quote="d.moretti":2yxosly7]Ciao, il trucco è capire quanto sono netti i bordi all'interno di una zona dell'immagine, più sono netti più sei a fuoco, un modo semplice è usare un algo di calcolo dei valori statistici dei pixel di una zona, tendenzialmente se hai una standard variation alta vuol dire che i bordi sono netti altrimenti sarà bassa.
Spero di averti aiutato cmq cerca su wikipedia trovi molte info
Ciao[/quote:2yxosly7]
mi sono informato
http://www.zmphoto.it/articoli/autofocus/autofocus.php
Non avendo lenti, per gli obiettivi pin hole non è possibile regolare una messa ma fuoco.
Quindi certamente l'immagine sarà a fuoco nel centro del sensore e non a fuoco sui bordi , xkè il sensore non è curvo ma piatto...[/quote:2yxosly7]
grazie mille per il link, che offre una documentazione chiara sulle procedure.
Per quanto riguarda gli obiettivi pin hole ti posso assicurare che la messa a fuco si può regolare perchè, crfedo, non si tratta di una telecamera pin hole "classica" ma di un obiettivo con lente che ne sfrutta il principio.
per farti un esempio, la telecamera della quale voglio automatizzare il fuoco è una cosa molto simile a questa:
http://www.negoziovirtuale.com/it/micro ... 585tcbmkv7
[img:2yxosly7]http://www.negoziovirtuale.com/images/203C_ecom.jpg[/img:2yxosly7]
avvitando/svitando l'obiettivo si allontana o avvicina la lente al ccd spostando quest'ultimo, di fatto, dal piano di fuoco.
----------------------------------------
================================================================================
labview e ipad/iphone
================================================================================
AUTORE: 838
DATA :26/05/2010 - 10:38:48
----------------------------------------
Secondo voi è possibile realizzare un client su ipad/iphone?
Nel senso che con labview realizzo spesso scada e a volte mi richiedono di creare dei client per altri pc (in genere in ufficio).
Come client ho realizzato sia pagine web tramite il suo webserver oppure anche semplici applicativi sempre in labview con scambio dati in tcpip o database.
Ma oggi mi chiedono di aver un client anche su iphone, e meglio su ipad. Così che il cliente possa usare il suo tel per collegarsi all'impianto.
Non ho la più pallida idea di come realizzarlo... consigli? :lol
----------------------------------------
AUTORE: 838
DATA :26/05/2010 - 10:43:17
----------------------------------------
mhhh ho trovato questo....
http://throwlab.com/VIremote/index.html
qualcuno lo ha provato?
----------------------------------------
AUTORE: 4
DATA :26/05/2010 - 11:56:45
----------------------------------------
non l'ho provato, ho letto quello che si dice sul link che hanno sul sito al forum NI e non mi torna molto, vista la politica Apple che sw interpretato cioè un altro linguaggio possa girare su iphone, non fanno girare flash per quel motivo figuriamoci lv.
Quello che vedo praticabile è avere una app che comunica via rete con un server dove gira l'applicazione labview vera e propria.
Ciao
----------------------------------------
AUTORE: 838
DATA :26/05/2010 - 13:41:28
----------------------------------------
non si capisce infatti che fa realmente quella lib
occorre lanciare il lato server con l'applicativo labview, ma poi l'app iphone che fa? pesca via tcp le informazioni del front panel e le ricostruisce (in che modo?) sull'iphone??
mah, non è chiaro per niente...
----------------------------------------
================================================================================
cancellare memoria di uno shift register
================================================================================
AUTORE: 2993
DATA :26/05/2010 - 20:20:16
----------------------------------------
Come si fà a cancellare la memoria di uno shift register?
----------------------------------------
AUTORE: 482
DATA :27/05/2010 - 07:26:32
----------------------------------------
Cosa intendi per cancellare?
Se si parla di un subvi che ad ogni chiamata mantiene l'ultimo valore, allora basta collegargli un valore fuori dal ciclo in modo che venga inizializzato, se invece ti riferisci a un reset durante l'esecuzione, basta che metti un case in cui gli dici che se si verifica una certa condizione, anzichè passargli un certo valore gli passi quello di default o quello che vuoi tu.
----------------------------------------
AUTORE: 43
DATA :27/05/2010 - 09:56:00
----------------------------------------
[quote="maurifabi":3b89436m]Come si fà a cancellare la memoria di uno shift register?
[/quote:3b89436m]
per es. se lo shift register contiene un array di qualcosa, nell'[u:3b89436m]ultima esecuzione[/u:3b89436m] del ciclo si forza il contenuto scrivendo un array vuoto.
bye
----------------------------------------
AUTORE: 2993
DATA :27/05/2010 - 19:28:32
----------------------------------------
Ciao e grazie. Ho inserito in allegato una immagine con il mio bel ciclo for dotato di shift register. Come vedete il ciclo parte premendo un pulsante. Vorrei cancellare il contenuto del shift register con un'altro pulsante. Ho provato in mille modi, ma sopratutto con dei "case structure", mettendo una costante stringa vuota nel "true", e ponendo il case in varie posizioni... risultato: vedo una stringa vuota solo nell'istante in cui rimane premuto il pulsante poi rivedo la stringa memorizzata nello shift... come daltronde è logico che sia...
Voi come fareste? Fermo restando il voler cancellare con un pulsante... non perchè è una fissa; ma perchè con i ripieghi non si impara...
Ciao e grazie ancora...
----------------------------------------
AUTORE: 43
DATA :27/05/2010 - 21:32:40
----------------------------------------
[quote="maurifabi":1f4upvsj]Ciao e grazie. Ho inserito in allegato una immagine con il mio bel ciclo for dotato di shift register. Come vedete il ciclo parte premendo un pulsante. Vorrei cancellare il contenuto del shift register con un'altro pulsante. Ho provato in mille modi, ma sopratutto con dei "case structure", mettendo una costante stringa vuota nel "true", e ponendo il case in varie posizioni... risultato: vedo una stringa vuota solo nell'istante in cui rimane premuto il pulsante poi rivedo la stringa memorizzata nello shift... come daltronde è logico che sia...
Voi come fareste? Fermo restando il voler cancellare con un pulsante... non perchè è una fissa; ma perchè con i ripieghi non si impara...
Ciao e grazie ancora...[/quote:1f4upvsj]
Ad occhio, quella operazione non ha senso.
Dal ";"seguita da "MEAS" direi che stai componendo un messaggio da spedire via GPIB ad uno strumento, ma la Tua è una semplificazione dal significato inestricabile.
Si potrebbe pensare che non sia necessario l'uso di uno shift- resgister a mo' di Functional Global (lo shift-register non è inizializzato) e che per ottenere lo stesso risultato sia meglio procedere in modo totalmente diverso.
Prima di tutto direi che il "finto" ciclo (viene eseguito il loop 1 volta o 0 volte cioè non viene eseguito...) non inizia con la pressione di un bottone ma semplicemente con la "lettura" di un controllo booleano, che è cosa ben diversa. Il booleano potrebbe essere un parametro passato ad un subvi e non un tasto da premere.
Della gestione dell'interfaccia HMI non c'è traccia nel Tuo snapshot: potrebbe essere gestita in polling o ad eventi; non ci è dato da sapere.
Certo è che non è la pressione di quel tasto a scatenare le azioni successive.
Al posto del booleano ti propongo un tipo enumerato
ecco il mio esempio
[attachment=0:1f4upvsj]Untitled.vi[/attachment:1f4upvsj]
Se non ti piace il tipo enumerato, puoi usare i 2 bottoni in modo che la combinazione dei 2 booleani produca il corretto valore enumerato da utilizzare nel case in questione
bye
----------------------------------------
AUTORE: 645
DATA :28/05/2010 - 16:55:39
----------------------------------------
Si potrebbe gestire un evento: se il pulsante è premuto non aggiungere elementi allo ShiftReg ma cancella tutto il contenuto...
----------------------------------------
AUTORE: 2993
DATA :28/05/2010 - 17:15:39
----------------------------------------
Ciao. Ho provato la tua soluzione, ma non svolge esattamente la funzione che volevo io. Io voglio spedire allo strumento più richieste di misura contemporaneamente, qiundi devo "memorizzare" il treno di comandi, selezionandolo uno per uno col combo, "salvandolo" uno per uno con un pulsante "salva" e spedirli tutti insieme con un pulsante "invia". Dopodichè, quando non mi servono piu, o voglio cambiarli, voglio poterli cancellare con un pulsante "cancella".
Spero di aver chiarito bene il mio scopo... dopo tanto "pensare" sono arrivato alla soluzione che posto...
Vorrei una vostra opinione, da persone esperte, sulla mia soluzione, su come avreste fatto voi ed il perchè.
Ripeto: sono neofita; non conosco ancora tutte le potenzialita del linguaggio (anzi...), ed ho fatto tuto usando le mie attuali conoscenze (che vorrei ampliare...)
Grazie di tutto.
Maurizio.
----------------------------------------
AUTORE: 2993
DATA :28/05/2010 - 17:19:57
----------------------------------------
Oooops...
Il messaggio sopra era in risposta a Paracarro... non avevo ancora visto il post di MagicBotolo.
La soluzione di MagicBotolo potrebbe essere giusta. Sarebbe bello avere da lui un confronto tra la sua e la mia...
Mauri.
----------------------------------------
AUTORE: 43
DATA :30/05/2010 - 09:35:35
----------------------------------------
[quote="maurifabi":1lz9g7hs]Ciao. Ho provato la tua soluzione, ma non svolge esattamente la funzione che volevo io. Io voglio spedire allo strumento più richieste di misura contemporaneamente, qiundi devo "memorizzare" il treno di comandi, selezionandolo uno per uno col combo, "salvandolo" uno per uno con un pulsante "salva" e spedirli tutti insieme con un pulsante "invia". Dopodichè, quando non mi servono piu, o voglio cambiarli, voglio poterli cancellare con un pulsante "cancella".
Spero di aver chiarito bene il mio scopo... dopo tanto "pensare" sono arrivato alla soluzione che posto...
Vorrei una vostra opinione, da persone esperte, sulla mia soluzione, su come avreste fatto voi ed il perchè.
Ripeto: sono neofita; non conosco ancora tutte le potenzialita del linguaggio (anzi...), ed ho fatto tuto usando le mie attuali conoscenze (che vorrei ampliare...)
Grazie di tutto.
Maurizio.[/quote:1lz9g7hs]
Purtroppo non uso LabVIEW 2009, quindi non posso ne vedere, ne capire quello che mi proponi...
bye
----------------------------------------
AUTORE: 2993
DATA :30/05/2010 - 17:14:44
----------------------------------------
Riposto il file in versione 8.6
La parte di INVIO l'ho omessa; mi interesserebbe molto capire riguardo la parte di memorizzazione e cancellazione del treno di comandi.
Quale è la soluzione più efficace... meglio ottimizzata... in definitiva migliore (perchè sicuramente c'è) della mia.
Ciao e grazie.
Mauri
----------------------------------------
AUTORE: 43
DATA :30/05/2010 - 22:17:23
----------------------------------------
[quote="maurifabi":2k8kymso]Riposto il file in versione 8.6
La parte di INVIO l'ho omessa; mi interesserebbe molto capire riguardo la parte di memorizzazione e cancellazione del treno di comandi.
Quale è la soluzione più efficace... meglio ottimizzata... in definitiva migliore (perchè sicuramente c'è) della mia.
Ciao e grazie.
Mauri[/quote:2k8kymso]
Ciao
beh! l'indicazione iniziale che ti ho dato e che dà titolo all'argomento è corretta.
Anche nella Tua soluzione cancelli lo shift prima di uscire dal loop.
Quindi se il tuo scopo è raggiunto la cosa finisce qua
A me personalmente non piace la scelta di eseguire il ciclo for 0 volte per ottenere in uscita il valore della variabile statica (shift register).
Per questo ho optato per un case enumerato sicuramente + chiaro.
L'uso dei 2 booleani unito all'implementazione che hai fatto ,sebbene funzionante, non mi entusiasma , anzi: il tasto "CANCELLA" e quello "SALVA RICHIESTA" sono entrambi selezionabili ed impongono una scelta di priorità.
Tu hai scelto di dare la priorità a "cancella".
Ma almeno, potevi eseguire il "salva richiesta" dentro il case false del "cancella"!
Ti ripropongo la mia soluzione riadattandola alle tue esigenze booleane.
----------------------------------------
AUTORE: 2993
DATA :31/05/2010 - 19:51:51
----------------------------------------
Grazie mille.
Un modo molto diverso di affrontare il problema, a cui non avevo pensato proprio per la mia scarsa padronanza (ancora) di LV e delle sue potenzialità. Mi studierò molto bene la tua soluzione. Così dovrebbero essere tutti i forum...
Spiace solo di non poter essere anch'io di aiuto agli altri, ma dalla soluzione che ho tirato fuori io, si capisce che ancora non posso farlo...
----------------------------------------
================================================================================
Bluetooth Read
================================================================================
AUTORE: 3072
DATA :28/05/2010 - 09:14:48
----------------------------------------
Salve a tutti, visto che nel mio post precedente non ho avuto molta fortuna sono andato avanti nel progetto e ho scoperto qualcosa in piu sul mio problema. Ho scoperto ke se al mio sensore invio un comando tramite com virtuale e quindi leggo la risposta con la funzione "VISA READ", esso mi da una risposta (quella che mi serve) ovvero i valori registrati; contrariamente a qnto pensavo se invece vedo il mio sensore tramite la connessione bluetooth e quindi leggo la risposta al mio comando con la funzione "Bluetooth Read"; esso mi da una risposta diversa...come se il comando fosse diverso. Volevo sapere se qualcuno mi potesse dare delucidazioni sulle differenze tra le 2 funzioni e nel caso come posso fare ad utilizzare il VISA READ anke se mi collego bluetooth al sensore.
Grazie
----------------------------------------
================================================================================
Creare pagina web in LV?
================================================================================
AUTORE: 2435
DATA :28/05/2010 - 09:50:49
----------------------------------------
Ciao a tutti...
vi faccio una domanda...
Ma è possibile creare pagine web in LV??e se si come si fa a pubblicarle?
Grazie
----------------------------------------
AUTORE: 2435
DATA :28/05/2010 - 09:51:34
----------------------------------------
preciso.....
non intendo operazioni tipo remote pannel
----------------------------------------
AUTORE: 482
DATA :28/05/2010 - 10:21:09
----------------------------------------
Se non intendi remote panel...beh una pagina web non è altro che un file di testo in formato html, quindi basta che usi la sinstassi html e ti crei la tua pagina con le funzioni di manipolazione delle stringhe.
Senno' devi usare il web publishing tool per pubblicare le immagini di pannelli dei tuoi vi.
----------------------------------------
================================================================================
come attivare/disattivare un canale?
================================================================================
AUTORE: 3084
DATA :28/05/2010 - 14:02:04
----------------------------------------
ciao ragazzi mi chiamo Antonello ed è da poco che uso labview pertanto ho pensato bene di chiedere a voi.
ho necessità di acquisire un segnale analogico da una scheda di acquisizione che ha 4 canali. ho scritto già il codice per acquisire il segnale. Però mi chiedevo come attivare o disattivare un canale nel caso in cui non mi servisse acquisire il segnale da tutti i canali.
inoltre volevo domandarvi un' altra cosa. supponiamo che ad un grafico arrivino i segnali acquisiti da due o più canali, come posso scegliere quale dei canali plottare?
grazie in anticipo per le eventuali risposte
----------------------------------------
AUTORE: 1078
DATA :31/05/2010 - 08:38:45
----------------------------------------
Ciao fender80,
Per la selezione dei canali di acquisizione ti propongo la mia soluzione. Ha un piccolo baco, ma puoi implementarla tu. Il VI ti permette di selezione i canli ma crea delle finestre continugue, prendendo il canale abilitato con indice inferiore e quello abilitato con indice superiore e leggendo comunque tutti i canali nel mezzo. Quindi se tu vuoi leggere solo i canali 1 e 3 lui leggerà in realtà i canali 1 2 e 3. Dovresti lavorarci un po' su per migliorarlo. [attachment=0:1kwiz4ne]Select_Channels.vi[/attachment:1kwiz4ne]
[quote="fender80":1kwiz4ne]inoltre volevo domandarvi un' altra cosa. supponiamo che ad un grafico arrivino i segnali acquisiti da due o più canali, come posso scegliere quale dei canali plottare?[/quote:1kwiz4ne]
Questo dipernde dalla priorità che vuoi dare alle tue informazioni. Mi spiego meglio: devi sapere tu se è più importante la tensione sul canale 1 o la tensione sul canale 2. Una volta capito quale segnale ha più importanza hai due modi per nasconderlo all'utente: 1 lo plotti comunque e nascondi tramite impostazione della proprietà visible del relativo plot su false; oppure elimini fisicamente i suoi dati dall'array di dati da plottare, questo lo fai semplicemente con le funzioni degli array.
----------------------------------------
AUTORE: 3084
DATA :31/05/2010 - 10:00:57
----------------------------------------
intanto ti ringrazio per la risposta ma purtroppo ho la versione 8.6 di labview e quindi non riesco a visualizzare il tuo VI. puoi renderlo compatibile con la mia versione?
per quanto riguarda il plottaggio ci lavoro un pò e ti faccio sapere.
grazie
----------------------------------------
AUTORE: 1078
DATA :31/05/2010 - 11:48:56
----------------------------------------
Il mio VI convertito in LV 8.6
----------------------------------------
AUTORE: 3084
DATA :31/05/2010 - 11:53:13
----------------------------------------
perfetto...
ragionando sui vettori, come mi hai detto, ho anche risolto il problema di visualizzazione dei vari canali...
----------------------------------------
================================================================================
Riposizioneare una multicolumn listbox
================================================================================
AUTORE: 482
DATA :28/05/2010 - 15:19:46
----------------------------------------
...ma ciao!
sarà la stanchezza del venerdi' sera, fatto sta che ho una multicolumn listbox con una scrollbar.
Ad un certo punto nascondo questa scrollbar e vorrei che si venisse riportati in cima alla listbox.
Non trovo la proprietà per farlo. Pensavo di passargli il valore della selezione, ma quello cambia la selezione ma non la visualzizazione.
COme faccio?
----------------------------------------
AUTORE: 43
DATA :28/05/2010 - 16:22:56
----------------------------------------
[quote="gepponline":2b3bcapw]...ma ciao!
sarà la stanchezza del venerdi' sera, fatto sta che ho una multicolumn listbox con una scrollbar.
Ad un certo punto nascondo questa scrollbar e vorrei che si venisse riportati in cima alla listbox.
Non trovo la proprietà per farlo. Pensavo di passargli il valore della selezione, ma quello cambia la selezione ma non la visualzizazione.
COme faccio?[/quote:2b3bcapw]
Per le list box la proprietà si chiama TopRow per le multicolumn si chiama TopCell
TopCellè un cluster composto da 2 interi U32.
Forzare entrambi i valori a 0 per riportare la scrollbar in cima
bye
----------------------------------------
AUTORE: 482
DATA :31/05/2010 - 07:55:02
----------------------------------------
Grazie mille!
Nel caso specifico della multicolumn ListBox, la proprietà si chiama "Top Left Visible Cell"
Come descrizione era abbastanza capibile, quindi probabilmente era proprio la stanchezza del venerdi' sera che mi aveva inibito l'utilizzo di alcune perti del cervello
Grazie ancora!
----------------------------------------
================================================================================
Display a 7 segmenti [era: informazione]
================================================================================
AUTORE: 2600
DATA :31/05/2010 - 08:05:33
----------------------------------------
Ciao Ragazzi,
una cortesia,sapete se sulla rete ci sono in giro dei display 7 segmenti animati visualizzabili con labview ?
o un font 7 segmenti per dire.
grazie mille
Spectre
----------------------------------------
AUTORE: 645
DATA :31/05/2010 - 08:51:47
----------------------------------------
Ciao,
intanto ho modificato il nome del post perchè non era chiaro a cosa si riferiva (occhio al regolamento del forum!).
E poi ti consiglierei di disegnare un display direttamente in LabView tramite LED e comporre i numeri seguendo le istruzioni presentate al link http://www.eeng.biz/7segmenti.htm
(guarda in particolare la tabella con i numeri binari).
----------------------------------------
AUTORE: 487
DATA :01/06/2010 - 08:17:54
----------------------------------------
Ciao,
io ho utilizzato i font allegati. Vedi se ti posso servire.
----------------------------------------
================================================================================
Come creareun tasto a scomparsa
================================================================================
AUTORE: 3087
DATA :31/05/2010 - 17:57:44
----------------------------------------
Bunpomeriggio,
Sono nuovo del forum e vorrei porvi una domanda; Io vorrei realizzare una front panel in cui alcuni tasti sono a scomparsa, cioè questi tasti si attivano per meglio dire sono visibili solo nel momento in cui una data variabile booleana risulta essere attiva;
Quindi vi chiedo se qualcuno sappia come poter generare una tale funzione inoltre vorrei sapere se fosse possibile collegare a tali tasti dei collegamenti ipertestuali che permetano di collegare a questi tasti delle schermate di labview;
Vi ringrazio anticipatamente per le risposte che mi fornirete;
----------------------------------------
AUTORE: 482
DATA :01/06/2010 - 07:31:36
----------------------------------------
Collegamenti ipertestuali e generazione di funzioni....mmhh....
Rifacciamo da capo!
1) Per rendere visibile/invisibile un controllo, basta che vai sul suo terminale e ci clikki col destro. Poi fai Create->Property node e scegli Visible. Adesso a seconda di cosa gli colleghi a questo property node, il controllo sarà visibile o invisibile.
2) Cosa intendi per schermate di Labview? Se intendi l'interfaccia di un vi, allora si parla di subVI, ovvero dei vi che vengono "aperti" da un altro vi e che mostrano il loro pannello ( per far mostrare il pannello ad un subvi devi andare nelle sue proprietà e modificarne le appareance). Alternativa è quelal di usare un Tab control in modo che variandone il valore, venga mostrata una pagina con dei controlli e nascoste le altre.
----------------------------------------
AUTORE: 3087
DATA :01/06/2010 - 12:29:14
----------------------------------------
Ti ringrazio per la risposta ora ti specifico meglio il secondo punto, io vorrei collegare a tali tasti un grafico che nel momento in cui il tasto è attivo sia possibile cliccarci sopra ed aprire una nouva schermata in cui sia contenuto tale grafico; Quindi ti chiedo se puoi farmi vedere graficamente come realizzare tale funzione;
Vi ringrazio per le cortesi risposte fornite;
----------------------------------------
AUTORE: 482
DATA :01/06/2010 - 12:45:30
----------------------------------------
Crei il tuo pulsnate e lo colleghi ad un case. Nel case TRUE metti un subvi dove è contenuto il grafico
----------------------------------------
================================================================================
Caricare .ico in un Tree ctrl
================================================================================
AUTORE: 1033
DATA :31/05/2010 - 18:00:42
----------------------------------------
Ciao, sto facendo un editor per TS, ho un controllo di tipo tree e vorrei importare come simboli le icone di TS. Sono riuscito a farlo con delle semplici jpg, ma con le .ico come si fa?
Grazie a tutti.
----------------------------------------
================================================================================
Mobile per symbian??
================================================================================
AUTORE: 2435
DATA :01/06/2010 - 07:42:29
----------------------------------------
Ciao a tutti...
sapete se esiste la possibilità di sviluppare applicazioni che girano su symbian con LV??
nel pacchetto Mobile sembra che fornisca solamente la possibilità per windowsCE
Grazie
----------------------------------------
AUTORE: 838
DATA :01/06/2010 - 17:09:37
----------------------------------------
mi sembra che si sia solo windowsce w mobile
per il symbian avevo risolto con il vnc, ma non è un gran chè
----------------------------------------
================================================================================
Video su LabView e diversi argomenti
================================================================================
AUTORE: 645
DATA :01/06/2010 - 08:34:30
----------------------------------------
Ciao a tutti,
vi segnalo il link http://www.youtube.com/watch?v=rOUcBvyHj5E
a partire dal quale si possono trovare diversi video su LabView!
----------------------------------------
================================================================================
Creare report senza interfacciarsi con word excel..
================================================================================
AUTORE: 2435
DATA :01/06/2010 - 13:16:17
----------------------------------------
Ciao a tutti....
sapete darmi delle indicazioni su come si potrebbe creare un report abbastanza complesso con descrizioni immagini e tabelle senza usare excel o word??
pensavo di utilizzare la proprietà print del front panel di un vi con all'interno posizionati i vari controlli che mi servono...però il risultato non è che sia dei migliori
e altrimenti utilizzo il report generation toolkit creandolo in word.
Grazie
----------------------------------------
AUTORE: 482
DATA :01/06/2010 - 13:52:52
----------------------------------------
Io pe runa cosa del genere ho creato un file html Che facesse da template.
Puoi impaginare una pagina html con qualsiasi editor wysiwyg.
Dopodichè ho semplicemente preso le parti tabella, immagini ecc che volevosostituire e le ho rimpiazzate con una strniga nota (ad es. "qui ci va la tabella") e poi con le funzioni di manipolazione delle stringhe, andavo a sostituire le stringhe note con le tabelle o i percorsi dell eimmagini che di volta in volta mi si generavano.
L'unico inconveniente di questo tipo di report è che le immagini non puoi inglobarle nel file ma vengono linkate, quindi dovrai dare alle immagini un nome che permetta eventualmente di associarle facilmente al file html del report.
----------------------------------------
AUTORE: 2435
DATA :01/06/2010 - 15:48:49
----------------------------------------
Grazie....
è vero,bell'idea e anche flessibile....fa proprio al caso mio..
è quello che mi serve anche perchè intanto devo fare una bozza poi il cliente mi chiederà sicuramente di modificare completamente il layout.
grazie ancora
----------------------------------------
AUTORE: 1078
DATA :01/06/2010 - 16:10:03
----------------------------------------
Se mi poso permettere vorrei aggingere qualcosa in più...
Se fossi in te anzichè creare un report HTML cercherei di generare un report in XML, la flessibilità che ti da in più XLM è che separa la parte dati dall'interfaccia grafica, che a questo punto puoi personalizzare di volta in volta senza dover cambiare il codice del tuo VI di generazione report.
Un'altro vantaggio dell'XLM è che viene letto da un sacco di altri software: vedi excel, word...etc.
Ho trovato informazioni utili per la creazione di un file XLM sul sito [url:szxukde3]http://www.html.it[/url:szxukde3]
----------------------------------------
AUTORE: 2435
DATA :03/06/2010 - 13:01:12
----------------------------------------
Ciao....mi tornerebbe utile fare l'applicativo usando l'xml però non riesco a trovare xml GUI editor...
Stavo pensando di fare la stesura del report in word e salvare la pagina in html(non ho molta esperienza con editor html e rischio di perdere molto tempo solo per l'impaginazione)..
Dopodichè utilizzare ad esempio nvu per modificarla inserendo i vari "id" ecc e risalvarla...
Quindi utilizzare questa ultima pagina per l'elaborazione del report con LV...
Cosa ne dite?
----------------------------------------
AUTORE: 1078
DATA :08/06/2010 - 13:39:15
----------------------------------------
Un po macchinoso... no?
Vista la tua esigenza e la poca padronanza del linguaggio HTML, mi permetto di insistere consigliandoti di usare l'XML. Creata la tua struttura dati puoi cambiare la loro impaginazione mano a mano che prenderai confidenza con il codice o puoi delegare la loro impaginazione a qualcuno che conosca l'HTML o l'XHTML...
Io penso sia il metodo più efficace! Oltre tutto se usi una versione di LV 8.6 o superiore LV ti viene in soccorso con la tools palete per la generazione di dati XML. Guarda quest'articolo come esempio...
[url:2g89naiz]http://zone.ni.com/devzone/cda/epd/p/id/6077[/url:2g89naiz]
Ovviamente ci dovrai lavorare su un po'....
Buon lavoro quindi!
----------------------------------------
================================================================================
corso labview autodidatta
================================================================================
AUTORE: 3091
DATA :04/06/2010 - 16:23:07
----------------------------------------
Salve a tutti, mi chiamo Massimo e sono nuovo del forum. Mi sono da poco accostato alla programmazione labview, lo trovo veramente affascinante. Volevo chiedervi se qualcuno mi sapesse indicare un libro avanzato (dato che ho già fatto il corso base) su questo liguaggio di programmazione. Vi ringrazio anticipatamente dell'eventuale risposta, Saluti, Massimo72.
----------------------------------------
AUTORE: 1078
DATA :08/06/2010 - 13:25:30
----------------------------------------
Ciao Massimo,
Non so se in esistono libri validi che parlano di LV (mi sembra che qualcosa c'è ma non saprei indirizzarti). Su Lava però sono stati presentati due nuovi libri in lingua inglese. Ti posto i links spero ti siano di aiuto.
[url:moyctmls]http://www.amazon.com/gp/product/0136094295/ref=pe_5050_15210280_snp_dp[/url:moyctmls]
[url:moyctmls]http://www.amazon.com/dp/0132141310/ref=pe_5050_15210280_snp_explore[/url:moyctmls]
Buona gironata e buon studio... se si dice così!!
----------------------------------------
AUTORE: 1078
DATA :08/06/2010 - 13:26:57
----------------------------------------
[quote="Ricky":2h6qdvpn]
Non so se in esistono libri validi che parlano di LV (mi sembra che qualcosa c'è ma non saprei indirizzarti).
[/quote:2h6qdvpn]
Intendevo in Italiano... scusa!
----------------------------------------
AUTORE: 3091
DATA :10/06/2010 - 07:55:01
----------------------------------------
Grazie per il tuo suggerimento, sarà un'occasione per rinfrescarmi anche un pò di inglese. Saluti e grazie ancora, Massimo
----------------------------------------
================================================================================
Acquisizioni ambientali
================================================================================
AUTORE: 3097
DATA :09/06/2010 - 14:15:47
----------------------------------------
Realizzare un VI che acquisisca ad intervalli periodici di tempo (impostabili da interfaccia grafica) i suoni ambientali attraverso il microfono della scheda audio e generi automaticamente un report contenente i valori di picco di ampiezza del rumore, banda in ciascun evento di misura. Il VI metta in evidenza sull’interfaccia il fatto che i valori di picco abbiano superato una soglia fissata da interfaccia grafica per almeno 5 volte consecutive.
----------------------------------------
AUTORE: 645
DATA :09/06/2010 - 16:09:52
----------------------------------------
Ricordiamoci che il forum non è un posto dove ordinare qualcosa!
Penso che le risposte arriveranno dopo qualche dettaglio in più e dopo qualche tentativo da parte tua.
----------------------------------------
AUTORE: 482
DATA :10/06/2010 - 07:43:25
----------------------------------------
E questo cos'e' il titolo di un compito in classe?
----------------------------------------
AUTORE: 1168
DATA :10/06/2010 - 08:34:54
----------------------------------------
Questo è il genio dei geni.. .non ha nemmeno riformulato il testo!!!!
----------------------------------------
AUTORE: 1168
DATA :10/06/2010 - 08:37:58
----------------------------------------
Piccola ricerca con google e guardate poi cosa è uscito:
viewtopic.php?f=1&t=4493
Marzo 2010... almeno il suo "collega" si era mosso per tempo...
----------------------------------------
AUTORE: 4
DATA :10/06/2010 - 11:39:06
----------------------------------------
ma dove finiremo
----------------------------------------
================================================================================
Lavorare con grosse moli di dati
================================================================================
AUTORE: 1078
DATA :11/06/2010 - 13:59:51
----------------------------------------
Ciao a tutti,
ecco il problema: devo creare delle forme d'onda arbitrarie che contengono un'enorme quantità di dati. Parliamo di circa 1 o 2 GB di array. Ovviamente devo rappresentare questi dati in un grafico e oltre a questo devo anche elaborarli e lavorarci sù. Provando a trattarli come array di dimensioni "normali" mi viene segnalato da labview che la memoria è full. Avete qualche suggerimento, tutorial o altra indicazione valida su come poter trattare questi dati senza incorrerre nell memory full di labview?
Faccio presente che dovendo rappresentare a video la forma d'onda non posso fare lo swapping su disco dei suoi dati.
Grazie a tutti per la collaborazione.
----------------------------------------
AUTORE: 301
DATA :11/06/2010 - 14:04:08
----------------------------------------
Penserei di lavorare con delle immagini del grafico.....ma non saprei come....
----------------------------------------
AUTORE: 1168
DATA :11/06/2010 - 14:12:07
----------------------------------------
Ricky, secondo me devi capire una cosa:
1) La forma d'onda che grafichi è composta da troppi punti (rispetto a quella percepibile dall'occhio umano). In questo caso puoi graficare 1 punto ogni 10 per esempio
2) Devi graficare una forma d'onda molto lunga (e quindi probabilmente con grafico scrollabile sull'asse x). In questo caso puoi dividere la forma d'onda in "pagine" e lo scroll del grafico lo fai caricando una pagina per volta.
Dovrebbe funzionare se il problema è un solo array troooooopppo grande!
----------------------------------------
AUTORE: 1078
DATA :21/06/2010 - 08:18:35
----------------------------------------
Il fatto è che non devo solo graficare la forma d'onda ma devo anche farci dei calcoli, oltretutto devo riprodurla fedelmente. Per graficare correttamente la forma d'onda ho usato la tecnica della "Decimazione" quello che giustamente proponevi tu e sembra che la cosa funzioni, invece i calcoli che devo fare mi piantano la macchina! Come risolvo il problema?
Spero che a mente fresca mi venga una brillante idea, sono appena tornato dalle vacanze e confido nel effetto mente vuota...!!!
Grazie per l'aiuto. Accetto altri consigli!
----------------------------------------
================================================================================
derivata di un segnale con Labview
================================================================================
AUTORE: 3104
DATA :13/06/2010 - 11:48:12
----------------------------------------
salve, questo è il mio primo post, mi chiamo Marco e sono uno studente universitario
scusate ma vengo subito al sodo
devo finire un progetto in università, ma io Labview è la prima volta che lo uso quindi non so fare neanche le cose più facili...
allora, vi spiego, Io immetto nella scheda (BNC) un segnale sinusoidale di 1Vpp a 100Hz campionando il segnale ogni 20ms e lo mostro a schermo tramite un grafico
il mio obbiettivo è prendere quel segnale e ottenerne la derivata, un coseno in questo caso (o un'onda quadra se immettessi un'onda triangolare)
solo che nonostante tutti i tentativi il risultato è sempre un seno o qualcosa di peggio, AIUTO!!!
il mio tentativo è stato quello di sottrarre al segnale in ingresso il segnale rilevato 20ms prima e dividere questa differenza per i 20ms di tempo...
tuttavia nonostante tutti i tentativi continuo a fallire...
ringrazio tutti quelli che risponderanno...
NB: vanno benissimo anche metodi differenti da quello che stiamo cercando di usare (possibilmente più facili
)
----------------------------------------
AUTORE: 927
DATA :16/06/2010 - 15:54:19
----------------------------------------
Esiste un blocco chiamato "Derivative x(t).vi" che calcola le derivate, però fa parte del Full Development System, non so se ce l'hai. Il tuo tentativo comunque mi sembra un'approssimazione corretta, devi darci più dettagli per capire dov'è l'errore
----------------------------------------
AUTORE: 3104
DATA :16/06/2010 - 18:04:22
----------------------------------------
mh, devo verificare se è il pacchetto completo, non ne sono sicuro...
nel caso dovrei inserire solo segnale di ingresso, condizioni iniziali, finali e dt?
ora come ora non saprei dirti molto di più,
però so probabilmente dove sbaglio...
come si fa a sottrarre al segnale del tempo t il segnale del tempo t-1?
cioè ho visto che c'è il blocco 'delay', ma non so se serve a quello scopo
altrimenti dovrei fare tipo un ciclo while che si verifica ogni 20 ms (il mio tempo di campionamento)
sai suggerirmi?
grazie cmq per la risposta
----------------------------------------
AUTORE: 927
DATA :17/06/2010 - 08:28:05
----------------------------------------
Per vedere se hai un certo VI basta fare "Search" nel menù delle funzioni.
Comunque per sottrarre il t-1 ci vuole certamente un while, con uno shift register che ti memorizza il valore dell'iterazione precedente (vedi help). Il delay naturalmente deve stare dentro il while
----------------------------------------
AUTORE: 43
DATA :17/06/2010 - 17:03:11
----------------------------------------
[quote="MUSE":2feciapu]..il mio obbiettivo è prendere quel segnale e ottenerne la derivata, un coseno in questo caso (o un'onda quadra se immettessi un'onda triangolare)
...il mio tentativo è stato quello di sottrarre al segnale in ingresso il segnale rilevato 20ms prima e dividere questa differenza per i 20ms di tempo...
tuttavia nonostante tutti i tentativi continuo a fallire...
ringrazio tutti quelli che risponderanno...[/quote:2feciapu]
segui [url=http://ilvg.it/forum/viewtopic.php?f=1&t=3735&p=16459:2feciapu]questa[/url:2feciapu] discussione.
Di una certa curva viene visualizzata la sua derivata ed il suo integrale.
Perciò potresti scaricare i 2 esempi
mio ciclo
e
mio ciclo 1
in alternativa si possono sottrare elemento per elemento due array il secondo dei quali si ottiene dal primo a partire dall'elemento 1 (il primo elemento ha indice 0)
[attachment=0:2feciapu]Arraydiff.vi[/attachment:2feciapu]
L'array risultante sarà sempre + corto di un elemento rispetto alla lunghezza originale dell'array...
bye
----------------------------------------
AUTORE: 1165
DATA :09/09/2014 - 19:35:46
----------------------------------------
A volte mi capita di cadere in post anche molto vecchi come questo. Nella speranza (forse illusoria) che comunque le informazioni qui servano anche a futura referenza, mi permetto di aggiungere qualche osservazione personale, non so neanche quanto corretta. Mi scuso per eventuali miei fraintendimenti, sempre possibili. Ma mi sembra di ravvisare un errore di fondo in quento qui sopra detto: se il segnale che tu campioni è a 100 Hz, significa che la sua fondamentale è a 100 Hz; se poi è sinusoidale puro (come tu dichiari), allora anche la sua frequenza massima contenuta è ancora a 100 Hz. Per il teorema del campionamento, questo comporta che devi campionarlo almeno a 200 Hz (meglio se MOLTO di più) e non a 50 Hz come tu stesso dichiari. Infatti un campionamento ogni 20 ms signhifica 50 campioni al secondo, cioè 50 Hz, che sono ASSOLUTAMENTE insufficienti a dare una ricostruzione priva di aliasing. Per un buon approccio ti consiglio di campionare almeno a 400-500 Hz o più, permettendoti così anche una più accurata ricostruzione della derivata temporale, calcolabile come dici tu, togliendo ad un valore il precedente e dividendo per l'intervallo di tempo. ENR
----------------------------------------
================================================================================
domanda sul numeric control
================================================================================
AUTORE: 2600
DATA :14/06/2010 - 11:15:44
----------------------------------------
Ciao a tutti,
premetto che sono un principiante e uso labview 2009 patch f2.
come si fa salvare il valore che inserisco in un "numeric control" ?
Mi spiego meglio,a seconda di quello che deve fare la mia applicazione ho necessità di variare il valore.
pero' ogni volta che chiudo il mio eseguibile e lo riavvio,non mi memorizza(giustamente,perchè non so' come si fa') l'ultimo valore che avevo inserito.
mi date una dritta ?
ciao
Spectre
----------------------------------------
AUTORE: 1168
DATA :14/06/2010 - 11:37:59
----------------------------------------
Tasto destro del mouse e poi "make current value as default" o qualcosa di molto simile. E' valido solo per il controllo su cui fai l'operazione.
Oppure se vuoi fare tutti i controlli in un botto solo c'è "Make current values as default" nel menù modifica!
Ciaoooo
----------------------------------------
AUTORE: 2600
DATA :14/06/2010 - 11:45:31
----------------------------------------
No,ho solo "Reinitialize to the default value" sulle singole caselle di numeric control.
E poi sto' usando un'eseguibile non un vi quindi non posso fare salva tutti i parametri ogni volta che esco dal programma
mi sa che ci vuole un'altra strada...
ciao
Spectre
----------------------------------------
AUTORE: 645
DATA :14/06/2010 - 13:20:55
----------------------------------------
Stai usando un eseguibile significa che non hai a disposizione il VI sorgente?
Se è così mi sa che l'unico modo per salvare i dati è fare uno "stamp" dello schermo e inserirli a mano ogni volta che riavvi il programma:
durante la preparazione del VI (e poi del suo eseguibile) si possono utilizzare molte funzioni dedicate al salvataggio dei dati ma se non sono state implementate non credo ci sia un modo per farlo direttamente da eseguibile.
----------------------------------------
AUTORE: 2600
DATA :15/06/2010 - 08:14:06
----------------------------------------
Gentile MagicBotolo,
ho anche il file vi modificabile,solo che non so' come si fa' a salvare ogni variazione inserita.
saluti
Spectre
----------------------------------------
AUTORE: 645
DATA :15/06/2010 - 09:04:10
----------------------------------------
Allora, come diceva Pio, se hai il VI di partenza (il sorgente) cerca la voce "make current value default" tra i menù in alto e in questo modo puoi memorizzare i valori attualmente inseriti nei diversi controlli. Quando apri il sorgente le volte successive ritrovi i valori salvati nei rispettivi controlli.
Questo vale per il VI e l'utilizzo dal Front Panel (perciò l'utilizzo del sorgente vero e proprio tramite ambiente LabView).
Se per eseguibile intendi un file EXE creato con Application Builder, la soluzione appena indicata non funziona: devi pensare a qualcosa per memorizzare i valori.
Per esempio puoi utilizzare un file di testo nel quale scrivere il nome del controllo e il rispettivo valore.
Al successivo avvio del file EXE puoi recuperare i valori dal file di testo e inizializzare i controlli.
Si può lavorare anche con i file INI: prova a cercare qualche info nel forum o direttamente nel sito della National.
----------------------------------------
AUTORE: 43
DATA :15/06/2010 - 10:09:52
----------------------------------------
Meglio memorizzare i valori di default in un file di configurazione.
il file deve essere ricaricato ogni volta che è necessario, ad esempio ad ogni avvio applicazione, e i valori devono essere caricati da file negli appositi controlli/indicatori.
I file va salvato, possibilmente su esplicita conferma dell'operatore, ma, alla bisogna può essere memorizzato automaticamente quando lo si vuole fare.
E' inutile arrabattarsi con i default di controlli/indicatori labview, meglio fare una cosa un po' + seria...
bye
----------------------------------------
AUTORE: 43
DATA :15/06/2010 - 10:55:23
----------------------------------------
[quote="paracarro":2hzfrcka]Meglio memorizzare i valori di default in un file di configurazione.i...[/quote:2hzfrcka]
Tra l'altro i valori di default dei controlli/indicatori sono memorizzati nel VI stesso.
Il cambiamento di tali valori, una volta creato un .exe, comborterebbe una variazione del .exe stesso.
Se si considerasse di controllo tipo stringa o un array, vorreste che il Vostro .exe potesse cambiare di dimensione ogni volta che si varia un default di un controllo/indicatore?
bye
----------------------------------------
================================================================================
Indice dell'array
================================================================================
AUTORE: 1219
DATA :14/06/2010 - 13:16:34
----------------------------------------
Salve Signori ...
Vorrei un'aiutino su questo problema su cui mi sto incartando ...
e da poco che smanetto con labview ... ho la versione 2009
Ho realizzato un'array di booleani ...
tanti piccoli pulsantini ...
ora quando clicco il pulsantino 1 vorrei disponibile il numero 1 in una varibile
se clicco per esempio il numero 33, vorrei disponibile il n°33 nella stessa variabile e cosi via ...
forse parto dal principio sbagliato ...
grazie dell'aiuto
----------------------------------------
AUTORE: 1168
DATA :14/06/2010 - 14:06:06
----------------------------------------
C'è un blocchetto apposta che converte l'array booleano in numero considerando l'array booleano come numero binario, quindi poi fai il logaritmo e voilà.
http://zone.ni.com/reference/en-XX/help ... to_number/
Comunque ti lascio uno spunto di riflessione...
Però ti caccio una domanda... e se premi contemporanemante il numero 1 e il numero 33?
Ricordati di sistemare se questa cosa deve poter essere possibile oppure no..
Cioa
Pietro
----------------------------------------
AUTORE: 1219
DATA :14/06/2010 - 14:25:25
----------------------------------------
Ti ringrazio PIO vado subito a vedere l'esempio ...
In effetti cliccato l' 1 ed utilizzatolo poi non mi interessa più
se viene ricliccato fa di nuovo la stessa cosa ... altrimenti finisce li .
Spero di essermi spiegato ... la variabile viene utilizzata e poi potrebbe anche essere svuotata ... ormai ha fatto il suo compito
e comunque i pulsanti vengono premuti uno per volta.
ora provo e ti faccio sapere ... Grazie
----------------------------------------
AUTORE: 1219
DATA :14/06/2010 - 14:29:49
----------------------------------------
Non mi va bene PIO ...
Già lo avevo provato ... ma
Cliccando il primo pulsante mi da 1 OK
Cliccando il secondo pulsante mi da 2 OK
Cliccando il Terzo pulsante mi da 4 Fail
Cliccando il Quarto pulsante mi da 8 Fail
...
...
...
a me serve rapporto 1 ad 1
1 --> 1
2 --> 2
33 --> 33
Grazie
----------------------------------------
AUTORE: 1168
DATA :14/06/2010 - 14:34:56
----------------------------------------
Leggi bene la descrizione del blocchetto (Ctrl+H apre la finestrella)
Il terzo pulsante ti dà 3 perchè è 2^2
il quarto pulsante ti da 8 perchè è 2^3
Come ti dicevo interpreta l'array di booleani come numero binario!!!!
----------------------------------------
AUTORE: 1219
DATA :14/06/2010 - 14:45:24
----------------------------------------
Perdonami ma sono nel pallone completo ... prorpio non ci arrivo ...
è già da un po che ci rimuggino su ...
tu dici che con questo risolvo ?
c'è qualche flag da attivare ?
forse nelle proprietà del controllo ...
ora riprovo ...
----------------------------------------
AUTORE: 1219
DATA :14/06/2010 - 14:55:21
----------------------------------------
Dovrei forse convertire a questo punto il numero binario ?
oppure prendere l'esponente anzichè la base ...
ma comunque non trovo gli strumenti ...
----------------------------------------
AUTORE: 1168
DATA :14/06/2010 - 14:57:43
----------------------------------------
Bah, mi sembra così faciel che forse non ho capito io il tuo problema....
Quello che ho capito io è nel VI allegato. il primo pulsante è quello di sinistra (ok, l'ho fatto coi led, ma sempre controlli sono).
Se non c'è premuto nulla da' ovviamente errore, se premuto il primo da' zero, se premuto il secondo da' uno ecc ecc...
Nel caso ci devi aggiungere un "+1" prima dell'indicatore se ti serve!
Ciao
Pietro
----------------------------------------
AUTORE: 1219
DATA :14/06/2010 - 15:10:17
----------------------------------------
Grazie Pietro ...
è un buon inizio ... prorpio non sapevo di queste funzioni in labView
però ammeso pure che io dal numero ricevuto prelevi solo la parte intera ...
non so se hai notato cliccando sul LED N° 14 ... Viene fuori 15 ...
e questo non è bene ...
Quindi ... a sto punto mi chiedo ...
esiste uno strumento più lineare ?
Grazie Mille ...
----------------------------------------
AUTORE: 482
DATA :15/06/2010 - 08:14:31
----------------------------------------
Usa il search 1d array e cerchi il valore TRUE.
Pero' come diceva Pio all'inizio, devi fare in modo che l'utente non possa attivare piu' di un booleano, senno' ti va i malora tutto.
Per farlo ci possono essere mille modi, uno è resettarlo a tutti false ogni volta che viene premuto qualcosa e poi mettere a true solo quello premuto.
----------------------------------------
AUTORE: 1219
DATA :15/06/2010 - 09:48:32
----------------------------------------
Grazie ragazzi ... Finalmente sta iniziando a girare ...
non male il search 1D Array
Ora però la cosa vorrei complicarla ...
La mia pulsantiera ha ben 40 pulsantini ... e quale migliore occasione di creare una matrice
magari 8x5 da cui ricavare un numero che va 1 a 40 ...
Se riuscite a darmi qualche dritta nel frattempo che smanetto ... Grazie Mille
----------------------------------------
AUTORE: 1219
DATA :15/06/2010 - 10:09:03
----------------------------------------
mi correggo ...
Ho scoperto infatti che LabView Interpreta in modo diverso Matrici o Array Bidimensionali ...
Mi aiutate a capire ?
Grazie.
----------------------------------------
AUTORE: 482
DATA :15/06/2010 - 10:53:27
----------------------------------------
Potresti usare un array 2d e scorrere con un For ogni riga.
----------------------------------------
AUTORE: 1219
DATA :15/06/2010 - 11:12:32
----------------------------------------
Si grazie Geppo ... il concetto mi è chiaro ...
è graficamente che non riesco ad azzeccare il processo ...
Al momento ho realizzato un array Bidimensionale di Pulsanti ...
per puro caso sono riuscito a trovar un controllo che mi restituisce il numero di colonne e di righe ...
Ti dico per puro caso perchè li ho provati quasi tutti ... nessuno legava con il 2D Array di pulsanti ...
Ora preso il numero di colonne ... posso fare un ciclo for nel ciclo For per le righe ... OK
ma è prorpio l'elemento X,Y che non riesco a catturare ...
Spero si essermi espresso bene
----------------------------------------
AUTORE: 482
DATA :15/06/2010 - 11:17:39
----------------------------------------
Array 2D -> Entri nel ciclo for indicizzandolo (lo fa in automatico se colleghi un array al bordo i un for)-> fai il search. Il risultato del search unito al valore della "i" del ciclo for, ti da l'indice riga e colonna del tuo elemento.
----------------------------------------
AUTORE: 43
DATA :15/06/2010 - 11:29:36
----------------------------------------
[attachment=0:1lozrj8p]ClickTabellaBooleana.vi[/attachment:1lozrj8p]
bye
----------------------------------------
AUTORE: 1219
DATA :15/06/2010 - 13:04:34
----------------------------------------
X paracarro ... Fenomenale Bellissimo esempio ... ho risolto alla grande ... grazie mille
in pratica è già tutto fatto ... basta conoscere lo strumento adatto ... ed io ci devo ancora familiarizzare ...
x gepponline ... mi piacerebbe continuare anche con il tuo esempio, giusto per fare esercizio ...
Ho preso l'array bidimensionale e l'ho collegato al primo ciclo FOR
faccio il search 1D ... e tiro fuori diciamo la colonna ... ma sull'ultima riga però
Perchè ?
es. se ti disegno il mio Array ottengo, in un indicatore, il valore delle Y cliccate ...
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
Y Y Y Y Y Y Y Y
Ora per ricavare anche il valore delle righe ?
Inoltre dovendo partire da sopra come giustamente avviene nell' esempio di paracarro ?
riesci a dedicarmi ancora un po del tuo tempo ? grazie ?
----------------------------------------
================================================================================
orologio fantasma
================================================================================
AUTORE: 3107
DATA :15/06/2010 - 13:08:28
----------------------------------------
Salve! D'improvviso mi e` apparso l'orologino attaccato al convertitore come illustrato nell'immagine allegata. Qualcuno sa spiegarmi di cosa si tratta?
----------------------------------------
AUTORE: 927
DATA :16/06/2010 - 16:24:09
----------------------------------------
Il VI proviene da una versione più vecchia di Labview?
----------------------------------------
AUTORE: 3107
DATA :16/06/2010 - 17:33:59
----------------------------------------
No, e` 8.2
----------------------------------------
AUTORE: 1078
DATA :25/06/2010 - 10:49:41
----------------------------------------
L'orologio ti indica che stai usando una versione più nuova della function che si sta adeguando per adattarsi al codice. Hai di recente installato delle patch di aggiornamento di LV o qualsiasi altro tipo di driver o altro?
----------------------------------------
AUTORE: 4
DATA :16/07/2010 - 14:31:59
----------------------------------------
Ciao, sul forum NI ho trovato un caso uguale al tuo, si tratta di un bug noto di LabVIEW, ecco cosa dicono
[quote:2lugzv9p]The erroneous icon has to do with Save for Previous and the new "Sign Extension Modes" right-click menu options that were added to this function on FPGA diagrams in LabVIEW 8.6 and later. The bug was reported as CAR# 122749 and should be fixed in a future LabVIEW release. Apparently the function may return incorrect values when it has a weird icon, so I'd recommend deleting it and dropping a new one just in case.
Darren Nattinger, CLA
LabVIEW Artisan and Nugget Penman[/quote:2lugzv9p]
qui la discussione completa http://forums.ni.com/t5/LabVIEW/Wait-ic ... ?jump=true
----------------------------------------
================================================================================
più applicazioni che scrivono su lo stesso file
================================================================================
AUTORE: 2701
DATA :15/06/2010 - 15:52:02
----------------------------------------
Ciao
Ho 3 applicazioni che vanno a scrivere sullo stesso file di testo, però la scrittura non può essere contemporanea, quindi se un applicativo apre il file gli altri devono aspettare che esso lo chiuda; utiliizzo le VI "configuration File VIs" (quindi file strutturati in sezioni e chiavi) ho provato ad utilizare "deny access" ma Labview va in crash...
Qualcuno sa darmi una mano
Gazie
R
----------------------------------------
AUTORE: 278
DATA :16/06/2010 - 08:42:44
----------------------------------------
Ciao,
credo che l'unica soluzione per risolvere il tuo problema sia demandare la lettura/scrittura (quindi l'accesso al file) ad un solo VI, chiamiamolo servizio.
Questo servizio, che si occuperà di leggere/scrivere "fisicamente" il file, riceve le richieste di lettura/scrittura (per esempio utilizzando delle code) che gli pervengono dagli altri programmi.
----------------------------------------
AUTORE: 43
DATA :16/06/2010 - 09:42:59
----------------------------------------
[quote="mobi":2s1qdtmq]...Ho 3 applicazioni che vanno a scrivere sullo stesso file di testo,...
[/quote:2s1qdtmq]
viewtopic.php?f=1&t=4001
Non basta il VI "OpenExclusive.vi" che ho già postato?
Se vuoi usare i "configuration file VI":
- Apri il file comune con "OpenExclusive.vi"
- Leggi completamente il file (senza chiuderlo!!!)
- crea localmente un file copiandone il contenuto letto
- gestisci la copia utilizzando "configuration file VI"
- al termine, rileggi totalmente il contenuto del file copiatoe modificato.
- riposiziona la "file position" del file all''inizio del file stesso (usa il vi "Set File position", start ,0)
- scrivi tutto il nuovo contenuto
- chiudi il file restituendo il controllo a chiunque voglia prendersi il file
bye
----------------------------------------
AUTORE: 43
DATA :16/06/2010 - 09:47:21
----------------------------------------
Come alternativa puoi usare un file di cui controlli l'accesso con Open Exclusive, e, una volta ottenuto l'accesso, potresti gestire , mnella stessa cartella , un altro file al quale accederai con i VI di configurazione.
Al termine,dopo aver chiuso il file di configurazione, chiudi anche il file aperto con Open Exclusive, cedendo il controllo agli altri...
bye
----------------------------------------
================================================================================
Pulire memoria della seriale
================================================================================
AUTORE: 3108
DATA :15/06/2010 - 16:04:49
----------------------------------------
Salve a tutti...sono nuovo del forum e sono alle prese con un programmino per labview 8.6 che lo interfaccia ad un pic (18f4550). Quando leggo per la prima volta il contenuto della seriale il codice che mi viene restituito da labview è corretto (0x04), ma la seconda volta il valore di prima viene aggiunto a quello che dovrei leggere (0x040x03). come posso fare per ovviare a questo piccolo problema? Grazie
----------------------------------------
AUTORE: 645
DATA :16/06/2010 - 08:55:43
----------------------------------------
Puoi provare ad usare il blocco "Flush" legato alla porta seriale (non mi ricordo il nome esatto ma se cerchi qualcosa del genere dovresti trovare
).
Sei sicuro di leggere tutti i dati presenti sul bus? Per sicurezza puoi usare il blocco "Byte at serial port" per indicare al blocco "Read" quanti dati leggere e così facendo dovresti leggere tutto ciò che è presente.
----------------------------------------
================================================================================
Conversione da decimale (u32) a binario
================================================================================
AUTORE: 1670
DATA :16/06/2010 - 11:19:18
----------------------------------------
Buon Giorno a tutti,
devo convertire numeri a 32 bit da decimale (u32) a binario e cercavo una funzione già fatta.
In LabView non ho trovato questa funzione di conversione: ce ne sono diverse ma non tra decimale e binario. Forse l'unico sistema è di farne una nuova, ma prima di cimentarmi su questo volevo un vostro parere, magari c' è un modo più agile che qualcuno di voi conosce.
Grazie Mille a tutti
----------------------------------------
AUTORE: 4
DATA :16/06/2010 - 11:40:24
----------------------------------------
Ciao, se ho capito bene potresti usare la funzione "number to boolean array"
----------------------------------------
AUTORE: 43
DATA :16/06/2010 - 11:44:47
----------------------------------------
[quote="Cromosoma":hsl3ubel]Buon Giorno a tutti,
devo convertire numeri a 32 bit da decimale (u32) a binario e cercavo una funzione già fatta.
In LabView non ho trovato questa funzione di conversione: ce ne sono diverse ma non tra decimale e binario. Forse l'unico sistema è di farne una nuova, ma prima di cimentarmi su questo volevo un vostro parere, magari c' è un modo più agile che qualcuno di voi conosce.
Grazie Mille a tutti
[/quote:hsl3ubel]
non basta la visualizzazione in formato binario?
Per i numeri interi puoi scegliere la visualizzazione decimale, esadecimale, ottale e binaria.
Puoi farlo modificando il formato nelle proprietà e, addirittuare puoi variare tale caratteristica runtime, rendendo visibile la radice (tasto dx del mouse sul controllo nel FrontPanel --> Visible Item --> Radix).
Cliccando poi sulla piccola "d" che apparirà accanto al valore numerico in seguito alla visualizzazione della radix, si potrà scegliere fra le modalità che ho riportato sopra anche ad applicazione avviata (run time)
bye
----------------------------------------
================================================================================
Comando Tab per spostarsi da un controllo a un altro
================================================================================
AUTORE: 2435
DATA :21/06/2010 - 13:27:27
----------------------------------------
Ciao a tutti.....
In vb6 usavo il comando "tab" per spostarmi da un qualsiasi controllo a un'altro...
Usando una proprietà di ciascun oggetto dove era possibile settare l'indice che stabiliva l'ordine con cui i controlli prendevano il focus..
In LV esiste qualcosa del genere??come posso fare?
Grazie
----------------------------------------
AUTORE: 724
DATA :21/06/2010 - 13:54:14
----------------------------------------
Da barra menu:
Edit > Set Tabbing Order
----------------------------------------
AUTORE: 43
DATA :21/06/2010 - 14:06:08
----------------------------------------
[quote="nic81_2007":31xin0la]...In vb6 usavo il comando "tab" per spostarmi da un qualsiasi controllo a un'altro...
Usando una proprietà di ciascun oggetto dove era possibile settare l'indice che stabiliva l'ordine con cui i controlli prendevano il focus..
In LV esiste qualcosa del genere??come posso fare?...[/quote:31xin0la]
Anche con LabVIEW è possibile spostarsi da un controllo ad un altro con il tasto <TAB> (Shft-<TAB> per spostarsi sul controllo precedente)
L'ordine di default con cui si passa da un controllo all'altro tramite <TAB>, è determinato dall'ordine di inserimento dei controlli nel Front Panel.
Per cambiare tale ordine è possibile usare da menu del FP :
Edit --> Set Tabbing Order...
Tutti i controlli/indicatori appariranno circondati da un rettangolo nero di spessore un pixel, e l'insieme di controlli /indicatori comprende i controlli /indicatori invisibili.
A questo punto clickando all'interno di questi rettangoli di riferimento verrà assegnato l'indice di TAB-order indicato in alto che verrà automaticamente incrementato al termine di ogni assegnazione.
I cambiamenti potranno essere confermati o meno al termine clickando sull'apposita icona.
E' possibile "skippare" l'uso del TAB per alcuni controlli che pur essendo visibili sono per es. in un'area di schermo non raggiungibile dal mouse se non in modalità di "debug" implementata dal prog. di turno.
PEr rendere un controllo "Skippabile" andare con il mouse sul controllo premere il tasto dx e poi:
Advanced-->Key Navitation...
e poi nel popup in
Tab behaviour
clickare su
Skip this control when tabbing
Riguardo l'uso dei tasti in LabVIEW, avevo fatto scritto un bel post che è andato perso nel marasma dell'anno passato.
Però 2 parole in merito le posso scrivere
Il <tab> permette lo spostamento su controlli di pari livello abilitati e visibili.
Ctrl +Dwn, Ctrl Up
Permette di entrare ed uscire in strutture annidate tipo array e cluster.
attenzione all'uso delle frecce (Left, Right) quando è selezionato un TAB inteso come controllo di LabVIEW (Tab Control):
consente di cambiare da un TAB al successivo o precedente abilitato.
Ce ne sarebbero ancora molte da dire ma non ho tempo e mi fermo qua
bye
----------------------------------------
AUTORE: 2435
DATA :21/06/2010 - 15:21:57
----------------------------------------
OK,trovato....
Grazie
----------------------------------------
AUTORE: 249
DATA :21/06/2010 - 22:54:50
----------------------------------------
A tal proposito chiedo una cosa:
ho assegnato l'ordine di tab e fin qui tutto ok, ma vorrei che all'avvio del vi, il cursore si mettesse di default sul controllo stringa..
In poche parole attualmente devo cliccarci sopra e poi scrivere, ma vorrei, all'avvio del vi scrivere direttamente in quel controllo.
----------------------------------------
AUTORE: 3079
DATA :22/06/2010 - 09:04:40
----------------------------------------
[quote="Tex":1gwg51p3]A tal proposito chiedo una cosa:
ho assegnato l'ordine di tab e fin qui tutto ok, ma vorrei che all'avvio del vi, il cursore si mettesse di default sul controllo stringa..
In poche parole attualmente devo cliccarci sopra e poi scrivere, ma vorrei, all'avvio del vi scrivere direttamente in quel controllo.[/quote:1gwg51p3]
nel diagramma a blocchi, clicca con il destro sul controllo e fai create -> property node -> key focus.
metti questa proprietà in scrittura e assegnagli true.
----------------------------------------
AUTORE: 249
DATA :22/06/2010 - 18:40:29
----------------------------------------
[quote="d.moretti":16kpoi12][quote="Tex":16kpoi12]A tal proposito chiedo una cosa:
ho assegnato l'ordine di tab e fin qui tutto ok, ma vorrei che all'avvio del vi, il cursore si mettesse di default sul controllo stringa..
In poche parole attualmente devo cliccarci sopra e poi scrivere, ma vorrei, all'avvio del vi scrivere direttamente in quel controllo.[/quote:16kpoi12]
nel diagramma a blocchi, clicca con il destro sul controllo e fai create -> property node -> key focus.
metti questa proprietà in scrittura e assegnagli true.[/quote:16kpoi12]
Perfetto grazie! Ora è come volevo.
a volte la soluzione è lì dietro l'angolo.
----------------------------------------
================================================================================
Visa resource name da file
================================================================================
AUTORE: 249
DATA :21/06/2010 - 23:06:38
----------------------------------------
Ciao a tutti, ho un dispositivo usb connesso al pc. Considerato che tale oggetto ha preso la com3 come porta, per la sua gestione ho usato un visa resource name constant "com3".
Considerato però che potrebbe avvenire che, essendo la com3 già impegnata da un altro dispositivo, il mio prenderebbe di conseguenza la com successiva libera.
A questo punto la mia costante punterebbe alla porta errata quindi vorrei sapere come:
1)riconoscere il dispositivo e sapere quale porta ha impegnato per poi utilizzarla.
2) scrivere il dato (visa resource name) appena acquisito in un file di configurazione.
grazie in anticipo.
----------------------------------------
AUTORE: 482
DATA :22/06/2010 - 07:47:09
----------------------------------------
...ma ciao!
1) potresti provare a fare qualche scrittura/lettura sul dispositivo e se ti risponde come ti aspetti allora bene, senno' cambi porta.
2) La resource name puo' essere una stringa. Se tu colleghi una stringa al terminale VISA resource name è comunque accettato.
----------------------------------------
AUTORE: 3079
DATA :22/06/2010 - 08:56:31
----------------------------------------
ciao, ai tempi ho risolto chiamando da linea di comando il programma devcon ([url:3f1nqrsf]http://support.microsoft.com/kb/311272[/url:3f1nqrsf]), interrogandolo su vid e pid del dispositivo connesso.
Dalla risposta ottenuta ho fatto il parsing della porta COM assegnata dal sistema all'oggetto.
----------------------------------------
================================================================================
Shared Variable
================================================================================
AUTORE: 2701
DATA :26/06/2010 - 10:52:22
----------------------------------------
Ho in esecuzione più eseguibili che comunicano tra di loro tramite delle Shared Variable...Tutto funziona abbastanza bene; l'unico inconveniete è che quando chiudo gli eseguibili ci mette molto tempo..Penso che il problema sia dovuto alle Shared Variable...Esiste qualcosa che mi assicuri che i processi relative ad esse si chiudano alla chiusure del programma?
Spero di essere stato chiaro
Ciao
----------------------------------------
AUTORE: 3079
DATA :28/06/2010 - 10:08:56
----------------------------------------
i vi girano tutti sulla stessa macchina?
----------------------------------------
AUTORE: 2701
DATA :28/06/2010 - 10:25:45
----------------------------------------
si girano sulla stessa macchina
R
----------------------------------------
AUTORE: 3079
DATA :28/06/2010 - 15:42:49
----------------------------------------
hai provato ad usare una variabile globale al posto della shared?
----------------------------------------
AUTORE: 2701
DATA :28/06/2010 - 16:51:15
----------------------------------------
non potrei....Devono comunicare il locale diversi eseguibili tra di loro e l'utilizzo delle shared è la soluzione migliore.
r
----------------------------------------
AUTORE: 482
DATA :29/06/2010 - 07:35:58
----------------------------------------
Secondo me è lo shared Variable engine che fa casini.
Hai provato in alternativa con il Datasocket?
----------------------------------------
AUTORE: 2701
DATA :29/06/2010 - 07:56:11
----------------------------------------
Diciamo che il programma è bello che fatto utilizzare il Datasocket significherebbe stravolgere il tutto....
Anche perchè il sistema per come è fatto funziona, il problema è nella chiusura.
----------------------------------------
================================================================================
Grafico
================================================================================
AUTORE: 2483
DATA :28/06/2010 - 10:55:38
----------------------------------------
Ciao a tutti.
Avrei bisogno di aiuto riguardo ad un problema, sto creando un'applicazione che interagisce con un scheda National Instruments.
In pratica il programma fa questo:
Acquisisco un valore analogico (portata) tramite la scheda aspetto e che sia stabile, dopodiche vario una resistenza di carico e per ogni valore di resistenza acquisisco la tensione e la corrente sul carico per calcolarmi la potenza.
Ora, l'obiettivo è creare un grafico che mette in ralazione portata, valore della resistenza di carico e potenza.
Man mano che il programma va avanti il valore della portata viene incrementato di vari step. Quindi per farl breve avrò per ogni valore della portata:
- un vettore "portata" pieno di valori identici
- un vettore "potenza" con il prodotto di tensione e corrente
- un vettore "resistenza" con i valori della resistenza di carico
Dovrei fare un grafico dove visualizzo tutte le curve che acquisisco...ho provato a leggere sull'help ma ci capisco ben poco...non so quale oggetto usare, se il 3D surface, il 3D parametric Surface o il 3D curve...e soprattutto come usarli.
Premetto che sono abbastanza alle prime armi con LV, ho fatto solo un mini progetti circa un'anno e mezzo fa (partendo da zero) e poi non l'ho più usato.
Grazie mille
Apo
----------------------------------------
AUTORE: 2483
DATA :28/06/2010 - 15:06:21
----------------------------------------
Modifico la domanda... tra prove e tentativi falliti son riuscito a plottare una curva utilizzando l'oggetto 3DCurve. Ho solo un problema....
Quando plotto la seconda curva la prima sparisce. Son riuscito usando le proprietà del 3DCurve a cambiare il numero dei plot e a visualizzare più curve. Ora ho solo un problema...
Riesco a cambiare il numero di plot solo in fase di programmazione, non posso impostarlo in maniera "dinamica" durante l'esecuzione. Qualcuno sa come fare?
----------------------------------------
================================================================================
Pilotare Interruttori Esterni
================================================================================
AUTORE: 3076
DATA :29/06/2010 - 11:46:56
----------------------------------------
Salve a tutti,
Ho fatto un VI con cui mando dei segnali letti da file alle 8 uscite analogiche della PCI 6733.
Vorrei adesso fare in modo di staccare alcune uscite tramite degli switch. Cioè vorrei pilotare 8 switch esterni collegati alla SCB-68, comandati da segnali digitali,
e vorrei che si apra uno o più degli 8 quando premo dei pulsanti sul front panel durante l'esecuzione del VI. Quando poi richiudo gli switch,
sempre dal front panel, dovrebbe riprendere l'invio dei segnali alle 8 uscite analogiche.
Avete qualche suggerimento da darmi per fare ciò.
Grazie,
Wasabi
----------------------------------------
AUTORE: 1078
DATA :29/06/2010 - 13:25:25
----------------------------------------
Caio wasabi,
Non puoi usare direttamente le uscite digitali della tua scheda come interruttori che sezionano, comandati da pannello, l'apertura o la chiusura di un canale anologido dove stai generando un segnale. Per fare una cosa del genere devi sezionare tramite una scheda relè che eventualmente triggeri con una linea generata da un canale digitale.
Perchè invece di complicarti la vita non metti semplicemente il canale che vuoi sezionare a 0V?
----------------------------------------
================================================================================
Automation test per modello simulink,stateflow con Labview
================================================================================
AUTORE: 3120
DATA :29/06/2010 - 13:36:04
----------------------------------------
Salve a tutti,sono neo iscritto al forum,e utilizzo labview per alcuni automation test direttamente su hardware,quel che volevo realizzare è un test automatico da applicare dierttamente al modello che è sviluppato interamente in simulink stateflow.
E' possibile interfacciare il labview direttamente?Se si accetto suggerimenti!
Grazie mille!
----------------------------------------
================================================================================
Commentare il Codice
================================================================================
AUTORE: 1219
DATA :01/07/2010 - 06:27:31
----------------------------------------
Salve Signori ...
Chi di voi Ricorda il famigerato REM ?
oppure ricorda l'apicetto " ' " del buon caro Visual Basic
Ancora le doppie sbarrette "//" nei vari linguaggi C ecc ...
il mio porposito non è quello di commentare il codice con delle istruzioni e/o spiegazioni ...
[color=#FF0000:24x8r5tw][b:24x8r5tw]ma è quello di disabilitare momentaneamente parti di codice in modo che non vengano eseguite ...[/b:24x8r5tw][/color:24x8r5tw]
Spero di essere stato chiaro ... come si fa in labview ?
----------------------------------------
AUTORE: 482
DATA :01/07/2010 - 07:48:34
----------------------------------------
Ci sono diversi modi:
1) metti ogni parte che non vuoi eseguire in una case structure nel case false e gli colleghi una costante FALSE in ingresso al case
2) metti le parti che non vuoi eseguire in una case structure e gli colleghi una variabile globale cosi' che cambiando valore a quella variabile, puoi abilitare e disabilitare diverse parti di codice in un colpo solo
Poi c'e' l'opzione DIsable Structure:
3) metti ogni parte che non vuoi eseguire in una disable structure
4) metti la parte che non vuoi eseguire in una conditional disable structure, poi nel progetto vai a settare la condizione tramite i Conditional Disable Symbols nelle proprietà del progetto rendendo vera o falsa la condizione di disable.
Queste ultime due soluzioni oltre a non eseguire la parte interessata, non la caricano in memoria.
Se non hai problemi di memoria secondo me la 2 è la soluzione migliore e piu' comprensibile
----------------------------------------
AUTORE: 1219
DATA :01/07/2010 - 07:52:12
----------------------------------------
Grazie mille !
----------------------------------------
================================================================================
Chiusura singolo file excel
================================================================================
AUTORE: 3120
DATA :05/07/2010 - 09:16:55
----------------------------------------
Salve a tutti,
volevo chiedervi una consulenza,ho sviluppato un tool di testing ed alla fine dell'operazione mi genera un erport in excel,il problema è riguardante la chiusura di un file .xls alla fine del processo,difatti quando vado a chiuderlo mi chiude qualsiasi documento xls aperto e perdendone così qualsiasi modifica non salvata.
Ora quel che vi chiedo è:
è possibile chiudere il singolo file lasciando aperti tutti gli altri?
Confidando in vostra risposta vi saluto!
----------------------------------------
AUTORE: 645
DATA :05/07/2010 - 10:59:30
----------------------------------------
Puoi lasciare il file excel indipendente da LabView?
Mi spiego... puoi creare un file excel senza aprirlo. In pratica LabView te lo crea e lo compila, poi sei tu ad aprirlo con Excel.
In questo modo separi il funzionamento dei due programmi.
----------------------------------------
AUTORE: 3120
DATA :05/07/2010 - 11:19:56
----------------------------------------
Eh no,mi serve proprio che alla fine del test compaia il file di soluzione,purtroppo il funzionamento non posso variarlo!
QUindi mi dici che non riesco a chiudere il singolo file?
----------------------------------------
AUTORE: 645
DATA :05/07/2010 - 15:56:37
----------------------------------------
Puoi postare il VI come punto di partenza?
----------------------------------------
================================================================================
Creare un filtro notch?
================================================================================
AUTORE: 3127
DATA :05/07/2010 - 14:29:08
----------------------------------------
Sto facendo un progetto in labview che consiste in poche parole nell'acquisizione di dati tramite la scheda NI 6009. Il problema è che devo avere la possibilità di filtrare il segnale in ingresso eliminando la banda di 'x' hertz (filtro notch). Ho provato già a riprodurne uno con un filtro mettendo sull'impostazione band stop, ma non ho combinato (forse ho sbagliato i valori ). Potete aiutarmi? Grazie in anticipo.
----------------------------------------
AUTORE: 1168
DATA :05/07/2010 - 14:43:00
----------------------------------------
Prova a postare il VI che stai usando... così su due piedi è difficile risponderti con poche informazioni!
Provato anche a mettere un passa-alto e un passa-basso in serie nel caso?
----------------------------------------
================================================================================
I programmi invecchiano?
================================================================================
AUTORE: 3051
DATA :05/07/2010 - 17:17:03
----------------------------------------
Salve a tutti,
spero non me ne vogliate ma sto per fare, credo, una domanda da 1 milione di dollari.
Il mio attuale problema è che, dopo una settimana di assenza in laboratorio, il programma che avevo scritto per fare misure non funziona più e non me ne spiego il motivo. Anzi peggio: prima dava un certo errore, che fra poco descriverò, "ogni tanto" (una volta ogni 9-10 misure...), da quando sono tornato lo dà "quasi sempre" (NON funziona 19 volte su 20). In teoria non è cambiato niente: il mio collega ha provato qualche misura ma col SUO portatile (incontrando problemi anche lui, ma diversi), mentre il mio me lo sono portato via durante l'assenza.
L'errore il sè pare una difficoltà di comunicazione fra il computer e un generatore di corrente (un KEPCO BOP-50-8D-4886 collegato con GPIB grazie alla scheda KEPCO BIT 4886) nel momento in cui invio per LA SECONDA VOLTA il comando che cambia la corrente impostata. Non so, come se dopo il primo non accettasse più comandi sulla corrente. Per l'esattezza il programma si blocca sempre al 4° cambio di corrente con l'errore classico "no listener condition detected", ma in realtà si vede che già dopo il primo non sta cambiando più.
Per il momento non vi sto inviando il programma ma è solo perchè essendo abbastanza complicato e pieno di subVI non saprei come farvi districare all'interno, se qualcuno è interessato a dargli un'occhiata magari lo mando.
Mi preme sottolineare 2 cose:
1) Il comando che imposta un nuovo valore della corrente è un subVI fatto dalla stessa KEPCO che utilizza comandi VISA.
2) Ripeto che questo era un errore che già conoscevo, perchè ho sempre trovato "delicata" la comunicazione fra il pc e il generatore, ma mentre prima avveniva di rado, ora è raro che il programma funzioni. UNA VOLTA FUNZIONAVA!!!!
3) Questo errore avviene solo in programma, in altri in cui uso lo stesso subVI ma con routine complessive diverse funziona perfettamente e non si blocca!!!
Sarò ingenuo ma nel mio immaginario uno strumento elettronico o funziona SEMPRE o non funziona MAI, questo funzionare A VOLTE mi impedisce di cercare soluzioni perchè non riesco a capire cosa possa cambiare da un'esecuzione all'altra in maniera random, e non so dove mettere le mani, anche perchè di comunicazione GPIB non so quasi niente (non ho ancora capito neanche bene cosa sia VISA...).
Se qualcuno ha qualche suggerimento lo ringrazio tantissimo
----------------------------------------
AUTORE: 482
DATA :06/07/2010 - 07:37:28
----------------------------------------
Di solito quando ho problemi di questo genere, comincio a scremere l'eseguibile fino ad avere Solo la parte che genera l'errore.
Colegando costanti invece che controlli.
Solitamente gli errori che si verificavano erano dovuti a cattiva gestione della memoria o dimenticanze nei controlli della comunicazione.
Quindi il mio consiglio è quello di eliminare tutto quello che non ti serve ai fini diagnostici cosi' che, quando avrai la parte piu' piccola che ti genera l'errore, potrai postarlo o comunque individuare il blocco che ti genera l'errore.
----------------------------------------
AUTORE: 1168
DATA :06/07/2010 - 07:58:03
----------------------------------------
A volte capita anche a me, ma solo quando il programma non è finito. E' molto importante gestire le risposte dallo strumento e sentire cosa ti dice. Io avevo uno strumento che non accettava cambiamenti ai valori impostati se prima non si fermava il funzionamento.
Controlla anche come devi chiaccherare con lo strumento! Magari c'è qualche trucco del genere.
Ciao!
Pietro
P.S. Se la kepco ti da i VI per parlare col generatore, dovrebbe darti anche un esempio, che magari non fa quello che serve a te, ma che prob è stabile. Hai errori anche con quello?
----------------------------------------
AUTORE: 3051
DATA :06/07/2010 - 12:14:01
----------------------------------------
Vi ringrazio per i consigli. Devo aggiungere una cosa che secondo me è molto significativa e una novità...
L'aggiunta è che, mentre non funzionava in regime normale, lo stesso problema non si presentava in highlight mode. Questa cosa mi fa essere un po' scettico sulla soluzione di togliere le parti in più al programma, perchè la mia impressione è che è la "combinazione" del tutto a dare problemi. Avete un'idea di cosa possa cambiare fra i due modi di far girare il software? Io ho pensato subito che allora potesse essere un problema di velocità d'esecuzione verso il tempo di risposta dello strumento ma 1)prima non ne aveva mai avuto (parlo di 2 mesi di misure quotidiane!!!) e 2)aggiungere un po' di ritardi non ha funzionato.
La novità è che stamattina ha inspiegabilmente (per me) [b:3tor64xd]ricominciato a funzionare[/b:3tor64xd]. All'inizio niente, allora mi sono rimesso un po' a trastullarmi col programma e ho aggiunto una case structure che scrivesse un messaggio d'errore nel caso il comando al kepco fallisse. L'ho provato 5 volte e ha sempre funzionato.
Ovviamente non posso dire che mi dispiaccia però, dato che non credo di aver fatto niente di "strutturale", mi aspetto che presto o tardi il problema si possa ripresentare...
----------------------------------------
AUTORE: 482
DATA :06/07/2010 - 13:04:51
----------------------------------------
[quote="jankafi":15eq4ipt]L'aggiunta è che, mentre non funzionava in regime normale, lo stesso problema non si presentava in highlight mode. [/quote:15eq4ipt]
Questo mi fa pensare ad un errore di sequenzializzazione delle azioni che genera errori casuali (a volte si, a volte no).
Perchè mentre in funzionamento normale tu hai piu' cicli e azioni parallele, in highlight mode ogni sequenza viene eseguita singolarmente in modo da poter essere seguita e quindi il funzionamento è completamente differente.
Resto quindi sempre sul mio primo consiglio
----------------------------------------
AUTORE: 3051
DATA :06/07/2010 - 14:29:42
----------------------------------------
[quote="gepponline":2oq3fsew] Questo mi fa pensare ad un errore di sequenzializzazione delle azioni che genera errori casuali (a volte si, a volte no).
[/quote:2oq3fsew]
Non ti nascondo che questa cosa continua a sconvolgere la mia filosofia determinista!!!
Comunque se ricomincia a dare problemi proverò a smontarlo a pezzettini e farli girare separatamente.
Grazie dell'aiuto!!!
----------------------------------------
AUTORE: 482
DATA :06/07/2010 - 16:05:47
----------------------------------------
aspetta...il mio "a volte si e a volte no" è appunto perchè c'e' un errore di programmazione e quindi a volte dei processi si sovrappongono e danno problemi e altre volte no,non è che il sistema da errore cosi' perchè non ha niente da fare ma perchè chi ha fatto il programma gli ha detto di fare una cosa che non sempre puo' essere fatta.
La base è sempre che il PC è la cosa piu' stupida che esista, esegue solamente degli ordini e non puo' sbagliare. Se sbaglia è perchè gli si dice di fare qualcosa di sbagliato
----------------------------------------
AUTORE: 2514
DATA :13/10/2010 - 10:19:39
----------------------------------------
Ciao, io, come suppongo molti di questo forum, lavoro e utilizzo Labview per costruire applicazioni che comunicano con strumentazioni elettroniche di terze parti o costruite dal mio gruppo di lavoro. Non è infrequente che un software di comunicazione seriale abbia presentato problemi del genere che tu descrivi. Provo a darti qualche indicazione sulle casistiche classiche da me riscontrate:
1) VICINANZA AD ALTRI APPARECCHI
I disturbi elettromagnetici sono assolutamente vigliacchi: spesso un'emissione RF di un apparecchio (ad esempio un caricabatterie industriale) si insinua sulla linea seriale e la massacra. Se la tua gestione del messaggio NON PREVEDE qualche "robustezza" (un checksum per capire se il messaggio è buono o da scartare, un sistema a timeout per gli errori e così via) può essere che in certe condizioni le seriale si impalli miserabilmente. E se il giorno dopo il disturbo non c'è più tutto va che è una meraviglia.
2) ACQUISIZIONI PROLUNGATE NEL TEMPO E PROBLEMI DI MEMORIA
In alcuni software di acquisizione grafica avevo problemi di memoria che rallentavano il sistema impallando la comunicazione. E' stato sufficiente gestire con attenzione le temporizzazioni per risolvere. Prova a controllare se ci sono overrun sulla porta di comunicazione, cioè se alcuni byte "coprono" altri byte prima che il controller li abbia campionati.
3) LA MALEDIZIONE DEL BASSO ASSORBIMENTO
Se utilizzi un computer portatile oppure un fisso con basso assorbimento impostato può capitare che la comunicazione si blocchi irrimediabilmente. Alcuni PC sembrano avere gestioni del risparmio energetico alquanto "fantasiose".
4) CABLAGGI
Sì, è la cosa più scontata e quindi, per la legge di Murphy...
Buon lavoro! Non sai come ti capisco...
----------------------------------------
AUTORE: 3051
DATA :04/11/2010 - 14:31:29
----------------------------------------
Anche se ho capito poco di quello che dici provo a risponderti:
1) Effettivamente nel mio laboratorio lavoro con campi magnetici statici anche fino a qualche tesla, ma ai cavi non arriva mai più di una decina di gauss. Non so se faccia differenza ma i dispositivi che mi generano gli errori sono connessi tramite interfaccia GPIB.
2) Credo di aver capito almeno "l'idea" di questo tipo di problema, ma non saprei come fare a verificare...(se hai tempo e voglia di darmi qualche istruzione un po' più dettagliata...)
3) Effettivamente utilizzo un portatile, a cui ho disabilitato la disattivazione schermo e dischi rigidi. Sarà stato sufficiente?
4) Quello è sempre vero, ma parto dal presupposto che i cavi funzionino...
----------------------------------------
================================================================================
Collegamento con strumentazione
================================================================================
AUTORE: 3129
DATA :06/07/2010 - 08:58:53
----------------------------------------
Salve, sono nuovo di Labview...
Ho creato un programma in LV e vorrei testarlo su un picoamperometro digitale...
Cosa che non ho mai fatto...
Non so dove mettere le mani: che devo fare?
----------------------------------------
AUTORE: 3051
DATA :06/07/2010 - 14:37:20
----------------------------------------
Ti dò una risposta molto da recluta...
Intanto devi scoprire come il tuo amperometro si può collegare al computer, credo tipicamente tramite gpib o tramite rs-232.
Poi ti può convenire anche controllare sul sito della casa produttrice se rilasciano dei programmi Labview già fatti per controllarli in remoto, cosa che sarebbe una grande comodità!!!
Sennò l'alternativa credo sia di prendersi il manuale di istruzioni dell'amperometro e studiarti i comandi singoli che accetta, in modo da inserirli manualmente uno per uno nel tuo programma.
Spero di non aver detto sciocchezze!!
----------------------------------------
AUTORE: 2855
DATA :06/07/2010 - 15:43:33
----------------------------------------
Se mi posso permettere, non hai detto sciocchezze..... quello che devi cercare nel manuale sono i comandi SCPI (si pronunciano schipi). Questi comandi possono essere usati con qualunque protocollo di comunicazione ( rs-232, GPIB, TCP-IP.....). Prova anche a vedere se nel menù principale (getting started) di LV puoi trovere "Help-----Find Instruments...).Li si apre una connessione al server NI dove sono conservati tutti i VI di comunicazione relativi agli strumenti Stanalone, fai una ricerca per marca e per modello se li trovi bene e verranno installati nelle palette di LV ,altrimenti prova a cercare in internet ed incrocia le dita. Comunque mi dici la marca del picoamperometro (scommetto Keithley).
----------------------------------------
AUTORE: 3129
DATA :06/07/2010 - 15:59:45
----------------------------------------
grazie, cerco!
il realtà è un picoamperometro e generatore di tensione: HP 4140B (pA METER/DC VOLTAGE SOURCE)
qualunque informazione a riguardo è ben accetta...
----------------------------------------
AUTORE: 2855
DATA :06/07/2010 - 16:17:58
----------------------------------------
Trovati sul find instruments...... guarda che devi cercarli non come HP ma come Agilent Technologies (che è la parte strumentazione scientifica del HP).Buon lavoro
----------------------------------------
AUTORE: 2855
DATA :06/07/2010 - 16:19:13
----------------------------------------
opps non devi flaggare il "NI Certified Drivers Only"
----------------------------------------
AUTORE: 3129
DATA :06/07/2010 - 16:23:07
----------------------------------------
gli SCPI non li ho trovati sul manuale...
ho trovato i Remote Program Code:
(pag: 84/101)
http://www.home.agilent.com/upload/cmc_ ... -90021.pdf
sono questi?
----------------------------------------
AUTORE: 2855
DATA :06/07/2010 - 16:30:39
----------------------------------------
Si ,ma con i VI che scarichi dal find instruments hai comunque risolto, è tutto molto più facile. Basta metteri i subVI nella sequenza che ti interessa ed il gioco è fatto. Se quardi al loro interno (block diagram) vedrai che sono scritti i relativio comandi SCPI.
Per qualunque delucidazione sono a disposizione.
----------------------------------------
AUTORE: 3129
DATA :06/07/2010 - 16:35:55
----------------------------------------
scusa ma per
(getting started) di LV > "Help-----Find Instruments
...
Intendi NI-488.2> Getting started , giusto?
da qui se faccio Add Hardware mi da una piccola lista tra cui PCI-GPIB, PCI-GPIB+, ecc..
mi sa che non è quello che intendevi...
scusa ma non riesco a trovare find instruments!
----------------------------------------
AUTORE: 2855
DATA :07/07/2010 - 08:59:34
----------------------------------------
No, appena lanci LabView appare la schermata getting Started. Mi sto ricordando dall'altra discussione che tu parlavi di LV 7.0 , che naturalmente non ha questa funzione. Nel caso che non mi stia sbagliando, dimmelo che diventa complicato trovarli per il LV 7.0 e nel caso che li troviamo, li installiamo manualmente.
----------------------------------------
AUTORE: 3129
DATA :07/07/2010 - 09:00:28
----------------------------------------
no..non c'è il getting started!!!
----------------------------------------
AUTORE: 2855
DATA :07/07/2010 - 09:21:33
----------------------------------------
Ti ha detto bene. Li ho trovati. Se mi fai avere una tua mail te li invio e ti spiego dove installarli
----------------------------------------
AUTORE: 3129
DATA :07/07/2010 - 09:25:10
----------------------------------------
ti ho inviato un messaggio privato!
----------------------------------------
AUTORE: 3051
DATA :07/07/2010 - 17:55:33
----------------------------------------
Grazie a voi ho appena scoperto che si possono scaricare direttamente da Labview i software per metà degli strumenti che ho in laboratorio!!!
Però a questo punto mi è sorto il problema che, quando cerco di infilare uno di questi in un mio programma, fa un suono d'errore e non compare nulla. E al riavvio di Labview mi dice che il programma è andato in crash!!!
P.S. Scusate ma Labview 2009 quale sarebbe? Perchè io ho Labview 8.2 , ma per i driver ho trovato la scelta fra 7.0, 8.0 e 2009...
----------------------------------------
AUTORE: 645
DATA :12/07/2010 - 08:55:13
----------------------------------------
LabView 2009 è l'ultima versione... Prima ci sono state le versioni 8.6, 8.5, 8.2 e via via, con qualche versione intermedia...
Mi permetto una nota: i programmi "già pronti" per diversi strumenti sono molto utili (io ne uso un po'!) ma non bisogna lavorare senza conoscere un pizzico della teoria che c'è sotto.
Altrimenti si rischiano due problemi:
a) qualcosa non funziona: è la situazione meno grave, al massimo non si leggono i dati o non si riesce ad impostare un comportamento particolare dello strumento.
Per risolvere si può cercare nel manuale del dispositivo o in internet... oppure chiedendo nel forum
b) funziona tutto senza che il programmatore se ne accorga: è la situazione peggiore perchè può capitare che lo strumento venga posto in condizioni di funzionamento "pericolose"... dove con la parola "pericolose" si intendono un sacco di cose... banalmente potrebbe esserci una generazione di segnale per periodi diversi da quelli attesi o con valori non voluti.
Quindi consiglio un'occhiata alla teoria!
In particolare partirei dalla comunicazione VISA con le sottocategorie relative, per esempio, alla comunicazione RS232 (o comunque quella usata dallo strumento per interfacciarsi al pc).
----------------------------------------
AUTORE: 2855
DATA :12/07/2010 - 09:42:53
----------------------------------------
Che qualcuno speri che mettendo un VI scritto da qualcun altro, funzioni tutto e che non ci si prenda nemmeno il disturbo di capirne il funzionamento, questo mi sembra il minimo sindacale per poter lavorare tranquillamente. I driver messi a disposizione da NI devono essere vissuti come un aiuto a capire il funzionamento di uno strumento, non come scorciatoia per fare funzionare lo stesso strumento
Per jankafi :devi scaricare la versione dei driver/Vi strumenti per la versione di LV che hai installato o per una versione precedente. Assolutamente mai installare una versione successiva. Tu hai installato il LV 8.2, scarica i driver/vi x LV 8.0 o se proprio necessario quelli x LV 7.0. Un altro problemino di LV è quello di non riconoscere i VI di versioni troppo vecchie, quindi se dovesse capitare non andare troppo indietro sulle versioni di driver/vi.
----------------------------------------
AUTORE: 3051
DATA :04/11/2010 - 14:22:48
----------------------------------------
Salve,
posso continuare a fare domande sul magico mondo della comunicazione pc-strumenti?
Il mio nuovo problema è che, per spostare la postazione di controllo dal mio portatile (LB 8.2) al pc fisso del laboratorio (LB 7.1) ho fatto le seguenti cose:
1 - Ho disinstallato LB 7.1 dal pc fisso;
2 - ho disinstallato il convertitore GPIB-USB che uso;
3 - ho installato LB 8.2;
4 - ho disinstallato SOLO la parte NI-488.2 di LB;
5 - ho ri-installato il convertitore GPIB-USB col suo controller 488.2.
Questa procedura aveva funzionato sul mio portatile. Ora invece il risultato è il seguente: un particolare strumento (un monocromatore) risulta connesso quando faccio partire il suo programma LB di controllo ma alcuni comandi li riceve, altri non li esegue (senza piantarsi però).
In più quando apro il Visa Interactive Control della National Instruments nell'elenco dei dispositivi ilmonocromatore non è presente (prima sì), e come lui anche altri strumenti (che ancora non ho verificato)
Insomma, ovviamente non pretendo una soluzione dal mio racconto generico. La mia speranza è che qualcuno possa un minimo indirizzarmi su "che tipo" di problema possa portare dei sintomi come quelli che ho descritto...
Grazie in anticipo
----------------------------------------
AUTORE: 482
DATA :05/11/2010 - 07:28:18
----------------------------------------
Io, se fossi in te, installerei l'ultima versione dell' NI-DAQ completa. Se non ce l'hai su disco, scaricala dal sito della National.
----------------------------------------
AUTORE: 3051
DATA :08/11/2010 - 16:53:53
----------------------------------------
Come Sherlock, dopo 2 ore di esame di tutti i subVI possibile e immaginabili, ho dedotto che l'unico comando che non funzionava era quello che inviava un numero decimale.
Solo che a differenza del mio portatile sul pc fisso è impostata la virgola come separatore, invece lo strumento accetto solo il punto.
Insomma problema risolto: ora devo decidere se essere orgoglioso del mio acume, o mettermi a piangere per quanto tempo ho perso dietro a una sciocchezza...
----------------------------------------
AUTORE: 43
DATA :08/11/2010 - 17:25:22
----------------------------------------
[quote="jankafi":m2w4nrsi]...
Insomma problema risolto: ora devo decidere se essere orgoglioso del mio acume, o mettermi a piangere per quanto tempo ho perso dietro a una sciocchezza...
[/quote:m2w4nrsi]
Devi sentirti un po' [i:m2w4nrsi]orgoglione[/i:m2w4nrsi] come è capitato a molti frequentatori di questo Forum.
Ovviamente per primo mi ci metto io, primo a sentirmi orgoglioso con vergogna.
In questo Forum l'argomento è stato dibattuto in lungo e in largo, ma ogni volta si ripresenta sempre uguale ma in forma e modalità diverse.
Da quando è capitato a me, ad ogni installazione dell'ambiente di sviluppo LabVIEW, nelle Option , oltre a disabilitare fisso l"Lock Automatic Tool Selection" e un' altra decina di fastidiose opzioni di default, sto molto attento anche a togliere la spunta SEMPRE a "Use localized decimal point*".
Medesima attenzione a quando si crea un eseguibile...
bye
----------------------------------------
================================================================================
Labview 7 su windows 7
================================================================================
AUTORE: 3129
DATA :06/07/2010 - 10:12:13
----------------------------------------
Ho provato ad installare LabVIEW 7 su windows 7 ..e a quanto pare sono incompatibili...
c'è una soluzione? (che non sia comprarsi un software più recente)
----------------------------------------
AUTORE: 2855
DATA :06/07/2010 - 13:00:37
----------------------------------------
io ho installato lV 8.0 su Win7 e l'incompatibilità non è di LV ma del programma che gestisce l'installazione.....in soldoni prova a far partire direttamente il file setup andandolo a cercare all'interno della cartella di installazione. Con LV 8.0 ha funzionato....vedi mai.
Fammi sapere
in bocca al lupo
----------------------------------------
AUTORE: 3129
DATA :06/07/2010 - 13:38:53
----------------------------------------
Ma il problema me lo da durante l'installazione...!
----------------------------------------
AUTORE: 3129
DATA :06/07/2010 - 13:39:45
----------------------------------------
(il sistema operativo che ho è a 64bit)
----------------------------------------
AUTORE: 2855
DATA :06/07/2010 - 13:47:00
----------------------------------------
anche la mia macchina è 64 bit (Win7 automaticamente installa il programma su root\programmi se il software è 64 bit mentre su root/programmi(x86) se deve emulare il 32bit. Comunque mi da l'impressione che se si blocca in fase di installazione il LV7 su Win7 non và. MI dici l'errore che dichiara?
----------------------------------------
AUTORE: 3129
DATA :06/07/2010 - 14:11:29
----------------------------------------
Ora non ricordo e non posso rifare la procedura..
Potrei comunque usare un emulatore di windows X, tuttavia io ho windows 7 Home Premium nel quale (a differenza di enterprise, ultimate e professional) non è stato inserito tale emulatore..
help!
----------------------------------------
AUTORE: 2855
DATA :06/07/2010 - 14:18:51
----------------------------------------
spero di non sbagliare ma l'emulatore di cui parli tu, serve ad installare un altro O.S. e si puo scaricare gratuitamente (
) dal sito microsoft. L'emulazione che dico io è intrinseca in un O.S.a 64 bit ( non acquisteresti in O.S. a 64 se ci girano sopra solo i programmi a 64 bit).
Una cosa che puoi fare è scaricare "Windows virtual PC" con versione Win XP (gratuitamente
) ed installare il LV7.0. Così funziona di sicuro. Unica richiesta è una buona dose di RAM (+ ne hai e meglio è.....) en bel pò di spazio nel HD.
----------------------------------------
AUTORE: 3129
DATA :06/07/2010 - 14:29:31
----------------------------------------
non mi sembra sia gratuito
guarda qua:
http://www.microsoft.com/windows/virtua ... nload.aspx
quando seleziono Home premium 64 bit mi dice:
You are not eligible to download Windows XP Mode. You must have Windows 7 Professional, Enterprise, or Ultimate to run Windows XP Mode. To upgrade visit Windows 7 Anytime Upgrade.
!!!
----------------------------------------
AUTORE: 2855
DATA :06/07/2010 - 15:35:19
----------------------------------------
OK ci ho provato....è gratuito ma non lo è il passaggio a Win7 Pro. Infatti io ho Win7Pro. Vedi se trovi in giro qualche emulatore gratuito (prova anche solamente il Virtual PC) ed in seconda battuta installi tu il O.S.che preferisci. Mi sa che questa è l'ultima spiaggia
----------------------------------------
================================================================================
generazione di un segnale, con burst
================================================================================
AUTORE: 3079
DATA :08/07/2010 - 11:37:49
----------------------------------------
Ciao a tutti
una domanda:
devo generare un segnale analogico con una NI9269.
usando i DAQmx riesco tranquillamente a generare tutti i tipi di onde, sia in continuo, sia per un determinato numero di samples.
Ho un attimo di difficoltà quando devo generare dei burst di questi segnali, dandogli un tempo di on e uno di off.
Il driver, una volta lanciato, deve poter terminare senza attendere il termine della generazione.
Qualche idea?
----------------------------------------
AUTORE: 1078
DATA :13/07/2010 - 07:52:20
----------------------------------------
Ciao Moretti,
Non so se esiste qualcosa di già pronto. Io ho risolto il rpoblema trigerando il segnale di genrazione sul fronte di salita e stoppando dopo un tempo definito. Del resto il tuo trigger dovrebbe essere conosciuto. Se non lo fosse potresti fare una funzione d'acquisizione digitale che ti restituisce la frequenza o la durata dell'impulso, sono funzioni possibili usando i DAQmx, da li ricavi il tempo di durata del tuo impulso, a questo punto hi il momento di inzio (dato dal fronte di salita/discesa del tuo trigger e la durata di generazione) configuri la genrazione del segnale con trigger e attendi il fronte di salita/discesa del tuo trigger, iniziata la generazione è sufficiente che attendi il tempo del tuo impulso prima di stoppare tutto.
Spero di averti dato l'idea giusta....
----------------------------------------
AUTORE: 3079
DATA :16/07/2010 - 09:55:54
----------------------------------------
per la generazione dovrei aver risolto.
Il mio problema però è questo:
devo poter lanciare la generazione, anche continua, con un driver e fare in modo che la scheda di generazione continui a fare il suo lavoro anche una volta chiuso il driver.
Questo perchè devo mettere un oggetto (ad esempio: il test di un microfono che riceve una determinata frequenza in fonica) in un certo stato e poi poterci lavorare.
Il tutto è gestito da teststand in automatico che, se non ricordo male (sto passando ora alla versione 4.2 dopo anni in 1), non passa allo step successivo fino al completamento di quello precedente.
la mia idea sarebbe quindi questa:
- passo 1: genero un segnale e lo lancio
- passo 2: acquisisco la risposta dell'oggetto
- passo 3: "spengo" il segnale.
----------------------------------------
AUTORE: 3079
DATA :16/07/2010 - 16:30:56
----------------------------------------
ehm...
ho scoperto che mettendo il driver di "start" in teststand questo termina ma se nel driver stesso non chiudo il task il segnale continua a venire generato.
usando gli stessi driver il problema sopra descritto invece si presenta.
----------------------------------------
AUTORE: 1078
DATA :20/07/2010 - 08:34:14
----------------------------------------
Ciao Moretti,
[quote="Ricky":u5zxhznh]Il tutto è gestito da teststand in automatico che, se non ricordo male (sto passando ora alla versione 4.2 dopo anni in 1), non passa allo step successivo fino al completamento di quello precedente.[/quote:u5zxhznh]
In realtà esiste uno step di teststand che ti permette di far girare in parallelo i VI, lo step si chiama [b:u5zxhznh]Run VI Asynchronously[/b:u5zxhznh] e nella versione 4.2 lo trovi sotto la palette [b:u5zxhznh]Labview Utilities[/b:u5zxhznh]... Questo step lancia il VI selezionato che inizia a lavorare e TestStand non aspetta che termini la sua esecuzione per passare allo step successivo ma continua nell'esecuzione della sequenza.
Penso sia quello che fa al caso tuo.
Buon lavoro!
----------------------------------------
================================================================================
Derivata di una curva
================================================================================
AUTORE: 3129
DATA :08/07/2010 - 19:51:31
----------------------------------------
Devo fare la derivata di una curva y=f(x), che ho sotto forma di 2 array x e y.
Devo ottenere quindi 2 array (che poi graficherò tramite bundle->xy graph)...
So che esiste "Derivate x(t)" ma credo che serva solo per derivare dei segnali nel tempo..
Come fare?
----------------------------------------
AUTORE: 927
DATA :12/07/2010 - 11:05:12
----------------------------------------
Il classico (Y[size=75:10dnmbg9]2[/size:10dnmbg9] - Y[size=75:10dnmbg9]1[/size:10dnmbg9]) / (X[size=75:10dnmbg9]2[/size:10dnmbg9] - X[size=75:10dnmbg9]1[/size:10dnmbg9]) no?
Per derivare tutta la serie puoi usare un while, iterato sui due array, con due shift register per memorizzare Y[size=75:10dnmbg9]i-1[/size:10dnmbg9] e X[size=75:10dnmbg9]i-1[/size:10dnmbg9]
----------------------------------------
AUTORE: 3129
DATA :12/07/2010 - 22:22:18
----------------------------------------
si, infatti ho fatto col rapporto incrementale...
era solo per sapere se esisteva qualche blocco già fatto.
a quanto pare non c'è
----------------------------------------
================================================================================
seriali multiple
================================================================================
AUTORE: 2600
DATA :09/07/2010 - 10:12:02
----------------------------------------
Ciao Ragazzi,
ho provato a ricevere via seriale rs232 e funziona tutto ok.
è possibile con labview ricevere da più seriali rs232 (ovviamente su porte diverse) ?
se non è possibile farlo con una singola istanza,è possibile farlo con istanze multiple ?
grazie
Spectre
----------------------------------------
AUTORE: 1168
DATA :09/07/2010 - 11:26:28
----------------------------------------
Buongiorno!
Ogni seriale è identificata come diversa risorsa VISA. Per fare le cose semplici: COM1 COM2 COM3 ecc.
Io ne ho tranquillamente usate 8 in passato sullo stesso PC e nessun problema.... ovvio che devi capire un pochino cosa devi fare... prova a descrivere un po' meglio il tuo problema!
Ciao e buon weekend!
----------------------------------------
AUTORE: 645
DATA :12/07/2010 - 08:57:41
----------------------------------------
Potere si può... bisogna tenere sotto controllo le tempistiche e assicurarsi che la comunicazione con le singole porte sia correttamente impostata.
----------------------------------------
AUTORE: 838
DATA :13/07/2010 - 06:59:29
----------------------------------------
basta fare lo stesso codice per X seriali, se va con 1 va con tutte
metti in cicli while paralleli e ci passi solo la risorsa visa diversa
poi se hanno parametri diversi (come la velocità, parità, etc) allora ci passi pure quelli per ogni risorsa
----------------------------------------
================================================================================
Modulazione FSK
================================================================================
AUTORE: 3137
DATA :10/07/2010 - 17:23:07
----------------------------------------
Ciao ragazzi, sono un nuovo utente, vorrei una mano da voi, devo fare un VI di modulazione demodulazione FSk, la modulazione dovrebbe essere giusta visto che il symbol out che mi aspetto è giusto e visto anche il grafico dell'RMS che è giusto, ma la demodulazione è sbagliata. Io ho in ingresso un array di bit e utilizzo:
- MT generate system parameters (che genera i parametri per la modulazione)
- Modulate FSK (che genera un output complex waveform)
- Upconversion (che trasforma la complex waveform in passband waveform)
ora per la demodulazione ho pensato o di utilizzare un Downconversion e il Demodulate FSK o direttamente il Demodulate FSK, comunque il tutto non mi funziona, in uscita dovrei avere lo stesso array di bit che ho in ingresso ma niente non va. Se mi dite come si fa vi posto il programma. grazie a tutti.
----------------------------------------
AUTORE: 1078
DATA :13/07/2010 - 07:55:34
----------------------------------------
Ciao nox2001,
Prova a dare un'occhiata a quest'esempio....
[url:24ec3ua9]http://zone.ni.com/devzone/cda/epd/p/id/458[/url:24ec3ua9]
Buon lavoro!
----------------------------------------
AUTORE: 3137
DATA :20/09/2010 - 18:18:22
----------------------------------------
ciao a tutti riapro questo post dopo qualche mese perchè ancora non sono riuscito a risolvere il problema. Io utilizzo labview 8.5 e secondo me c'è qualche errore nel VI della demodulazione del toolkit, se colete vi posto il mio VI così potete vedere da voi qual'è il problema. Grazie a tutti
----------------------------------------
================================================================================
Comunicazione con activeX
================================================================================
AUTORE: 482
DATA :16/07/2010 - 11:33:46
----------------------------------------
..ma ciao!
sto cercando di comunicare con un activex per il quale ho degli esempi di comunicazione fatti con excel.
Riporto la snippet che contiene il mio vi e la macro di excel.
Secondo voi è tutto corretto quello che faccio o sto sbagliando qualcosa?
Perchè non ricevo nessun errore ma anche nessun dato....
P.S. il valore 10 e 5 sono invertiti nell'immagine perchè stavo facendo una prova e li avevo dimenticati cosi'...non cambia comunque niente...
----------------------------------------
AUTORE: 482
DATA :16/07/2010 - 12:48:41
----------------------------------------
oOh cacchio.....quel valore che è un variant e al quale io ho associato un array....
ho trovato l'help e....:
[code:3jwjsmty]Sintassi:
BOOL readVR32 (I32 index, I32 count, POBJLIST values)
index:
Indice primo registro
count:
Numero di registri consecutivi
values:
Puntatore ad array dei valori letti
Risultato:
Ritorna esito logico operazione[/code:3jwjsmty]
Come cacchio faccio io a colegargli un puntatore ad un array?
Dite che va bene anche cosi'?
----------------------------------------
AUTORE: 482
DATA :20/07/2010 - 07:37:04
----------------------------------------
UP
----------------------------------------
AUTORE: 1078
DATA :20/07/2010 - 08:54:06
----------------------------------------
Ciao Geppo...
Guardando il tuo codice, secondo il mio parere, stai passando alla funzione un unico dato VARIANT (p_code) contenente un array di integer, la funzione invece si aspetta un'array di VARIANT.
----------------------------------------
AUTORE: 1078
DATA :20/07/2010 - 09:13:37
----------------------------------------
Posto anche l'immagine del codice....
[attachment=0:2jtn3rni]p_Values.gif[/attachment:2jtn3rni]
----------------------------------------
AUTORE: 482
DATA :20/07/2010 - 09:35:00
----------------------------------------
si avevo già provato ma non funziona.
Volevo pero' capire la questione del tipo di dati puntatore.
QUel dato di tipo variant è un puntatore ad un array di dati (non so ancora che tipo di dati).
----------------------------------------
AUTORE: 1078
DATA :22/07/2010 - 07:57:51
----------------------------------------
In C i puntatori sono degli indirizzi di memoria che fanno riferimento alla cella dove è contenuto il dato. Potrebbero essere compatibili con i dati Reference di Labview. Hai provato a passare alla funzione un riferimento ad un controllo array di variant di labview?
----------------------------------------
AUTORE: 482
DATA :22/07/2010 - 08:05:32
----------------------------------------
Siccome qui si parla di un puntatore ad una lista di numeri, quindi dovrei provare a passare una reference ad un array di numerici trasformata in variant?
----------------------------------------
AUTORE: 43
DATA :22/07/2010 - 08:58:41
----------------------------------------
[quote="gepponline":3p7u711u]Siccome qui si parla di un puntatore ad una lista di numeri, quindi dovrei provare a passare una reference ad un array di numerici trasformata in variant?[/quote:3p7u711u]
POBJLIST, suppongo, sia un puntatore ad una lista di oggetti (P OBJ LIST)quindi si tratta di una lista e non proprio di un array....e poi si tratta di oggetti e non di valori numerici semplici.
La prima cosa da farsi è recuperare la dichiarazione del tipo POBJLIST, da trovare probabilmente nel documento dal quale è stata estratta la dichiarazione del prototipo
BOOL readVR32 (I32 index, I32 count, POBJLIST values)
se non si trova in un "reference manual", sicuramente si troverà in un file di include .h o similari.
Il puntatore, poi, è un semplice intero a 32bit quindi, suppongo, nel variant ci va messo un intero a 32bit... il cui valore punti ad un'area di memoria allocata...
la vedo mooolto dura
bye
----------------------------------------
AUTORE: 482
DATA :22/07/2010 - 09:55:36
----------------------------------------
eh..anche io pensavo ad un intero...solo che s eprendo un intero e lo trasformo in variant passandolo in ingresso alla funzione, mi restituisce errore dicendo che è un tipo di dato che non va bene, s einvece uso un array di i32 oppure una volta trasformato, trasformo il variant in un array di variant, me lo accetta.
----------------------------------------
AUTORE: 482
DATA :22/07/2010 - 10:48:11
----------------------------------------
Ho trovato la definizione di quel dato ed è cosi':
Simbolico | Tipo C++ | Tipo VB.NET | Tipo C# | Descrizione
------------|---------------------------|--------------------------|-----------------------|----------------------------
OBJLIST |SAVEARRAY(VARIANT) | System.Array | System.Array | Array di dati generici
POBJLIST | SAVEARRAY(VARIANT)*| ByRef System.Array | ref System.Array | Puntatore ad array di dati generici
----------------------------------------
AUTORE: 1078
DATA :23/07/2010 - 09:11:01
----------------------------------------
Secondo me dovresti creare un controllo Array di variant, crearne la reference e passarla alla funzione! Secondo me la reference è molto simile ad un puntatore!
----------------------------------------
AUTORE: 482
DATA :23/07/2010 - 09:21:52
----------------------------------------
no, come puoi vedere nell'esempio, la funzioen vuole un variant in ingresso
----------------------------------------
AUTORE: 1078
DATA :23/07/2010 - 09:32:17
----------------------------------------
Vuole un variant perchè labview non ha un tipo di dato puntatore e quindi lo rende generico con un variant...
----------------------------------------
AUTORE: 482
DATA :23/07/2010 - 09:34:41
----------------------------------------
Si si ok, ma se collego un refernce mi da errore la funzione, idem se collego un variant.
Se collego un array di variant o un array qualsiasi convertito in variant la funzione va a buon fine.
(fermo restando che non mi legge nessun dato, ma questo magari è un problema della funzione)
----------------------------------------
AUTORE: 1078
DATA :23/07/2010 - 09:51:30
----------------------------------------
A questo punto potrebbe anche essere un problema della funzione....
Hai provata ad utilizzarla con un linguaggio di programmazione diverso da Labview? Giusto per capire come si comporta.
Se dovesse funzionare potresti pensare di creare un'oggetto .NET che si interfacci tra la funzione che cerchi di usare e labview, l'oggetto in questione dovrebbe solo interrogare la funzione con i dati passati da labview e restituirti i dati in un formato comprensibile da Labview tipo un'array di interi.
----------------------------------------
AUTORE: 482
DATA :23/07/2010 - 09:57:45
----------------------------------------
Sono in attes adi una risposta dall'assistenza che ha creato quella funzione, perchè anche la macro fatta da loro in un esempio di excel non da nessun risultato, quindi non saprei dire se faccio qualcosa di sbagliato o no.
Pero' sta cosa del tipo di dato "puntatore" per labview è comunque una questione che mi resta un po' oscura...
----------------------------------------
AUTORE: 43
DATA :23/07/2010 - 10:57:36
----------------------------------------
Hai provato a "castare" un array di variant a variant?
[attachment=0:pce20rdw]VariantCast.vi[/attachment:pce20rdw]
bye
----------------------------------------
AUTORE: 482
DATA :23/07/2010 - 11:05:47
----------------------------------------
Anche cosi' non mi da errore ma non ricevo essuna uscita.
QUindi resto in attesa di risposta dall'assistenza, poi vi faccio sapere. Perchè finchè non ricevo nessuna risposta, non potro' mai sapere se riesco a interpretare i dati
----------------------------------------
================================================================================
Memorizzare la stringa da seriale
================================================================================
AUTORE: 3146
DATA :16/07/2010 - 17:52:02
----------------------------------------
Acquisisco una stringa da una porta seriale su comando e vorrei che rimanesse visualizzata fino alla prossima stringa acquisita (sempre su mio comando). Come è possibile fare l'hold della stringa ?
Grazie ...
----------------------------------------
AUTORE: 1165
DATA :16/07/2010 - 21:18:51
----------------------------------------
La struttura fondamentale di quasi tutti i programmi fatti in LAbview sono il ciclo WHILE, ovvero il ciclo FOR, che iterano il codice contenuto al loro interno, ciclo dopo ciclo. Entrambi questi cicli possono trasportare nel tempo le informazioni prodotte al loro interno (da un ciclo al successivo) con le strutture SHIFT REGISTER, ovvero FEEDBACK NODE, la prima delle quali è ottenibile facendo click col tasto destro del mouse su uno dei due lati verticali (destro o sinistro) dei suddetti cicli. Guardati bene le istruzioni di help per queste funzioni, che mi sembra siano esattamente quello che a te serve. In particolare puoi usare uno shift register per mantenere immutato un dato per quante iterazioni vuoi, finchè un apposito comando non ne modifichi successivamente il valore. Credo che dovresti trovare molti VI fra gli esempi già pronti. Ciao.
----------------------------------------
AUTORE: 645
DATA :19/07/2010 - 11:01:55
----------------------------------------
Puoi leggere la seriale e contare la lunghezza del dato ("Byte at Serial Port" tra i Property Node).
Se la lunghezza è maggiore di zero (o sufficiente per essere sicuri che sia il nuovo dato) passi il dato all'indicatore stringa, altrimenti no.
----------------------------------------
AUTORE: 3146
DATA :22/07/2010 - 15:41:36
----------------------------------------
Grazie ragazzi !
Per aggior chiarezza allego il mio tentativo non riuscito.
Non posso inserire un ritardo sullo stato 1 altrimenti perdo dati !
Ciao
----------------------------------------
AUTORE: 1165
DATA :22/07/2010 - 21:55:55
----------------------------------------
Dunque .. vediamo da che parte iniziare .. di cose da dirti ce ne sarebbero una valanga .. vediamo di darti almeno lo stretto necessario .. ti premetto che io ho un intrinseco problema nel capire esattamente le VERE motivazioni di tante domande poste qui nel forum .. e quindi nel calibrare una risposta appropriata .. molti utenti attivi qui hanno MOLTO MOLTO più intuito di me nel capire e quindi rispondere .. ma questa volta temo che avevo intuito bene nel pensare che i tuoi problemi risiedessero più nelle tecniche di base che nelle astuzie degli algoritmi .. quello che ti ha suggerito MagicBotolo è un trucchetto molto molto astuto ed elegante per raffinare quanto ti avevo detto io in precedenza .. ma a te temo manchino le basi delle strutture WHILE e CASE e del comportamento dello SHIFT REGISTER .. per questo ti suggerivo di approfondire questi aspetti prima di andare avanti ..
ulteriore premessa .. non ho guardato in dettaglio il tuo VI ma mi sono fermato al più evidente degli errori .. così come hai congeniato le cose tu il tuo VI non mi sembra utilizzabile .. al primo giro il CASE esegue il caso "0" perchè tale valore iniziale viene letto all'esterno del ciclo WHILE la prima volta che esso esegue, col che alla prima iterazione del WHILE il CASE esegue il caso "0" .. questo caso "0" cambia al suo interno il valore del selettore del CASE al valore "1" che tramite lo SHIFT REGISTER viene ripresentato alla seconda iterazione del WHILE .. e così alla seconda iterazione del WHILE il CASE esegue il caso "1" che comporta il passaggio inalterato del valore del selettore a tutte le iterazioni successive .. col che dalla seconda iterazione del WHILE in poi il CASE eseguirà sempre e solo il caso "1" .. rendendo il tuo VI in ogni caso non rispondente ai tuoi scopi (che non ho approfondito e quindi non conosco bene)
il mio consiglio è che tu perda un po' di tempo con le strutture fondamentali .. senza le quali non si costruisce niente .. resto comunque a tua disposizione per ulteriori chiarimenti se vorrai .. nella speranza di aver centrato le tue reali esigenze e di non aver scazzato troppo a mia volta .. ciao .. enr.
----------------------------------------
AUTORE: 1078
DATA :23/07/2010 - 08:29:06
----------------------------------------
[quote="PPiero":ml0o79x9]Acquisisco una stringa da una porta seriale su comando e vorrei che rimanesse visualizzata fino alla prossima stringa acquisita (sempre su mio comando). [/quote:ml0o79x9]
Cosa intendi per comando?
[quote="enr":ml0o79x9]Dunque .. vediamo da che parte iniziare .. di cose da dirti ce ne sarebbero una valanga .. vediamo di darti almeno lo stretto necessario .. ti premetto che io ho un intrinseco problema nel capire esattamente le VERE motivazioni di tante domande poste qui nel forum .. e quindi nel calibrare una risposta appropriata .. molti utenti attivi qui hanno MOLTO MOLTO più intuito di me nel capire e quindi rispondere .. ma questa volta temo che avevo intuito bene nel pensare che i tuoi problemi risiedessero più nelle tecniche di base che nelle astuzie degli algoritmi .. quello che ti ha suggerito MagicBotolo è un trucchetto molto molto astuto ed elegante per raffinare quanto ti avevo detto io in precedenza .. ma a te temo manchino le basi delle strutture WHILE e CASE e del comportamento dello SHIFT REGISTER .. per questo ti suggerivo di approfondire questi aspetti prima di andare avanti ..
ulteriore premessa .. non ho guardato in dettaglio il tuo VI ma mi sono fermato al più evidente degli errori .. così come hai congeniato le cose tu il tuo VI non mi sembra utilizzabile .. al primo giro il CASE esegue il caso "0" perchè tale valore iniziale viene letto all'esterno del ciclo WHILE la prima volta che esso esegue, col che alla prima iterazione del WHILE il CASE esegue il caso "0" .. questo caso "0" cambia al suo interno il valore del selettore del CASE al valore "1" che tramite lo SHIFT REGISTER viene ripresentato alla seconda iterazione del WHILE .. e così alla seconda iterazione del WHILE il CASE esegue il caso "1" che comporta il passaggio inalterato del valore del selettore a tutte le iterazioni successive .. col che dalla seconda iterazione del WHILE in poi il CASE eseguirà sempre e solo il caso "1" .. rendendo il tuo VI in ogni caso non rispondente ai tuoi scopi (che non ho approfondito e quindi non conosco bene)
il mio consiglio è che tu perda un po' di tempo con le strutture fondamentali .. senza le quali non si costruisce niente .. resto comunque a tua disposizione per ulteriori chiarimenti se vorrai .. nella speranza di aver centrato le tue reali esigenze e di non aver scazzato troppo a mia volta .. ciao .. enr.[/quote:ml0o79x9]
Ma quante parole!!!
Siccome io sono una persona pratica, per cercare di darti un'aiuto ti invio un VI con la mia interpretazione del problema, spero ti sia d'aiuto.
Concocrdo comunque con enr, dovresti ripassare le strutture fondamentali di programmazione in LV!
Nel mio codice ho dovuto inserire anche un loop di scrittura, io leggo e scrivo dalla stessa seriale utilizzando un loop Hardware sui pin 2-3 della porta COM1.
La parte di lettura legge i dati se presenti sulla porta e solo quando l'utente preme il bottone Read. Continua a leggere dati fino a che l'utente non disabilita il comando Read e se ci sono dati li appende alla stringa Buffer!
----------------------------------------
AUTORE: 1078
DATA :23/07/2010 - 08:30:07
----------------------------------------
Allego anche un'immagine della sola parte Read....
[attachment=0:3a52c5n8]Reader_Seriale.png[/attachment:3a52c5n8]
----------------------------------------
================================================================================
Disegnare un rettangolo su un intensity graph
================================================================================
AUTORE: 1670
DATA :22/07/2010 - 13:52:05
----------------------------------------
Ciao a tutti,
ho un problema di tipo grafico, dovrei disegnare in modo automatico, sopra un intensity graph, un rettangolo di dimensioni date (tipo regione di interesse) quindi dovrei poterlo spostare con il mouse e posizionarlo ricavandone poi le coordinate di posizione rispetto
alll'intensity graph. Ho visto che ci sono oggetti con cui si può disegnare rettangoli ma solo all'interno di picture e non di graph. Qualcuno di voi che ha dimestichezza con la grafica sa come si può implementare questa funzione.
Grazie Mille a tutti e buona serata
----------------------------------------
AUTORE: 43
DATA :22/07/2010 - 14:13:17
----------------------------------------
Apponi sopra all'intesity graph un indicatore di tipo picture di cui devi rendere trasparente lo sfondo ed il bordo.
Dentro al picture disegna il rettangolo settando color, spessore,tipo di tratto e se il rettangolo deve essere pieno o vuoto.
bye
----------------------------------------
AUTORE: 1670
DATA :23/07/2010 - 09:12:25
----------------------------------------
Ciao a tutti,
grazie mille paracarro, questa mattina provo ad implementare questa cosa. Devo dire che non ci sarei mai arrivato, per certi aspetti LV non è così intuitivo, in modo particolare per me che non lo uso tutti i giorni e comunque in questi casi il contributo di ILVG è senza dubbio necessario.
Buona giornata a tutti
----------------------------------------
================================================================================
LV 8.6 e Linux
================================================================================
AUTORE: 2435
DATA :22/07/2010 - 16:23:37
----------------------------------------
Ciao a tutti...
volevo chiedervi una cosa...
Io ho LV8.6 installato su windows...posso crearmi un pacchetto e exe per linux??
Grazie
----------------------------------------
AUTORE: 482
DATA :23/07/2010 - 07:51:31
----------------------------------------
no.
I vi sono portabili (salvo per quanto riguarda alcune librerie tipo Vision ad esempio) ma per creare l'eseguibile per linux devi avere LabVIEW per Linux.
...l'alternativa è WIne ma in base al tipo di software puoi avere problemi di compatibilità.
Purtroppo National non sembra intenzionata ad investire sul fronte Linux...
----------------------------------------
================================================================================
Ethernet con PLC (ad esempio s7 300)
================================================================================
AUTORE: 2435
DATA :22/07/2010 - 16:25:27
----------------------------------------
Ciao a tutti...
sapete dirmi se ci sono delle librerie open source o gratuite che mi permettono di interfacciarmi tramite porta ethernet a un PLC a es s7 300?
Grazie
----------------------------------------
AUTORE: 482
DATA :23/07/2010 - 07:49:21
----------------------------------------
Forse questo addon fa al caso tuo:
http://decibel.ni.com/content/docs/DOC-4065
----------------------------------------
AUTORE: 278
DATA :23/07/2010 - 08:10:37
----------------------------------------
Ciao,
che protocollo intendi utilizzare???
Attualmente sto realizzando un progetto interfacciandomi con plc B&R tramite il protocollo modbus.. forse fa al caso tuo... [url=http://sine.ni.com/nips/cds/view/p/lang/it/nid/201711:2epgsj7a]MODBUS Library[/url:2epgsj7a]
Ciao
----------------------------------------
AUTORE: 2435
DATA :23/07/2010 - 10:34:06
----------------------------------------
Ciao,
intanto grazie a tutti...
Per il modbus ci avevo già pensato,però risulterebbe comodo ma un po lento...mi sono già fatto il driver per l'MPI e risulta sicuramente più veloce.
Per qunto riguarda il link di "gepponline" sembra molto interessante ma è compatibile anche per siemens s7 300?
----------------------------------------
AUTORE: 482
DATA :23/07/2010 - 14:21:30
----------------------------------------
Io mi sono già interfacciato con un siemens ma non ti so dire il modello...provalo e lo vedi subito, tanto è abbastanza semplice
----------------------------------------
AUTORE: 2435
DATA :23/07/2010 - 14:41:08
----------------------------------------
Ok,grazie
(Appena ho la possibilità faccio una prova)
un'altra cosa per quanto riguarda le librerie Modbus....
All'interno ci sono degli esempi per la comunicazione in Ethernet:
1) MB Ethernet Example Master
2) MB Ethernet Example Slave
E mi succede la seguente cosa
Se io li richiamo dalla function pallette e li avvio funzionano correttamente.
Mentre se creo una copia dei seguenti Vi e li posiziono su un percorso diverso poi non riesco a farli funzionare....
Non riesco proprio a capire il perchè...
Sapete darmi qualche suggerimento
Grazie
----------------------------------------
AUTORE: 278
DATA :02/08/2010 - 14:33:53
----------------------------------------
Bha, non saprei.... molto strana questa cosa....
nello specifico, io utilizzo solo 2 funzioni :
MB Ethernet Master Query Write Single Register (poly).vi
e
MB Ethernet Master Query Read Holding Registers (poly).vi
Ovviamente, prima di utilizzare i blocchi in questione, devi aprire una connessione TCP con il PLC e passagli l'informazione del Connection ID...
----------------------------------------
================================================================================
XY Graph e perversioni
================================================================================
AUTORE: 3129
DATA :22/07/2010 - 19:18:52
----------------------------------------
acquisisco dati da uno strumento, che inserisco in 2 array X e Y. (ciò avviene per ogni ciclo di acquisizione).
ad ogni ciclo l'array X ha elementi dello stesso valore (per esempio tutti 3), mentre l'array Y può assumere valori diversi.
i due array sono bundleati in un XY graph...
il mio problema è che a ogni ciclo ho sul grafico delle rette verticali (ovvero il furbo di Labview congiunge i dati di ogni singolo ciclo ed essendo X lo stesso per ogni punto di un ciclo, ciò si traduce in una retta verticale)...
questo mi impedisce di vedere delle curve...
1) ci avete capito qualcosa?
2) come fare?
----------------------------------------
AUTORE: 3129
DATA :22/07/2010 - 19:40:48
----------------------------------------
XY Grah properties>Plots
non è una risposta valida.
----------------------------------------
AUTORE: 482
DATA :23/07/2010 - 07:44:43
----------------------------------------
Detto cosi' direi...ma se la X è sempre uguale, perchè usi un XY graph e non un graph semplice o visto che è un grafico progressivo addirittura un chart?
Tu dici "questo mi impedisce di vedere delle curve"....ma sei tu che te lo impedisci dicendogli che la X è sempre 3.
QUindi la mia risposta è:
Cambia tipo di grafico.
----------------------------------------
AUTORE: 3129
DATA :23/07/2010 - 08:13:07
----------------------------------------
la X è uguale in un ciclo, poii cambia... 3...4....5....6..
----------------------------------------
AUTORE: 3129
DATA :23/07/2010 - 08:13:50
----------------------------------------
praticamente ad ogni ciclo ho un pezzo di una famiglia di curve..
----------------------------------------
AUTORE: 1078
DATA :23/07/2010 - 09:03:25
----------------------------------------
Nell'esempio ho simulato l'acquisizione e la rappresentazione di un'insieme di curve i cui dati vengono recuperati a pezzi... nel mio esmpio le curve sono due, replicando i "canali Y" puoi inserire anche molte più curve.
Spero ti sia di aiuto!
----------------------------------------
AUTORE: 3129
DATA :23/07/2010 - 09:18:18
----------------------------------------
ehm...ho labview 7 e non me lo apre...
potresti inviare un immagine?
----------------------------------------
AUTORE: 1078
DATA :23/07/2010 - 09:35:58
----------------------------------------
Sure.....
----------------------------------------
AUTORE: 3129
DATA :23/07/2010 - 10:23:00
----------------------------------------
no...ad ogni x devo visualizzare i grafici
non un passo alla volta
----------------------------------------
AUTORE: 1078
DATA :23/07/2010 - 13:49:10
----------------------------------------
Allora dovrebbe andare bene così...
[attachment=0:12dg35bt]XY_Graph_2.gif[/attachment:12dg35bt]
io ho temporizzato il ciclo con di 200ms altrimenti è troppo veloce la sua esecuzione e non ti da il tempo di capite che sto acquisendo un punto per volta!
Spero vada bene, altrimenti ho capito male quello che stai cercando di fare e sarebbe il caso ti spiegassi meglio!
----------------------------------------
================================================================================
Numero di Esecuzioni
================================================================================
AUTORE: 3129
DATA :26/07/2010 - 19:14:58
----------------------------------------
Mi servirebbe di avere una variabile contatrice, il cui valore è pari a quante volte viene eseguito un CASE (controllato da un pulsante booleano)...in pratica quante volte viene premuto il pulsante...
Qualcuno può darmi una mano?
----------------------------------------
AUTORE: 3129
DATA :26/07/2010 - 20:17:22
----------------------------------------
ho appena scoperto event structure...eh si...mi sa che lo userò...
----------------------------------------
AUTORE: 645
DATA :27/07/2010 - 09:18:39
----------------------------------------
Yes... penso che l'Event Structure faccia al caso tuo.
Ogni volta che entri in un CASE puoi aggiornare il valore di una variabile (o aggiornare uno Shift Register).
----------------------------------------
================================================================================
Un consiglio per lo studio di una funzione d'onda?
================================================================================
AUTORE: 822
DATA :29/07/2010 - 11:20:27
----------------------------------------
Ciao a tutti,
io acquisisco per mezzo di una scheda oscilloscopio National una funzione d'onda come quella che vedete in figura, ne devo calcolare il periodo (che è di circa 8,2 us). Il periodo lo calcolo con il vi Pulse measurements.vi
Ora a causa di quei disturbi che vedete in figura (ripple e oscillazioni) non sempre il periodo viene calcolato in modo corretto. Stò cercando di pulire il segnale acquisito in modo hardware, ma vorrei farlo anche via software. Sapendo che il segnale è un'onda quadra ho provato introducendo un filtro software passa basso in modo da eliminare la alte frequenze e sperando di ottenere in uscita un'onda quadra, ma la soluzione non è soddisfacente.
Qualcuno mi dà un consiglio? Vi allego anche un vi contenente l'onda in questione (fatto in LV8.5)
Grazie
----------------------------------------
AUTORE: 660
DATA :29/07/2010 - 13:01:42
----------------------------------------
ma la forma d'onda fondamentale è sempre un'onda quadra o un'onda "di forma nota"?
Perchè in tal caso potresti utilizzare la forma fondamentale per pesare i valori, in tal modo filtreresti in parte le oscillazioni.
Altrimenti perchè non implementare una FFT?
...solo un po' di idee...
ciao
Max
----------------------------------------
AUTORE: 822
DATA :29/07/2010 - 13:05:45
----------------------------------------
le idee sono le benvenute
l'onda è sempre un'onda quadra.. mi spieghi meglio i due metodi da te suggeriti?
grazie
----------------------------------------
AUTORE: 660
DATA :29/07/2010 - 21:32:11
----------------------------------------
beh, la prima idea, a pensarci bene, è da scartare proprio perchè presuppone che conoscessi alcuni dei dati che tu invece vuoi cercare.
Per la seconda invece pensavo che potresti tramite le funzioni di LV che calcolano la FFT ottenere il tuo segnale in spettro di frequenze anzichè in funzione del tempo, in questo modo potresti avere direttamente la frequenza della portante e di conseguenza il periodo.
Puoi provarci, non so dirti però con che precisione riuscirai ad avere la risposta.
A questo punto se la precisione non è sufficiente potresti usare questa frequenza per generare un'onda quadra da utilizzare come "peso" (so che c'è una funzione che fa questo in LV ma non ricordo dove) per i valori della tua onda in modo da costringerla a spalmarvicisi sopra. In questo modo otterresti un'onda molto più pulita.
Puoi provarci...e vedere cosa succede...
ciao
Max
----------------------------------------
AUTORE: 660
DATA :29/07/2010 - 21:53:12
----------------------------------------
guarda un po' se questo esempio potrebbe fare al caso tuo...
ciao
Max[attachment=0:1aa1jmhu]onda.vi[/attachment:1aa1jmhu]
----------------------------------------
AUTORE: 660
DATA :29/07/2010 - 21:55:31
----------------------------------------
PS. Non so se si nota, ma mentre provavo a risolvere con quanto ti ho detto ho trovato questa soluzione che con il tuo esempio sembra funzionare ed è decisamente di più semplice implementazione
Max
----------------------------------------
AUTORE: 822
DATA :30/07/2010 - 07:55:40
----------------------------------------
puoi salvarmi l'esempio in LV 8.5? non riesco ad aprirlo..
intanto provo come mi hai consigliato tu
grazie
----------------------------------------
AUTORE: 660
DATA :30/07/2010 - 08:27:08
----------------------------------------
strano... lo avevo salvato nella versione 8.5...
cerco di riprovarci...
Max[attachment=0:my6vebry]onda.vi[/attachment:my6vebry]
----------------------------------------
AUTORE: 822
DATA :30/07/2010 - 10:17:58
----------------------------------------
Scusa la domanda che forse è stupida ma non capisco come opera l'express vi che mi hai spedito, in che cosa differisce dal "pulse measurements.vi"?
Forse al suo interno già si preoccupa di trattare il segnale in ingresso con delle trasformate di Fourier, ricavandone poi la frequenza principale?
Grazie per la pazienza
----------------------------------------
AUTORE: 660
DATA :30/07/2010 - 11:29:03
----------------------------------------
scusa ma mentre facevo delle prove ho un po' perso di vista la richiesta di base che avevi fatto,
il VI che ti ho mandato non so come funzionamento in cosa differisca da quello che usavi tu, solo che la sua risposta alla curva che avevi inviato mi sembrava abbastanza soddisfacente.
Cercherò di approfondire meglio...
Max
----------------------------------------
AUTORE: 43
DATA :02/08/2010 - 15:34:22
----------------------------------------
La mia soluzione artigianale, "fatta in casa" come il titolo del mio post, si basa sul fatto che lo scopo è quello di ricostruire un'onda quadra che è sicuramente "disturbata" ma il cui rumore si affievolisce notevolmente in prossimità del cambio di stato (fronte di salita o discesa)
Considerando che:
- durata del periodo: circa 8.2 usec. (121,95 KHz, circa 122 KHz)
- durata periodo acquisito: circa 500 samples
---> acq segnale a circa 60 MHz
Considerando il valore assoluto della derivata in ogni punto è semplice da calcolare ( abs ( array[i+1] - array[i] ) )si cerca il primo punto di variazione oltre una certa soglia dopo che il segnale è rimasto per un certo numero di volte sotto la stessa soglia.
Sembra macchinoso ma non lo è...
il mio filtro prevede quindi che il segnali non abbia variazioni consecutive in assoluto di 0,1 Volt per una durata di ALMENO 50 acquisizioni (minimo 0,83 usec. circa)
Tra l'altro considerando i valori nella "finestra di accettabilità" e considerandone il valor medio, posso anche calcolare approssimativamente un valore di tensione per ognuno dei 2 livelli.
Dall'esempio risulta che il segnale sia ofsettato di circa 0,2 Volt.
Infatti il valore basso (0V) è costituito da una lettura media di circa 0,2Volt, mentre quello alto (5V) è in realtà circa 5,2Volt
[attachment=0:u159qsv4]onda (1).vi[/attachment:u159qsv4]
Lascia perdere gli esempi che ho messo con FFT e FFT inversa...
Considera invece l'array dei "cambi di stato" e guarda i calcoli per la lunghezza dei periodi, sembrano abbastanza stabili (504)
La cosa che appare strana è che il duty cycle non è proprio del 50%.
Non so se ciò è dovuto ai limiti dell'algoritmo...
bye
----------------------------------------
AUTORE: 822
DATA :02/08/2010 - 16:27:57
----------------------------------------
paracarro per favore me lo puoi salvare in LV8.5, chè ci do una occhiata?
grazie
----------------------------------------
AUTORE: 43
DATA :02/08/2010 - 17:07:08
----------------------------------------
[quote="giuseppe.l74":2nv96f42]paracarro per favore me lo puoi salvare in LV8.5, chè ci do una occhiata?grazie[/quote:2nv96f42][attachment=0:2nv96f42]onda (1).vi[/attachment:2nv96f42]bye
----------------------------------------
AUTORE: 822
DATA :03/08/2010 - 13:27:18
----------------------------------------
grazie paracarro
con l'onda che ho postato il tuo vi sembra funzionare a meraviglia
ciao
----------------------------------------
AUTORE: 1165
DATA :03/08/2010 - 18:29:34
----------------------------------------
posso permettermi di lanciare un'idea anche io? .. nella scia di quanto dice paracarro e visto che si tratta in prima istanza di ripulire un'onda quadra (segnale digitale) dal rumore superimposto, non sarebbe utilizzabile il trigger di Schmidt? .. in genere i segnali digitali hardware si ripuliscono in questa maniera .. ma io avrei postato nella sezione "Download/Upload" di questo forum una versione software di questo algoritmo .. che mi sembra potrebbe essere adatto a ripulire l'onda quadra dal rumore, una volta fissate le due soglie appropriate .. dopodichè si può passare alla sua caratterizzazione frequenziale
viewtopic.php?f=32&t=1517
----------------------------------------
AUTORE: 822
DATA :05/08/2010 - 17:35:20
----------------------------------------
grazie enr ma non credo che il tuo esempio faccia al caso mio, infatti funziona per quelle funzioni in cui il cambio di stato alto/basso sia comunque ben definito, ma nel mio caso il disturbo è tale da avere fronti di discesa o di salita anche dove non ci dovrebbero essere, dovrei prima comunque filtrare l'onda acquisita con un passa basso e poi magari squadrarla con il tuo trigger..
ciao
----------------------------------------
AUTORE: 1165
DATA :05/08/2010 - 18:25:55
----------------------------------------
scusa giuseppe, ma permettimi di dissentire su alcuni punti .. chiaro che un filtro ti riduce il rumore, ma contemporaneamente ti altera (anche se in maniera minima) le posizioni temporali dei fronti, oltre a darti un carico computazionale .. non so quanto a te questo importi, ma non vedo la necessità di filtri .. come ti ha detto anche paracarro le informazioni che a te interessano stanno sulle differenze .. differenze che possono essere evidenziate con derivate (sottrazioni) o con comparazioni di soglie (e questo funzionalmente equivale ad una soglia sulla derivata) .. se poi il rumore diventa eccessivo e rischia di "bucare" anche le soglie basta mettere un ritardo sulla commutazione (aggiungere al mio algoritmo un ritardo di commutazione, che so', imporre che non commuti se non forano la soglia almeno 4 campioni consecutivi), il che funzionalmente equivale ad un passa-basso
tutto questo te lo sparo là senza verifica .. ma mi sembra che il discorso ci stia .. comunque se vuoi mandarmi un file con la tua forma d'onda ci provo anche io a vedere cosa vien fuori .. ciao .. enr
P.S. anche la strada che ipotizzo qui introduce un ritardo sui fronti di commutazione, ma costante e prevedibile .. riducendosi per te ad un ritardo di fase di cui potresti anche tener conto
----------------------------------------
AUTORE: 822
DATA :05/08/2010 - 19:14:53
----------------------------------------
dissenti pure, ci mancherebbe
la forma d'onda la trovi nel primo post che ho pubblicato in questa discussione.
Fammi sapere cosa ottieni
grazie e ciao
----------------------------------------
AUTORE: 1165
DATA :05/08/2010 - 20:18:48
----------------------------------------
eh eh eh grazie per la gentile concessione .. ma così non so se sono riuscito a far passare il messagio .. che era la cosa a cui tenevo di più .. forse ho fatto come quel mio professore che tanti anni fa iniziò un corso dicendo "mi spezzo ma non mi spiego" e poi mantenne la promessa!! .. io mi ci applicherò con MOLTA calma .. ma a te ti vien utile quello che ti ho scritto sopra?
----------------------------------------
AUTORE: 1165
DATA :05/08/2010 - 23:08:43
----------------------------------------
ehmm .. nella vita non si può avere tutto .. ehmm .. o belli o intelligenti .. ehmm .. io sono bello (ehmm!!) .. sull'intelligenza lasciamo perdere .. COME si fa per attaccare un file a un post? .. come posso fare un attachment qui? .. ovviamente l'ho già fatto in passato ma non ricordo assolutamente come ho fatto!! .. confesso che ho anche guardato le istruzioni ed ho trovato tutto meno che come fare un attachment .. ok .. perdonatemi .. mando un link di wikisend
per giuseppe: non so se ho effettivamente capito quello che ti serve .. se non ho capito scusami .. se ho capito bene allora il vi che ti allego dovrebbe risolvere il tuo problema .. mi fai sapere?? .. ciao .. enr
[URL=http://wikisend.com/download/489350/Onda&SchmidtTrigger.vi]Onda&SchmidtTrigger.vi[/URL]
----------------------------------------
AUTORE: 822
DATA :06/08/2010 - 08:02:12
----------------------------------------
bene enr, grazie enr, ho imparato qualcosa di nuovo
per allegare un file, sotto i pulsanti "salva", "anteprima", "invia" alla loro sinistra trovi (in piccolo) "opzioni" e "invia allegato"
spero di averti insegnato qualcosa anche io..
ciao
----------------------------------------
AUTORE: 1165
DATA :06/08/2010 - 08:40:12
----------------------------------------
grazie 100.000 .. certo che ho imparato qualcosa da te!! .. e da moltissimi altri in questo splendido forum ..
.. ma io ti avevo scritto sopra il tutto .. mi rimane l'amarezza che le parole vengano oramai ignorate (amarezza tutta mia, generazionale, non hai colpa solo tu) .. non si sa più leggere (deriva di massa anche questa, generazionale) .. forse occorrerà prendere atto che la lingua scritta sta morendo e prepararsi ad una lingua grafica fatta per immagini ed ideogrammi (labview docet) .. comunque per ora il mio consiglio (se posso permettermi) è di prestare attenzione alla parola scritta ancora per un po' .. almeno finchè non sia stata sostituita da un sistema semeiotico codificato ed universalmente accettato (per la cronaca ci sto lavorando sopra un po' anche io .. chissà mai se ne verrà fuori qualcosa di buono) .. comunque è stato un piacere poterti essere utile .. a presto .. ciao .. enrico
----------------------------------------
AUTORE: 822
DATA :06/08/2010 - 09:27:11
----------------------------------------
[quote="enr":340o6wsa].. ma io ti avevo scritto sopra il tutto .. mi rimane l'amarezza che le parole vengano oramai ignorate (amarezza tutta mia, generazionale, non hai colpa solo tu) .. non si sa più leggere (deriva di massa anche questa, generazionale) .. forse occorrerà prendere atto che la lingua scritta sta morendo e prepararsi ad una lingua grafica fatta per immagini ed ideogrammi (labview docet) .. comunque per ora il mio consiglio (se posso permettermi) è di prestare attenzione alla parola scritta ancora per un po' .. almeno finchè non sia stata sostituita da un sistema semeiotico codificato ed universalmente accettato.. [/quote:340o6wsa]
nonostante io sia un amante della lingua scritta sinceramente non ho ben capito il tuo ultimo post..
il tuo aiuto e i tuoi consigli ovviamente sono stati un grosso aiuto per questo problema e per quelli futuri, questo forum è una grande ricchezza
a presto
----------------------------------------
AUTORE: 43
DATA :06/08/2010 - 12:13:46
----------------------------------------
Ciao, ma enr, che ti succede ?
Vabbè, ogni occasione è buona, per filosofeggiare qua e là, però... te ne sei uscito con un discorso sui massimi sistemi...
[quote="enr":1ypl7ltu].. mi rimane l'amarezza che le parole vengano oramai ignorate (amarezza tutta mia, generazionale, non hai colpa solo tu).. [/quote:1ypl7ltu]
Non è affatto vero. Si potrebbe dire che di parole e di scritti ce ne sono TROPPI, per cui tutti dobbiamo FILTRARE il bombardamento di infomazioni che siamo costretti a subire...
[quote="enr":1ypl7ltu]... non si sa più leggere (deriva di massa anche questa, generazionale) .. [/quote:1ypl7ltu]
Probabilemte è una deriva generazionale... Ma se questa è l'epoca dei messaggini SMS, che per quanto compatti e illeggibili come codici fiscali sono pur sempre degli scritti da leggere è l'epoca della chat, degli slogan delle pubblicità.
Daccordo è anche l'epoca delle immagini, delle immagini + o - interattive, però non mi sembra così in crisi il linguaggio. Ne scritto, nè parlato.
Mi verrebbe da dire che il liguaggio si trasforma come sempre, e si cercano costantemente nuove forma di comunicazione e nuovi media con i quali comunicare.
[quote="enr":1ypl7ltu]forse occorrerà prendere atto che la lingua scritta sta morendo e prepararsi ad una lingua grafica fatta per immagini ed ideogrammi (labview docet)[/quote:1ypl7ltu]
ma quando mai... Non vorrai mica tornare al tempo degli antichi egizi... oppure non vorrai che noi occidentali cominciassimo a scrivere come i cinesi. A me sembra il contrario: la scrittura di cinesi giapponesi e coreani cambia per essere "assimilabile" dai computer...
[quote="enr":1ypl7ltu].. comunque per ora il mio consiglio (se posso permettermi) è di prestare attenzione alla parola scritta ancora per un po' .. almeno finchè non sia stata sostituita da un sistema semeiotico codificato ed universalmente accettato (per la cronaca ci sto lavorando sopra un po' anche io .. chissà mai se ne verrà fuori qualcosa di buono) .. comunque è stato un piacere poterti essere utile .. a presto .. ciao .. enrico[/quote:1ypl7ltu]
Cmq in quest'epoca di tante parole e di pochi fatti, nasce l'esigenza di conoscere persone che sappiano dare l'esempio, senza doverlo annunciare o comunicare a parole. Nè scritte, nè parlate.
bye
Buone ferie a tutti
----------------------------------------
AUTORE: 1165
DATA :06/08/2010 - 22:42:05
----------------------------------------
paracarro per cortesia non tirarmi in una polemica che non voglio .. che non mi appartiene .. e che costerebbe a tutti troppa fatica senza arrivare a nessun risultato .. su queste pagine tu sei uno di quelli che filosofeggiano di più (e spesso a ragione, ho imparato molto anche da te, che tra l'altro così ad occhio hai il record dei post più lunghi) .. non vedo la necessità di ironizzare sulla filosofia altrui .. rimane comunque il senso stretto di fìlosofia come "amore per la conoscenza" e quindi non solo non c'è niente di male ma è strettamente necessaria .. i "discorsi sui massimi sistemi" sono quelli che permettono di sapere se si sta andando dritti o no .. non disprezzarli (ancora un paragone matematico: potrebbero essere modellizzabili come la parte I di una regolazione PID .. correzione dell'errore sul lungo periodo) .. purtroppo è questo che oramai faccio da tempo .. modellistica transdisciplinare .. e qui arriviamo all'ultimo punto .. non capisco tutti i commenti che hai fatto sul linguaggio .. certo che i linguaggi .. tutti i linguaggi .. si trasformano con l'uso .. ma prima di averne codificato ed accettato uno nuovo occorre usare bene il precedente .. e mi sembra evidente che è in atto una deriva generazionale in cui si sa leggere sempre di meno (e si ha sempre meno pazienza nel farlo) .. vatti a guardare i libri di testo di qualche anno fa per vedere se ho ragione .. ma questo è accettabilissimo solo se, in attesa di nuove codifiche, si continuano ad usare correttamente le codifiche vecchie .. comunque almeno tra le mie conoscenze io sono il primo ad avere scritto qualcosa sull'argomento oramai da anni .. sono due anni che sto insegnando sperimentalmente il labview in una scuola media e fin dall'inizio gli ho dato un taglio linguistico .. e da qualche mese stiamo con dei ricercatori linguisti universitari esplorando le potenzialità del linguaggio grafico (tipo ideogrammi o geroglifici o simboli del labview) applicato alla lingua parlata uomo-uomo o HMI .. sono convinto che in più o meno breve tempo tutta la comunicazione non verbale deriverà verso la simbologia grafica .. come già fanno molti sms e chat (vedi emoticons) .. comunque ci stiamo cominciando a lavorare sopra adesso .. se son rose fioriranno .. ma tutto ciò che c'entra con la considerazione (verissima, purtroppo!) che non è più popolare l'abitudine di leggere una spiegazione a parole? .. si preferisce avere una soluzione scodellata ignorando il saggio cinese di non dare il pesce ma insegnare a pescarlo?? .. comunque non mi sembra questa la sede adatta ad una trattazione approfondita su queste considerazioni, no?? .. ti pregherei se vuoi replicare di farlo in privato se vuoi dargli un taglio polemico o di aprire una sezione sulle potenzialità in campo linguistico della comunicazione per simboli grafici se ritieni che ne valga la pena e gradisci partecipare senza preconcetti a tutte le cavolate che ci stiamo scambiando con gli amici linguisti (sarebbe un bell'aiuto per me, sono il solo non laureato in lettere del gruppo, ma in questo caso occorrerebbe da parte tua un tono più pacato) .. ora scusami delle molte parole fin qui scarabocchiate, ma io non sono capace di spiegarmi diversamente .. per ora ciao e alla prossima
----------------------------------------
================================================================================
Lettura da File, error 43, compact rio
================================================================================
AUTORE: 3165
DATA :29/07/2010 - 11:27:51
----------------------------------------
Salve,
Ho il sequente problema:
Ho costruito un VI che, tramite compact rio, mantiene costante la temperatura in un frigorifero.
La temperatura che va mantenuta varia nel tempo (ogni 2 ore) e deve essere letta da un file (txt)
es:
24/05/2010 16.35.00 C 31
24/05/2010 16.45.00 C 30
24/05/2010 16.55.00 C 29
24/05/2010 17.05.00 C 30
24/05/2010 17.15.00 C 31
24/05/2010 17.25.00 C 31
24/05/2010 17.35.00 C 30
Finchè non collego il Compact Rio la lettura avviene correttamente (da D:\dati.csv), leggendo "31°" poi "30°" ecc.
Quando vado a connettere il compact rio ricevo però un messaggio di Error 43.
Sono un perfetto novellino dell'ambiente Real-Time, qualcuno ha idea di come ricavare dati da un File e trasferirli al compact rio in ambiente real-time?
grazie
----------------------------------------
AUTORE: 645
DATA :29/07/2010 - 12:55:03
----------------------------------------
Guarda http://forums.ni.com/t5/LabVIEW/I-am-us ... m-p/561185 .
Forse può essere un aiuto.
----------------------------------------
AUTORE: 3165
DATA :29/07/2010 - 14:06:50
----------------------------------------
Ciao,
ho dato un occhio al forum americano ma non ho risolto.
Ho fatto un piccolo passo in avanti scomponendo il VI in due parti.
Una su pc legge i dati, poi, tramite una variabile condivisa, invia la temperatura letta al VI sul compact rio.
Nel project explorer il VI di lettura è sotto "MyComputer", mentre il VI generale è nel Compact Rio.
Devo però riuscire a far girare tutto sul Compact Rio, ma appena sposto il VI di lettura nel folder del compact ritorna l'error 43 di prima, nel "Read from Spreadsheet"
----------------------------------------
AUTORE: 645
DATA :29/07/2010 - 14:54:29
----------------------------------------
Forse non prende correttamente il path al file.
Controlla in quale percorso il CompactRIO si aspetta di trovare il file.
----------------------------------------
AUTORE: 3165
DATA :29/07/2010 - 15:00:48
----------------------------------------
credo sia questo il problema, ma non so come uplodare i files, e VI, sul compact rio.
al momento nel project explorer se clicco su "proprietà" il percorso è sempre "C:/domumenti ecc"
Come faccio a uplodare il tutto sul compact? E poi ricavare i percorsi da inserire nei file path
grazie
----------------------------------------
================================================================================
treno impulsi su scheda 9472
================================================================================
AUTORE: 3052
DATA :30/07/2010 - 22:02:02
----------------------------------------
Salve a tutti,
ho diversi problemi sulla generazione di impulsi tramite il modulo digitale 9472, cioè non riesco generare su un canale di uscita un treno di impulsi ad una frequenza da me impostata dal programma.
Molto probabilmente non sono in grado di capire come risolvere questi problemi perchè non ho ben chiaro come funzionano le DAQmx che consentono di creare questo treno di impulsi in labview.
Qualcuno potrebbe darmi qualche sito di riferimento o una delucidazione su come posso muovermi?
----------------------------------------
AUTORE: 278
DATA :02/08/2010 - 14:26:49
----------------------------------------
Ciao,
non conosco la scheda in questione, ma hai provato a fare qualche "esperimento" utlizzando il MAX???
Io ti consiglio di partire da quello, ovviamente, per vedere il risultato, dovrai collegare un'oscilloscopio all'uscita della scheda DAQ
----------------------------------------
AUTORE: 3052
DATA :02/08/2010 - 17:36:53
----------------------------------------
OK! adesso provo a vedere dal max cosa posso rimediare.. per vedere i risultati sara difficile perche non ho l'oscilloscopio adesso(vedo se dagli esempi di labview c'e un modo per interfacciare l'ingresso del microfono e configurarlo come oscilloscopio)..comunque ti faccio sapere se rimedio qualcosa! ti ringrazio per il consiglio!
----------------------------------------
================================================================================
Aiuto progetto in labview accordatore!!
================================================================================
AUTORE: 3168
DATA :01/08/2010 - 12:36:32
----------------------------------------
Buongiorno a tutti...
devo presentare un progetto con i comandi base in labview..avevo pensato di interfacciarmi con un accordatore di chitarra della seiko,voi che ne pensate?potreste aiutarmi???
grazie mille a tutti
----------------------------------------
AUTORE: 278
DATA :02/08/2010 - 07:36:45
----------------------------------------
Ciao e benvenuto!
Un pò fumosa come domanda.. dacci qualche dettaglio in più.. come pensi di interfacciarti con l'accordatore?? ma soprattutto.. che cosa ci devi fare???
----------------------------------------
AUTORE: 3168
DATA :02/08/2010 - 12:33:00
----------------------------------------
ciao a te e grazie per la risposta...dunque io dovrei fare un progetto con i comandi base di labview e avevo pensato di collegare l'accordatore al pc e codificare il suono della chitarra,tu dici che è complicato?? si accettano anche altri consigli..devo fare questo progetto per fine mese...
----------------------------------------
AUTORE: 43
DATA :02/08/2010 - 14:23:31
----------------------------------------
[quote="Simi":20xlqc03]ciao a te e grazie per la risposta...dunque io dovrei fare un progetto con i comandi base di labview e avevo pensato di collegare l'accordatore al pc e codificare il suono della chitarra,tu dici che è complicato?? si accettano anche altri consigli..devo fare questo progetto per fine mese...
[/quote:20xlqc03]
ciao?
Potresti cominciare a dirci un paio di cose:
- Versione di LabVIEW + tipo di licenza (Full, Pro, student)
- marca e modello dell'accordatore.
Di conseguenza potremmo sapere:
Tipo di interfaccia HW: (Seriale, USB, MIDI, altro...) oppure schede di acq. di NI e/o acquisizione suono chitarra da ingresso mic della scheda audio...
Manuale Comandi interfaccia (non "user guide", ma "programming guide" o "reference manual")
Eventuale libreria SW al quale il programma dovrà interfacciarsi.
A occhio non la vedo cmq una cosa banale, da comandi base, a meno che Tu non abbia già qualcosa di già fatto anche parzialmente sviluppata a scuola...
bye
----------------------------------------
AUTORE: 278
DATA :02/08/2010 - 14:24:47
----------------------------------------
Come pensi di collegare l'accordatore al pc????
che io sappia, non esistono accordatori in grado di interfacciarsi con un pc.....
----------------------------------------
AUTORE: 3168
DATA :02/08/2010 - 16:19:02
----------------------------------------
versione di labview student,l'accordatore è seiko con uscita audio...
----------------------------------------
AUTORE: 482
DATA :03/08/2010 - 07:31:36
----------------------------------------
ma se ha solo l'uscita audio, allora non ti conviene collegare direttamente la chitarra all'ingresso audio del pc? Nel senso che non è che ti interfacci all'accordatore, semplicemente lo sfrutti per convertire il jack da 6mm a 3mm.
E poi vorresti sviluppar eun accordatore in labview quindi?
----------------------------------------
AUTORE: 3168
DATA :03/08/2010 - 16:40:33
----------------------------------------
esattamente...hai qualche proposta???
----------------------------------------
AUTORE: 278
DATA :05/08/2010 - 10:05:11
----------------------------------------
Non so se c'è anche nella versione Student, ma nella versione che utilizzo io (2009 full) c'è un express Vi (Acquire Sound) che ti consente di leggere l'audio da una periferica di sistema (esempio microfono interno per me che uso il portatile).
Potresti utilizzarlo per acquisire il suono proveniente dalla chitarra e poi fare un'analisi spettrale per identificare le armoniche...
----------------------------------------
AUTORE: 3168
DATA :05/08/2010 - 12:53:13
----------------------------------------
allora adesso vedo se c'è questa funzione nella mia versione,e poi mi daresti una mano per elaborare il progetto??intanto ho procurato un microfono e un'uscita jack da 5mm cosi posso interfacciare la chitarra al pc...
----------------------------------------
AUTORE: 3168
DATA :11/08/2010 - 11:29:37
----------------------------------------
ciao a tutti...allora il comando express vi per l'acquisizione del suono io non lo trovo nella versione LABVIWE 7 EXPRESS version student...qualcuno puo aiutarmi????
----------------------------------------
AUTORE: 1078
DATA :25/08/2010 - 08:08:38
----------------------------------------
Ciao Simi,
non vorrei fare il guastafeste ma mi sa che hai le idee un po' confuse su come funziona un Forum come ILVG. Quello che tra le righe ci stai chiedendo non è di darti una mano a capire come risolvere un problema del tuo progetto, o un suggerimento su quale metodo usare per ottimizzare un tipo di acquisizione o ancora quale interfaccia usare per interfacciarsi con uno strumento (ad esempio il tuo accordatore) ma, ci stai direttamente chiedendo di costruirti il progetto che vorresti presentare.
I forum come ILVG non servono a "furbetti" che pensano di aggirare i loro ostacoli sfruttando questo mezzo ma servono a programmatori esperti e non per scambiarsi informazioni su strumentazioni, nuove tecniche di programmazione, e a cercare soluzioni di programmazione per problemi che altri hanno potenzialmente già affrontato, es: come comunico con una seriale? come leggo le informazioni da un canale DAQ?
[quote="Simi":1szb7ng6]esattamente...hai qualche proposta???[/quote:1szb7ng6]
Non siamo noi del forum che dobbiamo suggerirti e a costruirti il progetto da presentare al tuo esame o al tuo professore!
La prima cosa che ti suggerisco è di studiarti le nozioni e le strutture base di LV, poi prova a strutturare il tuo progetto e in un secondo momento quando la tua idea avrà una forma definita e ti scontrerai con un problema specifico, allora (formulando la domanda giusta) saremo qui pronti ad aiutarti.
----------------------------------------
AUTORE: 3168
DATA :17/06/2011 - 12:33:14
----------------------------------------
Buonasera a tutti..allora..il progetto è completato...ora vorrei solo una mano per delle piccole modifiche per perfezionarlo..e cioè:
come posso fare per avere un'acquisizione continua del segnale?intendo dire..anzichè premere ogni volta RUN per farlo partire..
e poi vorrei fare qualche modifica a livello grafico..
----------------------------------------
AUTORE: 1078
DATA :20/06/2011 - 15:53:02
----------------------------------------
[quote="Simi":3t0paau1]come posso fare per avere un'acquisizione continua del segnale?intendo dire..anzichè premere ogni volta RUN per farlo partire..[/quote:3t0paau1]
Lancia un loop e al suo interno iserisci il tuo codice, ricorda di collegare un controllo STOP allo stop del loop. Attenta a temporizzarlo altrimenti ti succhierà tutte le risorse della CPU bloccandoti il PC!
----------------------------------------
AUTORE: 3168
DATA :01/07/2011 - 16:33:14
----------------------------------------
ciao a tutti,
come faccio ad inserire una casella di testo sul mio front panel non modificabile,mi spiego meglio...ho fatto l'accordatore,adesso vorrei scrivermi su una tabella tutte le frequenze delle note,come posso fare?
----------------------------------------
AUTORE: 1078
DATA :28/07/2011 - 08:03:38
----------------------------------------
Ciao Simi,
Per inserire una casella di testo non modificabile hai due possibilità: la prima, quella più banale è di inserire la casella di testo e metterla come indicatore - tasto destro del mouse sulla casella inserita --> Change to indicator; la seconda è mantenere la casella come controllo e impostare la proprietà Enable State su disable o disable and gray. Per farlo hai due strade, o utilzzando i property node della casella di testo o cliccando con il tasto destro del mouse sulla casella incriminata e scegliere Advance --> Enable State (ultima voce) --> Disable/Disable & gray.
Buon lavoro.
----------------------------------------
AUTORE: 482
DATA :28/07/2011 - 11:02:30
----------------------------------------
Beh se è una cosa fissa non c'e' neanche bisogno che sia un controllo o un indicatore, potrebbe semplicemente essere del testo scritto e basta, un etichetta. Oppure un immagien della tabella delle frequenze.
----------------------------------------
================================================================================
sincronizzazione seriale
================================================================================
AUTORE: 482
DATA :03/08/2010 - 15:57:02
----------------------------------------
Continuo a non capire la sincronizzazione della comunicazione seriale.....
Mando un comando e questo comando deve restituirmi 99 byte ogni 2 secondi.
Appena mando il comando vado a leggere (oppure aspetto 2 secondi e poi elggo, non cambia niente).
La prima lettura è sempre sballata tipo che ho piu' di 200 byte, poi sistabilizza a 99 che è il numero di byte del mio pacchetto.
Solo che io nel comando gli dico:
"MANDAMI 5 PACCHETTI"
e a seconda di quanti byte mi trovo nella prima lettura leggo come buoni solo i pacchetti restanti.
quindi anzichè avere:
99
99
99
99
99
ho:
298
99
99
0
0
Con tutti i pacchetti tranne il primo che cominciano con il primo byte trasmesso.
Questo dicendogli di leggere sempre tutti i byte at port.
Se gli dico invece di leggere sempre 99 byte mi trovo sempre 298 byte sulla porta tranne i penultimi due che restano 199 e 100.
I dati sono sempre sfalzati di un byte rispetto al primo del pacchetto.
Qual'e' la soluzione migliore? secondo voi? perchè mi trovo quel primo pacchetto di quelle dimensioni? e perchè se leggo 99 byte con lo stesso intervallo non svuota completamente la porta??
Allego il vi se qualcuno vuole dargli un occhio...
----------------------------------------
AUTORE: 129
DATA :21/09/2010 - 11:11:16
----------------------------------------
SCusa l'ingenuità, ma forse si tratta dui un problema di svuotamento del buffer.
Hai provato a fare prima lo svuotamento del buffer leggendo tutto il buffer con byte at port e quindi gli mandi la richiesta con solo il byte che ti serve?
In pratica il primo comando ti estrae tutti i byte sulòla porta, quindi leggi partendo da zero quelli che gli dichiari sul terminale.
ALtro commento in piena ingenuità, alcuni strumenti hanno un protocollo avanzato per cui alcuni comandi estraggono l'ultimo valore presente sul buffer(es. MEAS?) altri il primo disponibile(FETCH?).
Ciao, Nic
----------------------------------------
AUTORE: 482
DATA :21/09/2010 - 15:07:30
----------------------------------------
[quote="nicola":2j710d6e]
Hai provato a fare prima lo svuotamento del buffer leggendo tutto il buffer con byte at port e quindi gli mandi la richiesta con solo il byte che ti serve?[/quote:2j710d6e]
Fatto.
A me servono sempre tutti e 99 i byte.
Ho messo un CLEAR, poi un comando di inizializzazione con un read byte at port, poi un comando per farmi restituire i valori e dopo 2 sec comincio a leggere per N volte usando il byte at port e il read.
Risultato è che il primo pacchetto è di 298, gli altri di 99 e gli ultimi due a zero.
Se invece forzo la lettura a 99 byte indipendentemente dai byte at port, ottengo sempre quei 298 con i 199 e 100 come ultimi.
Non c'e' protocollo avanzato, solo un \
per inizializzare la comunicazione.
....mistero....
----------------------------------------
AUTORE: 645
DATA :22/09/2010 - 13:42:36
----------------------------------------
Non riesco a capire... mi fai un esempio dei dati che ottieni? Cosa intendi con
"Se invece forzo la lettura a 99 byte indipendentemente dai byte at port, ottengo sempre quei 298 con i 199 e 100 come ultimi" ?
----------------------------------------
AUTORE: 482
DATA :22/09/2010 - 14:28:01
----------------------------------------
1)Esempio read byte at port:
Write:
mandami 10 pacchetti
Read:
298 byte at port li leggo tutti
99 byte at port li leggo tutti
99 byte at port li leggo tutti
99 byte at port li leggo tutti
99 byte at port li leggo tutti
99 byte at port li leggo tutti
99 byte at port li leggo tutti
99 byte at port li leggo tutti
0 byte at port li leggo tutti
0 byte at port li leggo tutti
2)Esempio lettura forzata a 99 byte:
Write:
mandami 10 pacchetti
Read:
298 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
298 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
298 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
298 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
298 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
298 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
298 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
298 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
199 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
100 byte at port ma ne leggo solo 99 partendo dalcarattere di inizio messaggio
è piu' chiaro?
----------------------------------------
AUTORE: 482
DATA :23/09/2010 - 13:13:30
----------------------------------------
Aggiornamento....
Ho provato a modificare il tempo della prima lettura...
sono sceso fino a 65 msec.
Se leggo i primi 2 dati ogni 65 msec, allora ottengo tutto giusto.
la prima lettura da 100 byte (perchè il primo byte è un ACK), la seconda da 99 e poi le altre da 99 ogni 2 secondi.
Pero' questo non è previsto dal manuale di comunicazione.
P.S. è normale che mi dia sempre la warning 1073676294 in cui mi dice:
VISA: (Hex 0x3FFF0006) The number of bytes transferred is equal to the requested input count. More data might be available.
??
----------------------------------------
AUTORE: 645
DATA :01/10/2010 - 16:05:18
----------------------------------------
Scusa... ma non è molto chiaro
Cioè... il fatto che all'inizio leggi qualche informazione in più potrebbe dipendere da eventuale inizializzazione dello strumento.
Poi non capisco bene cosa succede: tu leggi i byte presenti nel buffer (stabiliti con la funzione Bytes at serial port) e ricevi dati sbagliati.
Più precisamente ricevi una quantità di dati strana: 298 byte nelle prime acquisizioni e 0 byte nelle ultime acquisizioni.
Giusto?
----------------------------------------
AUTORE: 482
DATA :04/10/2010 - 07:52:27
----------------------------------------
provo a chiarire..se ci riesco...ma a quanto pare anche l'asistenza non capisce eprchè....vorrei provare a togliere il convertitore USB/seriale per capire se centra lui ma non ho seriali sul pc....cmq...
Io do un comando di inizializzazione e lo strumento mi restituisce l'OK.
Fatto questo gli do un comando per restituirmi dei dati per X volte, supponiamo 5 volte.
Lo strumento, per 5 volte, una volta ogni 2 secondi mi deve restituire 99 byte (tranne la prima volta che me ne deve restituire 100 perchè c'e' un ACK in piu').
Il problema è che se faccio la prima lettura dopo 2 sec., mi trovo 298 byte sulla porta.
Allora ho provato a velocizzare la prima lettura e ho scoperto che per leggere i 100 byte che cerco, devo abbassare l'attesa per la prima lettura a 65 msec.
Se poi aspetto 2 sec mi trovo 198 byte sulla porta.
Quindi ho scoperto che devo fare tutte e due le prime letture dopo 65 msec per avere il numero di byte che cerco.
L'assistenza ha provato a spacciarmi la spiegazione che il primo ato me lo da in un tempo ignoto, perchè dipende da quando gli arriva il trigger che è ogni 2 sec (tipo che s eio gli faccio la richiesta a metà dei 2 sec, lui dovrebbe rispondere dopo 1 sec), ma questo non mi spiega due cose:
1) la ripetitività dei tempi, è sempre 65 msec che devo aspettare.
2) I dati con un timing non corretto sono 2 e non solo il primo.
----------------------------------------
AUTORE: 43
DATA :04/10/2010 - 09:40:28
----------------------------------------
[quote="gepponline":5aeokxy7]...
Io do un comando di inizializzazione e lo strumento mi restituisce l'OK.
Fatto questo gli do un comando per restituirmi dei dati per X volte, supponiamo 5 volte.
Lo strumento, per 5 volte, una volta ogni 2 secondi mi deve restituire 99 byte (tranne la prima volta che me ne deve restituire 100 perchè c'e' un ACK in piu').
Il problema è che se faccio la prima lettura dopo 2 sec., mi trovo 298 byte sulla porta.
Allora ho provato a velocizzare la prima lettura e ho scoperto che per leggere i 100 byte che cerco, devo abbassare l'attesa per la prima lettura a 65 msec.
Se poi aspetto 2 sec mi trovo 198 byte sulla porta.
Quindi ho scoperto che devo fare tutte e due le prime letture dopo 65 msec per avere il numero di byte che cerco.
L'assistenza ha provato a spacciarmi la spiegazione che il primo ato me lo da in un tempo ignoto, perchè dipende da quando gli arriva il trigger che è ogni 2 sec (tipo che s eio gli faccio la richiesta a metà dei 2 sec, lui dovrebbe rispondere dopo 1 sec), ma questo non mi spiega due cose:
1) la ripetitività dei tempi, è sempre 65 msec che devo aspettare.
2) I dati con un timing non corretto sono 2 e non solo il primo.[/quote:5aeokxy7]
Hai provato ad usare un'oscilloscopio per misurare il delay fra 2 pacchetti?
Sei sicuro che quei 2 sec. sono il tempo minimo che trascorre fra l'invio di 2 pacchetti, non è un timeout? nel senso che appena il PC è pronto a ricevere, lo strumento invia a raffica i dati?
Non è possibile inizializzare il ritardo di 2 sec. fra pacchetti prima della richiesta dei 5 pacchetti?
cmq è un problema dello strumento, secondo me, x cui dicci che strumento è e vediamo se ci sono bachi conosciuti dello strumento stesso.
bye
----------------------------------------
AUTORE: 482
DATA :04/10/2010 - 11:26:00
----------------------------------------
è un DAVIS VANTAGE PRO2, una stazione meteo.
Non è possibile settare niente nell'invio dei pacchetti.
Manda 99Byte ogni 2 sec e questo è tutto.
Probabilmente non avevano voglia di studiare molto un sistema di comunicazione seriale, anche percchè questi 99 byte sono una 30ina di valori, per lo piu' inutili per me, ma non c'e' modo di chiedergli solo alcuni valori.
----------------------------------------
================================================================================
ancora sul calcolo del CRC
================================================================================
AUTORE: 482
DATA :04/08/2010 - 13:16:41
----------------------------------------
...ma ciao!
devo fare un controllo del CRC su un dato che leggo da una seriale...
ahimè non ci capisco NIENTE della spiegazione..
la spiegazione è questa:
[code:1lfcnveq]XI. CRC calculation
The console uses the same CRC calculation that was used by earlier Davis Instruments weather
stations.
The CRC checking used by the WeatherLink is based on the CRC-CCITT standard. The heart of
the method involves a CRC-accumulator that uses the following formula on each successive data
byte. After all the data bytes have been "accumulated", there will be a two byte CRC checksum
that will get processed in the same manner as the data bytes. If there has been no transmission
error, then the final CRC-accumulator value will be 0 (assuming it was set to zero before
accumulating data).
In the following code, "crc" is the crc accumulator (16 bits or 2 bytes), "data" is the data or CRC
checksum byte to be accumulated, and "crc_table" is the table of CRC value found in the array
below. The operator "^" is an exclusive-or (XOR), ">> 8" shifts the data right by one byte
(divides by 256), and "<< 8" shifts the data left by one byte (multiplies by 256).
crc = crc_table [(crc >> 8) ^ data] ^ (crc << 8);
unsigned short crc_table [] = {
0x0, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0xa50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0xc60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0xe70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0xa1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x2b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x8e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0xaf1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0xcc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0xed1, 0x1ef0,
};
When sending a CRC to the console, always send the most significant byte first. This is the
opposite of how regular data values are sent where the least significant byte is sent first.
Example, calculating the CRC in the DMPAFT example above:
Old CRC Data byte Table index Table Value New CRC
0x0000 0xC6 (0x00 ^ 0xC6) = 0xC6 0xB98A (0x0000 ^ 0xB98A) = 0xB98A
0xB98A 0xCE (0xB9 ^ 0xCE) = 0x77 0x0E70 (0x8A00 ^ 0x0E70) = 0x8470
0x8470 0xA2 (0x84 ^ 0xA2) = 0x26 0x44A4 (0x7000 ^ 0x44A4) = 0x34A4
0x34A4 0x03 (0x34 ^ 0x03) = 0x37 0x46B4 (0xA400 ^ 0x46B4) = 0xE2B4
If you continue processing the received CRC value of 0xE2B4 it will look like this:
Old CRC Data byte Table index Table Value New CRC
0xE2B4 0xE2 (0xE2^ 0xE2) = 0x00 0x0000 (0xB400 ^ 0x0000) = 0xB400
0xB400 0xB4 (0xB4^ 0xB4) = 0x00 0x0000 (0x0000^ 0x0000) = 0x0000
The final CRC of zero indicates that the "packet" passed its CRC check.[/code:1lfcnveq]
La stringa che io vado a leggere è questa:
[code:1lfcnveq]4C4F 4FEC 00EA 0249 7312 032E 2403 0000 3B00 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FF2E FFFF FFFF FFFF FF00 00FF FF7F 0000 FFFF 0000 0E00 0E00 0000 0000 0000 FFFF FFFF FFFF FF00 0000 0000 0000 0000 0000 0000 0000 0000 0032 0003 C06B 020B 080A 0D68 A1[/code:1lfcnveq]
Gli ultimi due byte sono il CRC.
Non capisco che cacchio devo fare, problema mio o la spiegazione fa schifo?
----------------------------------------
AUTORE: 927
DATA :09/08/2010 - 15:18:17
----------------------------------------
Con i CRC mi sono scontrato anch'io in passato. Ognuno pare farli a modo suo, quindi spesso bisogna andare per tentativi... forse ti possono essere utili queste pagine per fare dei test
http://www.lammertbies.nl/comm/info/crc ... ation.html
http://zorc.breitbandkatze.de/crc.html
Qui c'è un forum
http://www.lammertbies.nl/forum/viewforum.php?f=11
La domanda non c'entra molto con Labview comunque
----------------------------------------
AUTORE: 4197
DATA :24/04/2012 - 16:03:47
----------------------------------------
ciao.
io ho il tuo stesso problema: devo calcolare il CRC di una stazione meteo DAVIS.
Ho provato diversi codici senza successo.
Ho scritto il codice in C++, poi l'equivamente in Visual basic.
Ho provato anche usando il tuo messaggio, ma il CRC mi da sempre risultato errato.
Di seguito il codice che puoi incollare dentro un modulo di VBA(visual basic incluso in excel)
Se sai qual'è il problema o se hai risolto il problema ti prego di farmi sapere.
Grazie.
Gaucho.
[code:50ku7ydz]
Private CommonDialogAPI As New clsOpenSave
Type Field
Name As String
Offset As Byte
Size As Byte
TypeVar As Byte '0=decimal ; 1=two's Complement ; 2=binary ; 3=Hex ; 4=ascii(ascii don't require byte inversion)
Divider As Double
values() As Double
End Type
Public Type tUShort
MSB As Byte
LSB As Byte
End Type
Dim LoopMessageFields(13) As Field
Public CRCTab(255) As Long
Public Sub initMessageformat()
Dim k As Integer
k = 0
For Each v In Array(0, &H1021&, &H2042&, &H3063&, &H4084&, &H50A5&, &H60C6&, &H70E7&, &H8108&, &H9129&, &HA14A&, &HB16B&, &HC18C&, &HD1AD&, &HE1CE&, &HF1EF&, _
&H1231&, &H210&, &H3273&, &H2252&, &H52B5&, &H4294&, &H72F7&, &H62D6&, &H9339&, &H8318&, &HB37B&, &HA35A&, &HD3BD&, &HC39C&, &HF3FF&, &HE3DE&, &H2462&, &H3443&, _
&H420&, &H1401&, &H64E6&, &H74C7&, &H44A4&, &H5485&, &HA56A&, &HB54B&, &H8528&, &H9509&, &HE5EE&, &HF5CF&, &HC5AC&, &HD58D&, &H3653&, &H2672&, &H1611&, &H630&, _
&H76D7&, &H66F6&, &H5695&, &H46B4&, &HB75B&, &HA77A&, &H9719&, &H8738&, &HF7DF&, &HE7FE&, &HD79D&, &HC7BC&, &H48C4&, &H58E5&, &H6886&, &H78A7&, &H840&, &H1861&, &H2802&, &H3823&, _
&HC9CC&, &HD9ED&, &HE98E&, &HF9AF&, &H8948&, &H9969&, &HA90A&, &HB92B&, &H5AF5&, &H4AD4&, &H7AB7&, &H6A96&, &H1A71&, &HA50&, &H3A33&, &H2A12&, &HDBFD&, &HCBDC&, _
&HFBBF&, &HEB9E&, &H9B79&, &H8B58&, &HBB3B&, &HAB1A&, &H6CA6&, &H7C87&, &H4CE4&, &H5CC5&, &H2C22&, &H3C03&, &HC60&, &H1C41&, &HEDAE&, &HFD8F&, &HCDEC&, &HDDCD&, _
&HAD2A&, &HBD0B&, &H8D68&, &H9D49&, &H7E97&, &H6EB6&, &H5ED5&, &H4EF4&, &H3E13&, &H2E32&, &H1E51&, &HE70&, &HFF9F&, &HEFBE&, &HDFDD&, &HCFFC&, &HBF1B&, &HAF3A&, _
&H9F59&, &H8F78&, &H9188&, &H81A9&, &HB1CA&, &HA1EB&, &HD10C&, &HC12D&, &HF14E&, &HE16F&, &H1080&, &HA1&, &H30C2&, &H20E3&, &H5004&, &H4025&, &H7046&, &H6067&, _
&H83B9&, &H9398&, &HA3FB&, &HB3DA&, &HC33D&, &HD31C&, &HE37F&, &HF35E&, &H2B1&, &H1290&, &H22F3&, &H32D2&, &H4235&, &H5214&, &H6277&, &H7256&, &HB5EA&, &HA5CB&, _
&H95A8&, &H8589&, &HF56E&, &HE54F&, &HD52C&, &HC50D&, &H34E2&, &H24C3&, &H14A0&, &H481&, &H7466&, &H6447&, &H5424&, &H4405&, &HA7DB&, &HB7FA&, &H8799&, &H97B8&, &HE75F&, &HF77E&, _
&HC71D&, &HD73C&, &H26D3&, &H36F2&, &H691&, &H16B0&, &H6657&, &H7676&, &H4615&, &H5634&, &HD94C&, &HC96D&, &HF90E&, &HE92F&, &H99C8&, &H89E9&, &HB98A&, &HA9AB&, &H5844&, &H4865&, _
&H7806&, &H6827&, &H18C0&, &H8E1&, &H3882&, &H28A3&, &HCB7D&, &HDB5C&, &HEB3F&, &HFB1E&, &H8BF9&, &H9BD8&, &HABBB&, &HBB9A&, &H4A75&, &H5A54&, &H6A37&, &H7A16&, _
&HAF1&, &H1AD0&, &H2AB3&, &H3A92&, &HFD2E&, &HED0F&, &HDD6C&, &HCD4D&, &HBDAA&, &HAD8B&, &H9DE8&, &H8DC9&, &H7C26&, &H6C07&, &H5C64&, &H4C45&, &H3CA2&, &H2C83&, _
&H1CE0&, &HCC1&, &HEF1F&, &HFF3E&, &HCF5D&, &HDF7C&, &HAF9B&, &HBFBA&, &H8FD9&, &H9FF8&, &H6E17&, &H7E36&, &H4E55&, &H5E74&, &H2E93&, &H3EB2&, &HED1&, &H1EF0&)
CRCTab(k) = v
k = k + 1
Next
LoopMessageFields(0).Name = "Ack" 'expected decimal 6
LoopMessageFields(0).Offset = 0
LoopMessageFields(0).Size = 1
LoopMessageFields(0).TypeVar = 0 'decimal
LoopMessageFields(0).Divider = 1
LoopMessageFields(1).Name = "MsgID" 'expected ascii "LOO">"OOL">decimal 5197644
LoopMessageFields(1).Offset = 1
LoopMessageFields(1).Size = 3
LoopMessageFields(1).TypeVar = 0 'decimal
LoopMessageFields(1).Divider = 1
LoopMessageFields(2).Name = "Barometer" 'unit is inch/Hg
LoopMessageFields(2).Offset = 8
LoopMessageFields(2).Size = 2
LoopMessageFields(2).TypeVar = 0 'decimal
LoopMessageFields(2).Divider = 1000
LoopMessageFields(3).Name = "Inside Temp." 'unit is F
LoopMessageFields(3).Offset = 10
LoopMessageFields(3).Size = 2
LoopMessageFields(3).TypeVar = 0 'decimal
LoopMessageFields(3).Divider = 10
LoopMessageFields(4).Name = "Inside Hum." 'unit is %
LoopMessageFields(4).Offset = 12
LoopMessageFields(4).Size = 1
LoopMessageFields(4).TypeVar = 0 'decimal
LoopMessageFields(4).Divider = 1
LoopMessageFields(5).Name = "Outside Temp." 'unit is F
LoopMessageFields(5).Offset = 13
LoopMessageFields(5).Size = 2
LoopMessageFields(5).TypeVar = 0 'decimal
LoopMessageFields(5).Divider = 10
LoopMessageFields(6).Name = "Wind Speed" 'unit is mph
LoopMessageFields(6).Offset = 15
LoopMessageFields(6).Size = 1
LoopMessageFields(6).TypeVar = 0 'decimal
LoopMessageFields(6).Divider = 1
LoopMessageFields(7).Name = "Wind Direction" 'unit is °
LoopMessageFields(7).Offset = 17
LoopMessageFields(7).Size = 2
LoopMessageFields(7).TypeVar = 0 'decimal
LoopMessageFields(7).Divider = 1
LoopMessageFields(8).Name = "Outside Hum." 'unit is %
LoopMessageFields(8).Offset = 34
LoopMessageFields(8).Size = 1
LoopMessageFields(8).TypeVar = 0 'decimal
LoopMessageFields(8).Divider = 1
LoopMessageFields(9).Name = "Rain Rate" 'unit is inches/h
LoopMessageFields(9).Offset = 42
LoopMessageFields(9).Size = 2
LoopMessageFields(9).TypeVar = 0 'decimal
LoopMessageFields(9).Divider = 100
LoopMessageFields(10).Name = "Solar Radiation" 'unit is w/m^2 ; just for future use
LoopMessageFields(10).Offset = 45
LoopMessageFields(10).Size = 2
LoopMessageFields(10).TypeVar = 0 'decimal
LoopMessageFields(10).Divider = 1
LoopMessageFields(11).Name = "Forecast Icon"
'8=sun(mostly Clear),
'6=Partial Sun + Cloud(Partially Cloudly),
'2=Cloud(Mostly Cloudy)
'3=Cloud+rain(Mostly Cloudy, Rain within 12 hours)
'18=Cloud+snow(Mostly Cloudy, Snow within 12 hours)
'19=Cloud+Rain+Snow(Mostly Cloudy, Rain or snow within 12 hours)
'7=partial sun+cloud+rain(Partially Cloudy,rain within 12 hours)
'22=partial sun + cloud+snow (Partially Cloudy,snow within 12 hours)
'23=partial sun + cloud+rain+snow (Partially Cloudy,rain or snow within 12 hours)
LoopMessageFields(11).Offset = 90
LoopMessageFields(11).Size = 1
LoopMessageFields(11).TypeVar = 0 'decimal
LoopMessageFields(11).Divider = 1
LoopMessageFields(12).Name = "PacketEnd" 'expected value 3338 (\
\
=0x0D0A)
LoopMessageFields(12).Offset = 96
LoopMessageFields(12).Size = 2
LoopMessageFields(12).TypeVar = 0 'decimal
LoopMessageFields(12).Divider = 1
LoopMessageFields(13).Name = "CRC"
'calculation:
'
LoopMessageFields(13).Offset = 98
LoopMessageFields(13).Size = 2
LoopMessageFields(13).TypeVar = 0 'decimal
LoopMessageFields(13).Divider = 1
End Sub
Public Function CalcCrcOk(msg As String) As Boolean
Dim TempCrc As Long
Dim TempDataLong As Long
Dim LoByte, HiByte As Integer
For X = 1 To Len(msg) Step 1 'Loop through data bytes
LoByte = CByte(Asc(Mid(msg, X, 1)))
'HiByte = CByte(Asc(Mid(msg, X + 1, 1)))
'TempDataInteger = (HiByte And &H7F) * &H100 Or LoByte Or -(HiByte > &H7F) * &H8000
'TempDataLong = LoByte + (HiByte * 256)
Dim SL As Long
SL = ShiftLeft(TempCrc, 8)
TempCrc = CRCTab(ShiftRight(TempCrc, 8) Xor LoByte) Xor SL
Next
TempCrc = (ShiftRight(TempCrc, 8) And &HFF) Or (ShiftLeft(TempCrc, 8) And &HFF00)
If TempCrc <> 0 Then
CalcCrcOk = False
Else
CalcCrcOk = True
End If
End Function
Public Function ShiftLeft(ByVal Value As Long, ByVal Shift As Byte) As Long
ShiftLeft = Value
If Shift > 0 Then
Dim i As Byte
Dim m As Long
For i = 1 To Shift
m = ShiftLeft And &H40000000
ShiftLeft = (ShiftLeft And &H3FFFFFFF) * 2
If m <> 0 Then
ShiftLeft = ShiftLeft Or &H80000000
End If
Next i
End If
If ShiftLeft > 65535 Then
ShiftLeft = ShiftLeft Mod 65536
End If
End Function
Public Function ShiftRight(ByVal Value As Long, ByVal Shift As Byte) As Long
Dim i As Byte
ShiftRight = Value
If Shift > 0 Then
ShiftRight = Int(ShiftRight / (2 ^ Shift))
End If
End Function
Sub Macro1()
'a = CalcCrc16(Chr(&HC6))
initMessageformat
Dim msg As String * 150
Dim TmpVar As Double
Dim TmpVarStr As String
Dim MsgArray(98) As Byte
'apri file
'metti messaggio in una stringa
CommonDialogAPI.Filter = "All Files|*.*"
CommonDialogAPI.CancelError = True
On Error GoTo Canceled
CommonDialogAPI.ShowOpen
GoTo NotCanceled
Canceled:
On Error GoTo 0
MsgBox "You clicked 'Cancel'."
Exit Sub
NotCanceled:
Dim FileNumber As Integer
FileNumber = FreeFile
Open CommonDialogAPI.FileName For Binary As #FileNumber
Get #FileNumber, 2, msg
Close #FileNumber
'se il messaggio non inizia per 6 (ack) e continua per "LOO" (ID), segnala e esci
'If Chr(MsgArray(0)) & Chr(MsgArray(1)) & Chr(MsgArray(2)) <> "LOO" Then
' MsgBox ("Message ID not found")
' Exit Sub
'End If
If Left(msg, 3) <> "LOO" Then
MsgBox ("Message ID not found")
Exit Sub
End If
If CalcCrcOk(Mid(msg, 1, 99)) = False Then
MsgBox ("Wrong CRC: Received ")
Exit Sub
End If
'decodifica messaggio
For i = 0 To UBound(LoopMessageFields)
'ottieni la variabile
TmpVarStr = Mid(msg, LoopMessageFields(i).Offset + 1, LoopMessageFields(i).Size)
'add a record in values array
If IsNull(LoopMessageFields(i).values) Then
ReDim LoopMessageFields(i).values(0)
Else
ReDim Preserve LoopMessageFields(i).values(UBound(LoopMessageFields(i).values) + 1)
End If
TmpVar = -1
Select Case LoopMessageFields(i).TypeVar
Case 0 'decimal
TmpVar = InvertedStringToDouble(TmpVarStr)
TmpVar = TmpVar / LoopMessageFields(i).Divider
Case 1 'complemento a 2
'not used
MsgBox "Not Used,Impossible!"
'TmpVar = InvertedStringToSignDouble(TmpVarStr)
'TmpVar = TmpVar / LoopMessageFields(i).Divider
Case 2 'binario
'not used
MsgBox "Not Used,Impossible!"
Case 3 'hex
'not used
MsgBox "Not Used,Impossible!"
Case 4 'ascii
'not used
MsgBox "Not Used,Impossible!"
Case Else
MsgBox ("Type not expected. Impossible!")
Exit Sub
End Select
LoopMessageFields(i).values(UBound(LoopMessageFields(i).values)) = TmpVar
Next
End Sub
Public Function InvertedStringToDouble(str As String) As Double
Dim TmpVal As Double
TmpVal = 0
'inverti stringa e estrai valori
For i = 1 To Len(str)
TmpVal = TmpVal + ((256 ^ (i - 1)) * Asc(Mid(str, i, 1)))
Next
InvertedStringToDouble = TmpVal
End Function
[/code:50ku7ydz]
Ti spiego brevemente:
Macro1 è la funzione principale da usare
CalcCrcOk verifica se il CRC del messaggio in ingresso è corretto. Se il CRC è corretto, il risultato dovrebbe essere zero (come hai letto nel manuale davis che hai postato).
Il messaggio in ingresso ho previsto che venga dato come file (per fare le mie prove con calma,senza stazione meteo connessa) .
Il file deve essere un file binario dove è presente la risposta completa della stazione meteo (quindi carattere 06, poi il messaggio di LOOP che inizia con LOO.Il carattere 06 lo scarto nella MAcro1 mentre carico il file).
Ti allego anche i files che puoi usare come messaggi di esempio, incluso il file che ho creato appositamente col contenuto del messaggio che hai postato:
www.tr3ma.com/Dati/msg1%20No%20ISS
www.tr3ma.com/Dati/msg2%20With%20ISS
www.tr3ma.com/Dati/test
il terzo file contiene il tuo messaggio.
----------------------------------------
AUTORE: 4197
DATA :24/04/2012 - 16:18:35
----------------------------------------
caspita ho visto ora che son passati 2 anni dal primo post.. sigh!
----------------------------------------
AUTORE: 4197
DATA :24/04/2012 - 16:43:14
----------------------------------------
leggendo sul manuale davis che hai linkato, a pagina 34 viene ripostato un esempio.
Ho scritto la seguente funzione, per ipotizzare la ricezione del messaggio di esempio, e la mia funzione calcola correttamente la checksum(infatti il risultato è zero, e anche i vari valori intermedi corrispondono a quanto ripostato nel manuale Davis). Quindi sto pensando che la funzione che ho scritto nel post precedente sia corretta ma per qualche strano motivo il messaggio di loop usa una checksum diversa!!
[code:3l9vhia6]
Public Sub MacroTest()
initMessageformat
Dim msg As String
msg = Chr("&HC6") & Chr("&HCE") & Chr("&Ha2") & Chr("&H03") & Chr("&HE2") & Chr("&Hb4")
If CalcCrcOk(msg) = True Then
MsgBox "CRC ok"
End If
End Sub
[/code:3l9vhia6]
----------------------------------------
AUTORE: 4197
DATA :26/04/2012 - 10:20:45
----------------------------------------
come non detto.
Il mio codice è corretto.
i messaggi di test che ho allegato erano formattati male.
inviando i dati ricevuti dalla stazione al mio controllo di CRC, il controllo viene effettuato correttametne, quindi potete usarlo, o tradurlo in altri linguaggi di programmazione.
see u dudes.
----------------------------------------
AUTORE: 4197
DATA :26/04/2012 - 10:23:27
----------------------------------------
ecco il codice leggermente perfezionato. inseritelo in un modulo di vba di excel:
[code:27wc7jhn]
Private CommonDialogAPI As New clsOpenSave
Type Field
Name As String
Offset As Byte
Size As Byte
TypeVar As Byte '0=decimal ; 1=two's Complement ; 2=binary ; 3=Hex ; 4=ascii(ascii don't require byte inversion)
Divider As Double
values() As Double
End Type
Public Type tUShort
MSB As Byte
LSB As Byte
End Type
Dim LoopMessageFields(9) As Field
Public CRCTab(255) As Long
Public Sub initMessageformat()
Dim k As Integer
k = 0
For Each v In Array(0, 4129, 8258, &H3063&, &H4084&, &H50A5&, &H60C6&, &H70E7&, &H8108&, &H9129&, &HA14A&, &HB16B&, &HC18C&, &HD1AD&, &HE1CE&, &HF1EF&, _
&H1231&, &H210&, &H3273&, &H2252&, &H52B5&, &H4294&, &H72F7&, &H62D6&, &H9339&, &H8318&, &HB37B&, &HA35A&, &HD3BD&, &HC39C&, &HF3FF&, &HE3DE&, &H2462&, &H3443&, _
&H420&, &H1401&, &H64E6&, &H74C7&, &H44A4&, &H5485&, &HA56A&, &HB54B&, &H8528&, &H9509&, &HE5EE&, &HF5CF&, &HC5AC&, &HD58D&, &H3653&, &H2672&, &H1611&, &H630&, _
&H76D7&, &H66F6&, &H5695&, &H46B4&, &HB75B&, &HA77A&, &H9719&, &H8738&, &HF7DF&, &HE7FE&, &HD79D&, &HC7BC&, &H48C4&, &H58E5&, &H6886&, &H78A7&, &H840&, &H1861&, &H2802&, &H3823&, _
&HC9CC&, &HD9ED&, &HE98E&, &HF9AF&, &H8948&, &H9969&, &HA90A&, &HB92B&, &H5AF5&, &H4AD4&, &H7AB7&, &H6A96&, &H1A71&, &HA50&, &H3A33&, &H2A12&, &HDBFD&, &HCBDC&, _
&HFBBF&, &HEB9E&, &H9B79&, &H8B58&, &HBB3B&, &HAB1A&, &H6CA6&, &H7C87&, &H4CE4&, &H5CC5&, &H2C22&, &H3C03&, &HC60&, &H1C41&, &HEDAE&, &HFD8F&, &HCDEC&, &HDDCD&, _
&HAD2A&, &HBD0B&, &H8D68&, &H9D49&, &H7E97&, &H6EB6&, &H5ED5&, &H4EF4&, &H3E13&, &H2E32&, &H1E51&, &HE70&, &HFF9F&, &HEFBE&, &HDFDD&, &HCFFC&, &HBF1B&, &HAF3A&, _
&H9F59&, &H8F78&, &H9188&, &H81A9&, &HB1CA&, &HA1EB&, &HD10C&, &HC12D&, &HF14E&, &HE16F&, &H1080&, &HA1&, &H30C2&, &H20E3&, &H5004&, &H4025&, &H7046&, &H6067&, _
&H83B9&, &H9398&, &HA3FB&, &HB3DA&, &HC33D&, &HD31C&, &HE37F&, &HF35E&, &H2B1&, &H1290&, &H22F3&, &H32D2&, &H4235&, &H5214&, &H6277&, &H7256&, &HB5EA&, &HA5CB&, _
&H95A8&, &H8589&, &HF56E&, &HE54F&, &HD52C&, &HC50D&, &H34E2&, &H24C3&, &H14A0&, &H481&, &H7466&, &H6447&, &H5424&, &H4405&, &HA7DB&, &HB7FA&, &H8799&, &H97B8&, &HE75F&, &HF77E&, _
&HC71D&, &HD73C&, &H26D3&, &H36F2&, &H691&, &H16B0&, &H6657&, &H7676&, &H4615&, &H5634&, &HD94C&, &HC96D&, &HF90E&, &HE92F&, &H99C8&, &H89E9&, &HB98A&, &HA9AB&, &H5844&, &H4865&, _
&H7806&, &H6827&, &H18C0&, &H8E1&, &H3882&, &H28A3&, &HCB7D&, &HDB5C&, &HEB3F&, &HFB1E&, &H8BF9&, &H9BD8&, &HABBB&, &HBB9A&, &H4A75&, &H5A54&, &H6A37&, &H7A16&, _
&HAF1&, &H1AD0&, &H2AB3&, &H3A92&, &HFD2E&, &HED0F&, &HDD6C&, &HCD4D&, &HBDAA&, &HAD8B&, &H9DE8&, &H8DC9&, &H7C26&, &H6C07&, &H5C64&, &H4C45&, &H3CA2&, &H2C83&, _
&H1CE0&, &HCC1&, &HEF1F&, &HFF3E&, &HCF5D&, &HDF7C&, &HAF9B&, &HBFBA&, &H8FD9&, &H9FF8&, &H6E17&, &H7E36&, &H4E55&, &H5E74&, &H2E93&, &H3EB2&, &HED1&, &H1EF0&)
CRCTab(k) = v
k = k + 1
Next
LoopMessageFields(0).Name = "Barometer" 'unit is inch/Hg
LoopMessageFields(0).Offset = 8
LoopMessageFields(0).Size = 2
LoopMessageFields(0).TypeVar = 0 'decimal
LoopMessageFields(0).Divider = 1000
LoopMessageFields(1).Name = "Inside Temp." 'unit is F
LoopMessageFields(1).Offset = 10
LoopMessageFields(1).Size = 2
LoopMessageFields(1).TypeVar = 0 'decimal
LoopMessageFields(1).Divider = 10
LoopMessageFields(2).Name = "Inside Hum." 'unit is %
LoopMessageFields(2).Offset = 12
LoopMessageFields(2).Size = 1
LoopMessageFields(2).TypeVar = 0 'decimal
LoopMessageFields(2).Divider = 1
LoopMessageFields(3).Name = "Outside Temp." 'unit is F
LoopMessageFields(3).Offset = 13
LoopMessageFields(3).Size = 2
LoopMessageFields(3).TypeVar = 0 'decimal
LoopMessageFields(3).Divider = 10
LoopMessageFields(4).Name = "Wind Speed" 'unit is mph
LoopMessageFields(4).Offset = 15
LoopMessageFields(4).Size = 1
LoopMessageFields(4).TypeVar = 0 'decimal
LoopMessageFields(4).Divider = 1
LoopMessageFields(5).Name = "Wind Direction" 'unit is °
LoopMessageFields(5).Offset = 17
LoopMessageFields(5).Size = 2
LoopMessageFields(5).TypeVar = 0 'decimal
LoopMessageFields(5).Divider = 1
LoopMessageFields(6).Name = "Outside Hum." 'unit is %
LoopMessageFields(6).Offset = 34
LoopMessageFields(6).Size = 1
LoopMessageFields(6).TypeVar = 0 'decimal
LoopMessageFields(6).Divider = 1
LoopMessageFields(7).Name = "Rain Rate" 'unit is inches/h
LoopMessageFields(7).Offset = 42
LoopMessageFields(7).Size = 2
LoopMessageFields(7).TypeVar = 0 'decimal
LoopMessageFields(7).Divider = 100
LoopMessageFields(8).Name = "Solar Radiation" 'unit is w/m^2 ; just for future use
LoopMessageFields(8).Offset = 45
LoopMessageFields(8).Size = 2
LoopMessageFields(8).TypeVar = 0 'decimal
LoopMessageFields(8).Divider = 1
LoopMessageFields(9).Name = "Forecast Icon"
'8=sun(mostly Clear),
'6=Partial Sun + Cloud(Partially Cloudly),
'2=Cloud(Mostly Cloudy)
'3=Cloud+rain(Mostly Cloudy, Rain within 12 hours)
'18=Cloud+snow(Mostly Cloudy, Snow within 12 hours)
'19=Cloud+Rain+Snow(Mostly Cloudy, Rain or snow within 12 hours)
'7=partial sun+cloud+rain(Partially Cloudy,rain within 12 hours)
'22=partial sun + cloud+snow (Partially Cloudy,snow within 12 hours)
'23=partial sun + cloud+rain+snow (Partially Cloudy,rain or snow within 12 hours)
LoopMessageFields(9).Offset = 90
LoopMessageFields(9).Size = 1
LoopMessageFields(9).TypeVar = 0 'decimal
LoopMessageFields(9).Divider = 1
End Sub
Public Function CalcCrcOk(msg As String) As Boolean
Dim TempCrc As Long
Dim TempDataLong As Long
Dim LoByte, HiByte As Integer
For x = 1 To Len(msg) Step 1 'Loop through data bytes
LoByte = CByte(Asc(Mid(msg, x, 1)))
'HiByte = CByte(Asc(Mid(msg, X + 1, 1)))
'TempDataInteger = (HiByte And &H7F) * &H100 Or LoByte Or -(HiByte > &H7F) * &H8000
'TempDataLong = LoByte + (HiByte * 256)
Dim SL As Long
SL = ShiftLeft(TempCrc, 8)
TempCrc = CRCTab(ShiftRight(TempCrc, 8) Xor LoByte) Xor SL
Next
TempCrc = (ShiftRight(TempCrc, 8) And &HFF) Or (ShiftLeft(TempCrc, 8) And &HFF00)
If TempCrc <> 0 Then
CalcCrcOk = False
Else
CalcCrcOk = True
End If
End Function
Public Function ShiftLeft(ByVal Value As Long, ByVal Shift As Byte) As Long
ShiftLeft = Value
If Shift > 0 Then
Dim i As Byte
Dim m As Long
For i = 1 To Shift
m = ShiftLeft And &H40000000
ShiftLeft = (ShiftLeft And &H3FFFFFFF) * 2
If m <> 0 Then
ShiftLeft = ShiftLeft Or &H80000000
End If
Next i
End If
If ShiftLeft > 65535 Then
ShiftLeft = ShiftLeft Mod 65536
End If
End Function
Public Function ShiftRight(ByVal Value As Long, ByVal Shift As Byte) As Long
Dim i As Byte
ShiftRight = Value
If Shift > 0 Then
ShiftRight = Int(ShiftRight / (2 ^ Shift))
End If
End Function
Sub Macro1()
'a = CalcCrc16(Chr(&HC6))
initMessageformat
Dim msg As String * 150
Dim TmpVar As Double
Dim TmpVarStr As String
Dim MsgArray(98) As Byte
'apri file
'metti messaggio in una stringa
CommonDialogAPI.Filter = "All Files|*.*"
CommonDialogAPI.CancelError = True
On Error GoTo Canceled
CommonDialogAPI.ShowOpen
GoTo NotCanceled
Canceled:
On Error GoTo 0
MsgBox "You clicked 'Cancel'."
Exit Sub
NotCanceled:
Dim FileNumber As Integer
FileNumber = FreeFile
Open CommonDialogAPI.FileName For Binary As #FileNumber
Get #FileNumber, 1, msg
Close #FileNumber
'se il messaggio non inizia per 6 (ack) e continua per "LOO" (ID), segnala e esci
'If Chr(MsgArray(0)) & Chr(MsgArray(1)) & Chr(MsgArray(2)) <> "LOO" Then
' MsgBox ("Message ID not found")
' Exit Sub
'End If
If Left(msg, 4) <> Chr(6) & "LOO" Then
MsgBox ("Message ID not found")
Exit Sub
End If
If CalcCrcOk(Mid(msg, 2, 99)) = False Then
MsgBox ("Wrong CRC: Received ")
Exit Sub
End If
'decodifica messaggio
For i = 0 To UBound(LoopMessageFields)
'ottieni la variabile
TmpVarStr = Mid(msg, LoopMessageFields(i).Offset + 1, LoopMessageFields(i).Size)
'add a record in values array
If IsArrayAllocated(LoopMessageFields(i).values) = False Then
ReDim LoopMessageFields(i).values(0)
Else
ReDim Preserve LoopMessageFields(i).values(UBound(LoopMessageFields(i).values) + 1)
End If
TmpVar = -1
Select Case LoopMessageFields(i).TypeVar
Case 0 'decimal
TmpVar = InvertedStringToDouble(TmpVarStr)
TmpVar = TmpVar / LoopMessageFields(i).Divider
Case 1 'complemento a 2
'not used
MsgBox "Not Used,Impossible!"
'TmpVar = InvertedStringToSignDouble(TmpVarStr)
'TmpVar = TmpVar / LoopMessageFields(i).Divider
Case 2 'binario
'not used
MsgBox "Not Used,Impossible!"
Case 3 'hex
'not used
MsgBox "Not Used,Impossible!"
Case 4 'ascii
'not used
MsgBox "Not Used,Impossible!"
Case Else
MsgBox ("Type not expected. Impossible!")
Exit Sub
End Select
LoopMessageFields(i).values(UBound(LoopMessageFields(i).values)) = TmpVar
Next
'show results
Range("D2").Value = CommonDialogAPI.FileName
For i = 0 To UBound(LoopMessageFields)
Range("A" & 7 + i).Value = LoopMessageFields(i).Name
Range("D" & 7 + i).Value = LoopMessageFields(i).values(UBound(LoopMessageFields(i).values))
Next
MsgBox ("File Loaded")
End Sub
Public Function InvertedStringToDouble(str As String) As Double
Dim TmpVal As Double
TmpVal = 0
'inverti stringa e estrai valori
For i = 1 To Len(str)
TmpVal = TmpVal + ((256 ^ (i - 1)) * Asc(Mid(str, i, 1)))
Next
InvertedStringToDouble = TmpVal
End Function
Public Function StringToSignDouble(str As String) As Double
Dim max As Double
Dim TmpVal As Double
TmpVal = 0
'inverti stringa e estrai valori
For i = 1 To Len(str)
TmpVal = TmpVal + ((256 ^ (Len(str) - i)) * Asc(Mid(str, i, 1)))
Next
max = 256 ^ Len(str)
If TmpVal < (max / 2) Then
StringToSignDouble = TmpVal
Else
StringToSignDouble = TmpVal - max
End If
End Function
Public Sub MacroTest()
initMessageformat
Dim msg As String
msg = Chr("&HC6") & Chr("&HCE") & Chr("&Ha2") & Chr("&H03") & Chr("&HE2") & Chr("&Hb4")
If CalcCrcOk(msg) = True Then
MsgBox "CRC ok"
End If
End Sub
Function IsArrayAllocated(Arr As Variant) As Boolean
On Error Resume Next
IsArrayAllocated = IsArray(Arr) And Not IsError(LBound(Arr, 1)) And LBound(Arr, 1) <= UBound(Arr, 1)
End Function
[/code:27wc7jhn]
----------------------------------------
================================================================================
script di matlab
================================================================================
AUTORE: 3175
DATA :04/08/2010 - 19:35:06
----------------------------------------
Ciao a tutti...
Sono nuova in questo forum anche se ho già "spulciato" un po' in qua e in là per risolvere alcuni problemi!
Chiedo scusa a tutti se per caso la mia domanda è già stata posta in altri post ma purtroppo non ho trovato nulla che mi servisse durante la mia ricerca...
Nel mio programma uso molto gli script di matlab... però ho notato che alcune cose che posso fare in matlab non mi sono permesse nello script... in particolare il calcolo simbolico e l'utilizzo del comando normcdf che restituisce la cumulata della normale.
C'è un modo per eseguire queste operazioni anche attraverso lo script di labview?
Grazie mille a tutti!
Vale
----------------------------------------
AUTORE: 1078
DATA :25/08/2010 - 14:34:32
----------------------------------------
Ciao Vale,
Labview è un linguaggio di programmazione a tutti gli effetti, quindi ti permette di costruire tutte o quasi tutte le funzioni matematiche che ti servono. Il problema è che la funzione che hai nominato è una funzione proprietaria di MatLab, per ottenere lo stesso risultato dovresti costruirti la stessa funzione in Labview. Trovi tutte le funzioni matematiche disponibili nella function palet --> Matematic
Buon lavoro.
----------------------------------------
================================================================================
accesso ad un file di una cartella condivisa
================================================================================
AUTORE: 822
DATA :25/08/2010 - 18:58:57
----------------------------------------
ciao e buona fine di agosto a tutti,
ho un problema che non credo essere un problema propriamente di labview ma visto che il forum è frequentato da gente in gambissima lo posto comunque
Ho due computer (A e B) collegati in rete fra loro, sui due pc è installato windows xp professional e l'utente che accede ai due pc è lo stesso (utente pippo, password pippo) con privilegi di amministratore. Sul computer B ho creato il collegamento (che ho chiamato X:\) ad una cartella condivisa del computer A. Con un VI residente sul computer B, vado a leggere e scrivere su un file di testo presente sul computer A. Il problema è questo: se precedentemente, tramite esplora risorse, ho aperto la cartella X:\, tutto funziona, se invece non accedo alla cartella con esplora risorse, l'accesso al file per mezzo del VI mi è impedito fino a quando non apro la cartella da esplora risorse.
Credo essere un problema di privilegi da computer remoto da impostare su windows, stò cercando un pò su google se trovo qualcosa ma per il momento nulla..
Qualcuno mi può aiutare? Magari nella vostra esperienza vi è capitata la stessa cosa e avete risolto oppure avete consigli da darmi
Grazie
----------------------------------------
AUTORE: 482
DATA :26/08/2010 - 08:29:29
----------------------------------------
dovresti creare un colegamento automatico alla risorsa quando accendi il pc.
----------------------------------------
AUTORE: 822
DATA :26/08/2010 - 10:51:49
----------------------------------------
se non fraintendo quello che dici, credo di averlo già fatto. Per creare X:\ ho fatto connetti unità di rete, le ho dato il percorso e selezionato "riconnetti all'avvio", infatti quando avvio il pc mi ritrovo X:\ in risorse del computer (assieme alle unità fisiche C:\ e D:\), ma non è sufficiente.
Intendevi questo?
Ti ringrazio
----------------------------------------
AUTORE: 1168
DATA :26/08/2010 - 11:05:41
----------------------------------------
Hai provato con \\NomeComputer\
omecartella ?
Così dovresti riuscire ad accedere anche se non hai mappato x:\
----------------------------------------
AUTORE: 482
DATA :26/08/2010 - 11:17:05
----------------------------------------
si, dando il percorso assoluto e non quello rimappato, dovresti poter accedere
----------------------------------------
AUTORE: 822
DATA :26/08/2010 - 11:30:06
----------------------------------------
@pio e @gepponline
quindi se ho capito bene, nel VI di lettura/scrittura file, anzichè dargli come path "X:\
ome file", gli devo dare il percorso assoluto "\\
ome computer\
ome cartella\
ome file"?
----------------------------------------
AUTORE: 482
DATA :26/08/2010 - 11:38:32
----------------------------------------
yes!
----------------------------------------
AUTORE: 822
DATA :26/08/2010 - 11:53:14
----------------------------------------
ok ci provo e vi faccio sapere,
grazie
----------------------------------------
AUTORE: 822
DATA :30/08/2010 - 13:13:31
----------------------------------------
vi confermo che così funziona.
Grazie mille
----------------------------------------
================================================================================
IMAQ external display size to fit
================================================================================
AUTORE: 482
DATA :26/08/2010 - 11:21:56
----------------------------------------
...ma ciao!
ho una perplessità...
Se per visualizzare le immagini uso un indicatore, l'indicatore ha l'opzione Zoom to Fit che mi rende l'immagine grande come il controllo.
Se invece uso l'IMAQWindDraw, e uso il subVI IMAQ WIndZOOM 2 attivando l'opzione Zoom to fit, ottengo che è la finestra a ridimensionarsi alla dimensione dell'immagine e non viceversa, nonostante io abbia settato una misura per la finestra.
Ora la mia domanda è:
Esiste un vi che mi permette di fare la stessa cosa che faccio con il controllo e devo programmaticamente ridimensionare l'immagine in base alla dimensione dell'IMAQWind e poi mettercela dentro?
----------------------------------------
================================================================================
Inserire valori in array in un ciclo for
================================================================================
AUTORE: 3193
DATA :26/08/2010 - 16:55:31
----------------------------------------
Salve, ho un problema..vorrei costruire un array che ogni volta che esegue il ciclo for inserisca in una cella un valore registrato da una DAQ. In modo da avere 5 valori dentro all'array dopo 5 cicli, e una volta finiti i cicli vorrei uscire.
Riesco a ottenere il valore dalla DAQ ma non riesco a creare il vettore, potete aiutarmi. Grazie mille
----------------------------------------
AUTORE: 482
DATA :27/08/2010 - 07:47:01
----------------------------------------
la risposta è SHIFT REGISTER
----------------------------------------
AUTORE: 1078
DATA :01/09/2010 - 08:22:05
----------------------------------------
Se configuri correttamente la DAQ, ti restituirà lei stessa un'array di valori campionati a dovere con il numero di campioni date scelto... oltretutto il lavoro verrà fatto da un HW che sicuramente è più preciso e occuperà meno le risorse del pc per farlo!
Verifica la documentazione dei driver, trovi i manuale e tutto quello che ti serve per configurare il driver correttamente sul sito della NI.
Buon lavoro!
----------------------------------------
================================================================================
Copia di file con Webserver
================================================================================
AUTORE: 482
DATA :30/08/2010 - 11:44:17
----------------------------------------
...ma ciao!
sto facendo una piccola variazione ad una applicazione per gestire da remoto il pannello e poter copiare dei file.
Pensavo di fare una cosa del genere:
In un Tree control metto l'elenco dei file che risiedono nel computer che fa l'acquisizione.
Premendo un pulsnate, faccio la copia dei file selezionati.
Il problema è che il percorso dei file è di tipo C:\cartelladiarchiviazione\file.txt
Se gli dico di copiare questo file in c:\pippo\file.txt, mi crea una copia sempre sul pc che fa l'acquisizione e non sul pc che sta facendo il monitoraggio da remoto.
Se utilizzo un file dialog, in remoto non mi compare.
QUalche suggerimento su come posso fare questa copia?
I due computer non sono in rete ma in internet.
----------------------------------------
AUTORE: 1168
DATA :30/08/2010 - 14:10:22
----------------------------------------
Magari può essere poco elegante, ma se gli dici di aprire il file col blocco note del pc che sta facendo monitoraggio e poi te lo salvi? (sempre che si possa automatizzare il blocco note...) Riesci ad accedere al file in qualche maniera?
Oppure apri il file sul pc remoto e butti tutto il contenuto in una variabile globale che leggi dal pc con cui monitori, e scrivi un file col contenuto di quella variabile.
Non so...la butto lì!
Ciaoo
Pietro
----------------------------------------
AUTORE: 482
DATA :30/08/2010 - 14:29:53
----------------------------------------
Se io do un comando di aprire il notepad,questo mi si apre sul PC server e quindi io nel browser non lo vedrei comunque.
Riesco ad ipotizzare solo due soluzioni che pero' non so come realizzare:
1) far comparire una finestra di dialogo sul client che mi permette di salvare i file del server sul client;
2) individurare dal server l'indirizzo del client che ha il controllo e usare quell'indirizzo per salvare i file.
Vorrei capire se è una cosa fattibile, senno' passo alla soluzione dstp e su ogni pc che si dovrà connettere ci metto un applicazione ad hoc..
----------------------------------------
AUTORE: 645
DATA :02/09/2010 - 21:36:09
----------------------------------------
Non so se ho capito bene... mi vengono due domande:
a) Se al pc delle acquisizioni accede un pc per volta puoi lavorare con il pannello remoto integrato in LabView;
b) anzichè memorizzare su c: hai provato a indicare una directory del tipo "IP_PC_Destinazione/Cartella" ?
Nella nuova versione di LabView hanno inserito funzioni specifiche per la comunicazione tramite rete ethernet tra pc connessi.
----------------------------------------
AUTORE: 482
DATA :03/09/2010 - 07:30:00
----------------------------------------
Si, hai capito bene.
ma:
1) adessso ho sviluppato l'applicazione realizzando un client e collego i pc tramite datasocket e tutto funziona
ma
2) L'idea iniziare era quella di farlo senza creare un client.
3) Quindi quando accedo col browser all'applicazione, il percorso C:\ identifica il disco del server. L'ip del client connesso come faccio a ricavarlo? c'e' questa funzione tra le funzioni del datasocket?
4) I due pc non sono connessi in ethernet ma vanno tramite web e il server ha un IP statico.
----------------------------------------
================================================================================
generare segnali partendo da funzioni di trasferimento
================================================================================
AUTORE: 3201
DATA :02/09/2010 - 14:12:04
----------------------------------------
ciao a tutti, affacciandomi per la prima volta al programma labview non riesco a venir fuori dal seguente problema:
devo generare un segnale nel dominio del tempo partendo da una funzione di trasferimento che rappresenta l'impedenza di una bobina di helmholtz nel dominio di laplace del tipo: h=a+s*b. volendo, non se risulti più semplice mi basterebbe sapere come inserire la detta funzione di trasferimento in labview e poi svolgere la sua trasformata di laplace. in seguito dovrò campionare il segnale e poi fare una convoluzione con un onda quadra.
se posteste aiutarmi ve ne sarei veramente grato.
grazie a tutti.
Marco.
----------------------------------------
================================================================================
Acquisire dati da cellulare mediante bluethoot
================================================================================
AUTORE: 3202
DATA :04/09/2010 - 11:35:01
----------------------------------------
Salve Ragazzi,
spero possiate darmi una mano a risolvere il mio problema! Avrei bisogno di far dialogare la mia applicazione labview (su pc dotato di modulo bluetooth) con un cellulare mediante bluetooth: vorrei che il mio cellulare inviasse, ad esempio, un file di testo e che la mia applicazione riuscisse a stamparne il contenuto a video
Con Bluetooth Discover ed Bluetooth RFCOMM Service Discover, riesco a far leggere all'applicazione il nome, l'indirizzo del cellulare oltre che l'uuid, il canale ed il nome dei vari servizi(Dial-up networking, OPP, OBEX FileTransfer, ecc). Ma a questo mi sono bloccato: come dovrei fare per ricevere file dal suddetto cellulare?
Grazie mille per gli eventuali chiarimenti
Filippo
----------------------------------------
AUTORE: 645
DATA :09/09/2010 - 14:00:59
----------------------------------------
Io avevo provato in passato la comunicazione tra porte seriali Bluetooth e risultava uguale alla comunicazione con porte seriali "classsiche".
Una volta stabilita la porta COM assegnata dal pc alla porta seriale che (alcuni) sistemi Bluetooth creano (in questo caso l'eventuale chiavetta agganciata al pc o l'eventuale porta creata a bordo del pc attraverso un software di servizi BLuetooth), tramite i comandi VISA si possono mandare dati.
Cerco di recuperare il materiale...
----------------------------------------
AUTORE: 3202
DATA :09/09/2010 - 23:01:08
----------------------------------------
Grazie mille per la risposta! quindi tu mi proponi di utilizzare i blocchi Visa dopo aver aperto una comunicazione seriale e non quelli Bluetooth allora?
Se riesci a recuperare il materiale che hai mi faresti un grandissimo favore!!
Grazie ancora CIaooooooo
----------------------------------------
AUTORE: 645
DATA :12/09/2010 - 09:37:28
----------------------------------------
Se il tuo cellulare e il Bluetooth del pc possono creare una porta seriale (guarda nei servizi messi a disposizione dal software Bluetooth) allora puoi lavorare con i comandi VISA tra le porte seriali Bluetooth create.
Altrimenti puoi lavorare attraverso la comunicazione radio ma, per dovere di cronaca, mi sento di dirti che ogni tanto ci sono problemi legati soprattutto ai driver... Leggi qui: http://zone.ni.com/devzone/cda/tut/p/id/3260
----------------------------------------
================================================================================
Point nel Plot
================================================================================
AUTORE: 3101
DATA :07/09/2010 - 14:55:17
----------------------------------------
Ho un problema semplice: ho piu grafici che si sovrappongono in un XY Graph, uno ad ogni iterazione di un ciclo for.
Vorrei che tutti abbiano dei "point", e della stessa forma (quadrati per esempio).
ho provato con property node ma niente...
qualcuno può aiutarmi?
grazie
----------------------------------------
AUTORE: 1165
DATA :07/09/2010 - 18:27:54
----------------------------------------
vediamo se riesco a darti una soluzione soddisfacente .. il tuo problema nasce dal fatto che tu grafichi una (o più) funzioni note solo in alcuni punti del dominio (i numeri interi 1, 2, 3 .. ) mentre lasci al Labview di interpolare con linee i segmenti fra i vari punti noti .. se non erro credo che l'interpolazione sia sempre a linee intere .. allora ecco cosa potresti fare .. togliere l'impostazione di interpolazione e ricampionare la tua funzione (resampling) un certo numero di volte fra i punti noti .. in maniera da estendere il dominio delle tue funzioni .. cosicchè tu potrai poi scegliere a piacere forma e dimensione di questi punti supplementari .. fammi sapere se questa strada ti risolve il problema .. enr
----------------------------------------
AUTORE: 482
DATA :08/09/2010 - 07:55:01
----------------------------------------
In alto al grafico c'e' la casella del plot, clikka col destro sul plot e seleziona come graficarlo.
----------------------------------------
AUTORE: 3101
DATA :08/09/2010 - 14:14:37
----------------------------------------
giusto geppo...ma nel programma che sto facendo non so quanti plot il programma dovrà fare... ho bisogno che imposta per ogni plot che farà, il tipo di point..
----------------------------------------
AUTORE: 482
DATA :08/09/2010 - 14:38:27
----------------------------------------
Crea un property node del grafico.
E usi due proprietà:
1)Active plot = per stabilire a quale plot stai facendo riferiemnto
2) Plot->Point Style = per stabilire il tipo di punto che vuoi visualizzare
----------------------------------------
AUTORE: 3101
DATA :09/09/2010 - 08:48:26
----------------------------------------
così ho fatto nel mio programma (che acquisisce dati da uno strumento).
purtroppo mettendo il property node sia prima che dopo l'XYGRAPH, mi da errore!
mentre nel semplice programmino postato funziona..
----------------------------------------
AUTORE: 482
DATA :09/09/2010 - 08:50:18
----------------------------------------
si ma che errore ti da?
P.S. non ho capito dove ti da errore e dove no...
----------------------------------------
AUTORE: 645
DATA :09/09/2010 - 13:57:48
----------------------------------------
Come dice Geppo dovrebbe essere il Property Node la soluzione ai tuoi problemi...
Puoi postare un'immagine del Block Diagram del VI?
Il Property Node puoi collegarlo prima del grafico o comunque nel momento in cui ti serve lavorare con le proprietà del grafico, qualcosa del tipo:
1) aggiungi il grafico (intendo i punti, la serie)
2) selezioni il grafico (intendo i punti che hai appena inserito... guarda l'istruzione Active Plot)
3) scegli il formato
Un piccolo appunto: è bene ricordare che in LabView non importa (ai fini dell'esecuzione, non della presentazione grafica) dove si posizionano i blocchi ma in che ordine si collegano!
----------------------------------------
AUTORE: 3101
DATA :14/09/2010 - 16:56:14
----------------------------------------
mi dà questo errore (facendo nel vostro modo):
Error 1077 occurred at Property Node (arg 1) in XXX.vi, Invalid property value.
???
----------------------------------------
AUTORE: 3101
DATA :14/09/2010 - 16:56:44
----------------------------------------
(ah comunque questo topic andrebbe spostato in "programmazione"...mi sono sbagliato..)
----------------------------------------
AUTORE: 482
DATA :15/09/2010 - 07:27:46
----------------------------------------
Beh..dice che gli passi un valore non valido.
Che valore hai collegato al property node?
Quale dei property node da errore?
Innanzitutto Prima devi creare il grafico e poi cambiargli le proprietà.
Se provi a cambiare le proprietà prima di creare il grafico, dicendogli "cambia il point al plot 1", Il Plot 1 ancora non esiste e quindi ti darà quell'errore che dici. Idem se crei un ciclo For che cicla piu' volte di quanti sono i plot.
Altra possibilità è che nel tipo di point hai dato un valore superiore a 15 perchè i tipi di punto sono 16 se non sbaglio.
Comunque posta magari un immagine del tuo vi o direttamente il vi se possibile.
----------------------------------------
AUTORE: 3656
DATA :06/04/2011 - 09:51:50
----------------------------------------
giusto geppo...ma nel programma che sto facendo non so quanti plot il programma dovrà fare...
----------------------------------------
AUTORE: 482
DATA :06/04/2011 - 14:31:56
----------------------------------------
Se non lo sai hai due possibilità:
1) crei un grafico con TOT numero di plot a priori e poi man mano sostituisci valore ai sigoli plot
2) le operazioi le esegui solo dopo aver inserito almeno un valore pe rogni plot presente.
poi i vari FOR si adatteranno al numero di plot presenti nel grafico
----------------------------------------
================================================================================
colori!
================================================================================
AUTORE: 3101
DATA :07/09/2010 - 16:35:54
----------------------------------------
come rendere labview "più colorato" e più personalizzato?
----------------------------------------
AUTORE: 3101
DATA :07/09/2010 - 16:36:24
----------------------------------------
intendo i programmi che si sviluppano
----------------------------------------
AUTORE: 482
DATA :08/09/2010 - 07:52:16
----------------------------------------
ma che domanda è??
Basta cambiare i colori per renderlo piu' colorato no?
e per personalizzarlo basta creare dei custom control clikkando col tasto destro sui controlli e scegliendo Customize.
puoi essere piu' specifico?
----------------------------------------
AUTORE: 3101
DATA :08/09/2010 - 14:12:26
----------------------------------------
tools> options> colors..
ma non mi cambia niente!
customize dove?
----------------------------------------
AUTORE: 482
DATA :08/09/2010 - 14:34:19
----------------------------------------
se devi solo cambiare i colori ai controlli, dla menu in alto fai:
View->tools palette
Ti comparirà una palette dove puoi sceglierei colori e scegliendo il tool pennello puoi colorare quello che vuoi.
Nella palette dei colori, quando vedi una T in angolo in alto a desta, vuol dire che per quell'oggetto puoi scegliere il colore trasparente.
----------------------------------------
AUTORE: 645
DATA :09/09/2010 - 13:58:29
----------------------------------------
Volendo si possono anche inserire immagini come sfondo delle sezioni del VI.
----------------------------------------
================================================================================
nuova utente di LabVIEW!
================================================================================
AUTORE: 3207
DATA :09/09/2010 - 10:00:42
----------------------------------------
Salve a tutti,
vorrei iniziare ad utilizzare LabView per lavoro e pensavo ad un autoformazione... potreste aiutarmi a fare un piano di studio il più organizzato possibile? la domanda in soldoni è: quali strumenti ho per imparare ad utilizzare questo programma in maniera ordinata? Considerate che non sono nemmeno un'esperta di programmazione!
AIUTOOOOOOOOOOOOOOOOOOOO
GRAZIE A TUTTI
----------------------------------------
AUTORE: 1078
DATA :10/09/2010 - 08:13:38
----------------------------------------
Ciao alessia,
Esistono dei manuali in lingua inglese che potrebbero aiutarti:
[url:2a8ny9er]http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=labview[/url:2a8ny9er]
Non so esiste anche qualcosa in italiano, potresti provare a fare una ricerca on google.
[quote="alessia":2a8ny9er]Considerate che non sono nemmeno un'esperta di programmazione! [/quote:2a8ny9er]
Non avere nozioni di programmazione potrebbe anche essere un vantaggio! Non avresti parametri di confronto che ti farebbero prendere strade fuorvianti, non avresti abitudini e approcci che in labview risultano a volte controproducenti.
In ultimo ci siamo noi.... che siamo disposti a darti una mano a risolvere problemi pratici di programmazione una volta che hai incominciato a sviluppare qualcosa. Se hai un dubbio chiedi pure.
Buono studio...
----------------------------------------
AUTORE: 3207
DATA :10/09/2010 - 10:04:05
----------------------------------------
Grazie Ricky!
mi hai davvero rincuorato! pensavo che sarebbe stata un' impresa difficilissima senza grosse basi di programmazione! Ho iniziato a fare un programmino in cui converto i gradi centigradi in Fahrenheit... per ora va bene... cercherò di inventarmene altri adesso... Userò di certo il manuale!
Se te ti vengono in mente esercizi propedeutici ti sarei grata se me li proponessi!
Ciao Ciao!
Alessia
----------------------------------------
AUTORE: 2550
DATA :10/09/2010 - 10:23:36
----------------------------------------
Ciao Alessia e benvenuta!
Anche su YouTube puoi trovare alcuni tutorial, a volte ben fatti, che potrebbero aiutarti a entrare nel mondo LabView.
http://www.youtube.com/results?search_q ... orial&aq=f
Ti segnalo anche questa pagina del sito NI dove puoi trovare un po di documentazione in PDF.
http://www.ni.com/academic/lv_training/how_learn_lv.htm
Ciao!
DVD
----------------------------------------
AUTORE: 3207
DATA :13/09/2010 - 09:02:41
----------------------------------------
Grazie dvd14986!
utilizzerò il materiale che mi state indicando.
Alessia
----------------------------------------
AUTORE: 90
DATA :23/09/2010 - 08:32:02
----------------------------------------
Io ho trovato un bellissimo "getting Started" in Italiano per LV 7.
[url:2cmrbznm]http://www.bo.infn.it/orientamento/ls/LabView7.pdf[/url:2cmrbznm]
E' molto interessante anche perche' e' fatto proprio da National.
Ciao
Claudio
----------------------------------------
AUTORE: 3207
DATA :27/09/2010 - 10:22:00
----------------------------------------
Un particolare grazie ad ARIS!
----------------------------------------
================================================================================
Cursori XY Graph
================================================================================
AUTORE: 3101
DATA :13/09/2010 - 10:35:36
----------------------------------------
Su un XY Graph ho visto che ci sono due cursori, la cui posizione è controllata tramite delle freccette.
Poichè l'intervallo delle x o delle y può essere grande, è impensabile scorrere con le freccette tutto il grafico per arrivare al punto desiderato.
C'è un modo per sapere le coordinate di un punto semplicemente cliccandoci sopra? O comunque un metodo più veloce di quello descritto?
grazie
----------------------------------------
AUTORE: 645
DATA :14/09/2010 - 07:03:55
----------------------------------------
Dai un'occhiata tra i Property Node dedicati ai cursori del grafico... Dovresti trovare qualche blocco per posizionare i cursori sul punto cliccato e leggere le relative coordinate.
----------------------------------------
AUTORE: 3101
DATA :14/09/2010 - 09:42:52
----------------------------------------
dove?
allego immagine,
----------------------------------------
AUTORE: 645
DATA :20/09/2010 - 15:29:28
----------------------------------------
Hai provato ad usare i Property "Cursor X" e "Cursor Y" indicati nell'immagine?
Usali in modalità Read in modo da leggere cosa indicano.
Forse ti restituiscono le coordinate di posizonamento del cursore sul grafico... poi bisogna vedere secondo quale scala...
Guarda anche http://decibel.ni.com/content/docs/DOC-6495
----------------------------------------
================================================================================
Salvare su File
================================================================================
AUTORE: 3101
DATA :13/09/2010 - 12:49:18
----------------------------------------
Uso Write Character to File.vi per salvare dati su un file.
Usando tale vi, mi si apre una finestra dove posso scegliere nome e percorso del file txt da salvare.
Io vorrei che mi nomini il file in maniera predefinita, e io debba solo scegliere la cartella dove salvare (e anche cambiare nome se voglio).
Come fare?
grazie
ciao
----------------------------------------
AUTORE: 645
DATA :14/09/2010 - 07:02:23
----------------------------------------
Non ho LabView sottomano ma tra i blocchi di lavoro sui file ce n'è uno che ti permette di scegliere se salvare un file o una directory... Facendo così puoi aprire un popup per chiedere all'utente il nome della directory e poi salvi ilfile con un nome predefinito usando le costanti stringa. Ricordati di inserire nella costante (se vuoi puoi anche combinare più costanti tra loro) anche l'estensione del file.
Poi passi la stringa al blocco "To path" per creare il nome del file su file system.
----------------------------------------
================================================================================
Perdita dati su intensity graph
================================================================================
AUTORE: 1670
DATA :15/09/2010 - 17:16:57
----------------------------------------
Ciao a tutti,
ho un vi che acquisisce dati, li trasforma in un array bidimensionale e poi li visualizza in un intensity graph. Quando dallo stesso vi apro un subvi, che mi elabora parte di questi dati, il contenuto dell'intesity graph sparisce (senza aver toccato l' i. g.) . Sembra che quando cambia il focus dal vi principale al subvi qualcosa faccia perdere i dati dell' i. g. . Questo mi succede qualche volta anche durante il debug quando metto in pausa e LabView si ferma passando dal front panel al block diagram.
Qualcuno ha qualche idea sulla possibile soluzione ?
Grazie Mille e Buona Serata a Tutti
----------------------------------------
AUTORE: 645
DATA :22/09/2010 - 13:43:38
----------------------------------------
Potresti aver messo il grafico all'interno di un evento che, appena scatenato, comporta l'azzeramento dei dati.
Puoi postare un Block Diagram per vedere?
----------------------------------------
================================================================================
Aiuto Urgente : Salvare pagina IE come testo in automatico
================================================================================
AUTORE: 977
DATA :16/09/2010 - 11:57:51
----------------------------------------
Salve a tutti,
Ho bisogno del vostro aiuto e del vostro consiglio :
Ho un'applicazione che mi iapre IE7 ( posso installare anche IE8 se necessario ) e mi visualizza una serie di dati su una pagina di IE.
Quello che vorrei è creare del codice in LW che in automatico vada a salvarmi la pagina aperta con IE in formato testo e mi vada a memorizzare il file con un dato percorso e nome che decido io!
La memorizzazione del file con nome e percorso decisi da me non è di primaria importanza : mi basta sapere dove memorizza il file txt per poi aprirlo ed elaborarlo.
Ora, io non ho esperienza in questo genere di applicazioni in quanto uso LW più per acquisire dati vari con le relative schede NI che altro, ma presumo che questa funzione possa essere implementata tramite l'utilizzo di ActiveX o DLL varie.
Un'idea che mi è venuta in questo preciso istante è anche quella che forse esiste un modo in LW per intercettare il messaggio che viaggia sul protocollo TCP-IP e che poi IE visualizza.
L'apertura di IE non è importante : quello che mi interessa è il messaggio in se.
Ho già guardato se esiste qualche parametro da passare a IE tramite riga di comando( come ad esempio l' URL ) o cmd in modo che faccia il salvataggio in automatico ma non sembra esserci niente adatto allo scopo!
Vista la mia incapacità in questo ambito più che una traccia mi servirebbe il codice vero e proprio compatibile con LW 7.1 od 8.5 .
La soluzione alternativa è scrivere un programma in VB o simili che faccia tutta sta cosa, ma sinceramente vorrei evitare a causa di alcuni problemi di compatibilità che mi hanno già dato non pochi grattacapi.
Se poi volete farmi assolutamente felice e sapete anche indicarmi un modo per forzare la chiusura di IE o, in generale se esiste, di una qualsiasi applicazione/processo sotto windows Xp tramite labview sarebbe magnifico....
Qualcuno di voi sà darmi qualche indicazione, tracce o Vi per risolvere questi miei problemi?
Grazie a tutti per la collaborazione e a presto...
Davide
----------------------------------------
AUTORE: 482
DATA :16/09/2010 - 14:10:16
----------------------------------------
C'e' una funzione che si chiama URL GET HTTP DOCUMENT, l'hai proata? io qui non posso testarla perchè sono dietro ad un proxy e non ci sono le funzioni pe rimpostare il proxy, pero' sembra fare quello che vuoi.
Senno' usando gli activex puoi usare questo esempio.
http://zone.ni.com/devzone/cda/epd/p/id/2743
Se vai sul sito della national e cerchi trovi un sacco di risorse. Questo l'ho trovato scrivendo:
[b:pzqf66h2]labview internet explorer activex[/b:pzqf66h2]
----------------------------------------
AUTORE: 660
DATA :17/09/2010 - 08:21:22
----------------------------------------
Per forzare la chiusura di un'applicazione sotto windows c'è un programma che fa parte del SO e lo trovi nella cartella windows\system32 che si chiama [b:11uchssv]taskkill.exe[/b:11uchssv]
se scrivi [b:11uchssv]taskkill /?[/b:11uchssv] ti mostra l'elenco delle possibilità che hai per terminare il task che ti interessa.
ciao
Max
----------------------------------------
AUTORE: 482
DATA :17/09/2010 - 11:20:43
----------------------------------------
Per la chiusura credo che senmpre tramite activeX ci sia la funzione Quit
----------------------------------------
AUTORE: 977
DATA :20/09/2010 - 14:31:34
----------------------------------------
Vi ringrazio tutti per l'aiuto anche se purtroppo dai test che ho effettuato risulta che l'applicazione suggerita da Gepponline non sia perfettamente performante ossia non funzioni con tutte le pagine internet in particolare con le pagine che io devo aprire!
Una valida alternativa potrebbe essere questa :
[url:mfasmtmf]http://digital.ni.com/public.nsf/allkb/89171CEC879A70A3862572950057ACC6[/url:mfasmtmf]
che utilizza il principio del datasokket per leggere la pagina internet anche se è compatibile solo con le versioni di Labview uguali o superiori alla v8.2
Al momento stò cercando di replicare tale soluzione con labview7.1 anche se con scarsi risultati vista la mia non dimestichezza con il datasokket anche se sono ottimista in tal senso!
Per risolvere il problema temo dovrò ricorrere ad un applicativo esterno, programma, dll o activeX, ma anche qui ho dei problemi in quanto come suddetto non ho esperienza di lavori su ActiveX vari e quindi non sò bene come lavorarci! Che voi sappiate c'è una qualche guida di facile comprensione reperibile da qualche parte che spieghi passo passo la procedura di utilizzo di un ActiveX?
Riguardo alla terminazione dei processi... Ho verificato il primo metodo proposto da Machyaer e sembra essere promettente e ottimale per le mie esigente.
Riguardo al secondo metodo suggerito da Gepponline a causa della mia solita inesperienza con gli ActiveX non sono stato in grado di verificarlo anche se da una ricerca sulla rete sembra comunque esistere questa possibilità!
Purtroppo Labview 7.1 non è più supportato in maniera ufficiale dalla NI, ma in giro ci sono ancora motissime aziende e laboratori che lo usano allegramente e questo genera non pochi problemi !
Comunque vi ringrazio di cuore per le risposte e... se vi viene in mente qualche altro metodo per risolvere questo mio problema.... mi farebbe molto piacere conoscerlo!!!
Un sorriso e a presto...
Davide
----------------------------------------
================================================================================
freez-are un grafico labview 6
================================================================================
AUTORE: 3213
DATA :22/09/2010 - 11:20:11
----------------------------------------
Salve a tutti, sono nuova del forum e ancora una principiante, quindi avrei bisogno del vostro aiuto per un problema che mi attanaglia.... Ho creato un programma di acquisizione dati in realtime e mi viene richiesto di eseguire delle misure dal grafico che mi mostra l'andamento dei miei dati nel tempo. L'immagine del grafico cambia ogni secondo e per eseguire queste misure dovrei in qualche modo freez-are l'immagine (rifacendo partire il grafico una volta terminato il tutto). Per fare questo vorrei mettere nel front panel un pulsante ma non so come fare: in particolare non so nè dove prendere questo pulsante nè come collegarlo al grafico .... mi date una mano? grazie
----------------------------------------
AUTORE: 482
DATA :22/09/2010 - 12:47:49
----------------------------------------
...ma ciao!
se ho capito bene quell oche devi fare, ti basta usare un pulsante legato ad un case.
Se il pulsante è false, scrivi il dato sul grafico.
Se il pulsnate è true (FREEZE) il dato non lo scrivi da nessuna parte e quindi il grafico resta com'era prima che schiacciassi il pulsante.
Poi quando lo rimetti a false devi valutare tu cosa e come fare.
Se vuoi resettare il grafico, ti consiglio di fare un controllo sul fronte di discesa del pulsante (utilizzando gli shift register confronti il pulsante col suo stato precedente) e se si verifica un fronte di discesa con un property node svuoti l'history data del grafico.
----------------------------------------
AUTORE: 129
DATA :23/09/2010 - 08:01:46
----------------------------------------
Se usi un waveform graph puoi gestirlo come nell'esempio allegato.
Nel case false ho aggiunto un pulsante per svuotare l'array e quindi pulire il grafico.
----------------------------------------
================================================================================
Uscire da cliclo for/while con delay
================================================================================
AUTORE: 3165
DATA :22/09/2010 - 15:33:43
----------------------------------------
Ho creato un VI che legge un valore per volta da un file CSV, con un indicatore del valore sul front panel.
QUesto CSV è un storico di temperature e voglio leggerne una ogni 1-2-3.. minuti.
Ho inserito un ciclo che ad ogni giro passa al valore seguente nella lista.
Perchè i valori siano letti con un certo intervallo ho inserito un "wait until next".
Il problema sorge quando devo stoppare il tutto.
Se inserisco un delay di 2-3 minuti, lo stop non diviene attivo prima che tutto il ciclio è finito, dunque 2-3 minuti.
Come faccio a staccare tutto il programma in modo istantaneo?
Ho provato sia con ciclo for che while ma non cambia niente
----------------------------------------
AUTORE: 129
DATA :23/09/2010 - 00:13:10
----------------------------------------
Puoi utilizzare uno shift register per gestire frazioni temporali o una occurrence.
Il timer loop ti permette di configurare un while loop.
La soluzione utilizzando uno shift register è basata sull'utilizzo di un timer veloce ad esempio 100/200ms e incrementi 1/Dt ad ogni ciclo, quando questo valore raggiunge il tempo desiderato un case registra il csv. Nel caso tu abbia necessità di interrompere l'applicazione questo avverrebbe nel ciclo successivo entro il Dt inidcato quindi 100/200ms o più ( a te decidere la frazione più idonea).
Il caso dell'occurrence è ancora meglio. guarda [url=http://www.bytelabs.it/?p=139:1s7awtfx]qui[/url:1s7awtfx]o [url=http://www.agilesystems.it/?p=20:1s7awtfx]qui[/url:1s7awtfx]
Puoi inoltre utilizzare il wait for panel activity o una event structure , puoi trovare interessanti [url=http://www.bytelabs.it/?p=189:1s7awtfx]questi articoli[/url:1s7awtfx]
----------------------------------------
AUTORE: 927
DATA :27/09/2010 - 16:07:56
----------------------------------------
Metodo ultrasemplice: esiste la funzione "Stop" che ferma il VI, in qualunque punto dell'esecuzione si trovi
----------------------------------------
AUTORE: 3165
DATA :28/09/2010 - 10:22:51
----------------------------------------
[quote="Snamprogetti":2tryblfc]Metodo ultrasemplice: esiste la funzione "Stop" che ferma il VI, in qualunque punto dell'esecuzione si trovi[/quote:2tryblfc]
ho provato a collegare lo "Stop" ad un bottone, anche fuori dal ciclio while, ma non cambia niente, una volta che entra nello while, lo snobba.
Ora proverò con le occorrenze..
----------------------------------------
AUTORE: 927
DATA :28/09/2010 - 10:31:24
----------------------------------------
Funziona, funziona...
----------------------------------------
AUTORE: 3165
DATA :28/09/2010 - 10:54:29
----------------------------------------
grazie, non mi ero accorto di non aver messo lo stop in un ciclo while
soluzione assai poco elegante ma efficace
----------------------------------------
AUTORE: 3165
DATA :28/09/2010 - 11:13:12
----------------------------------------
purtroppo volendo usare questo VI come sub-VI o come parte di un programma più complesso, che non voglio stoppare se stoppo questo ciclio, non posso usare lo Stop.
----------------------------------------
AUTORE: 927
DATA :28/09/2010 - 12:04:38
----------------------------------------
Eh si lo Stop era per il tuo caso semplice. Normalmente potresti usare un timed loop al posto del while, c'è il blocco "Stop timed structure" che ferma solo lui. Io non andrei a tirar fuori le occurrence...
----------------------------------------
AUTORE: 129
DATA :02/10/2010 - 07:22:35
----------------------------------------
Ti consiglio di provare con wait for front panel activity.
Ti invio un paio di esempi uno con un elapsed time realizzato con una functional global e l'altro con l'utilizzo di wait for activity panel.
----------------------------------------
================================================================================
Evento value change di array
================================================================================
AUTORE: 927
DATA :28/09/2010 - 12:00:46
----------------------------------------
C'è modo di sapere l'indice dell'elemento che è stato modificato?
----------------------------------------
AUTORE: 43
DATA :28/09/2010 - 14:02:28
----------------------------------------
[quote="Snamprogetti":2iu9upmg]C'è modo di sapere l'indice dell'elemento che è stato modificato?[/quote:2iu9upmg]
Puoi confrontare [Old Val] e [New Val] proprietà dell'evento [value change] e ricavare l'indice del pei.
Attenzione l'evento può essere generato anche se non c'è nessun cambiamento reale nell'array.
bye
----------------------------------------
AUTORE: 927
DATA :28/09/2010 - 14:12:04
----------------------------------------
Già, ma speravo ci fosse un modo più diretto (ho un array 2D con migliaia di valori...)
----------------------------------------
AUTORE: 660
DATA :28/09/2010 - 15:43:25
----------------------------------------
potresti provare a fare la differenza dei due array e arti restituire l'indice degli elementi non nulli, forse è più veloce....
Max
----------------------------------------
AUTORE: 660
DATA :28/09/2010 - 15:47:53
----------------------------------------
mi spiego meglio perchè forse ho tralasciato qualcosa
potresti fare la differenza dell'array nuovo con il vecchio, questa dovrebbe essere relativamente rapida, poi ti fai restituire l'indice degli elementi non nulli di questa differenza mi ricordo che c'è un vi ad hoc...
Max
P.S. ma perchè non si possono editare i post
----------------------------------------
AUTORE: 43
DATA :28/09/2010 - 16:02:02
----------------------------------------
[quote="Snamprogetti":2c7nbaa2]Già, ma speravo ci fosse un modo più diretto (ho un array 2D con migliaia di valori...)[/quote:2c7nbaa2]
Allora usa un solo controllo e seleziona l'elemento da editare clickando nella tabella... la tabella diventerebbe un indicatore...
bye
----------------------------------------
AUTORE: 645
DATA :01/10/2010 - 15:55:31
----------------------------------------
Come avviene la modifica dell'elemento dell'array?
Mi spiego... se l'utente inserisce un numero e viene modificata la posizione dell'array che contiene quel numero allora conosci la posizione per poter fare l'operazione. Se invece hai due elenchi da confrontare tra loro allora potresti seguire l'indicazione di machyaer.
Se invece vuoi lasciare all'utente le possibilità di modificare direttamente un valore ti conviene seguire la strada proposta da paracarro.
----------------------------------------
================================================================================
Richiamare MFC applicarion in Labview
================================================================================
AUTORE: 3222
DATA :30/09/2010 - 15:37:40
----------------------------------------
Salve,
ho un dispositivo elettronico riconfigurabile, il software della casa costruttrice mi crea in automatico il codice(MFC APPLICATION) in visual studio 2003.
Vorrei configurare dinamicamente tale dispositivo da lavbiew ma non conoscendo particolarmente il visual studio non so come modificarlo per creare una dll.
Spero che qualcuno possa aiutarmi chiarendomi qualche soluzione
Grazie
----------------------------------------
================================================================================
Come riconoscere se un campo è in formatto numerico o string
================================================================================
AUTORE: 2435
DATA :30/09/2010 - 17:18:22
----------------------------------------
Ciao a tutti,
vi chiedo una cosa:
sto usando dei controlli stringa dove vengono salvati dei valori di tipo numerico ad es: "0,99"
come posso fare per capire se il valore è di tipo numerico?
(in vb6 usavo la funzione "isnumeric")
Grazie
----------------------------------------
AUTORE: 43
DATA :30/09/2010 - 18:12:51
----------------------------------------
[quote="nic81_2007":2bwitn4b]Ciao a tutti,
vi chiedo una cosa:
sto usando dei controlli stringa dove vengono salvati dei valori di tipo numerico ad es: "0,99"
come posso fare per capire se il valore è di tipo numerico?
(in vb6 usavo la funzione "isnumeric")
Grazie[/quote:2bwitn4b]
Estrai il valore numerico e valuta la stringa di avanzo: se non avanzi nulla è numerico altrimenti non lo è.
bye
----------------------------------------
AUTORE: 482
DATA :01/10/2010 - 07:47:56
----------------------------------------
L'operazione che dice paracarro la puoi fare con il blocchetto "Fract/Exp String To Number" che trovi tra le funzioni di conversione stringa/numerico nella palette delle stringhe.
Se l'offset past number è zero, vuol dire che non ha trovato nessun numero nella stringa.
----------------------------------------
AUTORE: 43
DATA :01/10/2010 - 14:40:06
----------------------------------------
[quote="gepponline":2qo991o3]L'operazione che dice paracarro la puoi fare con il blocchetto "Fract/Exp String To Number" che trovi tra le funzioni di conversione stringa/numerico nella palette delle stringhe.
Se l'offset past number è zero, vuol dire che non ha trovato nessun numero nella stringa.[/quote:2qo991o3]
Perfetto geppo!
Però sull "offset past number" avrei qualcosa da dire...
Per es. la stringa "5.5;1", "25A-5B" "1/1/00" non sono stringhe numeriche... anche se iniziano con un numero...
La mia soluz. è 'sta roba:[attachment=0:2qo991o3]MyIsNumeric.vi[/attachment:2qo991o3]
bye
----------------------------------------
AUTORE: 129
DATA :02/10/2010 - 07:58:00
----------------------------------------
Potresti farlo anche così
----------------------------------------
AUTORE: 482
DATA :04/10/2010 - 08:48:45
----------------------------------------
si vero, leggerezza mia
Ma pensavo...
Nella premessa si parlava di utilizzare un controllo stringa per inserire un valore numerico.
Allora a questo punto mi domando, non è meglio usare un controllo numerico e poi la funzione di conversione a stringa se hai bisogno il dato in formato stringa?
In questo modo eviteresti il controllo che il dato sia un numerico perchè potrà essere solo numerico.
Ovviamente questo discorsonon vale s ein quel controllo puo' essere inserita anche una stringa qualsiasi.
----------------------------------------
AUTORE: 43
DATA :04/10/2010 - 09:10:59
----------------------------------------
[quote="gepponline":362rsf4i]...Nella premessa si parlava di utilizzare un controllo stringa per inserire un valore numerico.
Allora a questo punto mi domando, non è meglio usare un controllo numerico e poi la funzione di conversione a stringa se hai bisogno il dato in formato stringa?
...[/quote:362rsf4i]
E' consigliabile usare un controllo numerico per inserire un numero: è stato fatto apposta!
bye
----------------------------------------
================================================================================
Comunicazione seriale via USB con adattatore
================================================================================
AUTORE: 2993
DATA :30/09/2010 - 19:15:53
----------------------------------------
Ho fatto un programmino per il controllo di un tester di rigidità ed isolamento elettrico. Comunicazione via seriale. Il problema è questo. Se uso un pc con seriale "vera" funziona tutto. Se uso un pc senza seriale e adopero una USB con adattatore USB/RS232, allora iniziano i problemi. Intanto devo selezionare, sul front panel, la porta giusta PRIMA di lanciare il programma, altrimenti appena lancio, si pianta subito con una finestra di errore di LV. Selezionando prima, e lanciandolo, la comunicazione col dispositivo avviene comunque in modo scorretto. I comandi non vengono ricevuti bene.
Queste sono le impostazioni che ho messo:
Imput-menu tasto destro-VISA class-I/O session- instr (con le altre non funziona)
VISA configure-menu tasto destro-select type-automatic (con le altre due non funziona)
Mi sapete aiutare?
Grazie.
----------------------------------------
AUTORE: 1050
DATA :01/10/2010 - 07:53:59
----------------------------------------
Ciao,
per quanto sappia io il problema del cambio di porta è normale (sono gestite così le porte USB dai sisyemi operativi) per qualsiasi dispositivo USB se questo viene disconnesso o se il PC viene spento: quindi l'unica soluzione che hai è di NON spegnere il PC nè disconnettere l'usb.
Per quanto riguarda il problema di comunicazione, spesso dipende da un'errata configurazione seriale (baudrate, ecc): comunque per togliersi il dubbio sull'adattatore converrebbe fare una prova creando un loop (usando un connettore seriale con tx ed rx, vedi esempio in [url:2jz6xzsf]http://zone.ni.com/devzone/cda/tut/p/id/3450[/url:2jz6xzsf]).
ciao
----------------------------------------
AUTORE: 1168
DATA :01/10/2010 - 08:52:37
----------------------------------------
hai provato a mettere prima un blocco di iniziallizzazione del tuo VI col quale fai passare le periferiche USB fuinchè non trovi quella buona?
Che ne so, interrogando lo strumento e aspettando che ti risponda qualcosa di sensato!
Io facevo così per un semplice VI con delle seriali alle quali l'operatore attacvcava lo scatolicchio e si lamentava quando cambiava porta e il programma non si accorgeva... (capito che utonti
)
§Ciao
----------------------------------------
AUTORE: 927
DATA :06/10/2010 - 09:31:25
----------------------------------------
E' davvero strano che ti si pianta se non selezioni la porta prima... Ma tu usi subito il valore contenuto nel controllo VISA? Non c'è un'attesa, tipo una Sequence Structure, in modo che il terminale venga letto solo dopo che è tutto pronto?
Sulla comunicazione ti posso solo dire che quei convertitori a volte sono bastardi e fanno funzionare la VISA in modo diverso... A me uno faceva sempre attendere tutto il timeout dei Read, anche quando il carattere di terminazione era già arrivato da un pezzo! Ho dovuto cambiare il codice apposta per lui. Se puoi provare un altro convertitore di un'altra marca, potrebbe risolverti all'istante il problema
----------------------------------------
AUTORE: 645
DATA :07/10/2010 - 22:42:17
----------------------------------------
Solitamente l'adattatore USB crea una nuova COM. All'avvio del VI devi entrare in un loop fino a quando l'utente seleziona la porta COM. A questo punto puoi seguire due strade:
a) fai un controllo sulla porta selezionata: invii un comando di riconoscimento dello strumento e aspetti un timeout più lungo del normale. In caso di risposta affermativa il VI continua entrando, per esempio, nel ciclo principale; altrimenti blocchi il VI, avvisi l'utente e puoi tornare nel loop iniziale per aspettare la scelta di una nuova porta (potresti memorizzare il valore inserito in precedenza per non permettere all'utente la scelta di una porta già controllata e dichiarata sbagliata).
b) fai partire il ciclo principale del VI e nel caso di timeout (errore tipico in mancanza di risposta corretta dello strumento) chiudi il VI (avvisa sempre l'utente di ciò che succede!).
----------------------------------------
AUTORE: 2514
DATA :13/10/2010 - 10:32:10
----------------------------------------
Ciao, anch'io uso un convertitore basato sui chip FTDI (RS232-USB). Quando colleghi il dispositivo viene effettivamente creata una nuova COM e non è detto che la COM sia sempre la stessa in ogni sessione. Per evitare casini io ho fatto in modo di "interrogare" tutte le seriali presenti sul PC (uso un blocco VISA Find Resource e gli passo in input la stringa ASRL?*INSTR e lui restituisce una find-list, praticamente un array di stringhe con tutte le risorse seriali che ha trovato nel sistema).A questo punto mando la find-list in un ciclo for in modo indicizzato, faccio una Open Visa ed inizializzo la porta con i parametri che mi servono. Poi mando un comando al quale so che il mio strumento dovrebbe rispondere. Se dopo un pò non ricevo risposte passo alla seriale successiva, altrimenti mi appunto l'indice del ciclo for ed esco. La seriale buona è find_list[indice_ciclo_for], la inizializzo e parto. Se non sono stato chiaro dimmelo che posso mandarti un esempio, ciao!
----------------------------------------
================================================================================
eseguibile che funziona male
================================================================================
AUTORE: 2523
DATA :02/10/2010 - 14:30:52
----------------------------------------
Salve a tutti,
scrivo per chiedere se a qualcuno di voi non sia mai capitato di
creare un installer e un eseguibile con labview 8.6 e che una volta effettuata l'installazione
del tutto su un sistema windows xp o successivi, l'applicazione funzionasse male.
Grazie.
Saluti,
Chobin.
----------------------------------------
AUTORE: 645
DATA :03/10/2010 - 23:12:49
----------------------------------------
Cosa intendi con "funziona male"?
----------------------------------------
AUTORE: 2523
DATA :06/10/2010 - 21:42:15
----------------------------------------
Ciao MagicBotolo,
in sostanza accade che lo stesso eseguibile installato su PC differenti funziona in modo diverso.
Ad esempio: mi è capitato che l'eseguibile dovessi abilitare un pulsante in corrispondenza
di una determinata situazione. Questo si verificava correttamente su certi PC,
mentre su altri, in corrispondenza della stessa situazione, il pulsante non veniva abilitato.
Perchè?
Grazie.
Ciao,
Chobin.
----------------------------------------
AUTORE: 482
DATA :07/10/2010 - 07:49:45
----------------------------------------
Secondo me funziona male perchè è stato fatto male.
Mi spiego meglio.
Probabilmente non sono stati considerati i processi concorrenti e cose simili.
Ad esempio non sono stati inizializzati alcuni valori, o sono state usate variabili locali e globali in piu' punti che possono essere simultanei.
In questo caso a seconda del pc in cui gira il programma, che sia multicore o meno, o cmq in base alle caratteristiche, i processi vengono schedulati in modo diverso e quindi il comportamento è diverso.
Bisogna sempre tenere come priorità la sequenzialità e la sincronizzazione dei processi.
Probabilmente nel tuo programma, non hai usato i dovuti accorgimenti.
----------------------------------------
AUTORE: 43
DATA :07/10/2010 - 08:50:02
----------------------------------------
[quote="gepponline":39cu4bdg]Secondo me funziona male perchè è stato fatto male.[/quote:39cu4bdg]
Concordo.
----------------------------------------
================================================================================
XY graph
================================================================================
AUTORE: 3226
DATA :03/10/2010 - 15:15:34
----------------------------------------
Salve
sto usando labview 9 da circa un mese. Ho un problema
Ho scritto un programma il cui funzionamento si può riassumere:
1) Si stabilisce un intervallo di tensione, l'incremento dV
2) Ogni incremento viene "scritto" in un DAC
3) Un ADC legge un valore
4) viene graficato in XY graph
gira tutto ad eccezione del XY graph. In particolare si vede un punto associato ad ogni coordinata mentre a me serve una linea che unisce i punti.
Potete aiutarmi?
grazie
----------------------------------------
AUTORE: 482
DATA :04/10/2010 - 08:53:16
----------------------------------------
l'XY Graph è un tipo di grafico da utilizzare in determinate circostanze.
In particolare quando gli intervalli tra un punto e un altro non sono costanti.
Questo grafico vuole che ogni volta gli venga passato un array di Y e un array di X e questo ridisegna completamente il grafico di volta in volta.
QUindi non gli devi passare solo l'ultimo punto o lui ti disegnerà solo quello.
Se hai un dato singolo con intervalli costanti nel tempo, l'ideale puo' essere un waveform Chart, o eventualmente un waveform graph se vuoi visualizzare determinati intervalli di dati.
----------------------------------------
AUTORE: 43
DATA :04/10/2010 - 09:27:03
----------------------------------------
[quote="schout_2":1e6wws52]Salve
sto usando labview 9 da circa un mese. Ho un problema
Ho scritto un programma il cui funzionamento si può riassumere:
1) Si stabilisce un intervallo di tensione, l'incremento dV
2) Ogni incremento viene "scritto" in un DAC
3) Un ADC legge un valore
4) viene graficato in XY graph
gira tutto ad eccezione del XY graph. In particolare si vede un punto associato ad ogni coordinata mentre a me serve una linea che unisce i punti.
Potete aiutarmi?
grazie[/quote:1e6wws52]
Ci possono essere + motivi per i quali ottieni punti al posto di una spezzata che li unisce. Ti riporto i + significativi.
Il primo possibile motivo è che il grafico, multi-traccia, considera un punto per ogni traccia invece di aggiungere punti alla stessa traccia.
Il secondo è che il disegno delle linee che uniscono i punti fra loro, x quella traccia, sia disabilitato.
Cmq sia, posta il VI che disegna la traccia, compreso di XYGraph che gli diamo un'occhiata.
bye
----------------------------------------
================================================================================
Convertire FFT a wav file
================================================================================
AUTORE: 2801
DATA :05/10/2010 - 21:17:18
----------------------------------------
Ciao a tutti ,
ho creato un applicativo che usa una dll "bass.dll"(http://www.un4seen.com/) che prende l'audio in ingresso e lo
campiona , questa e' la funziona :
DWORD BASS_ChannelGetData(
DWORD handle,
void *buffer,
DWORD length
);
il punto e' che mi ritornano dei campioni(FFT) formato caratteri stringa (void *buffer ), volevo un aiuto per trasformarli in wav e salvarli su file.
qualcuno sa aiutarmi?
Ciao
i file sono:
http://forums.ni.com/ni/attachments/ni/ ... /delta.zip
----------------------------------------
AUTORE: 927
DATA :06/10/2010 - 09:02:40
----------------------------------------
Sulla trasformazione non ho idea, anche perchè è una questione più di conoscere i formati audio che di Labview... Ma ti faccio notare che Labview ha di suo una tavolozza di funzioni "Sound", dove in particolare dovresti poter usare "Acquire sound" e "Sound write file simple" senza bisogno di DLL esterne
----------------------------------------
AUTORE: 2801
DATA :06/10/2010 - 11:45:19
----------------------------------------
Grazie , ma devo utilizzare questa dll o al massimo sfruttare le ASIO (DLL),
devo fare un acquisizione e riproduzione istantania con tempi di latenza bassissima e il controllo Sound non va bene ho un ritardo dell' audio troppo elevato.
Help!!!
----------------------------------------
AUTORE: 43
DATA :07/10/2010 - 12:01:47
----------------------------------------
[quote="gantarone":3ou524bg]Grazie , ma devo utilizzare questa dll o al massimo sfruttare le ASIO (DLL)[/quote:3ou524bg]
Xchè non usi la BASS_StreamCreateFile?
bye
----------------------------------------
================================================================================
comunicazione Seriale
================================================================================
AUTORE: 3222
DATA :07/10/2010 - 16:18:38
----------------------------------------
Ciao a tutti,
devo configurate un dispositivo elettronico dinamicamente richiamando una dll. Questo dispositivo comnica con una porta seriale, quindi prima di fargli leggere la dll dovrei aprire la porta e in seguito chiuderla giusto?
Poichè non ho molta eserienza in questo campo, a parte il baut rate i data bits i bit di parità e di stop, devo inserire altre informazioni per la comunicazione?
Cioè o visto che ci sono delle interrogazioni da fare, ma non so se devo usarle. Qualcuno puo aiutarmi?
----------------------------------------
AUTORE: 927
DATA :08/10/2010 - 08:36:55
----------------------------------------
Dipende dalla DLL, può contenere lei le funzioni per aprire/chiudere la porta, oppure volere che la apri da fuori e le passi un handler. Come configurazione spesso basta solo il baud rate, ma anche questo dipende. Devi documentarti sulla DLL
----------------------------------------
================================================================================
Save for previous version
================================================================================
AUTORE: 482
DATA :08/10/2010 - 07:52:47
----------------------------------------
...ma ciao!
stocercando di salvare dei VI fatti in labVIEW 2009 in 8.5, solo che mi da un errore.
Cercando sul sito della national ho trovato questo suggerimento:
[code:1qotoy1s] If LabVIEW 8.6 is not available, you can try the following steps:
1. In each event of your event structure, document the events and options as free labels
2. Replace the event structure with a stacked sequence structure
3. Navigate to File»Save for Previous Version... to save the VI for version 8.5
4. Open the VI in LabVIEW 8.5, then replace the stacked sequence structure with an event structure and manually reconfigure the events based on your comments.
[/code:1qotoy1s]
Solo che se io vado sulla event structure con il tasto destro, non mi d al'opzione REPLACE.
E' un problema mio o effettivamente nella versione 2009 non si possono rimpiazzare le event structure??
----------------------------------------
AUTORE: 927
DATA :08/10/2010 - 08:40:00
----------------------------------------
Anche qui da me non c'è alcun Replace
----------------------------------------
AUTORE: 43
DATA :08/10/2010 - 11:40:00
----------------------------------------
[quote="gepponline":1j3hyfk3]...Solo che se io vado sulla event structure con il tasto destro, non mi da l'opzione REPLACE.
E' un problema mio o effettivamente nella versione 2009 non si possono rimpiazzare le event structure??[/quote:1j3hyfk3]
Ma anche nelle versioni precedenti....
Tra l'altro, potendo scegliere, la [event structure] sarebbe + giusto rimpiazzarla con una [case structure]
Stranamente la [case structure] può sostituire un [sequence structure] nonostante il comportamento totalmente diverso...
La sequenza prevede l'esecuzione di tutti i frame per cui i tunnel in uscita non sono condivisibili tra frame
La case structure prevede l'esecuzione di un solo case per volta per cui tutte i tunnel in uscita della struttura sono condivisi in tutti i case xciò non hanno senso nemmeno le "Sequence Local" usate nelle stacked sequence per trasportare valori da un frame ai successivi...
Spero la tua event structure non abbia troppi case.....
io ti consiglierei di crerare tanti subVI, selezionando il contenuto di ogni frame e scrivendoci come commento a quale evento facesse riferimento...
bye
----------------------------------------
AUTORE: 482
DATA :08/10/2010 - 13:17:52
----------------------------------------
..beh alla fine non erano molti case ma mi creava casino spostare tutto e quindi ho optato pe rinstallare labview 8.6 sul portatile e poi da convertire in 8.5 perchè il problema c'e' dal 2009 a 8.5 ma da 2009 a 8.6 no.
----------------------------------------
================================================================================
Leggere file contenente array di stringhe con lw7
================================================================================
AUTORE: 534
DATA :08/10/2010 - 10:04:59
----------------------------------------
Ciao a tutti,
Come posso Leggere un file contenente un array di stringhe alfanumeriche, con lw7?
Grazie per l'attenzione
Saluti
----------------------------------------
AUTORE: 482
DATA :08/10/2010 - 10:08:37
----------------------------------------
read from spreadsheet file
oppure read from text file e poi spreadsheet string to array
----------------------------------------
AUTORE: 534
DATA :08/10/2010 - 10:18:10
----------------------------------------
ciao gepponline,
utilizzando il metodo che mi hai suggerito, nell'array di uscita il caratteri alfabetici contenuti nella tabella letta, sono sostituiti da degli zeri...
cosa fare ???
Grazie
----------------------------------------
AUTORE: 482
DATA :08/10/2010 - 11:15:23
----------------------------------------
no no mi sembra alquanto strano.
Innanzitutto l'array che hai nel file in che formato è?
Qual'e' il carattere separatore tra i vari elementi? L'hai specificato nel blocchetto?
----------------------------------------
AUTORE: 534
DATA :08/10/2010 - 14:25:53
----------------------------------------
Ciao, si tratta di un file di testo che contiene alcune colonne formate alternativamente da numeri e lettere ,divise dal segno di tabulazione, che ho specificato nel programma.
il link mostra il programma e il risultato dell'elaborazione, come vedi, la le colonne che dovrebbero mostrare le lettere contengono erroneamente lo zero
http://img811.imageshack.us/gal.php?g=immagine1pg.jpg
grazie per l'attenzione...
----------------------------------------
AUTORE: 482
DATA :08/10/2010 - 15:23:46
----------------------------------------
eheh...rispondo subito, senno' arriva paracarro e si arrabbia
Non è il programma che sbaglia, sei tu che sbagli a non dirgli esattamente quello che deve fare.
Il blocchetto Array to spreadsheet, ha un ingresso nel quale gli devi dire che tipo di array vuoi in uscita.
Di default ti restituisce un array di Double (DBL), e come sai, in Labview, gli indicatori numerici non possono contenere delle stringhe e quindi le stringhe vengono trasformate in zeri.
se tu all'ingresso incriminato, colleghi una costante fatta da un array di stringhe,, in uscita avrai un array di stringhe e vedrai tutto quello che ti serve.
Cmq puoi usare direttamente il blocchetto read from spreadsheet file (sempre dicendogli il tipo di dato vuoi in uscita).
----------------------------------------
AUTORE: 534
DATA :09/10/2010 - 09:53:56
----------------------------------------
Grazie alle tue spiegazioni, ora funziona!
Saluti
----------------------------------------
================================================================================
Call by reference eseguibile
================================================================================
AUTORE: 482
DATA :11/10/2010 - 15:11:35
----------------------------------------
...ma ciao!
sto convertendo un tool per lavorare con SQLite da LV9Win a LV8.5Linux
Nel pacchetto originale, vengono usati dei vi che vengono chiamati ricorsivamente.
LV8.5 a quanto ho capito, non permette di fare questo passaggio e quindi devo fare la chiamata al subVI ricorsivo, tramite un call by reference.
Il call by reference vuole uno strict type come reference per poter aganciare ingressi e uscite del vi. io inizialmente carico il vi da un certo path nel mio pc, ma cosa dovro' fare poi quando faro' l'eseguibile?
Meglio mettere il vi che vado a chiamare in un percorso noto anche per la macchina target dell'eseguibile?
Non ho mai usato call by reference e quindi se avete suggerimenti, son qui ad aspettarli!
..ma ciao!
geppo!
----------------------------------------
AUTORE: 43
DATA :11/10/2010 - 17:29:15
----------------------------------------
[quote="gepponline":fctkjlk7]...ma ciao!
sto convertendo un tool per lavorare con SQLite da LV9Win a LV8.5Linux
Nel pacchetto originale, vengono usati dei vi che vengono chiamati ricorsivamente.
LV8.5 a quanto ho capito, non permette di fare questo passaggio e quindi devo fare la chiamata al subVI ricorsivo, tramite un call by reference.
Il call by reference vuole uno strict type come reference per poter aganciare ingressi e uscite del vi. io inizialmente carico il vi da un certo path nel mio pc, ma cosa dovro' fare poi quando faro' l'eseguibile?
Meglio mettere il vi che vado a chiamare in un percorso noto anche per la macchina target dell'eseguibile?
Non ho mai usato call by reference e quindi se avete suggerimenti, son qui ad aspettarli!
..ma ciao!
geppo![/quote:fctkjlk7]
Non sono per niente daccordo sull'uso delle chiamate ricorsive.
L'ho già scritto da qualche altra parte nel forum, ma colgo l'occasione per ribadirlo.
Chiamare da dentro un VI se stesso, con una "call by reference" ti dovrebbe essere impedito.
Questo vale sia per il VI stesso sia per i VI chiamanti (cioè tutti i VI della call chain) la cui chiamata è pendente nello stack delle chiamate.
Non so per quale motivo sia usata la ricorsività, ma questa può [b:fctkjlk7][u:fctkjlk7]SEMPRE[/u:fctkjlk7][/b:fctkjlk7] essere sostituita gestendo uno stack:
gli unici esempi per i quali ha senso usare uno stack (o ricorsività) che mi ricordi, sono :
- la interpretazione ed esecuzione di espressioni aritmetiche
- la navigazione in dati strutturati "ad albero"
Quello che devi fare è creare un VI Functional Global che suppoerti le funzioni di :
Init: inizializza un array di dati
Push: aggiunge un dato in fondo all' array
Pop: preleva l'ultimo dato aggiunto in fondo all array.
bye
----------------------------------------
AUTORE: 482
DATA :12/10/2010 - 08:12:34
----------------------------------------
...essendo un toolkit già fatto, non so come e perchè sia stata scelta la ricorsività.
Presumo sia stato un tentativo di avere il codice piu' compatto e quindi tutte i tipi di operazione di una stessa categoria in un unico vi polimorfico.
Fatto sta che ho risolto togliendo dal vi polimorfico le istanze incriminate (erano solo 2 su 8 che avevano questo problema).
In pratica c'era un vi unico che gestiva tutti i tipi di operazione su una tabella.
Quindi quando dovevi eliminare una colonna, poi andava a richiamare se stesso anche per dare in uscita l'elenco delle colonne.
Idem per rinominare una colonna in cui andava ad eliminare quella esistente, poi favea una lista e ci metteva quella nuova.
Togliendo remove column e rename column, la ricorsività non si presenta piu'.
----------------------------------------
AUTORE: 43
DATA :12/10/2010 - 09:54:38
----------------------------------------
[quote="gepponline":wpapvl39]...Togliendo remove column e rename column, la ricorsività non si presenta piu'.[/quote:wpapvl39]
Appppposto così
bye
----------------------------------------
================================================================================
Come creare un array di reference di multicolum(senza ctrl)
================================================================================
AUTORE: 2435
DATA :12/10/2010 - 11:48:32
----------------------------------------
Ciao a tutti,
vi allego un esempio di quello che non riesco a fare..
Vorrei creare una struttura dinamica(usando reference di multicolumn)ma senza crearle dal controllo stesso..
Spero di essere stato chiaro..
Grazie
----------------------------------------
AUTORE: 927
DATA :12/10/2010 - 13:24:36
----------------------------------------
In pratica vuoi ottenere le reference dinamicamente, a runtime?
Se è questo allora puoi usare un Property node con classe=VI e proprietà=Front panel. L'uscita la mandi a un altro Property node con proprietà=Controls[]. Ottieni un array di tutti i controlli del VI (poi dovrai filtrare quelli che ti interessano in base al nome, alla classe o altro)
----------------------------------------
AUTORE: 43
DATA :12/10/2010 - 14:21:13
----------------------------------------
[quote="nic81_2007":2fzglo0b]Ciao a tutti,
vi allego un esempio di quello che non riesco a fare..
Vorrei creare una struttura dinamica(usando reference di multicolumn)ma senza crearle dal controllo stesso..
Spero di essere stato chiaro..
Grazie[/quote:2fzglo0b]
Vai nel FrontPanel del SubVI che hai postato.
Crea Un CtrlRef come da figura allegata
[attachment=0:2fzglo0b]CtrlRef.JPG[/attachment:2fzglo0b]
Trascina la MulticolumnListbox Sul contrlRef appena creato per "tipizzarlo".
Trasforma il controllo affinchè di venti un argomento "required".
Ora , quando chiamerai quasto SubVI Dovrai passare un CTRlRef di una multicolumn Listbox per avere modifiche alla Multicolumn passata.
In alternativa , se non vuoi l'argomento required, devi testare se il reference è valido ogni volta oppure memorizzarlo in uno shift register...
----------------------------------------
================================================================================
APP BUILDER: come impedire la sovrascrittura di un file?
================================================================================
AUTORE: 2514
DATA :13/10/2010 - 09:11:56
----------------------------------------
Ciao a tutti. Ho creato un'applicazione che distribuisco sottoforma di installer creato tramite l'Application Builder. Questa installazione presenta alcuni support file,tra i quali un file di database mdb completamente vuoto che servirà come "base da riempire" al programma che verrà installato. Vorrei evitare, però, che in seguito ad una reinstallazione del programma (con conseguente sovrascrittura del file mdb) l'utente si trovi con il database svuotato. Ovvero vorrei sapere se c'è la possibilità di dire all'installer che se il file è già presente in directory non deve essere sovrascritto. Sapete darmi una dritta? Grazie mille!
----------------------------------------
AUTORE: 1050
DATA :13/10/2010 - 13:08:19
----------------------------------------
Ciao,
a me sembra che non ci sia modo.
Se anche altri confermano potresti almeno proporre in ni.com/ideas che nelle versioni future sia introdotta una possibilità del genere.
----------------------------------------
AUTORE: 645
DATA :13/10/2010 - 13:34:38
----------------------------------------
Si potrebbe cercare il modo di creare il file all'avvio del VI anzichè durante l'installazione... In questo modo, verificando l'eventuale presenza del file all'avvio del VI, si può evitare la sovrascrittura.
----------------------------------------
AUTORE: 2855
DATA :13/10/2010 - 17:12:43
----------------------------------------
Quando faccio partire l'applicazione, vengono riscritti i file di configurazione "se non esistono" (prima installazione oppure cancellazione per errore). Questo a mio avviso è l'unico modo per avere i file con il contenuto che vuoi.
----------------------------------------
AUTORE: 43
DATA :13/10/2010 - 17:26:49
----------------------------------------
[quote="goblin":2rufiktx]Ciao a tutti. Ho creato un'applicazione che distribuisco sottoforma di installer creato tramite l'Application Builder. Questa installazione presenta alcuni support file,tra i quali un file di database mdb completamente vuoto che servirà come "base da riempire" al programma che verrà installato. Vorrei evitare, però, che in seguito ad una reinstallazione del programma (con conseguente sovrascrittura del file mdb) l'utente si trovi con il database svuotato. Ovvero vorrei sapere se c'è la possibilità di dire all'installer che se il file è già presente in directory non deve essere sovrascritto. Sapete darmi una dritta? Grazie mille![/quote:2rufiktx]
il file .mdb deve essere installato in una cartella apposita di configurazione.
Il Tuo sw deve verificare l'esistenza del file prima dell'apertura del DB stesso.
Se il file .mdb non esistesse, il SW dovrebbe copiare il file .mdb vuoto prendendolo dalla cartella di configurazione, nella cartella in cui è atteso.
Se il file .mdb esistesse , il SW dovrebbe non fare nulla e procedere.
Poi si apre il DB... e via
bye
----------------------------------------
AUTORE: 645
DATA :13/10/2010 - 18:58:53
----------------------------------------
[quote="paracarro":2gycey67]...il file .mdb deve essere installato in una cartella apposita di configurazione.
Il Tuo sw deve verificare l'esistenza del file prima dell'apertura del DB stesso.
Se il file .mdb non esistesse, il SW dovrebbe copiare il file .mdb vuoto prendendolo dalla cartella di configurazione, nella cartella in cui è atteso...
[/quote:2gycey67]
Così facendo in pratica viene copiato il database vuoto durante l'installazione e poi viene utilizzata una copia del database (se non già esistente da un'installazione precedente) memorizzato in una particolare cartella?
Interessante... devo provare perchè effettivamente torna utile una soluzione del genere!
----------------------------------------
AUTORE: 2514
DATA :14/10/2010 - 08:10:38
----------------------------------------
Grazie mille dei vostri suggerimenti, effettivamente la soluzione del database vuoto inserito in una cartella "a parte" e controllato dal software invece che dall'installer è un'ottima idea. Bravi e grazie di nuovo!
----------------------------------------
================================================================================
Dimensione plot area xy Graph
================================================================================
AUTORE: 482
DATA :20/10/2010 - 11:42:55
----------------------------------------
...ma ciao!
ho quattro grafici posti uno sotto all'altro per poterli confrontare a colpo d'occhio.
Tutti i vari grafici sono composti dal medesimo numero di punti, tuttavia a seconda della scala che visualizzo in ciascun grafico la plot area mi cambia dimensione.
E' possibile bloccarla a duna dimensione preimpostata o devo ogni volta fargli disegnare il grafico e poi ridimensionare la plot area? (ammesso che sia possibile).
Ho pensato che fosse questione di lunghezza dei numeri sulla scala, ma anche se dimensiono la plot area molto al di dentro del controllo, mi si ripresenta questo fenomeno.
Qualche suggerimento?
----------------------------------------
AUTORE: 43
DATA :20/10/2010 - 13:43:53
----------------------------------------
[quote="gepponline":vbf0pu6d]...ma ciao!
ho quattro grafici posti uno sotto all'altro per poterli confrontare a colpo d'occhio.
Tutti i vari grafici sono composti dal medesimo numero di punti, tuttavia a seconda della scala che visualizzo in ciascun grafico la plot area mi cambia dimensione.
E' possibile bloccarla a duna dimensione preimpostata o devo ogni volta fargli disegnare il grafico e poi ridimensionare la plot area? (ammesso che sia possibile).
Ho pensato che fosse questione di lunghezza dei numeri sulla scala, ma anche se dimensiono la plot area molto al di dentro del controllo, mi si ripresenta questo fenomeno.
Qualche suggerimento?[/quote:vbf0pu6d]
Disabilitare tutti gli Autoscale di tutte le scale comprese quelle non visibili su entrambi gli assi...
Ma immagino tu abbia già fatto, xciò Ti consiglio caldamente l'uso (a anche l'abuso) del solito "Defer Panel Update".
fammi sapere
bye
----------------------------------------
AUTORE: 482
DATA :20/10/2010 - 13:51:45
----------------------------------------
Forse mi sono espresso male.
I vari grafici dello stesso file sono composti dallo stesso numero di punti, ma se cambio file, il numero di punti cambia, quindi, non ho disabilitato i vari update perchè di volta in volta che apro i vari file, ho bisogno dell'autoscale.
Il defer panel update coem potrebbe aiutarmi?
Al momento ho messo una pezza facendogli visualizzare i numeri della Yscale con il minimum field impostato a 6, cosi' mi resta tuttoallineato, solo che per i valori con scale nell'ordine delle unità avro' visualizzato comunque cose tipo "002.00" e non potro' avere valori sopra al "999.99" o sotto al "-99.99"
----------------------------------------
AUTORE: 43
DATA :21/10/2010 - 08:50:44
----------------------------------------
[quote="gepponline":2l80ydg0]Forse mi sono espresso male.
I vari grafici dello stesso file sono composti dallo stesso numero di punti, ma se cambio file, il numero di punti cambia, quindi, non ho disabilitato i vari update perchè di volta in volta che apro i vari file, ho bisogno dell'autoscale.
Il defer panel update coem potrebbe aiutarmi?
Al momento ho messo una pezza facendogli visualizzare i numeri della Yscale con il minimum field impostato a 6, cosi' mi resta tuttoallineato, solo che per i valori con scale nell'ordine delle unità avro' visualizzato comunque cose tipo "002.00" e non potro' avere valori sopra al "999.99" o sotto al "-99.99"[/quote:2l80ydg0]
Non è necessario usare sempre l'autoscale, soprattutto sull'asse X quando si tratta della scala dei tempi, ma non penso sia il tuo caso. A volte è necessario fissare da SW scale predefinite ed è cmq possibile calcolare valori massimi e minimi di punti per entrambe le coordinate ed arrotondare a piacimento.
Se poi il grafico è interattivo si deve poter controllare il cambio scala in genere su entrambi gli assi.
Cmq sia, se devi caricare tracce in un graph E cambiarne le scale, per evitare ridisegni che potrebbero infastidire l'operatore, meglio optare per un uso assennato della "Defer Panel Update".
Si sospende l'aggiornamento del FP. Si caricano tutti i graph e si aggiornano le scale, la plot Area dei grafici e qualunque altro controllo grafico.
Si ripristina l'aggiornamento FP e... paf !!
In un sol colpo avrai tutti i grafici aggiornati correttamente ed apprezzerai un miglioramento di prestazioni del Tuo SW.
bye
----------------------------------------
AUTORE: 482
DATA :21/10/2010 - 11:22:55
----------------------------------------
Non ho mai usato il defer panel update, quindi posto un esempio su come ho intuito si debba usare, e se è corretto, non risolve il mio problema.
Per la cosa dell'autoscale, che io lo imposti manualmente o in automatico non dovrebbe cambiare niente. sempre quello è il numero di punti che visualizzo il casino è perchè si sposta la plot area...
Prova a farmelo capire sul mio esempio se hai voglia.
----------------------------------------
AUTORE: 43
DATA :21/10/2010 - 13:29:10
----------------------------------------
Scusa, ma uso LV8.6.1
----------------------------------------
AUTORE: 482
DATA :21/10/2010 - 13:31:13
----------------------------------------
ecco fatto!
----------------------------------------
AUTORE: 43
DATA :22/10/2010 - 15:04:42
----------------------------------------
Se devi caricare 4 grafici DeferPanel Update migliora, secondo me, la qualità della visualizzazione aggiornando in un sol colpo tutti e 4 i grafici.
La cosa strana è che sembrava cmq non funzionare ricaricando la Proprietà "PlotAreaBounds":
cioè, il grafico veniva riallineato ma si assisteva cmq al fastidioso doppio ridisegno della plot area,.... vabbè insomma funziona anche la forzata riscrittura degli stessi valori nella "PlotAreaBounds" ma non è ottimale.
Per risolvere il tuo proplema basta agire, disabilitando la Proprietà
Advanced--> Auto Adjust Scale
Basta togliere la spunta!!!!!
bye
----------------------------------------
AUTORE: 482
DATA :22/10/2010 - 15:43:57
----------------------------------------
ehm..non ho capito dov'e' sta proprietà che mi risolve il problema...tra le proprietà del grafico non la trovo...
----------------------------------------
AUTORE: 43
DATA :22/10/2010 - 16:45:00
----------------------------------------
[quote="gepponline":161afnc3]ehm..non ho capito dov'e' sta proprietà che mi risolve il problema...tra le proprietà del grafico non la trovo...[/quote:161afnc3]
bah! non sembra sia proprietà modificabile da Diagramma.
Quindi:
Front Panel.
Tasto DX sul Graph
Dal menu che appare
Advanced --> Auto Adjust Scale (togliere la Spunta)
LV8.6.1
bye
----------------------------------------
AUTORE: 482
DATA :25/10/2010 - 08:43:58
----------------------------------------
chiaro! grassssie!
----------------------------------------
================================================================================
Aprire piu' volte lo stesso eseguibile
================================================================================
AUTORE: 482
DATA :20/10/2010 - 13:34:38
----------------------------------------
mi sa che è unargomento già trattato ma non lo ritrovo.
Ho un programma che va ad analizzare dei file.
Se volessi prire l'eseguibile piu' volte per poter avere a video diversi file, si puo' fare? Se non sbaglio c'era un impostazione da mettere nel file ini...
Qualcuno si ricorda come si fa?
----------------------------------------
AUTORE: 482
DATA :20/10/2010 - 13:41:53
----------------------------------------
Occhei, ho trovato la soluzione.
Bisogna inserire nel file .ini dell'eseguibile questa stringa:
allowmultipleinstances=TRUE
----------------------------------------
AUTORE: 660
DATA :22/10/2010 - 13:45:00
----------------------------------------
perchè non lo spostiamo ne: LabVIEW Tips 'n' Tricks
potrebbe far comodo ad altri...
Bye
Max
----------------------------------------
================================================================================
Operazione merge tra 2 celle di una Multicolumnlistbox??
================================================================================
AUTORE: 2435
DATA :25/10/2010 - 11:43:50
----------------------------------------
Ciao a tutti,
è possibile eseguire un Operazione di merge tra 2 celle di una Multicolumnlistbox??
Grazie
----------------------------------------
AUTORE: 43
DATA :25/10/2010 - 13:48:02
----------------------------------------
[quote="nic81_2007":29doncku]...è possibile eseguire un Operazione di merge tra 2 celle di una Multicolumnlistbox??[/quote:29doncku]
Cosa intendiper "merge tra 2 celle"?
Potresti, almeno, fare un esempio?
bye
----------------------------------------
AUTORE: 2435
DATA :25/10/2010 - 14:04:41
----------------------------------------
ok,questo è un esempio di ciò che intendo...
----------------------------------------
AUTORE: 43
DATA :25/10/2010 - 14:42:39
----------------------------------------
[quote="nic81_2007":4kp6wlum]ok,questo è un esempio di ciò che intendo...[/quote:4kp6wlum]
ovviamente è IMPOSSIBILISSIMISSIMISSIMO.
Se è solo un indicatore allora disegnati una tabella in una picture box.
cmq mi sembra che tutto ciò abbia una valenza puramente estetica, o sbaglio...
Auguri
bye
----------------------------------------
================================================================================
Code in processi differenti
================================================================================
AUTORE: 1033
DATA :26/10/2010 - 14:11:09
----------------------------------------
Ciao, ho un problema di comunicazione tra code che presumibilmente appartengono a due processi differenti.
Il problema è il seguente: ho un vi che è l'interfaccia utente di TestStand, questa viene aggiornata da dei vi che risiedono nella sequeza di test di TS. Questi vi e l'interfaccia utente comunicano tramite una coda. Tutto il giro funziona bene fino a quando non trasformo il vi interfaccia utente in un eseguibile. A questo punto sembra i vi e l'interfaccia utente girino in due processi diversi e non sia possibile farli comunicare tra loro tramite una coda.
Vi sembra un'ipotesi possibile? Avete qualche idea per poter far comunicare GUI con vi della sequenza?
Grazie, ciao.
----------------------------------------
AUTORE: 927
DATA :29/10/2010 - 10:55:38
----------------------------------------
Le queue non funzionano da un eseguibile all'altro, sono relative a una singola istanza di Labview.
Puoi usare le Shared variable, se abiliti il buffering si comportano come code
----------------------------------------
================================================================================
File/Cartelle
================================================================================
AUTORE: 2701
DATA :26/10/2010 - 14:37:18
----------------------------------------
Ciao
Ho un problema. Ho una cartella con dei file, devo estrarre questi file uno per uno utilizzando come criterio la data e ora di creazione, ma non ci riesco.
In allegato un esempio. Io voglio estrarre prima il 3333.txt perchè stato creato per primo, utilizzando l'informazione della data di creazione e non il nome del file
Grazie
----------------------------------------
AUTORE: 278
DATA :26/10/2010 - 16:01:18
----------------------------------------
Ciao,
prova ad usare la funzione File/Directory Info, la trovi sotto File I/O -> Adv File Funct. Questa funzione ti restituisce la data relativa all'ultima modifica del file.. se coincide con la data di creazione dovresti poter risolvere il tuo problema facilmente..
Ciao
----------------------------------------
AUTORE: 482
DATA :28/10/2010 - 07:53:28
----------------------------------------
Tra i file dell'OpenG trovi questi Vi.
Dovrebbe fare al caso tuo!
----------------------------------------
================================================================================
Come togliere l'ffetto 3D di un controllo String??
================================================================================
AUTORE: 2435
DATA :28/10/2010 - 17:33:47
----------------------------------------
Ciao a tutti, come posso togliere l'ffetto 3D di un controllo String??(tipo modern)
Grazie
----------------------------------------
AUTORE: 482
DATA :29/10/2010 - 07:28:23
----------------------------------------
utilizzando i controlli di tipo Classic direi
----------------------------------------
AUTORE: 43
DATA :29/10/2010 - 09:24:32
----------------------------------------
Anch'io consiglio "Classic" ed in particolare "Simple String".
Insieme a "Simple Numeric" a "Flat square button" e "square radio button" sono i controlli + semplici, indipendenti (dal S.O.) e spesso costituiscono la scelta migliore.
Se proprio vuoi usare qui controlli, puoi rendere "invisibile" il bordo 3D già semi-trasparente agendo con il cursore a forma di pennello (cambia colore):
Front Panel
Shift + tasto dx del mouse --> appare il menu dei cursori.
seleziona il pennello per il cambio colore.
Rilascia i tasti premuti
premi tasto dx del mouse sul bordo semi-trasparente --> appare il menù colore
premi F e rilascia --> (cambio colore foreground)
Seleziona il colore Trasparente ( in alto a dx quello indicato dalla lettera "T")
Rilascia il tasto dx del mouse
bye
----------------------------------------
================================================================================
Programmare in diversi modi con LabView
================================================================================
AUTORE: 645
DATA :29/10/2010 - 10:36:57
----------------------------------------
Vi segnalo un articolo interessante trovato sul sito della National e comparso nell'ultimo numero di NI News:
http://www.ni.com/labview/whatis/progra ... roaches/i/
----------------------------------------
================================================================================
Problema formatto foglio da stampa cluster.
================================================================================
AUTORE: 2435
DATA :29/10/2010 - 13:58:24
----------------------------------------
Ciao a tutti...
vi spiego il mio problema,ho un clustre che contiene un'immagine di un bollettino(in formatto A4)...
Quando stampo l'immagine di questo cluster però ottengo un'immagine deformata orizzontalmente....
come e cosa posso fare?
Grazie
----------------------------------------
AUTORE: 2435
DATA :29/10/2010 - 14:25:25
----------------------------------------
Ecco un esempio
----------------------------------------
================================================================================
Stampare file...
================================================================================
AUTORE: 2435
DATA :29/10/2010 - 14:57:53
----------------------------------------
Ciao a tutti,
come posso aprire un file ad seempio .jpg .bmp o .text .html(ma sopratutto pdf) e inviarlo alla stampante???
Grazie ancora
----------------------------------------
AUTORE: 43
DATA :29/10/2010 - 16:31:23
----------------------------------------
Utilizzare una bella shell DOS, no?
Scrivi il file STAMPALO.BAT e dentro ci metti la stringa
PRINT /D:<device> "<path del file completo>"
Prova. Io non ho tempo per farlo.
bye
----------------------------------------
AUTORE: 2435
DATA :02/11/2010 - 16:11:47
----------------------------------------
Non trovo il comando giusto...
ad esempio..
PRINT LTP1 "C:\Documenti\picture.bmp"
non funziona
cosa sbaglio?
Grazie
----------------------------------------
AUTORE: 43
DATA :02/11/2010 - 16:55:22
----------------------------------------
[quote="nic81_2007":3813k9c0]Non trovo il comando giusto...
ad esempio..
PRINT LTP1 "C:\Documenti\picture.bmp"
non funziona
cosa sbaglio?
Grazie[/quote:3813k9c0]
Scusami.
Sicuramente a LPT1 bisogna far seguire i ":" per cui
PRINT LTP1: "C:\Documenti\picture.bmp"
ma in realtà il comando print stampa solo file di testo....
per stampare un file .bmp, .jpg, o .pdf
bisogna usare un po' di astuzia...
la mia era solo una traccia per farti ricercare un modo per il quale si eviti di sobbarcarsi l'onere di eseguire la stampa di un qualunque formato file scrivendo codice per ognuno di esso.
Solitamente per ogni formato di file esiste un Viewer o un editor (acrobat Reader x i pdf, paint x le immagini bmp ecc.) installato sulla macchina sulla quale gira la nostra applicazione.
Ora: se da esplora risorse si clicca con il tasto dx del mouse su un file che si vuole stampare, appare un popupmenu che ha come prima voce l'opzione (di solito "Apri" o "Open") che viene attivata con il DoubleClick.
Si noterà che spesso appere anche la voce "stampa" o "print" che significa che quel file può essere stampato immediatamente.
Si tratta di fare in modo di eseguire lo stesso comando per eseguire la stampa da dentro labview, sempre con una shell dos.
Basta cercare nei registri fra le associazioni fatte con l'estensione (.pdf, .bmp) file che ci interessa stampare.
nel mio caso per stampare pdf è associato il comando
"C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe" /p /h "%1"
Basta sostituire a %1 il nome file ed il giuoco è fatto
Cerca le opportune associazioni con le estensioni che ti interessano.
bye
----------------------------------------
================================================================================
Ricerca di un numero in una stringa
================================================================================
AUTORE: 3286
DATA :29/10/2010 - 16:17:16
----------------------------------------
Salve a tutti, sono un nuovo iscritto del forum, e avrei una domanda che può sembrare banale ma per me che sono alle prime armi con Labview sto trovando qualche difficoltà.
Allora, innanzitutto partiamo con dire che utilizzo un Labview versione 6, e sto cercando di interfacciarmi ad un ILXLightwave ldc-3900 tramite una connessione GPIB.
Il mio problema consiste nel fatto che devo controllare con una query se il canale è attivo (usando il GPIB write), dato che status mi dice solo se l operazione è andata a buon fine, devo controllore l' uscita del GPIB read (PURTROPPO E' UNA STRINGA) che mi stampa "zero" se il canale è OFF opp "uno" se ON. A questo punto vorrei far in modo che se il canale è già acceso --> non fare nulla, se il canale è spento --> accendilo. Però per fare questo facevo un confronto tra numeri !!
Come posso fare per convertire????
Soluzione pensata da me (molto basso livello, sono un principiante):
Dato che nella stringa di uscita il valore è 1 o 0, volevo utilizzare "scan from string", per controllare se nella stringa ce uno o zero e poi l' output dello "scan from string" è un numerico e quindi posso procedere col mio programma, ma il FORMAT STRING NON SO' ASSOLUTAMENTE COME USARLO!
----------------------------------------
AUTORE: 43
DATA :29/10/2010 - 16:27:17
----------------------------------------
se hai qualche esperienza di programmazione in C language, è semplicissimo: usa la stessa modalità usata per le funzione "scan" del C come sscanf, fscanf, ecc.
Sennò l'Help on-line di labviù può essere di aiuto.
nel Tuo caso basta specificare il formato "%d", che significa che vuoi leggere un numero intero decimale dalla stringa.
In alternativa puoi usare il VI
Palette "String" --> subPalette "String/Number Conversion" --> "Decimal String to Number"
bye
----------------------------------------
AUTORE: 3286
DATA :29/10/2010 - 20:02:20
----------------------------------------
OK farò come tu mi dici... grazie mille....
----------------------------------------
================================================================================
apertura di un file labview 5.1 con la 8.5
================================================================================
AUTORE: 3207
DATA :02/11/2010 - 09:43:41
----------------------------------------
Salve a tutti,
devo aprire con la versione di labview 8.5 un file creato con labview 5.1. Qualcuno puo' dirmi come posso fare? Ne ho bisogno urgentemente...
Grazie mille
Alessia
----------------------------------------
AUTORE: 43
DATA :02/11/2010 - 11:32:25
----------------------------------------
[quote="alessia":24egjlmy]Salve a tutti,
devo aprire con la versione di labview 8.5 un file creato con labview 5.1. Qualcuno puo' dirmi come posso fare? Ne ho bisogno urgentemente...[/quote:24egjlmy]
Non ti dico la fatica per raggiungere [url=http://zone.ni.com/devzone/cda/tut/p/id/8387:24egjlmy]questa pagina[/url:24egjlmy]...
Basta postare il VI o il gruppo di VI o la libreria completa di .dll al seguito, in questo Forum e qualcuno di buon cuore te lo convertirà in una versione LabVIEW intermedia, che ti consentirà di caricare il VI in LV 8.5
bye
----------------------------------------
================================================================================
scrittura in un file
================================================================================
AUTORE: 2701
DATA :02/11/2010 - 11:37:58
----------------------------------------
Ciao
Deco scrivere su un file una stringa. La stringa è Stazione 55. Non capisco perchè quando salva nel file scrive "Stazione 55" (ci mette le virgolette). Come si fa a toglierle.
In allega l'immagine del programma
Grazie
Riccardo
----------------------------------------
AUTORE: 482
DATA :02/11/2010 - 12:54:46
----------------------------------------
Perchè usi i blocchi per i file di configurazione?
Quei blocchi scrivono un file con una certa sintassi e vanno letti tramite gli stessi blocchi che rispettano quelle caratteristiche.
Se devi semplicemente scrivere una stringa che sia leggibile anche aprendo il file con un editor è meglioche usi il piu' immediato "write text file" che trovi nella palette delle operazioni su file.
----------------------------------------
AUTORE: 2701
DATA :02/11/2010 - 13:08:05
----------------------------------------
[quote="gepponline":1odzfxmw]Perchè usi i blocchi per i file di configurazione?
Quei blocchi scrivono un file con una certa sintassi e vanno letti tramite gli stessi blocchi che rispettano quelle caratteristiche.
Se devi semplicemente scrivere una stringa che sia leggibile anche aprendo il file con un editor è meglioche usi il piu' immediato "write text file" che trovi nella palette delle operazioni su file.[/quote:1odzfxmw]
Non capisco cosa intendi per blocchi....
No devo usare per forza sezioni/chiavi
----------------------------------------
AUTORE: 43
DATA :02/11/2010 - 14:17:49
----------------------------------------
Perchè il parametro evidenziato nell'immagine in Nero è di Default = False
[attachment=0:m36cjedd]WriteStrInIni.jpg[/attachment:m36cjedd]
Quindi
Create Constant --> True
bye
Aggiunta: La presenza di virgolette e di conversione automatica di caratteri speciali è cmq NECESSARIA nei casi in cui alla entry è associato un testo "multi-linea" cioè una stringa che contiene caratteri come <CR> e <LF> (\
\
).
----------------------------------------
================================================================================
utilizzo delle librerie vector per acquisizione dati da CAN
================================================================================
AUTORE: 3207
DATA :02/11/2010 - 15:26:50
----------------------------------------
Ciao,
devo acquisire dati da CAN con una scheda CANcardX. Sono disponibili 3 esempi: OpenCAN.vi, Send&Read.vi e CloseCAN.vi ma non ho ben capito come utilizzarli. Qualcuno potrebbe passarmi qualche esempio più dettagliato di acquisizione dati da can?
Alessia
----------------------------------------
AUTORE: 43
DATA :02/11/2010 - 15:54:01
----------------------------------------
[quote="alessia":94bwxe0y]Ciao,
devo acquisire dati da CAN con una scheda CANcardX. Sono disponibili 3 esempi: OpenCAN.vi, Send&Read.vi e CloseCAN.vi ma non ho ben capito come utilizzarli. Qualcuno potrebbe passarmi qualche esempio più dettagliato di acquisizione dati da can?
Alessia[/quote:94bwxe0y]
uella, tutto bene con i VI in LabVIEW 5? una risposta sarebbe gradita prima di fare un'altra domanda...
Cmq una scheda CANcardX potrebbe essere una Vector... non certo una IXXAT!!!
ci mandi un link così capiamo meglio di cosa parli?
bye
----------------------------------------
AUTORE: 3207
DATA :03/11/2010 - 09:07:30
----------------------------------------
Ciao!
credevo di averti risposto, non mi sono accorta che in realtà il mio grazie non era stato caricato nel forum, chiedo venia! In effetti, la CanCardX è una scheda di acquisizione Vector come ho scritto nel titolo. Ed è delle librerie che mi ha fornito Vector che ho chiesto la conversione dei file da LabView5 a LabView8.5. In effetti nella mia risposta di ringraziamento avevo anche allegato il link al sito NI nel quale ho trovato il file già convertito. Lo riscrivo qui sotto qualora dovesse servire a qualcuno!
http://forums.ni.com/t5/LabVIEW/Convert ... -p/1041726
Nell'allegato VLabSample.llb ci sono i tre esempi che ho citato nel messaggio precedente: Open, Send&Read e Close. Immagino che io debba utilizzare ognuno di questi esempi per ottenere l'acquisizione dei dati ma non so come e se davvero devo integrarli in un unico VI.
Grazie mille per la disponibilità... DAVVERO!
Alessia
----------------------------------------
AUTORE: 43
DATA :03/11/2010 - 10:56:18
----------------------------------------
[quote="alessia":26e3lb5u]...
Nell'allegato VLabSample.llb ci sono i tre esempi che ho citato nel messaggio precedente: Open, Send&Read e Close. Immagino che io debba utilizzare ognuno di questi esempi per ottenere l'acquisizione dei dati ma non so come e se davvero devo integrarli in un unico VI.
Grazie mille per la disponibilità... DAVVERO!
Alessia[/quote:26e3lb5u]
Gentilezza x gentilezza.
Ho usato quelle librerie qualche anno fa.
Mi sono interfacciato direttamente alla .dll, non ho usato quella "roba" che viene rilasciata da Vector e definita libreria , quando si tratta di uno squallidissimo "wrapper" che richiederebbe una elaborazione un po' + accurata...
Tra l'altro non mi ricordo quale, ma c'è pure un errore in una chiamata (una funzione che non viene di solito usata) in cui il tipo di parametro intero non era corretto (16 bit invece di 32 o qualcosa di simile).
Cmq per accedere ad una risorsa CAN devi aprire nell'ordine:
Aprire il Driver - uso della libreira di funzioni
Aprire la Porta - Dispositivo HW e canale o + d'uno se consentito.
Inizializzare le caratteristiche del canale, - bit-rate, BTR, filtri, ecc.
Attivare il/i canale/i
Qua e là si divono fare un po' di "reset" e di "flush" per iniziare con una situazione intonsa.
2 cose su tutte:
- In fase di debug può capitare di interrompere l'esecuzione con il driver CAN "aperto".
In quel caso non è possibile ripartire reinizializzando il Driver senza averlo prima chiuso.
Consiglio: creati un unico VI Functional Global che conservi i riferimenti aperti e che esegua sempre una "chiusura" delle risorse prima della apertura. Questo VI dovrà assolvere alle funzioni di Open e Close generiche di una comunicazione CAN.
- la scheda Vector rispetto ad altre schede è una figata xkè trasferisce in DMA i pacchetti CAN direttamente in RAM: dimensiona opportunamente il buffer che pensi di utilizzare (configurato nella Open Port parametro "receive queue size")
Presta molta attenzione alla funzione "Receive" che toglie i messaggi CAN dal buffer:
l'array di byte che devi passare alla DLL deve avere una dimensione pari a 22 byte (dimensione di un messaggio) moltiplicato per il numero di messaggi che Vuoi estrarre dal buffer.
Se non rispetti questa regola e passi un array sottodimensionato causi un bel crash dell'applicazione...
spero di esserti stato utile
bye
----------------------------------------
AUTORE: 3207
DATA :03/11/2010 - 11:26:33
----------------------------------------
Grazie,
adesso ci provo... non sono sicura di farcela però!
Alessia
mi dispiace che te la sia presa così tanto per la mia disattenzione...
----------------------------------------
================================================================================
Suonare file audio wav
================================================================================
AUTORE: 3297
DATA :03/11/2010 - 16:01:41
----------------------------------------
Salve, sono nuovo del forum. Vediamo chi può aiutarmi a risolvere questo un problema:
Premetto che sto usando labview 8.0 express.
Sto cercando di scivere un vi che serva per fare esercizi di canto. Mi spiego meglio,
in pratica è molto semplice, sul pannello ci sono vari pulsanti. Ad ogni pulsante è associata
una determinata scala musicale che viene eseguita ad una velocità prestabilita, comandata
da un controllo numerico. Le scale non sono un file wav unico, ma sono un vari file wav,
ognuno dei quali rappresenta una nota. Quando premo un pulsante parte un ciclo che fa suonare
tutte le note della scala in sequenza.
Il vi è praticamente già fatto ma c'è appunto un problema:
Purtroppo labview per far suonare il file wav penso utilizzi i driver di windows
(o comunque driver suoi interni) che non sono stati pensati per applicazioni dove la latenza
è importante. Questo mi determina che le note delle scale non suonano a tempo ma hanno un effetto
a "singhiozzo". Volevo sapere se esistono delle funzioni più avanzate di controllo audio, che magari mi
permettano di scegliere quale driver usare, dato che driver a bassa latenza per le comuni schede
in internet se ne trovano tranquillamente (ASIO4ALL ecc..)
Ringrazio in anticipo chi mi risponderà
----------------------------------------
================================================================================
metttere uno stop
================================================================================
AUTORE: 3286
DATA :05/11/2010 - 08:48:09
----------------------------------------
Salve a tutti, avrei una domanda: uso lab view ver 6i e voglio interfacciarmi a un ilxlightwave ldc 3900. Vorrei riuscire a mettere uno stop che mi funzioni in ogni momento! e' possibile??? praticamente esiste una parte del mio prog che mi incrementa il valore di regime a canale aperto a passettini (per non bruciare il laser)! Il problema è che l incremento a passettini è definito da un solo comando macchina!! e vorrei dare la pox all utente d interrompere in qualsiasi momento!! il fatto è che quando apro il canale la macchina è bloccata fino alla fine dell operazione! ma se il mio utente da un valore di regime troppo alto ce il caso che il dispositivo rimanga bloccato per 10 min e quindi voglio fare in modo di poterlo stoppare in qualsiasi momento!!
grazie!
----------------------------------------
AUTORE: 43
DATA :05/11/2010 - 10:21:04
----------------------------------------
Non mi è chiarissimo se il problema sia nello strumento o nel codice scritto in LabVIEW.
Tu posta il codice, così vediamo cosa si può fare...
"Mettere uno stop" o piuttosto mettere un tasto che sospenda l'incremento, potrebbe essere semplice o impossibile.
bye
----------------------------------------
AUTORE: 1168
DATA :05/11/2010 - 11:09:10
----------------------------------------
Se ho capito bene, una volta che tu mandi il setpoint allo strumento, non puoi modificare l'impostazione finchè il setpoint è raggiunto.
Puoi fare tu i passettini... nel senso che continui a mandare allo strumento un setpoint crescente/decreescente, in questo modo puoi fermarti quando vuoi e allo stop anche impostare zero.
Devi solo farti una routine che gestisce la rampa di setpoint quando cambi valore al pannello operatore.
Ciaoooo
----------------------------------------
AUTORE: 3286
DATA :08/11/2010 - 12:54:22
----------------------------------------
ok grazie ci sono riuscito! una cosa: io vorrei utilizzare uno STOP unico nel mio programma, però ogni volta che metto il mio pulsante come condizione di stop non me lo fa fare se lo utilizzo come loval variable ma devo usare un pulsante per ogni condizione!! come mai?????
----------------------------------------
AUTORE: 482
DATA :08/11/2010 - 13:26:30
----------------------------------------
probabilmente il pulsante che hai usato ha come mecanical action un LATCH. Questo ti genera un errore se crei una variabile di quel controllo perchè un pulsnate di tipo latch non puo' avere variabili siccome cambia il suo stato non appena il software ne legge il valore.
Per questo, devi clikkare col tasto DX sul pulsante e alla voce Mechanical action, cambiare il tipo di comportamento. Metti ad esempio uno switch when pressed.
Poi pero' ricordati di settare a false il controllo tramite variabile, ogni volta che viene premuto.
----------------------------------------
AUTORE: 1078
DATA :08/11/2010 - 13:27:27
----------------------------------------
il problema è che stai usando una "Mechanical Action" non correttamente. Tipicamente gli "Stop" hanno per default inpostata la "Letch When Realise". Hai due possibilità per fare quello che vuoi fare tu (sempre se ho capito bene!): una è quello di modificare l'impostazione della Mechanical Action (menu destro sul controllo --> Mechanical Action). L'altra è associare un indicatore al tuo comando di stop e fare riferimento a quello come variabile locale.
Posto un'esempio della seconda tecnica!
----------------------------------------
AUTORE: 3286
DATA :08/11/2010 - 13:35:43
----------------------------------------
grazie ragazzi problema risolto!! veramente gentilissimi tutti!
----------------------------------------
================================================================================
Creazione Tastierino numerico
================================================================================
AUTORE: 3306
DATA :05/11/2010 - 13:39:19
----------------------------------------
Ciao, ho iniziato da poco a interessarmi a LabView. Mi sono letto qualche dispensa e ho svolto esercizi proposti per iniziare a prendere confidenza con lo stesso. Il tutto mi serve per un lavoro di tesi, l'obiettivo è creare un vi che funga da pannello frontale per uno strumento che poi dovrò gestire in remoto. Ovviamente essendo il tutto complicato, e io alle prime armi, non devo completare l'intero lavoro ma cercare di inziare a fare un qualcosa che punti su questa direzione.
Come primo passo vorrei ricreare il tastierino numerico. Lo strumento ne è dotato e attraverso questo è possibile inserire valori nemerici appunto che sono visualizzati poi nello schermo LCD dello stesso e che servono per modificare ad esempio l'ampiezza o la frequenza di un segnale.
Qualcono mi sa consigliare come procedere? Nei vari esempi che ho visto non ho ritrovato niente di simile, ma non credo che sia una cosa molto complicata; il fatto è che ripeto sono agli inizi e anche le cose facile magari mi creano problemi. Ringrazio da ora per eventuali risposte.
----------------------------------------
AUTORE: 482
DATA :05/11/2010 - 15:04:09
----------------------------------------
Io ne ho relizzati un paio che pero' non ti posto, visto che ci vuoi arrivare da solo.
Ne trovi anche in internet di esempi di tastierini numerici in labview.
Comunque, parti dal concetto che essendo un dispositivo di input, è meglio gestirlo con un event structure che a seconda di quale bottone premi, genera qualcosa. Nel tuo caso aggiunge un numero all'indicatore numerico.Da li poi vedi tu come procedere.
Ah ovviamente il punto fondamentale è costruire l'interfaccia a proprio piacimento
----------------------------------------
AUTORE: 3306
DATA :05/11/2010 - 15:31:49
----------------------------------------
Ciao gepponline. Innanzitutto grazie per avermi risposto. Prendo il tuo consiglio e scelgo la strada dell' event structure, ti volevo comunque chiedere se potresti postare qualche esempio visto che hai detto di averne fatti; al punto in cui sono ora avere esempi su cui basarmi a dai quali prendere spunto è quasi indispensabile e mi velocizzano l'appredimento del labview stesso. Grazie mille.
----------------------------------------
AUTORE: 482
DATA :08/11/2010 - 07:23:28
----------------------------------------
Ti posto lo snippet del mio vi.
Questa è una delle possibili soluzioni. Se hai domande, chiedi pure.
Se non sai come si usa lo snippet, è un immagine che se la trascini nel block diagram, si trasforma in codice labview.
Funziona solo con le ultime versioni..non mi ricordo piu' da quale.
Eventualmente tienila buona come spunto per fare tutto per i fatti tuoi.
----------------------------------------
AUTORE: 3306
DATA :08/11/2010 - 08:15:14
----------------------------------------
Ciao gepponline. Grazie per la disponibilità. Nei messaggi privati non mi è arrivato nulla, e neanche nella mail, appena puoi se gentilmente lo rimandi. Grazie ancora.
----------------------------------------
AUTORE: 482
DATA :08/11/2010 - 08:55:31
----------------------------------------
Pardon!
mi son dimenticato di allegare lo snippet!
Eccolo!
----------------------------------------
AUTORE: 3306
DATA :08/11/2010 - 09:25:37
----------------------------------------
Ho fatto una prova con uno snippet creato da me e lo apre senza problemi anche perchè utilizzo l'ultima versione del LabView, qunado però trascino quello che mi hai allegato tu, inizia la ricerca di un file modifica selizione.vi (che non trova) e leggendo il percorso credo sia il file originario da cui hai preso lo snippet. Senza questo non posso caricarlo?
----------------------------------------
AUTORE: 482
DATA :08/11/2010 - 13:22:41
----------------------------------------
si che puoi, basta che gli dici di ignorare il subvi
----------------------------------------
AUTORE: 3306
DATA :08/11/2010 - 14:53:47
----------------------------------------
Ah ok, perdona l'inesperienza. Grazie mille, provo a capirci qualcosa.
----------------------------------------
AUTORE: 482
DATA :08/11/2010 - 15:22:52
----------------------------------------
tieni conto che il subvi che non hai, serve solo per la gestione del tastierino in caso di selezione da parte dell'utente.
Se l'utente non interagisce con l'indicatore modificando la selezione, quella parte non serve.
----------------------------------------
AUTORE: 3306
DATA :09/11/2010 - 09:53:18
----------------------------------------
Ti ho inviato un messaggio privato. Grazie di tutto
----------------------------------------
AUTORE: 3306
DATA :11/11/2010 - 10:31:14
----------------------------------------
Ciao gepponline. Lascia perdere il messaggio privato, ho risolto in parte i problemi. Grazie comunque.
Ti volevo chiedere, ora sto iniziato a capire quello che hai fatto, ma ho un problema. In pratica ho creato un tastierino numeroco attraverso una event structure, ma al momento posso solo vosualizzare le singole cIfre. Cioè se volglio per esempio digitare il numero 19023, premendo i tasti in sequenza, una cofra elimina l'altra, come posso fare?
----------------------------------------
AUTORE: 3306
DATA :11/11/2010 - 10:33:05
----------------------------------------
Dimenticavo , un'altro cosa, come faccio a fare in modo che un tasto ritorni alzato dopo la digitazione?
Grazie mille.
----------------------------------------
AUTORE: 482
DATA :11/11/2010 - 10:58:21
----------------------------------------
Per aggiungere le cifre invece che sostituirle (cos ache era già fatta nel mio vi originale), puoi fare in due modi:
1) usi il concatenate string in cui prendi la stringa prima della pressione del pulsante e gli aggiungi quella successiva
2) leggi la posizione del cursore nel controllo stringa e inserisci la stringa desiderata in quel punto.
Per quanto riguarda il tasto alzato dopo la digitazione, devi usare le mechanical action del pulsante. Le modifichi clikkando col destro sul pulsante e andando alla voce mechanical action. Se vai sulle proprietà, ci sono gli esempi di come si comporta ogni tipo di azione.
Tieni presente che la Switch until è differente dalla latch perchè la latch fa cambiare stato al pulsante subito dopo che il software ne ha letto lo stato, mentre la switch until cambia stato nel momento in cui si verifica il rilascio o la pressione.
Ti dico questo perchè esteticamente i due comportamenti sembrano uguali.
----------------------------------------
AUTORE: 3306
DATA :11/11/2010 - 14:37:12
----------------------------------------
Grazie dell'aiuto gepponline, sulle azioni meccaniche dei pulsanti ok, ma ho ancora problemi sulla visualizzazione in sequenza. Mi interessa capire entrambe le strade possibili, allora:
- nel primo caso non mi è chiaro come prendo la stringa prima e dopo la pressione del pulsante, cioè quella prima della pressione dovrebbe essere la stringa in uscita dal Label. text giusto? e quella dopo? ovviamente se non ho capito male dopo vanno entrambe all'ingresso di un concatenate string e l'uscita la visualizzo in uno string indicator.
- nel secondo caso invece non mi è proprio chiaro come procedere. Potresti spiegarmi come visualizzare la posizione del cursore nel controllo stringa e come inserire la stringa desiderata in quel punto?
Penso che questa seconda strada mi sarà utile anche nell'inserire il segno (+/-) all'inizio della sequenza numerica e la scala del numero (G/n, M/µ, K/m) alla fine. Grazie ancora.
----------------------------------------
AUTORE: 482
DATA :12/11/2010 - 07:28:58
----------------------------------------
ma scusa, non hai il mio vi? è tutto fatto li dentro...
per essere sicuri, ti allego anche il vi che mancava...
----------------------------------------
AUTORE: 3306
DATA :12/11/2010 - 10:23:34
----------------------------------------
Ci sono varie parti che non capisco, altrimenti non starei a fare domande. Continuo a fare tentativi, grazie comunque.
----------------------------------------
AUTORE: 482
DATA :12/11/2010 - 10:35:41
----------------------------------------
un conto è non capirle, ma tu mi stai chiedendo come fare una cosa che li è già fatta
E lisi tratta di capire come funziona il vi e per farlo ticonsiglio di usare la lampadina di debug e vedere cosa fa il software di volta in volta.
----------------------------------------
================================================================================
Creazione di un XControl
================================================================================
AUTORE: 3307
DATA :05/11/2010 - 16:31:46
----------------------------------------
Ciao,
ho creato un XControl composto dalla FlexGrid di microsoft presa tra gli oggetti ActiveX e 2 tasti che simulano una vertical scrollbar (mi servono perchè non riesco a cambiare le dimensioni delle scrollbar della FlexGrid). Essendo il primo XControllo che creo in LabView e non essendo molto esperta ho provato a cercare degli esempi ma quello fornito dall'Help (Dual Mode Thermometer ) non è molto chiaro. Avreste qualche altro esempio da mostrarmi (magari un pò più complesso) o della documentazione più dettagliata?
Intanto provo a spiegare quali sono le cose poco chiare: ho capito che nel Facade, l'evento Display State Change si verifica ogni volta che viene chiamata una proprietà o un metodo relativi al mio controllo. Io ho definito diverse proprietà come, ad esempio, il numero di colonne che la tabella deve avere, la dimensione delle singole colonne, la possibilità di avere la riga di titolo, il testo delle celle del titolo ecc. A ciascuna proprietà corrisponde un elemento nel cluster degli stati.
Se nel VI in cui uso il controllo setto prima la proprietà che mi dice che la tabella ha la riga di titolo e poi la proprietà che mi dice qual è il testo delle celle del titolo, nel facade passo due volte dallo stato Display State Change (corretto?): c'è modo di distinguere quale proprietà è stata settata?
Un altro problema è relativo al tipo di dato. Io ho inseriro come dato l'activeX della flexGrid: è corretto? L'evento Data Change però non si verifica mai. Perchè?
Spero di essere stata abbastanza chiara nella spiegazione...
Grazie in anticipo per l'aiuto.
Rita
----------------------------------------
AUTORE: 1078
DATA :08/11/2010 - 13:10:07
----------------------------------------
Visto che è il tuo primo Xcontrol ti consigli di leggere questo tutorial. Il tutorial si appoggia all'esempio che hai citato che trovi tra gli esempi di LV. Io l'ho letto e l'ho trovato molto utile.
[url:2vdfwwb3]http://zone.ni.com/devzone/cda/tut/p/id/3198[/url:2vdfwwb3]
Buon lavoro!
----------------------------------------
AUTORE: 3307
DATA :08/11/2010 - 16:19:49
----------------------------------------
In realtà avevo già trovato quel tutorial che poi è quello che ho seguito per creare il mio XControl e devo dire che mi è stato abbastanza di aiuto.
Nel frattempo sono andata avanti nello sviluppo e adesso ho un altro problema: ho creato un VI in cui ho inserito il mio XControl e poi l'ho usato come subVI chiamato da un VI esterno. Se faccio girare due volte consecutive quest'ultimo VI, la prima volta il mio controllo viene visualizzato correttamente, mentre la seconda volta la flexGrid sparisce e rimangono solo i tasti che fungono da scrollbar. Non so se il problema dipende dal fatto che la flexGrid è un ActiveX e quindi ci sono delle impostazioni particolari che devono essere settate. Nessuno ha mai creato un XControl con un ActiveX?
Grazie per l'aiuto.
----------------------------------------
AUTORE: 1078
DATA :09/11/2010 - 08:04:04
----------------------------------------
Bhe! Gli XControl sono un'argomento molto complesso, per questo è molto difficile esserti di aiuto se non posti l'XControl a cui stai lavorando. Anche se dovessi essere in grado di replicare qualcosa che si avvicinasse al tuo controllo, potrei non inserire lo stesso errorre, ecco perchè sarebbe opportuno che postassi il codice.
----------------------------------------
AUTORE: 3307
DATA :09/11/2010 - 08:50:49
----------------------------------------
Hai ragione, mi rendo conto che non è facile comprendere il problema...
Ti invio in allegato un progettino con un Xcontrol che ha come unica proprietà quella di settare il numero di colonne della flexGrid. Dentro la cartella ho creato due VI di prova per mostrarti qual è il problema che si verifica:
- il primo VI si chiama VI_Con_XControl e usa semplicemente l'XControl settandone la proprietà NumOfColumns;
- il secondo VI si chiama Richiama_VI_Con_XControl che richiama semplicemnte il primo.
L'errore si verifica in quest'ultimo quando lo faccio girare più volte consecutivamente (a partire dal secondo Run la tabella non viene più visualizzata ma i tasti sì!).
Ti ringrazio per l'interessamento.
Buona giornata.
Rita
----------------------------------------
AUTORE: 43
DATA :09/11/2010 - 10:07:17
----------------------------------------
[quote="Rita":205ff6ay]Hai ragione, mi rendo conto che non è facile comprendere il problema...
Ti invio in allegato un progettino con un Xcontrol che ha come unica proprietà quella di settare il numero di colonne della flexGrid. Dentro la cartella ho creato due VI di prova per mostrarti qual è il problema che si verifica:
- il primo VI si chiama VI_Con_XControl e usa semplicemente l'XControl settandone la proprietà NumOfColumns;
- il secondo VI si chiama Richiama_VI_Con_XControl che richiama semplicemnte il primo.
L'errore si verifica in quest'ultimo quando lo faccio girare più volte consecutivamente (a partire dal secondo Run la tabella non viene più visualizzata ma i tasti sì!).
Ti ringrazio per l'interessamento.
Buona giornata.
Rita[/quote:205ff6ay]
Io lascerei perdere tutto.
Già l'integrazione di un ActiveX dentro labVIEW non è così immediata specialmente se l'activeX è dotato di interfaccia propria come nel tuo caso...
Metterlo in un Xcontrol, con problemi di "istanziamento".... e poi l'activeX deve essere installato e registrato...
In alternativa:
Disegnarsi la griglia e i testi in un Picture control di LabVIEW ? no?!?! è troppo complicato?
Auguri
bye
----------------------------------------
AUTORE: 3307
DATA :09/11/2010 - 11:59:06
----------------------------------------
In realtà la cartella che ho postato è solo una piccolissima parte del progetto dell'XControl che ho realizzato, quindi sarai d'accordo con me nel pensare che lasciare perdere tutto dopo tanto lavoro e soprattutto fatica non è facile da digerire e preferirei indagare ancora un pò sulla misteriosa sparizione della griglia in Run.
Ad ogni modo... cosa intendi quando dici che l'activeX deve essere installato e registrato?
Riguardo invece alla soluzione alternativa che proponi, la griglia deve potersi costruire dinamicamente (il numero di righe non è noto a priori) e poi deve essere possibile gestire i click dell'utente sulle righe per determinare quale riga è stata selezionata. Pensi si possa fare disegnando la griglia in un Picture control?
Grazie.
Rita
----------------------------------------
AUTORE: 43
DATA :09/11/2010 - 13:49:59
----------------------------------------
[quote="Rita":2rwbioav]In realtà la cartella che ho postato è solo una piccolissima parte del progetto dell'XControl che ho realizzato, quindi sarai d'accordo con me nel pensare che lasciare perdere tutto dopo tanto lavoro e soprattutto fatica non è facile da digerire e preferirei indagare ancora un pò sulla misteriosa sparizione della griglia in Run.[/quote:2rwbioav]
Ma sì, ma anche + di un po'.
E' tutta esperienza.
Certo è che il ri-disegno della griglia x es. non è così controllabile come sembra, xkè è affidato all'ActiveX stesso...
[quote="Rita":2rwbioav]Ad ogni modo... cosa intendi quando dici che l'activeX deve essere installato e registrato?[/quote:2rwbioav]
Intendo [url=http://cuinl.tripod.com/Tips/ocxtip.htm:2rwbioav]questo[/url:2rwbioav]
L'activeX non è solo una banale libreria (una raccolta di funzioni per un linguaggio procedurale), ma una libreria che definisce un "oggetto" (con proprietà e metodi) che va istanziato,e se, come nel tuo caso fosse dotato di interfaccia,dovrebbe essere "facilmente integrabile" insieme ad altri oggetti-grafici nell'interfaccia GUI.
Uno dei punti di forza di LabVIEW è proprio quello di avere in sè i controlli e la grafica necessari per sviluppare l'interfaccia senza attingere a fonti esterne: Font a parte, il porting di una GUI da un sistema operativo all'altro con LabVIEW non è poi così traumatico se si usano i controlli implementati nell'ambiente LabVIEW stesso.
L'uso di container ActiveX secondo me è implementato dagli sviluppartori LabVIEW per "completezza" e quindi soffre di possibili/probabili lacune non ben identificate che potrebbero apparire sul + bello qualora l'oggetto sembrasse perfettamente integrato nell'interfaccia.
Questa è la mia impressione.
Tenderei, se fosse possibile, a non utilizzarli nelle mie applicazioni, a meno che non ne fossi costretto x vincoli che non fossero in alcun modo bypassabili.
Quando creerai l'eseguibile della tua applicazione, dovrai portarti appresso sempre quell'activex, installarlo nell'apposita cartella di Windows, registrarlo e dovrai tener conto anche di eventuali librerie o activeX richiamati in cascata all'interno dell'ActiveX stesso.
E questo sarà vero per tutte le applicazioni nelle quali vorrai usare quell'XControl: l'Xcontrol di LabVIEW dovrebbe cmq essere "molto portabile" da un'applicazione ad un'altra e non soffrire di vincoli esterni a LabVIEW.
Sempre sugli ActiveX.
Ricordi di VisualBasic.
Mi ricordo bene di aver fatto un SW in VB che utilizzava un TreeView di Micro$ e che mi diede seri problemi quando lo installai su un Pc sul quale lo stesso ActiveX era già installato, ma era di una versione precedente.
Per colpa di una "versione" diversa di activeX, il mio SW crashava nel momento in cui aprivo il pannello contenente quell' oggetto
[quote="Rita":2rwbioav]Riguardo invece alla soluzione alternativa che proponi, la griglia deve potersi costruire dinamicamente (il numero di righe non è noto a priori) e poi deve essere possibile gestire i click dell'utente sulle righe per determinare quale riga è stata selezionata. Pensi si possa fare disegnando la griglia in un Picture control?[/quote:2rwbioav]
Si può fare, ma è cmq abbastanza complicato.
C'è chi l'ha fatto (non io).
La gestione di selezione attraverso i Click è una bazzecola: l'ho fatto anch'io con gli oggetti Table di LabVIEW ricavando con le coordinate di click, riga e colonna, tenendo ben presente la scrollbar verticale...
bye
----------------------------------------
AUTORE: 1078
DATA :10/11/2010 - 07:52:30
----------------------------------------
[quote="paracarro":2nsrydkg]Uno dei punti di forza di LabVIEW è proprio quello di avere in sè i controlli e la grafica necessari per sviluppare l'interfaccia senza attingere a fonti esterne: Font a parte, il porting di una GUI da un sistema operativo all'altro con LabVIEW non è poi così traumatico se si usano i controlli implementati nell'ambiente LabVIEW stesso. [/quote:2nsrydkg]
Quello che dice [b:2nsrydkg]@pracarro[/b:2nsrydkg] è vero, uno dei punti di forza di LabView è quello della facilità nella portabilità dei SW da un sistema operativo all'altro (sempre che tu abbia l'application builder per tutti i sistemi operativi interessati). D'altro canto uno dei suoi [b:2nsrydkg]grossi[/b:2nsrydkg] difetti è che, non è molto object oriented. Mi spiego meglio: in altri linguaggi di programmazione (ad esempio ambienti .NET sia C# che VB) è possibile caricare e scaricare dinamicamente dei controlli e quindi costruire dinamicamente l'interfaccia utente a seconda del bisogno. Questo è molto utile quando si ha a che fare con tabelle di database di cui non si conosce la dimensione o con file archivio da cui si caricano i dati e poi si devono rappresentare sull'interfaccia utente dinamicamente. In labview non è attualmente possibile caricare dinamicamente dei controlli. Esistono gli array dati con i loro limiti che comunque non hanno la potenza delle matrici di controlli degli altri ambienti. Esistono anche gli XControl che hanno comunque dei grossi limiti (il più importante è che non sono inseribili in Array).
Non concordo, però, con il pensiero di [b:2nsrydkg]@paracarro[/b:2nsrydkg] quando sconsiglia lo sviluppo di applicazioni con l'utilizzo di activeX e oggetti. La programmazione orientata agli oggetti dà un grande vantaggio quando si deve fare manutenzione e aggiornamenti a SW di medie e grandi dimensioni. Una buona OOP consente di ridurre i tempi di sviluppo soprattutto nel riutilizzo del codice. In ultimo è fondamentale e, direi indispensabile, quando si devono progettare software labview che scambiano dati con altri software costruiti con piattaforme differenti.
Tornado al problema de post:
[b:2nsrydkg]@rita[/b:2nsrydkg] purtroppo non sono ancora in grado di aiutarti, non ho installato il controllo ActiveX che utilizzi. Potresti dirmi esattamente che controllo usi ed eventualmente postarlo?
----------------------------------------
AUTORE: 3307
DATA :11/11/2010 - 21:09:09
----------------------------------------
@Ricky
Il controllo che uso è la MSFlexGrid che credo venga installato con il VisualStudio.
----------------------------------------
AUTORE: 1078
DATA :18/11/2010 - 13:46:06
----------------------------------------
mumble...mumble! Purtroppo non ho installato VS. Vedo se riesco ad installare solo la MSFlexGrid. Dammi un po' di tempo!
----------------------------------------
AUTORE: 1078
DATA :18/11/2010 - 13:48:51
----------------------------------------
Scusa che versione usi della MSFlexGrid? La versione per VB6?
----------------------------------------
AUTORE: 3307
DATA :18/11/2010 - 15:03:35
----------------------------------------
Sì, è quella per VB6.
Comunque grazie mille per l'interesse, non ho ancora risolto e non so proprio quale potrebbe essere il problema.
Aspetto con ansia delle good news.
Rita.
----------------------------------------
AUTORE: 1078
DATA :19/11/2010 - 10:55:47
----------------------------------------
Ciao Rita,
purtroppo ho una brutta notizia da darti. Nonostante l'impegno non riesco ad aiutarti. Ho scaricato e registrato l'ocx mancate, ma il mio labview non mi permette di usarlo perchè non licenzato correttamente. Ovviamente non ho software licenziati che usano quel controllo e, visti anche i tempi, non voglio comprarne. Quindi devo abbandonare l'idea di aiutarti. Confidiamo ci sia un volenteroso che abbia VB6 o un software che licenzi la Flexgrid che usi nel tuo X_Control e che sia sufficientemente competente per aiutarti.
In bocca al lupo...
----------------------------------------
AUTORE: 3357
DATA :03/12/2010 - 18:38:42
----------------------------------------
Ciao Rita,
provo a rispondere ad alcune delle tue domande, sempre che tu non abbia già risolto;
- l'evento DISPLAY STATE CHANGE si verifica quando chiami un metodo o una proprietà in scrittura (non in lettura); anche se le proprietà sono modificate da un unico property node ridimensionato l'evento è chiamato più volte, una per ogni proprietà impostata.
- Se si modifica lo stato o il dato, occorre impostare a true il corrispondente flag del cluster Action. Questo serve per far sì che LabVIEW memorizzi il nuovo valore dello stato o del dato.
Mi è capitato di dimenticarlo e di aver impiegato un po' a capire cosa non andava. Tuttavia una modifica allo stato fatta da programma non scatena di per sè l'evento DISPLAY STATE CHANGE, e occorre gestirne la visualizzazione. Poichè questo accade in più casi della struttura ad eventi conviene inserire un case con il codice di refresh da eseguire successivamente.
-mettendo l'activeX come dato, quel che ne risulta effettivamente è il riferimento ad esso, e quindi eventuali modifiche all'oggetto non
scatenano l'evento DATA CHANGE. Inoltre può essere ingannevole: l'utente può credere che usando il refnum si possa accedere direttamente all'activeX.
-il contesto in cui gira l' Xcontrol è diverso (in genere) da quello del VI che lo usa.
-lo stato e i vari dati associati all'Xcontrol sono salvati nel file che lo usa.
-quando si piazza un Xcontrol, esso viene inizializzato con i valori presenti nell'abilità init (che possono essere diversi per
controlli/indicatori)
Ma più che molte parole, prova a dar un'occhiata al tuo XControl modificato.
Usa VI_Con_XControl_2.vi.
Quando c'è l'evento DISPLAY STATE CHANGE o il case di refresh, una finestra di dialogo lo dice esplicitamente.
Prova a cambiare le proprietà (che vengono scritti con write prop) o a leggerle.
I pulsanti laterali incrementano/decrementano il contatore della riga (che viene indicato da una finestra di dialogo)selezionando una cella e cliccando SEL, viene scritto "ciao" sulla cella.
Il Pulsante Clear pulisce la tabella usando il corrispondente metodo dell'activeX. Per usarlo ho passato il riferimento dell'activeX nello stato. Se vuoi sapere quale proprietà è stata modificata puoi gestire il codice direttamente nel VI che definisce la proprietà (o i 2 se read/write)
Ci sono dei problemi a renderlo invisibile; probabilmente la proprietà di visibilità dell'activeX va impostata a modo suo, ma non ho approfondito la questione (con altri Xcontrol non c'è questo problema)
L'uso di un activeX in un Xcontrol è comunque una soluzione macchinosa...
Per quanto riguarda il problema della visualizzazione in subVi, l'ho riscontrato con altri Xcontrol contenenti activeX; ovviamente con Xcontrol normali ciò non accade. Al momento non ti saprei dare una spiegazione, se non imputandola ad un possibile baco.
Ho fatto le verifiche su LabVIEW 2009; volevo provare su LabVIEW 2010, ma non ne ho ancora avuto tempo.
Come work-around per chiamare il subVI in modo corretto, posso dirti di usare il caricamento dinamico con un CallByReference node: in questo caso funziona e viene visualizzato correttamente.
Se ti servono informazioni sul caricamento dinamico, basta dirlo.
Spero di esser stato utile...
Buona giornata
Luigi
----------------------------------------
AUTORE: 3307
DATA :06/12/2010 - 14:55:25
----------------------------------------
Grazie mille per i suggerimenti. Alla fine ho risolto il problema della visualizzazione richiamando il vi contenente l'XControl in maniera programmatica attraverso un InvokeNode e funziona!!!
----------------------------------------
================================================================================
Modifica dei valori degli assi
================================================================================
AUTORE: 3306
DATA :07/11/2010 - 19:45:17
----------------------------------------
Ciao, ho un problema che non riesco a risolvere. Vorrei cambiare manualmente il valore iniziale, finale e intermedio dell'asse x di un grafico. Mi spiego meglio, in pratita vorrei creare tre tasti che se spinti mi possano modificare rispettivamente il valore iniziale, finale o intermedio dell'asse delle ascisse, quindi se ad esempio mando in run e scrivo in un numeric controll il valore 100, e poi premo il tasto del valore finale, dopo averlo fatto questo valore si deve modificare e di conseguenenza anche quelli intermedi. Qualcuno mi sa dire se è possibile farlo? e se si come? Grazie per una eventuale risposta.
----------------------------------------
AUTORE: 482
DATA :08/11/2010 - 07:24:59
----------------------------------------
si, è possibile, devi cercare tra le proprietà del grafico quella relativa alla scala che vuoi modificare (X o Y) e che si chiamano Maximum e minimum.
----------------------------------------
AUTORE: 3306
DATA :08/11/2010 - 08:11:33
----------------------------------------
Ciao gepponline. Ok ci provo, grazie mille.
----------------------------------------
AUTORE: 3306
DATA :16/11/2010 - 08:50:45
----------------------------------------
Ciao. Ma andando nelle proprietà del grafico e nella scala posso si modificare il valore massimo e minimo di un asse, però quello che invece vorrei fare è modificarlo quando il vi è in run, inserendo il valore dal "famoso tastierino" in un numeric controll e da li premendo ad esempio il tasto ASSE X MAX modificare il valore finale dell'asse x. Non so se è chiaro quello che vorrei fare. Comunque è possibile farlo? Grazie.
----------------------------------------
AUTORE: 482
DATA :16/11/2010 - 10:08:43
----------------------------------------
assolutamente si.
Li si stratta solo di programmazione.
Nel senso che puoi scegliere tu come farlo, ad esempio:
Un controllo per ogni max e min delle varie scale, oppure:
con un ring control fai scegliere quale valore di quale scala vuoi modificare poi con il tastierino numerico fai inserire un valore, poi quel valore, che è in stringa, lo converti in numero e lo passi al property node scelto.
----------------------------------------
================================================================================
Generare Eventi non user
================================================================================
AUTORE: 1078
DATA :08/11/2010 - 13:34:38
----------------------------------------
Ciao a tutti....
Vorrei generare degli eventi che non sianao eventi "Utente". Nel particolare caso devo generare l'evento "Pannel close?" di labview.... qualcuno sa come generare quell'evento? Attenzione: l'evento non viene generato tramite l'invoke node pannel close!
Grazie a tutti!
----------------------------------------
AUTORE: 43
DATA :08/11/2010 - 14:34:53
----------------------------------------
[quote="Ricky":2jgujyn4]Ciao a tutti....
Vorrei generare degli eventi che non sianao eventi "Utente". Nel particolare caso devo generare l'evento "Pannel close?" di labview.... qualcuno sa come generare quell'evento? Attenzione: l'evento non viene generato tramite l'invoke node pannel close!
Grazie a tutti![/quote:2jgujyn4]
Puoi generarli. Che problema c'è?
Usa le funzione della Palette "Events" (Register For Events, Create User Event, ecc.)
Nella event Structure che gestirà l'evento "Panel Close?" aggiungi (o duplica tale gestione) per lo user event che definirai Tu...
bye
----------------------------------------
AUTORE: 482
DATA :08/11/2010 - 15:21:43
----------------------------------------
ma sbaglio o lui chiedeva proprio di non usare gli user event?
----------------------------------------
AUTORE: 43
DATA :08/11/2010 - 16:03:54
----------------------------------------
[quote="gepponline":3huegaiq]ma sbaglio o lui chiedeva proprio di non usare gli user event?[/quote:3huegaiq]
Vabbè...
La struttura "Event" gestisce solo eventi di interfaccia cioè "user Event".
Secondo me, si vorrebbe generare un evento "non di interfaccia", che possa essere accettato dalla struttura Event ...
Ma, mentre per i controlli si può indurre un "cambio valore segnalato da evento" che corrisponde all' evento di "Value Change" provocato dalla modifica del controllo da GUI, agendo sulla proprietà "Value (Signaling)", così Ricky vorrebbe indurre quell'evento di chiusura FP.
Siccome ciò non è possibile ( a meno di spostare e simulare il click del mouse sulla "X" in alto a dx della finestra, cmq possibile ma inutilmente complicato), la soluzione + agile, penso sia quella che ho suggerito...
bye
----------------------------------------
AUTORE: 482
DATA :09/11/2010 - 07:14:47
----------------------------------------
Ma non ho capito, vuole GESTIRE l'evento e fare qualcosa o vuole fare in modo di chiudere il pannello senza che nessuno clikki la X?
----------------------------------------
AUTORE: 1078
DATA :09/11/2010 - 07:59:28
----------------------------------------
Innanzi tutto grazie ad entrambe per la partecipazione e per i suggerimenti.
Effettivamente non ho trovato un metodo diretto per scatenare l'evento "Panel Close?" che come ha giustamente evidenziato @paracarro viene scatenato solo quando l'utente clicca sulla "X" del FP. Dopo vari tentativi anch'io sono giunto ad una conclusione simile a quella di @paracarro. Nel mio software ho una struttura Producer-Consumer gestita da Notifier. In alcune parti del consumer, utilizzando lo "User Event", genero un evento che emula il "Panel Close?" poi gestisco tutti gli eventi che scatenano la chiusura del programma Notificando al consumer lo stesso messoggio che gestirà la chiusura del programma. Questo mi serve per chiudere tutte le risorse aperte, salvando senza perdita di dati i buffer su disco.
Grazie ancora a tutti...!!
----------------------------------------
================================================================================
inizilizzazione waveform chart
================================================================================
AUTORE: 3286
DATA :09/11/2010 - 13:57:51
----------------------------------------
Scusate la domanda stupida, ma come faccio a inizializzare un waveform chart a zero.. cioè che quando avvio il programma mi parta sempre da zero e col grafico pulito????
----------------------------------------
AUTORE: 43
DATA :09/11/2010 - 14:12:23
----------------------------------------
[quote="daddo_ska":1t9d8pwa]Scusate la domanda stupida, ma come faccio a inizializzare un waveform chart a zero.. cioè che quando avvio il programma mi parta sempre da zero e col grafico pulito????[/quote:1t9d8pwa]
Scrivi un bell'array vuoto nella proprietà "History data" (History)
bye
P.S. usate i graph e non i chart
----------------------------------------
AUTORE: 3286
DATA :10/11/2010 - 09:44:35
----------------------------------------
scusa ma non trovo la proprieta history! dov'è???
----------------------------------------
AUTORE: 43
DATA :10/11/2010 - 09:58:22
----------------------------------------
[quote="daddo_ska":32u3kyxz]scusa ma non trovo la proprieta history! dov'è???[/quote:32u3kyxz]
FrontPanel
Premi tasto dx del mouse sul Chart
Create --> Property Node --> History Data
History Data è l'ultima voce del menu' delle property.
----------------------------------------
AUTORE: 3286
DATA :06/12/2010 - 14:58:35
----------------------------------------
ma come faccio a collegarli.. xioè io ho fatto quello che mi dicevi.. ma non reisco a collegare history a un array vuoto
----------------------------------------
AUTORE: 43
DATA :09/12/2010 - 09:37:02
----------------------------------------
[quote="daddo_ska":5fm71on9]ma come faccio a collegarli.. xioè io ho fatto quello che mi dicevi.. ma non reisco a collegare history a un array vuoto[/quote:5fm71on9]
beh! mi aspettavo che ti saresti sforzato di capire il funzionamento, quantomeno leggendo l'Help online.
Un antico adagio recitava: < aiutati che il ciel t'aiuta >
Però se non hai pazienza e non Ti piace programmare in genere, non farlo!!! ci sono un sacco di cose che puoi fare nella vita!!!!!
cmq, vai col tasto dx del mouse sulla proprietà che hai creato nel diagramma e scegli la prima voce
"Change All To Write" oppure
"Change To Write"
Vedrai il piccolo triangolino nero posto in fondo al nome della proprietà spostato davanti al nome stesso.
Attento se lo fai 1 volta, rifacendolo ti apparirà
"Change All To Read" oppure
"Change To Read" che non devi selezionare.
In quella proprietà ci devi scrivere e non devi leggerla!!!!!
A questo punto tasto dx del mouse di nuovo sulla proprietà e scegli
Create --> Constant
e la inizializzazione è completata
bye
----------------------------------------
AUTORE: 3962
DATA :11/11/2011 - 09:14:18
----------------------------------------
buongiorno a tutti
ho un problemino sul reset del grafico, riesco a pulire le traccie ma non la plot legend.
Nel programma ho creato un property node dove in funzione dei canali di acquisizione mi setta il nome del plot prendendo da un arrray stringa precedentemente creato.
Il problema, a parte che non me li metti nell'ordine giusto in cui sono scritti nell'array, è che ad ogni lancio del programma mi va a ricreare nuovi plot.
Ho provato ad aggiungere "plot.name" connesso ad un "epty string" dove collego un array vuoto a "history data" ma non cambia nulla.
Qualche idea?
grazie
Luca
----------------------------------------
AUTORE: 3962
DATA :14/11/2011 - 09:13:40
----------------------------------------
Nessuno riesce ad aiutarmi a risolvere il problema?
----------------------------------------
AUTORE: 482
DATA :14/11/2011 - 10:05:14
----------------------------------------
i plot sono un entità slegata dal grafico.
Quindi quando li manipoli programmaticamente, ogni volta devi inizializzare l'array, associarli al rispettivo grafico e settare ad ognuno le proprietà.
Per gestirli di solito si usano i cicli FOR.
----------------------------------------
================================================================================
Gestione memoria
================================================================================
AUTORE: 3313
DATA :09/11/2010 - 16:38:46
----------------------------------------
Buongiorno,
sto cercando di ottimizzare la gestione della memoria di un programma di analisi statistica che si sviluppa in vari VI a partire da uno principale. Per limitare l'utilizzo della memoria ho messo in ogni VI la funzione "request deallocation", che se nn sbaglio dovrebbe deallocare la memoria relativa al VI una volta chiuso. Osservando il task manager effettivamente la memoria viene deallocata ma una volta ricaricati i VI per qualche secondo prima dei dati nuovi appaiono quelli vecchi che quindi sono stati conservati da qualche parte e occupano spazio. Come faccio a eliminarli definitivamente cosi' da risparmiare memoria? ci sono altri modi di ottimizzare la memoria?
grazie dell'attenzione!
e scusate la mia ignoranza ma e' la prima volta che ho a che fare con problemi di memoria!
----------------------------------------
AUTORE: 43
DATA :09/11/2010 - 18:17:07
----------------------------------------
[quote="Paolo87":18rpjf2t]Buongiorno,
sto cercando di ottimizzare la gestione della memoria di un programma di analisi statistica che si sviluppa in vari VI a partire da uno principale. Per limitare l'utilizzo della memoria ho messo in ogni VI la funzione "request deallocation", che se nn sbaglio dovrebbe deallocare la memoria relativa al VI una volta chiuso. Osservando il task manager effettivamente la memoria viene deallocata ma una volta ricaricati i VI per qualche secondo prima dei dati nuovi appaiono quelli vecchi che quindi sono stati conservati da qualche parte e occupano spazio. Come faccio a eliminarli definitivamente cosi' da risparmiare memoria? ci sono altri modi di ottimizzare la memoria?
grazie dell'attenzione!
e scusate la mia ignoranza ma e' la prima volta che ho a che fare con problemi di memoria![/quote:18rpjf2t]
Mia esperienza personale.
Fino a LabVIEW 7.x esisteva nelle opzioni LabVIEW la voce: "Deallocate memory as soon as possible".
Ora questa voce non è + disponibile per ragioni di performance.
Che senso ha allocare dinamicamente spazio di memoria chiedendolo al S.O., per poi cederlo all' uscita dal VI?
Non ha molto senso, se quella funzione, quel VI, viene chiamato 1000mila volte allocando e deallocando in continuazione memoria costringendo il programma ad interagire x questo motivo con il S.O.
Meglio quindi per LabVIEW gestirsi la memoria per i fatti suoi: una volta allocata la memoria non viene ceduta al S.O. ma viene ri utilizzata alla chiamata successiva al medesimo VI.
Quindi la funzione "request deallocation" va usata in quei VI chiamati poco e che fanno molta allocazione dinamica.
Sto pensando a tutti i VI che fanno "inizializzazioni" di array, di configurazione e in genere di risorse.
Secondo me, non ha senso utilizzare la "request deallocation" a mani basse nei VI chiamati a ripetizione dentro i loop.
Riguardo i dati che "appaiono" vecchi, dici bene appaiono, perchè uno dei modi per ottimizzare le performance è quello di non lasciare aperti i FP (FrontPanel dei SUBVI):è corretto che i dati vecchi appaiano nel Front Panel fino alla successiva chiamata. Che c'è di male? Il Problema saranno semmai ben altri... Evitare x es. di passare grosse moli di dati da un VI all'altro (matrici multidimensionali di numeri in virgola modile o peggio di stringhe oppure usare grafici enormi che comportano ridisegni solo se il FP è aperto) può essere un buon inizio nella ricerca delle ottimizzazioni.
Per evitare continue allocazioni di array che crescono un elemento per volta evitare l'uso di "Build Array" come se fosse la peste!!
Allocare array e matrici inizialmente e procedere di "replace Singole Element" please!!!!!!
Forse da LabVIEW 8.5 è disponibile la fantastica funzione "In Place Element Structure" che trovi nella palette "Memory Control".
Beh! Può cambiarti la vita!!
Da
Tools --> Profile --> Show Buffer Allocations...
noterai tutti i punti neri che indicano i luoghi dove vengono fatte allocazioni. Tanti eh!!! Allora ti sorprenderà vedere come utilizzando opportunamente la "In place" molti punti neri se ne vanno via, un po' come con quel prodotto che fa sparire i brufoli dalle facce degli adolescenti...
Attualmente uso LV 8.6.1, ma se usi versioni + recenti di LV potrai passare per argomento ai subVI matrici o stringhe di dati sostituendo tali argomenti con puntatori tipizzati (vabbè si ritorna all'antico,... ma quando ci vuole...)
Altro per ora non mi viene in mente.
Cmq dal post che hai scritto, sembra tu voglia utilizzare minima quantità di memoria a scapito della CPU:
A meno che non stia parlando di un FW o cmq di una implementazione di LabVIEW RealTime non focalizzerei la mia attenzione solo sull'uso minimale della RAM, ma piuttosto, dato che i PC di oggi dispongono di una quantità smisurata di RAM e di + core, cercherei, se possibile, di ottimizzare anche l'utilizzo della CPU con le fantastiche nuove potenzialità MULTICORE offerte dalle + recenti versioni di LAbVIEW
bye
----------------------------------------
AUTORE: 3313
DATA :09/11/2010 - 18:31:14
----------------------------------------
ti ringrazio cerchero' di sfruttare i tuoi consigli!
grazie bye
----------------------------------------
AUTORE: 3313
DATA :10/11/2010 - 17:57:12
----------------------------------------
Ho provato a usare "In Place Element Structure" ma nn riesco a capire come funziona. Mentre con il tool che mostra l'allocazione relativa ai buffer ho visto proprio quello che mi dicevi... una distesa di quadratini neri. Il problema è che il programma non l'ho scritto io ed è stato impostato sullo smodato utilizzo di variabili globali e locali e se ben ho capito ogni volta che viene usata una di questi due tipi di variabili viene allocato dello spazio per creare una copia dei dati relativi alla variabile. E le variabili con cui ho a che fare sono array in 2 e 3 dimensioni per cui nel momento in cui lavoro con file piu' grossi, di circa 300 Mega, dopo una serie di operazioni raggiunge il limite della memoria. Posso migliorare la mia situazione con "In Place Element Structure"? come funziona che nn riesco a capirlo? (gli array del mio programma vengono plottati su xy graph e elaborati in varie forme per estrazione di varie informazionie danno origine a ulteriori array)
Grazie dell'attenzione!
----------------------------------------
================================================================================
Come collegare un punto ad un'altro punto
================================================================================
AUTORE: 2600
DATA :10/11/2010 - 07:57:48
----------------------------------------
Ciao,
se ho un progetto vi che non mi stà su tutto lo schermo del pc , faccio una fatica bestiale usando il "wiring tool" (il filo per intenderci) per collegare un punto ad un'altro trascinando il filo con il puntatore del mouse al bordo dello schermo su gu destra e sinistra..
ma non c'e' un metodo più comodo ?
grazie
Spectre
----------------------------------------
AUTORE: 1078
DATA :10/11/2010 - 09:06:08
----------------------------------------
Si che c'è... è quello di usare tanti subVI, con tecnica a "Matriosca". Usare questa tecnica ha diversi vantaggi tra cui quello di migliorare la leggibilità del codice senza degradarne le prestazioni!!
----------------------------------------
AUTORE: 43
DATA :10/11/2010 - 09:26:14
----------------------------------------
[quote="spectre1980":29nuxabf]Ciao,
se ho un progetto vi che non mi stà su tutto lo schermo del pc , faccio una fatica bestiale usando il "wiring tool" (il filo per intenderci) per collegare un punto ad un'altro trascinando il filo con il puntatore del mouse al bordo dello schermo su gu destra e sinistra..
ma non c'e' un metodo più comodo ?
grazie
Spectre[/quote:29nuxabf]
viewtopic.php?f=1&t=4005&p=17756
Leggi il mio penultimo commento.
----------------------------------------
================================================================================
Reference di un elemento di array
================================================================================
AUTORE: 1033
DATA :10/11/2010 - 15:05:05
----------------------------------------
Ciao, mi sto incasinando con una cosa che mi sembrava molto semplice ( e probabilmente lo è). Ho un array di cluster ed ho bisogno di cambiare le proprietà degli elementi del cluster, ma solo di alcuni elementi dell'array. Quando ho il ref del cluster usando la property--> AllControls ricavo anche le property degli elementi del cluster. Il mio problema è avere il reference dell'elemento dell'array. Se uso la property arrayElement-->Reference funziona ma solo sull'elemento che ho selezionato con il mouse. Non riesco a farlo programmaticamente.
Grazie, Ciao.
----------------------------------------
AUTORE: 43
DATA :10/11/2010 - 15:56:26
----------------------------------------
[quote="Altomare":3dn0dham]... Ho un array di cluster ed ho bisogno di cambiare le proprietà degli elementi del cluster, ma solo di alcuni elementi dell'array. ...[/quote:3dn0dham]
Non si può fare e non ha senso farlo.
Gli elementi che compongono un array sono diversi [u:3dn0dham]per valore[/u:3dn0dham], e per nessun altro motivo. Mentre sono identici per tipo di dato ed anche per aspetto "grafico".
Altrimenti quelle proprietà (penso ad un testo di una caption o ad colore di sfondo di un controllo) dovrebbero far parte dei campi del tuo tipo cluster, che, non necessariamente ha un aspetto grafico visibile: del Tuo cluster puoi creare costanti e metterle nel diagramma, senza che appaiano in un front panel.
bye
----------------------------------------
AUTORE: 822
DATA :18/06/2014 - 08:39:43
----------------------------------------
Scrivo qui per non aprire un altro post di argomento uguale.
Paracarro non ho capito il suggerimento che dai alla fine del post. Supponiamo di avere un array di 10 cluster, vorrei disabilitare il controllo dei cluster agli indici 5,6 e 9 e gli altri lasciarli abilitati. C'è un modo per farlo?
Grazie.
----------------------------------------
AUTORE: 301
DATA :18/06/2014 - 10:38:04
----------------------------------------
che io sappia....non c'è modo.
Un array è un insieme di dati omogenei, quindi, gli oggetti che lo compongono sono tutti "uguali" tra di loro, tranne che per valore.
Se disabiliti un componente di un cluster, questo verrà disabilitato nel tipo di dato (cluster) contenuto nell'array.
Aris
----------------------------------------
AUTORE: 482
DATA :19/06/2014 - 07:09:22
----------------------------------------
se è un array statico puoi convertirlo in un cluster al massimo
----------------------------------------
AUTORE: 43
DATA :22/07/2014 - 16:04:30
----------------------------------------
[quote="giuseppe.l74":29h9lmie]Scrivo qui per non aprire un altro post di argomento uguale.
Paracarro non ho capito il suggerimento che dai alla fine del post. Supponiamo di avere un array di 10 cluster, vorrei disabilitare il controllo dei cluster agli indici 5,6 e 9 e gli altri lasciarli abilitati. C'è un modo per farlo?
Grazie.[/quote:29h9lmie]
scusa se rispondo solo ora
il problema è relativo all'interfaccia grafica GUI e non al dato in memoria...
Quindi tu puoi avere in memoria un array di 10 elementi ma non necessariamente devono essere tutti visibili.
Se DEVI X FORZA gestire degli attributi in modo differenziato x cluster che appaiono visivamente identici, beh, nn hai alternative, devi duplicarli!!!!
A questo punto però, puoi gestirti un array di reference che puntano ai cluster visualizzati e di conseguenza puoi "indicizzarne" le modifiche.
Spero di essere stato chiaro
bye
----------------------------------------
================================================================================
Gestione file di risorse
================================================================================
AUTORE: 2088
DATA :12/11/2010 - 08:57:40
----------------------------------------
Buongiorno a tutti,
E' già da un po' che lavoro con labview e ho toccato con mano diverse versioni, ma c'è una cosa che ancora non sono riuscito a fare, e mi sembra veramente troppo semplice perchè non sia possibile.
Il mio obiettivo è questo: creare e/o usare dei file di risorse come si intendono in c++.
Nel caso specifico che sto trattando, ho una serie di file di testo che contengono alcuni parametri importanti per il mio programma; vorrei poterli inglobare nel progetto in modo che vengano racchiusi nell'exe eventualmente creato.
Anche se li includo nel progetto, come faccio a dire che la radice di quei file è il progetto e non il path statico sul disco?
Prendendo a paragone C++ con le librerie QT, se il percorso del file inizia con "/test/prova" o "C:/test/prova" (versione linux e windows) è un path reale su disco, mentre se inizia con ":/test/prova" è un path fittizio che ha come radice il progetto stesso (più precisamente la radice è rappresentata dalla radice del file di risorse, qrc in QT, rc in c++).
E' possibile ottenere qualcosa del genere anche con i progetti Labview?
Avete qualche idea su come sia possibile farlo?
Grazie mille a tutti
----------------------------------------
AUTORE: 482
DATA :12/11/2010 - 09:29:38
----------------------------------------
nelle costanti della palette dei file trovi Application Directory oppure current vi's path.
Queste due costanti ti permettono di risalire a percorso del tuo progetto o applicazione, indipendentemente da dove esso sia situato all'interno delle risorse.
----------------------------------------
AUTORE: 2088
DATA :12/11/2010 - 10:18:34
----------------------------------------
Ma in questo modo i file restano comunque legati al disco, e utilizzano sempre un path fisso, anche se mascherato dalle costanti.
In pratica, se io compilo il mio software in un exe, quando sposto l'exe, eventualmente su un'altra macchina, in apertura darà errore perchè non trova più quel file dico bene?
Quello che vorrei fare è cercare di inglobare il file che mi serve nell'exe. In modo da non doverlo più andare a cercare all'esterno.
E' possibile?
Grazie delle vostre risposte
----------------------------------------
AUTORE: 482
DATA :12/11/2010 - 10:43:08
----------------------------------------
ah occhei, si, nelle opzioni di build puoi includere dei file nel progetto tramite la voce Source Files e utilizzando la casella Always included.
Pero' mi chiedo....che senso ha avere un file di risorse con dentro dei parametri se poi non puoi accedervi a modificarli esternamente al programma?
Non sarebbe piu' comodo avere un vi globale?
I file di supporto esterni sono utili se sono modificabili indipendentemente dall'applicazione, e quindi con un percorso proprio, ma se sono inclusi nell'eseguibile ogni volta ch emodifichi anche solo uno dei parametri dovresti ricompilare di nuovo l'eseguibile, e allor a aquesto punto, meglio secondo me usare un vi con dentro tutte le variabili globali che ti servono.
----------------------------------------
AUTORE: 2088
DATA :12/11/2010 - 10:49:42
----------------------------------------
Infatti era l'opzione a cui pensavo per risolvere.
Comunque in merito alla tua idea, io posso inserire i file nell'exe tramite build ok, ma poi come li indirizzo?
Allora io ho 10 file di caratterizzazione di 10 diversi prodotti, sempre uguali a se stessi, volevo importarli nel progetto (racchiudendoli nell'exe) ma ho bisogno di indirizzarli e leggerli a run-time. Se li racchiudo nell'exe in fase di compilazione, poi che path devo usare per aprirli dal software?
Grazie ancora
----------------------------------------
AUTORE: 482
DATA :12/11/2010 - 12:38:49
----------------------------------------
Nel source file settings puoi dirgli che il file deve essere messo nella support directory. Ma cosi' saresti punto e a capo, nel senso che cmq sarebbe un file esterno che sta in una cartella relativa al percorso dell'eseguibile.
Personalmente continua a sembrarmi un operazione senza senso.
O li includi a livello di programmazione o li lasci esterni.
L'opzione di Always included serve di solito per delle librerie o dei controlli che vengono caricati all'avvio e non durante l'esecuzione.
Cmq magari cercando sul sito della national trovi come accedere a dei file inclusi nell'eseguibile...magari semplicemente dando il percorso dell'eseguibile seguito da uno "/" e poi il nome del file incluso
----------------------------------------
================================================================================
Drag & Drop
================================================================================
AUTORE: 2550
DATA :12/11/2010 - 13:30:42
----------------------------------------
Ciao a tutti.
Ho una tabella contenente dei valori. Di questi valori alcuni dovranno essere memorizzati in un file.
L'utente deve poter scegliere quali dati memorizzare nel file di uscita. Ho quindi pensato di utilizzare il drag & drop con 2 tabelle con il quale l'utente prende i dati dalla prima tabella e li sposta nella seconda. I dati contenuti nella seconda tabella saranno poi memorizzati su file.
Ho realizzato la struttura secondo gli esempi integrati in labview e riesco a trasferire i dati. Quello che mi manca però, è capire come fare per selezionare la cella di destinazione nella seconda tabella.
Tra le proprietà non ne ho trovato nessuna che mi riporti le coordinate della cella sulla quale mi fermo col mouse prima di rilasciare il pulsante e quindi i dati.
Esiste qualche modo per conoscerle?
Vi allego il vi che ho realizzato. Al momento il Drop viene effettuato nella cella alle coordinate 10.10.
Grazie a tutti
Ciao
DVD
----------------------------------------
AUTORE: 927
DATA :22/11/2010 - 08:28:45
----------------------------------------
La posizione del mouse in pixel ce l'hai nella proprietà Coords dell'evento; da quella puoi ricavare l'indice della casella usando l'Invoke node "Point to row column"
----------------------------------------
AUTORE: 2550
DATA :22/11/2010 - 17:35:51
----------------------------------------
Grazie 10000000 Snam!
Era proprio quello che cercavo!
----------------------------------------
AUTORE: 927
DATA :13/12/2010 - 14:47:12
----------------------------------------
Cercavo una cosa simile per gli array, ma mi sa che non c'è...
----------------------------------------
================================================================================
nireports
================================================================================
AUTORE: 724
DATA :12/11/2010 - 16:09:06
----------------------------------------
Ciao,
Ho duplicato una stazione di collaudo.
Ho installato labview(Labview 6.0.2), schede e quantaltro.
Ho riaperto la main vi e ho ottenuto una "broken arrow"
Il problema risiede in
C:\Programmi\National Instruments\LabVIEW 6\vi.lib\Utility\NIReport.llb\Font Style.vi
Tutti i property node linkati al TextFont reference danno errore di invakid property.
Non ho idea da dove partire.
Avee qualche suggertimento?
Grazie,
Cesare
----------------------------------------
AUTORE: 482
DATA :15/11/2010 - 07:26:05
----------------------------------------
ma hai cambiato versione di Labview dal vi originale a questo?
----------------------------------------
AUTORE: 645
DATA :19/11/2010 - 09:56:06
----------------------------------------
I driver sono della stessa versione?
----------------------------------------
AUTORE: 724
DATA :22/11/2010 - 13:32:02
----------------------------------------
La versione di labview non è cambiata.
Ho aggirato il problema salvando la libreria NIreport.llb e installando il tool per gestire i report word/excel.
ho poi ripristinato la NIreport.llb originale
----------------------------------------
================================================================================
gestire codice molto ampio
================================================================================
AUTORE: 2235
DATA :12/11/2010 - 18:39:54
----------------------------------------
Buonasera a Tutti
scusate se la domanda è basilare ma il progetto .vi che tratto inizia a essere molto grande e di difficile gestione in g language.
Mi spiego meglio. Ho un unico vi in cui coesistono in pratica 3 diversi programmi (3 vi ciascuno dei quali con un proprio ciclo while che ne fà rimanere attiva la funzione). I tre programmi si scambiano dati in tempo reale e gestiscono separatamente acquisizione, controllo attuatori e elaborazione dati. Ora diventa difficile gestire con la navigation windows e il pan, lo scorrimento e visualizzazione del codice.
Vorrei quindi sapere come si può fare. Io pensavo alla creazione di 3 subvi per i tre programmi da inserire in un vi detto main ma così i 3 subvi non scambiano più dati tra loro funzionando con la nota FIFO per cui se essi stessi vivono con propri cicli while allora se non si chiudono tali cicli non passsano dati tra loro.
esiste un modo per nascondere parti di codice per poter gestire meglio il progetto? oppure si può lavorare con delle subroutin o come con le classi richiamandole nel codice
Grazie molte
cromax
----------------------------------------
AUTORE: 482
DATA :15/11/2010 - 07:27:04
----------------------------------------
riempi il tuo codice di subvi dove ha senso e risolvi il tuo problema.
----------------------------------------
AUTORE: 2235
DATA :15/11/2010 - 08:00:04
----------------------------------------
grazie
----------------------------------------
AUTORE: 2235
DATA :15/11/2010 - 22:57:16
----------------------------------------
grazie ancora
uso dei notifier per comunicare tra subvi caricati in uno stesso vi main. Ma se il sibvi aveva dei grafici in tempo reale da visualizzare in pannello di controllo come posso fare per
vederli ancora. Se carico un subvi nel main i grafici interni al ciclo del subvi non appaiono su pannello di controllo.
----------------------------------------
AUTORE: 482
DATA :16/11/2010 - 07:15:06
----------------------------------------
Devi usare i reference node.
Se hai dei cicli paralleli nel main, non devi mettere nei subvi tutti i cicli.
Ma il loro contenuto.
Selezioni tutto quello che secondo te puo' essere raggruppato in un subvi, lasciando fuori i controlli e gli indicatori (ad esempio il grafico) poi vai sul menù edit->create subvi ed il gioco è fatto. Ricordati poi di salvare il subvi con un nome significativo e magari disegnargli anche una belal icona chiara.
Meglio lasciar fuori controlli e indicatori perchè senno' verrebbero create delle reference e in base all'algoritmo interno di labview per la creazione dei subVI, potresti ottenere un risultato differente da quello che ti aspetti.
----------------------------------------
================================================================================
salvataggio immagine elaborata
================================================================================
AUTORE: 2889
DATA :16/11/2010 - 15:43:32
----------------------------------------
Ciao a tutti,
ho un comportamento inatteso in un programma da me sviluppato.
Il programma cattura una immagine, la salva, la elabora (cerca gli edge), la visualizza e poi dovrebbe salvare i risultati. Diciamo una sequenza lineare...
Fino al visualizza tutto ok. Cioè l'immagine acquisita, salvata ed elaborata è ok. Dico questo perchè vedo sulla finestra che si apre l'immagine con l'elaborazione richiesta. La ricerca degli edge viene eseguita con un pacchetto standard di Labview (ora non ricordo quale, in quanto ne ho provati diversi).
Il problema è che l'immagine salvata DOPO l'elaborazione è una immagine dove l'elaborazione (cioè la griglia di ricerca degli edges e gli edges trovati) non è presente.
Come faccio a salvare anche l'elaborazione.
Vorrei evitare di dover fare un non elegante "print screen".
Grazie.
----------------------------------------
AUTORE: 482
DATA :17/11/2010 - 07:57:57
----------------------------------------
Questo "problema" si verifica perchè le griglie di analisi che vedi, non fanno parte dell'immagine ma sono degli overlay.
Se facessero parte dell'immagine, se tu dopo aver rilvato gli edge, facessi qualche altra operazione, la riga degli edge verrebbe analizzata anch'essa come se facesse parte dell'immagine.
Credo che l' "IMAQ merge Overlay" sia quello che ti serve.
Lo trovi nella palette Vision->Vision Utilities->Overlay. Inserisci quello prima di salvare l'immagine su file.
----------------------------------------
AUTORE: 2889
DATA :21/11/2010 - 16:50:35
----------------------------------------
Grazie sei stato estremametne chiaro e preciso (fossero tutti così
) e la tua soluzione è esattamente quello che cercavo. Funziona estremamente bene!
Grazie ancora.
----------------------------------------
================================================================================
Collegamento pc-strumento
================================================================================
AUTORE: 3306
DATA :19/11/2010 - 14:21:44
----------------------------------------
Ciao. Ho alcuni dubbi che forse mi potete chiarire. Non ho esperienza in questo campo quindi per me è tutto nuovo. Vorrei controllare un analizzatore di rete Agilent E5071C in remoto tramite pc e sto creando un pannello frontale in labview. Il VI è ancora incompleto e ho implementato solo pochi tasti , va vorrei provare a vadere se il tutto, anchese parziale funziona. Ora quando collego il pc allo strumento questo lo rileva come periferica e chiede per l'installazione il cd. Quello che non mi è chiaro è come associare il mio VI allo strumento, cioè come faccio a far capire allo strumento che il VI che lancio in run corrisponde al pannello frontale dello strumento? E quindi se premo un tasto nel tastierino numerico del VI deve associarlo al corrispondente tasto nello strumento? Non so se è chiaro il problema o se sto dicendo cose senza senso. Devo installare qualcosa nel pc che forse mi manca? O forse bisogna fare dei collegamenti particolari, preliminari, nel VI per poi poter controllare lo strumento? Grazie mille.
----------------------------------------
AUTORE: 482
DATA :19/11/2010 - 15:38:41
----------------------------------------
Il dirver per pilotare lo strumento da labview ce l'hai?
E' uno struemnto che comunica in seriale col pc o che altro?
Ci sarà un protocollo che prevede determinate istruzioni che corrispondono a determinate azioni. Tu alla pressione dei singoli tasti devi dare una specifica istruzione. pero' per sapere quale e come farlo devi conoscere il protocollo di comunicazione o avere un driver che ti permetta di far parlare LabVIEW e questo strumento.
----------------------------------------
AUTORE: 645
DATA :24/11/2010 - 07:55:04
----------------------------------------
Sto guardando sul sito Agilent ma non trovo driver LabView per lo strumento... Quali possibilità di collegamento ci sono? USB? Ethernet o porta seriale?
Prova a guardare http://forums.ni.com/t5/LabVIEW/AGENA-driver/m-p/790028 dove si parla di driver AGENA che sembrano sviluppati apposta.
Se sviluppi il pannello frontale a livello grafico devi poi associare ad ogni pulsante la relativa azione (e quindi il relativo comando per controllare lo strumento): cerca nel manuale delle istruzioni le parti relative al protocollo di comunicazione.
----------------------------------------
================================================================================
Come richiamare dll??
================================================================================
AUTORE: 2435
DATA :22/11/2010 - 09:00:36
----------------------------------------
Ciao a tutti,
ho un problema con le dll in windows 7...
Ho un driver che usa "Call library function" per la comunicazione con PLC che mi funziona in XP ma se lo uso in W7 nonn va...
Sapete darmi qualche suggerimento?Può essere solo un problema di incompatibilità?
Grazie e ciao
----------------------------------------
AUTORE: 1078
DATA :22/11/2010 - 13:05:16
----------------------------------------
Potrebbe essere un problema di incompatibilità. Hai verificato la versione delle DLL che richiami?
----------------------------------------
AUTORE: 2435
DATA :23/11/2010 - 07:13:18
----------------------------------------
devo farlo,ma verificando la versione mi dice se compatibile con 32 o 64 bit??
grazie per la risposta
----------------------------------------
AUTORE: 1078
DATA :24/11/2010 - 10:52:43
----------------------------------------
Non credo! Però tramite la versione, il nome e se hai un po' di fortuna le info aggiuntive puoi sapere se la DLL che stai usando è per 32 o 64 bit. Recuperate le informazioni che il file ti espone puoi usufruire del sito del produttore per sapere se la versione della DLL è a 64 o 32 bit. Se hai fortuna il produttore ti mette a disposizione anche il supporto tecnico a cui puoi chiedere in modo specifico.
Ovviamente una DLL studiata per sistemi operativi a 64bit non funzionerà bene per su sistemi a 32bit, potrebbe invece funzionare lo stesso una DLL studiata per sistemi a 32bit fatta girare un SO a 64bit.
----------------------------------------
================================================================================
waveform graph
================================================================================
AUTORE: 3286
DATA :22/11/2010 - 10:51:10
----------------------------------------
salve a tutti!! vi chiedo un favore... dovrei fare un grafico di una caratteristica corrente (asse x) e potenza (asse y) con il waveform graph... come posso fare a camibare l asse x con una funzione scelta da me??? Se siete cosi gentili ma inviarmi anke un programmino semplice semplice da cui prendere spunto....
Ringrazio anticipatamente chiusnque si prenda la briga di rispondermi!!
----------------------------------------
AUTORE: 1078
DATA :22/11/2010 - 13:06:35
----------------------------------------
Basta che usi gli XY graph che ti permettono la massima flessibilità! Se cerchi nel forum abbiamo trattato diverse volte l'argomento.
----------------------------------------
================================================================================
Gestione immagini
================================================================================
AUTORE: 1441
DATA :22/11/2010 - 14:24:00
----------------------------------------
Ciao a tutti. Premetto che ho cercato nei post precedenti senza trovare una soluzione adatta. Ho questo problema:
Ho creato un VI che permette di acqusire dei parametri da misurazioni effettuate su un muscolo umano. Vorrei poter fare in modo che l'operatore da una specie di elenco a discesa, possa selezionare l'immagine del muscolo studiato. Fin qui tutto bene, ho usato Pict Ring. Il mio problema però è che, oltre a salvare i dati derivanti dalle misure sul muscolo (no problem) vorrei salvare quale delle immagini è stata scelta. Questo perchè nella seconda del sezione del programma, quello dell'analisi, oltre ai risultati derivanti dall'elaborazione dei segnali vorrei visualizzare l'immagine che era stata scelta, per poi poterla stampare, eventualmente, anche su un report di riepilogo. Il mio problema è che non riesco a capire come si salva e si può gestire questa informazione riguardo all'immagine.
Grazie Paolo
----------------------------------------
AUTORE: 927
DATA :23/11/2010 - 09:26:50
----------------------------------------
Usa un altro Pict ring uguale al precedente... tutto quello che devi salvare è l'indice dell'immagine scelta, cioè il numeretto che ti dà fuori il Pict ring nel diagramma a blocchi
----------------------------------------
AUTORE: 1441
DATA :23/11/2010 - 13:49:50
----------------------------------------
Intendi dire che dovrei creare due picturering uguali, uno come Control ed uno come Indicator?
Beh se è così è davvero una cosa facilissima...provo.
Per ora grazie mille.
Paolo
----------------------------------------
AUTORE: 1441
DATA :23/11/2010 - 14:21:30
----------------------------------------
Fantastico grazie!!!! Più facile del previsto!!
Paolo
----------------------------------------
================================================================================
Shared var. con Event Str.
================================================================================
AUTORE: 1033
DATA :22/11/2010 - 17:15:19
----------------------------------------
Ciao, ho la necessità di passare una variabile (un cluster piuttosto complesso) tra due eseguibili distinti. Ho pensato di utilizzare le shared variable. Riesco a farlo ponendo uno dei due exe in polling sulla variabile utilizzando un ciclo while (allegato). Ma questa soluzione non mi piace. Vorrei avere una gestione tipo event structure in modo da leggere la variabile solo quando cambia valore. Mi sapete suggerire come fare?
Grazie, ciao.
----------------------------------------
AUTORE: 927
DATA :23/11/2010 - 09:14:04
----------------------------------------
Non ti assicuro che sia il modo migliore, ma potresti usare un blocco Datasocket read per leggere la variabile. Ingressi: connection = psp://localhost/nomelibreria/nomevariabile, timeout = -1 (attesa infinita), type = il tipo del tuo cluster. Il blocco resta in attesa e dà fuori una lettura solo quando il valore della variabile cambia (incluso il primo valore all'avvio del programma)
----------------------------------------
AUTORE: 927
DATA :23/11/2010 - 09:19:42
----------------------------------------
...ora che ci penso, puoi fare la stessa cosa anche senza il blocco datasocket: sul blocco Shared Variable Node che hai già, clicca col destro e fà "show timeout", poi dai -1 al timeout, come sopra
----------------------------------------
================================================================================
Acquisizione Dati
================================================================================
AUTORE: 3338
DATA :23/11/2010 - 14:12:38
----------------------------------------
Scusate, sono un neofita di Labview e devo imparare molto in fretta.
Il problema è semplice,
Ho scritto un programma diviso in due blocchi: da una parte invia un segnale ad un sistema di controllo e dall'altra parte acquisisce dati da dei sensori.
Dopo qualche sforzo funziona quasi tutto alla perfezione tranne una cosa:
La parte che "invia" invia un segnale sinusoidale per 8 secondi,
la parte che acquisisce effettua un'acquisizione ad una certa frequenza, acquisendo un certo numero di campioni (per un tempo di circa 2 secondi).
Il problema è che io vorrei che il sottoblocco che acquisisce acquisisca dopo un paio di secondi che invio il segnale di controllo, in maniera di trovarmi sempre dentro la "finestra".
Come faccio a dire al programma:
Fai partire questo sottoblocco... Aspetta..
Ora fai partire quest'altro! (Senza interrompere il primo ovviamente)
Spero di essere stato chiaro, scusate se non sono stato molto tecnico,
Edo
----------------------------------------
AUTORE: 927
DATA :23/11/2010 - 14:27:26
----------------------------------------
Metti il secondo blocco nel secondo "fotogramma" di una Sequence structure. Nel primo fotogramma metti un Wait di 2000ms
----------------------------------------
AUTORE: 645
DATA :24/11/2010 - 07:47:54
----------------------------------------
Come suggerisce Snamprogetti, cerca qualche esempio relativo alle strutture e ai blocchi Wait (o anche Delay).
----------------------------------------
================================================================================
estrazione dati da file
================================================================================
AUTORE: 3286
DATA :23/11/2010 - 14:57:40
----------------------------------------
Salve a tutti... ho un piccolo problema... dovrei estrarre dati da un file in cui ho una struttura del genere:
x0 y0
x1 y1
x2 y2
...
vorrei estrarre i dati in maniera da avere due array cosi da poterli plottare su un XY graph... il file è un txt..
Grazie anticipatamente
----------------------------------------
AUTORE: 1124
DATA :23/11/2010 - 15:56:19
----------------------------------------
Ciao
forse il file allegato potrebbe esserti utile.
Stefano
----------------------------------------
AUTORE: 3286
DATA :23/11/2010 - 16:38:22
----------------------------------------
mi sono dimenticato di specificare la versione di labview che utilizzo 6i... quello che mi hai passato non lo riesco ad aprire!!!!grazie mille cmq!
----------------------------------------
AUTORE: 482
DATA :24/11/2010 - 07:16:12
----------------------------------------
La risposta ai tuoi problemi sta nella palette di gestione dei file e si chiama "Read from spreadsheet file".
Collega tutti gli ingressi che servono e vedrai che quel blocchetto ti restituirà in uscita un array bidimensionale con tutti i valori del file.
----------------------------------------
AUTORE: 3286
DATA :26/11/2010 - 14:11:27
----------------------------------------
io ho un file del tutto simile a quello che vi allego... usando "Read from spreadsheet file" vorrei memorizzarlo in un array 3 colonne e di lunghezza variabile in base al numero di righe... non riesco a settare "Read from spreadsheet file" in maniera corretta e non riesco neanke a creare un array bidimensionale per testare il funzionamento del blocchettino.... scusa la richiesta ma sono un neofilo di labview... se qualcuno fosse cosi gentile da postarmi una soluzione ( compatibile con la versione 6i di labview)
grazie
----------------------------------------
AUTORE: 645
DATA :27/11/2010 - 07:47:13
----------------------------------------
Prova a riallegare il file...
Se vuoi avere colonne di diversa lunghezza puoi lavorare con la lettura di una riga alla volta e l'inserimento, in caso di valore assente, di un carattere nullo (NaN) se vuoi mantenere l'allineamento dei dati.
Non so se il blocco Spreadsheet permette di inserire al volo un carattere NaN in caso di valore assente.
Se invece non ti interessa mantenere l'allineamento (utile, per esempio, per la visualizzazione dei dati in tabelle) allora il procedimento è più snello.
----------------------------------------
AUTORE: 482
DATA :29/11/2010 - 07:15:00
----------------------------------------
Per quanto riguarda il "settaggio" del blocchetto devi solo:
1) Stabilire che tipo di dati vai a leggere, quindi se hai una versione recente di labview, sottoal blocchetto devi selezionare "String" oppure, in caso di versione piu' vecchia, credo che il vi sia polimorfico e quindi puo' essere che tu gli debba collegare un array di stringhe bidimensionale all'ingresso datatype.
2)Una volta fatto questo, basta che vai sul terminale di uscita chiamato "all rows", clikki col tasto destro del mouse e poi selezioni ->Create -> Indicator.
L'alternativa per creare un indicatore è prendere un contenitore vuoto di tipo array dalla palette degli array, poi gli metti dentro un indicatore di tipo stringa.
----------------------------------------
================================================================================
Font nell'eseguibile
================================================================================
AUTORE: 487
DATA :23/11/2010 - 15:54:34
----------------------------------------
Ciao a tutti,
ecco un nuovo problema riguardo ai font di caratteri per le stringhe di testo:
- sviluppo un'applicazione su un pc con determinati font
- creo l'eseguibile
- trasporto il tutto su un'altro pc e registro nella cartella "Fonts" di windows i set di caratteri utilizzati
- lancio l'eseguibile e ...
- vengono visualizzati i font di default del sistema operativo e non quelli utilizzati nella creazione del FP
Qualche anima pia mi saprebbe dare qualche dritta per risolvere il problema?
----------------------------------------
AUTORE: 482
DATA :24/11/2010 - 07:18:18
----------------------------------------
Puo' essere che tu abbia specificato quei custom fonts come "application fonts" o "dialog fonts" modificandoli all'interno delle opzioni di LabVIEW?
Perchè quella nominazione sta ad indicare dei caratteri di default del sistema operativo, specificati 8credo) nel file .ini di LabVIEW.
Tu invece dovresti specificare il nome esatto del font.
----------------------------------------
AUTORE: 487
DATA :24/11/2010 - 07:51:28
----------------------------------------
[quote="gepponline":3btjmpvc]Tu invece dovresti specificare il nome esatto del font.[/quote:3btjmpvc]
E' proprio quello che ho fatto, anche perchè ho utilizzato diversi tipi di font nel front panel per eivdenziare alcune parti (titoli, sottotitoli, comandi importanti, ecc.)
----------------------------------------
AUTORE: 482
DATA :24/11/2010 - 08:43:56
----------------------------------------
I font sono registrati correttamente?
Prova con un documento word ad usare quei caratteri e poi trasportarli nel pc target.
In teoria se hai fatto come dici dovrebbe funzionare tutto...
Eventualmente, prova a fare questa modifica.
Apri il file .ini della tua applicazione e in coda gli aggiungi questo:
appFont="Arial" 13
Questa stringa ti sostituisce l'Application font con Arial di dimensione 13.
Magari al posto di Arial, metti il nome del font che ti interessa, cosi' vedi se lo carica correttamente
----------------------------------------
AUTORE: 487
DATA :24/11/2010 - 10:04:33
----------------------------------------
OK, ho fatto le prove che mi hai suggerito
[quote="gepponline":303wyptn]Prova con un documento word ad usare quei caratteri e poi trasportarli nel pc target.[/quote:303wyptn]
ma le cose non funzionavano.
I font corretti erano presenti nella cartella "windows\fonts" però probabilmente non erano registrati correttamente.
Li ho cancellati e importati nuovamente e adesso tutto funziona.
Grazie e scusa se ti ho fatto perder tempo per una stupidata del genere.
----------------------------------------
================================================================================
subplot XY graph
================================================================================
AUTORE: 3286
DATA :25/11/2010 - 11:35:29
----------------------------------------
Scusate ma mia ingnoranza in materia!!! ma è possibile fare un subplot su XY graph... se si come?????
----------------------------------------
AUTORE: 1124
DATA :25/11/2010 - 13:03:17
----------------------------------------
Ciao
cosa intendi per sub-plot?
Stefano
----------------------------------------
AUTORE: 3286
DATA :25/11/2010 - 14:02:47
----------------------------------------
intendo sovrappore piu grafici sull stesso XYgraph
----------------------------------------
AUTORE: 482
DATA :25/11/2010 - 14:18:20
----------------------------------------
basta fare un array di cluster.
----------------------------------------
AUTORE: 3286
DATA :01/12/2010 - 13:26:44
----------------------------------------
ho provato a guardare gli esempi dell help ma il multiplot me lo mostra solo nel caso ho due funzioni generate nello stesso ciclo for che escono simultanamente, il mio problema è che io dovrei fare un multiplot ma i dati vengono generati si all interno di un for ma devo stampare la stessa funzione che viene modificata ad ogni ciclo.... non so come fare...
----------------------------------------
AUTORE: 482
DATA :01/12/2010 - 13:32:07
----------------------------------------
Un XY Graph è fatto da un Cluster di array.
Un array per le X e un array per le Y.
Se vuoi che vengano graficati piu' plot, indipendentemente da quando vengano generati, devi fare un array di questi cluster.
Quindi un array di (cluster di array).
----------------------------------------
AUTORE: 3286
DATA :02/12/2010 - 10:46:34
----------------------------------------
come si fa a inizializzare un array di cluster vuoto con initialize array?????????? xke ho dei problemi di compatibilità tra l array creato con initialize array e l ingresso di insert into array (che deve essere lo stesso).... perche l array inizilizzato a vuoto devo usarlo per inserirci i cluster per il multiplot..
----------------------------------------
AUTORE: 482
DATA :02/12/2010 - 11:32:07
----------------------------------------
ma perchè devi inizializzare l'array?
Non uoi semplicemente usare il build array?
cmq eventualmente un array di cluster vuoto lo puoi creare usando le costanti dalle palette.
Prendi due costanti array vuote (che trovi nellapalette degli array)e ci metti dentro dei numeri, cosi' divenano due costanti array numeriche vuote.
Le prendi e le metti nella costante cluster vuota (che trovi nella palette dei cluster) cosi' avrai un cluster di due array numerici (che equivale ad un grafico XY).
Prendi quest'ultima e la metti in un altra costante array vuota ed ecco fatta la tua costante di array di cluster di array.
----------------------------------------
AUTORE: 3286
DATA :02/12/2010 - 11:37:28
----------------------------------------
Devo utilizzare un inizializzazione di array perche il numenro di grafici è variabile in base alle misurazioni che vuole fare l utente! cmq adessso provo.... grazie
----------------------------------------
AUTORE: 3286
DATA :03/12/2010 - 14:27:27
----------------------------------------
Scusatemi ho provato ma non riesco... se qualcuno riesce a darmi una mano, io posto una versione semplificata della struttura generale mio programma.
Se qualcuno riesco a darci un occhio e provare a fare in multiplot gli sarei veramente grato!! ps la risposta mandatela tramite immagine xke uso la versione 6i di labview che non riesce a leggere le versioni dopo...
grazie
pps il built array non mi va bene perchè è l utente che deve decidere il numero di grafici....
----------------------------------------
AUTORE: 482
DATA :03/12/2010 - 15:28:16
----------------------------------------
Adesso non ho molto tempo da dedicargli, ma tu fai un cluster con una X e una Y invece l'XY Graph lavora con UN ARRAY DI X e UN ARRAY DI Y.
Quindi tu di volta in volta che aggiungi un valore devi inserirlo in coda al rispettivo array e poi fare il cluster e mandarlo all'XYGRAPH.
Allego un esempio. Da qui smembralo tu e adattalo alle tue esigenze.
----------------------------------------
================================================================================
Caricare solo un certo tipo di file
================================================================================
AUTORE: 1441
DATA :25/11/2010 - 13:58:11
----------------------------------------
Domanda penso facile, perchè mi rifiuto di pensare che sia una cosa complessa.
E' possibile fare in modo che quando si apre la finestra di selezione di un file (cliccando sull'inconcina folder del File Path Ctrl) l'utente possa vedere e/o selezionare solo una certa estensione di file, invece che tutti i file presenti nella cartella? (esempio .txt)
Grazie ciao
Paolo
----------------------------------------
AUTORE: 482
DATA :25/11/2010 - 14:23:36
----------------------------------------
Il file path control ha una proprietà che si chiama PATTERN.
Questa proprietà è modificabile in due modi:
1) tasto destro sul controllo -> Browse Options -> Pattern (se vuoi che sia sempre quel tipo di file)
2) tasto destro sul terminale -> create property node -> Browse options -> match pattern (se vuoi modificare il tipo di file selezionabile durante l'esecuzione del programma)
Tra le browse options trovi tutti i settaggi per "abbellire" la finestra di selezione.
----------------------------------------
AUTORE: 1441
DATA :25/11/2010 - 14:37:14
----------------------------------------
Grazie molto esaustivo e gentile.
Paolo
----------------------------------------
================================================================================
format string
================================================================================
AUTORE: 3286
DATA :25/11/2010 - 16:27:19
----------------------------------------
qualche buon anima mi passerebbe i comandi "format string" usati in "scan from string"
grazie
----------------------------------------
AUTORE: 3286
DATA :25/11/2010 - 16:40:04
----------------------------------------
xke vi spiego meglio:
praticamente interrogo un dispositivo che mi risponde con la temperatura sotto forma di stringa cosi: "25.02"
ho provato a pulire gli apici con scan from string cercando il primo numero e il secondo ma riconcatenandoli mi restituisce 25.2
come vaccio a fargli riconoscere 02 e non solo 2 ?????????????????????
allego una copia del mio programmino per ulteriori chiarimenti!!
grazie
----------------------------------------
AUTORE: 927
DATA :26/11/2010 - 08:21:22
----------------------------------------
il riconoscimento è corretto (come numero, 02 è 2), è quando lo riformatti che devi specificare; per ottenere un numero a 2 cifre con lo zero iniziale puoi usare %02d.
i comandi di formattazione li trovi alla pagina "Format Specifier Syntax" dell'help, sono prelopiù gli stessi del C
----------------------------------------
AUTORE: 3286
DATA :26/11/2010 - 09:36:33
----------------------------------------
come sempre grazie 1000!!!!
----------------------------------------
AUTORE: 3286
DATA :26/11/2010 - 09:44:30
----------------------------------------
ho provato a fare la modifica con %0d ma non funziona
----------------------------------------
AUTORE: 1078
DATA :29/11/2010 - 11:44:48
----------------------------------------
Scusa, ma anzichè fare il garbuglio che stai facendo, conversione della parte intera del valore da stringa a numero per poi riconvertirla in stringa e conversione della parte decimale da stringa a numero per poi riconvertirla a stringa, non è meglio se elimini semplicemente le "" dalla stringa originale?
Per farlo ti consiglio di usare la funzione <[b:3hwue33g]Search ad Replace string[/b:3hwue33g]> presente in LV. Imposta a true [b:3hwue33g]reaplace all [/b:3hwue33g]e vedrai che tutto funziona. Ho rifatto il tuo esempio con le varie conversioni, ho usato anche la funzione che ti ho segnalato. Se devi solo pulire la stringa dalle virgolette puoi passare direttamente la stringa di usciata dalla funzione search & replace all'indicatore del valore. Se ti servono invece anche i valori numerici puoi convertirli come indicato dalla mia funzione.
----------------------------------------
AUTORE: 3286
DATA :29/11/2010 - 16:47:20
----------------------------------------
me lo potresti passare per la versione 6 se è possibile... grazie
----------------------------------------
AUTORE: 1078
DATA :30/11/2010 - 09:32:02
----------------------------------------
Purtroppo non ho la versione LV6, ho solo la 2009 che arriva al massimo ad esportare fino alla 8.2. Ti posto un'immagine però!
[attachment=0:1ow1pbrg]converter.GIF[/attachment:1ow1pbrg]
----------------------------------------
AUTORE: 3286
DATA :01/12/2010 - 10:31:39
----------------------------------------
grazie
----------------------------------------
================================================================================
Controllo string + lista
================================================================================
AUTORE: 482
DATA :29/11/2010 - 14:49:44
----------------------------------------
...ma ciao!
secondo voi, qual'e' la soluzione miglior eper avere un controllo che permetta l'inseriemnto libero di una stringa ma allo stesso tempo dia la possibilità di selezionare una voce da un elenco tipo un ring?
----------------------------------------
AUTORE: 1078
DATA :30/11/2010 - 09:37:29
----------------------------------------
Scusa geppo ma non ho capito la domanda! Cosa ci devi fare esattamente con questo controllo? Se l'utente deve poter inserire testo e poter anche scegliere da una lista preassegnata userei un un combo-text, se invece deve solo poter inserire testo userei una stringa oppure se deve solamente selezionare una voce da una lista preassegnata a cui voglio fare riferimento in modo numerico userei un text-ring!
----------------------------------------
AUTORE: 482
DATA :30/11/2010 - 09:52:32
----------------------------------------
oh....mio....dio......
scusa l'ignoranza!
Non sapevo dell'esistenza del controllo combo box
di solito usavo o i text o gli enum.
Ma esiste da sempre??
Perchè mi sa che 4 o 5 anni fa mi sono sbattuto a far fare una cosa del genere ad un controllo stringa normale
Grazie mille!
----------------------------------------
================================================================================
unire due stringhe multiline in un una stringa
================================================================================
AUTORE: 3286
DATA :29/11/2010 - 16:44:10
----------------------------------------
Salve a tutti... praticamente vorrei creare un file del genere:
x0 y0 y0' y0'' y0'''
x1 y1 y1' y1'' y1'''
...
e cosi via
il fatto è che devo concatenare i file che sono nella struttura:
x0
x1
x2
e
y0
y1
Cioè tanti file quante uscite ho e tutti formati su una sola colonna con tante righe... come posso unirli tutti???
----------------------------------------
AUTORE: 482
DATA :30/11/2010 - 07:41:00
----------------------------------------
beh, direi lavorandoci.
Alla fine è semplice programmazione usando le funzioni sulle stringhe.
Leggi il file con un read from spreadsheet file e poi lavora con i for e le funzioni sulle stringhe.
----------------------------------------
AUTORE: 1168
DATA :30/11/2010 - 07:43:20
----------------------------------------
Buongiorno,
Ma i dati sono in un file formato testo, binario o che altro? il separatore è il CR+LF come sembra?
Per prima cosa devi identificare il separatore. Poi è semplice caricare tutti i valori in un array che poi puoi concatenare o buttare in matrice!
Comincia ad aprire il file, separare tutti i valori e inserirli in un array, poi torna qui che ti diamo un'altra mano!
----------------------------------------
AUTORE: 3286
DATA :30/11/2010 - 11:23:28
----------------------------------------
ho provato sia ad usare sia "Read From Spreadsheet File" sia "Spreadsheet String To Array" ma non riesco...
Perchè praticamente mi sarebbe molto utile estrarre da un file di testo, tutto scritto su un unica colonna, i valori delle mie varie misurazioni, cioè nel mio file di testo txt io ho impaginato tutto su un unica colonna e pensavo di dividere i valori delle varie misurazioni con un "/", poi usare uno di questi due oggetti per metterli in una matrice cosi da averli ben impaginati e poi riportarli su file di testo con la formattazione tipo matrice con tot righe e tot colonne...
cioè vorrei che quando mi riconosce il mio simobolo "/" mi incominci a inserire i dati in un altra colonna della matrice, ma cio non avviene... come posso fare??
opp
potrei anche inserirmi volta per volta la stringa generata dalla singola misurazione in una colonna della matrice... Che sarebbe ancora meglio!!! ma non riesco...
Scusatemi ma sono un principiante di labview senza basi e mi devo dare una mossa col mio programma di tesi...
----------------------------------------
AUTORE: 482
DATA :30/11/2010 - 12:36:33
----------------------------------------
ecco allora adesso che hai fatto questa precisazione, forse è meglio che arti dalle basi no?
Per quanto mi riguarda, le basi in labview le puoi apprendere molto facilmente dagli esempi (help->find examples)
Non puoi arrivare qui senza basi e pretendere di fare una tesi. Tantomeno puoi chiedere a noi di fartela.
Detto questo, Un file di testo ad una colonna, equivale a leggere un array bidimensionale con il read from spreadsheet dove l'uscita (all rows) sarà composta da un array 2d con una sola colonna.
Se permetti un consiglio, non immagianrti i dati incolonnati come in excel.
Fai che i dati di queste acquisizioni stanno sulle righe e ad ogni acquisizione aggiungi una riga.
Questo perchè cosi' potrai aggiungere semplicemente la nuova riga, invece s elavori in colonne, dovrai manipolare il file precedente risalvarlo interamente con i nuovi dati.
Un read from spreadsheet legge qualsiasi file in cui i valori siano separati da un qualsiasi carattere che tu stabilisci (un tab o un \ o un ; qualsiasi cosa) e poi il carattere terminatore di riga.
Come diceva Pio, fai qualcos tu, poi non ti diciamo eventualmente dove sbagli qundo ci avrai postato il codice e l'eventuale file con i dati.
----------------------------------------
AUTORE: 3286
DATA :30/11/2010 - 18:24:58
----------------------------------------
ok chiedo scusa.... vi contatterò solo in caso di estremo bisogno...
----------------------------------------
================================================================================
struttura dati in C
================================================================================
AUTORE: 482
DATA :01/12/2010 - 09:16:07
----------------------------------------
[code:2wh6cwbz]short usb_get_formatted_info
(
short handle,
char * unit_info,
short string_length
)
This function is similar to the usb_get_unit_info routine, but the unit information is returned in the form of a formatted character string. The string is separated into the following elements, each appearing on a different line: driver version; hardware version; variant info; serial number; calibration date.
Arguments
handle Specifies the USB TC-08 unit.
unit_info A string where the unit info is to be placed.
string_length Length of the string to be copied. Should be at least 256 (USBTC08_MAX_INFO_CHARS) characters long.
Returns
0 Too many bytes to copy, will copy as many full lines as possible.
1 Routine was successful.[/code:2wh6cwbz]
Ho questa struttura dati in una dll ma non riescoa farla funzionare.
Come parametri in uscita io ho scelto:
HANDLE I16 per Valore
unit_info puntatore ad array di I8
string_lenght I16 per valore
ho un dubbio su "unit_info".
Secondo voi è corretto?
----------------------------------------
AUTORE: 43
DATA :01/12/2010 - 13:53:36
----------------------------------------
[quote="gepponline":3isk0gco][code:3isk0gco]short usb_get_formatted_info
(
short handle,
char * unit_info,
short string_length
)
...[/code:3isk0gco]...
HANDLE I16 per Valore
unit_info puntatore ad array di I8
string_lenght I16 per valore
ho un dubbio su "unit_info".
Secondo voi è corretto?[/quote:3isk0gco]
devi allocare l'array
[attachment=0:3isk0gco]passaArrayaDll.JPG[/attachment:3isk0gco]
----------------------------------------
AUTORE: 482
DATA :01/12/2010 - 13:59:11
----------------------------------------
Grande!!
La mia ignoranz ain materia non ha limiti!
Adesso sembra funzionare.
----------------------------------------
================================================================================
Esportare dati da pagina web su un array
================================================================================
AUTORE: 2228
DATA :01/12/2010 - 13:43:24
----------------------------------------
Salve a tutti,
vorrei esportare una tabella di numeri contenuti in una pagina web e metterli in un array.
Ho dato un occhio ai vi dell'internet toolkit ma non riesco a capire se son utili al mio scopo, qualcuno può aiutarmi?
Grazie
----------------------------------------
AUTORE: 482
DATA :01/12/2010 - 13:48:08
----------------------------------------
Secondo me l'ideale è copiarti il codice sorgente della pagina ed estrapolare i dati lavorando con le stringhe.
----------------------------------------
AUTORE: 927
DATA :06/12/2010 - 08:34:03
----------------------------------------
se la pagina è pubblicata in rete e devi leggerla da lì, puoi anche fare a meno dell'internet toolkit, puoi leggerla con un blocco "datasocket read" (connection in = l'URL, type = una stringa)
----------------------------------------
================================================================================
Estrare un numero da una stringa
================================================================================
AUTORE: 3362
DATA :02/12/2010 - 10:16:54
----------------------------------------
Ciao ragazzi, sono nuovo nel forum, Mi chiamo Davide e sono uno studente di una scuola Tecnica in Svizzera, stiamo utilizzando Labview da questo semestre e ho un problema:
non riesco a estrare un numero da una stringa, qualcuno sa dirmi come fare?
----------------------------------------
AUTORE: 482
DATA :02/12/2010 - 11:27:38
----------------------------------------
Nella palette delle stringhe c'e' la subpalette String\Number Conversion.
Li trovi tutte le funzioni che ti servono!
----------------------------------------
================================================================================
comunicazione con due strumenti traimte gpib
================================================================================
AUTORE: 3286
DATA :02/12/2010 - 13:37:31
----------------------------------------
Come faccio comunicare con due dispositivi che hanno lo stesso indirizzo gpib contemporaneamente nello stesso programma???? cioè devo trovare la maniera di assegnare un indirizzo a uno e un indirizzo all altro....
----------------------------------------
AUTORE: 1168
DATA :02/12/2010 - 14:06:46
----------------------------------------
Oppure usare due schede GPIB sul pc... ma mi sembra che la tua soluzione sia decisamente migliore...
----------------------------------------
AUTORE: 301
DATA :03/12/2010 - 11:12:33
----------------------------------------
Direi che dovresti configurare diversamente i due indirizzi sui due strumenti......su una "rete" non puoi avere due macchine con lo stesso indirizzo!
----------------------------------------
AUTORE: 301
DATA :03/12/2010 - 11:14:15
----------------------------------------
Scusa, intendo dire che il setting dell'indirizzo dovresti farlo o sullo strumento (se te lo consente, ma dovrebbe) o tramite il DAQmx.
----------------------------------------
AUTORE: 2855
DATA :03/12/2010 - 15:58:18
----------------------------------------
Non c'è alternativa:
1) usare due schede/convertitore GPIB
2) cambiare il numero/address dell strumento (NON si possono avere 2 indirizzi uguali nella stessa rete)
!!!!!Non ho capito cosa cambi con il DAQmx se è il protocollo di comunicazione delle schede di acquisizione!!!!!!!
Il protocollo da usare è x LV
1) GPIB per schede NI
2) VISA per schede others (vd Agilents Technologies)
r.
----------------------------------------
================================================================================
Derivata
================================================================================
AUTORE: 3286
DATA :06/12/2010 - 14:21:59
----------------------------------------
come si può calcolare la derivata punto punto in un grafico creato tramite misurazione di un dispositivo.... cioè non dispongo di una formula precisa da passarli ma un un array di valori estrapolati da una misurazione...
----------------------------------------
AUTORE: 1124
DATA :06/12/2010 - 15:16:34
----------------------------------------
Ciao
in prima battuta puoi fare una 'differenziazione':
Y'(i+1)=(Y(i+1)-Y(i))/(X(i+1)-X(i))
Y'(i=0)=0
dove
Y sono i valori campionati;
X sono i tempi a cui i valori sono stati campionati.
Una volta ottenuta la nuova curva puoi inserirla in grafico.
Resta da individuare il sistema per definire la nuova formula e se non disponi di librerie matematiche ritengo che la cosa più immediata sia passare la tua nuova matrice di valori XY' ad un programma come excel che pemette di calcolare eventuali curve di regressione.
Stefano
----------------------------------------
AUTORE: 947
DATA :09/12/2010 - 09:30:06
----------------------------------------
..
Ciao ..
.. essendo valori campionati, non abbiamo a che fare realmente con una funzione e pertanto la derivata nel senso matematico del termine non esiste..
.. si deve ragionare nel discreto e cioè si ragiona con il rapporto incrementale di punti vicini piuttosto che con il limite ..
.. e pertanto la formula diventa quella riportata da "[u:2od30ya0]stefanog[/u:2od30ya0]" ..
.. oppure una piccola variante :
[code:2od30ya0]
Y'(i+1) = ( Y(i+1)-Y(i-1) ) / ( X(i+1)-X(i-1) )
Y'(i=0) = 0 oppure Y'(i=0) = Y'(i=1)
Y'(i=N) = 0 oppure Y'(i=N) = Y'(N-1)
[/code:2od30ya0]
MA ATTENZIONE !!
in entrambe le formule presentate c'è un grossissimo problema:
potrebbe capitare che [b:2od30ya0]X(i) = X(i+1)[/b:2od30ya0] nel caso del formula di [u:2od30ya0]stefanog[/u:2od30ya0] oppure [b:2od30ya0]X(i-1) = X(i+1)[/b:2od30ya0] nel caso di questa ultima formula ..
.. allora si avrebbe [b:2od30ya0]Y'(i) = +inf[/b:2od30ya0] o [b:2od30ya0]-inf[/b:2od30ya0] ...
.. per il LV no problem .. sono definiti anche i "[i:2od30ya0]numeri[/i:2od30ya0]" [b:2od30ya0]+inf[/b:2od30ya0], [b:2od30ya0]-inf[/b:2od30ya0] e [b:2od30ya0]NaN[/b:2od30ya0] per cui può andare bene .. ma in altri linguaggi si avrebbe errore !!
PERò :
se l'asse X è il tempo di una grandezza campionata allora non c'è il problema di sopra perchè si ha sempre [b:2od30ya0]X(i+1) > X(i) > X(i-1)[/b:2od30ya0]
se poi il campionamento è periodo costante [b:2od30ya0]Tc[/b:2od30ya0] allora le formule diventano + semplici perchè:
[code:2od30ya0]
X(i) = i * Tc
[/code:2od30ya0]
quindi la formula di stefanog sarà:
[code:2od30ya0]
Y'(i+1)=( Y(i+1)-Y(i) ) / ( Tc )
Y'(i=0)=0
[/code:2od30ya0]
mentre la mia sarà:
[code:2od30ya0]
Y'(i+1) = ( Y(i+1)-Y(i-1) ) / ( 2*Tc )
Y'(i=0) = 0 oppure Y'(i=0) = Y'(i=1)
Y'(i=N) = 0 oppure Y'(i=N) = Y'(N-1)
[/code:2od30ya0]
.....
Troppa matematica ??
..
----------------------------------------
================================================================================
Loop su tutti gli oggetti di un front panel
================================================================================
AUTORE: 3307
DATA :06/12/2010 - 15:06:33
----------------------------------------
Ciao a tutti,
esiste un modo in Labview per identificare gli oggetti presenti nel front panel? L'idea è quella di modificarne la caption durante una fase di inizializzazione dell'interfaccia ad esempio attraverso un loop. L'obiettivo finale è quello di supportare l'internazionalizzazione dell'interfaccia e quindi visualizzare le caption nella lingua desiderata.
Grazie,
Rita
----------------------------------------
AUTORE: 2592
DATA :07/12/2010 - 11:27:20
----------------------------------------
Ciao Rita,
puoi usare le proprietà del VI server per accedere programmaticamente alle reference degli oggetti sul Front Panel.
Ti allego un semplice VI che legge le caption, giusto per darti una idea da cui partire.
----------------------------------------
AUTORE: 3307
DATA :07/12/2010 - 15:25:22
----------------------------------------
Ciao Andrea,
grazie mille per l'esempio che mi hai postato.. Adesso però ho un altro piccolo problema: nel mio front panel, oltre ad avere dei controlli numerici di cui voglio settare la caption, ho anche dei tasti booleani di cui voglio poter settare il boolean text. Mentre però la caption è una proprietà comune a tutti gli oggetti e riesco a settarla nel loop, il boolean text è una proprietà dei soli pulsanti e quindi non la vedo tra le stesse properties. C'è un modo per capire di che tipo è il controllo di cui leggo il refnum e quindi scegliere dinamicamente la proprietà che voglio settare?
Rita
----------------------------------------
AUTORE: 43
DATA :09/12/2010 - 09:19:56
----------------------------------------
[quote="Rita":1yv0a2n0]Ciao Andrea,
grazie mille per l'esempio che mi hai postato.. Adesso però ho un altro piccolo problema: nel mio front panel, oltre ad avere dei controlli numerici di cui voglio settare la caption, ho anche dei tasti booleani di cui voglio poter settare il boolean text. Mentre però la caption è una proprietà comune a tutti gli oggetti e riesco a settarla nel loop, il boolean text è una proprietà dei soli pulsanti e quindi non la vedo tra le stesse properties. C'è un modo per capire di che tipo è il controllo di cui leggo il refnum e quindi scegliere dinamicamente la proprietà che voglio settare?
Rita[/quote:1yv0a2n0]
Non solo.
hai presente tab, array e cluster? e le listbox? se volessi cambiare le caption di controlli /indicatori presenti in questi contenitori?
Per cambiare il testo contenuto in un tasto è sufficiente fare un "cast" del reference del tasto stesso.
Se avrai pazienza ti posterò in questi giorni una minilibreria per gestire tutti 'sti testi e spiegherò come usarla.
Non ho mai avuto tempo e modo di confezionare un documento ed una libreria ben fatta, come piace a me, per metterla a disposizione di tutti
Potrei comunque passarti tutta la roba con una spiega minima , fatta alla spicciolata...
bye
----------------------------------------
AUTORE: 3428
DATA :20/09/2012 - 15:09:02
----------------------------------------
Riporto a galla questa discussione perchè mi trovo ora con lo stesso probelma, o meglio necessità per risparmiare un bel pò di tempo, di Rita.
Vorrei creare una bellissima, stupenda VI da mettere all'inizio di ogni vi che voglio tradurre, passandogli per ingresso solamente il reference dell VI che voglio tradurre e all'interno lei non fa altro che associare ad una specifica label la sua caption che creerò in un file separato da tab.
Il problema incontrato sin da subito è che come hai scritto tu un front panel è formato da numerici, decorazioni, grafici, boolean, tabelle, enum ecc.
Come associare ogni tipo di traduzione?? ho provato tramite il class id del GObject e ovviamente si può fare creando una specifica traduzione associando il class id ad una struttura case con ben 60 casi, uno per ogni ID e collegare il reference dell'object a to more specific class per avere il riferimento e creare la caption...
Il problema si crea quando per esempio devo tradurre dinamicamente un controllo numerico, che sta ad esempio dentro ad un cluster che quest'ultimo fa parte di un ulteriore cluster padre che è contenuto in una tab...
Quello di cui potrei aver bisogno oltre che di un'idea ben precisa potrebbero essere quello che intendevi "Non ho mai avuto tempo e modo di confezionare un documento ed una libreria ben fatta, come piace a me, per metterla a disposizione di tutti
Potrei comunque passarti tutta la roba con una spiega minima , fatta alla spicciolata..."
Chiunque abbia un'idea...
----------------------------------------
AUTORE: 301
DATA :27/09/2012 - 10:11:44
----------------------------------------
Ciao renaso,
tempo fa ho fatto qualcosa di simile per trasformare (o trasportare) i valori di un cluster all'interno di una tabella e viceversa.....
Credo che una partenza sarebbe quella di crearti delle funzioni che "scompongano" tutti i reference di alcuni oggetti, es:
Funzione_scomponi_cluster = ti restituisce tutti i reference degli oggetti all'interno di un cluster.
Funzione_scomponi_tab = ti restituisce tutti i reference degli oggetti all'interno di un tab.
ecc. ecc.
Fatte queste, ti creerai un vi principale come quello postato in precedenza, che in presenza di uno qualsiasi degli oggetti (cluster, tab, ecc) ti scompone il tal controllo ed inserisce i reference (dei controlli che contiene) nell'array generale.
Il vi (per come lo avevo strutturato io) deve funzionare con un ciclo while, in modo da "finire" solo quando non trova più oggetti "complessi".
Spero di essere stato "non troppo contorto".
Aris
----------------------------------------
AUTORE: 301
DATA :27/09/2012 - 10:13:24
----------------------------------------
[quote="aris":2zl36c1w]
Credo che una partenza sarebbe quella di crearti delle funzioni che "scompongano" tutti i reference di alcuni oggetti, es:
[/quote:2zl36c1w]
Ovviamente "..potrebbe essere quella di......"
----------------------------------------
AUTORE: 301
DATA :29/10/2012 - 13:27:25
----------------------------------------
Ciao Renaso,
se guardi nella sezione Download\Upload, ho caricato una bozza di una libreria che potrebbe esserti utile!
Aris
----------------------------------------
AUTORE: 129
DATA :31/10/2012 - 08:45:58
----------------------------------------
Prova [url=http://www.bytelabs.it/?p=415:1fhouhk9]qui http://www.bytelabs.it/?p=415[/url:1fhouhk9], troverai qualche spounto per gestire propietà di controlli di tipo diverso.
Nicola
----------------------------------------
AUTORE: 3428
DATA :31/10/2012 - 09:12:53
----------------------------------------
Grazie ad entrambe delle info!
Proverò ad usarli
----------------------------------------
================================================================================
cortesia labview and s7-200
================================================================================
AUTORE: 3375
DATA :07/12/2010 - 10:39:21
----------------------------------------
Buon giorno
Vorrei chiedere quest'informazione vorrei collegare il mio piccolo plc s7-200 cpu 221 con labview
Al momento io uso mitsubishi quindi ho il ni opc server non ho capito come collegarlo
userei la porta serieale con l'adattatore che mi ha fornito siemens come fare un piccolo scada
vorrei realizzare un po di domotica in casa tutto li grazie
----------------------------------------
AUTORE: 1124
DATA :07/12/2010 - 12:54:09
----------------------------------------
Ciao
non uso opc server, ma la CPU 221 dovrebbe avere almeno una porta seriale rs485 che puoi usare per comunicare con l'applicazione su pc, scritta in labview, in modalità freeport (lato PLC).
Siemens mette a disposizione alcuni 'tips' (forse il Tip005b) abbastanza semplici e facilmente utilizzabili. Ovviamente ti serve un adattatore 485/232 per usare la seriale del pc.
Stefano
----------------------------------------
AUTORE: 3375
DATA :07/12/2010 - 13:27:11
----------------------------------------
grazie stefano userei l'adattartore che ho che appunto da da rs 232 a rs 485 quello che mi hanno dato nel pacchetto di programmazione siemens
mi hai risposto di provare a usare "in modalità freeport (lato PLC).Siemens mette a disposizione alcuni 'tips' (forse il Tip005b) abbastanza semplici e facilmente utilizzabili"
dove trovo la documentazione su come fare tutto questo ?? grazie e scusami ma non conosco
----------------------------------------
AUTORE: 1124
DATA :07/12/2010 - 13:38:58
----------------------------------------
Ciao
prova a scaricare i tips da questo link. in ogni caso in allegato trovi il tip005b.
Stefano
----------------------------------------
AUTORE: 1124
DATA :07/12/2010 - 13:45:15
----------------------------------------
ops.. avevo dimenticato il link ...
https://www.automation.siemens.com/WW/f ... anguage=en
----------------------------------------
AUTORE: 3375
DATA :07/12/2010 - 20:44:01
----------------------------------------
scusate la mia ignoranza davvero Stefano
ti chiedo di aver pazienza ma a che serve sto tip005c l'ho scaricato e mi sono trovato un file tip005.mwp
ora come lo collego a labview?
Vi chiedo di essere pazienti grazie
in breve dove lo metto sto file e come si collega a labview??
----------------------------------------
AUTORE: 1124
DATA :09/12/2010 - 09:01:25
----------------------------------------
Ciao
i file mwp sono i 'sorgenti' dei programmi per i PLC siemens s7-200.
In particolare il file tip005b.mwp è un esempio di comunicazione seriale in modalità freeport.
Questo file deve essere caricato nell'ambiente di sviluppo "Step7-microwin" necessario alla programmazione dei plc s7-200.
Il file tip005b.mwp non può essere usato da labview.
In labview dovrai scrivere la routine di dialogo con la porta seriale (RS485).
Stefano
----------------------------------------
================================================================================
sincronizzazione for parallelo
================================================================================
AUTORE: 3286
DATA :07/12/2010 - 13:58:49
----------------------------------------
Semplice domanda: come si fa a sincronizzare due cicli for in parallelo??? hanno entrambi lo stesso numero di giro, voglio che xò li esegua in simultanea
----------------------------------------
AUTORE: 645
DATA :07/12/2010 - 14:37:08
----------------------------------------
Non sono sicurissimo ma se hai un processore multi core dovresti poter selezionare il core da assegnare ad ogni ciclo e questi, se fatti partire nello stesso istante, lavoreranno parallelamente.
Se invece hai un processore con core unico LabView gestirà il funzionamento per farlo sembrare il più contemporaneo possibile.
----------------------------------------
AUTORE: 43
DATA :09/12/2010 - 09:26:36
----------------------------------------
[quote="daddo_ska":30ahwn9l]Semplice domanda: come si fa a sincronizzare due cicli for in parallelo??? hanno entrambi lo stesso numero di giro, voglio che xò li esegua in simultanea[/quote:30ahwn9l]
detta così più che sincronizzare i 2 loop "ogni tanto", cioè quando capitano eventi particolari, sembra che tu voglia che vengano eseguiti i 2 loop e che ad ogni step quello che "finisce prima" debba attendere il completamento dello step dell'altro.
giusto?
Se fosse così basta mettere il tutto in un unico loop. Se non ci sono "fili" o altro in comune, i due blocchi saranno eseguiti in "parallelo" dentro lo stesso loop.
bye
----------------------------------------
================================================================================
Porting da C a LV
================================================================================
AUTORE: 2435
DATA :07/12/2010 - 16:19:55
----------------------------------------
Ciao sapete dirmi a che controllo corrisponde questa struttura??
struct FTPASample
{
float x,y,z;
};
Grazie
----------------------------------------
AUTORE: 43
DATA :09/12/2010 - 09:09:43
----------------------------------------
Corrisponde ad un cluster con 3 float
[attachment=0:3phvze28]xyz.PNG[/attachment:3phvze28]
----------------------------------------
================================================================================
Drag & Drop su TreeView
================================================================================
AUTORE: 1078
DATA :10/12/2010 - 12:56:59
----------------------------------------
Ciao a tutti,
Ho un piccolo problema (spero sia piccolo!). Devo implementare le funzioni di drag & drop verso una treeview e tra item della treeview stessa. Riesco a implementare correttamente il drag & drop da un controllo esterno verso la treeview e riesco anche a spostare gli item selezionati e trascinati inserendoli come child nella dell'item su cui è stato fatto il rilascio. Il problema è che anche se sposto gli item facendoli diventare child del'elemento su cui sono stati rilasciati, non riesco a far apparire l'icona con il simbolo "+" ai lati del'elemento padre e di conseguenza non riesco a fare espandere l'alabero della treeview. Qualcuno sa dirmi dove sbaglio?
Vi allego il mio vi.
----------------------------------------
AUTORE: 1078
DATA :15/12/2010 - 10:00:13
----------------------------------------
Ho trovato qualcosa sul forum NI che mi ha dato una mano risolvere il problema. Per chi fosse interessato può consultare la discussione all'indirizzo: [url:32am8ojh]http://forums.ni.com/t5/LabVIEW/Tree-Control-Drag-Drop-in-LabVIEW-8/m-p/304816[/url:32am8ojh]
In sostanza quando si implementa il drag and drop di una treeview si perdono le funzionalità intrinsiche del controllo e si deve riscrivere tutto il codice necessario a gestire i nodi. Quindi va verificato quale nodo si sta spostando e verso quale "Parente". Il controllo mantiene la capacità di eliminare il tag spostato, ma si deve aggiungere manualmente all'item "parent" di destinazione. Il tag dell'item di destinazione si ottiene attraverso l'invoke node "Point to row colum".
Spero di essere stato chiaro....
Grazie comunque per il supporto!
----------------------------------------
================================================================================
Eseguire operazioni su dati da RS232 molto veloci
================================================================================
AUTORE: 3401
DATA :16/12/2010 - 20:06:56
----------------------------------------
Ciao a tutti, sono nuovo del forum ed ho deciso di iscrivermi perchè mi capita di utilizzare Labview sempre più di frequente in questo periodo. Vi pongo la mia domanda alla quale non ho trovato soluzione girovagando per la rete:
ho implementato una vi che comunica tramite RS232 con una centralina di monitoraggio ambientale basata su sensori a stato solido. Sono riuscito in 4 giorni di prove a implementare un grafico (Graph chart, anche se avrei voluto un wave chart ma non ci sono riuscito) questo grafico viene costruito prendendo la stringa in ingresso alla seriale, si aggiorna ogniqualvolta il conto dei bit da seriale è diverso da zero (quindi inserito in un ciclo true/false), prendendo una parte della stringa in entrata (parte che mi fornisce il valore in tensione che è separato da caratteri di sistema "#01"). Fino a che la frequenza di acquisizione non è troppo veloce tutto funziona bene, ma quando si porta la frequenza delle stringhe in entrata ad 1 secondo (preciso che è lo strumento che fornisce i valori in seriale una volta avviata la procedura e non il programma che li chiede uno ad uno), l'operazione di estrazione del dato utile dalla stringa in entrata non è più efficiente, non riconosce più i 4 caratteri numerici che seguono i caratteri di riconoscimento del canale ("#01") e mi piazza sul grafico in alternanza anche gli altri valori della stringa.
Come posso fare per risolvere il problema?
Mi scuso per la lungaggine ma intendevo essere il più chiaro possibile.
Ringrazio in anticipo.
----------------------------------------
AUTORE: 1168
DATA :17/12/2010 - 07:42:00
----------------------------------------
Ciao!
1 dato al secondo non mi sembra "molto veloce"...
Probabilmente ci sono delle problematiche di tempistica. Sicuro che il tempo di esecuzione del tuo VI sia molto inferiore a 1 s ( hai messo delle temporizzazioni nei cicli che sommate portano a lunghi tempi di esecuzione)?
L'errore è dovuto al fatto che nel buffer della seriale ti trovi più di un dato e quindi il parsing viene fatto male?
Con che strategia hai implementato il tuo VI? così su due piedi io avrei buttato tutto in due cicli paralleli... uno monitora la seriale, quando il numero di caratteri presenti contiene sicuramente un dato valido avrei estratto il contenuto del buffer e passato al secondo ciclo tramite code. Poi separo il dato che mi interessa E NON butto via il rimanente perchè deve essere messo in testa al messaggio dopo.
E' un po' che non faccio parsing di messaggi, magari NI ha aggiunto qualche blocchetto nuovo!
Puoi postare uno snippet o immagine del block digram?
Buona giornata!
----------------------------------------
AUTORE: 1168
DATA :17/12/2010 - 07:43:54
----------------------------------------
Ah, ho riletto bene!
Non devi estrarre il dato quando il bit count della zeriale è diverso da zero, altrimenti corri il rischio di non avere un messaggio completo, o di avere più di un messaggio e di perderteli!
----------------------------------------
AUTORE: 3401
DATA :17/12/2010 - 10:57:49
----------------------------------------
Ci sono riuscito!
il fatto era che nel frattempo modificando e tornando indietro (ctrl+z) sono tornato indietro ad un punto precedente in cui per cercare il carattere "#01" avevo sostituito al "Match Pattern" il "Match Substring" cosa che avrebbe funzionato comunque se la stringa al secondo fosse uscita tutta intera, invece a volte casualmente esce in tre sottoblocchi, piccola differenza ma sostanziale per cui mi sballava tutto. Dunque, anche a me sembrava strano che 1 dato/secondo non fosse un problema per Labview ma avendo fatto confusione con i vari sub vi l'errore era mio
..Grande Labview
Ti ringrazio comunque per i suggerimenti.
Dato che ci sono ora ti/vi chiedo: sto graficando i dati dalla stringa con un Graph Chart, quindi in ascissa ottengo solamente un numero progressivo perchè io do al grafico solo il valore dell'ordinata (e gli faccio fare il refresh solo quando c'è un numero nel buffer). Ho provato e riprovato per 4 giorni a costruire un Wave Graph o anche un XY mandando in ascissa Data e Ora ma nel grafico non compare nulla, rimane vuoto. Quindi la domanda specifica è questa: Dato (Y) da seriale, come faccio ad ottenere un grafico XY con l'orario corrispondente al piazzamento del punto sul grafico? Non mi sono stati d'aiuto nè l'help di labview nè gli esempi che ho trovato in rete
----------------------------------------
AUTORE: 1168
DATA :17/12/2010 - 13:06:32
----------------------------------------
Ora non ho un pc con LV installato a portata di mano, ma mi sembra basti andare sulle proprietà della scala (tasto destro ecc ecc) e mettere "absolute time" o "relative time" a seconda se ti serve la data e ora, o il tempo trascorso dall'avvio del VI.
Ciaooooo
Mizzzega se nevicaaaaaaaaa
----------------------------------------
AUTORE: 645
DATA :20/12/2010 - 13:45:24
----------------------------------------
Puoi ricavare il tempo corrente dal blocco apposito di LabView contenuto nella paletta "Time" (purtroppo non ho LabView sottomano e i riferimenti non sono esattissimi al 100%). Poi passi al grafico il valore temporale e il valore dell'asse Y come coppia di dati.
Per non incorrere in problemi di velocità puoi anche valutare di aggiornare il grafico ogni tot di tempo: raccogli i dati che arrivano in vettori, uno per l'asse Y, l'altro per il tempo corrente.
Ogni tot di tempo (se il tempo di scansione è costante corrisponde ad ogni tot di valori) aggiorni il grafico: in questo modo il carico di aggiornamenti (parte pesante del VI) diminuisce.
----------------------------------------
AUTORE: 3401
DATA :21/12/2010 - 15:16:23
----------------------------------------
Ciao MAgicBotolo, ti chiedo una cosa che mi pare interessante quello che mi hai suggerito per raccogliere le stringhe in un vettore:
1) il vettore lo faccio grande a piacere...diciamo 1x5 (?)
2) le stringhe nel vettore entrano una alla volta e rimangono divise per stringhe? intendo che nella posizione (1,1) del vettore c'è la prima stringa, nella posizione (1,2) la seconda ecc? (le stringhe in entrata alla seriale sono separate da un CR).
3) come estraggo le varie stringhe dal vettore? basta collegare l'uscita del vettore al grafico e fare aggiornare il grafico ogni tot secondi che gli dico io con un ciclo while?
Ti chiedo questo perchè ho notato che facendo girare il vi.exe in un PC meno potente si perde qualche dato per strada (nel grafico compare ogni tanto un punto a zero, significa che il grafico legge ma non gli arriva nessun dato in quell'istante) quindi a quello che posso capire serve una sorta di contenitore che faccia uscire le stringhe una dietro l'altra ma un po' in ritardo rispetto ai cicli che ci sono nel vi.
Spero di essermi spiegato.
Grazie.
----------------------------------------
================================================================================
Come visualizzare su grafico
================================================================================
AUTORE: 2435
DATA :17/12/2010 - 13:38:52
----------------------------------------
Ciao a tutti,
ho carico un esempio.
Vorrei sapere come si possono visualizzare entrambe le variabili.
Grazie
----------------------------------------
AUTORE: 43
DATA :17/12/2010 - 15:48:01
----------------------------------------
[attachment=0:1reuiuir]MerdaChart.vi[/attachment:1reuiuir]
bye
----------------------------------------
================================================================================
riscaldamento forni
================================================================================
AUTORE: 3419
DATA :22/12/2010 - 15:34:57
----------------------------------------
Premetto che non so praticamente usare labview. dovrei riscaldare un forno con una rampa di temperatura lineare del tipo Tfinale= Tiniziale +velocità di riscaldamento*tempo con la possibilità di impostare la velocità di riscaldamento variabile tra 10 e 40 °C/minuto. Sapreste darmi un suggerimento?
Grazie mille
----------------------------------------
AUTORE: 1168
DATA :23/12/2010 - 07:50:48
----------------------------------------
Domanda ma devi usare per forza Labview per altri motivi oppure ti basta un controllo industriale? Esistono dei controlli di temperatua che fanno esattamente quello che chiedi, devi solo attaccarci una termocoppia e un driver!!!
io avevo usato termoregolatori Watlow e anche se un po' cari, avevano funzionato molto bene!
Ciaooo
Pietro
----------------------------------------
AUTORE: 3419
DATA :27/12/2010 - 14:41:29
----------------------------------------
lo so, hai perfettamente ragione...ma il mio capo è un amante del labview pertanto mi conviene che impari ad usarlo...grazie lo stesso
----------------------------------------
AUTORE: 1124
DATA :27/12/2010 - 14:57:52
----------------------------------------
ciao
come interagisci con il forno?
----------------------------------------
AUTORE: 3419
DATA :28/12/2010 - 11:55:28
----------------------------------------
Ho un analog output che manda un segnale in corrente ad un gruppo statico GEFRAN
----------------------------------------
AUTORE: 2855
DATA :28/12/2010 - 14:29:00
----------------------------------------
Ciao volevo sapere quale era l'attrezzatura (PID + Gruppo statico) in questione. Ai citato Gefran , nel caso fosse quello, non hai scelta devi usare l'OPC Server. Generalmente Gefran usa il protocollo Modbus su porta 485.
rolop
----------------------------------------
AUTORE: 2855
DATA :28/12/2010 - 14:30:09
----------------------------------------
Naturalmente intendevo "Al citato gefran".
scusate l'errore.
----------------------------------------
AUTORE: 1124
DATA :28/12/2010 - 16:04:44
----------------------------------------
Ciao
prendo per buono che hai un dispositivo in grado di generare il segnale di corrente con cui piloti lo statico di potenza e non utilizzi la modalità di comunicazione Modbus, ma in ogni caso l'approccio è simile.
Se riesci a eseguire le seguenti azioni dovresti riuscire a risolvere il problema:
1) lettura continua con periodo di 1-5s della temperatura del forno;
2) generazione continua della rampa (dentro ad un 'do while' lento:1-5s);
3) generazione continua (dentro al 'do while' del punto 2)di un loop di controllo continuo ad anello chiuso Proporzionale+Integrativo dove la rampa è il set-point e la temperatura del forno la variabile di processo;
4) conversione del valore in uscita del loop PI in una informazione gestibile dall'attuatore statico. Se hai un hardware che genera direttamente la corrente di pilotaggio non dovresti avere problemi, ma per esperienza personale ho sempre usato dei convertitori tensione/corrente per sfruttare il segnale analogico in tensione fornito da schede multipurpose. Se invece usi la comunicazione Modbus devi passare il valore in uscita dal loop PI costruendo probabilmente una stringa di comando per modificare l'output dell'attuatore statico: questo dipende dalla sintassi dei comandi Gefran.
Stefano
----------------------------------------
AUTORE: 3419
DATA :29/12/2010 - 14:14:57
----------------------------------------
grazie stefano sono arrivata al quarto punto...ti farò sapere
----------------------------------------
================================================================================
Problema a compilare con Labview 7.1
================================================================================
AUTORE: 3422
DATA :23/12/2010 - 10:51:26
----------------------------------------
Salve a tutti,
ho realizzato un VI che estrae dati da un Database Citadel, sto tentando di compilarlo per farlo girare su una macchina che dispone del runtime engine.
Il processo di build con opzione "Single target file containing all VIs" va a buon fine, tuttavia quando tento di lanciare l'eseguibile (sulla stessa macchina su cui ho compilato e dalla cartella in cui c'è il runtime engine) il sistema mi chiede di localizzate alcuni VI che quindi suppongo non siano finiti nell'eseguibile, in primis il Read Traces.vi (che è un VI Polimorfico).
Qualcuno sa come posso risolvere il problema?
Grazie.
-sassos
----------------------------------------
AUTORE: 3422
DATA :05/01/2011 - 10:16:06
----------------------------------------
Problema risolto.
Non basta il run-time engine, occorre installare sul pc target su cui deve girare l'eseguibile il DSC run-time engine. In questo modo l'eseguibile funziona.
--Per inciso sul PC di sviluppo se si vuole testare l'eseguibile è possibile farlo posizionando l'exe nella cartella del (normale) run-time engine e copiando lì anche la cartella vi.lib (in cui ci sono i VI che il processo di build non inserisce nell'eseguibile.---
sassos
----------------------------------------
AUTORE: 5314
DATA :01/11/2012 - 17:07:22
----------------------------------------
ciao
io ho un problema simile quando compilo con labview 2011.
In pratica sembra che il fatto di copiare la vi lib nelle macchine target non funzioni piu. Tutto quello che serve al programma per funzionare deve essere compreso dentro il progetto quando si crea l' eseguibile.Questa chiaramente è una grossa limitazione.
Qualcuno sa come posso ovviare al problema?
----------------------------------------
================================================================================
Problema Generazione Segnale
================================================================================
AUTORE: 3420
DATA :24/12/2010 - 15:29:20
----------------------------------------
Salve a tutti.
Sono uno studente dell'università di Modena e sto preparando la tesi.
Sto programmando in labview un programma per l'analisi dei dati di un motore navale.
Vi spiego il mio problema:
Io devo generare un segnale ad onda quadra con una determinata frequenza. Di questo segnale ne devo calcolare i FRONTI DI SALITA.
Mi si presenta un problema però con alcune frequenza. Per esempio con 10 Hz non riesco a rilevare il fronte di salita.
Stessa identica cosa con 100Hz e altre frequenze.
Mentre con per esempio 22,5 Hz non c'è queso problema
Io credo che sia dovuto a un problema di coincidenza con multipli del periodo interno del blocco di generazione del segnale.
Il blocco in questione è questo: [img:3maj7d4d]http://img641.imageshack.us/img641/295/catturajc.jpg[/img:3maj7d4d]
Sapete a cosa è dovuto? E' una questione di impostazioni del blocco? (io ho provato a modificare le proprietà ma il problema è sempre presente).
C'è la possibilità di risolvere la cosa?
Altri blocchi da poter usare?
Vi ringrazio per l'attenzione.
March
----------------------------------------
AUTORE: 1124
DATA :28/12/2010 - 16:19:54
----------------------------------------
Ciao
non so perchè avviene e nemmeno se quanto sto per suggerirti potrà aiutarti, ma durante un seminario in NI ho notato che per generazioni di segnali i tecnici usavano frequenze tipo 10.1Hz. L'aggiunta di un decimo di Hz risolveva tutti i problemi di 'campionamento' del segnale.
Stefano
----------------------------------------
AUTORE: 3420
DATA :28/12/2010 - 18:34:34
----------------------------------------
Grazie stefanog.
Ho notato anche io la cosa.
Però questo segnale è generato dalla differenza di altri due segnali moltiplicati per un altro numero intero, quindi nel momento di generazione segnale non so quale sia la frequenza del caso. ( siccome sono in modalità realtime attaccato a un motore e compactRIO ).
Ora vedrò se con porte logiche riesco a capire se sommare alla mia frequenza uno 0,1 oppure no.
Pensi possa essere una soluzione? O hai altre idee?
----------------------------------------
================================================================================
Iniziare con LabView
================================================================================
AUTORE: 3428
DATA :27/12/2010 - 17:22:28
----------------------------------------
Salve mi chiamo Luca e mi sono appena laureato in informatica. Ho ricevuto subito un'offerta di lavoro che richiede la conoscenza di labview.
Sono un perfetto neofita e vorrei delle informazioni a riguardo, se possibile.
Dove trovare informazioni, ebook, guide ufficiali (meglio se in italiano), tutorial, demo, il programma l'ambiente labview di prova ecc. tutto per iniziare a lavorare con questo strumento e arrivare a lavoro con delle basi su cui partire.
Faccio i miei migliori Auguri a tutti voi nella speranza che qualcuno possa aiutarmi
Luca
----------------------------------------
AUTORE: 3428
DATA :05/01/2011 - 11:36:36
----------------------------------------
nessuno sa indirizzarmi verso qualche fonte?
----------------------------------------
AUTORE: 1124
DATA :05/01/2011 - 13:09:20
----------------------------------------
Ciao e Buon 2011!!!
Oltre alla documentazione ufficiale NI potresti iniziare sfogliando un paio di libri in italiano:
- "Programmare? Impariamo con il Labview. Corso teorico pratico d'introduzione alla programmazione dei calcolatori elettronici"
Autore Guadagni G. Enrico
- "Controllo ed elaborazione numerica dei segnali con Labview" con CD allegato
Autore Zecchi Armando
Buon lavoro.
Stefano
----------------------------------------
AUTORE: 3428
DATA :05/01/2011 - 13:27:59
----------------------------------------
Grazie, ma la documentazione ufficiale in italiano esiste?
E qualcosa gratis prima di comprare i libri?
----------------------------------------
AUTORE: 1124
DATA :05/01/2011 - 13:47:10
----------------------------------------
Ciao
per la documentazione ufficiale chiederei direttamente a NI, mentre qui "http://sandbox.ilvg.it/?page_id=98" puoi già trovare documenti interessanti.
Prova con una ricerca su web, ma credo che in italiano, di terze parti, ci sia poco.
Se scarichi l'ultima versione di LV per un mese ci puoi smanettare gratuitamente.
Stefano
----------------------------------------
================================================================================
sistema di equazioni lineari
================================================================================
AUTORE: 680
DATA :29/12/2010 - 12:55:47
----------------------------------------
Ciao,
dovrei risolvere questo sistema di equazioni:
{ (x-xa)^2 + (y-ya)^2 = (x-xb)^2 + (y-yb)^2
{ (x-xa)^2 + (y-ya)^2 = r^2
noti sono i valori di xa,ya, xb,yb e r
da ottenere i valori di x e y (possono assumere due valori diversi)
pensavo di utilizzare il Mathscritp Node ma non avendo conoscenza di Mathlab....
Grazie ciao...
----------------------------------------
AUTORE: 1124
DATA :29/12/2010 - 18:16:18
----------------------------------------
ciao
hai provato con scilab?
----------------------------------------