精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

開放式激光振鏡運動控制器在Ubuntu+Qt下的激光振鏡校正

正運動技術 ? 來源:正運動技術 ? 作者:正運動技術 ? 2024-09-04 17:32 ? 次閱讀

Ubuntu是一款免費且開源的操作系統,基于強大的Linux內核,它支持多用戶、多任務、多線程操作,擁有多CPU架構,可以簡化開發過程,具備出色的移植性。

今天,正運動小助手給大家分享一下Ubuntu下基于QT的激光振鏡的校正。在正式學習之前,我們先了解一下正運動ZMC408SCAN-V22運動控制器,ZMC408SCAN-V22支持在Linux環境進行開發使用。

01 ZMC408SCAN-V22硬件介紹

ZMC408SCAN-V22是正運動技術推出的高性能雙振鏡運動控制器,集成了2個百兆以太網口,支持EtherCAT、EtherNET、CAN、RS232RS485、24路通用數字輸入、20路通用數字輸出、2路通用模擬量輸出、2路通用模擬量輸入、4個本地差分脈沖軸接口、1個MPG手輪編碼器接口、2個帶反饋振鏡接口、1個LASER激光專用接口、1個FIBER激光器接口。開放式系統框圖如下所示:

wKgaombYJ_-AbdGxAAKRkcpfM8M901.png

ZMC408SCAN-V22總線控制器支持EtherCAT總線連接,支持最快500μs的刷新周期,支持最多達16軸運動控制,支持直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設置等;采用優化的網絡通訊協議可以實現實時的運動控制。

wKgZombYKAWAD2ZbAAEoD5sGY-8635.png

ZMC408SCAN-V22通過CAN、EtherCAT總線可以連接各個擴展模塊,從而擴展數字量、模擬量或運動軸。可以在

Windows,Linux,Mac,Android,Wince各種操作系統下開發,提供vc,c#,vb.net,labview等各種環境的dll庫。上位機軟件編程參考《ZMotion PC函數庫編程手冊》。

wKgaombYKAmAdkXhAACM0ab4Ks4144.png

02 Linux下使用Ubuntu+Qt進行振鏡校正軟件的開發

(一)振鏡校正的目的

振鏡本身在制造過程中或者在長時間使用后可能會存在一些畸變,振鏡校正的一個主要目的就是檢測和修正這些畸變,以確保激光的精度。

通過定期的校正和調整,可以有效地管理和糾正振鏡的畸變,從而提高激光系統的整體性能和穩定性。

wKgZombYKBeAQ-aGAAYDyW_8-NA918.png未進行振鏡校正時標刻的矩形wKgaombYKCCACGomAAYBz8Q2jTI617.png振鏡校正后標刻的矩形

(二)新建Qt項目并添加函數庫

1.在Qt Creator菜單選擇“File”→“New File or Project...”,打開創建項目向導。選擇Application項目集,創建Qt Widgets Application項目,設置項目名稱和保存位置。

wKgZombYKDGAcK6XAAEEx0XrhCI517.png

2.導入廠家提供的相關函數庫及頭文件。

(1)將zmotion.h和ZScancorrect.h頭文件、zmcaux.cpp和zmcaux.h以及libzmotion.so和libZScanCorrect.so庫復制到新建的項目文件夾中。

wKgaombYKDWAImjHAAJEIPO5Sr4991.png

(2)在Qt Creator選擇新建的Qt項目右擊選擇“Add Library...” → “External library”點擊next,將剛才復制到項目文件夾上的libzmotion.so和libZScanCorrect.so庫文件導入到項目中。

wKgaombYKDyAb0doAAFkHCFkqS8762.png

(3)在Qt Creator下右擊新建的Qt項目,選擇“Add Existing Files...”,將之前復制到項目文件下的頭文件zmotion.h和ZScancorrect.h以及zmcaux.cpp和zmcaux.h添加到項目中。

wKgZombYKD-ACOPXAAHvckZOeHE753.png

(4)函數庫添加成功后,打開pro文件可以看到相關的函數庫和頭文件信息

wKgZombYKEOAD7EDAAH-HMNUdT4928.png

03 振鏡校正例程流程和相關函數介紹

1.振鏡校正流程圖

wKgaombYKEyAecRPAAHwlDJEYHM036.png

