Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Visual C++
Forum - C# / VB.NET - Visual C++

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
strovinati (Normal User)
Newbie


Messaggi: 4
Iscritto: 04/11/2009

Segnala al moderatore
Postato alle 17:01
Mercoledì, 04/11/2009
Salve ragazzi. Premetto che non sono un mostro in programmazionee mi scuso anticipatamente per la mia ignoranza.
Il problema è il seguente:
Devo sviluppare un tool in visual c++ che data una funzione selezionata sull'oscilloscopio mi acquisisca e memorizzi i campioni della forma d'onda. Vorrei sapere gentilmente se esiste qualche funzione che mi permetta di far ciò.
Grazie anticipatamente
  

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:31
Mercoledì, 04/11/2009
Non credo che i programmatori del framework siano stati così lungimiranti da inserire una classe per questo scopo. Non conosco librerie al riguardo. E non so cosa usi per collegare l'oscilloscopio al computer.
Qualche dettaglio in più, magari...

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 18:21
Mercoledì, 04/11/2009
tanto per intenderci.....per Visual C++ intendi C++/CLI oppure C++ standard?
perché se è come penso(cioè ti colleghi all'oscilloscopio con la seriale) usando il .NET è moooolto più facile

PM Quote
Avatar
strovinati (Normal User)
Newbie


Messaggi: 4
Iscritto: 04/11/2009

Segnala al moderatore
Postato alle 10:40
Venerdì, 06/11/2009
Inizio col ringraziarvi per la considerazione.
Io uso il C++ di visual studio, e mi collego all'oscilloscopio lecroy. Sono riuscito ad acquisire campioni mediante la funzione GetScaledWaveform che mi ritorna un array di campioni.
La domanda è la seguente: come faccio a memorizzarli senza esser sicuro di non perderne nessuno?
Grazie Grazie

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:39
Venerdì, 06/11/2009
scusa la domanda strovinati.

Che lib usi?
l'array di ritorno di che tipo è?

magari potresti mostrarci qualche porzione del codice?
senza uno straccio di informazione e impossibile aiutarti.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:45
Venerdì, 06/11/2009
Basta scriverli in un file wave. Ho scritto una classe apposita per gestire i wave, che supporta un metodo per aggiungere direttamente campioni all'onda:
http://www.pierotofy.it/pages/sorgenti/browse/18027/
Il metodo accetta un array di array di interi, dato che ci possono essere più canali.

PM Quote
Avatar
strovinati (Normal User)
Newbie


Messaggi: 4
Iscritto: 04/11/2009

Segnala al moderatore
Postato alle 16:39
Sabato, 07/11/2009
Ecco il codice con cui prendo i campioni dall'oscilloscopio:

CActiveDSO dso;
RECT dummyRect;
dso.Create(_T("LeCroy.ActiveDSOCtrl.1"), _T("ActiveDSOTest"), 0, dummyRect, this, 0);

// connect to the DSO
    dso.MakeConnection(_T("IP: 172.25.1.2"));
    dso.SetRemoteLocal(1);

// retrieve a binary waveform from the DSO (retrieves an array of single-precision floating point values.)
    COleVariant  waveform;
    waveform.Attach(dso.GetScaledWaveform(_T("F1"), MAX_POINTS, 0));
    

    // transfer each point into the array 'waveData'
        long index = 0;
        long lowerBounds = 0;
        long upperBounds = 0;
        float data;
        
        SafeArrayGetLBound(waveform.parray, 1, &lowerBounds);
        SafeArrayGetUBound(waveform.parray, 1, &upperBounds);

        for(index = lowerBounds; index <= upperBounds; ++index)
        {
            SafeArrayGetElement(waveform.parray, &index, &data);

            // store each element in a global array
            waveData[index] = data;
        }

        InvalidateRect(NULL, 1);


    // show any error that may have occurred
        if(dso.GetErrorFlag())
        AfxMessageBox(dso.GetErrorString());

Il problema è che così leggo solo i campioni visualizzati sullo schermo dell'oscilloscopio in quel momento. Ho settato un timer di 5 secondi così da richiamare questa funzione periodicamente, ma mi è stato chiesto di essere sicuro di non perdere nessun campione.

Totem mi spieghi cosa sono i file wave? Dal nome sebra prorpio il tipo di file che serve a me, me non ne ho mai sentito parlare.

Grazie a tutti della disponibilità. ;)

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 13:40
Domenica, 08/11/2009
Mi pare strano che tu non abbia mai sentito (gioco di parole) dei file wave, dato che sono il formato base e più immediato per memorizzare i suoni. Per di più hai a che fare con le onde, quindi mi pare ancora più strano. Comunque:
http://it.wikipedia.org/wiki/WAV

Mai sei sicuro di star usando Visual C++ .NET? Perchè in caso contrario non potresti usare la mia libreria, e avresti anche sbagliato sezione.

PM Quote
Avatar
strovinati (Normal User)
Newbie


Messaggi: 4
Iscritto: 04/11/2009

Segnala al moderatore
Postato alle 18:00
Domenica, 08/11/2009
Si in effetti li conosco ma non avevo pensato ai file audio che si usano di solito.

Comunque si sto usando c++, il tuo link invece mi manda a tutti listati di codice in visual basic.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo