AI PROGRAMMING · FIELD CASE

3 MONTHS · ONE REAL PROJECT

从写 if-else
到 Vibe Coding

我如何用 AI 搭建一套 PCB 目检放行上位机,以及普通人怎样上手、调试和避坑。

一段真实的 AI 编程实践01 / 12

01 / THE FIRST REQUEST

最开始,我只想让它
先跑起来。

“我需要写一个程序:PCB 到位后扫码,根据条码检查文件是否存在,再把结果返回给 PLC。”

这就是《开发流程.txt》里的最初版本:目标很清楚,但工程边界还没有被说出来。

01PCB 到位后开始处理收到触发,进入本轮任务。
02读取一个条码拿到 PCB 身份信息。
03检查对应文件根据条码查找指定文件。
04文件存在显示正常给出 OK 结果。
05文件不存在显示异常给出 NG 结果。
06页面显示当前状态看到条码、结果和日志。
07保存最近处理记录之后可以回看过程。
08先使用模拟数据不一开始连接真实设备。
09模拟正常、异常、故障页面提供可控演示入口。
初版需求:先把业务主线讲清楚02 / 12

02 / ASK BEFORE BUILDING

真正开始写代码前,
我先问:还缺什么?

“还需要哪些信息才能开始写程序?”

这一步把“能不能写”变成“哪些事实还没有确认”。

01 · PLC触发和握手怎么定义?

型号、协议、点位、保持/脉冲、复位、应答、超时和异常恢复。

02 · SCANNERS两把扫码枪怎么返回?

IP、端口、通信角色、结束符、编码、超时、双枪关系和断线行为。

03 · FILE RULES什么样的文件算通过?

条码格式、文件名规则、精确/模糊匹配、目录类型、空文件和正在写入的处理。

04 · APP & RECORDS程序要怎样被使用和追溯?

界面、配置、日志、记录、权限、模拟入口、部署方式和是否需要数据库。

好的协作不是马上给答案,而是先把问题问完整03 / 12

03 / TURN QUESTIONS INTO CONTRACTS

需求不再只是“做什么”,
还要说清楚“边界在哪里”。

PLC CONTRACT到位、复位、结果、应答

定义一轮任务什么时候开始、什么时候结束,以及长保持信号如何避免重复触发。

SCANNER CONTRACT双路并发、超时、报文边界

不把一次 TCP Receive 想当然地当成完整条码,明确无结束符和迟到结果的处理。

FILE CONTRACT路径安全、结果分类

把条码清洗、文件存在、目录不可访问和路径越界区分成可追踪的结果。

APP CONTRACT状态可见、过程可回看

把设备状态、当前任务、日志、统计和模拟场景放进可观察的界面闭环。

功能描述→条件边界→失败策略→验收证据
每补充一个边界,现场就少一个靠猜的地方04 / 12

04 / THE COMPLETE PROJECT PLAN

对话的终点,
是一份可以执行的计划。

01 · GOAL目标

让 PCB 从到位、扫码、文件校验到 PLC 结果反馈,形成一条可解释、可追溯的业务闭环。

02 · WORKFLOW流程

到位触发 → 双枪扫描 → 条码校验 → 文件判断 → 结果保持 → 应答/复位 → 记录完成。

03 · ARCHITECTURE架构

当前项目落地为 .NET 8 + WPF;设备通信、流程编排、界面状态和配置日志保持清晰边界。

04 · ACCEPTANCE测试与验收

单元测试和 Fake 设备先验证逻辑,再用真实 PLC、扫描枪和文件服务完成现场联调。

计划的价值:把“我想要一个程序”翻译成目标、状态、接口、阶段、测试和交付门槛。

完整计划不是凭空出现的,而是对话逐项补齐后的结果05 / 12

05 / BUILD IN RISK ORDER

计划被拆成七个小闭环,
每一步都有可以验证的产物。

01需求与协议确认

点位、握手、报文、结果码和文件规则。

02项目骨架

WPF、配置、日志、依赖注入和基础状态。

03PLC 通信

读写、超时、断线、重连和模拟接口。

04双扫描枪

并发触发、无结束符、首个有效结果。

05流程编排

任务去重、文件安全、结果保持和恢复。

