QUBIT-Driver 1.2.0__tar.gz → 1.2.2__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: QUBIT_Driver
3
- Version: 1.2.0
3
+ Version: 1.2.2
4
4
  Summary: Drive adapted for the quantum control system of the CeYear 1U Qubit_Driver Institute
5
5
  Home-page:
6
6
  Author: He Guo Yang
@@ -41,5 +41,9 @@ $ pip install QUBIT_Driver
41
41
 
42
42
  ### License
43
43
  ## Update log
44
- '1.2.0' first release
44
+ ### 1.2.2
45
+ - 修改设备名称与驱动文件名称
46
+ ### 1.2.1
47
+ - 新增耦合波形发生器驱动功能CY_8DA.py文件
48
+ ###'1.2.0' first release
45
49
  [MIT]
@@ -3,12 +3,12 @@ import socket
3
3
  import time
4
4
 
5
5
  class CYDA10Driver:
6
- support_models = ['CY_10DA']
6
+ support_models = ['CY_10ReadJili']
7
7
 
8
8
 
9
9
  def __init__(self, addr, **kw):
10
10
  self.addr = addr
11
- self.model = 'CY_10DA'
11
+ self.model = 'CY_10ReadJili'
12
12
  self.srate = 10e9
13
13
 
14
14
  def open(self):
@@ -9,7 +9,7 @@ class CYDA6Driver:
9
9
 
10
10
  def __init__(self, addr, **kw):
11
11
  self.addr = addr
12
- self.model = 'CY_6DA'
12
+ self.model = 'CY_6XY'
13
13
  self.srate = 6e9
14
14
 
15
15
  def open(self):
@@ -3,12 +3,12 @@ import socket
3
3
  import time
4
4
 
5
5
  class CYDADCDriver:
6
- support_models = ['CY_6DADC']
6
+ support_models = ['CY_6Z']
7
7
 
8
8
 
9
9
  def __init__(self, addr, **kw):
10
10
  self.addr = addr
11
- self.model = 'CY_6DADC'
11
+ self.model = 'CY_6Z'
12
12
  self.srate = 6e9
13
13
 
14
14
  def open(self):
