⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fl45.c

📁 CVI教程,用于信号采集系统的多任务开发软件.学习简单,功能实用.
💻 C
📖 第 1 页 / 共 5 页
字号:
    ViUInt32    oldTimeout;    ViBoolean   needToRestoreTimeout = VI_FALSE;    static      IviStringValueTable errorTable =                  {                    {0,     "Self-test passed."                     },                    {1,     "A/D self-test failed."                 },                    {2,     "A/D dead."                             },                    {4,     "EEPROM instrument configuration bad."  },                    {8,     "EEPROM calibration data bad."          },                    {16,    "Display dead."                         },                    {32,    "Display self-test failed."             },                    {64,    "ROM test failed."                      },                    {128,   "External RAM test failed."             },                    {256,   "Internal test failed."                 },                    {VI_NULL, VI_NULL}                  };    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 */        {        ViString testString;                io = Ivi_IOSession(vi); /* call only when locked */                checkErr( Ivi_SetNeedToCheckStatus (vi, VI_TRUE));        viCheckErr( viPrintf (io, "*TST?"));                    viCheckErr( viGetAttribute (io, VI_ATTR_TMO_VALUE, &oldTimeout));        viCheckErr( viSetAttribute (io, VI_ATTR_TMO_VALUE, 60000));     /* 1 minute */        needToRestoreTimeout = VI_TRUE;        viCheckErr( viScanf (io, "%hd", testResult));                viCheckErr( Ivi_GetStringFromTable (errorTable, *testResult, &testString));        strcpy (testMessage, testString);               }    else if (Ivi_UseSpecificSimulation(vi)) /* call only when locked */        {            /* Simulate Self Test */        *testResult = 0;        strcpy (testMessage, "No error.");        }        checkErr( FL45_CheckStatus (vi));Error:    if (needToRestoreTimeout)        {            /* Restore the original timeout */        viSetAttribute (io, VI_ATTR_TMO_VALUE, oldTimeout);        }    Ivi_UnlockSession(vi, VI_NULL);    return error;}/***************************************************************************** * Function: FL45_error_query                                                      * Purpose:  This function queries the instrument error queue and returns    *           the result.                                                      *****************************************************************************/ViStatus _VI_FUNC FL45_error_query (ViSession vi, ViInt32 *errCode,                                     ViChar errMessage[]){    ViStatus    error = VI_SUCCESS;        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 */        ViInt32     numErrors;        checkErr( Ivi_SetNeedToCheckStatus (vi, VI_TRUE));        /*            Check the error queue size to see if there is an error.             If so get the error. If not, then perform a FL45_CheckStatusCallback            to see if there is an error residing in the instrument.        */        checkErr( Ivi_InstrSpecificErrorQueueSize (vi, &numErrors));            if (numErrors > 0)            checkErr( Ivi_DequeueInstrSpecificError (vi, errCode, errMessage));        else            {            checkErr( FL45_CheckStatusCallback (vi, io));                checkErr( Ivi_InstrSpecificErrorQueueSize (vi, &numErrors));            if (numErrors > 0)                checkErr( Ivi_DequeueInstrSpecificError (vi, errCode, errMessage));            else                {                 *errCode = 0;                Fmt (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: FL45_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 usefull if one of the init functions fail. *****************************************************************************/ViStatus _VI_FUNC FL45_error_message (ViSession vi, ViStatus errorCode,                                      ViChar errorMessage[256]){    ViStatus    error = VI_SUCCESS;        static      IviStringValueTable errorTable =         {            IVIDMM_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: FL45_revision_query                                                   * Purpose:  This function returns the driver and instrument revisions.       *****************************************************************************/ViStatus _VI_FUNC FL45_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, "*IDN?"));            viCheckErr( viScanf (io, "%*[^,],%*[^,],%*[^,],%256[^\n]", instrRev));        }    else if (Ivi_UseSpecificSimulation(vi)) /* call only when locked */        {            /* Simulate Instrument Revision Query */        strcpy (instrRev, "No revision information available while simulating.");        }    checkErr( FL45_CheckStatus (vi));Error:        Ivi_UnlockSession(vi, VI_NULL);    return error;}/***************************************************************************** * Function: FL45_Configure                                                        * Purpose:  Configures the common attributes of the DMM.  These attributes  *           are FL45_ATTR_FUNCTION,  *               FL45_ATTR_RANGE,  *               FL45_ATTR_RESOLUTION,  *               FL45_ATTR_AC_MIN_FREQ, and                                              *               FL45_ATTR_AC_MAX_FREQ.                                              *****************************************************************************/ViStatus _VI_FUNC FL45_Configure (ViSession vi, ViInt32 measFunction,                                   ViReal64 range, ViReal64 resolution,                                   ViReal64 acMinFreq, ViReal64 acMaxFreq){    ViStatus    error = VI_SUCCESS;        checkErr( Ivi_LockSession (vi, VI_NULL));            /* Set attributes: */    viCheckParm( Ivi_SetAttributeViInt32 (vi, VI_NULL, FL45_ATTR_FUNCTION, 0,                 measFunction), 2, "Measurement Function");                     /*         For the FL45, the resolution needs to be set before the range        since the range is dependent on the resolution.    */            viCheckParm( Ivi_SetAttributeViReal64 (vi, VI_NULL, FL45_ATTR_RESOLUTION,                  0, resolution), 4, "Resolution");      viCheckParm( Ivi_SetAttributeViReal64 (vi, VI_NULL, FL45_ATTR_RANGE,                       0, range), 3, "Range");          /* Set the AC min/max frequencies only if configuring an AC measurement */    switch (measFunction)        {        case FL45_VAL_AC_VOLTS:                  case FL45_VAL_AC_CURRENT:                case FL45_VAL_AC_PLUS_DC_VOLTS:             case FL45_VAL_AC_PLUS_DC_CURRENT:            viCheckParm( Ivi_SetAttributeViReal64 (vi, VI_NULL,                          FL45_ATTR_AC_MIN_FREQ, 0, acMinFreq),                          5, "AC Min Frequency");              viCheckParm( Ivi_SetAttributeViReal64 (vi, VI_NULL,                          FL45_ATTR_AC_MAX_FREQ, 0, acMaxFreq),                          6, "AC Max Frequency");              break;        }    checkErr( FL45_CheckStatus (vi));    Error:    Ivi_UnlockSession(vi, VI_NULL);    return error;}/***************************************************************************** * Function: FL45_ConfigureWithSecondary                                                        * Purpose:  Configures the common attributes of the DMM.  These attributes  *           are FL45_ATTR_FUNCTION,  *               FL45_ATTR_RANGE,  *               FL45_ATTR_SECONDARY_FUNCTION *               FL45_ATTR_RESOLUTION,  *               FL45_ATTR_AC_MIN_FREQ, and                                              *               FL45_ATTR_AC_MAX_FREQ.                                              *****************************************************************************/ViStatus _VI_FUNC FL45_ConfigureWithSecondary (ViSession vi, ViInt32 measFunction,                                      ViReal64 range,                                      ViInt32 secondMeasFunction,                                      ViReal64 resolution, ViReal64 acMinFreq,                                      ViReal64 acMaxFreq){    ViStatus    error = VI_SUCCESS;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -