📄 hp662xa.c
字号:
* except for closing the IVI session. This function is called by * HP662XA_close or by an IVI class driver. * * Note: This function must close the I/O session and set * IVI_ATTR_IO_SESSION to 0. *****************************************************************************/ViStatus _VI_FUNC HP662XA_IviClose (ViSession vi){ ViStatus error = VI_SUCCESS; ViSession io = VI_NULL; /* Do not lock here. The caller manages the lock. */ checkErr( Ivi_GetAttributeViSession (vi, VI_NULL, IVI_ATTR_IO_SESSION, 0, &io));Error: Ivi_SetAttributeViSession (vi, VI_NULL, IVI_ATTR_IO_SESSION, 0, VI_NULL); if(io) { viClose (io); } return error; }/***************************************************************************** * Function: HP662XA_reset * Purpose: This function resets the instrument. *****************************************************************************/ViStatus _VI_FUNC HP662XA_reset (ViSession vi){ ViStatus error = VI_SUCCESS; checkErr( Ivi_LockSession (vi, VI_NULL)); if (!Ivi_Simulating(vi)) /* call only when locked */ { ViSession io = Ivi_IOSession(vi); /* call only when locked */ checkErr( Ivi_SetNeedToCheckStatus (vi, VI_TRUE)); viCheckErr( viPrintf (io, "CLR;")); } checkErr( HP662XA_DefaultInstrSetup (vi)); checkErr( HP662XA_CheckStatus (vi)); Error: Ivi_UnlockSession (vi, VI_NULL); return error;}/***************************************************************************** * Function: HP662XA_self_test * Purpose: This function executes the instrument self-test and returns the * result. *****************************************************************************/ViStatus _VI_FUNC HP662XA_self_test (ViSession vi, ViInt16 *testResult, ViChar testMessage[]){ ViStatus error = VI_SUCCESS; ViString errorMessage; checkErr( Ivi_LockSession (vi, VI_NULL)); if (testResult == VI_NULL) viCheckParm( IVI_ERROR_INVALID_PARAMETER, 2, "Null address for Test Result"); if (testMessage == VI_NULL) viCheckParm( IVI_ERROR_INVALID_PARAMETER, 3, "Null address for Test Message"); if (!Ivi_Simulating(vi)) /* call only when locked */ { ViSession io = Ivi_IOSession(vi); /* call only when locked */ checkErr( Ivi_SetNeedToCheckStatus (vi, VI_TRUE)); viCheckErr( viPrintf (io, "TEST?")); viCheckErr( viScanf (io, "%hd", testResult)); if (Ivi_GetStringFromTable (instrumentErrorTable, *testResult, &errorMessage) != VI_SUCCESS) errorMessage = "Unknown error."; strcpy (testMessage, errorMessage); } else if (Ivi_UseSpecificSimulation(vi)) /* call only when locked */ { /* Simulate Self Test */ *testResult = 0; strcpy (testMessage, "No error."); } checkErr( HP662XA_CheckStatus (vi));Error: Ivi_UnlockSession(vi, VI_NULL); return error;}/***************************************************************************** * Function: HP662XA_error_query * Purpose: This function queries the instrument error queue and returns * the result. *****************************************************************************/ViStatus _VI_FUNC HP662XA_error_query (ViSession vi, ViInt32 *errCode, ViChar errMessage[]){ ViStatus error = VI_SUCCESS; ViInt32 errorCount; checkErr( Ivi_LockSession (vi, VI_NULL)); if (errCode == VI_NULL) viCheckParm( IVI_ERROR_INVALID_PARAMETER, 2, "Null address for Error Code"); if (errMessage == VI_NULL) viCheckParm( IVI_ERROR_INVALID_PARAMETER, 3, "Null address for Error Message"); if (!Ivi_Simulating(vi)) /* call only when locked */ { ViSession io = Ivi_IOSession(vi); /* call only when locked */ checkErr( HP662XA_CheckStatusCallback (vi, io)); checkErr( Ivi_InstrSpecificErrorQueueSize (vi, &errorCount)); if (errorCount > 0) checkErr( Ivi_DequeueInstrSpecificError (vi, errCode, errMessage)); else { *errCode = 0; strcpy (errMessage, "No error."); } } else if (Ivi_UseSpecificSimulation(vi)) /* call only when locked */ { /* Simulate Error Query */ *errCode = 0; strcpy (errMessage, "No error."); }Error: Ivi_UnlockSession(vi, VI_NULL); return error;}/***************************************************************************** * Function: HP662XA_error_message * Purpose: This function translates the error codes returned by this * instrument driver into user-readable strings. * * Note: The caller can pass VI_NULL for the vi parameter. This * is useful if one of the init functions fail. *****************************************************************************/ViStatus _VI_FUNC HP662XA_error_message (ViSession vi, ViStatus errorCode, ViChar errorMessage[256]){ ViStatus error = VI_SUCCESS; static IviStringValueTable errorTable = { IVIPOWER_ERROR_CODES_AND_MSGS, {VI_NULL, VI_NULL} }; if (vi) Ivi_LockSession(vi, VI_NULL); /* all VISA and IVI error codes are handled as well as codes in the table */ if (errorMessage == VI_NULL) viCheckParm( IVI_ERROR_INVALID_PARAMETER, 3, "Null address for Error Message"); checkErr( Ivi_GetSpecificDriverStatusDesc(vi, errorCode, errorMessage, errorTable));Error: if (vi) Ivi_UnlockSession(vi, VI_NULL); return error;}/***************************************************************************** * Function: HP662XA_revision_query * Purpose: This function returns the driver and instrument revisions. *****************************************************************************/ViStatus _VI_FUNC HP662XA_revision_query (ViSession vi, ViChar driverRev[], ViChar instrRev[]){ ViChar rdBuffer[BUFFER_SIZE]; ViStatus error = VI_SUCCESS; checkErr( Ivi_LockSession (vi, VI_NULL)); if (driverRev == VI_NULL) viCheckParm( IVI_ERROR_INVALID_PARAMETER, 2, "Null address for Driver Revision"); if (instrRev == VI_NULL) viCheckParm( IVI_ERROR_INVALID_PARAMETER, 3, "Null address for Instrument Revision"); checkErr( Ivi_GetAttributeViString (vi, VI_NULL, IVI_ATTR_DRIVER_REVISION, 0, -1, driverRev)); if (!Ivi_Simulating(vi)) /* call only when locked */ { ViSession io = Ivi_IOSession(vi); /* call only when locked */ checkErr( Ivi_SetNeedToCheckStatus (vi, VI_TRUE)); viCheckErr( viPrintf (io, "ROM?")); viCheckErr( viScanf (io, "%256[^\r]", instrRev)); } else if (Ivi_UseSpecificSimulation(vi)) /* call only when locked */ { /* Simulate Instrument Revision Query */ strcpy (instrRev, "No revision information available while simulating."); } checkErr( HP662XA_CheckStatus (vi));Error: Ivi_UnlockSession(vi, VI_NULL); return error;}/***************************************************************************** * Function: HP662XA_ConnectOutput * Purpose: This function connects a channel to its output. *****************************************************************************/ViStatus _VI_FUNC HP662XA_ConnectOutput (ViSession vi, ViConstString channel){ ViStatus error = VI_SUCCESS; checkErr( Ivi_LockSession (vi, VI_NULL)); checkErr( Ivi_SetAttributeViBoolean (vi, channel, HP662XA_ATTR_OUTPUT_CONNECTED, 0, VI_TRUE)); checkErr( HP662XA_CheckStatus (vi));Error: Ivi_UnlockSession (vi, VI_NULL); return error;}/***************************************************************************** * Function: HP662XA_DisconnectOutput * Purpose: This function disconnects a channel from its output. *****************************************************************************/ViStatus _VI_FUNC HP662XA_DisconnectOutput (ViSession vi, ViConstString channel){ ViStatus error = VI_SUCCESS; checkErr( Ivi_LockSession (vi, VI_NULL)); checkErr( Ivi_SetAttributeViBoolean (vi, channel, HP662XA_ATTR_OUTPUT_CONNECTED, 0, VI_FALSE)); checkErr( HP662XA_CheckStatus (vi));Error: Ivi_UnlockSession (vi, VI_NULL); return error;}/***************************************************************************** * Function: HP662XA_ConfigureLimits * Purpose: This function configures the over-voltage and over-current * protection. *****************************************************************************/ViStatus _VI_FUNC HP662XA_ConfigureLimits (ViSession vi, ViConstString channel, ViReal64 voltageLimit, ViReal64 currentLimit, ViBoolean ovpEnabled, ViBoolean ocpEnabled){ ViStatus error = VI_SUCCESS; checkErr( Ivi_LockSession (vi, VI_NULL)); /*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -