150 lines
6.7 KiB
Markdown
150 lines
6.7 KiB
Markdown
# 一、项目说明
|
||
本测试软件用于通过串口,对目标设备进行指令测试,指令解析,数据存储与分析等操作
|
||
|
||
# 二、开发说明
|
||
# 指令脚本设计说明
|
||
|
||
## 1. 预置全局变量
|
||
|
||
### `_G`
|
||
- 类型:class实例
|
||
- 描述:程序启动时为空,生命周期为软件运行时间,可在不同指令中访问
|
||
- 包含方法:
|
||
- `get(name: str) -> any`
|
||
- `set(name: str, value: any) -> None`
|
||
|
||
### `cmdInfo`
|
||
- 类型:`dict`
|
||
- 描述:包含当前指令的信息
|
||
|
||
### `proInfo`
|
||
- 类型:`dict`
|
||
- 描述:包含当前活动工程的信息
|
||
|
||
### `interfaceInfo`
|
||
- 类型:`dict`
|
||
- 描述:包含指令执行所对应的接口的信息
|
||
|
||
### `userInfo`
|
||
- 类型:`dict`
|
||
- 描述:包含当前登录用户的信息
|
||
|
||
## 2. 接口函数
|
||
|
||
### `finish()`
|
||
- 参数:无
|
||
- 返回值:无
|
||
- 描述:调用此接口,指令运行结束。脚本中必须显式地调用此函数,否则指令将不会停止。
|
||
|
||
### `log_d(msg: str, color: str = 'blue')`
|
||
- 参数:
|
||
- `msg`: 日志内容
|
||
- `color`: 日志颜色
|
||
- 描述:输出DEBUG级别的日志到日志窗口。
|
||
|
||
### `log_i(msg: str, color: str = 'green')`
|
||
- 参数:
|
||
- `msg`: 日志内容
|
||
- `color`: 日志颜色
|
||
- 描述:输出INFO级别的日志到日志窗口。
|
||
|
||
### `log_w(msg: str, color: str = 'yellow')`
|
||
- 参数:
|
||
- `msg`: 日志内容
|
||
- `color`: 日志颜色
|
||
- 描述:输出WARNING级别的日志到日志窗口。
|
||
|
||
### `log_e(msg: str, color: str = 'red')`
|
||
- 参数:
|
||
- `msg`: 日志内容
|
||
- `color`: 日志颜色
|
||
- 描述:输出ERROR级别的日志到日志窗口。
|
||
|
||
### `scanf(title: str, msg: str, default: str) -> str`
|
||
- 参数:
|
||
- `title`: 标题
|
||
- `msg`: 信息
|
||
- `default`: 文本框默认内容
|
||
- 描述:在`start`或者`loop`中调用此函数,会弹出输入框,供用户输入数据。此函数为阻塞式调用,函数返回前,指令不会往下执行。
|
||
|
||
### `alert(title: str, msg: str, timeout: int = 3000)`
|
||
- 参数:
|
||
- `title`: 标题
|
||
- `msg`: 信息
|
||
- `timeout`: 超时后自动关闭,0表示不自动关闭
|
||
- 描述:在`start`或者`loop`中调用此函数,会弹出消息提示框。此函数为阻塞式调用,函数返回前,指令不会往下执行。
|
||
|
||
## 3. 回调函数
|
||
|
||
### `start()`
|
||
- 描述:指令执行时,此函数将被首先执行。此函数运行在指令线程中,可以调用`sleep`之类的函数,不会阻塞UI界面。
|
||
- 注意:此函数必须实现,否则会引起软件异常。
|
||
|
||
### `loop()`
|
||
- 描述:指令执行时,此函数将被循环调用。此函数运行在指令线程中,可以调用`sleep`之类的函数,不会阻塞UI界面。
|
||
- 注意:此函数必须实现,否则会引起软件异常。
|
||
|
||
### `recvDataHandler(data: bytearray)`
|
||
- 参数:
|
||
- `data`: 接收到的数据
|
||
- 描述:当指令对应的接口接收到数据时,此函数被调用。此函数运行在接口线程中,虽然不会阻塞UI界面,但影响接口的数据处理,设计时应快进快出,不要执行特别耗时的操作。
|
||
- 注意:此函数必须实现,否则会引起软件异常。
|
||
|
||
|
||
# 三、测试记录
|
||
2023/12/12
|
||
1、设备模型中的指令点击删除按钮无效
|
||
2、设备模型列表中条目拖拽到空白处,会新建一个条目,且无法删除
|
||
3、添加端口后,没有立即生效,在设备中无法选择,但经过一些其他操作后,设备的接口列表中才可以看到
|
||
4、指令getInfo拿到的attr是一个字符串,最好解析成dict
|
||
5、instructionModel的dataHandler连接到了接口的newDataArrive,但槽函数没有执行
|
||
|
||
2023/12/15
|
||
1、日志的颜色显示
|
||
2、日志等级过滤
|
||
3、日志顶部增加一个“锁定”按钮,解锁后,追加日志内容滚动条自动滚动到底部;锁定后,滚动条不再自动滚动,但可以手动滚动
|
||
4、日志GroupBox与左右的控件高度不一致,小了一点
|
||
5、日志控件弹出后,左边的控件内容最好能自适应调宽度
|
||
6、指令模型的指令,点击删除后,确认框选择否,会再弹一个确认框
|
||
7、设备模型的指令列表加一个“克隆”按钮,用于将选中指令复制一份,放在列表最后,名称后面加上“副本”
|
||
8、设备模型列表加一个“克隆”按钮,用于将选中设备模型复制一份,放在列表最后,名称后面加上“副本”
|
||
9、封装一个校验管理器,把现有校验方式,直接放到代码中,不再以脚本文件的形式加载
|
||
10、当D盘data文件夹不存在时,自动创建;工程放在data/projs目录下
|
||
11、遍历data/projs下的子目录,当子目录下不包含info.txt时,将其视为无效目录,直接丢弃
|
||
12、接口管理页面,删除一个接口时,需要弹出确认对话框
|
||
|
||
|
||
2023/12/25
|
||
1、某些情况下,指令响应正常,但响应时间接近超时时间,会出现先打印succeed,后打印超时失败
|
||
2、指令弹出输入框,如果用户取消输入,指令无法往下执行
|
||
|
||
2023/12/27
|
||
1、模型删除设备列表没同步,数据库实际已经删除,但界面没有同步
|
||
2、工程加载日志会崩,只在张老师机器复现,需要把DATA目录拷贝一份排查问题
|
||
3、influxDB管理 读配置文件,让用户选择使用哪个,不暴漏给用户编辑
|
||
4、任务管理界面可双击修改时间和循环
|
||
5、任务添加脚本,执行器内部通过回调判断任务是否结束,不依靠循环判断(用于定时结束任务)
|
||
6、任务显示执行进度
|
||
7、每个App独立读取配置文件和系统配置文件,不依赖QSettings,用脚本获取
|
||
8、App指令映射
|
||
9、为App开发提供测试环境,页面加载指定qml便于调试
|
||
10、权限管理,把所有权限按角色分配,用户登录以后,根据角色权限显示指定功能按钮
|
||
11、App 按流程执行指令,需要有虚拟指令处理跳转逻辑
|
||
|
||
2023/12/28
|
||
1、脚本中弹出窗口后,关闭主程序窗口,主程序不退出,弹出窗口不会自动关闭,手动关闭弹出窗口后主程序才可退出
|
||
2、在没有工程的状态下,新建一个工程,新工程不会被加载(脚本中打印的工程信息为空),重启程序才工程才会加载
|
||
3、脚本start执行出错后,脚本中的槽recvDataHandler没有disconnect,还会被调用到
|
||
|
||
2024/01/04
|
||
1、倒计时任务实时更新时间进度
|
||
2、打包时加入版本号,文件存入version.json,修改发版时间,窗口标题显示版本号
|
||
3、接口断开连接后主界面弹出提示,不在qml弹出
|
||
4、打包config.json时不覆盖更新
|
||
|
||
2024/01/08
|
||
1、帮助文档分任务和指令文档
|
||
2、关于加入发布历史
|
||
3、用户名密码存sqlite json字符串混淆加密
|
||
4、UI优化
|