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

📄 gf.c

📁 机械工业出版社 Lab Windows/CVI逐步深入与开发实例源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	          
	    - Standard Waveform Generation Group: This group controls function
	      generators capable of producing standard function waveforms.
	    
	      Attributes:  GF_ATTR_FUNC_WAVEFORM   
	                   GF_ATTR_FUNC_AMPLITUDE  
	                   GF_ATTR_FUNC_DC_OFFSET  
	                   GF_ATTR_FUNC_FREQUENCY  
	                   GF_ATTR_FUNC_START_PHASE
	                   GF_ATTR_DUTY_CYCLE_HIGH 
	      
	      Functions:   GF_ConfigureStandardWaveform
	                   GF_GenerateStandardWaveform
	                    
	    - Arbitrary Waveform Generation Group: This group controls function
	      generators capable of producing user-specified arbitrary waveforms.
	    
	      Attributes:  GF_ATTR_ARB_WAVEFORM_HANDLE
	                   GF_ATTR_ARB_WAVEFORM_GAIN
	                   GF_ATTR_ARB_WAVEFORM_OFFSET
	                   GF_ATTR_ARB_SAMPLE_RATE
	                   GF_ATTR_MAX_NUM_WAVEFORMS     
	                   GF_ATTR_WAVEFORM_QUANTUM      
	                   GF_ATTR_MIN_WAVEFORM_SIZE     
	                   GF_ATTR_MAX_WAVEFORM_SIZE     
	                   
	      Functions:   GF_CreateArbWaveform
	                   GF_ClearArbWaveform
	                   GF_ConfigureArbWaveform
	                   GF_QueryArbWfmCapabilities
	                   GF_ConfigureSampleRate
	                   GF_GenerateArbWaveform
	                   
	    - Arbitrary Sequence Generation Group: This group controls function 
	      generators capable of producing a sequence of arbitrary waveforms.
	      You must implement the Arbitrary Waveform Generation Group in order
	      to implement this group.
	      
	      Attributes : GF_ATTR_ARB_SEQUENCE_HANDLE
	                   GF_ATTR_MAX_NUM_SEQUENCES
	                   GF_ATTR_MIN_SEQUENCE_LENGTH
	                   GF_ATTR_MAX_SEQUENCE_LENGTH
	                   GF_ATTR_MAX_LOOP_COUNT
	      
	      Functions:   GF_CreateArbSequence
	                   GF_ClearArbSequence
	                   GF_ClearArbMemory
	                   GF_ConfigureArbSequence
	                   GF_QueryArbSeqCapabilities
	                   GF_GenerateArbSequence
	                   
	    - Triggered Generation Group: This group controls function generators 
	      capable of generating a signal when they receive a trigger.   
	    
	      Attributes:  GF_ATTR_TRIGGER_SOURCE
	                   GF_ATTR_CYCLE_COUNT
	                                      
	      Functions:   GF_ConfigureTrigger
	                   
	    - Amplitude Modulation Generation Group: This group controls function
	      generators capable of applying amplitude modulation to an output signal.
	    
	      Attributes:  GF_ATTR_AM_ENABLED
	                   GF_ATTR_AM_SOURCE
	                   GF_ATTR_AM_INTERNAL_WAVEFORM
	                   GF_ATTR_AM_INTERNAL_DEPTH
	                   GF_ATTR_AM_INTERNAL_FREQUENCY
	                   
	      Functions:   GF_EnableAM            
	                   GF_DisableAM          
	                   GF_ConfigureAMInternal
	                   
	    - Frequency Modulation Generation Group: This group controls function
	      generators capable of applying frequency modulation to an output signal.
	    
	      Attributes:  GF_ATTR_FM_ENABLED
	                   GF_ATTR_FM_SOURCE
	                   GF_ATTR_FM_INTERNAL_WAVEFORM
	                   GF_ATTR_FM_INTERNAL_DEVIATION
	                   GF_ATTR_FM_INTERNAL_FREQUENCY
	                   
	      Functions:   GF_EnableFM            
	                   GF_DisableFM          
	                   GF_ConfigureFMInternal
	                   
     *============================================================END=Sung=*/

/*****************************************************************************
 *  GPIB_FG Instrument Driver                               
 *  LabWindows/CVI 5.0 Instrument Driver                                     
 *  Original Release: 02-8-7                                  
 *  By: ,                               
 *      PH.    Fax                               
 *                                                                           
 *  Modification History:                                                    
 *                                                                           
 *       02-8-7 - Instrument Driver Created.                  
 *                                                                           
 *****************************************************************************/

#include <string.h>
#include <stdio.h>  
#include <formatio.h>
#include <math.h>


#include "GF.h"

/*****************************************************************************
 *--------------------- Hidden Attribute Declarations -----------------------*
 *****************************************************************************/

#define GF_ATTR_OPC_TIMEOUT      (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 1L)   /* ViInt32 */
#define GF_ATTR_CONFIGURABLE           (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 101L)   /* ViBoolean*/

#define GF_ATTR_WFM_STRUCTURE          (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 102L)   /* ViAddr */
#define GF_ATTR_SEQ_STRUCTURE          (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 103L)   /* ViAddr */

/*****************************************************************************
 *---------------------------- Useful Macros --------------------------------*
 *****************************************************************************/

    /*- I/O buffer size -----------------------------------------------------*/
#define BUFFER_SIZE                             512L        

    /*- 488.2 Event Status Register (ESR) Bits ------------------------------*/
#define IEEE_488_2_QUERY_ERROR_BIT              0x04
#define IEEE_488_2_DEVICE_DEPENDENT_ERROR_BIT   0x08
#define IEEE_488_2_EXECUTION_ERROR_BIT          0x10
#define IEEE_488_2_COMMAND_ERROR_BIT            0x20

    /*- List of channels passed to the Ivi_BuildChannelTable function -------*/ 
#define CHANNEL_LIST                            "1"
#define GF_WFM_HANDLE_FROM_INDEX(x)     (GF_VAL_FIRST_WAVEFORM_HANDLE + x)
#define GF_WFM_INDEX_FROM_HANDLE(x)     (x - GF_VAL_FIRST_WAVEFORM_HANDLE)

#define GF_SEQ_HANDLE_FROM_INDEX(y)     (GF_VAL_FIRST_SEQUENCE_HANDLE + y)
#define GF_SEQ_INDEX_FROM_HANDLE(y)     (y - GF_VAL_FIRST_SEQUENCE_HANDLE) 

    /*- Defined values for attribute GF_ATTR_ARB_WAVEFORM_HANDLE----*/

#define GF_VAL_FIRST_WAVEFORM_HANDLE IVIFGEN_VAL_FIRST_WAVEFORM_HANDLE
#define GF_VAL_LAST_WAVEFORM_HANDLE  IVIFGEN_VAL_LAST_WAVEFORM_HANDLE      

    /*- Defined values for attribute GF_ATTR_ARB_SEQUENCE_HANDLE ---*/

#define GF_VAL_FIRST_SEQUENCE_HANDLE IVIFGEN_VAL_FIRST_SEQUENCE_HANDLE
#define GF_VAL_LAST_SEQUENCE_HANDLE  IVIFGEN_VAL_LAST_SEQUENCE_HANDLE 

    /*- Defined value for length of arbitrary waveform and sequence names -*/

#define GF_VAL_NAME_LENGTH              (9L)
/* 
    The driver uses this structure in its utility functions for creating and
    removing arbitray waveforms.
*/
typedef struct wfmNode
    {
    ViInt32 wfmSize;
    ViChar  wfmName[GF_VAL_NAME_LENGTH];
    } wfmNode;
typedef wfmNode *wfmNodePtr;

/* 
    The driver uses this structure in its utility functions for creating and
    removing arbitray sequences.
*/
typedef struct seqNode
    {
    ViInt32 seqLength;
    ViChar  seqName[GF_VAL_NAME_LENGTH];
    ViInt32 *wfmHandles;
    } seqNode;
typedef seqNode *seqNodePtr;

/*****************************************************************************
 *-------------- Utility Function Declarations (Non-Exported) ---------------*
 *****************************************************************************/
static ViStatus GF_InitAttributes (ViSession vi);
static ViStatus GF_DefaultInstrSetup (ViSession openInstrSession);
static ViStatus GF_CheckStatus (ViSession vi);
static ViStatus GF_WaitForOPC (ViSession vi, ViInt32 maxTime);
static ViStatus GF_VerifyConfigurable (ViSession vi);
static ViStatus GF_VerifyGenerating   (ViSession vi);
static ViStatus GF_MarkConfigurable   (ViSession vi);
static ViStatus GF_MarkGenerating     (ViSession vi);

static ViStatus GF_VerifyOutputMode   (ViSession vi, ViInt32 outputMode);

static ViStatus GF_CreateDriverWfmRecord (ViSession vi);
static ViStatus GF_VerifyWfmCreatable (ViSession vi, ViInt32 wfmSize, ViReal64 wfmData[]);
static ViStatus GF_GetNewWfmInfo (ViSession vi, ViInt32 *wfmHandle, ViChar wfmName[]);
static ViStatus GF_GetNumDefinedWaveforms (ViSession vi, ViInt32 *numWfms);
static ViStatus GF_GetNewWfmName (ViSession vi, wfmNodePtr wfmStruct, ViInt32 maxNumWfms, ViInt32 wfmHandle, ViChar wfmName[]);
static ViStatus GF_UpdateDriverWfmRecord (ViSession vi, ViInt32 wfmHandle, ViInt32 wfmSize, ViChar wfmName[]);
static ViStatus GF_WfmExists (ViSession vi, ViInt32 wfmHandle, ViBoolean *wfmExists);
static ViStatus GF_WfmInSeq (ViSession vi, ViInt32 wfmHandle);
static ViStatus GF_GetWfmNameFromHandleUtil (ViSession vi, ViInt32 wfmHandle, ViInt32 arraySize, ViChar wfmName[]);
static ViStatus GF_GetWfmHandleFromNameUtil (ViSession vi, ViConstString wfmName, ViInt32 *wfmHandle);
static ViStatus GF_ClearDriverWfmRecord (ViSession vi, ViInt32 wfmHandle);

static ViStatus GF_CreateDriverSeqRecord (ViSession vi);
static ViStatus GF_VerifySeqCreatable (ViSession vi, ViInt32 seqLength, ViInt32 wfmArray[], ViInt32 loopArray[]);
static ViStatus GF_GetNewSeqInfo (ViSession vi, ViInt32 *wfmHandle, ViChar seqName[]);
static ViStatus GF_GetNumDefinedSequences (ViSession vi, ViInt32 *numSeqs);
static ViStatus GF_GetNewSeqName (ViSession vi, seqNodePtr seqStruct, ViInt32 maxNumSeqs, ViInt32 seqHandle, ViChar seqName[]);
static ViStatus GF_UpdateDriverSeqRecord (ViSession vi, ViInt32 seqHandle, ViInt32 seqLength, ViInt32 wfmHandle[], ViChar seqName[]);
static ViStatus GF_SeqExists (ViSession vi, ViInt32 seqHandle, ViBoolean *seqExists);

⌨️ 快捷键说明

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