通过Python/cmd下的 meterrec完成实验台面万用表数据自动记录的功能。

■ 命令


1.命令格式

  • meterrec ch dn
    记录单通道,并最终拷贝到CLLIPBOARD。

  • meterrec ch dn #tab1 tab2 tab3…
    记录单通道,并根据tab1,2,3自动粘贴到 CSDN 形成表格
    如果第一个参数以‘#’’开始,则最开始为序号

  • meterrec datafile ch1 ch2 ch3…
    记录多通道到数据文件。

2.通道定义

  • 0~3: 桌面万用表集成测量通道数据

  • 4:DM3068:VDC

  • 5:DM3068:VAC

  • 6:DM3068:RES

  • 7:DM3068:FREQ

    ▲ 台面万用表数据通道

3.鼠标操作

Ⅰ.鼠标左键 :记录一条记录。

Ⅱ.鼠标右键:在第一种命令下,开启新的记录行;在第2,3种记录命令,将当前记录清零。

Ⅲ.左键–>右键:在第一种命令下,将MSG窗口内容拷贝到CLIPBOARD,并清楚。在第二种命令下,还包括自动粘贴;第三种命令没有特殊功能。

Ⅳ.右键–>左键:退出程序。退出后,MSG窗口内的拷贝到CLIPBOARD。

■ 程序


#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# METERREC.PY                     -- by Dr. ZhuoQing 2020-07-06
#
# Note:
#============================================================from headm import *
import os
from tsmodule.tsstm32       import *
from tsmodule.tsvisa        import *#------------------------------------------------------------
#============================================================#------------------------------------------------------------
def tspclickaction(func1=None, func2=None):global workmodeglobal tablesection, tableidglobal ch1data, ch2data, ch3data, ch4dataglobal ch5data, ch6data, ch7data, ch8data#--------------------------------------------------------def f1():tspmsg('msg \a')def f2():printf('\a')if func1 == None:func1 = f1if func2 == None:func2 = f2#--------------------------------------------------------codeflag = 0if len(tablesection) > 0:printf(' '.join(tablesection))linenum = 0#--------------------------------------------------------while True:if codeflag == 0:time.sleep(.5)else: time.sleep(.5)key = tspread()if key[7] != 0 and codeflag == 0:if key[2] != 0:tspmsgcopy()tspclr()tspbeep(1200, 100)codeflag = 1if len(tablesection) > 0:tspexecutepythoncmd('cdpt')if len(tablesection) > 0:printf(' '.join(tablesection))continueif key[3] != 0:returnif key[2] != 0 and codeflag == 0:codeflag = 1continueif key[3] != 0 and codeflag == 0:codeflag = 2continueif codeflag != 0:if key[2] == 0 and key[3] == 0:if codeflag == 1:func1()linenum = linenum + 1if len(tablesection) > 0:if linenum >= len(tablesection) - tableid:func2()linenum = 0elif codeflag == 2:if len(tablesection) == 0:func2()if workmode == 1:ch1data = []ch2data = []ch3data = []ch4data = []ch5data = []ch6data = []ch7data = []ch8data = []tspclr()printf('Record data %s at %s:'%(datafilename, str(datachannel)))else: tspclr()linenum = 0codeflag = 0continueif key[2] != 0 and key[3] != 0:if codeflag == 1:tspmsgcopy()tspclr()tspbeep(1200, 100)codeflag = 3if len(tablesection) > 0:tspexecutepythoncmd('cdpt')if len(tablesection) > 0:printf(' '.join(tablesection))continueelif codeflag == 2:return#------------------------------------------------------------
windowtitle = tspgetwindowtitle()
findflag = 0meterfile = r'D:\zhuoqing\window\cb\MyResearch\Test\TestAD5344\M8BL_BAS\M8BL_BAS.exe'for wt in windowtitle:if wt.find('MEGA8 DOWLOAD PROGERAM') >= 0:findflag = 1breakif findflag == 0:os.system(meterfile)time.sleep(.5)tspbeep(1200, 200)#============================================================
#------------------------------------------------------------workmode = 0                    # 0  Record the table data# 1  Record data filemeterid = 0
decimalnum = -1                 # Decimal number no limiteddatafilename = ''
datachannel = []tablesection = []               #
tableid = 0                     ##------------------------------------------------------------
if len(sys.argv) > 1:if sys.argv[1].isdigit() == False:datafilename = sys.argv[1]for s in sys.argv[2:]:if s.isdigit() == False:printf("meterrec datafile ch1 ch2 ...")exit()datachannel.append(int(s))if len(datachannel) == 0:printf("meterrec datafile ch1 ch2 ...")exit()workmode = 1             #else:meterid = int(sys.argv[1])if len(sys.argv) > 2:if sys.argv[2].isdigit():decimalnum = int(sys.argv[2])tablesection = sys.argv[3:]else:tablesection = sys.argv[2:]for s in tablesection:if s.find('#') >=0:tableid = 1tablesection = [s.strip('#') for s in tablesection]#------------------------------------------------------------
if meterid > 3:dm3068open()
elif len(datachannel) > 0:for c in datachannel:if c > 3:dm3068open()break#============================================================
#------------------------------------------------------------
def tspmsgdecimal(val, dn=-1):if dn == 0:tspmsg('%d '%val)elif dn == 1:tspmsg('%3.1f '%val)elif dn == 2:tspmsg('%4.2f '%val)elif dn == 3:tspmsg('%5.3f '%val)elif dn == 4:tspmsg('%6.4f '%val)elif dn == 5:tspmsg('%7.5f '%val)elif dn == 6:tspmsg('%8.6f '%val)elif dn == 7:tspmsg('%9.7f '%val)elif dn == 8:tspmsg('%10.8f '%val)else:tspmsg('%f '%val)#------------------------------------------------------------
def getchannelval(ch):if ch < 4:meter = meterval()val = meter[ch]elif ch == 4:val = dm3068vdc()elif ch == 5:val = dm3068vac()elif ch == 6:val = dm3068res()elif ch == 7:val = dm3068freq()else:val = dm3068vdc()return val#------------------------------------------------------------
def recordchannel():global decimalnumdn = decimalnumval = 0val = getchannelval(meterid)tspmsgdecimal(val, dn)tspbeep(2000, 200)#------------------------------------------------------------
ch1data = []
ch2data = []
ch3data = []
ch4data = []
ch5data = []
ch6data = []
ch7data = []
ch8data = []def recorddata():global datafilenameglobal datachannelglobal decimalnumglobal ch1data, ch2data, ch3data, ch4dataglobal ch5data, ch6data, ch7data, ch8datatspbeep(1200, 50)if len(datachannel) == 0:printf('ERROR: Channel number: 0.')exit()if len(datafilename) == 0:printf("ERROR: Data file length is zero.")exit()if len(datachannel) >= 1:ch1data.append(getchannelval(datachannel[0]))tspmsgdecimal(ch1data[-1], decimalnum)if len(datachannel) >= 2:ch2data.append(getchannelval(datachannel[1]))tspmsgdecimal(ch2data[-1], decimalnum)if len(datachannel) >= 3:ch3data.append(getchannelval(datachannel[2]))tspmsgdecimal(ch3data[-1], decimalnum)if len(datachannel) >= 4:ch4data.append(getchannelval(datachannel[3]))tspmsgdecimal(ch4data[-1], decimalnum)if len(datachannel) >= 5:ch5data.append(getchannelval(datachannel[4]))tspmsgdecimal(ch5data[-1], decimalnum)if len(datachannel) >= 6:ch6data.append(getchannelval(datachannel[5]))tspmsgdecimal(ch6data[-1], decimalnum)if len(datachannel) >= 7:ch7data.append(getchannelval(datachannel[6]))tspmsgdecimal(ch7data[-1], decimalnum)if len(datachannel) >= 8:ch8data.append(getchannelval(datachannel[7]))tspmsgdecimal(ch8data[-1], decimalnum)if len(datachannel) == 1:tspsave(datafilename, ch1=ch1data)if len(datachannel) == 2:tspsave(datafilename, ch1=ch1data, ch2=ch2data)if len(datachannel) == 3:tspsave(datafilename, ch1=ch1data, ch2=ch2data, ch3=ch3data)if len(datachannel) == 4:tspsave(datafilename, ch1=ch1data, ch2=ch2data, ch3=ch3data, ch4=ch4data)if len(datachannel) == 5:tspsave(datafilename, ch1=ch1data, ch2=ch2data, ch3=ch3data, ch4=ch4data, ch5=ch5data)if len(datachannel) == 6:tspsave(datafilename, ch1=ch1data, ch2=ch2data, ch3=ch3data, ch4=ch4data, ch5=ch5data, ch6=ch6data)if len(datachannel) == 7:tspsave(datafilename, ch1=ch1data, ch2=ch2data, ch3=ch3data, ch4=ch4data, ch5=ch5data, ch6=ch6data, ch7=ch7data)if len(datachannel) == 8:tspsave(datafilename, ch1=ch1data, ch2=ch2data, ch3=ch3data, ch4=ch4data, ch5=ch5data, ch6=ch6data, ch7=ch7data, ch8=ch8data)printf("\a")#------------------------------------------------------------
time.sleep(.5)
tspbeep(1000, 500)
tspclr()
clipboard.copy('')#------------------------------------------------------------
if workmode == 1:printf('Record data %s at %s:'%(datafilename, str(datachannel)))tspclickaction(recorddata)
else:tspclickaction(recordchannel)#------------------------------------------------------------
tspmsgcopy()
tspbeep(500, 200)#------------------------------------------------------------
#        END OF FILE : METERREC.PY
#============================================================

METERREC万用表测量自动记录命令相关推荐

  1. 如何使用万用表测量随机噪声

      数字万用表是测量电信号的有力助手.虽说是"   "用表,其实常见的功能只有测量电压.电流.电阻.电压.电流还包括有交直流档.除此之外,部分万用表包含有测量电感.电容.通断.二极 ...

  2. 万用表怎么测量电池容量_如何使用万用表,使用万用表测量常用的六个方面

    如何使用万用表测量:万用表测量电路通路.断路.短路方法 万用表是电子工程师或者从事电子行业的人们常用的一种测量工具,他可以测量电阻.电容.二极管等常用元器件.而且在日常生活中,我们也会经常用它来测量电 ...

  3. 万用表测量二极管方法

    万用表测量二极管方法 2009-02-24 18:46:05|  分类: 工作资料 |  标签: |字号大中小 订阅 怎么用万用表测二极管.发光二极管和三极管的好坏 普通二极管的检测(包括检波二极管. ...

  4. 万用表怎么测量电池容量_万用表测量锂电池容量的方法

    万用表测量锂电池容量的方法 严格上说,万用表只能测量电流,电压,电阻,测量不了容量.但是可以用万用表大致测量一下锂电池是否容量不足,那就是用万用表的直流电流档(最好是指针表).瞬间测量一下电池的正负极 ...

  5. db107s-ASEMI整流桥堆怎么测量好坏,万用表测量DB107S四脚

    编辑-Z db107s整流桥堆怎么测量好坏?拿到一个DB107S后,将其放好如图,(下面两脚代表AC,接交流电,测量时,AC的两脚当为一个整体来理解). DB107S参数描述 型号:DB107S 封装 ...

  6. 示波器和万用表测量直流电压的区别

    示波器和万用表是工程师非常熟悉的两款电子测试工具,它们均具有直流电压测试功能,那测量时又有什么不同呢? 01.示波器测量直流电压 示波器是一种可以显示电信号波形的测量仪器.示波器可以做到高频采样,测量 ...

  7. 用万用表测量电压、电阻和电流

    唉,不知道是以前学过的东西忘了还是基础不扎实,今天测量阻都不会测. 在一般的开发板中,使用万用表测量电压很简单,直接调到电压档,把两个探针放到要测量的器件(比如电阻)两端就行了.但是测量电流就很少像我 ...

  8. 使用万用表测量CAN总线电压及实际电压与逻辑电瓶关系

    从下图可以看出: 在CAN_High的高电平为3.5V,低电平为2.5V,CAN_Low的高电平为2.5V,低电平为1.5V的情况下: 1.使用万用表测量CAN总线电压 测量CAN_High的对地电压 ...

  9. 万用表测量CAN信号的方法

    万用表测量CAN信号的方法 https://jingyan.baidu.com/article/48206aea899b7e216ad6b3c2.html

最新文章

  1. 青源 LIVE 第 28 期 | 北大燕博南:下一代AI芯片—存内计算的硬核与软着陆
  2. 硅谷人眼中的2018年十大前沿科技预测
  3. 来自mooon的最简单的日志类CSimpleLogger
  4. vivado中如何导入ise工程
  5. 计算机常用工具软件教案,常用工具软件教案.doc
  6. 【渝粤教育】国家开放大学2018年春季 0222-21T模拟电子电路 参考试题
  7. HTML鼠标悬停的语法
  8. Energy python API 代码学习
  9. ServiceAccounts 及 Secrets 重大变化
  10. 网络游戏(MMORPG) 好玩的原因
  11. 天龙八部手游服务器维护公告,天龙八部手游 近期更新维护公告
  12. 【高等代数】行列式的定义和性质
  13. 7-13 愿天下有情人都是失散多年的兄妹 (25 分)
  14. 王者荣耀各服务器位置,盘点王者荣耀各位置国服战力排名,辅助榜表示只有富婆才玩的懂...
  15. 贪心算法_排队不等式_绝对值不等式_推公式
  16. Android:销毁所有的Activity退出应用程序几种方式
  17. 程序员面试金典总结 - leetcode 程序员面试金典系列
  18. matlab学习笔记之——符号函数应该怎么作图?
  19. 使用umi快速搭建项目以及如何在umi中使用dva进行状态管理
  20. 用devc++表白_想谈一场甜甜的姐弟恋了 | 肇院表白墙716期

热门文章

  1. Linux查看CPU信息、机器型号等硬件信息
  2. 三、Oracle的简单查询
  3. 判断二叉树中两个节点的最低共同父节点
  4. 12月18日云栖精选夜读 | Java 中创建对象的 5 种方式!...
  5. vault-使用kubernetes作为认证后端
  6. 5-MST 多生成树 //IOU模拟
  7. 原来windows下也可以用awk
  8. Fabric动态增加组织【资料】
  9. 数据库弱一致性四个隔离级别
  10. 常见CSS两栏式布局