# 一、项目说明 本测试软件用于通过串口,对目标设备进行指令测试,指令解析,数据存储与分析等操作 # 二、开发说明 # 指令脚本设计说明 ## 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优化