@@ -0,0 +1,211 @@
1
+ import numpy as np
2
+ import socket
3
+ import time
4
+
5
+
6
+ class CYDA8Driver:
7
+ support_models = ['CY_8Couple']
8
+
9
+
10
+ def __init__(self, addr, **kw):
11
+ self.addr = addr
12
+ self.model = 'CY_8Couple'
13
+ self.srate = 6e9
14
+
15
+ def open(self):
16
+ #建立连接
17
+ self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
18
+ self.sock.connect((self.addr, 4196))
19
+ # self.sock.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY,1)
20
+ self.sock.settimeout(10)
21
+ #复位
22
+ self.sock_query('*RST')
23
+
24
+ #设置奈奎斯特区间为2区
25
+ self.set(':AWG:NYZONE',2)
26
+ #幅度校准加载
27
+ self.set(':AWG:WORK:VOLT?')
28
+
29
+ self.CAWEn = 0 # 0: 任意波, 1: 载波
30
+ self.CycleSeq = 1 # 1: 单次播放, 0: 循环播放
31
+
32
+
33
+ def close(self, **kw):
34
+ self.sock.close()
35
+
36
+ def write(self, name: str, value, **kw):
37
+ ch = kw.get('ch', 9)
38
+
39
+ if name in ['TriggerDelayAWG',]:
40
+ self.rd_Delay(ch, value)
41
+ elif name in ['rdAtt',]:
42
+ self.rd_Att(ch, value)
43
+ elif name in ['Waveform']:
44
+ self.download_AWG_waveData(value,ch)
45
+ elif name in ['CAWWave',]:
46
+ self.Generate_Caw_Wave(value,ch)
47
+ elif name in ['Nyzone']:
48
+ self.set('::AWG:NYZONE',value)
49
+ elif name in ['FeedBack']:
50
+ self.set(':AWG:FEEDB', value) # 1 开启 0 关闭
51
+ elif name in ['CAWEn']:
52
+ """ 1: 载波
53
+ 0: 任意波
54
+ """
55
+ assert value in [0, 1], f'CAWEn can only be 0 or 1!'
56
+ self.CAWEn = value
57
+ elif name in ['CycleSeq']:
58
+ """ 1: 单次播放
59
+ 0: 循环播放
60
+ """
61
+ assert value in [0, 1], f'CycleSeq can only be 0 or 1!'
62
+ self.CycleSeq = value
63
+ else:
64
+ pass
65
+
66
+
67
+ # *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# user defined #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
68
+
69
+ def set(self, cmd_name, params = None):
70
+ """
71
+ 发送带参数的程控指令
72
+ :param sock: 已连接的socket对象
73
+ :param cmd_name: 指令名称(如"SET_FREQ")
74
+ :param params: 可变参数(如频率值、通道号等)
75
+ """
76
+
77
+ # 1. 拼接指令字符串(例如:"SET_FREQ,100000 1;" 表示设置通道1的频率为100000Hz)
78
+ if params != None:
79
+ # param_str = ",".join(map(str, params)) # 将参数转换为字符串并拼接
80
+ param_str = str(params)
81
+ cmd_str = f"{cmd_name} {param_str}\n" # 组合成完整指令(带结束符)
82
+ else:
83
+ cmd_str = f"{cmd_name}\n" # 组合成完整指令(带结束符)
84
+ # 2. 转换为字节流(socket传输必须是bytes类型)
85
+ cmd_bytes = cmd_str.encode('utf-8')
86
+ # 3. 发送指令
87
+ self.sock.sendall(cmd_bytes)
88
+ # print(f"已发送指令:{cmd_str}")
89
+
90
+ def sock_read(self,buffer_size=1024):
91
+ response = b''
92
+ while True:
93
+ chunk = self.sock.recv(buffer_size)
94
+ if not chunk:
95
+ break # 连接关闭
96
+ response += chunk
97
+ if b'\n' in chunk:
98
+ break # 达到结束标志
99
+ return response.strip()
100
+
101
+ def sock_query(self, cmd_name,params = None):
102
+ self.set( cmd_name, params)
103
+ return self.sock_read()
104
+
105
+
106
+ ##########################################################################################################
107
+ def ChlSel(self,chl,name = ':AWG:CHLSel'):
108
+ chl = chl -1
109
+ self.set(name,chl)
110
+
111
+ def rd_Delay(self, chl, delay_ns):
112
+ self.ChlSel(chl)
113
+ self.set(':READ:DELay',delay_ns)
114
+ return
115
+ def rd_Att(self, chl, att):
116
+ self.ChlSel( chl)
117
+ self.set(':READ:ATT',att)
118
+ return
119
+ def Generate_Caw_Wave(self,value,ch):
120
+ self.ChlSel(ch)
121
+ self.set(':CAW:FREQ',value[0])
122
+ self.set(':CAW:PHAS',value[1])
123
+ self.set(':CAW:ONLY',1)
124
+ #############确定波形数据长度位宽#########################
125
+ def digit_count(num):
126
+ len = 0
127
+ if num == 0:
128
+ return 1
129
+ else:
130
+ while(num != 0):
131
+ num = num // 10
132
+ len = len + 1
133
+ return len
134
+ #########################下发任意波数据#################################################
135
+ # ------------------------------------------------------------------------
136
+ # 功能说明: 【载波】 *用于任意波形数据下发
137
+ # 输入参数:波形数据
138
+ #
139
+ # 返回值: 无
140
+ # ------------------------------------------------------------------------
141
+ def AWG_Data_Download(self,waveData):
142
+ # self.ChlSel(ch)
143
+ #下发波形数据
144
+ len_once = 134000000
145
+ m_Len_bytes = len(waveData)%len_once
146
+ m_Len_count = len(waveData)//len_once
147
+ if m_Len_count != 0:
148
+ for k in range(m_Len_count):
149
+ dataSend = b':AWG:WRITe #9134000000'+waveData[134000000*k:134000000*(k+1)]
150
+ self.sock.sendall(dataSend)
151
+ self.sock_read()
152
+ if m_Len_bytes != 0:
153
+ digit_len = self.digit_count(m_Len_bytes)
154
+ dataSend = b':AWG:WRITe #'+str(digit_len).encode('utf-8')+\
155
+ str(m_Len_bytes).encode('utf-8')+\
156
+ waveData[m_Len_count*134000000:m_Len_count*134000000+m_Len_bytes]
157
+ self.sock.sendall(dataSend)
158
+ self.sock_read()
159
+ return
160
+ # ------------------------------------------------------------------------
161
+ # 功能说明: 量化float数据 并转bytes 【用于转换任意波形数据】
162
+ # 输入参数:
163
+ # data:【数据类型: ndarray或list】
164
+ # 【取值范围: 0~1】
165
+ # 【参数意义: 待处理的float数据数组或列表】
166
+ # 输出参数:
167
+ # data_bytes:【数据类型: bytes】
168
+ # 【数据说明: 每16位为一组, 范围: 0~0xFFFF, 低14位有效】
169
+ # 【参数意义: 转换后的生成的bytes数据】
170
+ # 返回值: data_bytes
171
+ # ------------------------------------------------------------------------
172
+ def float2bytes(self,data):
173
+ # 如果为list格式,则转为array进行处理
174
+ if isinstance(data,list):
175
+ data = np.array(data).reshape(1,-1)
176
+ else:
177
+ # 转换为1维数组
178
+ data = data.reshape(1,-1)
179
+
180
+ len_data = np.size(data)
181
+ # 是否为偶数个元素,如果不是,补1个0
182
+ if len_data % 2 != 0:
183
+ np.append(data,0)
184
+ len_data = len_data +1
185
+ # -------- 元素两个一组,每组前后对调 -----------------
186
+ data_uint16 = np.uint16(data*(pow(2,15)-1))
187
+ #####################
188
+ # data_uint16 = np.bitwise_or(data_uint16,1)
189
+ ##################
190
+ data_bytes = data_uint16.tobytes()
191
+ return data_bytes
192
+
193
+
194
+ def download_AWG_waveData(self,data,ch=9):
195
+ data_bytes = self.float2bytes(np.array(data).reshape(-1,1))
196
+ #波形模块使能复位
197
+ self.ChlSel(ch)
198
+ self.set(':AWG:BDOWnlclear')
199
+ #波形下发与控制
200
+ self.AWG_Data_Download(data_bytes)
201
+ #设置任意波模式
202
+ self.set(':CAW:ONLY', self.CAWEn)
203
+ #设置为单次博放
204
+ self.set(':AWG:SEQNUM', self.CycleSeq)
205
+ #通道输出打开
206
+ self.ChlSel(ch)
207
+ self.set(':AWG:SWITCH','ON')
208
+ # #外触发
209
+ # self.set(':TRIG:TYPE',0)
210
+ # #触发模式:波形触发模式
211
+ # self.set(':TRIG:CTRL',2)
@@ -0,0 +1 @@
1
+ __version__ = "1.2.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: QUBIT_Driver
3
- Version: 1.2.0
3
+ Version: 1.2.2
4
4
  Summary: Drive adapted for the quantum control system of the CeYear 1U Qubit_Driver Institute
