加入预置变量功能支持

This commit is contained in:
2021-08-25 16:20:31 +08:00
parent f975048488
commit f077b884b4
4 changed files with 38 additions and 16 deletions

View File

@@ -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])
```
## 分帧间隔
电脑端系统驱动层有数据接收缓存,不能保证接收到的数据都是按数据帧分开的。
请合理设置分帧间隔字段,以确保数据显示符合预期。

19
app.ui
View File

@@ -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
}
]
}

View File

@@ -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='<Return>', cmd=lambda x:comm.sendData()).set('')
root.button('btn-scan', cmd=lambda:comm.detectSerialPort())
root.button('btn-onoff', cmd=lambda:comm.openCloseSerial())

View File

@@ -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'])]
)