Files
petwash/系统参数读写测试指南.md
GukSang.Jin 9c66b6cd82
2026-03-03 16:55:02 +08:00

12 KiB
Raw Blame History

系统参数读写功能测试指南

测试环境准备

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
    • 喷沐浴露11 → 2
    • 喷沐浴露21 → 3
    • 喷沐浴露31 → 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读取性能

测试方法

var stopwatch = Stopwatch.StartNew();
await LoadDeviceParametersAsync();
stopwatch.Stop();
Console.WriteLine($"读取耗时: {stopwatch.ElapsedMilliseconds}ms");

预期结果

  • 读取时间参数:< 100ms
  • 读取液位数据:< 300ms3次读取
  • 总耗时:< 500ms

测试2写入性能

测试方法

var stopwatch = Stopwatch.StartNew();
await SaveParametersToDeviceAsync();
stopwatch.Stop();
Console.WriteLine($"写入耗时: {stopwatch.ElapsedMilliseconds}ms");

预期结果

  • 写入11个寄存器< 200ms

测试3定时更新性能

测试方法

  • 运行应用程序1小时
  • 监控 CPU 和内存使用
  • 检查日志文件大小

预期结果

  • CPU 使用率:< 5%
  • 内存使用:稳定,无泄漏
  • 日志文件:合理大小

压力测试

测试1频繁读写

测试方法

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. 检查设备连接状态

总结

完成所有测试场景后,系统应该:

  • 稳定可靠
  • 错误处理完善
  • 性能满足要求
  • 用户体验良好
  • 适合生产环境部署