04-14-2008 03:09 AM
#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 😉
04-14-2008 09:09 AM
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