Programming/Instrument

KEITHLEY 3607A + 3722 Module Volt Scan List 작성 방법 (C++)

New-Long 2019. 2. 16. 12:01

  • Include File 

C:\Program Files (x86)\IVI Foundation\IVI\Include


  • Library File 

C:\Program Files (x86)\IVI Foundation\IVI\Lib


  • Examples 

C:\Program Files (x86)\IVI Foundation\IVI\Drivers\ke37xx\Examples\C++


1
2
#include "ke37xx.h"
 
cs


1. 3706A Switching Multi-meter에 연결.  

1
2
3
4
5
    ViStatus status = ke37xx_init ("TCPIP0::192.168.0.10::inst0::INSTR", VI_TRUE, VI_TRUE, &m_Session);
    
    if(status != KE37XX_SUCCESS) {
        return false;
    }
cs

2. Scan Config 및 Scan List 생성. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
 
    ViStatus        status          = 0;
    int             nScanCount      = 1;
    int             nNumChannels    = 420;
    int             nBufferSize     = nScanCount * nNumChannels;
    ViConstString   ChannelList     = "1001:5096";  // 3722 Module이 5개 설치된 경우. 
    
    // 3706A Reset ----------------------------------
    status = ke37xx_reset(m_Session);
    
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Channel All Open  ---------------------------
    status = ke37xx_OpenAllChannels(m_Session);
 
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Scan Reset -----------------------------------
    status = ke37xx_ResetScan(m_Session);
    
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // 측정 대이터를 저장할 Buffer 생성. 
    status = ke37xx_CreateMeasurementBuffer ( m_Session, "MyBuf", nBufferSize);
    
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Auto Ranging Turn Off -------------------------
    bool bAutoRange = false;
    status = ke37xx_SetAttributeViBoolean(m_Session, VI_NULL, KE37XX_ATTR_AUTO_RANGE, bAutoRange);
    
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Auto Range를 사용하지 않을 경우 Range를 설정해야한다. 
    if(!bAutoRange) {
        // Range 300
        ViReal64 dRange = 300;
        status =  ke37xx_SetAttributeViReal64(m_Session, VI_NULL, KE37XX_ATTR_RANGE, dRange);
        if(status != KE37XX_SUCCESS) {
            return false;
        }
    }
    
    // Auto Zero Off.
    status = ke37xx_SetAttributeViInt32(m_Session, VI_NULL, KE37XX_ATTR_AUTO_ZERO, KE37XX_VAL_AUTO_ZERO_OFF);
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Auto Delay On.
    status = ke37xx_SetAttributeViInt32(m_Session, VI_NULL, KE37XX_ATTR_AUTO_DELAY, KE37XX_VAL_AUTO_DELAY_ON);
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Set the number of power line cycles 0.5
    ViReal64 dNPLC = 0.5// 1.0 ~ 0.001 
    status =  ke37xx_SetAttributeViReal64(m_Session, VI_NULL, KE37XX_ATTR_NPLC, dNPLC);
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Scan Count ( !주의, 중복 수에 맞게 Buffer Size도 증가되어야 한다.)  
    status = ke37xx_SetAttributeViInt32( m_Session, VI_NULL, KE37XX_ATTR_SCAN_COUNT, nScanCount);
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Measure Count
    int nMeasureCount = 1;  
    status = ke37xx_SetAttributeViInt32( m_Session, VI_NULL, KE37XX_ATTR_SCAN_MEASURE_COUNT, nMeasureCount);
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // 스캔중인 스위치 연결 끊기 동작.   
    status = ke37xx_SetAttributeViInt32( m_Session, VI_NULL, KE37XX_ATTR_SCAN_MODE, KE37XX_VAL_BREAK_BEFORE_MAKE);
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // 스캔이 시작되기 전에 릴레이를 조작하는 방법을 나타내는 모드를 설정합니다.
    status = ke37xx_SetAttributeViInt32( m_Session, VI_NULL, KE37XX_ATTR_SCAN_MODE_SPECIFIC , KE37XX_VAL_SCAN_MODE_OPEN_ALL );
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Scan Delay : 스캔의 고급 출력 트리거를 지정하는 경로를 만드는 데 걸린 최소 시간 (밀리 초)입니다. 실제 시간은 더 길 수 있습니다.
    ViReal64 dScanDelay_msec = 10;
    status = ke37xx_SetAttributeViReal64(m_Session, VI_NULL, KE37XX_ATTR_SCAN_DELAY, dScanDelay_msec);
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Channel Delay : ChannelList에 지정된 채널에 대한 추가 지연 시간 (초)을 설정합니다.
    ViReal64 dChannelDelaySec = 0.05// sec
    status =  ke37xx_SetChannelDelay ( m_Session, "1001:5096", dChannelDelaySec);
  
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // Scan Configuration parameters -----------------
    status = ke37xx_SetChannelConfiguration(m_Session, ChannelList, KE37XX_VAL_FUNCTION_DC_VOLTS);
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    
    // 지금 까지 설정한 Config 값을 내 커스텀 Config에 저장시킨다. 
    // DMM Custom Channel Configuration 생성. 
    ViConstString sDmmConfig = "mydcvolts";
    status = ke37xx_CreateConfiguration ( m_Session, sDmmConfig );
      
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    // DMM Custom Channel Configuration 설정. 
    status = ke37xx_SetCustomChannelConfiguration(m_Session, "1001:5096", sDmmConfig);
 
    if(status != KE37XX_SUCCESS) {
        return false;
    }
    
    status =  ke37xx_CreateScanList ( m_Session, ChannelList, sDmmConfig );
    if(status != KE37XX_SUCCESS) {
        return false;
    }    
cs


3. Scan Start 

1
2
3
4
5
    ViStatus    status = status = ke37xx_ExecuteBackgroundScan ( m_Session, "MyBuf" );
 
    if(status != KE37XX_SUCCESS) {
        return false;
    }
cs



4. Scan Data Read

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    ViStatus        status              = 0;
    ViBoolean       CallerHasLock       = 0;
    long            nRetValActualSize   = 0;
    double          dBuff[410]; // Config 작성 시의 Buffer 크기와 동일하거나 크게 잡아야 한다. 
    int             nBuffSizeByte       = sizeof(dBuff);
 
    ZeroMemory(dBuff, nBuffSizeByte);
 
    status = ke37xx_GetAllReadings ( m_Session, "MyBuf", nBuffSizeByte, dBuff, &nRetValActualSize );
 
    if(status != KE37XX_SUCCESS) {
        return false;
    }
 
cs


'Programming > Instrument' 카테고리의 다른 글

KEITHLEY 3706A Resource Name 생성 방법  (0) 2019.02.12