奧推網

選單
科技

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

今天,正運動小助手給大家分享一下運動控制器之ZMC408SCAN的硬體介面。

一ZMC408SCAN硬體介紹

      1.功能介紹

ZMC408SCAN匯流排控制器支援EtherCAT匯流排連線,支援最多達8軸運動控制,支援直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設定等;採用最佳化的網路通訊協議可以實現實時的運動控制。ZMC408SCAN匯流排控制器支援脈衝軸/匯流排軸/振鏡軸混合插補。

ZMC408SCAN系列運動控制器支援乙太網,RS232通訊介面和電腦相連,接收電腦的指令執行,可以透過CAN匯流排去連線各個擴充套件模組,從而擴充套件輸入輸出點數或運動軸。

ZMC408SCAN系列運動控制卡的應用程式可以使用 VC,VB,VS,C++,C#等軟體來開發,程式執行時需要動態庫zmotion。dll。除錯時可以把ZDevelop軟體同時連線到控制器,從而方便除錯、方便觀察。

      2.硬體介面

本地脈衝軸說明

      3.

IPG鐳射器控制

IPG鐳射器使用模擬量控制能量,輸出訊號為24V高電壓控制鐳射器輸出,因此控制器本身帶有一個特殊24V控制介面,內建模擬量控制鐳射器的動作,可透過介面直接與鐳射器相連線,控制對應動作。

      408SCAN控制器IPG介面功能:

(1)可透過直接控制器傳送鐳射,紅光,使能等輸出訊號進行操作鐳射器讓鐳射器進行對應響應。

(2)DB口中帶有16位模擬量輸入輸出,精準控制能量輸出大小。

(3)可接收鐳射器訊號,顯示in作出對應響應。

      4.

fiber鐳射器控制過程

為了擴充套件控制其他型別鐳射器,408SCAN控制器本體上增設有一個擴充套件介面,目前可支援擴充套件fiber鐳射器型別,透過擴充套件介面進行連線擴充套件板,轉換TTL訊號後進行對應控制鐳射器的鐳射使能,紅光開關以及8位數字量控制能量,使用指令配置EXIO介面,配置連線擴充套件板。

      EXIO擴充套件介面介紹:EXIO同時對映到輸入與輸出。

指令原型:EXIO_DIR(isel, dirbit)

isel: -0(指定鐳射器型別,目前只支援fiber鐳射器)

dirbit: 按位設定是否輸出, 0- 輸入, 1-輸出。(自定義配置轉介面對應的訊號型別)。

EXIO介面經轉換板轉接之後,對應鐳射器引腳如表所示,表中紅色字型為輸入訊號,其他為輸出訊號。因此,需要透過指令EXIO_DIR進行配置對應位對映輸入輸出。

      5.振鏡控制過程

鐳射振鏡是一種專門用於鐳射加工領域的特殊的運動器件,鐳射振鏡頭內包含的主要元件是鐳射發生器,兩個電機和兩個振鏡片,它靠兩個電機分別控制兩個振鏡片X和Y反射鐳射,形成XY平面的運動,這兩個電機使用控制器上的振鏡軸介面控制。

鐳射振鏡不同於一般的電機,鐳射振鏡具有非常小的慣量,且在運動的過程中負載非常小,只需要帶動反射鏡片,系統的響應非常快。

ZMC408SCAN支援XY2-100振鏡協議,支援運動控制與振鏡聯合插補運動。同時支援XY2-100E振鏡協議,支援瑞雷振鏡閉環,振鏡運動過程中會實施反饋mpos的振鏡位置,可透過讀取的位置進行對應處理實現閉環,並且會對應報警。

上位機透過網口與控制器相連,透過XY2-100振鏡協議進行控制振鏡軸的運動,透過匯流排協議或者脈衝模式控制伺服軸運動。

使用ZMC408SCAN控制器的振鏡軸介面連線鐳射振鏡頭,每個振鏡軸介面內包含兩路振鏡通道訊號,分別控制振鏡片X、Y的偏轉,從而控制了鐳射打到工件的位置。

      4.

控制器PWM模擬量介紹

ZMC408SCAN的鐳射電源介面內建輸出口8,9控制鐳射器輸出可配置PWM,PWM 輸出受正常輸出功能的控制,只有輸出口狀態ON的時候PWM才能實際輸出,這樣可以用來控制鐳射能量。

ZMC408SCAN控制器存在三路模擬量輸入輸出,可進行控制鐳射器能量輸出,其中兩路在控制器埠上,模擬量精度為12位。還有一路模擬量在鐳射電源介面上面,專門控制ipg的鐳射器能量,模擬量精度為16位。(ZMC408SCAN內部DA採用了內部電源)

      5.控制器基本資訊

軸0-3為普通脈衝軸,振鏡0為軸4、軸5控制振鏡XY,振鏡1為軸6、軸7控制XY。

