DM3058 串口读取数据

DM3058串口读取数据功能

 

01 DM3058编程控制


一、前言

  今天到货的 DM3058 数字万用表,  下面准备通过它的 RS232 串口读取其测量数据。  串口管脚是主机配置。 需要通过交叉串口线与计算机的 RS232串口相连。

GM1700647801_1280_720.MPG|_-3

二、测试结果

  在 Python 下编程,  打开对应的串口, 波特率设置为9600 , 与示波器内部设置的波特率保持一致。   发送查询字符串。 后面通过回车、换行 操作符结束。  等待DM3058串口返回数据。   读取返回的数据, 并将其转换成 浮点数据。  这是读取直流电压测量命令,  读取交流电压数据命令,  读取电阻测量命令。  发送不同测量命令, DM3058会自动转换测量档位和量程。

GM1700648057_1280_720.MPG|_-11

  QAR10是一款程控电阻箱,  下面就使用DM3058测量它对应的电阻值。  通过程序自动改变QR10 阻值, 然后通过 DM3058读取对应的数据。

GM1700649661_1280_720.MPG|_-4

  QR10通过USB与电脑相连。  通过Python 编程, 逐步从 1欧姆到 10k 欧姆设定电阻箱, 分别读取DM3058测量电阻值。  这是设置电阻值与测量数值之间的误差。 可以看到在整个设定范围内, 误差都在 1 欧姆到2欧姆之间。  整体上看不出他们有区别。  绘制出误差曲线, 才能够比较清楚。  前面这部分显示, 测量线路应该有一个大约 1 欧姆的系统误差。  随着设定超过 2k 欧姆之后, 误差逐步增加。

GM1700650953_1280_720.MPG|_-7

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST2.PY                     -- by Dr. ZhuoQing 2023-11-22
#
# Note:
#============================================================

from headm import *

import serial
from _ast import Or
from serial.serialutil import SerialException

#------------------------------------------------------------
dm3058 = serial.Serial()
dm3058.baudrate = 115200
dm3058.timeout = 0.05
try:
    dm3058.port = 'COM5'
except:
    printf('Set dm3058 port COM5 error. ')

try:
    dm3058.open()
except serial.serialutil.SerialException:
    printf('Open dm3058 port COM5 error.')
else:
    printf('Open dm3058 port COM5 Ok.')
#------------------------------------------------------------

#------------------------------------------------------------
def dm3058query(cmd):
    dm3058.write(bytes(':%s?\r\n'%cmd, 'gbk'))

    for i in range(200):
        time.sleep(0.01)
        if dm3058.inWaiting() > 0: break

    time.sleep(.02)
    return eval(dm3058.read(dm3058.inWaiting()))

def dm3058dc():
    return dm3058query('MEAS:VOLT:DC')

def dm3058ac():
    return dm3058query('MEAS:VOLT:AC')

def dm3058res():
    return dm3058query('MEAS:RES')

#------------------------------------------------------------

QR10_HOST = '192.168.0.127'
QR10_PORT = 2244
QR10_BUFSIZE   = 0x4000

qr10socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
qr10socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, QR10_BUFSIZE)
qr10socket.settimeout(0.2)

def QR10udpsend(data):
    ADDR = (QR10_HOST, QR10_PORT)

    if type(data) != str:
        data = str(data)

    data = bytes(data, 'gbk')
    qr10socket.sendto(data, ADDR)

def QR10(res):
    QR10udpsend('SENDC AT+USER.SP=%.2f\r'%res)


#------------------------------------------------------------

setr = linspace(1, 10000, 100)
mesr = []
for r in setr:
    QR10(r)
    time.sleep(1)

    rr = dm3058res()
    printff(r, rr)

    mesr.append(rr)


tspsave('meas', setr=setr, mesr=mesr)
plt.plot(setr, mesr, lw=3)

plt.xlabel("Set(omega)")
plt.ylabel("Measure(omega)")
plt.grid(True)
plt.tight_layout()
plt.show()