2.主要函數的介紹

(1)取消校正

wKgZombYKFGANgGDAABF8swefpY126.png

(2)下載三次文件

wKgZombYKFeAbGT9AAA2db4Dzsk282.png

(3)多點迭代校正

wKgaombYKGCAYiZzAACdAO7PpkY391.png

(4)保存校正數據到文件

wKgZombYKGSARRhmAABpwHi9hLU388.png

(5)讀取校正文件

wKgaombYKGmAIXX9AABPwa2PmPk020.png

(6)使用校正文件進行校正

wKgaombYKG6APcAfAAA_30hgG7o661.png

(7)誤差補償后校正

wKgZombYKHKAKGK9AABhaqU3oQ0720.png

(8)相關錯誤碼

wKgaombYKHiAGkQ8AAAYW-cU2L0652.png

04 振鏡校正例程的實現及原理

1.預校正并標刻

原理:預校正通過標刻圖形得到實際的標刻大小,通過實際的大小計算出與目標標刻尺寸的縮放比例,當預校正的實際大小和目標標刻的大小一致時,可以進行采點操作。

void MainWindow::on_beforeCheck_mark_clicked()
{    
   if( 0 == g_handle)    
   {
       QMessageBox::warning(this,"提示","控制器未連接!");        
       return;    
   }    
   dataRenew();    //更新獲取頁面數據    
   ZScan_CancelCorrect(g_handle, ui->scan_list->currentIndex(), ui->Units->text().toDouble(), 1.0, tableStartNum);    // 先取消校正    
   int RowNum = sqrt(countRow());//獲取當前選擇的校正點數    
   QString strFile3 = CreateMakingString(RealCorrectSizeX, RealCorrectSizeY, RowNum, XLineLenght, YLineLenght);    // 生成三次文件字符串    
   Down3File(strFile3);     // 下載三次文件到控制器中    
   // 刷新列表,將列表數據插入為標準點坐標    
   model->removeRows(0, model->rowCount());    
   ZPoint *tmp = pointData(RowNum,dScanSize);    
   for (int i = 0; i < RowNum * RowNum; i++)    
   {        
       QList rowItems;        
       rowItems insertRow(i, rowItems);    
   }    
   delete [] tmp;    
   PreCorrectFlag = 0;//標記為預校正
}

2.多點迭代校正的方式進行振鏡校正

原理:多點迭代校正,通過實際測量得到標刻點數據,和標準點數據比較可以直觀的看到誤差,振鏡校正函數通過實際點數據對振鏡進行校正,在經過多次迭代校正后可以明顯看出實際點位數據和標準點數據的誤差減小。

