From f077b884b40327cc85f2aca2a217d88ec27b33d7 Mon Sep 17 00:00:00 2001 From: kicer Date: Wed, 25 Aug 2021 16:20:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E9=A2=84=E7=BD=AE=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E5=8A=9F=E8=83=BD=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 ++++++++++++++++++----- app.ui | 19 ++++++++++++------- scomm.py | 10 +++++++--- setup.py | 2 +- 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 3e2ba93..cc89fb1 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,20 @@ 2. 接收数据,自定义脚本解析输出 3. 数据显示,自定义文本编码 4. 预置数据,快速编辑、一键发送 -5. 接收数据,自定义分帧间隔 -6. 串口开关状态灯指示 -7. HEX格式、时间戳、循环发送、保存文件等 +5. 预置变量,传递参数给预置数据 +6. 接收数据,自定义分帧间隔 +7. 串口开关状态灯指示 +8. HEX格式、时间戳、循环发送、保存文件等 ## 安装运行 ```bash # install python3 -python3 scomm.py +python scomm.py # windows下安装py2exe可导出成exe文件 # pip install pyyaml pyserial py2exe -# python3 setup.py py2exe +# python setup.py py2exe ``` @@ -56,6 +57,18 @@ python3 scomm.py HEX格式请注意检测数据是否有效,程序中未对数据有效性作检查。 +## 预置变量 +以逗号分割的字符串数组变量,传递给预置数据。 +调用*eval*函数解析预置数据并发送执行结果。 + +```python +# data为预置变量字符数组 +# 例如预置数据如下,选中HEX格式,预置变量设置为"1,3" +# 则对应要发送的数据解析为55 AA 03 F8 01 EE +"55 AA 03 F8 5A %02X EE" % int(data[0]) +``` + + ## 分帧间隔 电脑端系统驱动层有数据接收缓存,不能保证接收到的数据都是按数据帧分开的。 请合理设置分帧间隔字段,以确保数据显示符合预期。 diff --git a/app.ui b/app.ui index 5c66ed2..1987d6c 100644 --- a/app.ui +++ b/app.ui @@ -174,11 +174,17 @@ "column": 2, "row": 20 }, + { + "name":"label-uservar", + "text":"预置变量:", + "column": 2, + "row": 40 + }, { "name":"label-encoding", "text":"数据编码:", "column": 2, - "row": 40 + "row": 42 } ], "Entry":[ @@ -186,6 +192,11 @@ "name":"entry-encoding", "width":10, "column": 2, + "row": 43 + },{ + "name":"entry-uservar", + "width":10, + "column": 2, "row": 41 } ], @@ -269,12 +280,6 @@ "text":"data-08", "column": 2, "row": 28 - }, - { - "name":"btn-data09", - "text":"data-09", - "column": 2, - "row": 29 } ] } diff --git a/scomm.py b/scomm.py index c5bf129..ed290ce 100755 --- a/scomm.py +++ b/scomm.py @@ -291,6 +291,9 @@ class TopWin(): _cfg = self.root.usercfg.get(btn, {}) if _cfg: val = _cfg.get('value') + try: + val = eval(val, {"data":self.root.get('entry-uservar').var.get().split(',')}) + except: pass self.root.get('entry-sendText').var.set(val) self.root.get('ckbtn-shex').var.set(_cfg.get('hex') and 1 or 0) self.root.get('btn-send').invoke() @@ -301,7 +304,6 @@ class TopWin(): self.root.usercfg[btn] = dat encoding = self.root.get('entry-encoding').var.get() f.write(json.dumps(self.root.usercfg,indent=4,sort_keys=True).encode(encoding,'ignore')) - self.set_unpack(btn) self.root.get(btn).configure(text=dat.get('title')) def win_data(self, event): def _save(w): @@ -324,6 +326,7 @@ class TopWin(): dat = {'title':self.root.get('entry-ufile').var.get()} dat['value'] = self.root.get('text-usetting').get('1.0','end -1 chars') self.save_cfg(w,dat) + self.set_unpack(w) self.WinUnpack.destroy() if self.WinUnpack: self.WinUnpack.destroy() self.WinUnpack = self.root.toplevel('unpack.ui', title='解析脚本') @@ -343,7 +346,7 @@ if __name__ == '__main__': # 读取用户数据文件 root.usercfg = json.load(open('usercfg.json')) if os.path.isfile('usercfg.json') else {} # 预置数据回调函数 - for i in range(10): + for i in range(20): name = 'btn-data%02d'%(i+1) try: btn = root.get(name) @@ -357,7 +360,7 @@ if __name__ == '__main__': pass # 解析脚本回调函数 var = tkinter.IntVar() - for i in range(10): + for i in range(20): name = 'btn-unpack%02d'%(i+1) try: btn = root.get(name) @@ -385,6 +388,7 @@ if __name__ == '__main__': root.entry('entry-cycle').set('1024ms') root.entry('entry-baud').set('9600') root.entry('entry-encoding').set('gbk') + root.entry('entry-uservar').set('0') root.entry('entry-sendText', key='', cmd=lambda x:comm.sendData()).set('') root.button('btn-scan', cmd=lambda:comm.detectSerialPort()) root.button('btn-onoff', cmd=lambda:comm.openCloseSerial()) diff --git a/setup.py b/setup.py index 0bd32a4..cf742bc 100644 --- a/setup.py +++ b/setup.py @@ -14,5 +14,5 @@ setup( }, windows = [{ 'script':'scomm.py', 'icon_resources':[(1, 'app.ico')]}], zipfile = None, - data_files = [('', ['usercfg.json','app.ui','unpack.ui','data.ui'])] + data_files = [('', ['usercfg.json','app.ui','unpack.ui','data.ui','README.md'])] )