今天,正運動小助手給大家分享一下運動控制器之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位庫。
E。解壓C++的壓縮包,裡面有C++對應的函式庫。
F。函式庫具體路徑如下。
(6)將廠商提供的C++的庫檔案和相關標頭檔案複製到新建的專案裡面。
(7)在專案中新增靜態庫和相關標頭檔案。
A。先右擊專案檔案,接著依次選擇:“新增”→“現有項”。
B。在彈出的視窗中依次新增靜態庫和相關標頭檔案。
(8)宣告用到的標頭檔案和定義控制器連線控制代碼。
至此專案新建完成,可進行MFC專案開發。
2.檢視PC函式手冊,熟悉相關函式介面
(1)PC函式手冊也在光碟資料裡面,具體路徑如下:“光碟資料\8.PC函式\函式庫2.1\ZMotion函式庫程式設計手冊 V2.1.pdf”
(2)連結控制器,獲取連結控制代碼。
ZAux_OpenEth()介面說明:
(3)振鏡運動介面。
為振鏡運動單獨封裝了一個運動介面,使用movescanabs指令進行運動,採用FORCE_SPEED引數設定運動過程中的速度,運動過程中基本不存在加減速過程,支援us級別的時間控制。
3.
MFC開發控制器振鏡運動例程
(1)例程介面如下。
(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軟體連線控制器監控控制器的狀態,檢視振鏡軸對應引數,並可搭配示波器檢測振鏡軌跡。
設定振鏡軸運動,首先需要將軸型別配置成21振鏡軸型別,並對應配置振鏡軸的速度加減速等引數才可操作振鏡進行運動。
2.
透過ZDevelop軟體的示波器監控振鏡運動執行軌跡。
本次,正運動技術開放式鐳射振鏡+運動控制器(五):ZMC408SCAN控制器硬體介紹,就分享到這裡。