今天,正運(yùn)動(dòng)小助手以QT(C++)為例,為大家介紹如何通過上位機(jī)編程來啟用ZMC432CL-V2的二維螺距補(bǔ)償功能。
更多關(guān)于ZMC432CL-V2運(yùn)動(dòng)控制器的詳情點(diǎn)擊→步進(jìn)控制的光柵尺全閉環(huán)解決方案:32軸EtherCAT總線運(yùn)動(dòng)控制器ZMC432CL-V2查看。
01 產(chǎn)品簡(jiǎn)介
ZMC432CL-V2高性能多軸運(yùn)動(dòng)控制器是一款兼容EtherCAT總線和脈沖型的獨(dú)立式運(yùn)動(dòng)控制器,具備高速實(shí)時(shí)反饋功能,支持脈沖全閉環(huán)控制,能夠?qū)崿F(xiàn)高精度、高響應(yīng)速度的運(yùn)動(dòng)控制。高精度定位,有效消除機(jī)械傳動(dòng)誤差,滿足高精密加工場(chǎng)景應(yīng)用要求。

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


03 硬件接線
1.數(shù)字量輸入口IN接線

圖1 輸入口通用接線圖

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

圖3 輸出口通用接線圖

圖4 輸出口單端脈沖軸接線圖
04 控制器開發(fā)
1.PC開發(fā)
支持以下語言進(jìn)行開發(fā),我們所有的開發(fā)語言和所有控制器提供的都是同一套API接口。

2.脫機(jī)開發(fā)
使用自主自研的IDE RTSys進(jìn)行開發(fā),支持Basic、梯形圖開發(fā)。

05 二維螺距補(bǔ)償應(yīng)用場(chǎng)景

06 二維螺距補(bǔ)償指令說明
/************************************************************* Description: //二維螺距補(bǔ)償, 4系列特殊固件支持,該算法比較占CPU Input: //handle 句柄連接 Input: //iaxisList 軸號(hào)列表 Input: //iAxisNum XY模式2個(gè)軸,XYY/XYX模式是3個(gè)軸 Input: //iEnable 0- 關(guān)閉補(bǔ)償,1- XY補(bǔ)償 ,2- XYX補(bǔ)償,3- XYY補(bǔ)償 Input: //StartPosX 起始補(bǔ)償MPOS位置X, Input: //StartPosY 起始補(bǔ)償MPOS位置Y, Input: //DisOneX 每個(gè)補(bǔ)償點(diǎn)間距X, Input: //DisOneY 每個(gè)補(bǔ)償點(diǎn)間距Y, Input: //maxpointX 補(bǔ)償區(qū)間X方向總點(diǎn)數(shù) Input: //maxpointy 補(bǔ)償區(qū)間Y方向總點(diǎn)數(shù) Input: //Tableindex 螺距補(bǔ)償表存儲(chǔ)的table位置,從StartPos下一個(gè)點(diǎn)開始存儲(chǔ),脈沖數(shù)單位, 每個(gè)點(diǎn)存儲(chǔ)兩個(gè)數(shù)據(jù),表示X方向偏差值與Y方向偏差值. 先存儲(chǔ)第一行(X方向), 再存儲(chǔ)第二行.總共占用 maxpointx*maxpointy*2 個(gè)TABLE位置. Input: //pfDisancelist 區(qū)間補(bǔ)償值列表 Output: // Return: //錯(cuò)誤碼 *************************************************************/ 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);
正運(yùn)動(dòng)二維螺距補(bǔ)償指令使用的注意點(diǎn):
1.必須先設(shè)置ATYPE,然后設(shè)置補(bǔ)償;修改ATYPE時(shí),必須先關(guān)閉補(bǔ)償!
2.設(shè)置補(bǔ)償時(shí),軸要位于IDLE的停止?fàn)顟B(tài)!
3.開始補(bǔ)償點(diǎn)的坐標(biāo)填寫的是軸的MPOS坐標(biāo)!
4.帶編碼器反饋的軸類型,不同位置補(bǔ)多少個(gè)脈沖,是根據(jù)編碼器位置確定脈沖補(bǔ)償?shù)膫€(gè)數(shù)的,所以一定要保證編碼器的反饋是正確的!
5.機(jī)臺(tái)斷使能前,需先關(guān)掉二維螺距補(bǔ)償功能,否則如果斷使能的情況下機(jī)臺(tái)有移動(dòng),會(huì)造成dpos跟mpos的數(shù)據(jù)對(duì)不上。
6.如下圖假設(shè)開始補(bǔ)償點(diǎn)是坐標(biāo)系的原點(diǎn),補(bǔ)償間距分別是【DisX,DisY】補(bǔ)償?shù)狞c(diǎn)是【4*4】的話,螺距補(bǔ)償表存儲(chǔ)的點(diǎn)位數(shù)據(jù)就是以下【點(diǎn)1】到【點(diǎn)16】的位置下的補(bǔ)償數(shù)據(jù)。

