三菱数控采集方法

Overview

本文介绍如何使用三菱提供的开发套件,与三菱机床M70进行通信
开发套件下载地址:官方地址(需要注册账号)
如图,目前官方更新到了A7版本(需要购买序列号):
image

com开发基础

参考:https://www.cnblogs.com/dayw/category/512428.html
ProgID在注册表的 计算机\HKEY_CLASSES_ROOT 目录下

CLSID在ProgID下记录,如图:
image

COM组件对应二进制文件的存放路径:

环境配置

开发套件安装位置:C:\Program Files (x86)\EZSocket
库文件:

项目创建

使用Visual Studio 2022创建一个C++项目
image

将官方提供的头文件复制到项目的目录下,然后添加到头文件中如图
image

注意要使用32位来编译,官方库是32位的,使用64位编译会找不到api

image

可以参考官方手册的编程步骤和API说明编程:

image

示例代码

三菱m70的通信端口为683

#include <iostream>
#include <climits>
#include "EZSocketCommonErr.h"
#include "EZSocketNc.h"
#include "EZSocketNcDef.h"
#include "EZSocketNcErr.h"
#include "EZSocketNcStr.h"


const LPCOLESTR CNC_IP = L"192.168.XXX.XXX";
const LONG CNC_port = 683;

int main()
{
    LONG Iret;

    IUnknown* m_pezUnknown = NULL;
    IEZNcCommunication3* m_pezComm = NULL;
    IEZNcPosition* m_pezPos = NULL;
    IEZNcProgram2* m_pezProgram = NULL;
    IEZNcFile6* m_pezFile = NULL;
    IEZNcOperation* m_pezOperation = NULL;
    IEZNcRunStatus* m_pezRunStatus = NULL;
    IEZNcAxisMonitor* m_pezAxisMonitor = NULL;
    IEZNcTime* m_pezTime = NULL;
    IEZNcCommand2* m_pezCommand2 = NULL;
    IEZNcDevice* m_pezDevice = NULL;
    IEZNcParameter3* m_pezParameter3 = NULL;
    enum { AXIS_X = 1, AXIS_Y, AXIS_Z, AXIS_C };

    DOUBLE	m70_MachinePos[4];
    for (int i = 0; i < 4; i++) {
        m70_MachinePos[i] = 100.0;
    }
    
    CLSID clsid;
    if (Iret = CoInitialize(NULL) != S_OK) {
        std::cout << "实例化com失败!";
        return -1;
    }
    
    Iret = CLSIDFromProgID(L"EZSocketNc.EZNcCommunication", &clsid);
    if (Iret != S_OK) {
        std::cout << "CLSIDFromProgID失败!";
        return -1;
    }
    
    Iret = CoCreateInstance(clsid,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_IEZNcCommunication3,
        (void**)&m_pezComm);
    if (Iret != S_OK) {
        std::cout << std::hex;
        std::cout << Iret;
        std::cout << "CoCreateInstance失败!";
        return -1;
    }
    Iret = m_pezComm->QueryInterface(IID_IEZNcPosition, (void**)&m_pezPos);

    m_pezComm->SetTCPIPProtocol(CNC_IP, CNC_port, &Iret);
    m_pezComm->Open2(EZNC_SYS_MELDAS700M, 1, 100, &Iret);

    m_pezPos->GetMachinePosition(AXIS_X, &m70_MachinePos[0], 0, &Iret);
    m_pezPos->GetMachinePosition(AXIS_Y, &m70_MachinePos[1], 0, &Iret);
    m_pezPos->GetMachinePosition(AXIS_Z, &m70_MachinePos[2], 0, &Iret);

    for (int i = 0; i < 3; i++) {
        std::cout << m70_MachinePos[i] << std::endl;
    }
    //std::cout << "Hello World!\n";

    m_pezComm->Close(&Iret);
}

还有不懂的同学可以留言讨论,我看到会及时回复

posted @   snail1502  阅读(507)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示