Skip to content

典型技术问题速查(V10)

内容类型:技术症状索引难度:基础到进阶适合:已经知道大概是哪类技术问题,想快速看检查点的人阅读时间:约 8 分钟

本站现在有两层问题入口:

text
/problem-index
= 第一层:这次到底属于 Read-Only / MicroPatch / BehaviorPatch / Regression / Discovery 哪条路线?

本页
= 第二层:已经知道是 Binding、串口、协议、存储、资源或性能问题,具体先查什么?

如果你连任务类型都不确定,先回到 按问题找方案。本页不再重复整套 V10 路由。

1. WPF Binding 不生效

优先检查:

  1. DataContext 是否是预期对象;
  2. Binding Path 是否拼写正确;
  3. 属性变化是否有通知;
  4. Mode / UpdateSourceTrigger 是否符合输入方向;
  5. Command CanExecute 是否让按钮处于预期状态;
  6. 更新是否发生在 UI 线程;
  7. 是否绑定到了旧 ViewModel / 旧实例。

如果只是文字/样式错误 → MicroPatch。 如果 UI 状态与业务状态不一致 → 继续查状态 Owner,而不是只改 XAML。

入口:WPF 上位机 AI 开发流程

2. UI 卡顿、刷新越来越慢

先量化:

text
采样率
UIRefreshRate
可见点数/日志行数
Dispatcher 调用频率
CPU
Working Set
运行多久后开始变慢

重点查:

  • 每个采样点都进 Dispatcher;
  • 曲线/日志/ObservableCollection 无限增长;
  • UI 线程同步 IO/通信/解析;
  • Timer 重入;
  • 高频错误导致日志风暴;
  • 每帧大量对象分配。

不要先换图表库或“优化整个 WPF”。

入口:性能与长稳诊断

3. 串口完全收不到数据

按层检查:

text
Physical / Driver
→ Port Parameters
→ Open State
→ RX Evidence
→ Protocol Parse
→ UI Display

先确认:

  • COM 口是否正确、是否被其它进程占用;
  • 波特率、数据位、停止位、校验位;
  • 端口是否真的 Open;
  • 有没有原始 RX;
  • 是“没收到”还是“收到后解析丢弃”;
  • UI 是否只是没有刷新。

入口:串口/TCP 通信模板

4. TCP 偶发断开 / timeout

不要自动归因“网络抖动”。区分:

text
Transport
Protocol
Application State
Session Lifecycle

保留:

  • Connect/Disconnect 时间;
  • TX/RX;
  • Session 标识;
  • timeout 前最后一条正常事件;
  • 重连前后状态;
  • 是否存在旧 read / 第二 session。

入口:日志与时间线诊断 + 通信证据包

5. 半包 / 粘包 / 长度异常

先确认当前协议是否真的有“帧边界”概念。

对于自定义 TCP 二进制协议,常检查:

text
Header
Length
Payload
Checksum
Frame boundary
Buffer carry-over

对于 SCPI 文本、厂商 SDK 等,不要机械套“半包/粘包/CRC”模板。

入口:通信与协议设计

6. CRC、校验、字节序、字段偏移不确定

需要至少两类证据:

text
协议原文/批准定义
+ 正常样例报文和期望值

必要时再补多个样例反推。

不要只凭常见 CRC 名称或寄存器习惯猜:

  • polynomial;
  • init;
  • refin/refout;
  • xorout;
  • 高低字节顺序;
  • 字段 offset;
  • signed/unsigned;
  • scaling。

7. 原始值、换算值、日志值对不上

固定检查:

text
RawValue
EngineeringValue
Conversion
ThresholdBasis
Aggregation
LoggedUnit

尤其注意:设备原始量、探头/比例换算、UI 格式化、阈值判定和 MES 输出可能处于不同层。

入口:测量值语义

8. “只改一个数字”但前后端不一致

先判断:

text
DisplayOnly
DomainConstraint
ExperimentalChange

正式业务约束只沿固定链检查:

text
UI
→ Domain/Application
→ MES/API
→ DeviceApply
→ FocusedTests

入口:业务约束跨层传播

9. 文件/数据库数据丢失或不完整

先确认:

  • Source of Truth;
  • 什么时候认为“已保存”;
  • flush/commit/close;
  • Stop 时 drain 还是 cancel;
  • 多线程 writer ownership;
  • 文件替换是否原子;
  • schema/version 兼容;
  • 保存失败的业务后果;
  • UI 显示数据是否被误当正式历史。

入口:数据存储与追溯设计

10. 第二次启动失败 / COM 口仍占用

沿生命周期查:

text
Owner
Create
Start
Stop
Cancellation
Dispose
Recreate

重点看:

  • 旧 read 是否退出;
  • Timer 是否仍触发;
  • 事件是否重复订阅;
  • writer 是否还在 flush;
  • 重连时是否创建第二 session;
  • 页面关闭和应用退出是否走了不同释放路径。

入口:线程、设备会话与资源生命周期

11. Stop 点了以后界面假死

先建 Stop 时间线:

text
StopRequested
→ cancel sent
→ producer stopped?
→ pending request?
→ writer drain?
→ device close?
→ UI state updated?

不要看到“Stop 慢”就先把 await 改成 Task.Run。真正问题可能是取消没有传播、IO 没有超时、设备调用无法中断或 drain 策略本身要求等待。

入口:性能与长稳诊断 + 资源生命周期

12. 日志很多,但看不出根因

不要从最后一条 Error 倒推整个故事。

text
收窄时间窗
→ 多源时间对齐
→ 第一个异常点
→ 看异常前 3–10 个关键事件
→ Evidence / Inference / Unknown

入口:日志与时间线诊断

13. 操作员只看到英文错误码 / 堆栈

分成:

text
OperatorSummary
= 发生了什么 + 当前后果 + 下一步怎么办

DiagnosticDetail
= 原始协议 + 错误码 + 堆栈 + 时间线

不要为了界面简洁把底层诊断证据一起删掉。

入口:操作员界面与维护诊断

14. 报警发生后流程到底要不要停

“报警”不是完整需求。

必须明确:

text
Information
Advisory
AlarmOnly
InterlockFault

再定义 Trigger / Condition / Action / Reset / Record / NonGoals。

入口:行为与告警语义

15. 构建被 E-SafeNet / DLP 阻断

已知项目不要每次重新撞相同失败:

text
HostDev verify
→ affected-project preclean
→ 必要时受影响 obj cleanup
→ external artifacts

确认是环境污染时写 EnvironmentBlocked,不要因为构建工具异常去修改业务代码。

入口:加密环境注意事项

16. 真实设备验证涉及高压 / 运动 / 阀门

默认:

text
HardwareAction: ForbiddenByDefault

优先 Fake / Replay / 软件侧验证。需要改变真机状态时由人工授权并保持 HITL;未执行就写 HardwarePending

入口:真实设备操作安全

17. 还是不知道这是哪类问题

不要继续在本页技术分类里猜。

回到第一层入口:按问题找方案(V10)

一句话原则

problem-index 决定走哪条任务路线,本页只帮助你在已知技术方向里更快找到第一组高价值检查点。

别来无恙 · C# 上位机 AI 实战站 · 从零到交付 · QQ 群:1016188499