Esempio n. 1
0
void CatDeviceManager::Uinitialize()
{
	try
	{
		ViSession session,defrm;
		int overcurron;
		float voltsetting,currsetting,overvoltsetting;

		char add[]="USB0::0x0957::0x0807::N5765A-US12N5190H::0::INSTR";
		//The default resource manager manages initializes the VISA system
		viOpenDefaultRM(&defrm);

		//opens a communication session with the instrument at address "add"
		viOpen(defrm,add,VI_NULL,VI_NULL,&session);

		//Enable the output
		viPrintf(session,"OUTP OFF \n");

		//This frees up all of the resources
		viClose(session);
		viClose(defrm);

		Get34980()->Close();
		Get34411()->Close();
	}
	catch(_com_error& e)
	{}
}
Esempio n. 2
0
/**
 * Create an instance of a Serial Port class.
 * 
 * @param baudRate The baud rate to configure the serial port.  The cRIO-9074 supports up to 230400 Baud.
 * @param dataBits The number of data bits per transfer.  Valid values are between 5 and 8 bits.
 * @param parity Select the type of parity checking to use.
 * @param stopBits The number of stop bits to use as defined by the enum StopBits.
 */
SerialPort::SerialPort(UINT32 baudRate, UINT8 dataBits, SerialPort::Parity parity, SerialPort::StopBits stopBits):m_resourceManagerHandle(0),
    m_portHandle
    (0)
{
    ViStatus status = VI_SUCCESS;
    status = viOpenDefaultRM((ViSession *) & m_resourceManagerHandle);
    wpi_assertCleanStatus(status);

    status =
        viOpen(m_resourceManagerHandle, "ASRL1::INSTR", VI_NULL, VI_NULL,
               (ViSession *) & m_portHandle);
    wpi_assertCleanStatus(status);

    status = viSetAttribute(m_portHandle, VI_ATTR_ASRL_BAUD, baudRate);
    wpi_assertCleanStatus(status);
    status = viSetAttribute(m_portHandle, VI_ATTR_ASRL_DATA_BITS, dataBits);
    wpi_assertCleanStatus(status);
    status = viSetAttribute(m_portHandle, VI_ATTR_ASRL_PARITY, parity);
    wpi_assertCleanStatus(status);
    status = viSetAttribute(m_portHandle, VI_ATTR_ASRL_STOP_BITS, stopBits);
    wpi_assertCleanStatus(status);

    // Set the default timeout to 5 seconds.
    SetTimeout(5.0f);

    // Don't wait until the buffer is full to transmit.
    SetWriteBufferMode(kFlushOnAccess);

    EnableTermination();

    //viInstallHandler(m_portHandle, VI_EVENT_IO_COMPLETION, ioCompleteHandler, this);
    //viEnableEvent(m_portHandle, VI_EVENT_IO_COMPLETION, VI_HNDLR, VI_NULL);
}
Esempio n. 3
0
void pressure () 
{ 
	/* Open communication with DataAcqu using usb-rs232 com address "7" */ 
	viOpenDefaultRM (&defaultRM); 
	viOpen (defaultRM,"ASRL07::INSTR",VI_NULL,VI_NULL, &DataAcqu); 
	
	viQueryf(DataAcqu, "*IDN?\n","%t",reply_string);
	printf ("Instrument identification string: %s\n",reply_string);
	
	/* Reset instrument to power-on and clear the Status Byte */ 
	viPrintf (DataAcqu, "*RST;*CLS\n");
	
	viPrintf (DataAcqu, "STAT:OPER:ENAB 272\n");
	viPrintf (DataAcqu, "*ESE 1\n");
	viPrintf (DataAcqu, "*SRE 255\n");
	
	viPrintf (DataAcqu, "CONF:CURR 0.1, 1e-5, (@121)\n");
	viPrintf (DataAcqu, "CALC:SCAL:GAIN 37500, (@121)\n");
	viPrintf (DataAcqu, "CALC:SCAL:OFFS -148.4, (@121)\n");	
	viPrintf (DataAcqu, "CALC:SCAL:UNIT 'KPA', (@121)\n");
	
	viPrintf (DataAcqu, "CALC:SCAL:STAT ON, (@121)\n");
	viPrintf (DataAcqu, "ROUT:SCAN (@121)\n");
	viPrintf (DataAcqu, "TRIG:SOUR TIM\n"); 
	viPrintf (DataAcqu, "TRIG:TIMER 5\n");
	viPrintf (DataAcqu, "TRIG:COUNT 5\n"); 
	viPrintf (DataAcqu, "INIT;*OPC\n"); 		
	
	for (count = 0; count <5; count++) 
	{
	/* Query the Status of Standard Operation Register
	   after the sweep done, the five bit position will set to 1 */		
	loop:			
		viPrintf(DataAcqu, "STAT:OPER?\n");
		viScanf(DataAcqu,"%d",&status);
		//printf("stat:oper= %d ", status);
		bool value;
		value = status & 0x10;
		//printf("value = %d ",value);
		
		
	if ( !value )  //if not set, keep query
		goto loop;
	else //show the query data
	{
		viPrintf(DataAcqu, "SYST:TIME?\n");
		viScanf(DataAcqu,"%s",&reply_string);
		printf("Time = %s ", reply_string);
		
		viPrintf (DataAcqu,"DATA:READ?\n"); /* Get all the readings */ 
		viScanf(DataAcqu,"%s",&temp);/* Put readings into an array */
		printf("Data = %s\n",  temp); 
	}
	
	}
	
	viClose (DataAcqu); /* Close the communication port */ 
	viClose (defaultRM); 
}
Esempio n. 4
0
void initGpib()
{
	char deviceName[256];
	FindRSrc(deviceName);
	viOpenDefaultRM (&defaultRM);
	viOpen (defaultRM, deviceName, VI_NULL,VI_NULL, &vi);
	pvi = &vi;

	init_equipment(pvi);
}
Esempio n. 5
0
//int init_power_supply(int comport,int gpib_address)
int init_power_supply(int gpib_address)
{
	//char comport_str[64]={0};
	int status=SUCCESS;
	char response[RESP_BUF_SIZE];
	char ps_desc[64];
	
	/*******************************************
	if (g_use_rs232_power)
	{
		ps_com_port = comport;
	
		status = serial_open(comport,9600);
	
	}
	*********************************************/
//	else
//	{
	sprintf(ps_desc,"GPIB0::%d::INSTR",gpib_address);
	
	if (!visaRM)
	{
		status = viOpenDefaultRM (&visaRM);
	}
	
	
	if (!ps_handle)
	{
		status = viOpen (visaRM, ps_desc, VI_NULL, VI_NULL, &ps_handle);
	}
//	}

	if (status==SUCCESS)
	{
		send_ps_command("*IDN?",response);
		send_ps_command("DIG:FUNC DIG",response);
		
		/**********************************************
		if (TestItems.PROGRAM_BOOTLOADER)
		{
			ps_enable_bootloader(TRUE);
		}
		else
		{
			ps_enable_bootloader(FALSE);
		}
		******************************************/
	}
	
	
	return status;
}
bool MeasurementThread::initFreqGen()
{
	viOpenDefaultRM (&defaultRM);
	viOpen (defaultRM, fGenID.toAscii().data(), VI_NULL,VI_NULL, &vi);
	viPrintf (vi, (ViString)"*RST\n");
	viPrintf (vi, (ViString)"FUNC SIN\n");
	QString amplStr = QString ("VOLT %1\n").arg(amplitude/1000.0);
	viPrintf (vi, amplStr.toAscii().data());
	QString strFreq = QString ("FREQ %1\n").arg(fList[0]);
	viPrintf (vi, strFreq.toAscii().data());
	viPrintf (vi, (ViString)"OUTP ON\n");
	return true;
}
Esempio n. 7
0
// ================================================================================================
// FUNCTION  : mexVISA_GetViRM
// ------------------------------------------------------------------------------------------------
// ================================================================================================
ViStatus mexVISA_GetViRM(ViSession *rmSession)
{
    if(_rmSession) 
    {
        *rmSession = _rmSession;
        return VI_SUCCESS;
    }
    else 
    {
        ViStatus status = viOpenDefaultRM(rmSession);
        _rmSession = *rmSession;
        return status;
    }
}
Esempio n. 8
0
int main()
{
        ViSession vi;

        ViStatus rc = viOpenDefaultRM(&vi);

        if(rc != VI_SUCCESS)
                return 1;

        rc = viUnlock(vi);

        if(rc != VI_ERROR_SESN_NLOCKED)
                return 1;

        return 0;
}
Esempio n. 9
0
bool SA_fsup::Init(ViRsrc rsrcName) {
    if (m_isInitialized) {
        return true;
    }
    if ((viOpenDefaultRM(&m_defaultRM) < VI_SUCCESS)) {
        return false;
    }
    if (viOpen(m_defaultRM, rsrcName, VI_NULL, 5000, &m_hVisa) < VI_SUCCESS) {
        m_isInitialized = false;
        //	viClose(m_defaultRM);
        return false;
    }
//	viClose(m_defaultRM);
    m_isInitialized = true;
    return true;
}
Esempio n. 10
0
int Query_Instrument()
{
	status = viOpenDefaultRM (&defaultRM); 
	if (status < VI_SUCCESS) {
		printf ("Open Instrument Failed!\n",reply_string);
		return -1;
	}

	/* "ASRL07::INSTR" where 07 is the usb com address */
	status = viOpen (defaultRM,"ASRL07::INSTR",VI_NULL,VI_NULL, &DataAcqu); 
	if (status < VI_SUCCESS) {
		printf ("Open Instrument failed!\n",reply_string);
		return -1;
	}

	/* *IDN? is the scpi command ask the Intrument serial number */
	status = viQueryf(DataAcqu, "*IDN?\n","%t",reply_string);
	printf ("Instrument identification string: %s\n",reply_string);

	// Query the slot status of Intrument which will return: 2638A-100,1,2638A-100,0,NONE,0 
	// 2638A-001 stands for the first slot 
	status = viQueryf(DataAcqu, "*OPT?\n","%t",reply_string);
	printf ("Slots status is: %s\n",reply_string);

	// Query the calibration date of 2638A, return formats:2013,1,1 
	viQueryf(DataAcqu, "CALibrate:DATE? \n","%t",reply_string);
	printf ("2638A calibration date is: %s\n",reply_string);

	// Query the slot's calibration date of 2638A, return format:2013,1,1 
	viQueryf(DataAcqu, "CALibrate:MODule:DATE? 1\n","%t",reply_string);
	printf ("Slot 1 calibration DATE is: %s\n",reply_string);

	viQueryf(DataAcqu, "CALibrate:MODule:DATE? 2\n","%t",reply_string);
	printf ("Slot 2 calibration DATE is: %s\n",reply_string);

	// Query the slot's serial nubmer, return format:12345678
	viQueryf(DataAcqu, "SYSTem:MODule:CONFigure:SNUM? 1\n","%t",reply_string);
	printf ("Slot 1 serial Number is: %s\n",reply_string);

	viQueryf(DataAcqu, "SYSTem:MODule:CONFigure:SNUM? 2\n","%t",reply_string);
	printf ("Slot 2 serial Number is: %s\n",reply_string);


	viClose (DataAcqu); /* Close the communication port */ 
	viClose (defaultRM); 
	
}
bool EITMeasurementThread::initSwitchMatrix()
{
    viOpenDefaultRM (&defaultRM);
    viOpen (defaultRM, swMatID.toAscii().data(), VI_NULL,VI_NULL, &viSwMat);
    viPrintf (viSwMat, (ViString)"*RST\n");

    viOpen (defaultRM, siGenID.toAscii().data(), VI_NULL,VI_NULL, &viSiGen);
    viPrintf (viSiGen, (ViString)"*RST\n");
    viPrintf (viSiGen, (ViString)"FUNC SIN\n");
    QString amplStr = QString ("VOLT %1\n").arg(amplitude/1000.0);
    viPrintf (viSiGen, amplStr.toAscii().data());
    QString strFreq = QString ("FREQ %1\n").arg(fcarr);
    viPrintf (viSiGen, strFreq.toAscii().data());
    viPrintf (viSiGen, (ViString)"OUTP ON\n");
    this->msleep(1000);
    return true;
}
Esempio n. 12
0
void serialInitializePort(uint8_t port, int32_t *status) {
	char const * portName;

	if (m_resourceManagerHandle ==0)
		viOpenDefaultRM((ViSession*)&m_resourceManagerHandle);
	
	if(port == 0)
		portName = "ASRL1::INSTR";
	else if (port == 1)
		portName = "ASRL2::INSTR";
	else
		portName = "ASRL3::INSTR";

	*status = viOpen(m_resourceManagerHandle, const_cast<char*>(portName), VI_NULL, VI_NULL, (ViSession*)&m_portHandle[port]);
	if(*status > 0)
		*status = 0;
}
Esempio n. 13
0
void HAL_InitializeSerialPort(int32_t port, int32_t* status) {
  char const* portName;

  if (m_resourceManagerHandle == 0)
    viOpenDefaultRM(reinterpret_cast<ViSession*>(&m_resourceManagerHandle));

  if (port == 0)
    portName = "ASRL1::INSTR";
  else if (port == 1)
    portName = "ASRL2::INSTR";
  else
    portName = "ASRL3::INSTR";

  *status =
      viOpen(m_resourceManagerHandle, const_cast<char*>(portName), VI_NULL,
             VI_NULL, reinterpret_cast<ViSession*>(&m_portHandle[port]));
  if (*status > 0) *status = 0;
}
Esempio n. 14
0
int FindRSrc(char *instrDescriptor)
{
	ViUInt32 numInstrs;
	ViFindList findList;
	ViStatus status;
	ViSession defaultRM, instr;

	status = viOpenDefaultRM(&defaultRM);
	if ( status < VI_SUCCESS ) {
		printf("Could not open a session to the VISA Resource Manager!");
		return status;
	}

	status = viFindRsrc( defaultRM, "GPIB?*INSTR", &findList, &numInstrs, instrDescriptor );
	if ( status < VI_SUCCESS ) {
		printf("An error occurred while finding resources.");
		return status;
	}

	if ( numInstrs > 0 ) {
		printf("%s found!\n", instrDescriptor);//Agilent->ComboBox_GPIB->Items->Add(instrDescriptor);
	}
	viClose (defaultRM);
	return 0;
	//status = viOpen( defaultRM, instrDescriptor, VI_NULL, VI_NULL, &instr );

	while ( --numInstrs ) {
		status = viFindNext( findList, instrDescriptor );
		if ( status < VI_SUCCESS ) {
			printf("An error occurred finding the next resource.");
			return status;
		}
		//这个时候的instrDescriptor就是你电脑上找到的资源,并且可用,如果为空就说明你的连线有问题
	}

	//      viClose(instr);
	viClose(findList);

	return status;
} 
Esempio n. 15
0
void*  ICS_Init ( int hParentInstrumentHandle , ViRsrc szRsrcAddress , int *vhInstrumentHandle )
{
	STD_ERROR						StdError										=	{0};
	
	tsHandle						*pLocalHandle									=	{0};
	
	CmtTSVHandle 					handle											=	0;
	
	IF (( szRsrcAddress == NULL ) , "Address string is empty" );
	
	if ( hParentInstrumentHandle == 0 ) 
	{
		CHK_CMT ( CmtNewTSV ( sizeof(tsHandle) , &handle ));
	}
	else
		handle = hParentInstrumentHandle;
		
	if ( vhInstrumentHandle )
		*vhInstrumentHandle = handle;
	
	CHK_CMT ( CmtGetTSVPtr ( handle , &pLocalHandle ));

	if ( pLocalHandle->defaultRM == 0 )
	{
		CHK_VSA ( viOpenDefaultRM (&(pLocalHandle->defaultRM)));
	}
	
	if ( pLocalHandle->sessionHandle == 0 )
	{
		CHK_VSA ( viOpen ( pLocalHandle->defaultRM , szRsrcAddress , VI_NULL, VI_NULL, &(pLocalHandle->sessionHandle)));
	}
	
Error:
	
	if ( handle )
		CmtReleaseTSVPtr ( handle );
	
	return ICS_GetErrorTextMessage(handle,StdError.error,NULL);
}
Esempio n. 16
0
/**
 * Create an instance of a Serial Port class.
 * 
 * @param baudRate The baud rate to configure the serial port.  The cRIO-9074 supports up to 230400 Baud.
 * @param dataBits The number of data bits per transfer.  Valid values are between 5 and 8 bits.
 * @param parity Select the type of parity checking to use.
 * @param stopBits The number of stop bits to use as defined by the enum StopBits.
 */
