3. 软件平台搭建

好,咱们进入第三章。前面两章我们把硬件选型和通信协议理清了,现在该给这套系统装上「灵魂」了——也就是软件平台。

说实话,我见过不少项目,硬件花了几十万,结果软件环境没搭好,现场调试时各种蓝屏、驱动冲突、数据库连不上。嗯,这种坑我踩过不止一次。所以这一章,我把自己的经验拆开揉碎了讲给你听。

3.1 操作系统配置:选对版本,少走弯路

产线检测系统对稳定性要求极高。我个人习惯首选 Windows 10/11 IoT Enterprise LTSC 或 Windows Server 2019/2022。为什么?

  • 长期支持:LTSC 版本 10 年更新,不会突然强制重启。
  • 驱动兼容:工业相机、采集卡厂商的驱动基本只保证 Windows 稳定。
  • 实时性:配合实时扩展(如 IntervalZero RTX)可满足微秒级响应。
避坑指南:我曾经在一个项目里用了 Windows 10 家庭版,结果 GigE 相机死活认不到。查了两天,发现是家庭版禁用了巨型帧和网卡 RSS 队列。从此以后,产线机器我必装专业工作站版或 LTSC。

3.1.1 关键系统设置

  1. 关闭自动更新:组策略里配置「指定 Intranet Microsoft 更新服务位置」,或直接禁用 Windows Update 服务。
  2. 电源计划:选「高性能」,关闭硬盘休眠、USB 选择性暂停。
  3. 网络优化:网卡开启巨型帧(Jumbo Frame,设 9000 字节),关闭 IPv6 和 QoS 数据包计划程序。
  4. 虚拟内存:物理内存 16GB 以上时,设初始大小 16GB,最大值 32GB。
我的小技巧:装完系统第一件事,用 DISM++ 做一次「系统优化」和「垃圾清理」,然后马上做系统备份。现场出问题时,5 分钟就能恢复干净环境。

3.2 视觉库部署:OpenCV 与 Halcon 的实战选择

视觉库是检测系统的「眼睛」。我一般根据项目预算和算法复杂度来选:OpenCV 免费灵活,适合原型和简单检测;Halcon 商业授权但算法成熟,适合高精度、复杂场景。

对比项 OpenCV Halcon
授权方式 BSD 开源,免费 商业授权,按节点收费
算法成熟度 基础算法丰富,深度学习模块较新 工业级算子,标定/测量/匹配极强
部署难度 需手动配置环境变量和依赖 安装包集成,但 License 管理麻烦
典型场景 缺陷检测、二维码识别、尺寸测量 高精度定位、3D 视觉、多相机标定

3.2.1 OpenCV 部署步骤(以 C++ 为例)

  1. 从 GitHub 或官网下载预编译包(Windows 选 VC14/VC15 版本)。
  2. 解压到 C:\opencv,添加环境变量:OPENCV_DIR=C:\opencv\build\x64\vc15。
  3. 将 %OPENCV_DIR%\bin 加入 PATH。
  4. VS 项目中配置包含目录和库目录,链接 opencv_world460.lib。
// 验证代码:读取并显示图像
#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat img = imread("test.jpg");
    if (img.empty()) {
        printf("图像加载失败,请检查路径和库配置\n");
        return -1;
    }
    imshow("Display", img);
    waitKey(0);
    return 0;
}
经验之谈:OpenCV 编译时记得勾选 WITH_QT 和 WITH_TBB,否则 GUI 显示卡顿,多线程性能也上不去。我踩过这个坑,后来全部用源码重新编译了一遍。

3.2.2 Halcon 部署要点

  • 安装时选「完整安装」,包含所有示例和文档。
  • License 文件放在 C:\Program Files\MVTec\HALCON-22.05\license。
  • 环境变量 HALCONROOT 和 HALCONARCH 安装程序会自动配置。
  • VS 中引用 halcon.dll 和 halconcpp.dll。
注意:Halcon 不同版本之间 License 不通用。我曾经因为升级版本忘了更新 License,现场所有相机都报「License not found」,差点被客户骂。所以,版本升级前一定先确认 License 有效期。

3.3 数据库安装:MySQL 与 SQLite 的选型与配置

产线检测数据需要持久化存储,比如检测结果、产品图像路径、设备日志。我一般这样选:

  • SQLite:单机、数据量小(百万级以内)、无需网络服务。适合嵌入式或边缘节点。
  • MySQL:多工位、数据量大、需要远程访问和并发写入。适合集中式服务器。

3.3.1 SQLite 部署(轻量级首选)

SQLite 不需要安装服务,只需下载 sqlite3.dll 和 sqlite3.exe。我习惯把 dll 放在项目目录下,直接通过 ADO.NET 或 C API 调用。

-- 创建检测结果表
CREATE TABLE IF NOT EXISTS inspection_result (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    product_id TEXT NOT NULL,
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
    result TEXT CHECK(result IN ('PASS', 'FAIL')),
    defect_type TEXT,
    image_path TEXT
);

-- 插入一条记录
INSERT INTO inspection_result (product_id, result, defect_type, image_path)
VALUES ('SN20240301-001', 'FAIL', '划痕', 'D:\images\20240301\001.jpg');
我的习惯:SQLite 数据库文件不要放在系统盘,也不要放在网络共享路径。我遇到过因为网络延迟导致数据库锁死的惨案。后来全部改为本地 SSD,配合 WAL 模式,写入性能提升 5 倍。

3.3.2 MySQL 安装与配置(以 8.0 为例)

  1. 下载 MySQL Installer,选「Server only」安装。
  2. 配置类型选「Development Machine」,端口默认 3306。
  3. 设置 root 密码,创建专用数据库和用户:
CREATE DATABASE inspection_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'inspector'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON inspection_db.* TO 'inspector'@'%';
FLUSH PRIVILEGES;
  1. 修改 my.ini 优化性能:
[mysqld]
max_connections = 200
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
关键参数说明:innodb_buffer_pool_size 设为物理内存的 60%-70%,max_connections 根据工位数量调整。产线环境一般 50-100 个连接足够,设太大反而浪费内存。

3.4 本章知识体系总览

下面这张图把软件平台搭建的核心模块和关系串起来了。你可以把它贴在工位上,部署时对照着来。

软件平台搭建知识体系 软件平台搭建核心模块 操作系统配置 Windows LTSC / 专业版 视觉库部署 OpenCV / Halcon 数据库安装 MySQL / SQLite 驱动支持 网络与存储 结果存储 操作系统关键配置 • 关闭自动更新 • 高性能电源计划 • 网卡巨型帧 + RSS • 虚拟内存优化 视觉库部署要点 • 环境变量配置 • 依赖库安装 • License 管理 • 编译选项优化 数据库安装要点 • 选型:SQLite vs MySQL • 用户与权限配置 • 性能参数调优 • 备份策略 集成目标:稳定、高效、可追溯的检测软件平台 操作系统提供环境 → 视觉库处理图像 → 数据库持久化结果

3.5 部署后的验证清单

所有软件装完后,别急着写代码。先跑一遍验证清单,确保环境没问题:

检查项 验证方法 预期结果
操作系统版本 winver 命令 显示 LTSC 或专业工作站版
OpenCV 可用性 运行验证代码 图像正常显示
Halcon License 打开 HDevelop,执行 get_system('license') 返回有效 License 信息
SQLite 读写 执行 SELECT 1; 返回 1
MySQL 连接 使用 MySQL Workbench 或命令行登录 成功连接并看到数据库列表