在启动过程中检测 PC-DMIS 是否连接到 CMM 的有效解决方案
在改进我的应用程序以自动化 pc-dmis 的过程中,我承担了将部分应用程序从 vbscript 转换为纯 C# 代码的任务。在旧版本中与 pc-dmis 进行“交互”时,我会调用 vbscript 来自动化 pc-dmis,并等待脚本完成后再执行其他操作。
在将 vbscript 代码转换为 C# 代码的过程中,我遇到了一个问题:我不知道如何在 C# 中处理应用程序事件。我无法区分 vbscript 和 C# 之间的语法差异。
我特别想处理的应用程序事件是 pc-dmis 启动期间的“IsMachineConnected”事件。
如果有人能分享示例或经验,我将不胜感激。
以下是我启动 pc-dmis 的工作代码:
private void PCDMIS_Startup(object sender, StartupEventArgs e) { LoadScreen loadScreen = new LoadScreen(); loadScreen.Show(); bool startCondition = true; Process[] pcdStartupCheck = Process.GetProcessesByName("PCDLRN"); if (pcdStartupCheck.Length > 0) { startCondition = false; } else { Type PCDRLN_Application = null; object PCDObj = null; PCDLRN.Application PCDApp = null; try { PCDRLN_Application = Type.GetTypeFromProgID("PCDLRN.Application"); PCDObj = Activator.CreateInstance(PCDRLN_Application); } catch (System.Exception em) { MessageBox.Show(em.Message); } PCDApp = new PCDLRN.Application(); PCDApp.OperatorMode = true; PCDApp.Visible = false; PCDApp.ApplicationEvents.OnMachineConnected += new IApplicationEvents_OnMachineConnectedEventHandler( onMachineConnect); void onMachineConnect(Machine machine) { //MessageBox.Show("machine connected"); startCondition = false; } if(startCondition) { WindowSearcher homeWindowSearch = new WindowSearcher(); homeWindowSearch.BeginWindowLook_Home(); } } new MainWindow().Show(); loadScreen.Close(); }
引用 Interop.Pcdlrn 库并输入类似于以下内容...(减去类内容)。
using PCDLRN; namespace SmartPattern_PcdApp { public partial class Form1 : Form { // Globals ArrayList CmdItems = new ArrayList(); PcDmisCls oPcdApp = new PcDmisCls(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { PartProgram part = oPcdApp.Part(); EditWindow ew = oPcdApp.editWindow; oPcdApp.application.ApplicationEvents.OnSavePartProgram += new IApplicationEvents_OnSavePartProgramEventHandler(onSavePart); part.OnAddObject += new IPartProgramEvents_OnAddObjectEventHandler(addedObject); part = null; ew = null; } // Triggers when part is saved... void onSavePart(PartProgram prg) { // what do I put here? MessageBox.Show("Part Saved!"); } // Triggers when an object is added void addedObject(Command cmd) { MessageBox.Show("Item: " + cmd.ID + " was added!"); // Create cmds in C } }
你的零件程序保存示例我已经完美运行了,我只需要在有空的时候用坐标测量机(CMM)测试一下“OnMachineConnected”事件。等我找到完整的解决方案后,我会更新这篇文章。
以下是在启动过程中检测 PC-DMIS 是否连接到 CMM 的有效解决方案。非常感谢
private void PCDMIS_Startup(object sender, StartupEventArgs e) { LoadScreen loadScreen = new LoadScreen(); loadScreen.Show(); bool startCondition = true; Process[] pcdStartupCheck = Process.GetProcessesByName("PCDLRN"); if (pcdStartupCheck.Length > 0) { startCondition = false; } else { Type PCDRLN_Application = null; object PCDObj = null; PCDLRN.Application PCDApp = null; try { PCDRLN_Application = Type.GetTypeFromProgID("PCDLRN.Application"); PCDObj = Activator.CreateInstance(PCDRLN_Application); } catch (System.Exception em) { MessageBox.Show(em.Message); } PCDApp = new PCDLRN.Application(); PCDApp.OperatorMode = true; PCDApp.Visible = false; PCDApp.ApplicationEvents.OnMachineConnected += new IApplicationEvents_OnMachineConnectedEventHandler(onMachineConnect); void onMachineConnect(Machine machine) { //MessageBox.Show("machine connected"); startCondition = false; } if(startCondition) { WindowSearcher homeWindowSearch = new WindowSearcher(); homeWindowSearch.BeginWindowLook_Home(); } } new MainWindow().Show(); loadScreen.Close();

浙公网安备 33010602011771号