SerialPort::SerialPort(uint32_t baudRate, uint8_t dataBits, SerialPort::Parity parity, SerialPort::StopBits stopBits)
	: m_resourceManagerHandle (0)
	, m_portHandle (0)
	, m_consoleModeEnabled (false)
{
	ViStatus localStatus = VI_SUCCESS;
	localStatus = viOpenDefaultRM((ViSession*)&m_resourceManagerHandle);
	wpi_setError(localStatus);

	localStatus = viOpen(m_resourceManagerHandle, const_cast<char*>("ASRL1::INSTR"), VI_NULL, VI_NULL, (ViSession*)&m_portHandle);
	wpi_setError(localStatus);
	if (localStatus != 0)
	{
		m_consoleModeEnabled = true;
		return;
	}

	localStatus = viSetAttribute(m_portHandle, VI_ATTR_ASRL_BAUD, baudRate);
	wpi_setError(localStatus);
	localStatus = viSetAttribute(m_portHandle, VI_ATTR_ASRL_DATA_BITS, dataBits);
	wpi_setError(localStatus);
	localStatus = viSetAttribute(m_portHandle, VI_ATTR_ASRL_PARITY, parity);
	wpi_setError(localStatus);
	localStatus = viSetAttribute(m_portHandle, VI_ATTR_ASRL_STOP_BITS, stopBits);
	wpi_setError(localStatus);

	// Set the default timeout to 5 seconds.
	SetTimeout(5.0f);

	// Don't wait until the buffer is full to transmit.
	SetWriteBufferMode(kFlushOnAccess);

	EnableTermination();

	//viInstallHandler(m_portHandle, VI_EVENT_IO_COMPLETION, ioCompleteHandler, this);
	//viEnableEvent(m_portHandle, VI_EVENT_IO_COMPLETION, VI_HNDLR, VI_NULL);

	nUsageReporting::report(nUsageReporting::kResourceType_SerialPort, 0);
}
Esempio n. 17
0
bool CatDeviceManager::Initialize()
{
	try
	{
		ViSession session,defrm;
		ViStatus VISAstatus;
		int overcurron;
		float voltsetting,currsetting,overvoltsetting;

		char add[]="USB0::0x0957::0x0807::N5765A-US12N5190H::0::INSTR";

		voltsetting=12; //in volts                   //输出电压

		currsetting=30; //in amps                 //输出电流

		overvoltsetting=13.5;  //in volts           //输出电压保护

		overcurron=1;                            //输出电流保护状态:打开

		//The default resource manager manages initializes the VISA system
		VISAstatus=viOpenDefaultRM(&defrm);
		if (VISAstatus!=VI_SUCCESS) 
		{
			return false;
		}
		//opens a communication session with the instrument at address "add"
		VISAstatus=viOpen(defrm,add,VI_NULL,VI_NULL,&session);
		if (VISAstatus!=VI_SUCCESS) 
		{
			return false;
		}

		//Set voltage
		viPrintf(session,"VOLT %f \n",voltsetting);

		//Set the over voltage level
		viPrintf(session,"VOLT:PROT:LEV %f \n",overvoltsetting);

		//Turn on over current protection 
		viPrintf(session,"CURR:PROT:STAT %d \n",overcurron);

		//Set current level
		viPrintf(session,"CURR %f \n",currsetting);

		//Enable the output
		viPrintf(session,"OUTP ON \n");

		//This frees up all of the resources
		viClose(session);
		viClose(defrm);

		IAgilent34980A2Ptr ptr34980 = Get34980();
		ptr34980->Initialize("USB0::0x0957::0x0507::MY52490246::0::INSTR", VARIANT_FALSE, VARIANT_TRUE, strStandardInitOptions);
		ptr34980->Status->Clear();

		IAgilent34410Ptr ptr34411 = Get34411();
		ptr34411->Initialize("USB0::0x0957::0x0A07::MY53000110::0::INSTR", VARIANT_FALSE, VARIANT_TRUE, strStandardInitOptions);
		ptr34411->Status->Clear();
		return true;
	}
	catch(_com_error& e)
	{
		return false;
	}
}
Esempio n. 18
0
void* DLLEXPORT SignalGenerator_Init ( int hParentInstrumentHandle , ViRsrc szRsrcAddress , int *vhInstrumentHandle , int *InstrumentConnectStatus , int *InstrumentChannelsQuantity )
{
	STD_ERROR						StdError										=	{0};
	
	tsHandle						*pLocalHandle									=	{0};
	
	CmtTSVHandle 					handle											=	0;
	
	int								supported										=	0;
	
	tsSTD_CallBackSet				tSTD_CallBackSet								=	{0};
	
	double							lfTimeout										=	0.0,
									lfStateFileDelay								=	1.0,  
									lfStateFileTimeout								=	10.0, 
									lfDefaultTimeout								=	5.0;
									
	IF (( szRsrcAddress == NULL ) , "Address string is empty" );
	
	if ( hParentInstrumentHandle == 0 ) 
	{
		CHK_CMT ( CmtNewTSV ( sizeof(tsHandle) , &handle ));
	}
	else
		handle = hParentInstrumentHandle;
		
	if ( vhInstrumentHandle )
		*vhInstrumentHandle = handle;
	
	CHK_CMT ( CmtGetTSVPtr ( handle , &pLocalHandle ));

	if ( pLocalHandle->defaultRM == 0 )
	{
		CHK_VSA ( viOpenDefaultRM (&(pLocalHandle->defaultRM)));
	}
	
	if ( pLocalHandle->sessionHandle == 0 )
	{
		CHK_VSA ( viOpen ( pLocalHandle->defaultRM , szRsrcAddress , VI_NULL, VI_NULL, &(pLocalHandle->sessionHandle)));
	}
	
	WaitForOperationCompletion( pLocalHandle->sessionHandle , 20.0 , 0.5 );
	
	CHK_VSA ( viSetAttribute ( pLocalHandle->sessionHandle , VI_ATTR_TMO_VALUE , 500 ));
	
	FREE_STDERR_COPY_ERR( Equipment_IsSupported ( pLocalHandle->sessionHandle , NULL , NULL , NULL , &supported , &pLocalHandle )); 

	IF (( supported == 0 ) , "This device has not supported." );

	FREE_STDERR_COPY_ERR( Equipment_Info ( pLocalHandle->sessionHandle , NULL , &pLocalHandle->pVendor , &pLocalHandle->pSerialNumber , &pLocalHandle->pModel , &pLocalHandle->pFirmware ));

	STDF_UPDATE_CALLBACK_DATA(pLocalHandle->ptCallbacks); 
	
	viPrintf( pLocalHandle->sessionHandle ,"*CLS\n" ); 
	
	STDF_CONFIG_VALUE("Timeout", VAL_DOUBLE , 1 , lfTimeout , lfDefaultTimeout );	
	
	if ( lfTimeout == 0.0 )
		lfTimeout = lfDefaultTimeout;
	
	viSetAttribute ( pLocalHandle->sessionHandle , VI_ATTR_TMO_VALUE , (lfTimeout*1E3) );
	
	STDF_CONFIG_VALUE("OPC_Timeout", VAL_DOUBLE , 1 , (pLocalHandle->lfTimeout) , lfDefaultTimeout );	
	
	if ( pLocalHandle->lfTimeout == 0.0 )
		pLocalHandle->lfTimeout = lfDefaultTimeout;
	
	STDF_CONFIG_VALUE("OPC_LowLevel_Timeout", VAL_DOUBLE , 1 , (pLocalHandle->lfOpcLowLevelTimeout) , lfDefaultTimeout );	 
	
	if ( pLocalHandle->lfOpcLowLevelTimeout == 0.0 )
		pLocalHandle->lfOpcLowLevelTimeout = lfDefaultTimeout;
	
		STDF_CONFIG_VALUE("State_File_Timeout", VAL_DOUBLE , 1 , (pLocalHandle->lfStateFileTimeout) , lfStateFileTimeout );	 
	
	if ( pLocalHandle->lfStateFileTimeout == 0.0 )
		pLocalHandle->lfStateFileTimeout = lfStateFileTimeout;
	
	STDF_CONFIG_VALUE("State_File_Delay", VAL_DOUBLE , 1 , (pLocalHandle->lfStateFileDelay) , lfStateFileDelay );	 
	
	if ( pLocalHandle->lfStateFileDelay == 0.0 )
		pLocalHandle->lfStateFileDelay = lfStateFileDelay;   
Error:
	
	if ( InstrumentConnectStatus )
		*InstrumentConnectStatus = supported;
	
	if ( handle )
		CmtReleaseTSVPtr ( handle );
	
	RETURN_STDERR_POINTER;
}
Esempio n. 19
0
int main(void)
{
    /*
     * First we must call viOpenDefaultRM to get the manager
     * handle.  We will store this handle in defaultRM.
     */
    status=viOpenDefaultRM (&defaultRM);
    if (status < VI_SUCCESS)
    {
        printf ("Could not open a session to the VISA Resource Manager!\n");
        exit (EXIT_FAILURE);
    }

    /*
     * Now we will open a VISA session to the serial port (COM1).
     * We must use the handle from viOpenDefaultRM and we must
     * also use a string that indicates which instrument to open.  This
     * is called the instrument descriptor.  The format for this string
     * can be found in the function panel by right clicking on the
     * descriptor parameter. After opening a session to the
     * device, we will get a handle to the instrument which we
     * will use in later VISA functions.  The AccessMode and Timeout
     * parameters in this function are reserved for future
     * functionality.  These two parameters are given the value VI_NULL.
     */
    status = viOpen (defaultRM, "ASRL1::INSTR", VI_NULL, VI_NULL, &instr);
    if (status < VI_SUCCESS)
    {
        printf ("Cannot open a session to the device.\n");
        goto Close;
    }

    /*
     * At this point we now have a session open to the serial instrument.
     * Now we need to configure the serial port:
     */

    /* Set the timeout to 5 seconds (5000 milliseconds). */
    status = viSetAttribute (instr, VI_ATTR_TMO_VALUE, 5000);

    /* Set the baud rate to 4800 (default is 9600). */
    status = viSetAttribute (instr, VI_ATTR_ASRL_BAUD, 4800);

    /* Set the number of data bits contained in each frame (from 5 to 8).
     * The data bits for  each frame are located in the low-order bits of
     * every byte stored in memory.
     */
    status = viSetAttribute (instr, VI_ATTR_ASRL_DATA_BITS, 8);

    /* Specify parity. Options:
     * VI_ASRL_PAR_NONE  - No parity bit exists,
     * VI_ASRL_PAR_ODD   - Odd parity should be used,
     * VI_ASRL_PAR_EVEN  - Even parity should be used,
     * VI_ASRL_PAR_MARK  - Parity bit exists and is always 1,
     * VI_ASRL_PAR_SPACE - Parity bit exists and is always 0.
     */
    status = viSetAttribute (instr, VI_ATTR_ASRL_PARITY, VI_ASRL_PAR_NONE);

    /* Specify stop bit. Options:
     * VI_ASRL_STOP_ONE   - 1 stop bit is used per frame,
     * VI_ASRL_STOP_ONE_5 - 1.5 stop bits are used per frame,
     * VI_ASRL_STOP_TWO   - 2 stop bits are used per frame.
     */
    status = viSetAttribute (instr, VI_ATTR_ASRL_STOP_BITS, VI_ASRL_STOP_ONE);

    /* Specify that the read operation should terminate when a termination
     * character is received.
     */
    status = viSetAttribute (instr, VI_ATTR_TERMCHAR_EN, VI_TRUE);

    /* Set the termination character to 0xA
     */
    status = viSetAttribute (instr, VI_ATTR_TERMCHAR, 0xA);


    /* We will use the viWrite function to send the device the string "*IDN?\n",
     * asking for the device's identification.
    */
    strcpy (stringinput,"*IDN?\n");
    status = viWrite (instr, (ViBuf)stringinput, strlen(stringinput), &writeCount);
    if (status < VI_SUCCESS)
    {
        printf ("Error writing to the device.\n");
        goto Close;
    }

    /*
    * Now we will attempt to read back a response from the device to
    * the identification query that was sent.  We will use the viRead
    * function to acquire the data.  We will try to read back 100 bytes.
    * This function will stop reading if it finds the termination character
    * before it reads 100 bytes.
    * After the data has been read the response is displayed.
    */
    status = viRead (instr, buffer, 100, &retCount);
    if (status < VI_SUCCESS)
    {
        printf ("Error reading a response from the device.\n");
    }
    else
    {
        printf ("\nData read: %*s\n", retCount, buffer);
    }


    /*
     * Now we will close the session to the instrument using
     * viClose. This operation frees all system resources.
     */
Close:
    status = viClose (instr);
    status = viClose (defaultRM);
    printf ("Hit enter to continue.");
    fflush (stdin);
    getchar();

    return 0;
}
Esempio n. 20
0
void*	DLLEXPORT		Equipment_IsSupported ( int hLowLevelHandle , char *pAddress , char *pID_String , char *pIdentificationText , int *pbSupporting , void **pLocalData )
{
	STD_ERROR						StdError									=	{0};
	
	int								iCount										=	0, 
									status										=	0, 
									bSupport									=	0, 
									defaultRM									=	0,
									hConnectionHandle							=	0;
	
	char							szIdentificationText[LOW_STRING]			=	{0},
									szIdentificationUpperText[LOW_STRING]		=	{0}; 
	
	if (( pIdentificationText == NULL ) || ( strlen(pIdentificationText) < 10 ))
	{
		SetBreakOnLibraryErrors (0);   
		
		if ( hLowLevelHandle == 0 )
		{
			viOpenDefaultRM (&defaultRM);

			SetBreakOnLibraryErrors (0);
	
			status = viOpen ( defaultRM , pAddress , NULL, NULL, &hConnectionHandle );
		}
		else
		{
			hConnectionHandle = hLowLevelHandle;	
		}
		
		if ( status == 0 )
		{	
			status = viPrintf ( hConnectionHandle , "*IDN?\n" );
		
			if ( status == 0 )
			{
				viRead ( hConnectionHandle , szIdentificationText , (LOW_STRING-1) , &iCount );
				RemoveSurroundingWhiteSpace (szIdentificationText); 
			}
		}
		
		if (( hLowLevelHandle == 0 ) && hConnectionHandle )
			viClose(hConnectionHandle); 
		
		SetBreakOnLibraryErrors (1);  	
	}
	else
	{
		if ( strlen(pIdentificationText) < LOW_STRING )
			strcpy( szIdentificationText , pIdentificationText );
		else
			memcpy( szIdentificationText , pIdentificationText , (LOW_STRING-1) );  
	}
		
	do
	{
		strcpy( szIdentificationUpperText , szIdentificationText );
		StringUpperCase (szIdentificationUpperText);
		
		if (( strstr( szIdentificationUpperText , "AGILENT TECHNOLOGIES" ) == NULL ) && ( strstr( szIdentificationUpperText ,"HEWLETT-PACKARD") == NULL ))
			break;	
	
		if ( strstr( szIdentificationText , ",E441" ))
		{
			bSupport = 1;
			break;
		}
					
	}while(0);
	
	if (pbSupporting)
		*pbSupporting = bSupport;
	
	RETURN_STDERR_POINTER;
}
Esempio n. 21
0
int initKeithley(void){
   /*
    *  First we open a session to the VISA resource manager.  We are
    *  returned a handle to the resource manager session that we must
    *  use to open sessions to specific instruments.
    */
   status = viOpenDefaultRM (&defaultRM);
   if (status < VI_SUCCESS)
   {
      printf("Could not open a session to the VISA Resource Manager!\n");
      exit (EXIT_FAILURE);
	  return 1;
   }
   
   /*
    *  Next we use the resource manager handle to open a session to a
    *  GPIB instrument at address 2.  A handle to this session is
    *  returned in the handle inst.
    */
   status = viOpen (defaultRM, "GPIB::2::INSTR", VI_NULL, VI_NULL, &inst);
   if (status < VI_SUCCESS)
   {
      printf("Could not open a session to the device simulator");
	  return 1;
   }
   

   /*  Now we must enable the service request event so that VISA
    *  will receive the events.  Note: one of the parameters is 
    *  VI_QUEUE indicating that we want the events to be handled by
    *  a synchronous event queue.  The alternate mechanism for handling
    *  events is to set up an asynchronous event handling function using
    *  the VI_HNDLR option.  The events go into a queue which by default
    *  can hold 50 events.  This maximum queue size can be changed with
    *  an attribute but it must be called before the events are enabled.
    */
   status = viEnableEvent (inst, VI_EVENT_SERVICE_REQ, VI_QUEUE, VI_NULL);
   if (status < VI_SUCCESS)
   {
      printf("The SRQ event could not be enabled\n");
	  return 1;
   }
   
   /* 
    *  Now the VISA write command is used to send a request to the
    *  instrument to generate a sine wave and assert the SRQ line
    *  when it is finished.  Notice that this is specific to one 
    *  particular instrument.
    */

	KeithWrite("*RST\n");
	KeithOn();
	KeithWrite(":SOUR:FUNC VOLT\n");
	KeithWrite(":SOUR:VOLT:RANG 210\n");
	KeithWrite(":SOUR:VOLT:AUTO 0\n");
	KeithSetVoltage(0);
	//float val = KeithGetVoltage();
	//printf("Here is the data: %f\n", val);
	
   return 0;
}
Esempio n. 22
0
void*	DLLEXPORT		Equipment_IsSupported ( int hLowLevelHandle , char *pAddress , char *pID_String , char *pIdentificationText , int *pbSupporting , void **pLocalData )
{
	STD_ERROR						StdError									=	{0};
	
	int								iCount										=	0, 
									status										=	0, 
									iIndex										=	0, 
									bSupport									=	0, 
									defaultRM									=	0,
									hConnectionHandle							=	0;
	
	char							szIdentificationText[LOW_STRING]			=	{0},
									vszSupportdedModels[][12]					=	{{"E4428C"},{"E4438C"},{"N5181A"},{"N5182A"},{"N5183A"},{"N5171B"},{"N5181B"},{"N5172B"},{"N5173B"},{"N5182B"},{"E8241A"},{"E8244A"},{"E8251A"},{"E8254A"},{"E8247C"},{"E8257C"},{"E8267C"},{"E8257D"},{"E8267D"},{"E8663B"},{"E8257N"}};
									
	if (( pIdentificationText == NULL ) || ( strlen(pIdentificationText) < 10 ))
	{
		SetBreakOnLibraryErrors (0);   
		
		if ( hLowLevelHandle == 0 )
		{
			viOpenDefaultRM (&defaultRM);

			SetBreakOnLibraryErrors (0);
	
			status = viOpen ( defaultRM , pAddress , NULL, NULL, &hConnectionHandle );
		}
		else
		{
			hConnectionHandle = hLowLevelHandle;	
		}
		
		if ( status == 0 )
		{	
			status = viPrintf ( hConnectionHandle , "*IDN?\n" );
		
			if ( status == 0 )
			{
				viRead ( hConnectionHandle , szIdentificationText , (LOW_STRING-1) , &iCount );
				RemoveSurroundingWhiteSpace (szIdentificationText); 
			}
		}
		
		if (( hLowLevelHandle == 0 ) && hConnectionHandle )
			viClose(hConnectionHandle); 
		
		SetBreakOnLibraryErrors (1);  	
	}
	else
	{
		if ( strlen(pIdentificationText) < LOW_STRING )
			strcpy( szIdentificationText , pIdentificationText );
		else
			memcpy( szIdentificationText , pIdentificationText , (LOW_STRING-1) );  
	}
		
	do
	{
		if ( strstr( szIdentificationText , "Agilent Technologies" ) == NULL ) 
			break;
	
		for ( iIndex = 0; iIndex < (sizeof(vszSupportdedModels) / sizeof(vszSupportdedModels[0])); iIndex++ )
			if ( strstr( szIdentificationText , vszSupportdedModels[iIndex]) )
			{
				bSupport = 1; 
				break;
			}
					
	}while(0);
	
	if (pbSupporting)
		*pbSupporting = bSupport;
	
	RETURN_STDERR_POINTER;	
}
Esempio n. 23
0
void*	DLLEXPORT		Equipment_Info ( int hLowLevelHandle , char *pAddress , char **pVendor , char **pSerialNumber , char **pModel , char **pFirmware )
{
	STD_ERROR						StdError									=	{0};
	
	int								iCount										=	0, 
									status										=	0, 
									//iIndex										=	0, 
									//bSupport									=	0, 
									defaultRM									=	0,
									hConnectionHandle							=	0;
	
	char							szIdentificationText[LOW_STRING]			=	{0},
									szIdentificationUpperText[LOW_STRING]		=	{0},
									*pTemp										=	NULL;

	if ( hLowLevelHandle == 0 )
	{
		viOpenDefaultRM (&defaultRM);

		SetBreakOnLibraryErrors (0);
	
		status = viOpen ( defaultRM , pAddress , NULL, NULL, &hConnectionHandle );
	}
	else
	{
		hConnectionHandle = hLowLevelHandle;	
	}
		
	if ( status == 0 )
	{	
		status = viPrintf ( hConnectionHandle , "*IDN?\n" );
	
		if ( status == 0 )
		{
			viRead ( hConnectionHandle , szIdentificationText , (LOW_STRING-1) , &iCount );
			RemoveSurroundingWhiteSpace (szIdentificationText); 
		}
	}
		
	if (( hLowLevelHandle == 0 ) && hConnectionHandle )
		viClose(hConnectionHandle); 
		
	SetBreakOnLibraryErrors (1);

	do
	{
		strcpy( szIdentificationUpperText , szIdentificationText );
		StringUpperCase (szIdentificationUpperText);
		
		IF ((( strstr( szIdentificationUpperText , "AGILENT TECHNOLOGIES" ) == NULL ) && ( strstr( szIdentificationUpperText ,"HEWLETT-PACKARD") == NULL )) , "Is not supported" );
	
		pTemp = strrchr( szIdentificationText , ',' );

		if ( pTemp )
		{
			*pTemp = 0;
			pTemp++;
	
			if ( pFirmware )
			{
				CALLOC_COPY_STRING( *pFirmware , pTemp );
			}
		}
		else
			break;
	
		pTemp = strrchr( szIdentificationText , ',' );

		if ( pTemp )
		{
			*pTemp = 0;
			pTemp++;
	
			if ( pSerialNumber )
			{
				CALLOC_COPY_STRING( *pSerialNumber , pTemp );
			}
		}
		else
			break;
	
		pTemp = strrchr( szIdentificationText , ',' );

		if ( pTemp )
		{
			*pTemp = 0;
			pTemp++;
	
			if ( pModel )
			{
				CALLOC_COPY_STRING( *pModel , pTemp );
			}
		}
		else
			break;
	
		if ( pVendor )
		{
			CALLOC_COPY_STRING( *pVendor , szIdentificationText );  
		}
		
	} while(0);
		
Error:
		
	RETURN_STDERR_POINTER;
}
Esempio n. 24
0
/* Use this function from user land to open a device and create a link. Can be
 * used multiple times for the same device (the library will keep track).*/
