连接 BK-880 LCR 表的 USB 接口;我希望我问过的问题...... 这些仪表是将 LCR 数据读取到我正在构建的测试站中的一种相当便宜的方法。 但界面很挑剔。 因此,将此视为通过痛苦经历学到的(未记录的)事情的报告。 代码并不引人注目,但这不是重点。 我希望这对某人有帮助。
设置测量模式。 可用的测量模式['L'、'C'、'R'、'Z'、'DCR']必须依次循环,不能只设置你想要的一个。 模式必须是大写字符,如上所述。 仪表显示可能会立即改变,但在新模式下实际响应数据可能需要 10 到 12 秒。
def get_Mode(self):
presentMode = ()
while not (presentMode in MEASURES): #Bogus value ('000e+00', None), wait and retry
presentMode = self.LCR_Conn.sendcmd('FUNCtion:impa?') #LCR_Conn is the port to the meter
# self.LCR_Conn.sendcmd('FUNCtion:impa?') => current mode (such as 'C'). Sometimes there is a bogus value, ('000e+00', None).
sleep(0.1)
return presentMode
def set_Mode(self, desiredMode):
# Find current mode at start (query until the current setting reads back)
# If the setting is not the desired one, go to next mode in sequence (wrapping to go backwards).
# Sending a mode request out of sequence causes "E12" and you have to power cycle the meter to recover.
Modes = MEASURES # Legal modes: MEASURES = ['L', 'C', 'R', 'Z','DCR']
presentMode = self.get_Mode() #check at beginning if mode is OK (doubtful)
if presentMode == desiredMode:
return presentMode
# align Modes list with current status
while presentMode != Modes[0]:
Modes.append(Modes.pop(0))
# sequence through Modes on meter
for i in range(len(Modes)):
presentMode = self.get_Mode()
if presentMode == desiredMode:
return presentMode
else:
self.LCR_Conn.sendcmd('FUNCtion:impa {0}'.format(Modes[i+1].upper()))
阅读。必须检查数据是否无意义。 由于结果应该是数字,
对它们进行数学计算是一个很好的质量检查。
似乎没有任何方法可以握手数据读取。 无论何时,如果您尝试阅读,它都会更新,无论是否会发生错误,都是运气。 有时,远程读数会锁定仪表,您必须重新启动它。
def get_data(self): # Fetch 1x, rely on timing to let meter settle
sleep(1.5) #Meter is set to slow measurement rate, 1.5 samples/second.
data = self.LCR_Conn.fetch()[0] #return is three items, only want the first
try:
foo = data * 12.34 #any math operation to complain when data is NAN
except(TypeError):
data = -1
raise self.LCR_Exception()
except(IndexError):
data = -1
raise self.LCR_Exception()
return data
通信。 即使仪表关闭(USB 部分保持供电),端口也可能保持打开状态。 这会让事情变得混乱,需要重置。 假设 LCR 正在远程加电 模式(这是可配置的)。
def LCR_reset(self):
""" Things may be confused after power cycle. Close and reopen port. """
try:
self.close_port()
except AttributeError: #There is no port
sleep(0)
else:
sleep(1)
try:
self.open_port() #not a sufficient test
self.get_data() #go read numbers
return(True)
except AttributeError: #port is bad. COM# may have changed
print("LCR's USB port ID is invalid")
return(False)
except: # The port is there but we can't get any data
print('LCR meter is not connected, on, and set to USB')
return(False)
USB 端口 ID。
USB 设备返回 OEM 设置的元数据。 BK 这里人口不多,这很有帮助。 port.vid 编号为 4292。这实际上与 USB 收发器芯片相关,该芯片也用于其他类型的设备。 如果您只有一个这样的设备,它可以自动识别仪表。 否则,您必须依赖 USB 集线器上的物理地址。
参数设置。 不要为不使用频率、电压等的模式设置它们,否则会导致错误。
仪表默认值: 仪表可以设置为以特定的测量模式、采样率和预期开机 远程控制(即 USB)。