nsqdriver 0.2.3__py3-none-any.whl → 0.2.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of nsqdriver might be problematic. Click here for more details.
- nsqdriver/NS_MCI.py +3 -3
- nsqdriver/NS_QSYNC.py +72 -47
- nsqdriver/__init__.py +1 -1
- nsqdriver/wrapper/ND_NSMCI.py +245 -0
- {nsqdriver-0.2.3.dist-info → nsqdriver-0.2.5.dist-info}/METADATA +1 -1
- nsqdriver-0.2.5.dist-info/RECORD +12 -0
- nsqdriver-0.2.3.dist-info/RECORD +0 -11
- {nsqdriver-0.2.3.dist-info → nsqdriver-0.2.5.dist-info}/WHEEL +0 -0
- {nsqdriver-0.2.3.dist-info → nsqdriver-0.2.5.dist-info}/top_level.txt +0 -0
nsqdriver/NS_MCI.py
CHANGED
|
@@ -336,9 +336,9 @@ class Driver(BaseDriver):
|
|
|
336
336
|
_string = [f'*********设备{self.addr}开启成功*********']
|
|
337
337
|
for key in keys:
|
|
338
338
|
_string.append(f'{key}: {status.get(key, "nan")}')
|
|
339
|
-
for i in range(len(status['rfsoc_addr'])):
|
|
340
|
-
|
|
341
|
-
|
|
339
|
+
# for i in range(len(status['rfsoc_addr'])):
|
|
340
|
+
# _string.append(f'sub_device{status["rfsoc_addr"][i]}: '
|
|
341
|
+
# f'{status["ref_clock_lock"][i]}{status["ref_clock_from"][i]}')
|
|
342
342
|
print('\n'.join(_string))
|
|
343
343
|
|
|
344
344
|
|
nsqdriver/NS_QSYNC.py
CHANGED
|
@@ -54,8 +54,8 @@ def retry(times):
|
|
|
54
54
|
|
|
55
55
|
class Driver(BaseDriver):
|
|
56
56
|
class ScannMode(enum.IntEnum):
|
|
57
|
-
"""
|
|
58
|
-
QC/QR等被同步设备的发现方式,'local': 本地共享内存扫描, 'remote': 网络udp扫描
|
|
57
|
+
"""!
|
|
58
|
+
@detail QC/QR等被同步设备的发现方式,'local': 本地共享内存扫描, 'remote': 网络udp扫描
|
|
59
59
|
"""
|
|
60
60
|
local = 0
|
|
61
61
|
"""local: 本地共享内存扫描
|
|
@@ -98,6 +98,8 @@ class Driver(BaseDriver):
|
|
|
98
98
|
Quantity('ResetTrig', value=None),
|
|
99
99
|
Quantity('Shot', value=1024, ch=1), # set/get, 运行次数
|
|
100
100
|
Quantity('TrigPeriod', value=200e-6, ch=1), # set/get, 触发周期
|
|
101
|
+
Quantity('TrigWidth', value=800e-9, ch=1), # set/get, 触发周期
|
|
102
|
+
Quantity('TrigDelay', value=0, ch=1), # set/get, 触发周期
|
|
101
103
|
Quantity('TrigFrom', value=0, ch=1), # Trig来源: 0:内部产生;1:外部输入
|
|
102
104
|
Quantity('RefClock', value='out', ch=1), # 参考时钟选择: ‘out’:外参考时钟;‘in’:内参考时钟
|
|
103
105
|
Quantity('DiscoveryMode', value=ScannMode.local, ch=1), # QC/QR等被同步设备的发现方式,见DiscoveryMode说明
|
|
@@ -107,7 +109,9 @@ class Driver(BaseDriver):
|
|
|
107
109
|
SystemParameter = {
|
|
108
110
|
'RefClock': 'out', # 参考时钟选择: ‘out’:外参考时钟;‘in’:内参考时钟
|
|
109
111
|
'TrigFrom': 0, # Trig来源: 0:内部产生;1:外部输入
|
|
110
|
-
'TrigPeriod': 200e-6,
|
|
112
|
+
'TrigPeriod': 200e-6, # 触发信号重复周期
|
|
113
|
+
'TrigWidth': 800e-9, # 触发信号高电平宽度 单位s
|
|
114
|
+
'TrigDelay': 0, # 触发信号相对开启通知的延迟
|
|
111
115
|
'DiscoveryMode': ScannMode.local, # QC/QR等被同步设备的发现方式,见DiscoveryMode说明
|
|
112
116
|
}
|
|
113
117
|
|
|
@@ -119,7 +123,7 @@ class Driver(BaseDriver):
|
|
|
119
123
|
self.gen_trig_num = 0
|
|
120
124
|
self.addr = addr
|
|
121
125
|
|
|
122
|
-
self.param = {'
|
|
126
|
+
self.param = {'Shot': 1024, 'period': 200e-6, 'MixMode': 2}
|
|
123
127
|
print_debug(f'QSYNC: 实例化成功{addr}')
|
|
124
128
|
|
|
125
129
|
@property
|
|
@@ -138,9 +142,11 @@ class Driver(BaseDriver):
|
|
|
138
142
|
return set()
|
|
139
143
|
|
|
140
144
|
def open(self, **kw):
|
|
141
|
-
"""
|
|
145
|
+
"""!
|
|
142
146
|
输入IP打开设备,配置默认超时时间为5秒
|
|
143
147
|
打开设备时配置RFSoC采样时钟,采样时钟以参数定义
|
|
148
|
+
@param kw:
|
|
149
|
+
@return:
|
|
144
150
|
"""
|
|
145
151
|
# 配置系统初始值
|
|
146
152
|
system_parameter = kw.get('system_parameter', {})
|
|
@@ -175,20 +181,30 @@ class Driver(BaseDriver):
|
|
|
175
181
|
return result
|
|
176
182
|
|
|
177
183
|
def set(self, name, value=None, channel=1):
|
|
178
|
-
"""
|
|
184
|
+
"""!
|
|
179
185
|
设置设备属性
|
|
186
|
+
@param name:
|
|
187
|
+
@param value:
|
|
188
|
+
@param channel:
|
|
189
|
+
@return:
|
|
180
190
|
"""
|
|
181
191
|
print_debug(f'QSYNC: set操作被调用{name}')
|
|
182
192
|
if name in {'SystemSync', 'ReInit'}:
|
|
183
193
|
self.sync_system()
|
|
184
194
|
elif name == 'TRIG':
|
|
185
195
|
value = self.param['TrigPeriod']
|
|
186
|
-
data = self.__fmt_qsync_start(
|
|
196
|
+
data = self.__fmt_qsync_start(
|
|
197
|
+
self.param['TrigFrom'], value, self.param['Shot'],
|
|
198
|
+
self.param['TrigWidth'], self.param['TrigDelay']
|
|
199
|
+
)
|
|
187
200
|
self._send_command(data, connect_timeout=2)
|
|
188
201
|
self.gen_trig_num += 1
|
|
189
202
|
elif name == 'GenerateTrig':
|
|
190
203
|
value = self.param['TrigPeriod'] if value is None else value
|
|
191
|
-
data = self.__fmt_qsync_start(
|
|
204
|
+
data = self.__fmt_qsync_start(
|
|
205
|
+
self.param['TrigFrom'], value, self.param['Shot'],
|
|
206
|
+
self.param['TrigWidth'], self.param['TrigDelay']
|
|
207
|
+
)
|
|
192
208
|
self._send_command(data, connect_timeout=2)
|
|
193
209
|
self.gen_trig_num += 1
|
|
194
210
|
elif name == 'ResetTrig':
|
|
@@ -203,8 +219,12 @@ class Driver(BaseDriver):
|
|
|
203
219
|
self.param[name] = value
|
|
204
220
|
|
|
205
221
|
def get(self, name, channel=1, value=0):
|
|
206
|
-
"""
|
|
207
|
-
|
|
222
|
+
"""!
|
|
223
|
+
查询设备属性,获取数据
|
|
224
|
+
@param name:
|
|
225
|
+
@param channel:
|
|
226
|
+
@param value:
|
|
227
|
+
@return:
|
|
208
228
|
"""
|
|
209
229
|
print_debug(f'QSYNC: get操作被调用{name}')
|
|
210
230
|
if name == 'Status':
|
|
@@ -250,11 +270,11 @@ class Driver(BaseDriver):
|
|
|
250
270
|
self._send_command(data)
|
|
251
271
|
|
|
252
272
|
def _sendto_device(self, cmd_head, timeout=2):
|
|
253
|
-
"""
|
|
273
|
+
"""!
|
|
254
274
|
将指令发送给设备
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
275
|
+
@param cmd_head:
|
|
276
|
+
@param timeout:
|
|
277
|
+
@return:
|
|
258
278
|
"""
|
|
259
279
|
cmd_data = self.__fmt_qsync_common(cmd_head)
|
|
260
280
|
devices = list(self.device_set)
|
|
@@ -283,11 +303,11 @@ class Driver(BaseDriver):
|
|
|
283
303
|
return result
|
|
284
304
|
|
|
285
305
|
def _sendto_qsync(self, cmd_head: int):
|
|
286
|
-
"""
|
|
306
|
+
"""!
|
|
287
307
|
将指令发送给qsync
|
|
288
308
|
|
|
289
|
-
|
|
290
|
-
|
|
309
|
+
@param cmd_head:
|
|
310
|
+
@return:
|
|
291
311
|
"""
|
|
292
312
|
cmd_data = self.__fmt_qsync_common(cmd_head)
|
|
293
313
|
if not self._send_command(cmd_data, connect_timeout=2):
|
|
@@ -296,12 +316,12 @@ class Driver(BaseDriver):
|
|
|
296
316
|
return True
|
|
297
317
|
|
|
298
318
|
def update_firmware(self, file_path, boards=None):
|
|
299
|
-
"""
|
|
319
|
+
"""!
|
|
300
320
|
固件更新
|
|
301
321
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
322
|
+
@param file_path: 固件路径
|
|
323
|
+
@param boards:
|
|
324
|
+
@return:
|
|
305
325
|
"""
|
|
306
326
|
import os
|
|
307
327
|
if not os.path.exists(file_path):
|
|
@@ -312,12 +332,12 @@ class Driver(BaseDriver):
|
|
|
312
332
|
print(f'qsync: 固件更新 执行失败')
|
|
313
333
|
|
|
314
334
|
def _connect(self, addr=None, port=5001, timeout=None):
|
|
315
|
-
"""
|
|
335
|
+
"""!
|
|
316
336
|
获取到指定ip的tcp连接
|
|
317
337
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
338
|
+
@param addr:
|
|
339
|
+
@param port:
|
|
340
|
+
@return:
|
|
321
341
|
"""
|
|
322
342
|
timeout = self.timeout if timeout is None else timeout
|
|
323
343
|
addr = self.addr if addr is None else addr
|
|
@@ -329,15 +349,16 @@ class Driver(BaseDriver):
|
|
|
329
349
|
@retry(3)
|
|
330
350
|
def _send_command(self, data: Union[str, bytes], wait=0, addr=None, port=5001,
|
|
331
351
|
check_feedback=True, return_fdk=False, connect_timeout=10):
|
|
332
|
-
"""
|
|
352
|
+
"""!
|
|
333
353
|
发送指定内容到后端
|
|
334
354
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
:
|
|
355
|
+
@param data: 指令内容
|
|
356
|
+
@param wait: 指令发送完成后,等待一段时间再接收反馈,阻塞式等待
|
|
357
|
+
@param addr: 后端IP
|
|
358
|
+
@param port: 后端端口
|
|
359
|
+
@param check_feedback: 是否解析反馈
|
|
360
|
+
@param connect_timeout:
|
|
361
|
+
@return:
|
|
341
362
|
"""
|
|
342
363
|
command_bak = data
|
|
343
364
|
try:
|
|
@@ -400,15 +421,17 @@ class Driver(BaseDriver):
|
|
|
400
421
|
return struct.pack('=' + 'I' * len(cmd_pack), *cmd_pack)
|
|
401
422
|
|
|
402
423
|
@lru_cache(maxsize=32)
|
|
403
|
-
def __fmt_qsync_start(self, src, period, shots):
|
|
424
|
+
def __fmt_qsync_start(self, src, period, shots, width, delay):
|
|
404
425
|
cmd_pack = (
|
|
405
426
|
0x5F5F5F5F,
|
|
406
427
|
0x41000001,
|
|
407
428
|
0x00000000,
|
|
408
|
-
|
|
429
|
+
36,
|
|
409
430
|
int(src),
|
|
410
431
|
int(period * 1e9) & 0xFFFFFFFF,
|
|
411
|
-
int(shots)
|
|
432
|
+
int(shots),
|
|
433
|
+
int(width * 1e9) & 0xFFFFFFFF,
|
|
434
|
+
int(delay * 1e9) & 0xFFFFFFFF
|
|
412
435
|
)
|
|
413
436
|
|
|
414
437
|
return struct.pack('=' + 'I' * len(cmd_pack), *cmd_pack)
|
|
@@ -433,10 +456,12 @@ class Driver(BaseDriver):
|
|
|
433
456
|
self.set('TrigPeriod', 1 / rate)
|
|
434
457
|
self.set('GenerateTrig')
|
|
435
458
|
|
|
436
|
-
def BurstMode_init(self, count=2048, delay=200e-6, period=200e-6, **kwds):
|
|
459
|
+
def BurstMode_init(self, count=2048, delay=200e-6, period=200e-6, source=0, **kwds):
|
|
437
460
|
self.set('ResetTrig')
|
|
438
461
|
self.set('Shot', count)
|
|
439
462
|
self.set('TrigPeriod', period)
|
|
463
|
+
self.set('TrigDelay', delay)
|
|
464
|
+
self.set('TrigFrom', source)
|
|
440
465
|
|
|
441
466
|
def startGun(self):
|
|
442
467
|
self.Trigger_singleshot()
|
|
@@ -479,8 +504,8 @@ def do_scanning():
|
|
|
479
504
|
|
|
480
505
|
|
|
481
506
|
class DeviceCmdHandle:
|
|
482
|
-
"""
|
|
483
|
-
封装与QC/QR设备间的交互
|
|
507
|
+
"""!
|
|
508
|
+
@brief 封装与QC/QR设备间的交互
|
|
484
509
|
"""
|
|
485
510
|
error_map = {b'\x1a\x00\x001': {1: '指令Resync执行失败',
|
|
486
511
|
2: 'REFCLK not Detected',
|
|
@@ -541,17 +566,17 @@ class DeviceCmdHandle:
|
|
|
541
566
|
@classmethod
|
|
542
567
|
def send_command(cls, data: Union[str, bytes], wait=0, addr=None, port=5001,
|
|
543
568
|
check_feedback=True, return_fdk=False, connect_timeout=None):
|
|
544
|
-
"""
|
|
569
|
+
"""!
|
|
545
570
|
发送指定内容到后端
|
|
546
571
|
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
572
|
+
@param data: 指令内容
|
|
573
|
+
@param wait: 指令发送完成后,等待一段时间再接收反馈,阻塞式等待
|
|
574
|
+
@param addr: 后端IP
|
|
575
|
+
@param port: 后端端口
|
|
576
|
+
@param check_feedback:
|
|
577
|
+
@param return_fdk:
|
|
578
|
+
@param connect_timeout:
|
|
579
|
+
@return:
|
|
555
580
|
"""
|
|
556
581
|
command_bak = data
|
|
557
582
|
try:
|
nsqdriver/__init__.py
CHANGED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from nsqdriver import MCIDriver, QSYNCDriver
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class _XYChannel:
|
|
6
|
+
def __init__(self, mci: "DeviceBase", ch=1):
|
|
7
|
+
self.mci = mci
|
|
8
|
+
self.ch = ch
|
|
9
|
+
self.to_zero = np.zeros((16,))
|
|
10
|
+
self.to_one = np.ones((16,))
|
|
11
|
+
self.en = True
|
|
12
|
+
self.mode = 0
|
|
13
|
+
self.off = 0
|
|
14
|
+
|
|
15
|
+
def wave(self, w):
|
|
16
|
+
self.wavex(w, self.ch)
|
|
17
|
+
|
|
18
|
+
def wavex(self, w, idx):
|
|
19
|
+
if np.max(np.abs(w)) < 1e-30:
|
|
20
|
+
wr = np.zeros(16)
|
|
21
|
+
else:
|
|
22
|
+
wr = w
|
|
23
|
+
self.mci.mci_driver.set("Waveform", wr, idx)
|
|
24
|
+
|
|
25
|
+
def arm(self, k=None):
|
|
26
|
+
self.mci.mci_driver.set('PushWaveCache')
|
|
27
|
+
|
|
28
|
+
def trig_del(self, delay):
|
|
29
|
+
...
|
|
30
|
+
|
|
31
|
+
def output_del(self, delay):
|
|
32
|
+
...
|
|
33
|
+
|
|
34
|
+
def __del__(self):
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
def output(self, b):
|
|
38
|
+
self.en = bool(b)
|
|
39
|
+
if not self.en:
|
|
40
|
+
self.mci.mci_driver.set("Waveform", self.to_zero, self.ch)
|
|
41
|
+
|
|
42
|
+
def mode(self, m_):
|
|
43
|
+
...
|
|
44
|
+
|
|
45
|
+
def offsetx(self, off, idx):
|
|
46
|
+
self.mci.mci_driver.set('Waveform', off*self.to_one, idx)
|
|
47
|
+
self.off = off
|
|
48
|
+
|
|
49
|
+
def offset(self, off):
|
|
50
|
+
self.offsetx(off, self.ch)
|
|
51
|
+
|
|
52
|
+
W = {
|
|
53
|
+
"wave": wave,
|
|
54
|
+
"output": output,
|
|
55
|
+
"trig_del": trig_del,
|
|
56
|
+
"output_del": output_del,
|
|
57
|
+
"mode": mode,
|
|
58
|
+
"offset": offset,
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
Q = {"arm": arm}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class _ZChannel(_XYChannel):
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class _Probe:
|
|
69
|
+
def __init__(self, mci: "DeviceBase", ch=1):
|
|
70
|
+
self.mci = mci
|
|
71
|
+
self.ch = ch
|
|
72
|
+
self.freqList = []
|
|
73
|
+
self.SGS = None # single shot temp cache
|
|
74
|
+
self.AVG = None # average temp cache
|
|
75
|
+
self.depth = 2000
|
|
76
|
+
self._width = 1000
|
|
77
|
+
self.start = 500
|
|
78
|
+
self.demod = 1
|
|
79
|
+
self.averaged_I = np.zeros((16384, )) # 直播直采,相当于只有I路数据
|
|
80
|
+
|
|
81
|
+
def depth(self, depth_):
|
|
82
|
+
self.depth = depth_
|
|
83
|
+
self.mci.mci_driver.set('PointNumber', depth_, self.ch)
|
|
84
|
+
|
|
85
|
+
def demodulation_on(self, demod_):
|
|
86
|
+
self.demod = int(demod_)
|
|
87
|
+
|
|
88
|
+
def start(self, start_):
|
|
89
|
+
self.start = start_
|
|
90
|
+
self.mci.mci_driver.set('TriggerDelay', start_, self.ch)
|
|
91
|
+
|
|
92
|
+
def width(self, width_):
|
|
93
|
+
self._width = width_/4e9
|
|
94
|
+
self.mci.mci_driver.set('PointNumber', width_, self.ch)
|
|
95
|
+
|
|
96
|
+
def freqs(self, *freqList_):
|
|
97
|
+
self.freqList = freqList_
|
|
98
|
+
self.mci.mci_driver.set('FreqList', freqList_, self.ch)
|
|
99
|
+
|
|
100
|
+
def shot(self, _shot):
|
|
101
|
+
self.mci.mci_driver.set('Shot', _shot)
|
|
102
|
+
|
|
103
|
+
def measure(self, k=None):
|
|
104
|
+
self.mci.mci_driver.set('StartCapture')
|
|
105
|
+
if self.demod:
|
|
106
|
+
self.SGS = self.mci.mci_driver.get('IQ', self.ch)
|
|
107
|
+
self.AVG = np.mean(self.SGS, axis=0)
|
|
108
|
+
else:
|
|
109
|
+
self.averaged_I = np.mean(self.mci.mci_driver.get('TraceIQ', self.ch), axis=0)
|
|
110
|
+
|
|
111
|
+
def single_shot(self, k=None):
|
|
112
|
+
return self.SGS
|
|
113
|
+
|
|
114
|
+
def average(self, k=None):
|
|
115
|
+
return self.AVG
|
|
116
|
+
|
|
117
|
+
def trace_I(self, k=None):
|
|
118
|
+
return self.averaged_I
|
|
119
|
+
|
|
120
|
+
def trace_Q(self, k=None):
|
|
121
|
+
return self.averaged_I
|
|
122
|
+
|
|
123
|
+
def __del__(self):
|
|
124
|
+
pass
|
|
125
|
+
|
|
126
|
+
W = {
|
|
127
|
+
"demod": demodulation_on,
|
|
128
|
+
"depth": depth,
|
|
129
|
+
"width": width,
|
|
130
|
+
"start": start,
|
|
131
|
+
"freqs": freqs,
|
|
132
|
+
"shot": shot,
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
Q = {
|
|
136
|
+
"measure": measure,
|
|
137
|
+
"A": average,
|
|
138
|
+
"S": single_shot,
|
|
139
|
+
"traceI": trace_I,
|
|
140
|
+
"traceQ": trace_Q
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
# one box need one class
|
|
145
|
+
class DeviceBase:
|
|
146
|
+
def __init__(self):
|
|
147
|
+
self.mci_driver = MCIDriver('127.0.0.1')
|
|
148
|
+
self.qsync_driver = QSYNCDriver('127.0.0.1')
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class NS_MCI(DeviceBase):
|
|
152
|
+
def __init__(self, addr, srate=10e9, mixmode=2, ref_clk='in'):
|
|
153
|
+
"""!
|
|
154
|
+
此类涉及到系统同步,放到最后实例化
|
|
155
|
+
@param addr: 设备ip
|
|
156
|
+
@param srate: OUT通道采样率
|
|
157
|
+
@param mixmode: 为2时开启OUT通道混合模式,增强第二奈奎斯特区输出
|
|
158
|
+
@param ref_clk: 设备参考信号来源,不接外输出100M时都配置为'in'
|
|
159
|
+
"""
|
|
160
|
+
super(NS_MCI, self).__init__()
|
|
161
|
+
self.mci_driver = MCIDriver(addr)
|
|
162
|
+
self.qsync = QSYNCDriver(addr)
|
|
163
|
+
self.srate = srate
|
|
164
|
+
self.mixmode = mixmode
|
|
165
|
+
self.ref_clk = ref_clk
|
|
166
|
+
self.connect()
|
|
167
|
+
|
|
168
|
+
def connect(self):
|
|
169
|
+
mci_params = {'DArate': self.srate, 'MixMode': self.mixmode}
|
|
170
|
+
qsync_params = {'RefClock': self.ref_clk}
|
|
171
|
+
|
|
172
|
+
self.qsync.open(system_parameter=qsync_params)
|
|
173
|
+
self.mci_driver.open(system_parameter=mci_params)
|
|
174
|
+
self.qsync.sync_system()
|
|
175
|
+
|
|
176
|
+
self.mci_driver.set('EnableWaveCache', True)
|
|
177
|
+
|
|
178
|
+
for _ch in range(22):
|
|
179
|
+
xy_ch = _ch+1
|
|
180
|
+
setattr(self, f'OUT{xy_ch}', _XYChannel(self, xy_ch))
|
|
181
|
+
for _ch in range(2):
|
|
182
|
+
probe_ch = _ch+1
|
|
183
|
+
setattr(self, f'IN{probe_ch}', _Probe(self, probe_ch))
|
|
184
|
+
|
|
185
|
+
def trig_interval(self, interval):
|
|
186
|
+
self.interval = interval
|
|
187
|
+
self.qsync.set('TrigPeriod', int(interval))
|
|
188
|
+
|
|
189
|
+
def trig_count(self, count_):
|
|
190
|
+
self.qsync.set('Shot', int(count_))
|
|
191
|
+
|
|
192
|
+
def trig(self):
|
|
193
|
+
self.qsync.set('GenerateTrig', self.interval)
|
|
194
|
+
|
|
195
|
+
def awg_arm(self):
|
|
196
|
+
self.mci_driver.set('PushWaveCache')
|
|
197
|
+
|
|
198
|
+
def __del__(self):
|
|
199
|
+
pass
|
|
200
|
+
|
|
201
|
+
W = {
|
|
202
|
+
"trig_interval": trig_interval,
|
|
203
|
+
"trig_count": trig_count,
|
|
204
|
+
"connect": connect,
|
|
205
|
+
"trig": trig,
|
|
206
|
+
"awg_arm": awg_arm,
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
Q = {
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
class NS_Z(DeviceBase):
|
|
214
|
+
def __init__(self, addr, mixmode=2):
|
|
215
|
+
"""!
|
|
216
|
+
此类负责控制24 Z OUT通道的设备,采样率固定为2Gsps,mixmode固定为1
|
|
217
|
+
@param addr: 设备ip
|
|
218
|
+
@param mixmode: 为1时关闭OUT通道混合模式
|
|
219
|
+
"""
|
|
220
|
+
super(NS_Z, self).__init__()
|
|
221
|
+
self.mci_driver = MCIDriver(addr)
|
|
222
|
+
self.qsync = QSYNCDriver(addr)
|
|
223
|
+
self.srate = 2e9
|
|
224
|
+
self.mixmode = 1
|
|
225
|
+
self.connect()
|
|
226
|
+
|
|
227
|
+
def connect(self):
|
|
228
|
+
mci_params = {'DArate': self.srate, 'MixMode': self.mixmode}
|
|
229
|
+
self.mci_driver.open(system_parameter=mci_params)
|
|
230
|
+
|
|
231
|
+
self.mci_driver.set('EnableWaveCache', True)
|
|
232
|
+
|
|
233
|
+
for _ch in range(24):
|
|
234
|
+
xy_ch = _ch+1
|
|
235
|
+
setattr(self, f'OUT{xy_ch}', _ZChannel(self, xy_ch))
|
|
236
|
+
|
|
237
|
+
def awg_arm(self):
|
|
238
|
+
self.mci_driver.set('PushWaveCache')
|
|
239
|
+
|
|
240
|
+
W = {
|
|
241
|
+
"connect": connect,
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
Q = {
|
|
245
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
nsqdriver/NS_MCI.py,sha256=42w7Oj15Nq7bG4oZnyXUD2dDFyqsKA4rpaQDAIXQ5h0,19233
|
|
2
|
+
nsqdriver/NS_QSYNC.py,sha256=P5BDiTz7hu6omwFnjGfGXfnzAoBfrvGYAYLTT45RoOc,22747
|
|
3
|
+
nsqdriver/__init__.py,sha256=cBgsySikxDbYiCaL6hMnLaDQcRKzP6nkL0cPXwpajOo,218
|
|
4
|
+
nsqdriver/common.py,sha256=IHfShqgNN3THbe7KD7ICdfFY7JKC_kQj0_KJk-449gQ,499
|
|
5
|
+
nsqdriver/setup.py,sha256=4ajKQtY4hr2240f5sA81f66_92Yp_wG6gPM-zsOWq9M,390
|
|
6
|
+
nsqdriver/wrapper/AWG_ADC.py,sha256=8K5xLEa_3CKnStWcoJeTj8ufEQfrx6o4l4XGNuOP3Ug,19211
|
|
7
|
+
nsqdriver/wrapper/ND_NSMCI.py,sha256=gTyrDObhbggl35V_q-kpDoPsfttIEnDFc6f0-pk_P0k,6288
|
|
8
|
+
nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
nsqdriver-0.2.5.dist-info/METADATA,sha256=bt2XXWj4XGSbXAZeWO8hqQq6WMUgSSGceaeFjVQ2x8g,596
|
|
10
|
+
nsqdriver-0.2.5.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
|
11
|
+
nsqdriver-0.2.5.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
|
|
12
|
+
nsqdriver-0.2.5.dist-info/RECORD,,
|
nsqdriver-0.2.3.dist-info/RECORD
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
nsqdriver/NS_MCI.py,sha256=9UhDyEdnoe2pLXzOMqZqHBbwLlY9Vtv572fnet5il-I,19227
|
|
2
|
-
nsqdriver/NS_QSYNC.py,sha256=9LsT-O3asvpDno8W9y7fVyA5MKRsO79H1UEqIPGOKsc,21753
|
|
3
|
-
nsqdriver/__init__.py,sha256=ryKIcb2l_iw4KrhuWU_dTmoCp9hLRm3d2XzagEdH8zU,218
|
|
4
|
-
nsqdriver/common.py,sha256=IHfShqgNN3THbe7KD7ICdfFY7JKC_kQj0_KJk-449gQ,499
|
|
5
|
-
nsqdriver/setup.py,sha256=4ajKQtY4hr2240f5sA81f66_92Yp_wG6gPM-zsOWq9M,390
|
|
6
|
-
nsqdriver/wrapper/AWG_ADC.py,sha256=8K5xLEa_3CKnStWcoJeTj8ufEQfrx6o4l4XGNuOP3Ug,19211
|
|
7
|
-
nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
nsqdriver-0.2.3.dist-info/METADATA,sha256=6nAvOX7mK5ys-BFn_GkAtJAjzLIdWxOoyLxJgM20X7I,596
|
|
9
|
-
nsqdriver-0.2.3.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
|
10
|
-
nsqdriver-0.2.3.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
|
|
11
|
-
nsqdriver-0.2.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|