Appearance
典型技术问题速查(V10)
本站现在有两层问题入口:
text
/problem-index
= 第一层:这次到底属于 Read-Only / MicroPatch / BehaviorPatch / Regression / Discovery 哪条路线?
本页
= 第二层:已经知道是 Binding、串口、协议、存储、资源或性能问题,具体先查什么?如果你连任务类型都不确定,先回到 按问题找方案。本页不再重复整套 V10 路由。
1. WPF Binding 不生效
优先检查:
DataContext是否是预期对象;Binding Path是否拼写正确;- 属性变化是否有通知;
Mode / UpdateSourceTrigger是否符合输入方向;- Command
CanExecute是否让按钮处于预期状态; - 更新是否发生在 UI 线程;
- 是否绑定到了旧 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决定走哪条任务路线,本页只帮助你在已知技术方向里更快找到第一组高价值检查点。