Measurement Studio for VC++

cancel
Showing results for 
Search instead for 
Did you mean: 

como funciona IVI Configuration Store?

Hola  muchachos, soy un estudiante bastante novato en esto de IVI, LXI, etc, pero con ganas de aprender
Estoy intentando desarrollar un software capaz de comunicarse con cualquier DMM independientemente del fabricante a traves de LXI
 
Tengo el siguiente codigo:
 

 

#include

"stdafx.h"

#import

"IviDriverTypeLib.dll" no_namespace named_guids

#import

"IviDmmTypeLib.dll" no_namespace named_guids

#import

"GlobMgr.dll" no_namespace named_guids

#import

"IviSessionFactory.dll" no_namespace named_guids

#import

"IviConfigServer.dll" no_namespace named_guids

 

 

 

int

_tmain(int argc, _TCHAR* argv[])

 

{

HRESULT hr;

char logicalName[] = "LineVoltage";

//int n;

 

hr = CoInitialize(NULL);

if(FAILED(hr))

exit(1);

try

{

IIviConfigStorePtr cs(

__uuidof(IviConfigStore));

printf("pasa");

getchar();

cs->Deserialize(cs->MasterLocation);

printf("pasa");

getchar();

 

IIviHardwareAssetPtr ha(

__uuidof(IviHardwareAsset));

printf("pasa");

getchar();

 

//Set its properties

ha->Name = _bstr_t("Agilent34401");

ha->Description = _bstr_t("Multimeter connected to the switch");

ha->IOResourceDescriptor = _bstr_t("GPIB::22::INSTR");

printf("pasa");

getchar();

cs->HardwareAssets->Add(ha);

printf("pasa5");

getchar();

// Create an empty DriverSession

IIviDriverSessionPtr ds(

__uuidof(IviDriverSession));

// Set its properties

ds->Name = _bstr_t("Agilent34401");

ds->Description = _bstr_t("DriverSession for the system multimeter");

ds->Cache =

true;

ds->InterchangeCheck =

false;

ds->QueryInstrStatus =

false;

ds->RangeCheck =

true;

ds->RecordCoercions =

false;

ds->Simulate =

false;

ds->DriverSetup = _bstr_t("");

// Add the HardwareAsset reference to the Session

ds->HardwareAsset = cs->HardwareAssets->Item["Agilent34401"];

// Add the SoftwareModule reference to the Session.

printf("pasa6");

getchar();

 

ds->SoftwareModule = cs->SoftwareModules->Item["Agilent34401"];

printf("pasa7");

getchar();

// Add it to the global

cs->DriverSessions->Add(ds);

printf("pasa7");

getchar();

 

IIviLogicalNamePtr ln(

__uuidof(IviLogicalName));

// Set its properties

ln->Name = _bstr_t("ANY_DMM");

ln->Description = _bstr_t("The name used in the test program");

ln->Session = cs->Sessions->Item["Agilent34401"];

// Add it to the global logical name collection

cs->LogicalNames->Add(ln);

 

cs->Serialize(cs->MasterLocation);

 

printf("pasa8");

getchar();

IIviSessionFactoryPtr spSF(

__uuidof(IviSessionFactory));

printf("pasa");

getchar();

IIviDmmPtr spDmm = spSF->CreateSession("ANY_DMM");

printf("pasa");

getchar();

spDmm->Initialize( "ANY_DMM", VARIANT_FALSE, VARIANT_FALSE, "");

printf("pasa");

getchar();

IIviDmmMeasurementPtr spMeas = spDmm->Measurement;

double dReading = spMeas->Read(3000);

//while(getchar());

printf("hola");

//n=getchar();

spDmm->Close();

}

catch( _com_error e) {

printf("error");

printf("%s",e.ErrorMessage);

getchar();

}

CoUninitialize();

printf("hola");

return 0;

}

 

 

El programa evidentemente es solo una manera ed aproximarme a este mundo, y no pretende ser ni de lejos una aproximación al programa final.

 

Sin embargo me sirve para realizar varias cuestiones:

 

1º) El programa tal y como esta ahora, suelta una excepcion en la linea

cs->HardwareAssets->Add(ha);

Sin embargo si quito la linea:

cs->Deserialize(cs->MasterLocation);

el porgrama sigue funcionando hasta que suelta otra excepcion en:

ds->SoftwareModule = cs->SoftwareModules->Item["Agilent34401"];

¿Qué sentuido tiene esto?

2º) De momento estoy probando el programa sin habe puesto en red el equipo, sin embargo no creo que eso debiera afeytar al Config Store ¿no?

 

3º) tengo una duda: la diferencia entre IVI-C e IVI-COM. ¿son dos formas de conseguir lo mismo, o sin embargo cada equipo precisa el acesso por una u otra forma?

 

4º) Alguien tiene un ejemplos que me puedan ayudar. Solo encuentro ejemplos para comunicarse con instrumentos especificos, pero me es dificil encontrar ejemplos usando las funciones ivisessionfactory, iviconfigstore, y las funciones para clases de instrumentos.

 

 

Muchas gracais por adelantado 😉

0 Kudos
Message 1 of 2
(6,442 Views)

Bueno, a falta de confirmacion creo que lo que habia que hacer es configurar un ProgID para el software module.

 

Lo que supongo es que este dato es algo que debería de conocer de antemano el usuario que quiere conectar su equipo para que funcione correctamente con el software.

 

Tengo otra pregunta por si alguien puede ayudarme: ¿Hay alguna forma de, una vez conectado un equipo a la red, a traves de mi programa en C pueda descubrir que clase de intrumento esta conectado: Osciloscopi, Multimetro, Analizador de eEspectro, etc.? Evidentemente sin que tenga que ser especificado por el usuario.

 

Gracias, y si alguien sabe más sobre el primer mensaje tb espero respuesta,

Saludetes

0 Kudos
Message 2 of 2
(6,433 Views)