📄 hp662xa.c
字号:
/***************************************************************************** * Hewlett-Packard 662xA Power Supply Instrument Driver * LabWindows/CVI 5.0 Instrument Driver * Original Release: 4/1/98 * By: ST, National Instruments * PH. Fax * * Modification History: * * 4/1/98 - Instrument Driver Created. * *****************************************************************************/#include <string.h>#include <stdio.h> #include <formatio.h>#include <math.h>#include <ctype.h>#include <stdlib.h>#include "hp662xa.h"/***************************************************************************** *--------------------- Hidden Attribute Declarations -----------------------* *****************************************************************************/#define HP662XA_ATTR_DRIVER_SETUP IVI_ATTR_DRIVER_SETUP /* ViString, read-only */#define HP662XA_ATTR_MODEL (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 1L) /* ViInt32, read-only */#define HP662XA_ATTR_RANGE_CHANGE_STATUS (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 2L) /* ViInt32, multi-channel */#define HP662XA_ATTR_MEASUREMENT (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 3L) /* ViReal64, multi-channel *//***************************************************************************** *---------------------------- Useful Macros --------------------------------* *****************************************************************************/ /*- I/O buffer size -----------------------------------------------------*/#define BUFFER_SIZE 512L /*- DriverSetup Options -------------------------------------------------*/#define SETUP_MODEL_TAG "Model" /*- HP 662XA Family Member Capabilites ----------------------------------*//* Family members */#define HP6621A 0 /* multiple-output, dual-range */#define HP6622A 1 /* . */#define HP6623A 2 /* . */#define HP6624A 3 /* . */#define HP6625A 4 /* . */#define HP6626A 5 /* . */#define HP6627A 6 /* . */#define HP6628A 7 /* . */#define HP6629A 8 /* . */#define NUMBER_OF_MODELS 9static IviStringValueTable HP662XA_ModelTable ={ {HP6621A, "6621A"}, {HP6622A, "6622A"}, {HP6623A, "6623A"}, {HP6624A, "6624A"}, {HP6625A, "6625A"}, {HP6626A, "6626A"}, {HP6627A, "6627A"}, {HP6628A, "6628A"}, {HP6629A, "6629A"}, {VI_NULL, VI_NULL}};static ViInt8 HP662XA_NumberOfChannels[NUMBER_OF_MODELS] ={/*HP6621A*/ 2,/*HP6622A*/ 2,/*HP6623A*/ 3,/*HP6624A*/ 4,/*HP6625A*/ 2,/*HP6626A*/ 4,/*HP6627A*/ 4,/*HP6628A*/ 2,/*HP6629A*/ 4,};#define CHANNELS_IN_TABLE 4static ViReal64 HP662XA_VoltageSettings[NUMBER_OF_MODELS][CHANNELS_IN_TABLE] ={/* channel: 1 2 3 4 *//*HP6621A*/ 20.2, 20.2, 0.0, 0.0,/*HP6622A*/ 50.5, 50.5, 0.0, 0.0,/*HP6623A*/ 20.2, 20.2, 50.5, 0.0,/*HP6624A*/ 20.2, 20.2, 50.5, 50.5,/*HP6625A*/ 50.5, 50.5, 0.0, 0.0,/*HP6626A*/ 50.5, 50.5, 50.5, 50.5,/*HP6627A*/ 50.5, 50.5, 50.5, 50.5,/*HP6628A*/ 50.5, 50.5, 0.0, 0.0,/*HP6629A*/ 50.5, 50.5, 50.5, 50.5,};static ViReal64 HP662XA_VoltageLimits[NUMBER_OF_MODELS][CHANNELS_IN_TABLE] ={/* channel: 1 2 3 4 *//*HP6621A*/ 23.0, 23.0, 0.0, 0.0,/*HP6622A*/ 55.0, 55.0, 0.0, 0.0,/*HP6623A*/ 23.0, 23.0, 55.0, 0.0,/*HP6624A*/ 23.0, 23.0, 55.0, 55.0,/*HP6625A*/ 55.0, 55.0, 0.0, 0.0,/*HP6626A*/ 55.0, 55.0, 55.0, 55.0,/*HP6627A*/ 55.0, 55.0, 55.0, 55.0,/*HP6628A*/ 55.0, 55.0, 0.0, 0.0,/*HP6629A*/ 55.0, 55.0, 55.0, 55.0,};static ViReal64 HP662XA_CurrentLimits[NUMBER_OF_MODELS][CHANNELS_IN_TABLE] ={/* channel: 1 2 3 4 *//*HP6621A*/ 10.30, 10.30, 0.0, 0.0,/*HP6622A*/ 4.12, 4.12, 0.0, 0.0,/*HP6623A*/ 5.15, 10.30, 2.06, 0.0,/*HP6624A*/ 5.15, 5.15, 2.06, 2.06,/*HP6625A*/ 0.50, 2.0, 0.0, 0.0,/*HP6626A*/ 0.50, 0.50, 2.0, 2.0,/*HP6627A*/ 2.06, 2.06, 2.06, 2.06,/*HP6628A*/ 2.0, 2.0, 0.0, 0.0,/*HP6629A*/ 2.0, 2.0, 2.0, 2.0,};static ViReal64 HP662XA_CurrentMinimums[NUMBER_OF_MODELS][CHANNELS_IN_TABLE] ={/* channel: 1 2 3 4 *//*HP6621A*/ 0.13, 0.13, 0.0, 0.0,/*HP6622A*/ 0.07, 0.07, 0.0, 0.0,/*HP6623A*/ 0.08, 0.13, 0.05, 0.0,/*HP6624A*/ 0.08, 0.08, 0.05, 0.05,/*HP6625A*/ 0.0, 0.0, 0.0, 0.0,/*HP6626A*/ 0.0, 0.0, 0.0, 0.0,/*HP6627A*/ 0.05, 0.05, 0.05, 0.05,/*HP6628A*/ 0.0, 0.0, 0.0, 0.0,/*HP6629A*/ 0.0, 0.0, 0.0, 0.0,};static IviStringValueTable instrumentErrorTable ={ {0, "No error."}, {1, "Unidentified character."}, {2, "Number format is incorrect."}, {3, "Unidentified command."}, {4, "Syntax error."}, {5, "Value out of range."}, {6, "Cannot respond since no query was made."}, {7, "Display string too long."}, {8, "Buffer is full."}, {9, "Firmware error."}, {10, "Hardware error."}, {11, "Hardware error on channel 1."}, {12, "Hardware error on channel 2."}, {13, "Hardware error on channel 3."}, {14, "Hardware error on channel 4."}, {15, "No model number available."}, {16, "Error during calibration."}, {17, "Incorrect calibration."}, {18, "Calibration is locked."}, {20, "Timer failed self-test."}, {21, "RAM failed self-test."}, {22, "Self-Test jumper in Skip Self-Test position."}, {27, "ROM failed checksum."}, {28, "Unidentified command."}, {29, "Incorrect checksum for non-volatile storage."}, {30, "Store limit has been reached."}, {VI_NULL, VI_NULL}};/***************************************************************************** *-------------- Utility Function Declarations (Non-Exported) ---------------* *****************************************************************************/static ViStatus HP662XA_InitAttributes (ViSession vi, ViInt32 model);static ViStatus HP662XA_DefaultInstrSetup (ViSession openInstrSession);static ViStatus HP662XA_CheckStatus (ViSession vi);static ViStatus HP662XA_QueryID (ViSession vi, ViInt32 bufferSize, ViChar buffer[]);static ViStatus HP662XA_GetModel (ViSession vi, ViInt32* model);static ViStatus HP662XA_CheckForRangeChange (ViSession vi, ViConstString channel, ViBoolean* changed);static ViStatus HP662XA_GetRangeChangeStatus (ViSession vi, ViConstString channel, ViStatus* status);static ViStatus HP662XA_GetProtectionStatus (ViSession vi, ViConstString channel, ViBoolean* ovpTripped, ViBoolean* ocpTripped, ViBoolean* otpTripped);static ViStatus HP662XA_SimulateMeasurement (ViSession vi, ViConstString channel, ViReal64* measurement);static ViStatus HP662XA_GetDriverSetupOption (ViSession vi, ViConstString optionTag, ViInt32 optionValueSize, ViChar optionValue[]);static ViStatus HP662XA_BuildChannelList (ViInt32 numberOfChannels, ViInt32 channelListSize, ViChar channelList[]);/***************************************************************************** *----------------- Callback Declarations (Non-Exported) --------------------* *****************************************************************************/ /*- Global Session Callbacks --------------------------------------------*/ static ViStatus _VI_FUNC HP662XA_CheckStatusCallback (ViSession vi, ViSession io); /*- Attribute callbacks -------------------------------------------------*/static ViStatus _VI_FUNC HP662XAAttrDriverRevision_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, const ViConstString cacheValue);static ViStatus _VI_FUNC HP662XAAttrIdQueryResponse_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, const ViConstString cacheValue);static ViStatus _VI_FUNC HP662XAAttrVoltageLimit_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC HP662XAAttrVoltageLimit_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC HP662XAAttrVoltageLimit_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC HP662XAAttrCurrentLimit_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC HP662XAAttrCurrentLimit_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 value);static ViStatus _VI_FUNC HP662XAAttrCurrentLimit_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViReal64 *value);static ViStatus _VI_FUNC HP662XAAttrOVPEnabled_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViBoolean value);static ViStatus _VI_FUNC HP662XAAttrOCPEnabled_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViBoolean value);static ViStatus _VI_FUNC HP662XAAttrOCPEnabled_ReadCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId, ViBoolean *value);static ViStatus _VI_FUNC HP662XAAttrOutputConnected_CheckCallback (ViSession vi, ViConstString channelName, ViAttr attributeId, ViBoolean value);static ViStatus _VI_FUNC HP662XAAttrOutputConnected_WriteCallback (ViSession vi, ViSession io, ViConstString channelName, ViAttr attributeId,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -