METERREC万用表测量自动记录命令

举报
tsinghuazhuoqing 发表于 2021/12/26 01:28:01 2021/12/26
【摘要】 通过Python/cmd下的 meterrec完成实验台面万用表数据自动记录的功能。   ■ 命令 1.命令格式 meterrec ch dn 记录单通道,并最终拷贝到CLL...

通过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 workmode
    global tablesection, tableid
    global ch1data, ch2data, ch3data, ch4data
    global ch5data, ch6data, ch7data, ch8data

    #--------------------------------------------------------
    def f1():
        tspmsg('msg \a')

    def f2():
        printf('\a')

    if func1 == None:
        func1 = f1

    if func2 == None:
        func2 = f2
    #--------------------------------------------------------
    codeflag = 0

    if 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 = 1

                if len(tablesection) > 0:
                    tspexecutepythoncmd('cdpt')

                if len(tablesection) > 0:
                    printf(' '.join(tablesection))

                continue

            if key[3] != 0:
                return

        if key[2] != 0 and codeflag == 0:
            codeflag = 1
            continue

        if key[3] != 0 and codeflag == 0:
            codeflag = 2
            continue

        if codeflag != 0:
            if key[2] == 0 and key[3] == 0:
                if codeflag == 1:
                    func1()
                    linenum = linenum + 1
                    if len(tablesection) > 0:
                        if linenum >= len(tablesection) - tableid:
                            func2()
                            linenum = 0

                elif 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 = 0

                codeflag = 0
                continue

            if key[2] != 0 and key[3] != 0:
                if codeflag == 1:
                    tspmsgcopy()
                    tspclr()
                    tspbeep(1200, 100)
                    codeflag = 3

                    if len(tablesection) > 0:
                        tspexecutepythoncmd('cdpt')

                    if len(tablesection) > 0:
                        printf(' '.join(tablesection))

                    continue

                elif codeflag == 2:
                    return

#------------------------------------------------------------
windowtitle = tspgetwindowtitle()
findflag = 0

meterfile = 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 = 1
        break

if findflag == 0:
    os.system(meterfile)
    time.sleep(.5)
    tspbeep(1200, 200)

#============================================================
#------------------------------------------------------------

workmode = 0                    # 0  Record the table data
                                # 1  Record data file

meterid = 0
decimalnum = -1                 # Decimal number no limited

datafilename = ''
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 = 1

tablesection = [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 decimalnum
    dn = decimalnum
    val = 0

    val = getchannelval(meterid)
    tspmsgdecimal(val, dn)
    tspbeep(2000, 200)

#------------------------------------------------------------
ch1data = []
ch2data = []
ch3data = []
ch4data = []
ch5data = []
ch6data = []
ch7data = []
ch8data = []

def recorddata():
    global datafilename
    global datachannel
    global decimalnum
    global ch1data, ch2data, ch3data, ch4data
    global ch5data, ch6data, ch7data, ch8data

    tspbeep(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
#============================================================

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/107295542

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。