顾名思义,HDevEngine 是 HDevelop 的 "引擎"。本章将简要介绍其基本概念。"C++应用程序中的HDevEngine" 一章 介绍了如何在C++应用程序中使用HDevEngine,而".NET应用程序中的HDevEngine" 一章 介绍了如何在.NET应用程序(C#、Visual Basic .NET等)中使用HDevEngine。与所使用的编程语言无关的其他信息,请参阅 "一般信息" 一章 。
使用 HDevEngine,您可以从 C++ 应用程序或可以集成 .NET 对象(如 C# 或 Visual Basic .NET)的应用程序中执行完整的 HDevelop 程序或单个函数。因此,您不仅可以使用 HDevelop 程序制作原型,还可以完全开发和运行应用程序中的机器视觉部分。
由于HDevEngine充当了解释器的角色,因此您可以修改HDevelop程序或函数,而无需编译和链接应用程序(如果您没有更改函数的签名),如果您导出程序或函数并手动整合代码,则必须这样做。这意味着您可以通过替换单个 HDevelop 文件来轻松更新应用程序的机器视觉部分。
请注意,HDevEngine 并不实现 HDevelop 的全部功能,只实现执行程序和函数所需的功能。特别是,它没有实现在图形窗口中显示变量和结果的功能,即 dev_display 等内部算子。不过,您可以将这些算子 "重定向" 到自己的实现中。因此,您可以决定哪些可视化是重要的,以及在您的应用程序中进行可视化的位置和方式。
HDevEngine 以 C++ 类库和 .NET 程序集的形式提供。它由以下类组成:
使用 HDevEngine,您可以执行完整的 HDevelop 程序或单个本地或外部 HDevelop 函数。哪种方式更好,取决于开发阶段和任务:
当然,HDevelop 程序本身应使用与您计划在编程应用程序中执行的程序相同的程序。
与此相反,本地函数适用于不完全可重复使用的任务,例如训练和配置形状模型以查找对象。这样,不同的应用程序就可以使用其函数的优化变体,而不用创建一个带有许多参数和内部开关的、适合所有应用程序的单一函数。
使用本地函数意味着必须加载包含这些函数的 HDevelop 程序。不过,如上所述,加载并执行相应的 HDevelop 程序可以很好地测试应用程序的总体配置。
HDevEngine 是线程安全和可重入的。函数路径和显示算子的实现等设置由 HDevEngine 主实例对所有线程进行全局管理。线程通常拥有自己的程序或函数调用实例。它们可以共享程序和函数的类实例。
程序或函数只有在设置了函数路径后才会被加载。因此,要安全地并行加载多个程序或函数,必须特别小心:
更多信息,请参阅 "类概述" 一节 。
请注意,HDevEngine 并不安全地支持在主函数调用返回应用代码后继续运行的子线程(用 par_start 启动)。作为 HDevEngine 应用程序入口的函数应在返回前加入所有已启动的子线程。
另见 "使用 HALCON 进行并行编程"一节 中有关使用 HALCON 进行并行编程的一般信息,尤其是 "并行化程序设计问题" 一节 中的样式指南。
为了优化性能,HDevEngine 还可以使用内置的即时(JIT)编译器执行编译过的函数。编译可以通过 HDevEngine 类的一个属性打开或关闭。如果打开,编译将在首次调用函数时隐式进行。也可以显式编译 HDevelop 程序中使用的函数。有关使用JIT编译器的更多信息,参见 "在HDevEngine/C++中使用即时编译器" 一节(C++)和 "在HDevEngine/.NET中使用即时编译器" 一节(.NET)。
使用以下功能的函数不支持 JIT 编译:
如果发现了这些特征之一,HDevEngine 会像以前一样不编译地执行相应的函数。
The latter use the XL versions of the HALCON library and of HALCON/C++, and HALCON/.NET, respectively. 与 HALCON 一样,HDevEngine 的语言依赖版本也分为两种:基于 HALCON 和基于 HALCON XL。后者分别使用 HALCON 库、HALCON/C++ 和 HALCON/.NET 的 XL 版本。