printf('\a')



#------------------------------------------------------------
#        END OF FILE : TEST2.PY
#============================================================

▲ 图1.2.1 设置与测量数值

▲ 图1.2.1 设置与测量数值

▲ 图1.2.2 设置与测量电阻误差

▲ 图1.2.2 设置与测量电阻误差

setr=[1.00,102.00,203.00,304.00,405.00,506.00,607.00,708.00,809.00,910.00,1011.00,1112.00,1213.00,1314.00,1415.00,1516.00,1617.00,1718.00,1819.00,1920.00,2021.00,2122.00,2223.00,2324.00,2425.00,2526.00,2627.00,2728.00,2829.00,2930.00,3031.00,3132.00,3233.00,3334.00,3435.00,3536.00,3637.00,3738.00,3839.00,3940.00,4041.00,4142.00,4243.00,4344.00,4445.00,4546.00,4647.00,4748.00,4849.00,4950.00,5051.00,5152.00,5253.00,5354.00,5455.00,5556.00,5657.00,5758.00,5859.00,5960.00,6061.00,6162.00,6263.00,6364.00,6465.00,6566.00,6667.00,6768.00,6869.00,6970.00,7071.00,7172.00,7273.00,7374.00,7475.00,7576.00,7677.00,7778.00,7879.00,7980.00,8081.00,8182.00,8283.00,8384.00,8485.00,8586.00,8687.00,8788.00,8889.00,8990.00,9091.00,9192.00,9293.00,9394.00,9495.00,9596.00,9697.00,9798.00,9899.00,10000.00]
mesr=[2.22,103.01,204.06,305.10,406.09,507.05,608.06,709.04,810.04,910.97,1012.00,1113.04,1214.03,1314.98,1416.03,1517.05,1618.07,1719.10,1820.09,1921.08,2021.95,2122.95,2223.96,2324.96,2426.32,2527.43,2628.45,2729.45,2830.33,2931.34,3032.40,3133.41,3234.43,3335.43,3436.46,3537.45,3638.47,3739.48,3840.49,3941.45,4042.47,4143.51,4244.54,4345.43,4446.42,4547.45,4648.52,4749.54,4850.55,4951.59,5052.59,5153.60,5254.60,5355.62,5456.71,5557.71,5658.63,5759.65,5860.66,5961.64,6062.47,6163.48,6264.51,6365.53,6466.54,6567.53,6668.44,6769.47,6870.51,6971.53,7072.61,7173.60,7274.49,7375.49,7476.51,7577.70,7678.65,7779.61,7880.61,7981.66,8082.66,8183.67,8284.73,8385.69,8486.73,8587.72,8688.79,8789.77,8890.83,8991.86,9092.83,9193.89,9294.82,9395.83,9496.94,9597.85,9698.87,9799.87,9900.91,10002.01]

三、频率范围

  使用 DG1062产生不同频率的正弦波,  从 1000Hz 到 1MHz。  使用DM3058测量不同频率下对应的交流电压值。 通过测量结果来看,  出现一个突变, 不知道什么原因。  对应同样的低频数值,  是在 250kHz 之内。 这说明在 250kHz之内, DM3058测量的数值都大体相同。  测量数值降低 0.1V,  对应 400KHz。 在 1MHz 的时候, 电压降低了大约 0.45V。

GM1700651790_1280_720.MPG|_-9

▲ 图1.3.1 不同频率对应的测量电压

▲ 图1.3.1 不同频率对应的测量电压

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST4.PY                     -- by Dr. ZhuoQing 2023-11-22
#
# Note:
#============================================================

from headm import *
from tsmodule.tsvisa        import *

import serial
from _ast import Or
from serial.serialutil import SerialException

#------------------------------------------------------------
dm3058 = serial.Serial()
dm3058.baudrate = 115200
dm3058.timeout = 0.05
try:
    dm3058.port = 'COM5'
except:
    printf('Set dm3058 port COM5 error. ')

try:
    dm3058.open()
except serial.serialutil.SerialException:
    printf('Open dm3058 port COM5 error.')
else:
    printf('Open dm3058 port COM5 Ok.')
#------------------------------------------------------------

#------------------------------------------------------------
def dm3058query(cmd):
    dm3058.write(bytes(':%s?\r\n'%cmd, 'gbk'))

    for i in range(200):
        time.sleep(0.01)
        if dm3058.inWaiting() > 0: break

    time.sleep(.02)
    return eval(dm3058.read(dm3058.inWaiting()))

def dm3058dc():
    return dm3058query('MEAS:VOLT:DC')

def dm3058ac():
    return dm3058query('MEAS:VOLT:AC')

def dm3058res():
    return dm3058query('MEAS:RES')

#------------------------------------------------------------
dg1062open(7)

fdim = linspace(100, 1e6, 100)
vdim = []

for f in fdim:
    dg1062freq(1, f)
    time.sleep(1)
    v = dm3058ac()
    printff(f, v)

    vdim.append(v)

    tspsave('measure', fdim=fdim, vdim=vdim)


plt.plot(fdim, vdim, lw=3)

plt.xlabel("Frequency(Hz)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()





#------------------------------------------------------------
#        END OF FILE : TEST4.PY
#============================================================
fdim=[100.00,10200.00,20300.00,30400.00,40500.00,50600.00,60700.00,70800.00,80900.00,91000.00,101100.00,111200.00,121300.00,131400.00,141500.00,151600.00,161700.00,171800.00,181900.00,192000.00,202100.00,212200.00,222300.00,232400.00,242500.00,252600.00,262700.00,272800.00,282900.00,293000.00,303100.00,313200.00,323300.00,333400.00,343500.00,353600.00,363700.00,373800.00,383900.00,394000.00,404100.00,414200.00,424300.00,434400.00,444500.00,454600.00,464700.00,474800.00,484900.00,495000.00,505100.00,515200.00,525300.00,535400.00,545500.00,555600.00,565700.00,575800.00,585900.00,596000.00,606100.00,616200.00,626300.00,636400.00,646500.00,656600.00,666700.00,676800.00,686900.00,697000.00,707100.00,717200.00,727300.00,737400.00,747500.00,757600.00,767700.00,777800.00,787900.00,798000.00,808100.00,818200.00,828300.00,838400.00,848500.00,858600.00,868700.00,878800.00,888900.00,899000.00,909100.00,919200.00,929300.00,939400.00,949500.00,959600.00,969700.00,979800.00,989900.00,1000000.00]
vdim=[1.77,1.77,1.77,1.77,1.77,1.77,1.77,1.77,1.77,1.77,1.80,1.80,1.80,1.79,1.79,1.79,1.79,1.78,1.78,1.78,1.78,1.77,1.77,1.77,1.77,1.76,1.76,1.76,1.75,1.75,1.74,1.74,1.73,1.73,1.72,1.72,1.71,1.71,1.70,1.70,1.69,1.69,1.68,1.67,1.67,1.66,1.65,1.65,1.64,1.63,1.62,1.62,1.61,1.60,1.59,1.59,1.58,1.57,1.56,1.56,1.55,1.54,1.53,1.52,1.52,1.51,1.50,1.49,1.48,1.48,1.47,1.46,1.45,1.44,1.43,1.43,1.42,1.41,1.40,1.39,1.39,1.38,1.37,1.36,1.35,1.35,1.34,1.33,1.32,1.31,1.31,1.30,1.29,1.28,1.27,1.27,1.26,1.25,1.24,1.24]

 

  结 ※


  文测试了数字万用表 DM3058串口编程的功能。  通过串口可以读取测量的数值, 改变测量的档位。  测试了编程电阻箱的设置误差, 大约在2欧姆左右,  使用 DG1062测量了 DM3058的交流频率特性。

GM1700651966_1280_720.MPG|_-4


■ 相关文献链接:

● 相关图表链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值