# 系统参数读写功能测试指南 ## 测试环境准备 ### 1. 设备要求 - Modbus TCP 设备(IP: 192.168.1.10, Port: 502) - 支持保持寄存器读写 - 地址范围:D404-D424, D1280, D1330, D1380 ### 2. 网络配置 - 确保控制端与设备在同一网络 - 测试网络连通性:`ping 192.168.1.10` - 确认端口 502 可访问 ### 3. 软件准备 - 已编译的 PetWashControl 应用程序 - Modbus 测试工具(可选,用于验证) ## 测试场景 ### 场景1:正常初始化流程 #### 测试步骤 1. 启动应用程序 2. 观察日志输出 3. 检查界面显示 #### 预期结果 ``` 日志输出: [INFO] 开始初始化系统... [INFO] 正在连接 Modbus TCP 设备: 192.168.1.10:502 [INFO] Modbus TCP 连接成功: 192.168.1.10:502 [INFO] 正在从设备读取系统参数... [INFO] 时间参数读取成功 - 首次喷水:2min, 沐浴1后:2min, ... [INFO] 液位读取成功 - 1号:80%, 2号:75%, 3号:70% [INFO] 系统初始化完成 界面显示: - 状态消息:"系统就绪,设备已连接" - 系统参数显示设备读取的值 - 液位显示实际百分比 ``` #### 验证点 - ✅ Modbus 连接成功 - ✅ 参数读取成功 - ✅ 界面显示正确 - ✅ 无错误日志 --- ### 场景2:设备未连接 #### 测试步骤 1. 断开设备网络或关闭设备 2. 启动应用程序 3. 观察系统行为 #### 预期结果 ``` 日志输出: [INFO] 正在连接 Modbus TCP 设备: 192.168.1.10:502 [ERROR] Modbus TCP 连接失败 [WARNING] Modbus TCP 设备连接失败,使用默认配置 [INFO] 已加载默认参数配置 界面显示: - 状态消息:"系统就绪,设备未连接" - 系统参数显示默认值 - 液位显示默认值 ``` #### 验证点 - ✅ 连接失败被正确处理 - ✅ 使用默认配置 - ✅ 应用程序正常运行 - ✅ 用户收到明确提示 --- ### 场景3:修改并保存参数(设备已连接) #### 测试步骤 1. 确保设备已连接 2. 点击 "系统设置" 按钮 3. 修改参数: - 首次喷水时间:2 → 3 - 热风时间:5 → 6 4. 点击 "保存设置" 按钮 5. 观察结果 #### 预期结果 ``` 日志输出: [INFO] 本地参数已更新 - 首次喷水:3min, ..., 热风:6min, ... [INFO] 正在将参数写入设备... [INFO] 参数已成功写入设备 界面显示: - 弹出消息框:"系统参数已保存到设备!" - 状态消息:"参数保存成功" ``` #### 验证点 - ✅ 参数修改成功 - ✅ 写入设备成功 - ✅ 本地配置已更新 - ✅ 用户收到成功提示 #### 验证方法 使用 Modbus 测试工具读取 D404 和 D420: ``` D404 = 3 (首次喷水时间) D420 = 6 (热风时间) ``` --- ### 场景4:修改并保存参数(设备未连接) #### 测试步骤 1. 断开设备连接 2. 点击 "系统设置" 按钮 3. 修改参数 4. 点击 "保存设置" 按钮 5. 观察结果 #### 预期结果 ``` 日志输出: [INFO] 本地参数已更新 - ... 界面显示: - 弹出警告消息框: "系统参数已保存到本地配置! 注意:设备未连接,参数未写入设备。" - 状态消息:"参数已保存(仅本地)" ``` #### 验证点 - ✅ 本地配置已更新 - ✅ 未尝试写入设备 - ✅ 用户收到明确警告 - ✅ 应用程序正常运行 --- ### 场景5:液位定时更新 #### 测试步骤 1. 确保设备已连接 2. 观察液位显示 3. 等待30秒 4. 检查液位是否更新 5. 查看日志 #### 预期结果 ``` 日志输出(每30秒): [INFO] 液位读取成功 - 1号:80%, 2号:75%, 3号:70% [INFO] 液位读取成功 - 1号:79%, 2号:74%, 3号:69% ... 界面显示: - 液位数值每30秒自动更新 - 无需用户操作 ``` #### 验证点 - ✅ 定时器正常工作 - ✅ 液位数据自动更新 - ✅ 无错误日志 - ✅ 界面实时刷新 --- ### 场景6:参数范围验证 #### 测试步骤 1. 进入系统设置 2. 尝试将参数增加到超过60 3. 尝试将参数减少到小于0 4. 观察结果 #### 预期结果 ``` 操作: - 点击 + 按钮多次 - 参数值增加到 60 后不再增加 - 点击 - 按钮多次 - 参数值减少到 0 后不再减少 界面显示: - 参数值始终在 0-60 范围内 - 按钮仍可点击但值不变 ``` #### 验证点 - ✅ 参数最大值限制为 60 - ✅ 参数最小值限制为 0 - ✅ 边界值处理正确 - ✅ 界面响应正常 --- ### 场景7:写入失败处理 #### 测试步骤 1. 设备已连接 2. 修改参数 3. 在保存过程中断开设备网络 4. 观察结果 #### 预期结果 ``` 日志输出: [INFO] 正在将参数写入设备... [ERROR] 写入设备参数失败: 连接超时 界面显示: - 弹出错误消息框:"保存失败: 写入设备失败: 连接超时" - 状态消息:"参数保存失败" ``` #### 验证点 - ✅ 错误被正确捕获 - ✅ 用户收到错误提示 - ✅ 应用程序不崩溃 - ✅ 可以重试操作 --- ### 场景8:断线重连 #### 测试步骤 1. 应用程序运行中,设备已连接 2. 断开设备网络 3. 等待10秒(心跳检测周期) 4. 恢复设备网络 5. 观察重连过程 #### 预期结果 ``` 日志输出: [WARNING] 心跳检测: 连接已断开,尝试重连... [INFO] 正在连接 Modbus TCP 设备: 192.168.1.10:502 [ERROR] Modbus TCP 连接失败 [WARNING] 检测到连接错误,尝试重新连接... ... [INFO] Modbus TCP 连接成功: 192.168.1.10:502 [INFO] Modbus TCP 设备已连接 界面显示: - 状态消息:"警告:设备连接断开" - 自动重连后:"系统就绪,设备已连接" ``` #### 验证点 - ✅ 断线被检测到 - ✅ 自动尝试重连 - ✅ 重连成功后恢复功能 - ✅ 界面状态正确更新 --- ### 场景9:批量参数修改 #### 测试步骤 1. 进入系统设置 2. 修改所有时间参数: - 首次喷水:2 → 3 - 沐浴1后喷水:2 → 4 - 沐浴2后喷水:2 → 5 - 沐浴3后喷水:2 → 6 - 喷沐浴露1:1 → 2 - 喷沐浴露2:1 → 3 - 喷沐浴露3:1 → 4 - 热风:5 → 7 - 冷风:2 → 3 - 紫外线:3 → 5 3. 点击保存 4. 验证所有参数 #### 预期结果 ``` 日志输出: [INFO] 本地参数已更新 - 首次喷水:3min, 沐浴1后:4min, 沐浴2后:5min, 沐浴3后:6min, 喷沐浴露1:2min, 喷沐浴露2:3min, 喷沐浴露3:4min, 冷风:3min, 热风:7min, 紫外线:5min [INFO] 正在将参数写入设备... [INFO] 参数已成功写入设备 界面显示: - 所有参数显示新值 - 保存成功提示 ``` #### 验证点 - ✅ 所有参数正确保存 - ✅ 批量写入成功 - ✅ 数据一致性 - ✅ 无数据丢失 --- ### 场景10:重启后参数持久化 #### 测试步骤 1. 修改参数并保存到设备 2. 关闭应用程序 3. 重新启动应用程序 4. 检查参数值 #### 预期结果 ``` 界面显示: - 参数值与修改后的值一致 - 从设备读取的值正确显示 ``` #### 验证点 - ✅ 设备参数持久化 - ✅ 重启后正确读取 - ✅ 数据一致性 - ✅ 无数据丢失 --- ## 性能测试 ### 测试1:读取性能 #### 测试方法 ```csharp var stopwatch = Stopwatch.StartNew(); await LoadDeviceParametersAsync(); stopwatch.Stop(); Console.WriteLine($"读取耗时: {stopwatch.ElapsedMilliseconds}ms"); ``` #### 预期结果 - 读取时间参数:< 100ms - 读取液位数据:< 300ms(3次读取) - 总耗时:< 500ms ### 测试2:写入性能 #### 测试方法 ```csharp var stopwatch = Stopwatch.StartNew(); await SaveParametersToDeviceAsync(); stopwatch.Stop(); Console.WriteLine($"写入耗时: {stopwatch.ElapsedMilliseconds}ms"); ``` #### 预期结果 - 写入11个寄存器:< 200ms ### 测试3:定时更新性能 #### 测试方法 - 运行应用程序1小时 - 监控 CPU 和内存使用 - 检查日志文件大小 #### 预期结果 - CPU 使用率:< 5% - 内存使用:稳定,无泄漏 - 日志文件:合理大小 --- ## 压力测试 ### 测试1:频繁读写 #### 测试方法 ```csharp for (int i = 0; i < 100; i++) { await LoadDeviceParametersAsync(); await SaveParametersToDeviceAsync(); } ``` #### 预期结果 - 所有操作成功 - 无错误或超时 - 数据一致性 ### 测试2:长时间运行 #### 测试方法 - 运行应用程序24小时 - 定期检查状态 - 记录所有异常 #### 预期结果 - 应用程序稳定运行 - 液位定时更新正常 - 无内存泄漏 - 无连接问题 --- ## 故障注入测试 ### 测试1:网络延迟 #### 测试方法 - 使用网络模拟工具增加延迟(100ms, 500ms, 1000ms) - 执行读写操作 - 观察超时处理 #### 预期结果 - 延迟 < 3000ms:操作成功 - 延迟 > 3000ms:超时错误,正确处理 ### 测试2:网络丢包 #### 测试方法 - 模拟 10%, 20%, 50% 丢包率 - 执行读写操作 - 观察重试机制 #### 预期结果 - 低丢包率:操作成功(可能需要重试) - 高丢包率:超时错误,正确处理 ### 测试3:设备无响应 #### 测试方法 - 设备连接但不响应请求 - 执行读写操作 - 观察超时处理 #### 预期结果 - 操作超时(3秒) - 错误被正确捕获 - 用户收到提示 --- ## 测试检查清单 ### 功能测试 - [ ] 初始化读取参数 - [ ] 初始化读取液位 - [ ] 修改参数 - [ ] 保存参数到设备 - [ ] 保存参数到本地 - [ ] 定时更新液位 - [ ] 参数范围验证 - [ ] 连接状态监控 ### 错误处理 - [ ] 连接失败处理 - [ ] 读取失败处理 - [ ] 写入失败处理 - [ ] 超时处理 - [ ] 断线重连 ### 性能测试 - [ ] 读取性能 - [ ] 写入性能 - [ ] 定时更新性能 - [ ] 长时间运行稳定性 ### 用户体验 - [ ] 界面响应速度 - [ ] 错误提示清晰 - [ ] 状态显示准确 - [ ] 操作流程顺畅 --- ## 测试报告模板 ``` 测试日期:____________________ 测试人员:____________________ 设备信息:____________________ 测试结果: 场景1:正常初始化流程 [ ] 通过 [ ] 失败 场景2:设备未连接 [ ] 通过 [ ] 失败 场景3:修改并保存参数(已连接)[ ] 通过 [ ] 失败 场景4:修改并保存参数(未连接)[ ] 通过 [ ] 失败 场景5:液位定时更新 [ ] 通过 [ ] 失败 场景6:参数范围验证 [ ] 通过 [ ] 失败 场景7:写入失败处理 [ ] 通过 [ ] 失败 场景8:断线重连 [ ] 通过 [ ] 失败 场景9:批量参数修改 [ ] 通过 [ ] 失败 场景10:重启后参数持久化 [ ] 通过 [ ] 失败 问题记录: 1. ___________________________________________ 2. ___________________________________________ 3. ___________________________________________ 建议: 1. ___________________________________________ 2. ___________________________________________ 3. ___________________________________________ 总体评价:[ ] 优秀 [ ] 良好 [ ] 合格 [ ] 不合格 ``` --- ## 常见问题排查 ### 问题1:无法连接设备 **排查步骤:** 1. ping 192.168.1.10 2. telnet 192.168.1.10 502 3. 检查防火墙设置 4. 检查设备 Modbus TCP 服务 ### 问题2:读取参数失败 **排查步骤:** 1. 使用 Modbus 测试工具验证地址 2. 检查从站 ID 是否正确 3. 查看详细错误日志 4. 确认寄存器地址范围 ### 问题3:写入参数失败 **排查步骤:** 1. 检查寄存器是否可写 2. 验证数据格式 3. 检查权限设置 4. 查看设备日志 ### 问题4:液位不更新 **排查步骤:** 1. 检查定时器是否启动 2. 查看错误日志 3. 验证液位寄存器地址 4. 检查设备连接状态 --- ## 总结 完成所有测试场景后,系统应该: - ✅ 稳定可靠 - ✅ 错误处理完善 - ✅ 性能满足要求 - ✅ 用户体验良好 - ✅ 适合生产环境部署