07 上位機(jī)編程驗(yàn)證效果
假設(shè)客戶有一個(gè)激光切割機(jī)的機(jī)臺(tái)需要使用二維螺距補(bǔ)償指令來解決機(jī)臺(tái)在不同位置受力不同【導(dǎo)致】機(jī)臺(tái)形變不同【從而】導(dǎo)致的精度丟失問題。
步驟一:
以軸坐標(biāo)【0,0】作為二維補(bǔ)償?shù)拈_始補(bǔ)償?shù)奈恢谩?/strong>
步驟二:
以軸坐標(biāo)【40,40】作為第一個(gè)圓的圓心,然后以陣列的方式通過激光在板子是畫出4行4列的16個(gè)圓,陣列X軸方向間距為40mm,Y軸方向間距為40mm,16個(gè)圓的大致位置如下:

步驟三:
設(shè)置二維螺距補(bǔ)償?shù)摹据o助參數(shù)】,并運(yùn)動(dòng)到【開始補(bǔ)償點(diǎn)】的位置點(diǎn)擊【教導(dǎo)編碼器】,把當(dāng)前編碼器位置更新到【開始補(bǔ)償點(diǎn)】的編碼器原始值里面。

步驟四:
通過視覺找出這16個(gè)圓的圓心的實(shí)際坐標(biāo),并把坐標(biāo)填入到Ui界面的表格里面。

步驟五:
運(yùn)動(dòng)到各個(gè)補(bǔ)償點(diǎn)驗(yàn)證效果,具體補(bǔ)償效果如下:



步驟六:
上位機(jī)編程詳情。
①如何啟用二維螺距補(bǔ)償功能。
int TimeOut = 3000; int TempI[AxisNum]={0,0}; int AxisList[AxisNum] = {AxisIdX,AxisIdY}; float PcTable[16*2]; //是否啟用二維螺距補(bǔ)償功能 if((0 == m_Enable)&&(ui->Enable->text() == "是")) { //等待軸停止,軸停下來了才可以打開二維螺距補(bǔ)償功能 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()<"等待軸停止時(shí)間超時(shí)!軸還未停止!"; ? ? ? ? return; ? ? } ? ? int i=0,j=0; ? ? // 開始更新表格點(diǎn)位數(shù)據(jù)到PcTable數(shù)組 ? ? 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" // 轉(zhuǎn)換為浮點(diǎn)數(shù) bool xOk, yOk; float xValue = xText.toFloat(&xOk); float yValue = yText.toFloat(&yOk); if (xOk && yOk) { // 按原邏輯存儲(chǔ)到PcTable數(shù)組 PcTable[i] = xValue; i = i + 1; PcTable[i] = yValue; i = i + 1; } else { qDebug() < "錯(cuò)誤: Row" < row < "數(shù)據(jù)轉(zhuǎn)換失敗" ? ? ? ? ? ? ? ? ? ? ? ? ?< "X text:" < xText < "Y text:" < yText; ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ?//開始更新補(bǔ)償表的數(shù)據(jù)到TABLE數(shù)組 ? ?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 ; } } //啟用二維螺距補(bǔ)償功能 /************************************************************* Description: //二維螺距補(bǔ)償, 4系列(VERSION_BUILD > 230511)特殊固件支持. 比較占CPU, 標(biāo)準(zhǔn)固件不支持. Input: //handle 句柄連接 Input: //AxisList 軸號(hào)列表 Input: //iEnable 0- 關(guān)閉補(bǔ)償, 1- XY補(bǔ)償,2- XYX補(bǔ)償,3- XYY補(bǔ)償 Input: //StartMposX 起始補(bǔ)償MPOS位置X, Input: //StartMposY 起始補(bǔ)償MPOS位置Y, Input: //DisX 每個(gè)補(bǔ)償點(diǎn)間距X, Input: //DisY 每個(gè)補(bǔ)償點(diǎn)間距Y, Input: //MaxPointX 補(bǔ)償區(qū)間總點(diǎn)數(shù) Input: //MaxPointY 補(bǔ)償區(qū)間總點(diǎn)數(shù) Input: //TableStartId 螺距補(bǔ)償表存儲(chǔ)的table位置,從startpos下一個(gè)點(diǎn)開始存儲(chǔ),脈沖數(shù)單位, 每個(gè)點(diǎn)存儲(chǔ)兩個(gè)數(shù)據(jù),表示X方向偏差值與Y方向偏差值. 先存儲(chǔ)第一行(X方向), 再存儲(chǔ)第二行.總共占用 maxpointx*maxpointy*2 個(gè)TABLE位置. Input: //PcTable 區(qū)間補(bǔ)償值列表 *************************************************************/ 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;}
②定時(shí)器如何實(shí)時(shí)計(jì)算實(shí)際補(bǔ)償數(shù)據(jù)到UI界面。
float TempDpos[AxisNum]={0,0};
float TempActuaPul[AxisNum]={0,0};
//理論上發(fā)的脈沖數(shù)
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);
//實(shí)際上發(fā)的脈沖數(shù)
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());
//實(shí)際上發(fā)的脈沖數(shù) -理論上發(fā)的脈沖數(shù) = 實(shí)際補(bǔ)償?shù)拿}沖數(shù) (除以脈沖當(dāng)量后表示實(shí)際補(bǔ)償?shù)木嚯x)
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)));
完整代碼獲取地址
▼