bool MainWindow::ScanCorrection(int MakingRowNum)
{    
   //通過點數數據,進行振鏡校正    
   memset(PointDataX, 0, MakingRowNum);    
   memset(PointDataY, 0, MakingRowNum);    
   int cur_item = model->rowCount();    // 檢查當前數據項數量是否正確    
   if (cur_item != MakingRowNum)    
   {       
       QMessageBox::critical(this, "錯誤", "數據錯誤");       
       return false;    
   }    
   for (int row = 0; row < MakingRowNum; ++row)//將所有點數據取出,進行多點校正    
   {        
       QStandardItem *item = model-?>item(row, 2);        
       PointDataX[row] = item ? item->text().toDouble() : 0.0;        
       item = model->item(row, 3);        
       PointDataY[row] = item ? item->text().toDouble() : 0.0;    
   }    
   // 檢測數據是否正確    
   if (!CheckCorrectData(MakingRowNum,PointDataX,PointDataY))    
   {       
       if (QMessageBox::question(this, "警告", "數據可能不正確,請檢查數據rnyes表示退出校正rnno表示繼續校正", QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)       
       {           
           return false;       
       }    
   }    
   double x1 = -RealCorrectSizeX / 2;    
   double y1 = -RealCorrectSizeY / 2;    
   double x2 = RealCorrectSizeX / 2;    
   double y2 = RealCorrectSizeY / 2;    
   // 調用 ZScan_CorrectMorePtIter 函數,傳遞適當的參數    
   int ret = ZScan_CorrectMorePtIter(g_handle, ui->scan_list->currentIndex(), PointDataX, PointDataY, ui->checkBox->isChecked(), sqrt(countRow()), ui->Units->text().toDouble(),x1, y1, x2, y2, ui->mark_Size->text().toDouble(), 1.0, tableStartNum, PreCorrectFlag);    
   if (CheckError(ret, "ZScan_CorrectMorePtIter"))        
       return false;    
   PreCorrectFlag = 1;    
   return true;
}

3.根據校正文件進行振鏡校正

原理:校正文件本質上是通過多點迭代校正生成的,將校正點數據都存儲在文件中,通過讀取校正文件,將數據讀出,對振鏡進行校正,若文件校正完存在輕微誤差可以通過文件補償迭代校正的方式提高校正精度。

void MainWindow::on_but_Check_clicked()
{    
   if( 0 == g_handle)    
   {        
       QMessageBox::warning(this,"提示","控制器未連接!");        
       return;    
   }    
   QString fileName = QString::fromStdString(ui->file_Route->text()    
   .toLatin1().data());    
   if (fileName.isEmpty())    
   {        
       QMessageBox::critical(this, "錯誤", "請先選擇矯正文件!");        
       return;    
   }    
   if (ChangeDirMode == 1)    
   {        
       // 設置 X 和 Y 方向的步進比例        
       int ret = 0;        
       if (ui->x_Dir->text().toInt() == -1)        
       {            
           ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[0], 1, -1);        
       }        
       else        
       {            
           ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[0], 1, 1);        
       }        
       if (ret != 0)        
       {            
           QMessageBox::critical(this, "錯誤", QString("文件校正失敗  X方向設置失敗   錯誤碼:%1").arg(ret));            
           return;        
       }        
       if (ui->y_Dir->text().toInt() == -1)        
       {            
           ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[1], 1, -1);        
       }        
       else        
       {            
           ret = ZAux_Direct_StepRatio(g_handle, markpara.AxisList[1], 1, 1);        
       }        
       if (ret != 0)        
       {            
           QMessageBox::critical(this, "錯誤", QString("文件校正失敗  Y方向設置失敗   錯誤碼:%1").arg(ret));            
           return;        
       }    
   }    
   int rest = ZScan_CorrectFromFile(g_handle, fileName.toLatin1().data(), scanNum, tableStartNum);//使用校正文件進行振鏡校正    
   if (rest != 0)    
   {        
       QMessageBox::critical(this, "錯誤", QString("文件校正錯誤   錯誤碼:%1").arg(rest));    
   }    
   else    
   {        
       QMessageBox::information(this, "信息", "文件校正完成");    
   }
}

05 通過振鏡校正例程對激光振鏡進行校正

1.多點迭代校正方式進行振鏡校正

(1)連接到控制器,并進行工藝參數設置,根據實際激光器類型和IO參數以及標刻參數進行設置。

wKgZombYKOKAJow0AAFgULy6mlA062.png

(2)輸入需要實際標刻的尺寸,進行預校正標刻,使用預校正標刻的實際XY測量值來計算縮放比例,可以進行多次預校正標刻和測量,計算出較為精準的比例,這里的誤差越小,后續校正的次數將會減少。

wKgaombYKOaAb57CAAGkoUlXlCs973.png

(3)通過導入點數據或者手動填入點數據,進行標刻并校正,可以通過與標準點坐標數據對比,直觀看到誤差。

wKgZombYKOmAcP-lAAGlriZ_0NE522.png

(4)繼續測量標刻點的數據,導入點數據或手動添加到程序中,重復步驟二三提高校正精度。若精度還是達不到要求,可以繼續加點迭代校正來提高精度,若已達到精度則可以將校正數據保存到校正文件中,方便后續直接使用文件校正。

wKgaombYKO2AN4pLAAII0f0sD-s857.png

2.文件校正方式進行振鏡校正

(1)選擇校正文件進行振鏡校正

wKgaombYKPGAdSWjAAC7wr-zYzo038.png

(2)進行實際測量,若測量數據無誤,則校正完成。若出現點位誤差可采取坐標補償的方式進行補償校正,將補償值填入,進行校正并標刻,重新測量數據,可多次進行補償操作,若誤差過大,或者較多點位存在問題,需要使用多點疊加迭代校正的方式進行振鏡校正。

