三菱数控采集方法
Overview
本文介绍如何使用三菱提供的开发套件,与三菱机床M70进行通信
开发套件下载地址:官方地址(需要注册账号)
如图,目前官方更新到了A7版本(需要购买序列号):
com开发基础
参考:https://www.cnblogs.com/dayw/category/512428.html
ProgID在注册表的 计算机\HKEY_CLASSES_ROOT
目录下
CLSID在ProgID下记录,如图:
COM组件对应二进制文件的存放路径:
环境配置
开发套件安装位置:C:\Program Files (x86)\EZSocket
库文件:
项目创建
使用Visual Studio 2022创建一个C++项目
将官方提供的头文件复制到项目的目录下,然后添加到头文件中如图
注意要使用32位来编译,官方库是32位的,使用64位编译会找不到api
可以参考官方手册的编程步骤和API说明编程:
示例代码
三菱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);
}
还有不懂的同学可以留言讨论,我看到会及时回复
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?