1.C++项目引用HALCON依赖
1.1C++项目引用HALCON依赖
pro添加
# HALCON#include
INCLUDEPATH += $$(HALCONROOT)/includeINCLUDEPATH += $$(HALCONROOT)/include/halconcppINCLUDEPATH += $$(HALCONROOT)/include/hdevengine#libs
LIBS += -L$$(HALCONROOT)/lib/$$(HALCONARCH) -lhalcon -lhalconcpp -lhdevenginecp
1.2添加HALCON头文件、命名空间
设置路径
#include "HalconCpp.h" #include "HDevEngineCpp.h" using namespace HalconCpp; using namespace HDevEngineCpp; |
2.流程介绍
2.1引擎命名空间
主要用得到的类:HDevEngine、HDevProgram、HDevProgramCall、HDevProcedure、HDevProcedureCall、HDevOpMultiWindowImpl、HDevEngineException。
HDevEngine类是管理全局设置。如设置或获取全局变量的值、设置脚本路径、启动停止调试模式等。
HDevProgram类加载.hdev格式文件以及获取文件内部参数一般信息。
HDevProgramCall类执行.hdev文件格式脚本,并获取变量的值。
HDevProcedure类加载.hdvp格式外部函数以及内部函数。
HDevProcedureCall类执行.hdvp外部函数和内部函数。并且可以设置或获取外部函数、内部函数参数。
HDevOpMultiWindowImpl类主要是与显示结果相关,在脚本中执行的结果可以显示在C#中。
HDevEngineException类是引擎相关的异常类。
本文档以.hdvp为例子
2.1.1准备.hdvp函数
try *输入 Param1:=Param1 Param2:=Param2 Param3:=Param3 Param4:=Param4 if(Param1='查找模板OK' and Param2='测量成功' and Param3='测量成功' and Param4='测量成功') Result:=0 Result1:='OK' else Result:=1 Result1:='NG' endif catch (Exception) Result:=-1 ErrorString:=Exception endtry return () |
函数接口如下:5个输入,2个输出。同时添加参数文档说明(包含多种语言,需要设置需要的语言文档)。
2.1.2QT中调用该程序
全局变量
HDevEngine* MyEngine;//引擎
HDevProcedure *Program ;//函数
HDevProcedureCall* ProcCall;//函数回调
首先初始化引擎,需要设置语言和引擎文件的路径,路径设置不正确,找不到外部函数;同时可以获取该目录下的函数
MyEngine = new HDevEngine(); //设置文档语言,因为使用的中文需要设置,默认英文,语言不对应拿不到参数说明 MyEngine->SetEngineAttribute("docu_language","zh_CN"); QString hdevPath="C:/Users/DH/Desktop/"; QByteArray ba = hdevPath.toLatin1(); resource_path=ba.data(); MyEngine->AddProcedurePath(resource_path); HTuple procedurenames=MyEngine->GetProcedureNames(); QList<QString > nameList; int length= procedurenames.Length(); for (int var = 0; var < length; ++var) { QString name=procedurenames[var].S().ToUtf8(); nameList.append(name); } |
然后设置函数和函数回调指针,“test”为引擎文件名称,设置后会加载该引擎函数,后续可以使用回调执行。
try { Program = new HDevProcedure("test"); ProcCall = new HDevProcedureCall(*Program); }catch (HDevEngineException Ex) { ui->lineEdit_4->setText( "HDevEngine Exception"); |