wKgZombYKPSAWFqsAADcAeG7eoU016.png

本次,正運動技術開放式激光振鏡運動控制器在Ubuntu+Qt下的激光振鏡校正,就分享到這里。

更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師

本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 運動控制器
    +關注

    關注

    2

    文章

    380

    瀏覽量

    24518
  • Ubuntu
    +關注

    關注

    5

    文章

    550

    瀏覽量

    29269
  • 開放式
    +關注

    關注

    0

    文章

    23

    瀏覽量

    9179
  • 激光振鏡
    +關注

    關注

    1

    文章

    16

    瀏覽量

    3255
收藏 人收藏

    評論

    相關推薦

    ZMC408SCAN控制光纖激光器加工

    ZMC408SCAN是正運動技術新推出的一款支持EtherCAT總線的開放式激光運動
    的頭像 發表于 09-14 14:16 ?1477次閱讀
    ZMC408SCAN<b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>控制</b>光纖<b class='flag-5'>激光器</b>加工

    激光運動控制系統開發

    激光 運動控制 技術是將
    發表于 07-06 18:13 ?366次下載
    <b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制</b>系統開發

    激光運動控制器(一):ZMC408SCAN接口與功能

    ZMC408SCAN是正運動技術新推出的一款支持EtherCAT總線的開放式激光運動
    的頭像 發表于 08-01 15:03 ?2833次閱讀
    <b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b>(一):ZMC408SCAN接口與功能

    開放式激光運動控制器:C++快速開發

    今天,正運動技術為大家分享一應用ZMC408SCAN開放式激光
    的頭像 發表于 10-19 09:04 ?1323次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b>:C++快速開發

    應用ZMC408SCAN開放式激光運動控制器的C++開發

    今天,正運動技術為大家分享一應用ZMC408SCAN開放式激光
    的頭像 發表于 10-24 11:26 ?1548次閱讀

    ZMC408SCAN控制光纖激光器加工的方法

    ZMC408SCAN是正運動技術新推出的一款支持EtherCAT總線的開放式激光運動
    的頭像 發表于 10-26 17:32 ?1793次閱讀

    開放式激光運動控制器:C++矯正方法與實現

    ZMC408SCAN是正運動技術新推出的一款支持EtherCAT總線的開放式激光運動
    的頭像 發表于 10-27 09:02 ?1690次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b>:C++<b class='flag-5'>振</b><b class='flag-5'>鏡</b>矯正方法與實現

    開放式激光運動控制器ZMC408SCAN進行矯正的方法與實現

    ZMC408SCAN是正運動技術新推出的一款支持EtherCAT總線的開放式激光運動
    的頭像 發表于 10-31 17:56 ?1608次閱讀

    運動激光運動控制器ZMC408SCAN用戶手冊

    ZMC408SCAN 激光運動控制器是正運動技術推出的高性能總線雙
    發表于 04-11 14:22 ?3次下載

    ZMC420SCAN激光運動控制器用戶手冊

    ZMC 是正運動技術推出的網絡運動控制器型號簡稱。 ZMC4 系列支持正運動 XPLC 的功能,可以通過網絡來做組態顯示。 ZMC420SCAN 系列
    發表于 04-11 14:28 ?3次下載

    運動控制器激光控制

    激光運動控制系統中不但有運動
    的頭像 發表于 09-26 11:44 ?1808次閱讀
    <b class='flag-5'>運動</b><b class='flag-5'>控制器</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>控制</b>

    開放式激光運動控制器的視覺校正精度解決方案

    想知道怎么實現自動校正嗎?快來點擊正運動精囊!
    的頭像 發表于 04-26 14:36 ?352次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b>的視覺<b class='flag-5'>校正</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b>精度解決方案

    開放式激光運動控制器激光清洗應用

    開放式激光運動控制器激光清洗解決方案。
    的頭像 發表于 07-18 09:44 ?146次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b>的<b class='flag-5'>激光</b>清洗應用

    開放式激光運動控制器Ubuntu+Qt的文本標刻

    基于Ubuntu+Qt的文本標刻例程的實現
    的頭像 發表于 09-10 10:37 ?67次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b><b class='flag-5'>在</b><b class='flag-5'>Ubuntu+Qt</b><b class='flag-5'>下</b>的文本標刻