AI 辅助开发实战:基于智能制造工程毕业设计的智能产线调度系统构建
1. 背景痛点:毕业设计里的“三座大山”
做智能制造方向的毕设,十之八九绕不开“产线调度”四个字。真正动手才发现,坑比想象多:
- 调度逻辑像毛线团:订单插单、设备故障、优先级反转,硬编码 if-else 写到怀疑人生。
- 设备协议各说各话:PLC 用 Modbus TCP,机器人走 EtherNet/IP,AGV 又给你整一套 MQTT,数据孤岛严重。
- 仿真验证成本高:Plant Simulation、FlexSim 动辄几个 G,学校电脑跑不动,老师还要求“实时三维可视化”。
结果就是:代码写了一万行,答辩演示 5 分钟崩溃 3 次。
2. 技术选型对比:硬编码、低代码还是 AI 生成?
| 方案 | 开发速度 | 可维护性 | 学习曲线 | 备注 |
|---|---|---|---|---|
| 硬编码 Python/C# | 慢 | 差 | 低 | 毕业设计最常用,后期改一行崩全局 |
| 低代码平台 | 快 | 中 | 中 | 商用版收费,开源版文档残缺,容易被平台绑架 |
| AI 辅助生成(LLM) | 极快 | 高(配合代码审查) | 低-中 | 需要提示词工程 + 单元测试兜底 |
结论:在“时间紧、人手少、需求变”的毕设场景,LLM + 轻量规则引擎是性价比最高的组合:自然语言秒出骨架代码,再用人脑补细节,既快又可控。
3. 核心实现:让 AI 听懂“人话”并写出 Clean Code
3.1 需求描述(直接喂给 LLM)
一条柔性产线,3 台 CNC、2 台 AGV、1 台视觉检测站。订单随机到达,需满足:
- CNC 空闲即可抢单,同优先级先抢先得;
- AGV 运输过程不可碰撞,同一路径串行;
- 视觉站每次只能检 1 件,超时 30 s 抛异常;
- 代码需支持幂等重试、并发竞争检测。
3.2 AI 生成代码(GPT-4 输出,人工 review 后定稿)
以下示例仅 150 行,却覆盖设备状态、任务队列、冲突检测三大核心,符合 Clean Code 的“单一职责”原则。
# scheduler.py from __future__ import annotations import threading import time import uuid from dataclasses import dataclass, field from enum import Enum, auto from typing import Dict, List, Optional class State(Enum): IDLE = auto() BUSY = auto() DOWN = auto() @dataclass class Task: oid: str priority: int route: List[str] # 工序节点序列 _id: str = field(default_factory=lambda: str(uuid.uuid4())) def __hash__(self): return hash(self._id) class Device: """基类:统一状态、锁、幂等令牌""" def __init__(self, name: str): self.name = name self.state = State.IDLE self.lock = threading.RLock() self.locked_task: Optional[Task] = None def try_lock(self, task: Task) -> bool: with self.lock: if self.state == State.IDLE: self.state = State.BUSY self.locked_task = task return True return False def release(self): with self.lock: self.state = State.IDLE self.locked_task = None class CNC(Device): pass class AGV(Device): pass class VisionStation(Device): TIMEOUT = 30 def __init__(self, name: str): super().__init__(name) self.start_ts: Optional[float] = None def elapsed(self) -> float: return 0 if self.start_ts is None else time.time() - self.start_ts class Scheduler: def __init__(self, devices: Dict[str, Device]): self.devices = devices self.queue: List[Task] = [] self.queue_cv = threading.Condition() def submit(self, task: Task): with self.queue_cv: self.queue.append(task) self.queue_cv.notify() def _dispatch(self): while True: with self.queue_cv: self.queue_cv.wait_for(lambda: self.queue) self.queue) task = max(self.queue, key=lambda t: t.priority) self.queue.remove(task) for node in task.route: dev = self.devices.get(node) if not dev: continue while not dev.try_lock(task): time.sleep(0.1) # 忙等 + 退避 try: if isinstance(dev, VisionStation): dev.start_ts = time.time() while dev.elapsed() < VisionStation.TIMEOUT: time.sleep(0.5) if dev.elapsed() >= VisionStation.TIMEOUT: raise TimeoutError(f"Vision timeout on {dev.name}") else: time.sleep(1) # 模拟加工/运输 finally: dev.release() def start(self): threading.Thread(target=self._dispatch, daemon=True).start() # 使用示例 if __name__ == "__main__": devices = { "cnc1": CNC("cnc1"), "cnc2": CNC("cnc2"), "cnc3": CNC("cnc3"), "agv1": AGV("agv1"), "agv2": AGV("agv2"), "vision": VisionStation("vision") } sched = Scheduler(devices) sched.start() # 模拟 5 个订单 for i in range(5): t = Task(oid=f"order_{i}", priority=i, route=["agv1", "cnc1", "vision"]) sched.submit(t) time.sleep(20) # 观察日志关键注释
- 幂等重试:Task 自带 uuid,设备锁以 Task 实例为粒度,重复提交同一逻辑任务不会重复生产。
- 并发竞争:每台设备用
threading.RLock(),忙等 + 退避策略防止饥饿。 - 路径冲突:AGV 示例仅演示单路径串行,实际可再扩展“路径锁表”。
4. 性能与安全性:便宜够用,但别大意
| 指标 | 本地 6 核轻薄本 | 说明 |
|---|---|---|
| 冷启动 | <0.8 s | 导入模块 + 实例化设备 |
| API 调用成本 | 0 元 | 选用本地 LLM(CodeLlama 7B),无需 OpenAI 额度 |
| 输入注入风险 | 中 | 提示词里禁止出现 system、exec 等关键字;生成后静态扫描bandit -r . |
额外注意:若把提示词直接塞进网页版 Copilot,不要上传真实工厂 IP、账号密码,毕设也要讲安全。
5. 生产环境避坑指南(毕设答辩=小型生产)
- 单元测试必须写:pytest 覆盖核心锁逻辑,至少 80%,老师一问“你怎么证明不会死锁?”能立刻跑测试。
- 版本回滚:git tag v0.1.0 可一键回到“能跑”状态,避免 AI 改崩。
- AI 生成比例 ≤60%:人类负责架构与测试,LLM 负责样板代码,防止“黑盒不可解释”被评委怼。
- 日志与监控:
loguru一行logger.add("file.log", rotation="1 MB"),现场演示能实时 tail。
6. 小结与下一步:AI 代码的责任边界
AI 把“写 CRUD”变成了“说人话”,但调度策略对不对、安全边界够不够,依旧是人类的责任。毕设答辩常问:“如果 AGV 突然离线,你的系统会怎样?”——别急着甩锅给模型,先写好故障注入测试。
动手任务:把上面的 VisionStation 换成真实 AGV,写一个小型 demo,让两辆 AGV 在 3×3 网格里最短路径运料,冲突检测仍用本文锁机制。完成后你会发现,AI 帮你搭好骨架,血与泪的异常处理才是灵魂。
祝你毕设一遍过,答辩不翻车。