|
今天,正運動小助手以QT(C++)為例,為大家介紹如何通過上位機編程來啟用ZMC432CL-V2的二維螺距補償功能。
更多關於ZMC432CL-V2運動控製器的詳情點擊→步進控製的光柵尺全閉環解決方案:32軸EtherCAT總線運動控製器ZMC432CL-V2查看。
01 產品簡介
ZMC432CL-V2高性能多軸運動控製器是一款兼容EtherCAT總線和脈衝型的獨立式運動控製器,具備高速實時反饋功能,支持脈衝全閉環控製,能夠實現高精度、高響應速度的運動控製。高精度定位,有效消除機械傳動誤差,滿足高精密加工場景應用要求。

ZMC432CL-V2硬件功能:
-
豐富的運動控製功能:支持直線、圓弧、空間圓弧、螺旋插補等。
-
硬件接口豐富:支持脈衝軸(帶編碼器反饋)和EtherCAT總線軸,具備24路輸入和12路輸出的通用IO,部分為高速IO,2路模擬量輸出(DA)。
-
EtherCAT刷新周期最快達250us,滿足高速通信需求。
-
支持4通道硬件比較輸出、硬件定時器、運動中精準輸出,適用於多通道視覺飛拍等場合。
-
支持掉電檢測、掉電存儲,多種程序加密方式,能夠有效防止係統故障,保護項目工程文件數據,並提高係統的可靠性。
-
通過純國產IDE開發環境RTSys進行項目開發,可實時仿真、在線跟蹤以及診斷與調試,簡便易用,支持多種高級上位機語言聯合編程進行二次開發。
ZMC432CL-V2產品介紹視頻請點擊→步進控製的光柵尺全閉環解決方案:32軸EtherCAT總線運動控製器ZMC432CL-V2
02 硬件接口


03 硬件接線
1.數字量輸入口IN接線

圖1 輸入口通用接線圖

圖2 輸入口單端編碼器接線圖
2.數字量輸出口接線

圖3 輸出口通用接線圖

圖4 輸出口單端脈衝軸接線圖
04 控製器開發
1.PC開發
支持以下語言進行開發,我們所有的開發語言和所有控製器提供的都是同一套API接口。

2.脫機開發
使用自主自研的IDE RTSys進行開發,支持Basic、梯形圖開發。

05 二維螺距補償應用場景

06 二維螺距補償指令說明
/*************************************************************
Description: //二維螺距補償, 4係列特殊固件支持,該算法比較占CPU
Input: //handle 句柄連接
Input: //iaxisList 軸號列表
Input: //iAxisNum XY模式2個軸,XYY/XYX模式是3個軸
Input: //iEnable 0- 關閉補償,1- XY補償 ,2- XYX補償,3- XYY補償
Input: //StartPosX 起始補償MPOS位置X,
Input: //StartPosY 起始補償MPOS位置Y,
Input: //DisOneX 每個補償點間距X,
Input: //DisOneY 每個補償點間距Y,
Input: //maxpointX 補償區間X方向總點數
Input: //maxpointy 補償區間Y方向總點數
Input: //Tableindex 螺距補償表存儲的table位置,從StartPos下一個點開始存儲,脈衝數單位, 每個點存儲兩個數據,表示X方向偏差值與Y方向偏差值. 先存儲第一行(X方向), 再存儲第二行.總共占用 maxpointx*maxpointy*2 個TABLE位置.
Input: //pfDisancelist 區間補償值列表
Output: //
Return: //錯誤碼
*************************************************************/
int32 ZAux_Direct_Pitch2set(ZMC_HANDLE handle,int * iaxisList,int iAxisNum,int iEnable,float StartPosX,float StartPosY,float DisOneX ,float DisOneY ,uint32 maxpointX,uint32 maxpointY,uint32 Tableindex,float * pfDisancelist);
正運動二維螺距補償指令使用的注意點:
1.必須先設置ATYPE,然後設置補償;修改ATYPE時,必須先關閉補償!
2.設置補償時,軸要位於IDLE的停止狀態!
3.開始補償點的坐標填寫的是軸的MPOS坐標!
4.帶編碼器反饋的軸類型,不同位置補多少個脈衝,是根據編碼器位置確定脈衝補償的個數的,所以一定要保證編碼器的反饋是正確的!
5.機台斷使能前,需先關掉二維螺距補償功能,否則如果斷使能的情況下機台有移動,會造成dpos跟mpos的數據對不上。
6.如下圖假設開始補償點是坐標係的原點,補償間距分別是【DisX,DisY】補償的點是【4*4】的話,螺距補償表存儲的點位數據就是以下【點1】到【點16】的位置下的補償數據。

