Instrument Control (GPIB, Serial, VISA, IVI)

cancel
Showing results for 
Search instead for 
Did you mean: 

BFFA0060 : Insufficient location information or resource not present in the system.

 

 

Hello,

I'm looking to communicate to a PCIe using a thunderbolt cable in order to use an integrated PXI module.

The PCIe manufactrer has provided an IVI driver based as you can see the UserManual attached below.

With the following C/C++ program desplayed below :

 

int main()
{
cout << "SimpleAcquisition\n\n";

//ViSession session = VI_NULL;
ViSession session;
viOpenDefaultRM( &session );

ViChar search[] = "PXI?*::INSTR";
ViFindList find = VI_NULL;
ViUInt32 count = 0;
ViChar rsrc[256];
ViStatus status = viFindRsrc( session, search, &find, &count, rsrc );
if( status==VI_SUCCESS && count>0 )
{
do
{
PXI_Port = rsrc;
printf( "Found: \"%s\"\n", rsrc );
status = viFindNext( find, rsrc );
} while( status==VI_SUCCESS );
//viClose( find );
}
else if( count==0 )
{
printf( "No PXI instrument found\n" );
}
//viClose( session );

// Initialize the driver. See driver help topic "Initializing the IVI-C Driver" for additional information.
//ViSession session=rm;
ViBoolean const idQuery = VI_TRUE;
ViBoolean const reset = VI_FALSE;
// Setup IVI-defined initialization options
ViConstString standardInitOptions ="Cache=true, InterchangeCheck=false, QueryInstrStatus=true, RangeCheck=true, RecordCoercions=false,Simulate=false";

checkApiCall( AqMD3_InitWithOptions( rsrc, idQuery, reset, standardInitOptions, &session ) );

cout << "Driver initialized \n";
//ViSession session=rm;
// Read and output a few attributes.
ViChar str[128];
checkApiCall( AqMD3_GetAttributeViString( session, "", AqMD3_ATTR_SPECIFIC_DRIVER_PREFIX, sizeof( str ), str ) );
cout << "Driver prefix: " << str << '\n';
checkApiCall( AqMD3_GetAttributeViString( session, "", AqMD3_ATTR_SPECIFIC_DRIVER_REVISION, sizeof( str ), str ) );
cout << "Driver revision: " << str << '\n';
checkApiCall( AqMD3_GetAttributeViString( session, "", AqMD3_ATTR_SPECIFIC_DRIVER_VENDOR, sizeof( str ), str ) );
cout << "Driver vendor: " << str << '\n';
checkApiCall( AqMD3_GetAttributeViString( session, "", AqMD3_ATTR_SPECIFIC_DRIVER_DESCRIPTION, sizeof( str ), str ) );
cout << "Driver description: " << str << '\n';
checkApiCall( AqMD3_GetAttributeViString( session, "", AqMD3_ATTR_INSTRUMENT_MODEL, sizeof( str ), str ) );
cout << "Instrument model: " << str << '\n';
checkApiCall( AqMD3_GetAttributeViString( session, "", AqMD3_ATTR_INSTRUMENT_INFO_OPTIONS, sizeof( str ), str ) );
cout << "Instrument options: " << str << '\n';
checkApiCall( AqMD3_GetAttributeViString( session, "", AqMD3_ATTR_INSTRUMENT_FIRMWARE_REVISION, sizeof( str ), str ) );
cout << "Firmware revision: " << str << '\n';
checkApiCall( AqMD3_GetAttributeViString( session, "", AqMD3_ATTR_INSTRUMENT_INFO_SERIAL_NUMBER_STRING, sizeof( str ), str ) );
cout << "Serial number: " << str << '\n';

ViBoolean simulate;
checkApiCall( AqMD3_GetAttributeViBoolean( session, "", AqMD3_ATTR_SIMULATE, &simulate ) );
cout << "\nSimulate: " << ( simulate?"True":"False" ) << '\n';

// Configure the acquisition.
ViReal64 const range = 1.0;
ViReal64 const offset = 0.0;
ViInt32 const coupling = AqMD3_VAL_VERTICAL_COUPLING_DC;
cout << "\nConfiguring acquisition\n";
cout << "Range: " << range << '\n';
cout << "Offset: " << offset << '\n';
cout << "Coupling: " << ( coupling?"DC":"AC" ) << '\n';
checkApiCall( AqMD3_ConfigureChannel( session, "Channel1", range, offset, coupling, VI_TRUE ) );
cout << "Number of records: " << numRecords << '\n';
cout << "Record size: " << recordSize << '\n';
checkApiCall( AqMD3_SetAttributeViInt64( session, "", AqMD3_ATTR_NUM_RECORDS_TO_ACQUIRE, numRecords ) );
checkApiCall( AqMD3_SetAttributeViInt64( session, "", AqMD3_ATTR_RECORD_SIZE, recordSize ) );

// Configure the trigger.
cout << "\nConfiguring trigger\n";
checkApiCall( AqMD3_SetAttributeViString( session, "", AqMD3_ATTR_ACTIVE_TRIGGER_SOURCE, "Internal1" ) );

// Calibrate the instrument.
cout << "\nPerforming self-calibration\n";
checkApiCall( AqMD3_SelfCalibrate( session ) );

// Perform the acquisition.
ViInt32 const timeoutInMs = 1000;
cout << "\nPerforming acquisition\n";
checkApiCall( AqMD3_InitiateAcquisition( session ) );
checkApiCall( AqMD3_WaitForAcquisitionComplete( session, timeoutInMs ) );
cout << "Acquisition completed\n";

// Fetch the acquired data in array.
ViInt64 arraySize = 0;
checkApiCall( AqMD3_QueryMinWaveformMemory( session, 16, numRecords, 0, recordSize, &arraySize ) );

vector<ViInt16> dataArray( static_cast<size_t>(arraySize) );
ViInt64 actualPoints, firstValidPoint;
ViReal64 initialXOffset[numRecords], initialXTimeSeconds[numRecords], initialXTimeFraction[numRecords];
ViReal64 xIncrement = 0.0, scaleFactor = 0.0, scaleOffset = 0.0;
checkApiCall( AqMD3_FetchWaveformInt16( session, "Channel1", arraySize, &dataArray[0],
&actualPoints, &firstValidPoint, initialXOffset, initialXTimeSeconds, initialXTimeFraction,
&xIncrement, &scaleFactor, &scaleOffset ) );

// Convert data to Volts.
cout << "\nProcessing data\n";
for( ViInt64 currentPoint = 0; currentPoint< actualPoints; ++currentPoint )
{
ViReal64 valueInVolts = dataArray[static_cast<size_t>(firstValidPoint + currentPoint)]*scaleFactor + scaleOffset;
}

cout << "Processing completed\n";

// Close the driver.
checkApiCall( AqMD3_close( session ) );
cout << "\nDriver closed\n";

return 0;
}

 

I'm getting the error :  BFFA0060 : Insufficient location information or resource not present in the system.

Also, the PCIe is not displayed in Ni Max as you can see in the attatched image.

chaimoss_0-1672838988505.png

 

I can't see the cause of the resource's absence.

Any help will be appreciated.

0 Kudos
Message 1 of 1
(810 Views)