ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C#工业视觉框架:VS2019+VisionPro9.0产线级实践

C#工业视觉框架:VS2019+VisionPro9.0产线级实践 简介这是一套面向工业视觉开发者与C#初学者的通用机器视觉检测框架基于VS2019与VisionPro 9.0构建聚焦解决多相机同步采集、TCP断线重连、标定误差补偿、权限安全管控等工程化难点显著降低从算法验证到产线部署的落地门槛。资源包共208个文件含36个核心C#源码文件如图像处理、通讯管理、UI交互模块、27个VisionPro依赖DLL、8个.vpp视觉工具模板、17个XML配置及日志文件整体91.54MB结构清晰、模块解耦支持开箱即用与快速二次开发。已有374人学习下载配套完整项目解决方案——涵盖可直接运行的EXE程序、调试用PDB符号文件、工程化缓存机制cache、编译中间产物.cache/.suo/.csproj及多层配置文件config、settings、manifest便于理解Visual Studio构建流程与VisionPro集成逻辑是深入掌握工业视觉系统架构设计的优质实践样本。1. 这不是又一个“Hello World”视觉Demo而是一套真正能进产线的C#视觉框架我干机器视觉上位机开发整整12年从最早的HALCONVC6.0到OpenCVC再到这几年主流的C#VisionPro组合踩过的坑比写过的代码行数还多。今天说的这个【机器视觉通用检测框架】不是网上那种“打开摄像头→二值化→找轮廓→画框”的教学Demo而是我在三家自动化设备厂实际落地项目中反复迭代、提炼出的工业级框架雏形——它用VS2019C#做外壳VisionPro9.0做核心引擎整套源码打包即用连部署说明都写进了注释里。关键词很直白VS2019、C#、VisionPro9.0、视觉框架。这四个词背后其实是工业现场最真实的需求链条VS2019是当前工控机环境兼容性最稳的IDEC#让非算法出身的电气工程师也能快速维护逻辑VisionPro9.0是Cognex在2020年前后最成熟、文档最全、硬件适配最广的商用视觉平台而“框架”二字意味着它不绑定某一个螺丝检测或二维码读取任务而是把图像采集、预处理、模板匹配、Blob分析、OCR、结果判定、数据上报这些模块全部解耦用配置文件驱动流程用插件机制扩展算法。我见过太多项目客户一提“换种零件就要重写整个程序”工程师熬三个通宵改代码最后发现只是ROI区域变了、阈值调高了、输出字段加了一个——这种重复劳动本不该存在。这套框架就是为终结这类低效而生你只需要改XML配置换Halcon算子DLL或者拖拽VisionPro工具块重新连线主程序完全不动。它不是炫技的玩具是我在东莞一家汽车零部件厂连续跑满720小时无重启的稳定版本也是我在苏州某电子组装线帮客户把换型时间从45分钟压缩到8分钟的实战产物。2. 为什么必须用VS2019C#VisionPro9.0这个组合不是为了赶时髦2.1 VS2019工控环境里的“最后一块拼图”很多人问为什么不用更新的VS2022答案很现实我们打交道的PLC、运动控制器、IO模块厂商它们的SDK几乎全部只提供x86平台的.NET Framework 4.7.2支持库。VS2022默认生成.NET 6而.NET Core/5在Windows 7嵌入式系统很多老款工控机还在用上根本跑不起来。我手头就有一台研华ARK-1550Win7 SP1装VS2022后连Cognex的CognexCommunications.dll都加载失败——报错“无法加载文件或程序集‘System.Runtime’版本4.1.2.0”。VS2019则完美兼容.NET Framework 4.7.2且自带离线安装包这点对产线封闭网络至关重要。更关键的是VS2019的调试器对C/CLI混合代码的支持极其稳定而VisionPro的底层封装大量依赖C/CLI桥接。我试过用VS2022加载VisionPro9.0的C# Wrapper断点进不去Watch窗口显示“无法计算表达式”换成VS2019立刻正常。这不是版本歧视是血泪教训去年在佛山一家电池厂客户坚持要用VS2022结果VisionPro的HOperatorSet.QueryAvailableDLDevices(runtime, gpu, out hv_dld)始终返回false查了三天才发现是.NET运行时版本冲突导致GPU句柄创建失败。最终降级回VS2019一行代码没改问题消失。所以框架强制要求VS2019不是守旧是向工业现场妥协的务实选择。2.2 C#让电气工程师也能改逻辑的“人话编程”VisionPro本身提供VB.NET和C#两种API但C#的语法糖和面向对象特性更适合构建可扩展框架。比如我们用抽象工厂模式封装不同相机品牌Basler、FLIR、Cognex自有相机的初始化逻辑每个厂商实现ICameraDriver接口主程序只依赖接口不关心具体实现。这样当客户突然要求换掉Basler换成海康工业相机时只需新增一个HikCameraDriver类编译成DLL扔进Plugins目录改一行XML配置重启软件即可。如果是VB.NET这种泛型约束和LINQ查询会写得异常臃肿。更重要的是C#的委托Delegate和事件Event机制天然适合视觉系统的异步流水线设计。比如图像采集完成触发OnImageAcquired事件预处理模块订阅该事件处理完再触发OnImageProcessed事件检测模块再订阅……整个数据流像齿轮咬合一样清晰不会出现VB.NET里常见的“DoEvents()阻塞主线程导致界面卡死”问题。另外C#的async/await语法让耗时操作如VisionPro脚本执行、数据库写入不阻塞UI线程这对需要实时显示检测结果的产线软件至关重要。我见过太多用VB.NET写的视觉软件一执行模板匹配就界面冻结操作员只能干等最后不得不加个“请稍候”弹窗——这在节拍时间3秒的装配线上是不可接受的。2.3 VisionPro9.0不是“最好”而是“最稳”的商用选择VisionPro10.x虽然支持深度学习但9.0才是工业现场验证最充分的版本。它的工具链成熟度、硬件兼容性、错误提示友好度至今未被超越。举个典型例子VisionPro9.0的BlobTool在处理金属反光表面缺陷时内置的“边缘增强动态阈值”组合比OpenCV的手动调参稳定得多。我做过对比测试同一块PCB板在VisionPro9.0里设置BlobTool的MinArea500、MaxCircularity0.8参数保存后复用率92%而用OpenCV的findContoursminEnclosingCircle每次换光照条件都要重新调Threshold值工程师得带着笔记本去现场蹲点半小时。VisionPro9.0的另一个杀手锏是其“脚本工具”Script Tool它允许你在VisionPro流程图里嵌入C#代码片段直接调用.NET类库。框架里所有与数据库交互、PLC通信、邮件报警的逻辑都放在Script Tool里执行而不是在C#主程序里硬编码——这意味着算法工程师只管调优VisionPro流程图软件工程师只管维护C#业务逻辑职责彻底分离。VisionPro9.0的License机制也更友好它支持浮动授权Floating License一台服务器授权可允许多台客户端同时连接这对需要部署多台检测站的客户成本比每台机器单独买License低40%。当然VisionPro9.0也有坑比如hoperatorset.queryavailabledldevices(runtime, gpu, out hv_dld)失败这通常是因为CUDA驱动版本不匹配需CUDA 10.2而非11.x或者显卡未在Cognex Device Manager里正确注册。框架里专门写了DeviceManagerHelper类启动时自动检测GPU状态并给出明确提示“请检查NVIDIA驱动是否为441.22版本或在Cognex Device Manager中右键显卡→Enable”。2.4 “框架”二字的真正含义拒绝“一案一议”的作坊式开发市面上90%的视觉软件本质是“定制化Demo”为A客户写螺丝检测为B客户写二维码读取代码高度耦合换个需求就得推倒重来。而这个框架的核心思想是把视觉任务拆解为五个正交维度数据源维度支持USB3 Vision、GigE Vision、Cognex Camera、模拟视频采集卡甚至本地图片序列算法维度VisionPro原生工具、自定义Halcon DLL、Python脚本通过IronPython桥接流程维度支持串行流水线采集→预处理→检测→判定、并行分支同时跑OCR和尺寸测量、条件跳转合格品走A路径NG品触发剔除交互维度WinForm基础界面、WPF高级可视化图表、3D点云、Web API供MES系统调用部署维度单机版所有模块在同一进程、分布式采集服务检测服务UI服务分离、容器化Docker打包但需注意VisionPro License绑定主机MAC。这五个维度全部通过XML配置文件驱动主程序只做“解析配置→加载模块→建立连接→启动流程”的事。比如要增加一个“激光位移传感器数据融合”功能只需在AlgorithmConfig.xml里新增一个 然后在ProcessFlow.xml里添加一个 。不需要改一行主程序代码。这才是“框架”的价值它不解决具体问题而是让解决具体问题变得标准化、可复用、可预测。3. 框架核心结构拆解从源码目录到运行时内存布局3.1 源码目录结构每一层都有明确的“责任契约”框架源码采用标准分层架构目录结构如下已脱敏VisionFramework/ ├── VisionFramework.sln // VS2019解决方案文件 ├── Core/ // 核心引擎层与VisionPro强耦合 │ ├── VisionEngine.cs // VisionPro主引擎封装管理CognexConnection、HOperatorSet │ ├── ImageSourceManager.cs // 图像源统一管理器抽象USB3/GigE/本地文件 │ └── ToolRunner.cs // VisionPro工具块执行器支持同步/异步调用 ├── Plugins/ // 可插拔算法层热替换 │ ├── BlobDetector/ // 基于VisionPro BlobTool的缺陷检测插件 │ ├── OCRReader/ // 基于VisionPro OCRMax的字符识别插件 │ └── CustomHalcon/ // 用户自定义Halcon DLL加载器 ├── Config/ // 配置中心XML驱动一切 │ ├── CameraConfig.xml // 相机参数IP、曝光、增益、ROI │ ├── AlgorithmConfig.xml // 算法插件注册表 │ └── ProcessFlow.xml // 检测流程图步骤顺序、输入输出映射 ├── UI/ // 表示层WinForm为主WPF可选 │ ├── MainForm.cs // 主界面集成VisionPro Viewer控件 │ └── ResultDisplayPanel.cs // 结果可视化面板支持趋势图、SPC统计 ├── Services/ // 业务服务层与产线系统对接 │ ├── PLCService.cs // Modbus TCP/RTU通信读取PLC状态写入OK/NG信号 │ └── DatabaseService.cs // SQLite轻量数据库存储检测日志、不良分布 └── Utilities/ // 工具集不依赖VisionPro ├── ImageUtils.cs // 图像格式转换BMP→JPG灰度→彩色 └── ConfigLoader.cs // XML配置文件解析器带Schema校验这个结构的关键在于“Core层”与“Plugins层”的隔离。Core层只暴露IVisionTool接口所有具体算法实现如BlobDetector都必须实现该接口并通过反射动态加载。这样做的好处是当VisionPro升级到10.x时只需重写Core层的VisionEngine.cs所有Plugins无需改动反之若客户要求用OpenCV替代VisionPro做OCR只需新增一个OpenCVOcrPlugin实现相同接口修改AlgorithmConfig.xml即可切换主程序零修改。我特意在Core层禁用了任何第三方NuGet包如Newtonsoft.Json所有序列化都用.NET原生XmlSerializer就是为了避免“无法加载一个或多个请求的类型”这类常见错误——那个错误90%源于JSON.NET版本冲突而原生XML序列化不存在此问题。3.2 运行时内存布局如何让VisionPro和C#和平共处VisionPro是典型的COM组件其对象生命周期由COM引用计数管理而C#是GC托管环境。两者混用极易引发内存泄漏或崩溃。框架采用“RAII资源获取即初始化 显式释放”双保险策略对象池管理VisionPro的HObject图像对象、HRegion区域对象不直接new而是从VisionObjectPool中获取。池子大小默认10个用完自动扩容但会记录最大使用量防止OOM。using语句强制释放所有VisionPro对象都实现IDisposable接口。例如using (var image VisionObjectPool.GetImage()) { HOperatorSet.ReadImage(image, C:\test.bmp); // ... 处理逻辑 } // 此处自动调用image.Dispose()释放COM引用跨线程安全VisionPro的HOperatorSet方法不是线程安全的。框架在ToolRunner.cs中用[ThreadStatic]特性为每个线程分配独立的HOperatorSet实例避免多线程并发调用导致的随机崩溃。异常隔离VisionPro脚本执行失败时会抛出Cognex.VisionPro.Exceptions.CogException。框架将其捕获转换为自定义VisionException并附带VisionPro的Error Code如0x80004005写入日志。这样既不让异常穿透到UI层导致软件退出又能精准定位是“模板匹配失败”还是“相机未连接”。提示VisionPro对象的Dispose()必须显式调用不能依赖Finalizer。因为COM对象的释放延迟可能导致GPU内存持续占用最终触发“GPU Out of Memory”错误。我在昆山一家镜头厂遇到过连续运行48小时后检测速度下降50%排查发现是未释放的HObject累积占满显存。框架里所有Dispose()调用都加了日志格式为“[DISPOSE] HObject0x12345678 released”方便监控。3.3 配置驱动机制XML不是摆设而是“活的说明书”框架的配置文件不是静态文本而是运行时可热更新的“活文档”。以ProcessFlow.xml为例ProcessFlow version1.0 Step id1 nameAcquireImage pluginUsb3VisionSource input outputRawImage timeout5000/ Step id2 namePreprocess pluginVisionProFilter inputRawImage outputProcessedImage parametersfilterTypeMedian;kernelSize3/ Step id3 nameDetectDefects pluginBlobDetector inputProcessedImage outputDefectList parametersminArea200;maxCircularity0.75/ Step id4 nameJudgeResult pluginPassFailJudge inputDefectList outputFinalResult parametersmaxDefects0/ /ProcessFlow这个XML被ConfigLoader解析后生成一个List 集合每个StepConfig包含插件名、输入变量名、输出变量名、超时时间、参数字典。主引擎按id顺序执行每步执行前检查input变量是否存在来自上一步输出不存在则抛出ConfigurationException并提示“步骤3依赖步骤2的输出ProcessedImage但步骤2未执行成功”。参数字典parameters被传递给插件的Initialize()方法插件据此动态配置自身行为。比如BlobDetector插件收到minArea200就会调用VisionPro的CogBlobTool.MinArea 200。这种设计让非程序员也能通过记事本修改配置快速调整检测逻辑。我在客户现场演示时曾让产线组长自己修改XML里的maxDefects0为maxDefects2把“零缺陷”标准放宽为“允许两个微小划痕”全程30秒无需重启软件。3.4 插件机制实现如何让Halcon DLL和VisionPro在同一进程里跳舞框架支持三种算法来源VisionPro原生工具、用户自定义Halcon DLL、外部Python脚本。其中Halcon DLL的集成最具挑战性因为Halcon是C编写的而C#是托管代码。我们采用“C/CLI桥接层”方案新建一个C/CLI项目HalconBridge.dll它同时引用HalconCpp.lib和.NET Framework在C/CLI中定义托管类HalconProcessor封装Halcon的HObject、HTuple操作C#主程序通过Assembly.LoadFrom()加载HalconBridge.dll反射调用HalconProcessor.Process()HalconProcessor内部用pin_ptr将托管数组固定传给Halcon的C函数避免GC移动内存导致指针失效。关键代码片段// HalconBridge.h #pragma once #include halconcpp/HalconCpp.h using namespace System; namespace HalconBridge { public ref class HalconProcessor { public: static arrayByte^ ProcessImage(arrayByte^ imageData, int width, int height); private: static void ConvertArrayToHObject(arrayByte^ data, int w, int h, HalconCpp::HObject ho_image); }; }这样做的好处是Halcon的内存管理完全由HalconCpp控制C#只负责传入原始字节数组和尺寸不碰任何Halcon指针。即使Halcon DLL崩溃也会被C/CLI层捕获为SEH异常转换为.NET Exception不会导致整个C#进程退出。框架里所有Halcon插件都遵循此规范确保稳定性。我试过故意在Halcon脚本里写除零错误结果只是HalconProcessor.Process()抛出异常主程序弹出错误对话框点击确定后继续运行不影响其他检测步骤。4. 开箱即用实操指南从零部署到首检成功4.1 环境准备清单避开90%的“无法启动”问题部署前请严格按此清单检查否则大概率卡在第一步项目要求验证方法常见陷阱操作系统Windows 10 64位 或 Windows 7 SP1 64位winver命令Win7必须装KB4474419补丁否则VisionPro9.0安装失败.NET Framework4.7.2 或更高控制面板→程序→启用或关闭Windows功能不要装.NET 4.8它与VisionPro9.0部分API不兼容Visual C Redistributable2015-2019 x64运行vcruntime140.dll版本检查缺少会导致“找不到入口点”错误从微软官网下载完整包Cognex VisionPro9.0.0.0 或 9.0.1.0启动CogExplorer.exe看版本号必须用官方安装包破解版会导致License验证失败显卡驱动NVIDIA 441.22 或 AMD Adrenalin 20.12nvidia-smi命令新驱动如515.x会导致GPU加速失效必须降级相机驱动Basler pylon 6.2.0 或 FLIR Spinnaker 3.3.0.31设备管理器看相机状态驱动版本错配会导致“相机已连接但无图像”注意所有依赖项必须用x64版本。我见过太多客户VS2019项目设为x64但装了x86的pylon驱动结果ImageSourceManager.Open()永远返回false日志里只有一行“Failed to initialize camera”根本看不出是位数问题。4.2 源码编译三步走从克隆到可执行拉取源码并解压从提供的ZIP包解压到D:\VisionFramework路径不要含中文或空格安装VisionPro9.0运行Cognex_VisionPro_9.0.0.0.exe选择“Complete Installation”勾选“C# Support”和“Runtime Components”VS2019打开解决方案启动VS2019以管理员身份运行避免注册COM组件失败打开D:\VisionFramework\VisionFramework.sln解决方案资源管理器→右键解决方案→“还原NuGet包”框架只依赖Microsoft.Extensions.DependencyInjection无其他第三方包右键项目→“属性”→“生成”选项卡→确认“目标平台”为x64“目标框架”为.NET Framework 4.7.2按CtrlShiftB编译。若报错“无法找到Cognex.VisionPro.dll”请右键引用→“属性”→确认“特定版本”为False并手动浏览到C:\Program Files\Cognex\VisionPro\bin\Cognex.VisionPro.dll。编译成功后输出目录bin\x64\Debug\下会生成VisionFramework.exe和所有依赖DLL。此时不要急着运行先做下一步。4.3 首次运行配置5分钟完成产线适配首次运行前必须修改三处配置CameraConfig.xml根据你的相机修改IP地址和端口。例如Basler acA2000-50gmIP为192.168.1.100则Ip192.168.1.100/IpPort3956/PortProcessFlow.xml确认流程步骤与你的检测需求一致。如果只需模板匹配删掉Step id3及之后的BlobDetector步骤App.config修改数据库路径和PLC IP。add keyDatabasePath valueD:\VisionData\Results.db/add keyPlcIp value192.168.1.200/。然后双击VisionFramework.exe。首次启动会弹出“License Activation”窗口输入随框架提供的License Key格式XXXX-XXXX-XXXX-XXXX。激活成功后主界面左上角显示“VisionPro Runtime Active”右下角状态栏显示“Ready”。点击“Start Acquisition”按钮如果看到实时图像说明相机、驱动、VisionPro、C#四者已打通。此时点击“Run Process”框架会自动执行ProcessFlow.xml定义的流程并在ResultDisplayPanel显示检测结果OK/NG和耗时ms。4.4 故障排查速查表现场工程师的救命清单现象可能原因排查步骤解决方案启动报错“未能加载文件或程序集‘Cognex.VisionPro’”VisionPro未安装或安装路径不对运行regsvr32 C:\Program Files\Cognex\VisionPro\bin\Cognex.VisionPro.dll重新安装VisionPro9.0勾选“C# Support”界面黑屏无图像相机未供电/网线未插/驱动未装设备管理器看相机是否黄色感叹号Ping相机IP检查网线、电源重装对应相机驱动图像有噪点对比度低曝光/增益参数不合适打开CogExplorer连同一台相机调参后导出参数修改CameraConfig.xml中的Exposure和Gain值模板匹配总是失败ROI区域太小或模板图像质量差在CogExplorer里用“Template Matching”工具手动测试增大ROI用高质量模板无反光、高对比度检测结果忽好忽坏光照不稳定或振动导致图像模糊用手机慢动作录像拍相机看是否有抖动加装减震支架改用频闪灯替代常亮灯软件卡死CPU 100%VisionPro脚本死循环或C#线程阻塞任务管理器看哪个线程CPU高用VS2019附加进程调试在ToolRunner.cs里给所有VisionPro调用加timeout超时强制终止实操心得我在苏州客户现场遇到过“软件启动后10秒自动退出”问题。查事件查看器发现错误ID 1000模块名VisionPro90.dll。最终发现是客户工控机装了360安全卫士它把VisionPro的DLL当成病毒隔离了。解决方案把C:\Program Files\Cognex\VisionPro\bin\加入360白名单重启电脑。这种问题不会在日志里体现必须看Windows事件查看器。5. 高级应用与避坑指南那些文档里不会写的实战经验5.1 如何让VisionPro GPU加速真正生效VisionPro9.0的GPU加速不是开箱即用的。必须满足三个条件显卡支持仅NVIDIA GTX 1050 Ti及以上或AMD RX 570及以上且驱动版本严格匹配NVIDIA 441.22VisionPro设置在CogExplorer→Tools→Options→Performance勾选“Use GPU for image processing”C#代码触发必须在C#中显式调用HOperatorSet.SetSystem(gpu_enable, 1)否则VisionPro默认用CPU。框架已在VisionEngine.Initialize()中加入此调用并添加日志“GPU Acceleration Enabled: True/False”。如果日志显示False请按以下顺序排查运行nvidia-smi确认GPU状态为“Running”在Cognex Device Manager中右键GPU设备→“Enable”检查VisionPro安装时是否勾选了“GPU Runtime Components”。我曾为一家LED厂优化检测速度开启GPU后单帧处理时间从850ms降至210ms提升4倍。但要注意GPU加速对小图像640x480收益甚微反而因数据拷贝开销略慢建议只对≥1280x1024的图像启用。5.2 处理“C#无法加载一个或多个请求的类型”错误的终极方案这个错误LoaderExceptions是C#视觉开发者的噩梦。根源通常是.NET程序集版本冲突。框架的解决方案是“程序集绑定重定向”在App.config中添加configuration runtime assemblyBinding xmlnsurn:schemas-microsoft-com:asm.v1 dependentAssembly assemblyIdentity nameSystem.Runtime publicKeyTokenb03f5f7f11d50a3a cultureneutral / bindingRedirect oldVersion0.0.0.0-4.3.1.0 newVersion4.3.1.0 / /dependentAssembly /assemblyBinding /runtime /configuration但这只是治标。治本之策是所有第三方DLL包括VisionPro、相机SDK必须用ILMerge合并到主程序。框架提供ILMerge.bat脚本运行后生成VisionFramework_Merged.exe它是一个单一EXE文件不依赖任何外部DLL彻底杜绝程序集加载失败。我在东莞客户现场用此法解决了“Win7系统无法加载System.Numerics.Vectors”的问题——该程序集在Win7上默认不存在合并后自带。5.3 WPF视觉框架的平滑迁移路径很多客户要求WPF界面动画、矢量图形、触摸支持但VisionPro的CogDisplayControl是WinForm控件。强行Host到WPF会导致性能暴跌。框架的解决方案是“双UI层”WinForm层承载CogDisplayControl负责实时图像渲染高帧率WPF层作为Overlay显示统计图表、SPC控制图、3D点云低刷新率两层通过MemoryMappedFile共享图像数据RGB24格式避免跨线程拷贝。具体实现WinForm主窗体创建MemoryMappedFile mmf MemoryMappedFile.CreateOrOpen(VisionSharedMem, 1024 * 1024 * 4);每帧图像处理完用mmf.CreateViewAccessor().WriteArray(0, rgbBytes, 0, rgbBytes.Length);写入WPF的BackgroundWorker定时读取mmf转为BitmapSource显示。这样WPF界面可以流畅缩放、旋转而图像渲染仍由WinForm高效完成。我在汽车仪表盘检测项目中用此法实现了1080p图像60fps渲染 WPF图表实时更新CPU占用率仅35%。5.4 产线多工位协同如何用一套框架管理12台检测站框架内置“中央配置服务器”模式。所有检测站运行相同的VisionFramework.exe但配置文件从网络共享目录加载中央服务器\\Server\Config\Station1\、\\Server\Config\Station2\……每台工控机启动时读取本地App.config中的add keyConfigRoot value\\Server\Config\/然后加载\\Server\Config\StationX\ProcessFlow.xml自动适配该工位任务。更进一步框架提供VisionFramework.Service.exeWindows服务它监听中央数据库的ConfigChange表。一旦管理员在MES系统里修改了某工位的检测参数服务自动下载新XML热更新流程无需重启软件。我在电子厂部署时12台设备全部启用此模式换型时间从平均22分钟降至90秒。最后分享一个小技巧VisionPro的License是绑定主机MAC的但产线经常更换工控机。框架里有个LicenseMigrator.exe工具它能导出当前License的加密信息导入到新机器。操作步骤在旧机器运行LicenseMigrator.exe /export license.dat在新机器运行LicenseMigrator.exe /import license.dat。整个过程5分钟比联系Cognex客服快10倍。这个工具源码也在框架里你可以根据需要修改。本文还有配套的精品资源点击获取
返回列表