NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

Labwindows/CVI:How to correctly call the functions in the software driver of Keithley 2636

  • How do I call the following functions,I ran into the following problem when calling this function, the first of which takes an Array of type ViReal64but the assignment in the function is of type int, and the call shows type error。The second error, when implementing the listv mode, is found to be missing a "{" error.The above is an error encountered when calling this function。

      • How do I call this function correctly。Thank you very much!

ViStatus _VI_FUNC ke26xx_ConfigureTriggerModelSMUSourceAction (ViSession vi,
                                                               ViInt32 sourceMeasureUnitChannel,
                                                               ViBoolean enableSourceSweep,
                                                               ViInt32 sweepType,
                                                               ViInt32 sweepPoints,
                                                               ViReal64 pulseStopLevel,
                                                               ViBoolean enableCurrentLimit,
                                                               ViReal64 pulseStartLevel,
                                                               ViReal64 sourceLimit,
                                                               ViReal64 array[],
                                                               ViInt32 listSize,
                                                               ViReal64 asymptote)
{
    ViStatus ke26xx_status = VI_SUCCESS;
    /* Define local variables. */
    ViChar   resultingString[KE26XX_IO_BUFFER_SIZE] = "";
    ViChar   returnModel[16];
    /* Parameter validations. */
    CheckParam (IsInvalidNumericVal (sourceMeasureUnitChannel, KE26XX_SOURCEMEASUREUNITCHANNEL_VAL_CHANNEL_A, KE26XX_SOURCEMEASUREUNITCHANNEL_VAL_CHANNEL_B), VI_ERROR_PARAMETER2);
    CheckParam (IsInvalidBooleanVal (enableSourceSweep), VI_ERROR_PARAMETER3);
    CheckParam (IsInvalidNumericVal (sweepType, KE26XX_SWEEPTYPE_VAL_LINEAR_CURRENT, KE26XX_SWEEPTYPE_VAL_LOGARITHMIC_VOLTAGE), VI_ERROR_PARAMETER4);
    CheckParam (IsInvalidMinimumnNumericVal (sweepPoints, 2), VI_ERROR_PARAMETER5);
    /* Test the largest range in all models */
    CheckParam (IsInvalidNumericVal (pulseStopLevel, KE26XX_VOLTAGE_VAL_MIN, KE26XX_VOLTAGE_VAL_MAX), VI_ERROR_PARAMETER6);
    CheckParam (IsInvalidBooleanVal (enableCurrentLimit), VI_ERROR_PARAMETER7);
    /* Test the largest range in all models */
    CheckParam (IsInvalidNumericVal (pulseStartLevel, KE26XX_VOLTAGE_VAL_MIN, KE26XX_VOLTAGE_VAL_MAX), VI_ERROR_PARAMETER8);
    /* Test the largest range in all models */
    CheckParam (IsInvalidNumericVal (sourceLimit, KE26XX_VOLTAGE_VAL_MIN, KE26XX_VOLTAGE_VAL_MAX), VI_ERROR_PARAMETER9);
    CheckParam (IsInvalidPtr (array), VI_ERROR_PARAMETER10);
    /* Test the largest range in all models */
    CheckParam (IsInvalidNumericVal (listSize, KE26XX_VOLTAGE_VAL_MIN, KE26XX_VOLTAGE_VAL_MAX), VI_ERROR_PARAMETER11);
 
    /* Function Execution. */
    if (enableSourceSweep)
    {
        ViInt32 i = 0;
        sprintf (resultingString, "%s%s.trigger.source.action =1;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel]);
        switch (sweepType)
        {
        case KE26XX_SWEEPTYPE_VAL_LINEAR_CURRENT:
            sprintf (resultingString, "%s%s.trigger.source.lineari(%g, %g, %d);", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], pulseStartLevel, pulseStopLevel, sweepPoints);
            CheckErr (viQueryf (vi, "print(localnode.model)", "%s", returnModel));
            if (strcmp (returnModel, "2651A") == KE26XX_TRUE || (!enableCurrentLimit))
            {
                sprintf (resultingString, "%s%s.trigger.source.limiti = %s.LIMIT_OFF;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel],
          sourceMeasureUnitChannelTable[sourceMeasureUnitChannel]);
            }
            else
            {
                sprintf (resultingString, "%s%s.trigger.source.limiti = %g;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], sourceLimit);
            }
            break;
        case KE26XX_SWEEPTYPE_VAL_LINEAR_VOLTAGE:
            sprintf (resultingString, "%s%s.trigger.source.linearv(%g, %g, %d);", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], pulseStartLevel, pulseStopLevel, sweepPoints);
            sprintf (resultingString, "%s%s.trigger.source.limitv = %g;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], sourceLimit);
            break;
        case KE26XX_SWEEPTYPE_VAL_LIST_CURRENT:
            sprintf (resultingString, "%s%s.trigger.source.listi({", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel]);
            for (i = 0; i < listSize - 1; i++)
            {
                sprintf (resultingString, "%s%g,", resultingString, array[i]);
            }
            sprintf (resultingString, "%s%g});", resultingString, array[i]);
            CheckErr (viQueryf (vi, "print(localnode.model)", "%s", returnModel));
            if (strcmp (returnModel, "2651A") == KE26XX_TRUE || (!enableCurrentLimit))
            {
                sprintf (resultingString, "%s%s.trigger.source.limiti = %s.LIMIT_OFF;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel],
          sourceMeasureUnitChannelTable[sourceMeasureUnitChannel]);
            }
            else
            {
                sprintf (resultingString, "%s%s.trigger.source.limiti = %g;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], sourceLimit);
            }
            break;
        case KE26XX_SWEEPTYPE_VAL_LIST_VOLTAGE:
            sprintf (resultingString, "%s%s.trigger.source.listv({", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel]);
            for (i = 0; i < listSize - 1; i++)
            {
                sprintf (resultingString, "%s%g,", resultingString, array[i]);
            }
            sprintf (resultingString, "%s%g});", resultingString, array[i]);
            sprintf (resultingString, "%s%s.trigger.source.limitv = %g;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], sourceLimit);
            break;
        case KE26XX_SWEEPTYPE_VAL_LOGARITHMIC_CURRENT:
            sprintf (resultingString, "%s%s.trigger.source.logi(%g, %g, %d, %g);", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], pulseStartLevel,
         pulseStopLevel, sweepPoints, asymptote);
            CheckErr (viQueryf (vi, "print(localnode.model)", "%s", returnModel));
            if (strcmp (returnModel, "2651A") == KE26XX_TRUE || (!enableCurrentLimit))
            {
                sprintf (resultingString, "%s%s.trigger.source.limiti = %s.LIMIT_OFF;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel],
          sourceMeasureUnitChannelTable[sourceMeasureUnitChannel]);
            }
            else
            {
                sprintf (resultingString, "%s%s.trigger.source.limiti = %g;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], sourceLimit);
            }
            break;
        case KE26XX_SWEEPTYPE_VAL_LOGARITHMIC_VOLTAGE:
            sprintf (resultingString, "%s%s.trigger.source.logv(%g, %g, %d, %g);", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], pulseStartLevel,
         pulseStopLevel, sweepPoints, asymptote);
            sprintf (resultingString, "%s%s.trigger.source.limitv = %g;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel], sourceLimit);
            break;
        default:
            break;
        }
    }
    else
    {
        sprintf (resultingString, "%s%s.trigger.source.action =0;", resultingString, sourceMeasureUnitChannelTable[sourceMeasureUnitChannel]);
    }
    CheckErr (viPrintf (vi, resultingString));
    CheckErr (ke26xx_CheckStatus (vi));
Error:
    return ke26xx_status;
}
0 项奖励
1 条消息(共 1 条)
1,768 次查看