int vxi11_open_device(VXI11_CLINK **clink, const char *address, char *device)
{
#ifdef WIN32
	ViStatus status;
	char buf[256];
#else
	int ret;
	struct _vxi11_client_t *tail, *client = NULL;
#endif
	char default_device[6] = "inst0";
	char *use_device;

	if(device){
		use_device = device;
	}else{
		use_device = default_device;
	}

	*clink = (VXI11_CLINK *) calloc(1, sizeof(VXI11_CLINK));
	if (!(*clink)) {
		return 1;
	}

#ifdef WIN32
	status = viOpenDefaultRM(&clink->rm);
	if (status != VI_SUCCESS) {
		viStatusDesc(NULL, status, buf);
		printf("%s\n", buf);
		free(*clink);
		*clink = NULL;
		return 1;
	}
	viOpen(clink->rm, (char *)address, VI_NULL, VI_NULL, &clink->session);
	if (status != VI_SUCCESS) {
		viStatusDesc(clink->rm, status, buf);
		printf("%s\n", buf);
		free(*clink);
		*clink = NULL;
		return 1;
	}
#else
	/* Have a look to see if we've already initialised an instrument with
	 * this address */
	tail = VXI11_CLIENTS;
	while (tail) {
		if (strcmp(address, tail->address) == 0) {
			client = tail;
			break;
		}
		tail = tail->next;
	}

	/* Couldn't find a match, must be a new address */
	if (!client) {
		/* Create a new client, keep a note of where the client pointer
		 * is, for this address. Because it's a new client, this
		 * must be link number 1. Keep track of how many devices we've
		 * opened so we don't run out of storage space. */
		client = (struct _vxi11_client_t *)calloc(1, sizeof(struct _vxi11_client_t));
		if (!client) {
			free(*clink);
			*clink = NULL;
			return 1;
		}

		(*clink)->client =
		    clnt_create(address, DEVICE_CORE, DEVICE_CORE_VERSION,
				"tcp");

		if ((*clink)->client == NULL) {
			clnt_pcreateerror(address);
			free(client);
			free(*clink);
			*clink = NULL;
			return 1;
		}
		ret = _vxi11_open_link(*clink, address, use_device);
		if (ret != 0) {
			clnt_destroy((*clink)->client);
			free(client);
			free(*clink);
			*clink = NULL;
			return 1;
		}

		strncpy(client->address, address, 20);
		client->client_address = (*clink)->client;
		client->link_count = 1;
		client->next = VXI11_CLIENTS;
		VXI11_CLIENTS = client;
	} else {
		/* Copy the client pointer address. Just establish a new link
		 *  not a new client). Add one to the link count */
		(*clink)->client = client->client_address;
		ret = _vxi11_open_link((*clink), address, use_device);
		client->link_count++;
	}
#endif
	return 0;
}
Esempio n. 25
0
STD_ERROR   DLLEXPORT	DRV_FunctionGenerator_Init ( char *pszDriverLocation , char *pszAddressString , int *pHandle )
{		   					
	STD_ERROR                                   StdError                                    =   {0};
	
	tsDriverInfo								*pDriverInfo							=	NULL;
	
	CmtTSVHandle 								VariableHandle							=	0;
	
	CmtThreadLockHandle 						LockHandle								=	0;
	
	pfFunctionGenerator_Init					pWrapperFunction						=	NULL;
	
	char										szCurrentDirectory[STD_STRING]			=	{0},
												szDriverLocation[STD_STRING]			=	{0},
												szMessage[STD_STRING]					=	{0},
												*pTemp									=	NULL;
	
	int											iTry									=	0,
												bHandleExists							=	0;
	
	int											bLocked									=	0;
	
	char										*pTempString							=	NULL;

	pfSTD_Config_Install_CommentCallback        pConfig_Install_CommentCallback			=	NULL;
	pfSTD_Config_Install_ConfigValueCallback    pConfig_Install_ConfigValueCallback		=	NULL;
	pfSTD_Config_Install_CheckForBreakCallback  pConfig_Install_CheckForBreakCallback	=	NULL;
	pfSTD_Config_Copy_STD_CallBackSet			pConfig_Copy_STD_CallBackSet			=	NULL;

	HINSTANCE									LibraryHandle							=	NULL;
	
	if (( pszDriverLocation == NULL ) || ( pszAddressString == NULL ))
		{STD_ERR (DRV_ERROR_PASSED_NULL);}
	
	strcpy( szDriverLocation , pszDriverLocation );
	
	do
	{
		pTemp = strstr( pszDriverLocation , ":\\" );
	
		if ( pTemp )
			break;
		
		pTemp = strchr( pszDriverLocation , '\\' ); 
		
		if ( pTemp == NULL )
			break;
			
		GetModuleDir( __CVIUserHInst , szCurrentDirectory ); 
		
		if ( pTemp == pszDriverLocation )
			sprintf( szDriverLocation , "%s%s" , szCurrentDirectory , pszDriverLocation );
		else
			sprintf( szDriverLocation , "%s\\%s" , szCurrentDirectory , pszDriverLocation ); 
		
	} while(0);
	
	if ( FileExists(szDriverLocation,NULL) == 0 )
	{
		sprintf( szMessage , "Loading Function Generator Driver\n\"%s\"\n\nFailed, File has not found." , szDriverLocation );
		ShowMessage ( INSTR_TYPE_CONTINUE , "Equipment driver file error..." , szMessage , NULL );
		
		FORCE_ERR(-5,szMessage);
	}
			 
	if ( pHandle )
	{
		if ( CmtNewTSV ( sizeof(tsDriverInfo) , &VariableHandle ) != 0 )
			{STD_ERR (DRV_ERROR_CREATE_TSV_HANDLE);}

		if ( VariableHandle == 0 )
			{STD_ERR (DRV_ERROR_CREATE_TSV_HANDLE);}
	
		do
		{
			*pHandle = VariableHandle;
	
			if ( CmtGetTSVPtr ( VariableHandle , &pDriverInfo ) < 0 )
			{
				{STD_ERR (DRV_ERROR_GET_TSV_POINTER);}
				break;
			}
	
			pDriverInfo->InstrumentType = DRIVER_TYPE_FUNCTION_GENERATOR;
	
			CALLOC_COPY_STRING( pDriverInfo->pInstrumentAddress , pszAddressString );  
		
			bHandleExists = DRIVER_MANAGER_IsConnectionExists( pszAddressString , &(pDriverInfo->InstrumentHandle) , &(pDriverInfo->InstrumentLockHandle) );

			//--------- Load Library ---------------------//
	
			pDriverInfo->LibraryHandle = LoadLibrary(szDriverLocation);

			CALLOC_COPY_STRING( pDriverInfo->pDriverFileName,szDriverLocation);
		
			if ( pDriverInfo->LibraryHandle == 0 )
			{
				{STD_ERR (DRV_ERROR_DLL_FILE_NOT_OPENED);}
				break;
			}	
		
		
			//--------------- Load functions ------------------//
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.Config_Install_CommentCallback								= (pfSTD_Config_Install_CommentCallback) GetProcAddress( pDriverInfo->LibraryHandle , 		"Config_Install_CommentCallback");      
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.Config_Install_ConfigValueCallback							= (pfSTD_Config_Install_ConfigValueCallback) GetProcAddress( pDriverInfo->LibraryHandle , 	"Config_Install_ConfigValueCallback");  
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.Config_Install_CheckForBreakCallback							= (pfSTD_Config_Install_CheckForBreakCallback) GetProcAddress( pDriverInfo->LibraryHandle , "Config_Install_CheckForBreakCallback");
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.Config_LOG_SetAllowState										= (pfSTD_Config_LOG_SetAllowState) GetProcAddress( pDriverInfo->LibraryHandle , "Config_LOG_SetAllowState");
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.Config_Copy_STD_CallBackSet									= (pfSTD_Config_Copy_STD_CallBackSet) GetProcAddress( pDriverInfo->LibraryHandle , "Config_Copy_STD_CallBackSet");
			
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_GetErrorTextMessage     					= (pfFunctionGenerator_GetErrorTextMessage) GetProcAddress( pDriverInfo->LibraryHandle , "FunctionGenerator_GetErrorTextMessage");         
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_Init                        				= (pfFunctionGenerator_Init) GetProcAddress( pDriverInfo->LibraryHandle , "FunctionGenerator_Init");                        
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_Close                       				= (pfFunctionGenerator_Close) GetProcAddress( pDriverInfo->LibraryHandle , "FunctionGenerator_Close");                       
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_Reset										= (pfFunctionGenerator_Reset) GetProcAddress( pDriverInfo->LibraryHandle , "FunctionGenerator_Reset"); 
		
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_Initiate              						= (pfFunctionGenerator_Initiate) GetProcAddress( pDriverInfo->LibraryHandle , "FunctionGenerator_Initiate");                    
		    pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_Signel_Off           						= (pfFunctionGenerator_Signel_Off) GetProcAddress( pDriverInfo->LibraryHandle , "FunctionGenerator_Signel_Off");                 
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_Signel_On            						= (pfFunctionGenerator_Signel_On) GetProcAddress( pDriverInfo->LibraryHandle , "FunctionGenerator_Signel_On");            
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_Save_State     							= (pfFunctionGenerator_Save_State) GetProcAddress( pDriverInfo->LibraryHandle , "FunctionGenerator_Save_State");     
			pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_Load_State      							= (pfFunctionGenerator_Load_State) GetProcAddress( pDriverInfo->LibraryHandle , "FunctionGenerator_Load_State");      
		
			pDriverInfo->tInstrDB.Equipment_Info      																			= (pfSTD_Equipment_Info) GetProcAddress( pDriverInfo->LibraryHandle , "Equipment_Info");      
			pDriverInfo->tInstrDB.Equipment_IsSupported																			= (pfSTD_Equipment_IsSupported) GetProcAddress( pDriverInfo->LibraryHandle , "Equipment_IsSupported");   
		
			pDriverInfo->tInstrDB.Equipment_SendStateFile																		= (pfSTD_Equipment_SendStateFile) GetProcAddress( pDriverInfo->LibraryHandle , "Equipment_SendStateFile");
			pDriverInfo->tInstrDB.Equipment_ReceiveStateFile																	= (pfSTD_Equipment_ReceiveStateFile) GetProcAddress( pDriverInfo->LibraryHandle , "Equipment_ReceiveStateFile");
			pDriverInfo->tInstrDB.Equipment_GetFileCatalog																		= (pfSTD_Equipment_GetFileCatalog) GetProcAddress( pDriverInfo->LibraryHandle , "Equipment_GetFileCatalog");
			pDriverInfo->tInstrDB.Equipment_MakeFileCatalog																		= (pfSTD_Equipment_MakeFileCatalog) GetProcAddress( pDriverInfo->LibraryHandle , "Equipment_MakeFileCatalog"); 			
			pDriverInfo->tInstrDB.Equipment_DeleteFileCatalog																	= (pfSTD_Equipment_DeleteFileCatalog) GetProcAddress( pDriverInfo->LibraryHandle , "Equipment_DeleteFileCatalog");
			pDriverInfo->tInstrDB.Equipment_DeleteStateFile																		= (pfSTD_Equipment_DeleteStateFile) GetProcAddress( pDriverInfo->LibraryHandle , "Equipment_DeleteStateFile");
			
			pDriverInfo->tInstrDB.Config_SetAttribute																			= (pfSTD_Config_SetAttribute) GetProcAddress( pDriverInfo->LibraryHandle , "Config_SetAttribute"); 		
			
			pWrapperFunction = pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.FunctionGenerator_Init;
	
			if ( pWrapperFunction == NULL )
			{
				char	szMessage[LOW_STRING]	= {0};
				
				sprintf( szMessage , "Method \"%s\"\nis not implemented in driver:\n%s" , "FunctionGenerator_Init" , pDriverInfo->pDriverFileName );
				
				ShowMessage ( INSTR_TYPE_CONTINUE , "Implementation Error . . ." , szMessage , NULL );
			
				{STD_ERR (DRV_ERROR_WRONG_WRAPPER);}
			}
		
			if ( !bHandleExists )
				DRIVER_MANAGER_AddConnection( pszAddressString , &(pDriverInfo->InstrumentHandle) , DRIVER_TYPE_FUNCTION_GENERATOR , &(pDriverInfo->InstrumentLockHandle) );
		
			LockHandle = pDriverInfo->InstrumentLockHandle;
		
			if ( LockHandle == 0 )
				{STD_ERR (DRV_ERROR_CREATE_LOCK_HANDLE);}
		
			CHK_PROCCESS_GET_LOCK ( LockHandle );
		
			DRIVER_MANAGER_IsConnectionExists( pszAddressString, &(pDriverInfo->InstrumentHandle) , NULL );
		
			//===================== Install Calbacks ==========================================================================================//
			pConfig_Install_CommentCallback = pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.Config_Install_CommentCallback;		
			pConfig_Install_ConfigValueCallback	= pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.Config_Install_ConfigValueCallback;		
			pConfig_Install_CheckForBreakCallback = pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.Config_Install_CheckForBreakCallback;		
			pConfig_Copy_STD_CallBackSet = pDriverInfo->tInstrDB.functionGeneratorDriverFunctions.Config_Copy_STD_CallBackSet;
		
			DRIVER_MANAGER_GetCopyCallbacksStructure( VariableHandle , &(pDriverInfo->ptCallbacks) , 1 , pszAddressString ); 
			
			if ( pConfig_Copy_STD_CallBackSet && ( pDriverInfo->ptCallbacks ))
			{
				FREE_STDERR_COPY_ERR( pConfig_Copy_STD_CallBackSet( &pDriverInfo->InstrumentHandle , pDriverInfo->ptCallbacks ));
				
				pDriverInfo->ptCallbacks = NULL;
			}
			else
			{
				if ( pConfig_Install_CommentCallback && ( pDriverInfo->ptCallbacks ))
				{
					FREE_STDERR_COPY_ERR( pConfig_Install_CommentCallback( &pDriverInfo->InstrumentHandle , (pDriverInfo->ptCallbacks)->fCommentCallback , (pDriverInfo->ptCallbacks)->pCommentCallbackData , (pDriverInfo->ptCallbacks)->commentType ));
				}
				
				if ( pConfig_Install_ConfigValueCallback && ( pDriverInfo->ptCallbacks ))
				{
					FREE_STDERR_COPY_ERR( pConfig_Install_ConfigValueCallback( &pDriverInfo->InstrumentHandle , (pDriverInfo->ptCallbacks)->fConfigValueCallback , (pDriverInfo->ptCallbacks)->pConfigValueCallbackData , (pDriverInfo->ptCallbacks)->configType ));
				}
		
				if ( pConfig_Install_CheckForBreakCallback && ( pDriverInfo->ptCallbacks ))
				{
					FREE_STDERR_COPY_ERR( pConfig_Install_CheckForBreakCallback( &pDriverInfo->InstrumentHandle , (pDriverInfo->ptCallbacks)->fCheckForBreakCallback , (pDriverInfo->ptCallbacks)->pCheckForBreakCallbackData , (pDriverInfo->ptCallbacks)->breakType ));
				}
			}
		
			if (pDriverInfo->ptCallbacks)
				pDriverInfo->bDemoMode = (pDriverInfo->ptCallbacks)->bDemoMode;
			//=================================================================================================================================//
		
			for ( iTry = 0 ; iTry < 3 ; iTry++ )
			{
				if ( pDriverInfo->bDemoMode == 1 )
				{
					pDriverInfo->bConnected = 1;
					break;
				}
			
				if ( pWrapperFunction )
				{
					FREE_STDERR_COPY( pWrapperFunction( pDriverInfo->InstrumentHandle , pszAddressString , &pDriverInfo->InstrumentHandle , &pDriverInfo->bConnected , &pDriverInfo->ChannelQuantity )); 
				}
				else
					break;
			
				if ( StdError.error )
					if ( ShowMessage ( INSTR_TYPE_YES_NO , "Function Genrator Error !!!", "Check connection and Power On the Device." , NULL ) )
						continue;
			
				break;
			}
		
			CHK_STDERR(StdError);
		
			if (pDriverInfo->bConnected == 0)
				{STD_ERR (DRV_ERROR_CONNECTION);}
	
			if ( !bHandleExists ) 
				DRIVER_MANAGER_UpdateConnection( pszAddressString , pDriverInfo->InstrumentHandle , NULL );
		
		} while (0);
	}
	else
	{
		pfSTD_Equipment_IsSupported					pWrapperFunction							=	NULL;
		int											iCount										=	0, 
													status										=	0, 
													bSupport									=	0, 
													defaultRM									=	0,
													hConnectionHandle							=	0;
		char										szReadBuffer[LOW_STRING]					=	{0};
		//------------------ Checking for driver supporting ------------------------//
		
		viOpenDefaultRM (&defaultRM);

		SetBreakOnLibraryErrors (0);
		
		status = viOpen ( defaultRM , pszAddressString , NULL, NULL, &hConnectionHandle );
		
		if ( status == 0 )
		{	
			status = viPrintf ( hConnectionHandle , "*IDN?\n" );
		
			if ( status == 0 )
			{
				viRead ( hConnectionHandle , szReadBuffer , (LOW_STRING-1) , &iCount );
			}
		}
		
		if ( hConnectionHandle )
			viClose(hConnectionHandle); 
		
		SetBreakOnLibraryErrors (1);  
		
		LibraryHandle = LoadLibrary(szDriverLocation);
		
		if ( LibraryHandle == 0 )
		{
			sprintf( szMessage , "Loading Driver File\n\"%s\"\n\nFailed, File corrupted." , szDriverLocation );
			ShowMessage ( INSTR_TYPE_CONTINUE , "Equipment driver file error..." , szMessage , NULL );
		
			FORCE_ERR(-6,szMessage);
		}
		
		pWrapperFunction = (pfSTD_Equipment_IsSupported) GetProcAddress( LibraryHandle , "Equipment_IsSupported");   
	
		if ( pWrapperFunction )
		{
			FREE_STDERR_COPY_ERR( pWrapperFunction( 0, pszAddressString , NULL , szReadBuffer , &bSupport , NULL )); 
			
			IF (( bSupport == 0 ) , "This driver is not support the current Equipment." );
		}
		else
		{
			char	szMessage[LOW_STRING]	= {0};
		
			sprintf( szMessage , "Method \"%s\"\nis not implemented in driver:\n%s" , "Equipment_IsSupported" , szDriverLocation );
		
			ShowMessage ( INSTR_TYPE_CONTINUE , "Implementation Error . . ." , szMessage , NULL );
		}			
	}
	
Error:
	
	if ( LibraryHandle )
		FreeLibrary(LibraryHandle); 

	if ( LockHandle && bLocked ) 
		CmtReleaseLock (LockHandle);
	
	if ( VariableHandle ) 
		CmtReleaseTSVPtr ( VariableHandle );

	if ( StdError.error )
	{
		DRV_FunctionGenerator_GetErrorTextMessage ( VariableHandle , StdError.error , &pTempString );
		
		if ( pTempString && ( strlen(pTempString)))
		{
			SET_DESCRIPTION(pTempString);
		}
		
		FREE(pTempString);
		DRV_FunctionGenerator_Close( &VariableHandle ); 
		
		if ( pHandle )
			*pHandle = 0;
	}
	
	return StdError;
}
Esempio n. 26
0
/**
 * Opens a UART session on an VISA implemented port.
 *
 * @param[in]   port        UART port information.
 * @param[in]   baud        Baud rate (bps).
 * @param[in]   dataBits    Number of bits per frame.
 * @param[in]   stopBits    Stop bit configuration.
 * @param[in]   parity      Parity configuration.
 * @return      int32_t     Error/success status
 */
int32_t Uart_Open(MyRio_Uart* port, const uint32_t baud,
                  const uint8_t dataBits, const Uart_StopBits stopBits,
                  const Uart_Parity parity)
{
    int32_t status = VI_SUCCESS;

    /*
     * Open VISA resource manager.
     */
    if (!port->defaultRM)
    {
        status = viOpenDefaultRM(&port->defaultRM);
        if (status < VI_SUCCESS || !port->defaultRM)
        {
            return status;
        }
    }

    /*
     * Open serial resource.
     */
    if (!port->session)
    {
        status = viOpen(port->defaultRM, (ViRsrc)port->name,
                        VI_NULL, VI_NULL, &port->session);
        if (status < VI_SUCCESS || !port->session)
        {
            return status;
        }
    }

    /*
     * Set timeout.
     */
    status = viSetAttribute(port->session, VI_ATTR_TMO_VALUE,
                            VisaDefaultTimeout);
    if (status < VI_SUCCESS)
    {
        return status;
    }

    /*
     * Set baud rate.
     */
    status = viSetAttribute(port->session, VI_ATTR_ASRL_BAUD, baud);
    if (status < VI_SUCCESS)
    {
        return status;
    }

    /*
     * Set data bits.
     */
    status = viSetAttribute(port->session, VI_ATTR_ASRL_DATA_BITS, dataBits);
    if (status < VI_SUCCESS)
    {
        return status;
    }

    /*
     * Set stop bits.
     */
    status = viSetAttribute(port->session, VI_ATTR_ASRL_STOP_BITS, stopBits);
    if (status < VI_SUCCESS)
    {
        return status;
    }

    /*
     * Set parity.
     */
    status = viSetAttribute(port->session, VI_ATTR_ASRL_PARITY, parity);
    if (status < VI_SUCCESS)
    {
        return status;
    }

    /*
     * Set termination character.
     */
    status = viSetAttribute(port->session, VI_ATTR_TERMCHAR_EN, VI_FALSE);
    if (status < VI_SUCCESS)
    {
        return status;
    }

    return status;
}
Esempio n. 27
0
 void VisaEmitter::EIO_Open(GenericBaton* data) {
   char temp[QUERY_STRING_SIZE];
   ViStatus status = -1;
   if (this->isConnected)
   {
     _snprintf(temp, sizeof(temp), "Already connected %s", session);
     ErrorCodeToString(temp, status, data->errorString);
     return;
   }
   status = viOpenDefaultRM(&defaultRM);
   if (status < VI_SUCCESS) {
     _snprintf(temp, sizeof(temp), "Opening RM");
     ErrorCodeToString(temp, status, data->errorString);
     return;
   }
   status = viOpen(defaultRM, data->command, VI_NULL, this->timeoutMiliSeconds, &session);
   if (status < VI_SUCCESS) {
     _snprintf(temp, sizeof(temp), "Opening session %s", data->command);
     ErrorCodeToString(temp, status, data->errorString);
     return;
   }
   status = viSetAttribute(session, VI_ATTR_TMO_VALUE, this->timeoutMiliSeconds);
   if (status < VI_SUCCESS) {
     _snprintf(temp, sizeof(temp), "Setting timeout to %d", this->timeoutMiliSeconds);
     ErrorCodeToString(temp, status, data->errorString);
     return;
   }
   
   
   this->isConnected = true;
   // status = viSetAttribute(instr, VI_ATTR_SEND_END_EN, VI_TRUE);
   // terminate reads on a carriage return  0x0a 0x0d
   // LF (Line feed, '\n', 0x0A, 10 in decimal) 
   // Carriage return, '\r', 0x0D, 13 in decimal
   
   // status = viSetAttribute(session, VI_ATTR_TERMCHAR, 0x0A);
   //status = viSetAttribute(session, VI_ATTR_TERMCHAR_EN, VI_TRUE);
   
   if (this->assertREN) {
     viGpibControlREN(session, VI_GPIB_REN_ASSERT);
   }
   
   if (this->enableSRQ)  
   {
     m_async = uv_async_t();
     m_async.data = this;    
     uv_async_init(uv_default_loop(), &m_async, reinterpret_cast<uv_async_cb>(aCallback));
     isAsyncInitialized = true;
     
     status = viInstallHandler(session, VI_EVENT_SERVICE_REQ, callback, this->uniqueSRQhandlerIdentification);
     if (status >= VI_SUCCESS) {
       status = viEnableEvent(session, VI_EVENT_SERVICE_REQ, VI_HNDLR, VI_NULL);
     }  
     if (status < VI_SUCCESS) {
       _snprintf(temp, sizeof(temp), "Post AfterOpenSuccess session %s", data->command);
       ErrorCodeToString(temp, status, data->errorString);
       return;
     }        
     this->installedSRQHanlder = true;
   }    
   _snprintf_s(data->result, _countof(data->result), _TRUNCATE, "%d", session);
 }
