G
N
I
D
A
O
L

在启动过程中检测 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();

 

posted @ 2025-05-31 20:53  firespeed  阅读(43)  评论(0)    收藏  举报