Python实现 通过RS232 SCPI 命令控制Tektronix DMM4050@TOC
import serial
import matplotlib.pyplot as plt
import time
def test_connect(ser): ##连接检查
ser.write("*IDN?\n".encode())
msg = ser.read(42)
print(msg.decode())
def meter_read(ser): ##读取测量数据
ser.write(“READ?\n”.encode())
buff = ser.read(17)
buff = float(buff.decode())
return buff
def left_insert(data,result): ##在数组最左端插入数据
data.pop()
data.insert(0, result)
def init_config():##初始配置
ser = serial.Serial('COM24',9600,bytesize=8,parity="N",stopbits=1) ##串口号:24 波特率:9600
ser.write("*RST\n".encode()) ##复位
ser.write("*CLS\n".encode())
ser.write("SYST:REM\n".encode()) ##使得万用表处于操控模式
ser.write("CONF:VOLT:DC 10,0.0002\n".encode()) ##配置测量,模式 DC直流 10V量程 0.0002分辨率
return ser
def plot_signal(data,time):##画图配置
plt.ion()
plt.clf()
plt.plot(data)
plt.pause(time)
def trig_meas(ser):##触发测量
ser.write(“TRIG:SOUR IMM\n”.encode())
ser.write(“SAMP:COUN 1000\n”.encode())
ser.write(“INIT\n”.encode())
ser.write(“FETC?\n”.encode())
def byte2float(buff):
buff = buff.decode()
buff = buff.replace(’,’, ‘’)
result = float(buff)
return result
def main1():##监测
npoint = 200
data = [0]*npoint
ser = init_config()
test_connect(ser)
print("Start Measure")
while True:
for i in range(npoint):
result = meter_read(ser)
left_insert(data,result)
time.sleep(0.01)
plot_signal(data,0.1)
def main2():##触发
npoint = 1000
data = [0] * npoint
ser = init_config()
test_connect(ser)
trig_meas(ser)
for i in range(npoint):
buff = ser.read(16)
result = byte2float(buff)
data[i] = result
plot_signal(data,1000)
if name == “main”:
main1() #实时监测
#main2() #内部触发