Esempio n. 28
0
int main (void)
{
   /*
    *  First we open a session to the VISA resource manager.  We are
    *  returned a handle to the resource manager session that we must
    *  use to open sessions to specific instruments.
    */
   status = viOpenDefaultRM (&defaultRM);
   if (status < VI_SUCCESS)
   {
      printf("Could not open a session to the VISA Resource Manager!\n");
      exit (EXIT_FAILURE);
   }
   
   /*
    *  Next we use the resource manager handle to open a session to a
    *  GPIB instrument at device 2.  A handle to this session is
    *  returned in the handle inst.  Please consult the NI-VISA User Manual 
    *  for the syntax for using other instruments.
    */
   status = viOpen (defaultRM, "GPIB::2::INSTR", VI_NULL, VI_NULL, &inst);
   
   /*
    *  Now we install the handler for asynchronous i/o completion events.
    *  To install the handler, we must pass our instrument session, the type of
    *  event to handle, the handler function name and a user handle
    *  which acts as a handle to the handler function.
    */
   status = viInstallHandler (inst, VI_EVENT_IO_COMPLETION, AsyncHandler, uhandle);
   
   /*  Now we must actually enable the I/O completion event so that our
    *  handler will see the events.  Note, one of the parameters is 
    *  VI_HNDLR indicating that we want the events to be handled by
    *  an asynchronous event handler.  The alternate mechanism for handling
    *  events is to queue them and read events off of the queue when
    *  you want to check them in your program.
    */
   status = viEnableEvent (inst, VI_EVENT_IO_COMPLETION, VI_HNDLR, VI_NULL);

   /* 
    *  Now the VISA write command is used to send a request to the
    *  instrument to generate a sine wave.  This demonstrates the 
    *   synchronous read operation that blocks the application until viRead()
    *   returns.  Note that the command syntax is instrument specific.
    */

   /*
    * Here you specify which string you wish to send to your instrument.
    * The command listed below is device specific. You may have to change
    * command to accommodate your instrument.
    */
   strcpy(stringinput,"SOUR:FUNC SIN; SENS: DATA?\n");
   BytesToWrite = strlen(stringinput);
   status = viWrite (inst, (ViBuf)stringinput,BytesToWrite, &rcount);

   /*
    *  Next the asynchronous read command is called to read back the 
    *  date from the instrument.  Immediately after this is called
    *  the program goes into a loop which will terminate
    *  on an i/o completion event triggering the asynchronous callback.
    *  Note that the asynchronous read command returns a job id that is
    *  a handle to the asynchronous command.  We can use this handle
    *  to terminate the read if too much time has passed.
    */
   status = viReadAsync (inst, data, 1024, &job);
   
   printf("\n\nHit enter to continue.");
   letter = getchar();

   /* 
    *  If the asynchronous callback was called and the flag was set
    *  we print out the returned data otherwise we terminate the
    *  asynchronous job.
    */
   if (stopflag == VI_TRUE)
   {
      /* RtCount was set in the callback */
       printf ("Here is the data:  %*s", RtCount, data);
   }
   else
   {
      status = viTerminate (inst, VI_NULL, job);  
      printf("The asynchronous read did not complete.\n");
   }

    printf ("\nHit enter to continue.");
    fflush(stdin);
    getchar();

   /*
    *  Now we close the instrument session and the resource manager
    *  session to free up resources.
    */
   status = viClose(inst);
   status = viClose(defaultRM);
   
   return 0;
}