本次,正運(yùn)動(dòng)技術(shù)步進(jìn)控制的光柵尺全閉環(huán)EtherCAT運(yùn)動(dòng)控制器ZMC432CL-V2快速入門:二維螺距補(bǔ)償(下),就分享到這里。
更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào),需要相關(guān)開發(fā)環(huán)境與例程代碼,請(qǐng)咨詢正運(yùn)動(dòng)技術(shù)銷售工程師:400-089-8936。

正運(yùn)動(dòng)技術(shù)專注于運(yùn)動(dòng)控制技術(shù)研究和通用運(yùn)動(dòng)控制軟硬件產(chǎn)品的研發(fā),是國(guó)家級(jí)高新技術(shù)企業(yè)。正運(yùn)動(dòng)技術(shù)匯集了來自華為、中興等公司的優(yōu)秀人才,在堅(jiān)持自主創(chuàng)新的同時(shí),積極聯(lián)合各大高校協(xié)同運(yùn)動(dòng)控制基礎(chǔ)技術(shù)的研究,是國(guó)內(nèi)工控領(lǐng)域發(fā)展最快的企業(yè)之一,也是國(guó)內(nèi)少有、完整掌握運(yùn)動(dòng)控制核心技術(shù)和實(shí)時(shí)工控軟件平臺(tái)技術(shù)的企業(yè)。主要業(yè)務(wù)有:運(yùn)動(dòng)控制卡_運(yùn)動(dòng)控制器_EtherCAT運(yùn)動(dòng)控制卡_EtherCAT控制器_運(yùn)動(dòng)控制系統(tǒng)_視覺控制器__運(yùn)動(dòng)控制PLC_運(yùn)動(dòng)控制_機(jī)器人控制器_視覺定位_XPCIe/XPCI系列運(yùn)動(dòng)控制卡等等。
審核編輯 黃宇
-
運(yùn)動(dòng)控制器
+關(guān)注
關(guān)注
2文章
482瀏覽量
26021 -
ethercat
+關(guān)注
關(guān)注
19文章
1506瀏覽量
45123 -
光柵尺
+關(guān)注
關(guān)注
1文章
75瀏覽量
13644 -
步進(jìn)控制
+關(guān)注
關(guān)注
0文章
16瀏覽量
7602
發(fā)布評(píng)論請(qǐng)先 登錄
定位系統(tǒng)為步進(jìn)電機(jī)+光柵尺的全閉環(huán)系統(tǒng),位置補(bǔ)償算法一般都采用哪些呢?
步進(jìn)控制的光柵尺全閉環(huán)解決方案:32軸EtherCAT總線運(yùn)動(dòng)控制器ZMC432CL-V2 #正運(yùn)動(dòng)技術(shù)
步進(jìn)的光柵尺全閉環(huán)EtherCAT運(yùn)動(dòng)控制器ZMC432CL-V2:RTSys編程調(diào)試# 正運(yùn)動(dòng)技術(shù)# 控制器
步進(jìn)的光柵尺全閉環(huán)EtherCAT運(yùn)動(dòng)控制器ZMC432CL-V2(三):C#編程調(diào)試 #正運(yùn)動(dòng)技術(shù)
步進(jìn)的光柵尺全閉環(huán)EtherCAT運(yùn)動(dòng)控制器ZMC432CL-V2(四):LabVIEW編程調(diào)試 #正運(yùn)動(dòng)
步進(jìn)控制的光柵尺全閉環(huán)EtherCAT運(yùn)動(dòng)控制器ZMC432CL-V2(五):Python編程調(diào)試 #正運(yùn)動(dòng)
光柵尺安裝方法_光柵尺安裝注意事項(xiàng)(位移傳感器)
全國(guó)產(chǎn)EtherCAT運(yùn)動(dòng)控制邊緣控制器-ZMC432H
全國(guó)產(chǎn)EtherCAT運(yùn)動(dòng)控制邊緣控制器(一):ZMC432H硬件接口
EtherCAT運(yùn)動(dòng)控制邊緣控制器ZMC432H的軸參數(shù)配置和單軸運(yùn)動(dòng)控制
全國(guó)產(chǎn)EtherCAT運(yùn)動(dòng)控制邊緣控制器ZMC432H如何使用Python+QT實(shí)現(xiàn)連續(xù)軌跡加工
步進(jìn)控制的光柵尺全閉環(huán)解決方案:32軸EtherCAT總線運(yùn)動(dòng)控制器ZMC432CL-V2
步進(jìn)的光柵尺全閉環(huán)EtherCAT運(yùn)動(dòng)控制器ZMC432CL-V2(二):RTSys編程調(diào)試
步進(jìn)的光柵尺全閉環(huán)EtherCAT運(yùn)動(dòng)控制器ZMC432CL-V2(四):LabVIEW編程調(diào)試
步進(jìn)控制的光柵尺全閉環(huán)EtherCAT運(yùn)動(dòng)控制器ZMC432CL-V2快速入門:二維螺距補(bǔ)償(下)
評(píng)論