C++调用Halcon引擎
1、初始化Halcon引擎,HDevEngine();
2、设置程序路径,指定到devp上一级;
3、通过外部或本地程序创建程序,HDevProcedure();
4、创建调用程序实例,HDevProcedureCall();
(如果需要启动调试
4.5、通过HDevEngine 调用调试服务;
)
5、设置程序输入参数,HDevProcedureCall的Set方法设置输入参数;
6、执行程序,通过ProcedureCall调用Execute方法;
7、获取程序输出参数,HDevProcedureCall的Get方法获取输出参数;
(如果需要启动调试
8、通过HDevEngine 关闭调试服务;
)
其他:
1、通过HDevProcedure的方法可以查看输入输出参数信息,如参数个数,参数名称等;
C++代码
#include<iostream>
#include<HalconCpp.h>
#include<HDevEngineCpp.h>
#include"my_error_output.h"
using namespace HalconCpp;
using namespace HDevEngineCpp;
using namespace std;
void LoadProcedure(string procedureName); //函数声明
HDevEngine* gMyEngine; //Halcon引擎
HDevProcedure* gProgram; //创建程序
HDevProcedureCall* gProcedureCall; //调用程序
//变量
string ProcedureName;
HTuple paramKey, paramVal, dictHandle;
#if 1
int main()
{
gMyEngine = new HDevEngine();
gMyEngine->SetProcedurePath("E:/Code/L/cpp/Cpp/HalconEngine/porcedure"); //devp文件路径
LoadProcedure("test");
return 0;
}
#endif // 0
void LoadProcedure(string procedureName)
{
ProcedureName = procedureName;
try
{
gProgram = new HDevProcedure(procedureName.c_str());
gProcedureCall = new HDevProcedureCall(*gProgram);
printf("Strat Debug Server\n");
gMyEngine->StartDebugServer(); //启动调试服务
gProcedureCall->SetWaitForDebugConnection(true); //★等待debug连接,程序会在Execute步骤等待,直至Halcon附加到进程
printf("Wait For Connection...\n");
#pragma region Test 调试函数 只作显示
//cout << "输入参数个数: " << gProgram->GetInputCtrlParamCount() << endl;
//cout << "输出参数个数: " << gProgram->GetOutputCtrlParamCount() << endl;
//for (size_t i = 1; i <= gProgram->GetInputCtrlParamCount(); i++)
//{
// cout << gProgram->GetInputCtrlParamName(i) << endl;
//}
//for (size_t i = 1; i <= gProgram->GetOutputCtrlParamCount(); i++)
//{
// cout << gProgram->GetOutputCtrlParamName(i) << endl;
//}
#pragma endregion
gProcedureCall->SetInputCtrlParamTuple("Param1", "test"); //设置输入参数
gProcedureCall->Execute(); //执行程序
HTuple hv_Result;
hv_Result = gProcedureCall->GetOutputCtrlParamTuple("Result"); //获取输出参数
string str_Result = (string)hv_Result[0].S();
printf(str_Result.c_str());
gMyEngine->StopDebugServer(); //停止调试服务
}
catch (HDevEngineException ex)
{
DispMessage(ex.Message()); //Halcon例程自带错误函数
}
}
Halcon hdvp代码
try
*输入
Param1:=Param1
Result:='show:'+Param1
catch (Exception)
Result:=-1
ErrorString:=Exception
endtry
return ()
hdvp参数
效果
1、运行cpp程序后
2、打开hdvp文件,点击左上角-执行,选择-附加到进程
调式服务器默认确实即可。
链接成功后,可以F6单步调试hdvp文件。
运行成功后在控制台显示hdvp输出结果,如下图:
总结
程序参考halcon官方例程,如有不对欢迎指正。