二C++進行振鏡+運動控制開發

      1.

新建MFC專案並新增函式庫

(1)在VS2015選單“檔案”→“新建”→ “專案”,啟動建立專案嚮導。

(2)選擇開發語言為“Visual C++”和程式型別“MFC應用程式”。

(3)點選下一步即可。

(4)選擇型別為“基於對話方塊”,下一步或者完成。

(5)找到廠家提供的光碟資料,路徑如下(64位庫為例)。

A。進入廠商提供的光碟資料找到“8。PC函式”資料夾,並點選進入。

B。選擇“函式庫2。1”資料夾。

C。選擇“Windows平臺”資料夾。

D。根據需要選擇對應的函式庫這裡選擇64位庫。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

E。解壓C++的壓縮包,裡面有C++對應的函式庫。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

F。函式庫具體路徑如下。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

(6)將廠商提供的C++的庫檔案和相關標頭檔案複製到新建的專案裡面。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

(7)在專案中新增靜態庫和相關標頭檔案。

A。先右擊專案檔案,接著依次選擇:“新增”→“現有項”。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

B。在彈出的視窗中依次新增靜態庫和相關標頭檔案。

(8)宣告用到的標頭檔案和定義控制器連線控制代碼。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

至此專案新建完成,可進行MFC專案開發。

      2.檢視PC函式手冊,熟悉相關函式介面

      (1)PC函式手冊也在光碟資料裡面,具體路徑如下:“光碟資料\8.PC函式\函式庫2.1\ZMotion函式庫程式設計手冊 V2.1.pdf”

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

      (2)連結控制器,獲取連結控制代碼。

ZAux_OpenEth()介面說明:

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

(3)振鏡運動介面。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

為振鏡運動單獨封裝了一個運動介面,使用movescanabs指令進行運動,採用FORCE_SPEED引數設定運動過程中的速度,運動過程中基本不存在加減速過程,支援us級別的時間控制。

      3.

MFC開發控制器振鏡運動例程

(1)例程介面如下。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

(2)連結按鈕的事件處理函式中呼叫連結控制器的介面函式ZAux_OpenEth(),與控制器進行連結,連結成功後啟動定時器1監控控制器狀態。

//網口連結控制器

void CSingle_move_Dlg::OnOpen()

{

char   buffer[256];

int32 iresult;

//如果已經連結,則先斷開連結

if(NULL != g_handle)

{

ZAux_Close(g_handle);

g_handle = NULL;

}

//從IP下拉框中選擇獲取IP地址

GetDlgItemText(IDC_IPLIST,buffer,255);

buffer[255] = ‘\0’;

//開始連結控制器

iresult = ZAux_OpenEth(buffer, &g_handle);

if(ERR_SUCCESS != iresult)

{

g_handle = NULL;

MessageBox(_T(“連結失敗”));

SetWindowText(“未連結”);

return;

}

//連結成功開啟定時器1

SetWindowText(“已連結”);

SetTimer( 1, 100, NULL );

}

      (3)

透過定時器

控控制器狀態

void CSingle_move_Dlg::OnTimer(UINT_PTR nIDEvent)

{

// TODO: Add your message handler code here and/or call default

if(NULL == g_handle)

{

MessageBox(_T(“連結斷開”));

return ;

}

if(1 == nIDEvent)

{

CString string;

float position = 0;

ZAux_Direct_GetDpos( g_handle,m_nAxis,&position);          //獲取當前軸位置

string。Format(“振鏡X軸當前位置:%。2f”, position );

GetDlgItem( IDC_CURPOS )->SetWindowText( string );

float NowSp = 0;

ZAux_Direct_GetVpSpeed( g_handle,m_nAxis,&NowSp);          //獲取當前軸速度

string。Format(“振鏡X軸當前速度:%。2f”, NowSp );

GetDlgItem( IDC_CURSPEED)->SetWindowText( string );

ZAux_Direct_GetDpos(g_handle, m_nAxis+1, &position);          //獲取當前軸位置

string。Format(“振鏡Y軸當前位置:%。2f”, position);

GetDlgItem(IDC_CURPOS2)->SetWindowText(string);

ZAux_Direct_GetVpSpeed(g_handle, m_nAxis+1, &NowSp);          //獲取當前軸速度

string。Format(“振鏡Y軸當前速度:%。2f”, NowSp);

GetDlgItem(IDC_CURSPEED2)->SetWindowText(string);

int status = 0;

ZAux_Direct_GetIfIdle(g_handle, m_nAxis,&status);           //判斷當前軸狀態

if (status == -1)

{

GetDlgItem( IDC_CURSTATE )->SetWindowText( “當前狀態:停  止” );

}

else

{

GetDlgItem( IDC_CURSTATE )->SetWindowText( “當前狀態:運動中” );

}

}

CDialog::OnTimer(nIDEvent);

}

      (4)