07 上位機編程驗證效果
假設客戶有一個激光切割機的機台需要使用二維螺距補償指令來解決機台在不同位置受力不同【導致】機台形變不同【從而】導致的精度丟失問題。
步驟一:
以軸坐標【0,0】作為二維補償的開始補償的位置。
步驟二:
以軸坐標【40,40】作為第一個圓的圓心,然後以陣列的方式通過激光在板子是畫出4行4列的16個圓,陣列X軸方向間距為40mm,Y軸方向間距為40mm,16個圓的大致位置如下:

步驟三:
設置二維螺距補償的【輔助參數】,並運動到【開始補償點】的位置點擊【教導編碼器】,把當前編碼器位置更新到【開始補償點】的編碼器原始值裏麵。

步驟四:
通過視覺找出這16個圓的圓心的實際坐標,並把坐標填入到Ui界麵的表格裏麵。

步驟五:
運動到各個補償點驗證效果,具體補償效果如下:



步驟六:
上位機編程詳情。
①如何啟用二維螺距補償功能。
int TimeOut = 3000;
int TempI[AxisNum]={0,0};
int AxisList[AxisNum] = {AxisIdX,AxisIdY};
float PcTable[16*2];
//是否啟用二維螺距補償功能
if((0 == m_Enable)&&(ui->Enable->text() == "是"))
{
//等待軸停止,軸停下來了才可以打開二維螺距補償功能
while (TimeOut>0) {
ZAux_Direct_GetIfIdle(handle,MyAxisInfo[0].AxisId,&TempI[0]);
ZAux_Direct_GetIfIdle(handle,MyAxisInfo[1].AxisId,&TempI[1]);
if((TempI[0] != 0 ) &&(TempI[1] != 0))
{
break;
}
QThread::msleep(10);
TimeOut = TimeOut -10;
}
if(TimeOut ==0)
{
qDebug()<<"等待軸停止時間超時!軸還未停止!";
return;
}
int i=0,j=0;
// 開始更新表格點位數據到PcTable數組
for (int row = 0; row < ui->TableData->rowCount(); row++) {
QTableWidgetItem *xItem = ui->TableData->item(row, 1); // X列(索引1)
QTableWidgetItem *yItem = ui->TableData->item(row, 2); // Y列(索引2)
if (xItem && yItem) {
// 直接讀取表格顯示的文本值
QString xText = xItem->text(); // 如 "40.003800"
QString yText = yItem->text(); // 如 "40.008700"
// 轉換為浮點數
bool xOk, yOk;
float xValue = xText.toFloat(&xOk);
float yValue = yText.toFloat(&yOk);
if (xOk && yOk) {
// 按原邏輯存儲到PcTable數組
PcTable[i] = xValue;
i = i + 1;
PcTable[i] = yValue;
i = i + 1;
} else {
qDebug() << "錯誤: Row" << row << "數據轉換失敗"
<< "X text:" << xText << "Y text:" << yText;
}
}
}
//開始更新補償表的數據到TABLE數組
for(i=0;iMaxPointY->text().toUInt();i++) //行
{
for(j=0;jMaxPointX->text().toUInt();j++) //列
{
PcTable[2*(i*4+j)] = ((1+j)*ui->DisX->text().toFloat()+ui->StartMposX->text().toFloat()-PcTable[2*(i*4+j)])* MyAxisInfo[0].Units;
PcTable[2*(i*4+j)+1] = ((1+i)*ui->DisY->text().toFloat()+ui->StartMposY->text().toFloat()-PcTable[2*(i*4+j)+1])* MyAxisInfo[1].Units ;
}
}
//啟用二維螺距補償功能
/*************************************************************
Description: //二維螺距補償, 4係列(VERSION_BUILD > 230511)特殊固件支持. 比較占CPU, 標準固件不支持.
Input: //handle 句柄連接
Input: //AxisList 軸號列表
Input: //iEnable 0- 關閉補償, 1- XY補償,2- XYX補償,3- XYY補償
Input: //StartMposX 起始補償MPOS位置X
, Input: //StartMposY 起始補償MPOS位置Y,
Input: //DisX 每個補償點間距X,
Input: //DisY 每個補償點間距Y,
Input: //MaxPointX 補償區間總點數
Input: //MaxPointY 補償區間總點數
Input: //TableStartId 螺距補償表存儲的table位置,從startpos下一個點開始存儲,脈衝數單位, 每個點存儲兩個數據,表示X方向偏差值與Y方向偏差值. 先存儲第一行(X方向), 再存儲第二行.總共占用 maxpointx*maxpointy*2 個TABLE位置.
Input: //PcTable 區間補償值列表
*************************************************************/
ZAux_Direct_Pitch2set(handle,AxisList,2,1,ui->StartMposX->text().toFloat(),ui->StartMposY->text().toFloat(),
ui->DisX->text().toFloat() ,ui->DisY->text().toFloat(),
ui->MaxPointX->text().toUInt(),ui->MaxPointY->text().toUInt(),
ui->TableStartId->text().toUInt(),PcTable); m_Enable=true;}
②定時器如何實時計算實際補償數據到UI界麵。
float TempDpos[AxisNum]={0,0};
float TempActuaPul[AxisNum]={0,0};
//理論上發的脈衝數
ZAux_Direct_GetDpos(handle,MyAxisInfo[0].AxisId,&TempDpos[0]);
TempDpos[0] = (TempDpos[0] - ui->StartMposX->text().toFloat() )*(MyAxisInfo[0].Units);
ZAux_Direct_GetDpos(handle,MyAxisInfo[1].AxisId,&TempDpos[1]);
TempDpos[1] = (TempDpos[1] - ui->StartMposY->text().toFloat() )*(MyAxisInfo[1].Units);
//實際上發的脈衝數
ZAux_Direct_GetEncoder(handle,MyAxisInfo[0].AxisId,&TempActuaPul[0]);
TempActuaPul[0] = (TempActuaPul[0] - ui->StrarEncoderX->text().toFloat());
ZAux_Direct_GetEncoder(handle,MyAxisInfo[1].AxisId,&TempActuaPul[1]);
TempActuaPul[1] = (TempActuaPul[1] - ui->StrarEncoderY->text().toFloat());
//實際上發的脈衝數 -理論上發的脈衝數 = 實際補償的脈衝數 (除以脈衝當量後表示實際補償的距離)
ui->CompenDataX->setText(QString("%1").arg((TempActuaPul[0]-TempDpos[0])/(MyAxisInfo[0].Units)));
ui->CompenDataY->setText(QString("%1").arg((TempActuaPul[1]-TempDpos[1])/(MyAxisInfo[1].Units)));完整代碼獲取地址
完整代碼獲取地址
▼

本次,正運動技術步進控製的光柵尺全閉環EtherCAT運動控製器ZMC432CL-V2快速入門:二維螺距補償(下),就分享到這裏。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請谘詢正運動技術銷售工程師:400-089-8936。

正運動技術專注於運動控製技術研究和通用運動控製軟硬件產品的研發,是國家級高新技術企業。正運動技術彙集了來自華為、zhongxingdenggongsideyouxiurencai,zaijianchizizhuchuangxindetongshi,jijilianhegedagaoxiaoxietongyundongkongzhijichujishudeyanjiu,shiguoneigongkonglingyufazhanzuikuaideqiyezhiyi,yeshiguoneishaoyou、完整掌握運動控製核心技術和實時工控軟件平台技術的企業。主要業務有:運動控製卡_運動控製器_EtherCAT運動控製卡_EtherCAT控製器_運動控製係統_視覺控製器__運動控製PLC_運動控製_機器人控製器_視覺定位_XPCIe/XPCI係列運動控製卡等等。
|