Files
Axi_Omron/docs/AxiOmron_PCBCheck_汇报文案.md
yunxiao.zhu 07841fe4fe 📝 docs(report): 添加 AI 编程汇报材料
* 添加面向非技术听众的完整汇报稿与页面文案
* 提供明亮风格 HTML 演示页及调试情景交互
* 加入本地 WPF 运行截图、代码对比与测试证据
2026-08-01 16:43:57 +08:00

268 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AxiOmron.PcbCheck 汇报文案
> 主题:3 个月,我从写 if-else 到 Vibe Coding<br>
> 项目:AxiOmron.PcbCheck / PCB 目检放行上位机<br>
> 建议时长:10 分钟<br>
> 使用方式:本文件按网页汇报的 9 个页面整理;“屏显文案”用于页面内容,“讲述提示”用于口头汇报。
---
## 01. 封面|3 个月,我从写 if-else 到 Vibe Coding
### 屏显文案
**3 个月,**<br>
**我从写 if-else**<br>
**到 Vibe Coding**
用 AI 协作搭建一套 PCB 目检放行上位机:把 PLC、双扫码、文件校验、安灯和追溯记录,收束为一条可解释的现场闭环。
- 产品形态:WPF 工业上位机
- 架构基座:.NET 8 / MVVM
- 核心结果:可追溯放行闭环
### 讲述提示
三个月前,我遇到类似需求时,第一反应通常是继续加 if-else:扫码成功怎么办、文件找不到怎么办、PLC 超时又怎么办。现在我更关注如何先把现场规则拆成状态、契约和异常边界,再借助 AI 快速实现与验证。
今天分享的不是一个单独页面,而是我如何用 AI 协作,逐步搭建一套 PCB 目检放行上位机。
---
## 02. 起点|让一块 PCB 安全地被放行
### 屏显文案
**不是做一个界面,**<br>
**而是让一块 PCB 安全地被放行。**
> “扫码成功、文件存在、PLC 收到信号——这些局部成功,如何组成一个真正可追溯的业务成功?”
| 关联对象 | 需要解决的问题 |
| --- | --- |
| PLC | PCB 到位触发、忙碌、结果码、放行与复位,都需要明确握手语义。 |
| 双扫码枪 | 两路 TCP 返回可能成功、失败或不一致,不能靠单一分支草率处理。 |
| 文件校验 | 根据条码查找产品 ID 文件;找不到、重试耗尽和连接异常是不同结果。 |
| 现场追溯 | 异常要能报警、记录、回看;工程师需要看到过程,而不仅是最终 OK / NG。 |
### 讲述提示
这个项目的难点不在于“连上设备”,而在于这些设备的局部结果如何组成一个可靠的业务结论。
例如,扫码成功不代表可以放行;PLC 写成功也不代表产线已经完成放行;文件删除更不能发生在错误的时机。我要解决的是一条完整的现场闭环。
---
## 03. 架构|先搭骨架,再接设备
### 屏显文案
**把易变的设备放在边缘,**<br>
**把稳定的业务流程留在中心。**
核心:`WorkflowHostedService`
后台状态机负责单板生命周期;WPF 只订阅运行态,不阻塞 UI。
| 分类 | 组件 | 职责 |
| --- | --- | --- |
| 触发 | Omron PLC | 到位、复位、结果码、放行应答 |
| 输入 | 双 TCP 扫码枪 | 并发触发、结果汇总与不一致处理 |
| 校验 | SFTP / 本地文件 | 按条码检索、重试、路径安全边界 |
| 可观察性 | 安灯、CSV、日志 | 异常通知、结果追溯、监控与设置 |
架构原则:
- 接口隔离设备实现
- 后台处理耗时 I/O
- 配置不写死在流程里
- UI 只展示状态
### 讲述提示
我的第一步不是先做漂亮界面,而是把每一类设备抽象成接口。这样 PLC、扫码枪、文件查找和安灯都能被替换为模拟实现,流程服务只关心业务规则。
这一层架构也让 AI 能更好地协作:我可以让它先沿接口和实现追踪调用链,再只改动目标边界,而不是在 UI 或设备代码里直接塞逻辑。
---
## 04. 核心流程|从 if-else 到状态机
### 屏显文案
**代码不再问“下一个 if 是什么”,**<br>
**而是问“当前 PCB 处于什么状态”。**
1. **到位触发**:忽略重复上升沿,防止同一块板流程重入。
2. **扫码与校验**:汇总双扫码,再根据条码检索产品 ID 文件。
3. **结果与放行**:写入结果码,发出放行脉冲,等待 PLC 业务应答。
4. **完成与追溯**:清状态、记录 CSV、刷新界面,等待下一块板。
关键规则:
- 扫码失败:安灯 + NG 放行
- 文件不存在:重试耗尽后 NG 放行
- 系统异常:故障锁存,不自动放行
- 收到 PLC 应答后,才执行可选清理
### 讲述提示
这就是我从 if-else 思维切换到状态机思维的关键点。每一种异常都不是额外补一段判断,而是状态机中明确的一条路径。
这样做的好处是,任何一个现场问题都可以回到三个问题:当前状态是什么?允许的下一步是什么?失败后应该如何恢复或锁存?
---
## 05. 搭建过程|从方案到可运行系统
### 屏显文案
**从方案到测试,**<br>
**每一层都先解决一个真实问题。**
| 时间 | 阶段 | 内容 |
| --- | --- | --- |
| 04·16 | 先把现场语言画出来 | 梳理通信角色、PLC 点位、结果码、异常策略和状态机,不急着进入代码。 |
| 04·17 | 初始化 WPF 工程 | 建立 MVVM、Host/DI、日志与配置,让界面与业务流程先有干净的边界。 |
| 04·19 | 补齐可运维能力 | 管理员解锁、SFTP 探活、扫码启动探活、CSV 结果记录相继落地。 |
| 05·17 | 重构主放行流程 | 接入双扫码判定,把扫码、查文件、告警、放行统一为单板工作流。 |
| 06·10 | 把联调变得可观察 | 补齐 TCP 扫码连接测试与日志,让通信问题可以被定位,而不是被猜测。 |
### 讲述提示
这个项目不是一次性把所有功能堆出来,而是按风险逐层搭建:先确定规则,再建立骨架,然后补齐运维能力,最后持续让通信和异常更可观察。
AI 在这里的作用,是加快每一个小闭环的实现和验证,而不是跳过业务设计。
---
## 06. 场景演示|一块 PCB 从到位到放行
### 屏显文案
**用一个可控的模拟流程,演示“从到位到放行”。**
流程:
1. PLC 检测到 PCB 到位
2. 双扫码枪返回条码
3. 产品 ID 文件校验
4. 写结果并等待放行应答
5. 写入追溯记录,回到空闲
关键判断:
> “PLC 写入成功”不代表产线已确认放行。只有收到 PLC 应答,才能进入后续清理和完成记录。
补充规则:
- 双扫码任一成功即可继续;两者不一致时保留诊断信息。
- 文件未找到会受控重试;通信或认证异常进入系统故障,而非误放行。
- 放行脉冲有时长与应答超时;清理动作默认关闭,避免误删现场依据。
### 现场演示动作
1. 点击网页上的“播放模拟流程”。
2. 随着每一步高亮,口头说明它对应的现场动作。
3. 在第 4 步强调:此时不是“写了放行位就结束”,而是等待 PLC 给出业务应答。
4. 到第 5 步说明:完成记录和文件清理都依赖这一确认条件。
### 讲述提示
我不会在汇报现场连接真实 PLC 或 SFTP,而是用模拟器展示主流程。这种方式既能稳定演示完整业务链路,也能清楚地区分“本地逻辑验证”与“真实现场验收”。
---
## 07. AI 编程案例|先问清楚何时可以删
### 屏显文案
**AI 的价值不是直接补一行 `Delete(file)`,**<br>
**而是先问清楚“何时可以删”。**
需求:配置可选启用;收到 PLC 放行应答后,删除本轮读取到的产品 ID 文件。
AI 协作过程:
1. 追踪 `扫码 → 文件匹配 → ReleasePermit → PlcAckRelease` 的调用链。
2. 明确 FINS 写入成功,只证明协议操作成功;不能等同于 PLC 完成业务应答。
3. 保存精确命中路径;等待应答;先清放行脉冲;再由本地或 SFTP Provider 负责安全删除。
4. 验证:应答成功删除;应答超时不删;越界路径拒绝;删除失败不回滚已确认放行。
AI 的三个贡献:
- **读懂陌生系统**:快速在配置、接口、后台服务、设备实现和测试之间建立调用链。
- **把自然语言变成契约**:把“放行后删除”翻译成前置条件、超时行为、默认开关和失败后果。
- **让异常可验证**:用 Fake PLC / Fake 文件服务覆盖关键分支,让现场风险先在可控环境暴露。
### 讲述提示
这个案例最能说明我对 AI 的使用方式发生了变化。以前我可能直接让 AI 写删除文件的代码;现在我会先要求它追踪整条流程,再一起确认动作的前置条件与失败边界。
AI 帮我缩短了理解陌生系统和实现测试的时间,但业务责任仍然在我这里:什么时候删、删谁、失败后如何处理,必须由我结合现场规则确认。
---
## 08. 学习路径|从看懂到解决
### 屏显文案
**学习不是囤教程,**<br>
**而是不断缩短“看懂”到“解决”的距离。**
1. **看 5 个视频**:只抓住 WPF、依赖注入、后台服务、设备通信的基础概念。
2. **拆 1 个项目**:沿着一块 PCB 的生命周期,理解配置、状态、接口和日志为何存在。
3. **自己搭一个**:从界面骨架到 PLC、扫码、文件校验,持续用 AI 做代码阅读和小步实现。
4. **解决真实问题**:把“PLC 应答后再删文件”落成可配置、可测试、可追溯的工程规则。
关键转变:
> 从“让 AI 帮我生成代码”,升级为“我能给 AI 足够明确的业务上下文,并验证它给出的工程边界”。
### 讲述提示
我并不是等到学会所有技术才开始做项目,而是在真实问题里逐步学习。视频帮助我建立术语,拆项目帮助我理解结构,自己实现帮助我建立手感,真实问题则迫使我理解生产边界。
---
## 09. 总结|从代码到工程交付
### 屏显文案
**从 if-else 到 Vibe Coding,**<br>
**改变的不是“谁来写代码”。**
而是我开始能把一个模糊的现场需求,拆成:
- 设备契约
- 状态机
- 异常边界
- 可验证的交付
| 边界 | 内容 |
| --- | --- |
| 已在本地覆盖 | 项目定向构建与工作流、文件相关测试可验证逻辑分支、接口隔离和异常行为。 |
| 仍需现场确认 | 真实 PLC 点位、SFTP 根目录与删除权限,必须在产线按实际设备与权限完成联调。 |
最后三点:
1. **技术深度**:不是“调用了多少 SDK”,而是能否说清状态、超时、失败与恢复。
2. **学习能力**:不是“看了多少教程”,而是能否把陌生系统拆成可验证的问题。
3. **业务结合**:不是“做了一个界面”,而是让现场每一次放行都可解释、可追溯。
### 收尾讲述
AI 让开发速度更快,但它没有替代工程判断。真正的成长,是我开始能定义问题、判断边界、验证结果,并把一个模糊需求交付成可靠的现场流程。
谢谢。
---
## 汇报现场速记
- 用方向键或右下角“上一页 / 下一页”控制网页汇报。
- 第 6 页点击“播放模拟流程”,演示完整闭环。
- 不演示真实 PLC、真实 SFTP 或真实删除动作。
- 不展示具体现场 IP、账号、密码、完整生产路径或未确认的 PLC 点位。
- 被问到“是否现场验证”时,回答:本地逻辑与定向测试可验证;真实设备和权限仍需现场联调验收。