目的://此示例程序显示如何使用类HDevEngine和HDevOpMultiWindowImpl //来实现鳍检测应用程序。
//几乎所有应用程序的功能都包含在// HDevelop程序fin_detection.hdev中,该程序可以在//目录hdevelop中找到。
//当您单击按钮Load时,加载HDevelop程序,当您单击//执行它时执行。
// HDevOpMultiWindowImpl类实现了HDevelop的内部//运算符。
27.2例子
本节介绍如何使用基于C#和Visual Basic .NET的示例应用程序的HDevEngine / .NET,它们位于子目录 %HALCONEXAMPLES%\ hdevengine \ c#和 %HALCONEXAMPLES%\ hdevengine \ vb.net。在下文中,我们仅描述C#示例; 除了两种语言之间的标准差异外,Visual Basic .NET版本是相同的。此外,与C#版本相比,Visual Basic .NET版本不包含对Linux的支持。
执行HDevelop程序(“执行HDevelop程序”部分),
执行HDevelop程序(“执行HDevelop程序”一节)和
显示操作员(“显示”部分),
错误处理(“错误处理”部分),和
多线程(“创建多线程应用程序”一节)。
27.2.1执行HDevelop程序
在本节中,我们将介绍如何使用HDevEngine加载和执行HDevelop程序。代码片段来自示例应用程序 ExecProgram,它检查塑料部件的边界是否有鳍。图27.1显示了该应用程序的屏幕截图; 它包含两个用于加载和执行HDevelop程序的按钮。
图片/ exec_program_dotnet_h12
图27.1:执行检测边界上的鳍的HDevelop程序。
27.2.1.1第1步:初始化
首先,我们创建主HDevEngine类HDevEngine的全局实例 。
private HDevEngine MyEngine = new HDevEngine();
加载表单后,我们将路径存储到HDevelop程序并使用方法SetProcedurePath设置外部过程路径:
String ProgramPathString;
private void ExecProgramForm_Load(object sender,System.EventArgs e)
{
string halconExamples = HSystem.GetSystem(“example_dir”);
string ProcedurePath = halconExamples @“\ hdevengine \ procedures”;
ProgramPathString = halconExamples
@ “\ hdevengine \ hdevelop \ fin_detection.hdev”;
if(!HalconAPI.isWindows)
{
ProcedurePath = ProcedurePath.Replace(’\\’,’/’);
ProgramPathString = ProgramPathString.Replace(’\\’,’/’);
}
MyEngine.SetProcedurePath(ProcedurePath);
}
请注意,只有在HDevelop程序调用外部过程时才需要后者。
27.2.1.2第2步:加载程序
单击按钮加载HDevelop程序时,将创建HDevProgram类的实例,并将程序路径作为参数。此外,创建HDevProgramCall的实例供以后使用。构造函数中发生的异常(例如,因为未正确指定文件名)是使用标准C#错误处理机制处理的:
private void LoadBtn_Click(object sender,System.EventArgs e)
{
尝试
{
HDevProgram Program = new HDevProgram(ProgramPathString);
ProgramCall = new HDevProgramCall(Program);
}
catch(HDevEngineException Ex)
{
MessageBox.Show(Ex.Message,“HDevEngine异常”);
返回;
}
catch(例外)
{
返回;
}
//启用执行按钮
ExecuteBtn.Enabled = true;
}
有关错误处理的更多信息,请参见 “错误处理”部分。
27.2.1.3第3步:执行程序
单击按钮执行程序时,将调用方法mHDEExecuteName:
private void ExecuteBtn_Click(object sender,System.EventArgs e)
{
尝试
{
尝试
{
ProgramCall.Execute();
}
catch(HDevEngineException Ex)
{
MessageBox.Show(Ex.Message,“HDevEngine异常”);
返回;
}
}
catch(例外)
{
}
}
27.2.1.4第4步:获得结果
这就是执行HDevelop程序所需要做的一切。您还可以使用方法GetCtrlVarTuple访问其“结果”,即其变量。在示例程序中,查询提取的fin的区域,然后显示:
双FinArea;
FinArea = ProgramCall.GetCtrlVarTuple(“FinArea”);
Window.SetTposition(150,20);
Window.WriteString(“Fin Area:”);
请注意,只有在程序终止时才能访问程序变量。
27.2.1.5概述:显示结果
如何在程序运行时显示结果将在“显示”部分中介绍 。
27.2.2执行HDevelop程序
资源下载此资源下载价格为4D币,请先登录
资源文件列表
ExecProgram/source/AssemblyInfo.cs , 2426
ExecProgram/source/ExecProgramForm.cs , 8753
ExecProgram/source/ExecProgramForm.resx , 6017
ExecProgram/vs_interface/.vs/ExecProgram/v15/.suo , 53248
ExecProgram/vs_interface/.vs/ExecProgram/v15/Server/sqlite3/db.lock , 0
ExecProgram/vs_interface/.vs/ExecProgram/v15/Server/sqlite3/storage.ide , 499712
ExecProgram/vs_interface/.vs/ExecProgram/v15/Server/sqlite3/storage.ide-shm , 32768
ExecProgram/vs_interface/.vs/ExecProgram/v15/Server/sqlite3/storage.ide-wal , 4136512
ExecProgram/vs_interface/bin/Debug/ExecProgram.exe , 9728
ExecProgram/vs_interface/bin/Debug/ExecProgram.pdb , 19968
ExecProgram/vs_interface/bin/Debug/halcon.dll , 32320568
ExecProgram/vs_interface/bin/Debug/halcondotnet.dll , 1271352
ExecProgram/vs_interface/bin/Debug/halcondotnet.xml , 4070318
ExecProgram/vs_interface/bin/Debug/hdevenginedotnet.dll , 54840
ExecProgram/vs_interface/bin/Debug/hdevenginedotnet.xml , 42154
ExecProgram/vs_interface/bin/x86/Debug/ExecProgram.exe , 9728
ExecProgram/vs_interface/bin/x86/Debug/ExecProgram.pdb , 19968
ExecProgram/vs_interface/bin/x86/Debug/halcon.dll , 32320568
ExecProgram/vs_interface/bin/x86/Debug/halcondotnet.dll , 1271352
ExecProgram/vs_interface/bin/x86/Debug/halcondotnet.xml , 4070318
ExecProgram/vs_interface/bin/x86/Debug/hdevenginedotnet.dll , 54840
ExecProgram/vs_interface/bin/x86/Debug/hdevenginedotnet.xml , 42154
ExecProgram/vs_interface/ExecProgram.csproj , 4933
ExecProgram/vs_interface/ExecProgram.sln , 1473
ExecProgram/vs_interface/obj/Debug/DesignTimeResolveAssemblyReferences.cache , 753
ExecProgram/vs_interface/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache , 6362
ExecProgram/vs_interface/obj/Debug/ExecProgram.csproj.CopyComplete , 0
ExecProgram/vs_interface/obj/Debug/ExecProgram.csproj.CoreCompileInputs.cache , 42
ExecProgram/vs_interface/obj/Debug/ExecProgram.csproj.FileListAbsolute.txt , 4123
ExecProgram/vs_interface/obj/Debug/ExecProgram.csproj.GenerateResource.cache , 867
ExecProgram/vs_interface/obj/Debug/ExecProgram.csprojAssemblyReference.cache , 30980
ExecProgram/vs_interface/obj/Debug/ExecProgram.exe , 9728
ExecProgram/vs_interface/obj/Debug/ExecProgram.ExecProgramForm.resources , 180
ExecProgram/vs_interface/obj/Debug/ExecProgram.pdb , 19968
ExecProgram/vs_interface/obj/Debug/ExecProgram.Properties.Resources.resources , 180
ExecProgram/vs_interface/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll , 3584
ExecProgram/vs_interface/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache , 6257
ExecProgram/vs_interface/obj/x86/Debug/ExecProgram.csproj.CopyComplete , 0
ExecProgram/vs_interface/obj/x86/Debug/ExecProgram.csproj.CoreCompileInputs.cache , 42
ExecProgram/vs_interface/obj/x86/Debug/ExecProgram.csproj.FileListAbsolute.txt , 2524
ExecProgram/vs_interface/obj/x86/Debug/ExecProgram.csproj.GenerateResource.cache , 867
ExecProgram/vs_interface/obj/x86/Debug/ExecProgram.exe , 9728
ExecProgram/vs_interface/obj/x86/Debug/ExecProgram.ExecProgramForm.resources , 180
ExecProgram/vs_interface/obj/x86/Debug/ExecProgram.pdb , 19968
ExecProgram/vs_interface/obj/x86/Debug/ExecProgram.Properties.Resources.resources , 180
ExecProgram/vs_interface/obj/x86/Debug/TempPE/Properties.Resources.Designer.cs.dll , 3584
ExecProgram/vs_interface/Properties/Resources.Designer.cs , 2857
ExecProgram/vs_interface/Properties/Resources.resx , 5350
ExecProgram/vs_interface/Properties/Settings.Designer.cs , 1111
ExecProgram/vs_interface/Properties/Settings.settings , 249
ExecProgram/vs_interface/readme.txt , 4333
ExecProgram/vs_interface/UpgradeLog.htm , 42744