C++调用HALCON引擎

1.C++项目引用HALCON依赖

1.1C++项目引用HALCON依赖

pro添加

# HALCON
#include
INCLUDEPATH += $$(HALCONROOT)/include
INCLUDEPATH += $$(HALCONROOT)/include/halconcpp
INCLUDEPATH += $$(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");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值