从零打造 C# 工业视觉检测系统(十五):项目打包部署与进阶展望
从零打造 C# 工业视觉检测系统十五项目打包部署与进阶展望系列标签C#部署Inno SetupMES工业 4.0架构升级本文目标掌握 WinForms 项目打包发布了解工业视觉的进阶方向一、前言历时 15 篇文章我们从零搭建了一套完整的 C# 工业视觉检测系统。本文作为系列收官将讲解如何将项目打包为可安装的软件代码架构的复盘与重构建议工业视觉技术的进阶方向二、项目打包发布2.1 Visual Studio 发布右键项目 →发布选择发布目标文件夹配置部署模式框架依赖目标机器需安装 .NET Framework 4.7.2或独立部署体积大但无需安装运行时2.2 依赖项整理确保输出目录包含输出目录/ ├── 在线相机检测模板.exe ├── Algorithm.dll # 算法库 ├── MvCamCtrl.Net.dll # 海康 SDK ├── config.json # 配置文件 ├── SunnyUI.dll # UI 库 ├── EPPlus.dll # Excel 库 ├── NModbus4.dll # Modbus 库 ├── Newtonsoft.Json.dll # JSON 库 ├── MySql.Data.dll # MySQL 驱动 ├── System.Data.SQLite.dll # SQLite 驱动 └── ... 其他依赖2.3 Inno Setup 安装包制作Inno Setup 是免费的安装包制作工具脚本示例[Setup] AppName检测系统 AppVersion1.0 DefaultDirName{pf}\视觉检测系统 OutputDir. OutputBaseFilenameDetectSystem_Setup [Files] Source: bin\Release\*; DestDir: {app}; Flags: ignoreversion recursesubdirs [Icons] Name: {group}\检测系统; Filename: {app}\检测系统.exe Name: {commondesktop}\检测系统; Filename: {app}\检测系统.exe [Run] Filename: {app}\检测系统.exe; Description: 立即运行; Flags: nowait postinstall三、架构复盘与重构建议3.1 当前架构的优点模块化各功能独立成 Form职责清晰可扩展工厂模式支持多数据库切换配置化JSON 配置文件便于现场调整3.2 可改进之处当前实现改进方案收益SqlHelper静态类依赖注入 接口便于单元测试全局Config静态字段强类型配置类编译期检查直接在 UI 中调用算法引入 Service 层便于算法替换单线程检测循环生产者-消费者队列提升吞吐量3.3 分层架构建议┌─────────────────────────────────────┐ │ Presentation 层 │ │ MainForm / RunningForm / ... │ ├─────────────────────────────────────┤ │ Service 层 │ │ DetectService / ConfigService │ ├─────────────────────────────────────┤ │ Repository 层 │ │ IDatabaseProvider / SqlHelper │ ├─────────────────────────────────────┤ │ Infrastructure 层 │ │ CameraSDK / SerialPort / Algorithm │ └─────────────────────────────────────┘四、进阶方向4.1 MES 系统对接将检测数据实时上传至 MES制造执行系统// 检测完成后上报 MESpublicvoidReportToMES(SlugStructresult){varmesDatanew{stationIdSTATION_01,productIdConfig.name,lengthresult.length,widthresult.width,isOkresult.is_qualified,timestampDateTime.Now};// HTTP POST 到 MES 接口// var json JsonConvert.SerializeObject(mesData);// httpClient.PostAsync(mesUrl, new StringContent(json));}4.2 数据上云使用 MQTT 协议将数据推送至阿里云 IoT / 华为云 IoT云端大屏实时展示产线状态大数据分析预测设备故障4.3 深度学习升级从传统图像处理升级到 YOLO / Faster R-CNN 目标检测缺陷检测划痕、凹坑、脏污的 AI 识别OCR 识别产品编号、日期码的自动读取4.4 双机热备关键产线不能停可部署主备两套检测系统主机故障时备机自动接管共享触发信号和剔除控制数据同步至同一数据库五、系列知识图谱工业视觉检测系统 ├── UI 层 │ ├── WinForms SunnyUI │ ├── TabControl 子窗体嵌入 │ └── 窗体自适应布局 ├── 视觉层 │ ├── 海康 MVS SDK │ ├── 相机枚举/连接/取流 │ ├── IntPtr → Bitmap 转换 │ └── 比例尺标定 ├── 算法层 │ ├── P/Invoke 调用 C DLL │ ├── SlugStruct 数据传递 │ └── ONNX Runtime 部署 ├── 通信层 │ ├── SerialPort 串口编程 │ ├── Modbus RTU 协议 │ └── PLC/继电器控制 ├── 数据层 │ ├── 工厂模式三库切换 │ ├── ADO.NET 数据访问 │ └── EPPlus Excel 导出 └── 架构层 ├── 单例/工厂模式 ├── Task 异步编程 ├── JSON 配置系统 └── 异常处理与性能优化六、学习资源推荐方向推荐资源C# WinForms《Windows Forms Programming》工业相机海康机器人官方文档、MVS SDK 示例OpenCV《学习 OpenCV 3》、官方文档深度学习李沐《动手学深度学习》、YOLO 官方仓库ModbusModbus 协议标准文档、NModbus 示例工业 4.0《工业 4.0 驱动制造业数字化转型》七、总结15 篇文章从零到一我们完成了一套完整的 C# WinForms 工业视觉检测系统涵盖 UI、相机、算法、通信、数据库五大模块掌握 10 个工业软件开发核心技术点感谢一路相伴如果在实践过程中遇到问题欢迎在评论区留言交流。欢迎点赞、收藏、关注你的支持是我持续输出的动力系列完结