過啟動按鈕的事件處理函式獲取編輯框的移動軌跡,並設定振鏡軸引數操作振鏡軸運動。

void CSingle_move_Dlg::OnStart()        //啟動運動

{

if(NULL == g_handle)

{

MessageBox(_T(“連結斷開狀態”));

return ;

}

UpdateData(true);//重新整理引數

int status = 0;

ZAux_Direct_GetIfIdle(g_handle, m_nAxis,&status);           //判斷當前軸狀態

if (status == 0) //已經在運動中

{

return;

}

//設定軸型別 1-脈衝軸型別

for (int i = 4; i < 6; i++)

{

ZAux_Direct_SetAtype(g_handle, i, m_Atype);

ZAux_Direct_SetMerge(g_handle,i,1);

//設定脈衝當量

ZAux_Direct_SetUnits(g_handle, i, m_units);

//設定速度,加減速

ZAux_Direct_SetLspeed(g_handle, i, m_lspeed);

ZAux_Direct_SetSpeed(g_handle, i, m_speed);

ZAux_Direct_SetForceSpeed(g_handle, i, m_speed);

ZAux_Direct_SetAccel(g_handle, i, m_acc);

ZAux_Direct_SetDecel(g_handle, i, m_dec);

//設定S曲線時間 設定為0表示梯形加減速

ZAux_Direct_SetSramp(g_handle, i, m_sramp);

}

//使用MOVESCANABS運動

int axislist[2] = { 4,5 };

CString str;

GetDlgItem(IDC_EDIT_POSX1)->GetWindowText(str);

float dbx = atof(str);

GetDlgItem(IDC_EDIT_POSY1)->GetWindowText(str);

float dby = atof(str);

float dposlist[2] = { dbx ,dby};

ZAux_MoveScanAbs(2, axislist, dposlist);

GetDlgItem(IDC_EDIT_POSX2)->GetWindowText(str);

dbx = atof(str);

GetDlgItem(IDC_EDIT_POSY2)->GetWindowText(str);

dby = atof(str);

dposlist[0] = dbx;

dposlist[1] = dby;

ZAux_MoveScanAbs(2, axislist, dposlist);

GetDlgItem(IDC_EDIT_POSX3)->GetWindowText(str);

dbx = atof(str);

GetDlgItem(IDC_EDIT_POSY3)->GetWindowText(str);

dby = atof(str);

dposlist[0] = dbx;

dposlist[1] = dby;

ZAux_MoveScanAbs(2, axislist, dposlist);

GetDlgItem(IDC_EDIT_POSX4)->GetWindowText(str);

dbx = atof(str);

GetDlgItem(IDC_EDIT_POSY4)->GetWindowText(str);

dby = atof(str);

dposlist[0] = dbx;

dposlist[1] = dby;

ZAux_MoveScanAbs(2, axislist, dposlist);

GetDlgItem(IDC_EDIT_POSX5)->GetWindowText(str);

dbx = atof(str);

GetDlgItem(IDC_EDIT_POSY5)->GetWindowText(str);

dby = atof(str);

dposlist[0] = dbx;

dposlist[1] = dby;

ZAux_MoveScanAbs(2, axislist, dposlist);

UpdateData(false);

}

      (5)

透過斷開按鈕的事件處理函式來斷開與控制卡的連線。

void CSingle_move_Dlg::OnClose()        //斷開連結

{

// TODO: Add your control notification handler code here

if(NULL != g_handle)

{

KillTimer(1);            //關定時器

KillTimer(2);

ZAux_Close(g_handle);

g_handle = NULL;

SetWindowText(“未連結”);

}

}

     (6)

透過坐

標清零按鈕的事件處理函式移動振鏡軸

到中心零點位置,不直接使用

dpos=0,修改振鏡軸座標

回零

void CSingle_move_Dlg::OnZero()          //清零座標

{

if(NULL == g_handle)

{

MessageBox(_T(“連結斷開狀態”));

return ;

}

// TODO: Add your control notification handler code here

int axislist[2] = { 4,5 };

float dposlist[2] = { 0 };

ZAux_Direct_MoveAbs(g_handle,2,axislist,dposlist);        //設定運動回零點

}

三除錯與監控

編譯執行例程,同時透過ZDevelop軟體連線控制器對控制器狀態進行監控。

      1.

ZDevelop軟體連線控制器監控控制器的狀態,檢視振鏡軸對應引數,並可搭配示波器檢測振鏡軌跡。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

設定振鏡軸運動,首先需要將軸型別配置成21振鏡軸型別,並對應配置振鏡軸的速度加減速等引數才可操作振鏡進行運動。

      2.

透過ZDevelop軟體的示波器監控振鏡運動執行軌跡。

開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹

本次,正運動技術開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹,就分享到這裡。