天天看點

三菱(MITSUBISHI)CNC資料采集一,概述二,A2 API方式三,純協定方式四,機台配置IP

一,概述

前面介紹過,三菱CNC資料采集一般有兩種方法:

(1)通過官方A2 API(也叫EZSocket)進行資料采集,需要安裝A2驅動包(僅适用于windows系統)

(2)通過純TCP協定方法。該方法不局限于CPU架構(x86、ARM、MIPS等等),不局限作業系統(Windows、Linux、FreeRTOS、RT-Thread、μC/OS、裸機等等均可),不局限程式設計語言(Java、Python、C/C++、C#、Go等等均可)。

下面對兩種方法都進行相應介紹。

PS:建議直接用純協定方式。比如産品使用ARM Cortex-M,可以做到非常高的成本效益,也可以友善內建到軟體平台裡,歡迎交流扣扣17082750。

二,A2 API方式

1,安裝驅動包,可從下面位址下載下傳:

三菱CNC_三菱數控系統_資料采集_驅動_A2驅動,附c#demo源碼-C#文檔類資源-CSDN下載下傳

三菱(MITSUBISHI)CNC資料采集一,概述二,A2 API方式三,純協定方式四,機台配置IP

2,安裝完成後在預設路徑下會産生通訊庫,可以直接用最新版本的,複制到程式運作目錄下,直接引用就可以了。

三菱(MITSUBISHI)CNC資料采集一,概述二,A2 API方式三,純協定方式四,機台配置IP

3,撸代碼

if (lSystemType == (int)sysType.EZNC_SYS_MELDASC6C64 || 
    lSystemType == (int)sysType.EZNC_SYS_MELDAS700M  || 
    lSystemType == (int)sysType.EZNC_SYS_MELDAS700L  || 
    lSystemType == (int)sysType.EZNC_SYS_MELDAS800M  || 
    lSystemType == (int)sysType.EZNC_SYS_MELDAS800L)
{
    if (lSystemType == (int)sysType.EZNC_SYS_MELDASC6C64)
    {
        lResult = EZNcCom.SetTCPIPProtocol(strHostName, 64758);
    }
    else
    {
        lResult = EZNcCom.SetTCPIPProtocol(strHostName, 684);
    }

    ErrorCheck("SetTCPIPProtocol");

    if (lResult == 0)
    {
        lResultOpen = EZNcCom.Open2(5, lMachine, lTimeOut, "EZNC_LOCALHOST");//EZNC_LOCALHOST
        //lResultOpen = EZNcCom.Open(lSystemType, lMachine, lTimeOut, strHostName);//EZNC_LOCALHOST
        lResult = lResultOpen;
        ErrorCheck("Open");
    }
}
else
{
    lResultOpen = EZNcCom.Open2(lSystemType, lMachine, lTimeOut, strHostName);
    ErrorCheck("Open");
}
           
三菱(MITSUBISHI)CNC資料采集一,概述二,A2 API方式三,純協定方式四,機台配置IP

4,EZSocket可以直接實作的有下述功能:

(1)通信功能

(2)NC系統功能(如系統版本、報警等讀取)

(3)位置功能(各種坐标讀取等)

(4)指令值(G代碼模态值、刀補編号、M/S/T/B功能指令模态等讀取)

(5)程式(程式編号、段編号、目前段讀取)

(6)時間(系統時間、自動運作時間等讀取)

(7)軸監視(伺服軸、主軸、輔助軸等各種狀态讀取)

(8)運作狀态(在原點位置等狀态讀取)

(9)檔案(PC檔案和NC檔案讀寫)

(10)共變量(共變量讀取)

(11)局變量(局變量、子程式嵌套層數讀取)

(12)刀具(刀補資料、刀具壽命管理資料、工件坐标系等讀取)

(13)ATC(刀庫功能讀寫)

(14) 參數(所有NC内參數讀寫)

(15)操作(部分NC操作管理)

(16)PLC接口(PLC接口讀寫)

(17) 其它NC特殊功能讀寫

三,純協定方式

直接建立TCP連接配接,能夠采集的資料也是非常豐富的

bool CMITSUBISHI_PROTOCOLDlg::LinkFirstMachine(int cn)
{
	// 連接配接伺服器
	if(!m_bInit[cn])           //如果沒有連接配接伺服器
	{	  
	     
		//以下從檔案中得到伺服器的IP位址
		m_clientsocket.Create();
		GetDlgItemText(IDC_IPADDRESS_NC,IPstring[cn]);//控制器原IP位址	 
      
		if(m_clientsocket.Connect(IPstring[cn],683))
		{           
			m_clientsocket.Init(this);		  
			Message_bar.Format("已經連接配接%d",cn);
 		   	GetDlgItem(IDC_STATIC_MESS)->SetWindowText(Message_bar); 
			m_bInit[cn]=true;
	 		    
		}
		else
		{
			m_clientsocket.Close();
			Message_bar.Format("無法連接配接%d",cn);
			GetDlgItem(IDC_STATIC_MESS)->SetWindowText(Message_bar); 
			m_bInit[cn]=false;
		}
	 
	 
	}				
  return m_bInit[cn];
}
           
switch(ID.v)
{
	//時間
	case ID_POWER: mit.T_PowerON=l_value; break;   //開機時間
	case ID_AUTO:  mit.T_AutoRun=l_value;   break;  //自動運轉
	case ID_START :mit.T_AutoStart=l_value;  break; //自動啟動時間 STL
	case ID_PROCESS:mit.T_Process=l_value;  break;  			       	 
	//伺服
	case ID_SERVO_NAME1 :     mit.name1=m_strValue;     break;      
	case ID_SERVO_NAME2 :     mit.name2=m_strValue;     break;   
	case ID_SERVO_NAME3 :     mit.name3=m_strValue;     break; 
	//X
	case ID_POS_CURRENT_X:    mit.m_strCurr1=d_value; break;
	case ID_POS_WORK_X:       mit.m_strWork1=d_value; break;
	case ID_POS_MACHINE_X:    mit.m_strM1=d_value;    break;
	case ID_POS_DIS_X:        mit.m_strDis1=d_value;  break;
	case ID_SERVO_GAINX:      mit.gain_x=d_value;            break;
	case ID_SERVO_IX:         mit.current_x=i_value;break;            //負荷電流
	case ID_SERVO_LOADX:      mit.load_x=l_value;break;               
	//Y
	case ID_POS_CURRENT_Y:    mit.m_strCurr2=d_value; break;
	case ID_POS_WORK_Y:       mit.m_strWork2=d_value; break;
	case ID_POS_MACHINE_Y:    mit.m_strM2=d_value;    break;
	case ID_POS_DIS_Y:        mit.m_strDis2=d_value;  break;
	case ID_SERVO_GAINY:      mit.gain_y=d_value;        break;
	case ID_SERVO_IY:         mit.current_y=i_value;break;
	case ID_SERVO_LOADY:      mit.load_y=l_value;break;  
	//Z
	case ID_POS_CURRENT_Z:    mit.m_strCurr3=d_value; break;
	case ID_POS_WORK_Z:       mit.m_strWork3=d_value; break;
	case ID_POS_MACHINE_Z:    mit.m_strM3=d_value;    break;
	case ID_POS_DIS_Z:        mit.m_strDis3=d_value;  break;
	case ID_SERVO_GAINZ:      mit.gain_z=d_value;        break;
	case ID_SERVO_IZ:         mit.current_z=i_value;        break;
	case ID_SERVO_LOADZ:      mit.load_z=l_value;        break;  


	case ID_SPENDLE_GAIN :    mit.gain=d_value;   break;    //主軸增益     資料類型是6 DOUBLE
	case ID_SPENDLE_TEMP :    mit.tmep=i_value;      break;   //溫度          2        int
	case ID_SPENDLE_LOAD :   mit.load=l_value;      break;   //負載          資料類型是3 LONG
	case ID_SPENDLE_I:        mit.current=i_value;    break;   //電流    %    2        int
	case ID_SPENDLE_SPEED:    mit.speed=d_value;    break;     //速度    6
	case ID_RDY_HLD:        GetDlgItem(IDC_RDY_STATE)->SetWindowText(m_strValue);  break;
	case ID_PROC_MODE:        GetDlgItem(IDC_RDY_MODE)->SetWindowText(m_strValue);  break;

	case ID_SERVO_NUM:       GetDlgItem(IDC_AXIZ_NUM)->SetWindowText(m_strValue); break; //BYTE
	//主軸數量
	case ID1039N:         GetDlgItem(IDC_SPENDLE_NUM)->SetWindowText(m_strValue);  break;	 
	//間隙補償
	case ID4007_1:     mit.enc_comp1=d_value;  break; //double
	case ID4007_2:     mit.enc_comp2=d_value;  break; //double
	case ID4007_3:     mit.enc_comp3=d_value;  break; //double
	//G00反向間隙
	case ID2011X: mit.backlashx_g0=l_value;  break; //LONG
	case ID2011Y: mit.backlashy_g0=l_value;  break; //LONG
	case ID2011Z: mit.backlashz_g0=l_value;  break; //LONG
	//G01反向間隙
	case ID2012X:   mit.backlashx_g1=l_value;  break; //LONG
	case ID2012Y:   mit.backlashy_g1=l_value;  break; //LONG
	case ID2012Z:   mit.backlashz_g1=l_value;  break; //LONG

    ......
}
           
三菱(MITSUBISHI)CNC資料采集一,概述二,A2 API方式三,純協定方式四,機台配置IP

四,機台配置IP

1.點選右上角維護

2.左下角切換找到以太網參數或基本公用PRM

3.找到參數1926

三菱(MITSUBISHI)CNC資料采集一,概述二,A2 API方式三,純協定方式四,機台配置IP
三菱(MITSUBISHI)CNC資料采集一,概述二,A2 API方式三,純協定方式四,機台配置IP

繼續閱讀