5
5
  Home-page:
6
6
  Author: He Guo Yang
@@ -41,5 +41,9 @@ $ pip install QUBIT_Driver
41
41
 
42
42
  ### License
43
43
  ## Update log
44
- '1.2.0' first release
44
+ ### 1.2.2
45
+ - 修改设备名称与驱动文件名称
46
+ ### 1.2.1
47
+ - 新增耦合波形发生器驱动功能CY_8DA.py文件
48
+ ###'1.2.0' first release
45
49
  [MIT]
@@ -1,9 +1,10 @@
1
1
  LICENSE
2
2
  README.md
3
3
  setup.py
4
- QUBIT_Driver/CY_10DA.py
5
- QUBIT_Driver/CY_6DA.py
6
- QUBIT_Driver/CY_6DADC.py
4
+ QUBIT_Driver/CY_10ReadJili.py
5
+ QUBIT_Driver/CY_6XY.py
6
+ QUBIT_Driver/CY_6Z.py
7
+ QUBIT_Driver/CY_8Couple.py
7
8
  QUBIT_Driver/CY_AD.py
8
9
  QUBIT_Driver/CY_SYNC.py
9
10
  QUBIT_Driver/__init__.py
@@ -15,5 +15,9 @@ $ pip install QUBIT_Driver
15
15
 
16
16
  ### License
17
17
  ## Update log
18
- '1.2.0' first release
18
+ ### 1.2.2
19
+ - 修改设备名称与驱动文件名称
20
+ ### 1.2.1
21
+ - 新增耦合波形发生器驱动功能CY_8DA.py文件
22
+ ###'1.2.0' first release
19
23
  [MIT]
@@ -5,7 +5,7 @@ with open("README.md", "r",encoding="utf-8") as fh:
5
5
 
6
6
  setuptools.setup(
7
7
  name="QUBIT_Driver",
8
- version="1.2.0",
8
+ version="1.2.2",
9
9
  author="He Guo Yang",
10
10
  author_email="2060817247@qq.com",
11
11
  description="Drive adapted for the quantum control system of the CeYear 1U Qubit_Driver Institute",
@@ -1 +0,0 @@
1
- __version__ = "1.1.0"
File without changes
File without changes