06状态界面

设备、任务、统计、日志和操作权限。

07测试与交付

单测、Fake 流程、异常测试和现场验收。

计划不是一次写死:事实确认后可以调整实现,但每次调整都要回到边界、证据和验收标准。

AI 加快每个小闭环,我负责决定闭环是否成立06 / 12

06 / HOW HARD IS IT

上手不难,
难的是从“能跑”走到“可靠”。

门槛低

做出原型

会描述需求、会运行项目,就能很快看到第一个结果。

需要方法

做到可用

要会拆小任务、补充上下文,并检查 AI 实际改了什么。

仍需专业判断

做到可靠

需要理解业务风险,并验证断网、超时和错误输入等异常场景。

有代码基础,上手会更快;没有代码基础,也可以从小工具开始07 / 12

07 / THE PROJECT RUNS

这不是概念图,
程序真的运行起来了。

AxiOmron PCBCheck WPF 主界面,展示 PLC、扫码枪、文件校验、安灯、流程状态与运行日志
真实 WPF 运行界面
设备状态、当前条码、流程和日志集中展示本地展示环境 · 未连接真实设备
一块 PCB 的 5 步旅程
01PLC 通知 PCB 到位START
02两把扫码枪读取条码SCAN
03根据条码检查产品文件CHECK
04发送结果并等待确认ACK
05保存记录并回到空闲DONE
运行界面是本地证据,不等同于真实 PLC / SFTP 现场验收08 / 12

08 / A REAL DEBUGGING CASE

信号写成功了,
为什么文件不能删?

最初想法 · 有风险
await WriteReleaseAsync();
await DeleteFileAsync();
调试后 · 等待业务确认
await WriteReleaseAsync();
if (ackReceived)
    await DeleteFileAsync();

LOG 放行信号写入成功 → 等待 PLC 确认超时

像邮件显示“发送成功”,不代表对方已经阅读并执行。

调试情景演示等待选择
点击上方按钮

比较两种结果

PLC 业务结果待确认
产品文件保持不动
调试结论:协议成功 ≠ 业务完成09 / 12

09 / DEBUG WITH AI

程序出错时,
我用这套五步调试法。

01

先复现

说明做了什么、期望什么、实际发生什么。

02

给证据

提供报错、日志、配置和最近的修改。

03

讲流程

先让 AI 解释调用过程,不急着修改。

04

小步改

一次只处理一个原因,修改后立即运行。

05

正反测

既测试成功,也测试超时、断网和错误输入。

我的常用提示:“先不要改代码。请根据日志找到调用流程,列出最可能的三个原因,以及如何逐个验证。”
dotnet test · targeted3 PASSED · 666 ms
PASS收到 PLC 确认且开关开启 → 删除文件
PASS等待 PLC 确认超时 → 保留文件
PASS删除功能开关关闭 → 保留文件
证据越完整,AI 越不容易靠猜10 / 12

10 / BOUNDARIES & ACCEPTANCE

Vibe Coding 很快,
但这些不能省。

01

任务要拆小

每一步都应该能运行、能观察、能撤回。

02

修改要看懂

至少确认改了哪些文件、为什么改、影响到哪里。

03

模拟不等于现场

Fake 设备只能先验证逻辑,不能替代真实 PLC、扫描枪和文件服务。

04

高风险动作默认关闭

删除、付款、放行等动作必须有明确条件和可控开关。

异常可恢复

断线、超时、目录不可访问,都要有状态、日志和恢复策略。

过程可追溯

每一轮任务都能回看输入、判断、结果和失败原因。

现场才算验收

真实点位、通信边界、权限和连续生产稳定性必须现场确认。

交付门槛:本地构建与测试通过只是软件证据;真实设备和现场权限通过,才是生产验收。
AI 可以给建议,但业务责任和最终判断仍然属于人11 / 12

11 / TAKEAWAY

从一句话需求,
到可验证的完整计划。

AI 没有替我完成工程判断,而是帮我更快地提问、拆解、实现和验证,最后把一个模糊需求变成能运行、能追溯、知道边界的项目。

会提问把需求里的空白和风险问出来
会拆解把自然语言变成流程、阶段和验收标准
会验证把本地证据与真实现场验收分开