using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; using HalconDotNet; namespace BroCVisionHalcon { public class HDevEngineTool { #region 常量 // path of external procedures string ProcedurePath = Environment.CurrentDirectory + "\\Vision\\"; #endregion #region 成员变量 /// /// 处理过程名 /// public string ProcedureName; /// /// hdev程序启动引擎 /// private HalconDotNet.HDevEngine MyEngine; /// /// 程序载入工具 .hdev /// private HDevProgramCall ProgramCall; /// /// 过程载入工具 .hdvp /// private HDevProcedureCall ProcedureCall; /// /// 控制参数字典 /// public Dictionary TupleDictionary { get; set; } /// /// 图形参数字典 /// public Dictionary ImageDictionary { get; set; } #endregion #region 初始化 /// /// 实例化 默认搜索路径为: 启动路径//Vision// /// public HDevEngineTool() { ProcedureName = ""; MyEngine = new HalconDotNet.HDevEngine(); MyEngine.SetProcedurePath(ProcedurePath); ImageDictionary = new Dictionary(); TupleDictionary = new Dictionary(); } /// /// 实例化 /// /// 外部函数搜索路径 public HDevEngineTool(string path) { MyEngine = new HalconDotNet.HDevEngine(); MyEngine.SetProcedurePath(path); ImageDictionary = new Dictionary(); TupleDictionary = new Dictionary(); } #endregion /// /// 设置函数运行所需参数 /// /// 控制参数 /// 图形参数 public void SetDictionary(Dictionary _tupleDictionary, Dictionary _imageDictionary) { this.TupleDictionary = _tupleDictionary; this.ImageDictionary = _imageDictionary; } /// /// 载入过程 .hdvp /// /// 过程名 /// //public void LoadProcedure(string procedureName,HDisplayControl.HDisplayControl hwin) //{ // ProcedureName = procedureName; // MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(hwin.HalconWindow)); // try // { // HDevProcedure procedure = new HDevProcedure(procedureName); // ProcedureCall = new HDevProcedureCall(procedure); // } // catch (HDevEngineException Ex) // { // Trace.TraceInformation("HDevProgram Load fail, ex:" + Ex.Message); // return; // } //} /// /// 载入过程 .hdvp /// /// 过程名 public void LoadProcedure(string procedureName) { ProcedureName = procedureName; try { HDevProcedure procedure = new HDevProcedure(procedureName); ProcedureCall = new HDevProcedureCall(procedure); } catch (HDevEngineException Ex) { Trace.TraceInformation("HDevProgram {0} Run fail ,Error Line : {1}, Line number: {2}, Halcon error number : {3}", Ex.ProcedureName, Ex.LineText, Ex.LineNumber, Ex.HalconError); return; } } /// /// 执行过程 /// public void RunProcedure() { try { foreach (KeyValuePair pair in TupleDictionary) { if(pair.Key.Contains("INPUT")) { ProcedureCall.SetInputCtrlParamTuple(pair.Key, pair.Value); } } foreach(KeyValuePairpair in ImageDictionary) { if(pair.Key.Contains("INPUT")) { ProcedureCall.SetInputIconicParamObject(pair.Key, pair.Value); } } ProcedureCall.Execute(); string[] tupleKeys= TupleDictionary.Keys.ToArray(); string[] imageKeys = ImageDictionary.Keys.ToArray(); for (int i = 0; i < TupleDictionary.Count;i++ ) { if (tupleKeys[i].Contains("OUTPUT")) { TupleDictionary[tupleKeys[i]] = ProcedureCall.GetOutputCtrlParamTuple(tupleKeys[i]); } } for (int i = 0; i < ImageDictionary.Count;i++ ) { if (imageKeys[i].Contains("OUTPUTOBJ")) { ImageDictionary[imageKeys[i]] = ProcedureCall.GetOutputIconicParamObject(imageKeys[i]); } if (imageKeys[i].Contains("OUTPUTIMG")) { ImageDictionary[imageKeys[i]] = ProcedureCall.GetOutputIconicParamImage(imageKeys[i]); } if (imageKeys[i].Contains("OUTPUTREG")) { ImageDictionary[imageKeys[i]] = ProcedureCall.GetOutputIconicParamRegion(imageKeys[i]); } } } catch (HDevEngineException Ex) { Trace.TraceInformation("HDevProgram {0} Run fail ,Error Line : {1}, Line number: {2}, Halcon error number : {3}",Ex.ProcedureName,Ex.LineText,Ex.LineNumber,Ex.HalconError); return; } } } }