# vision-station **Repository Path**: xinxin2017/vision-station ## Basic Information - **Project Name**: vision-station - **Description**: No description available - **Primary Language**: C# - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-14 - **Last Updated**: 2026-09-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 视觉检测站 v1.1.0 在线外观检测工位上位机:工件到位 → 触发拍照 → OK/NG → NG 踢废确认 → 条码绑定结果写入 SQLite。默认仿真 PLC 与仿真相机;`config/machine.json` 可将 IO 切到 Modbus TCP。 当前版本:**v1.1.0**。版本号在仓库根目录 `Directory.Build.props`,窗口标题与主界面同步显示。v1.1.0 把扫描周期放到独立线程,运行日志写入 `logs/`,追溯增加配方/工位/人员/班次并可导出 CSV。 软件急停是联锁;电气急停回路由现场硬件完成,本程序只读急停输入并锁存。 使用说明、知识点与工程师账号见 Word 文档:`docs/视觉检测站-使用说明与知识点.docx`。 ## 运行 - Visual Studio:打开 `InspectHost.sln`,F5 - 命令行:`dotnet run --project src\InspectHost.App` 操作顺序:复位(如有故障)→ 启动。仿真会按配方间隔送来料,也可点「仿真到位」。NG 须踢废到位确认后才接收下一件。暂停保持当前工步。急停立即停触发、收踢废,须复位后再启动。已写入的检测结果不删除。 工程师账号:`engineer` / 口令 `2468`(`config/machine.json` 的 `engineerUser`、`engineerPin`)。操作员不能改配方、超时、踢废脉宽,也不能点动踢废。 数据:`data/inspect.db`(条码、判定、缺陷、节拍、配方、工位、操作者、班次)。运行日志:`logs/host-yyyyMMdd.log`。追溯页可导出 CSV。机台与配方在 `config/`。 ## 状态与工步 | 模式 | 说明 | |------|------| | 空闲 | 允许启动(联锁满足) | | 自动 | 扫描周期推进工步 | | 暂停 | 保持当前工步;等待结果时仍收取判定 | | 急停 | 输出清零并锁存,需复位 | | 故障 | 相机超时、踢废确认超时或运行中通讯中断 | 工步:等待到位 → 读条码 → 触发相机(上升沿,到位未消失前禁止二次触发)→ 等待结果 → OK 放行 / NG 踢废并确认 → 写追溯。 启动联锁:PLC 通讯健康、相机 Ready、配方已加载、非急停、无未复位故障、踢废气缸在原位。 ## 扫描周期 独立后台线程 `InspectScan`,约 50 ms,固定顺序:读 IO/相机状态 → 联锁 → 自动工步 → 写输出。界面定时器只拉取快照,不调用 `Scan`。超周期最多约 2 秒写一次警告日志。单元测试仍可手动 `Scan()`,不要自动 `StartScan()`。 ## 站间寄存器(Holding Register) `backend` 为 `Modbus` 时使用。办公室可 `startLocalSlave: true` 起本机从站。 | 地址 | 名称 | 方向 | 说明 | |------|------|------|------| | 0 | Heartbeat | 上位机写 | 心跳计数 | | 1 | HeartbeatEcho | 从站回写 | 与 HR0 一致视为链路正常 | | 2 | Status | 上位机写 | bit0 Ready / bit1 Busy / bit2 Fault | | 10 | Present | 从站 | 到位 | | 11 | RejectConfirm | 从站 | 踢废到位确认 | | 12 | PartPresent | 从站 | 有料 | | 13 | EStop | 从站 | 硬件急停 | | 20 | Trigger | 上位机写 | 相机触发 | | 21 | Reject | 上位机写 | 踢废 | | 22 | Pass | 上位机写 | 放行 | | 30 | LastJudgement | 上位机写 | 0 无 / 1 OK / 2 NG | 默认:`127.0.0.1:1502`,UnitId = 1。 ## 替换真实 IO / 相机 实现 `IStationIo`(读到位/踢废确认/急停,写触发/踢废/放行/心跳)或 `IVisionSystem`(`Trigger`、`TryGetResult`、`IsReady`),在 `MachineRuntime.Create` 处替换 `SimulatedStationIo` / `SimulatedVision`。不在本仓库接入 Halcon、VisionPro 或海康 SDK。 ## 工程结构 ``` InspectHost.sln src/InspectHost.Core/ 扫描周期、工步、联锁、仿真与 Modbus IO、SQLite src/InspectHost.App/ 工控主屏 tests/InspectHost.Tests/ docs/视觉检测站-使用说明与知识点.docx config/machine.json config/recipes/default.json ``` ## 测试 ``` dotnet test InspectHost.sln ```