相关新闻

数学建模国赛72小时实战指南:选题策略、时间规划与论文撰写

数学建模国赛72小时实战指南:选题策略、时间规划与论文撰写

1. 赛前心态与选题策略:从“选什么”到“怎么选”又到一年国赛时。每年九月的这个周末,对于全国数十万数学建模爱好者来说,都是一场脑力与体力的双重考验。作为过来人,我深知在拿到赛题的那一刻,面对A、B、C三道&#…

2026/10/12 1:14:30 阅读更多 →
7大AI模型深度对比:为AI Automation Suggester选择最佳OpenAI/Anthropic/Groq/Ollama方案

7大AI模型深度对比:为AI Automation Suggester选择最佳OpenAI/Anthropic/Groq/Ollama方案

7大AI模型深度对比:为AI Automation Suggester选择最佳OpenAI/Anthropic/Groq/Ollama方案 【免费下载链接】ai_automation_suggester This custom Home Assistant integration automatically scans your entities, detects new devices, and uses AI (via cloud and…

2026/9/27 4:25:58 阅读更多 →
LaneDetection_End2End进阶技巧:代理分割任务与持续学习最佳实践

LaneDetection_End2End进阶技巧:代理分割任务与持续学习最佳实践

LaneDetection_End2End进阶技巧:代理分割任务与持续学习最佳实践 【免费下载链接】LaneDetection_End2End End-to-end Lane Detection for Self-Driving Cars (ICCV 2019 Workshop) 项目地址: https://gitcode.com/gh_mirrors/la/LaneDetection_End2End Lane…

2026/9/17 16:02:44 阅读更多 →

最新新闻

064、广播数据长度超出承载上限时的分包处理

064、广播数据长度超出承载上限时的分包处理

现场:一条永远发不出去的广播 几年前做一个分布式采集系统,主控通过广播通道向所有节点下发同步命令和参数。协议栈的单帧净荷上限是 31 字节,这是链路层硬约束,改不了。前期功能很简单,同步命令就几个字节&#xff0c…

2026/10/15 0:08:01 阅读更多 →
063、广播间隔与扫描窗口错配导致的设备不可见

063、广播间隔与扫描窗口错配导致的设备不可见

一个做资产追踪标签的团队遇到过这样一件事。标签固件烧录完毕,功耗测试过了,广播内容用嗅探工具抓包也正常,RSSI 在预期范围内。但配套的接收端在实验室里就是扫不到这批标签。换一台接收端,能扫到。再换回来,又扫不到…

2026/10/15 0:08:01 阅读更多 →
062、连接建立瞬间超时断开的原因分类

062、连接建立瞬间超时断开的原因分类

一个半夜被叫起来处理的问题 去年冬天做的一个数据采集项目,现场大概两百多个节点,通过无线链路往中心网关上报数据。上线跑了三天都正常,第四天凌晨两点,值班同事打电话说监控大屏上设备在线数从两百多掉到了三十几个&#xff0c…

2026/10/15 0:08:01 阅读更多 →
061、广播包发出后没有回应时的链路排查思路

061、广播包发出后没有回应时的链路排查思路

上个月帮一个做工业数据采集的团队看问题,他们用一套自研的无线轮询协议,主站每隔两秒向从站发一轮广播包,从站收到后回传采集数据。现场跑了三个月一直正常,突然有一天主站日志里开始出现大量“广播发出后无回应”的告警&#xf…

2026/10/15 0:08:01 阅读更多 →
别再让“虚拟时装毕设”卡在论文上:数字时尚设计人的 AI 工具搭子清单 ✨

别再让“虚拟时装毕设”卡在论文上:数字时尚设计人的 AI 工具搭子清单 ✨

如果你读的是数字时尚设计,大概率会遇到这样一种“分裂”的毕业状态: 一边在用 CLO 3D / Style3D 调版片、缝份、面料垂坠和动态走秀效果;一边还要翻虚拟时尚、数字服装、AIGC、非遗纹样、用户审美评价等一大堆中英文文献;最后还…

2026/10/15 0:08:01 阅读更多 →
二次规划QP实战:从调包到手撕,解决不可行与病态问题

二次规划QP实战:从调包到手撕,解决不可行与病态问题

1. 从“调包”到“手撕”:为什么QP值得你花时间很多做算法落地的朋友,第一次接触二次规划(Quadratic Programming,简称QP)都是在MATLAB的quadprog或者Python的cvxopt.solvers.qp里填几个矩阵就完事了。模型跑通那一刻觉…

2026/10/15 0:07:00 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →