public void MeasurePart(string partId) { _currentPartId = partId; string prgFile = FindProgFile(partId); // 返回带扩展名的零件程序 // 正常情况下不会返回空值 Debug.Assert(string.IsNullOrEmpty(prgFile)); _bladeMeasAssist = new BladeMeasAssist(); _bladeMeasAssist.Part = PartConfigManager.Instance.GetPartConfig(partId); // 创建blade.txt文件 _bladeMeasAssist.CreateBladeTxtFromNominal(); try { _partPrograms.CloseAll(); _pcdApp.Maximize(); _pcdApp.SetActive(); _partProgram = _partPrograms.Open(prgFile, _pcdApp.DefaultMachineName /*"CMM1"*/); _partProgram.OnExecuteDialogErrorMsg += _partProgram_OnExecuteDialogErrorMsg; // 获取程序中测尖直径 PCDLRN.OldBasic ob = _partProgram.OldBasic; _bladeMeasAssist.ProbeDiam = 2 * ob.GetProbeRadius(); _bladeMeasAssist.RtfFileName /*_outputFileName*/ = FindOutputFileName(); // 异步执行 _partProgram.AsyncExecute(); } catch (Exception ex) { } _IsMeasured = true; // 是否需要 }
/// <summary> /// 初始化PCDmis应用,并设置APPEVENT事件 /// </summary> public void InitialPCDmis() { ClosePCDmis(); //try //{ _pcdApplication = null; _pcdProgramManager = null; _pcdAppEvents = null; Type t = Type.GetTypeFromProgID("PCDLRN.Application"); SetPCDmisOffline(t); //是否以离线方式启动PCDMIS _pcdApplication = (PCDLRN.Application)Activator.CreateInstance(t); _pcdApplication.UserExit = true; // 用户无法手动退出PCDMIS _IsInitialed = _pcdApplication.WaitUntilReady((int)_timeout.TotalSeconds); // 等待初始化完成 Thread.Sleep(5000); // 等待PCDmils创建完成 _pcdApplication.Visible = true; _pcdProgramManager = _pcdApplication.PartPrograms; _pcdAppEvents = _pcdApplication.ApplicationEvents; _pcdAppEvents.OnCloseExecutionDialog += _pcdAppEvents_OnCloseExecutionDialog; _pcdAppEvents.OnClosePartProgram += _pcdAppEvents_OnClosePartProgram; _pcdAppEvents.OnSavePartProgram += _pcdAppEvents_OnSavePartProgram; _pcdApplication.SetActive(); _IsInitialed = true; //} //catch (Exception ex) //{ // // 启动失败的处理方式 // throw ex; //} }
/// <summary> /// 开启并初始化PCDMIS /// </summary> public void InitialPCDmis() { // 关闭先前的PCDMIS ClosePCDmis(); try { Type t = Type.GetTypeFromProgID("PCDLRN.Application"); //SetPCDmisOffline(t); //是否以离线方式启动PCDMIS _pcdApp = (PCDLRN.Application)Activator.CreateInstance(t); _pcdApp.UserExit = false; _pcdApp.Visible = true; if (_pcdApp.SetActive()) { _pcdApp.Maximize(); } _partPrograms = _pcdApp.PartPrograms; _pcdAppEvents = _pcdApp.ApplicationEvents; _pcdAppEvents.OnCloseExecutionDialog += _pcdAppEvents_OnCloseExecutionDialog;; } catch (Exception ex) { // 启动失败的处理方式 } _IsInitialed = true; }