有没有办法将吉时利数字源表的读取电流值传输到我的计算机上?
Is there a way to get the read current values from a Keithley SourceMeter onto my computer?
我正在执行扫描,一切正常!除了当我尝试打印它正在读取的当前值时……它打印的只是我使用的 SPCI 命令的字符数。这是代码:
import pyvisa
import time
import serial
# configure the serial connections (the parameters differs on the device you are connecting to)
ser = serial.Serial()
ser.port = 'COM3'
ser.baudrate = 9600
ser.open()
ser.isOpen
###Sweep
numberofiterations = 10
stepsize = 0.05
voltage = 0
currents = []
voltages = []
ser.write(str.encode('*RST' + '\r\n'))
ser.write(str.encode(':OUTP ON'+'\r\n'))
for iterations in range(numberofiterations):
#record voltage
voltages.append(round(voltage,5))
#supply voltage
ser.write(str.encode(':SOUR:FUNC VOLT'+'\r\n'))
ser.write(str.encode(':SOUR:VOLT:MODE FIX'+'\r\n'))
ser.write(str.encode(':SOUR:VOLT:RANG 20'+'\r\n'))
ser.write(str.encode(':SOUR:VOLT:LEV '+str(voltage)+'\r\n'))
#wait
time.sleep(1)
#measure current
ser.write(str.encode(':SENS:FUNC "CURR"'+'\r\n'))
ser.write(str.encode(':SENS:CURR:PROT 10e-1'+'\r\n'))
ser.write(str.encode(':SENS:CURR:RANG 10e-1'+'\r\n'))
ser.write(str.encode(':SENS:CURR:RANG:AUTO ON'+'\r\n'))
current = ser.write(str.encode(':READ?'+'\r\n')) #measure current
currents.append(current) #record current
#increase voltage
voltage += stepsize
#Print out values
for current in range(len(currents)):
print(currents[current])
for voltage in range(len(voltages)):
print(voltages[voltage])
具体来说,这是弄乱我的代码的行:
current = ser.write(str.encode(':READ?'+'\r\n')) #measure current
为什么电脑测不到电流?当电流显示在屏幕上时,Keithley SourceMeter 正在正确测量它……我只是无法将这些值输入计算机。这里有什么问题?
谢谢!
ser.write
向串口写入字节,并简单地报告写入了多少字节。您需要使用 ser.read
(读取一个字节)或一些辅助函数(您自己的或库提供的)来读取仪器的响应,这些函数可以理解 SCPI 命令的响应格式。
根据this reference, it looks like the SCPI response is delimited with a newline, so you should be able to write a command using ser.write
and then call ser.readline()
读取整行仪器输出,最多一个换行符。当然,您会收到 SCPI 格式的响应,因此您需要解析它以获得您的电路观察结果。
请注意,如果您处于仪器未写入输出的奇怪状态,但您正在 readline
调用中等待响应,您的程序可能会锁定。为串行端口设置超时会有所帮助。我对协议不够熟悉,不知道什么时候会发生。
我正在执行扫描,一切正常!除了当我尝试打印它正在读取的当前值时……它打印的只是我使用的 SPCI 命令的字符数。这是代码:
import pyvisa
import time
import serial
# configure the serial connections (the parameters differs on the device you are connecting to)
ser = serial.Serial()
ser.port = 'COM3'
ser.baudrate = 9600
ser.open()
ser.isOpen
###Sweep
numberofiterations = 10
stepsize = 0.05
voltage = 0
currents = []
voltages = []
ser.write(str.encode('*RST' + '\r\n'))
ser.write(str.encode(':OUTP ON'+'\r\n'))
for iterations in range(numberofiterations):
#record voltage
voltages.append(round(voltage,5))
#supply voltage
ser.write(str.encode(':SOUR:FUNC VOLT'+'\r\n'))
ser.write(str.encode(':SOUR:VOLT:MODE FIX'+'\r\n'))
ser.write(str.encode(':SOUR:VOLT:RANG 20'+'\r\n'))
ser.write(str.encode(':SOUR:VOLT:LEV '+str(voltage)+'\r\n'))
#wait
time.sleep(1)
#measure current
ser.write(str.encode(':SENS:FUNC "CURR"'+'\r\n'))
ser.write(str.encode(':SENS:CURR:PROT 10e-1'+'\r\n'))
ser.write(str.encode(':SENS:CURR:RANG 10e-1'+'\r\n'))
ser.write(str.encode(':SENS:CURR:RANG:AUTO ON'+'\r\n'))
current = ser.write(str.encode(':READ?'+'\r\n')) #measure current
currents.append(current) #record current
#increase voltage
voltage += stepsize
#Print out values
for current in range(len(currents)):
print(currents[current])
for voltage in range(len(voltages)):
print(voltages[voltage])
具体来说,这是弄乱我的代码的行:
current = ser.write(str.encode(':READ?'+'\r\n')) #measure current
为什么电脑测不到电流?当电流显示在屏幕上时,Keithley SourceMeter 正在正确测量它……我只是无法将这些值输入计算机。这里有什么问题?
谢谢!
ser.write
向串口写入字节,并简单地报告写入了多少字节。您需要使用 ser.read
(读取一个字节)或一些辅助函数(您自己的或库提供的)来读取仪器的响应,这些函数可以理解 SCPI 命令的响应格式。
根据this reference, it looks like the SCPI response is delimited with a newline, so you should be able to write a command using ser.write
and then call ser.readline()
读取整行仪器输出,最多一个换行符。当然,您会收到 SCPI 格式的响应,因此您需要解析它以获得您的电路观察结果。
请注意,如果您处于仪器未写入输出的奇怪状态,但您正在 readline
调用中等待响应,您的程序可能会锁定。为串行端口设置超时会有所帮助。我对协议不够熟悉,不知道什么时候会发生。