時(shí)間:2024-10-16 11:09:40來(lái)源:深圳市正運(yùn)動(dòng)技術(shù)有限公司
前面課程我們講述了如何通過(guò)Ubuntu+Qt進(jìn)行振鏡校正(詳情點(diǎn)擊→開(kāi)放式激光振鏡運(yùn)動(dòng)控制器在Ubuntu+Qt下的激光振鏡校正),本節(jié)自定義圖形標(biāo)刻是在振鏡校正的前提下實(shí)現(xiàn)的。
在正式學(xué)習(xí)之前,我們先了解一下正運(yùn)動(dòng)ZMC408SCAN-V22運(yùn)動(dòng)控制器,ZMC408SCAN-V22控制器支持在Linux環(huán)境下進(jìn)行開(kāi)發(fā)使用。
01、ZMC408SCAN-V22硬件介紹
ZMC408SCAN-V22是正運(yùn)動(dòng)技術(shù)推出的高性能雙振鏡運(yùn)動(dòng)控制器,集成了2個(gè)百兆以太網(wǎng)口,支持EtherCAT、EtherNET、CAN、RS232、RS485、24路通用數(shù)字輸入、20路通用數(shù)字輸出、2路通用模擬量輸出、2路通用模擬量輸入、4個(gè)本地差分脈沖軸接口、1個(gè)MPG手輪編碼器接口、2個(gè)帶反饋振鏡接口、1個(gè)LASER激光專用接口、1個(gè)FIBER激光器接口。開(kāi)放式系統(tǒng)框圖如下所示:
ZMC408SCAN-V22總線控制器支持EtherCAT總線連接,支持最快500μs的刷新周期,支持最多達(dá)16軸運(yùn)動(dòng)控制,支持直線插補(bǔ)、任意圓弧插補(bǔ)、空間圓弧、螺旋插補(bǔ)、電子凸輪、電子齒輪、同步跟隨、虛擬軸設(shè)置等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實(shí)現(xiàn)實(shí)時(shí)的運(yùn)動(dòng)控制。
ZMC408SCAN-V22通過(guò)CAN、EtherCAT總線可以連接各個(gè)擴(kuò)展模塊,從而擴(kuò)展數(shù)字量、模擬量或運(yùn)動(dòng)軸??梢栽赪indows,Linux,Mac,Android,Wince各種操作系統(tǒng)下開(kāi)發(fā),提供vc,c#,vb.net,labview等各種環(huán)境的dll庫(kù)。上位機(jī)軟件編程參考《ZMotion PC函數(shù)庫(kù)編程手冊(cè)》。
02、Ubuntu+Qt進(jìn)行自定義圖形標(biāo)刻項(xiàng)目的開(kāi)發(fā)
1.在Qt Creator菜單選擇“文件”→“新建文件或項(xiàng)目...”,打開(kāi)創(chuàng)建項(xiàng)目向?qū)?。選擇Application項(xiàng)目集,創(chuàng)建Qt Widgets Application項(xiàng)目,設(shè)置項(xiàng)目名稱和保存位置。
2.導(dǎo)入廠家提供的相關(guān)函數(shù)庫(kù)及頭文件。
(1)將zmotion.h和zmcaux.h、zmcaux.cpp以及l(fā)ibzmotion.so庫(kù)復(fù)制到新建的項(xiàng)目文件夾中。
(2)在Qt Creator選擇新建的Qt項(xiàng)目右擊選擇“添加庫(kù)...”→“外部庫(kù)”點(diǎn)擊下一步,將剛才復(fù)制到項(xiàng)目文件夾上的libzmotion.so庫(kù)文件導(dǎo)入到項(xiàng)目中。
(3)在Qt Creator下右擊新建的Qt項(xiàng)目,選擇“添加現(xiàn)有文件...”,將之前復(fù)制到項(xiàng)目文件下的頭文件zmotion.h以及zmcaux.cpp和zmcaux.h添加到項(xiàng)目中。
(4)函數(shù)庫(kù)添加成功后,打開(kāi)pro文件可以看到相關(guān)的函數(shù)庫(kù)和頭文件信息。此時(shí)已經(jīng)將例程需要用到的函數(shù)庫(kù)和頭文件都加入到項(xiàng)目中了,接下來(lái)開(kāi)始實(shí)現(xiàn)例程。
03、自定義圖形標(biāo)刻流程以及相關(guān)函數(shù)介紹
1.自定義圖形標(biāo)刻流程圖
2. 相關(guān)函數(shù)介紹
(1)連接控制器
(2)通用命令執(zhí)行接口
(3)三次文件初始化
(4)生成空移字符串
(5)生成開(kāi)光字符串
(6)生成關(guān)光字符串
(7)生成標(biāo)刻點(diǎn)字符串
(8)下載三次文件
(9)設(shè)置輸出口狀態(tài)
(10)設(shè)置模擬量輸出
(11)設(shè)置pwm占空比
(12)設(shè)置pwm頻率
04、自定義圖形標(biāo)刻的實(shí)現(xiàn)例程
自定義圖形標(biāo)刻例程主要是通過(guò)選擇簡(jiǎn)單圖形來(lái)生成標(biāo)刻的三次文件,控制器運(yùn)行三次文件標(biāo)刻對(duì)應(yīng)的圖形,例程中的三次文件主要通過(guò)字符串追加的形式生成,在將所有圖形的繪制過(guò)程生成三次文件后下載到控制器即可。
1.建立控制器連接,設(shè)置相關(guān)的振鏡和工藝參數(shù),可以通過(guò)設(shè)置模擬量口和pwm以及激光器使能信號(hào),可以打開(kāi)或者關(guān)閉激光。
·
void MainWindow::on_ip_open_clicked(){ char * tmp_buff = new char[16]; QString str = ui->ip_Address->text(); QByteArray ba = str.toLatin1(); tmp_buff = ba.data(); if(0 != g_handle) { ZAux_Close(g_handle); } int32 iresult= ZMC_FastOpen(ZMC_CONNECTION_ETH,tmp_buff,1000,&g_handle); if( 0 != iresult) { QMessageBox::warning(this,"提示","連接失敗"); return; } ZAux_Direct_SetDA(g_handle,markPara.PowerDA,markPara.Power); //設(shè)置模擬量 ZAux_Direct_SetPwmDuty(g_handle,markPara.PwmIo,0.5); //設(shè)置占空比 ZAux_Direct_SetPwmFreq(g_handle,markPara.PwmIo,markPara.PwmFreq); //設(shè)置頻率 ZAux_Direct_SetOp(g_handle,io_value.emit_io,0); //關(guān)閉激光輸出口 ZAux_Direct_SetOp(g_handle,io_value.enable_io,0); //關(guān)閉激光器使能}
2.生成初始化的三次文件字符串
可以將標(biāo)刻過(guò)程中初始化的部分寫(xiě)到相關(guān)的函數(shù)里面,包括設(shè)置初始化的激光器參數(shù)、標(biāo)刻起點(diǎn)、延時(shí)參數(shù)等,方便在標(biāo)刻自定義圖形的過(guò)程中直接使用。三次文件字符串本質(zhì)是將basic指令進(jìn)行拼接處理,將所有指令拼接完成后,可以直接寫(xiě)入控制器中執(zhí)行。
·
void MainWindow::LaserScan_z3p_Init(){ strFile3.clear(); strFile3 += QString("BASE(%1,%2)\n").arg(4).arg(5); //設(shè)置軸號(hào) strFile3 += "ATYPE = 21,21\n"; //設(shè)置軸類型 strFile3 += "UNITS = 100,100\n"; //設(shè)置脈沖當(dāng)量 strFile3 += "AXIS_ZSET = 3,3\n"; // 開(kāi)啟精準(zhǔn)輸出 strFile3 += "MERGE = 1,1\n"; //開(kāi)啟連續(xù)插補(bǔ) strFile3 += QString("OP(%1,ON)\n").arg(io_value.enable_io); strFile3+=QString("MOVE_AOUT(%1,%2)\n").arg(markPara.PowerDA).arg(static_cast(markPara.Power * 255 / 100)); strFile3+=QString("MOVE_PWM(%1,0.5,%2)\n").arg(markPara.PwmIo).arg(markPara.PwmFreq); strFile3 +=QString("DECEL_ANGLE= %1,%2\n").arg(15.0/180.0*M_PI).arg(15.0/180.0*M_PI); strFile3 += QString("STOP_ANGLE = %1,%2\n").arg(90.0/180.0*M_PI).arg(90.0/180.0*M_PI); strFile3 += QString("ZSMOOTH= %1,%2\n").arg(markPara.CorDelay).arg(markPara.CorDelay); //拐角延時(shí)時(shí)間 strFile3 += QString("FORCE_SPEED = %1\n").arg(markPara.JumpSpeed); //空移速度 strFile3 += "MOVESCANABS(0,0)\n"; //移動(dòng)到 0 位}
3.生成標(biāo)刻自定義圖形的三次文件字符串
自定義圖形本質(zhì)上可以分解為線段進(jìn)行繪制,在進(jìn)行激光標(biāo)刻時(shí)也是采用線段的形式,在生成自定義圖形時(shí),只需要控制每一條線段的起始點(diǎn)和結(jié)束點(diǎn)位置,同時(shí)在起始點(diǎn)和結(jié)束點(diǎn)的位置控制延時(shí)參數(shù),最后在完成繪制時(shí)關(guān)閉激光和使能即可。下面是部分生成三次文件字符串以及下載的代碼。
·
void MainWindow::on_create_File3_clicked(){ LaserScan_z3p_Init(strFile3); ListNode *ps = layers->next; do { Coordinate * pData = ps->data; if(ps->type == 1)//標(biāo)刻點(diǎn) { LaserScan_z3p_EmptyMove(strFile3,pData->next->x,pData->next->y,markPara.JumpSpeed,markPara.JumpDelay); LaserScan_z3p_OpenLight(strFile3,io_value.emit_io,markPara.OpenDelay,markPara.MarkSpeed); LaserScan_z3p_MarkPoint(strFile3,pData->next->x,pData->next->y); LaserScan_z3p_CloseLight(strFile3,io_value.emit_io,markPara.CloseDelay,markPara.JumpDelay); } else if(ps->type == 2)//標(biāo)刻直線 { LaserScan_z3p_EmptyMove(strFile3,pData->next->x,pData->next->y,markPara.JumpSpeed,markPara.JumpDelay); LaserScan_z3p_OpenLight(strFile3,io_value.emit_io,markPara.OpenDelay,markPara.MarkSpeed); LaserScan_z3p_MarkPoint(strFile3,pData->next->x2,pData->next->y2); LaserScan_z3p_CloseLight(strFile3,io_value.emit_io,markPara.CloseDelay,markPara.JumpDelay); } else if(ps->type == 3)//標(biāo)刻圓弧 { LaserScan_z3p_Arc(pData->next->x + ps->radius,pData->next->y - ps->radius,ps->radius,ps->angle,ps->radian,0,0); } else if(ps->type == 4)//標(biāo)刻整圓 { LaserScan_z3p_Arc(pData->next->x + ps->radius,pData->next->y - ps->radius,ps->radius,0,360,0,0); } ...... //標(biāo)刻其他類型 ps = ps->next; }while(ps != layers);}
4.設(shè)置運(yùn)行任務(wù)號(hào),啟動(dòng)任務(wù)進(jìn)行標(biāo)刻
三次文件已經(jīng)下載到控制器中,這個(gè)時(shí)候可以通過(guò)ZMC_Execute函數(shù)輸入命令去運(yùn)行生成的三次文件,完成圖形的標(biāo)刻。下面的啟動(dòng)任務(wù),進(jìn)行標(biāo)刻的部分實(shí)現(xiàn)代碼。
·
void MainWindow::on_but_Mark_clicked(){ if( 0 == g_handle) { QMessageBox::warning(this,"提示","控制器未連接!"); return; } QString Cmd; char Response[1024]; //設(shè)置啟動(dòng)任務(wù)號(hào),執(zhí)行Zmc_polyline.z3p ZMC_Execute(g_handle,"FILE3_RUN \"Zmc_polyline.z3p\",7 ",500,Response,1024);}
5.設(shè)置配置文件信息,保留配置參數(shù)
通過(guò)生成ini配置文件信息,在程序加載時(shí)讀取文件,程序關(guān)閉時(shí)將配置數(shù)據(jù)寫(xiě)到ini配置文件中,以此實(shí)現(xiàn)保留最后一次的使用參數(shù),方便下一次加載使用。通過(guò)使用內(nèi)部函數(shù)庫(kù)QSettings實(shí)現(xiàn)的,下面是部分的實(shí)現(xiàn)代碼。
·
void MainWindow::saveINI(){ //保存配置數(shù)據(jù)信息 QSettings *iniWrite = new QSettings("config.ini",QSettings::IniFormat); iniWrite->setValue("laserType",ui->laser_List->currentIndex()); ..... delete iniWrite;}void MainWindow::readINI(){ //讀取配置文件數(shù)據(jù) QSettings *iniRead = new QSettings("config.ini",QSettings::IniFormat); int laserType = iniRead->value("laserType").toInt(); ui->laser_List->setCurrentIndex(laserType); ..... delete iniRead;}
05、自定義圖形標(biāo)刻的實(shí)現(xiàn)效果
1.打開(kāi)Qt繪制的基本圖形界面,設(shè)置基本的激光器參數(shù)和運(yùn)動(dòng)參數(shù)。
2.添加想要標(biāo)刻的自定義圖形,設(shè)置圖形參數(shù),選擇添加圖形,例程中添加的圖形為點(diǎn)、矩形、整圓、圓弧、直線,點(diǎn)擊生成三次文件后,查看三次文件的內(nèi)容。
3.點(diǎn)擊標(biāo)刻即可完成已選自定義圖形的標(biāo)刻。
4.分析生成的三次文件信息,下面是生成三次文件的部分內(nèi)容,三次文件的開(kāi)頭都是對(duì)軸參數(shù)加工參數(shù)的設(shè)置,當(dāng)移動(dòng)到運(yùn)動(dòng)起始點(diǎn)時(shí),設(shè)置開(kāi)光參數(shù)和延時(shí)參數(shù),在軌跡完成時(shí)設(shè)置關(guān)光延時(shí)和關(guān)光操作。
·
BASE(4,5)ATYPE = 21,21UNITS = 100,100AXIS_ZSET = 3,3MERGE = 1,1OP(47,ON)MOVE_AOUT(3,127)MOVE_PWM(11,0.5,4000)DECEL_ANGLE = 0.261799,0.261799STOP_ANGLE = 1.5708,1.5708ZSMOOTH = 1000,1000FORCE_SPEED = 1000MOVESCANABS(0,0)FORCE_SPEED = 1000MOVESCANABS(0.00000,0.00000)MOVE_DELAY(0.2,1)FORCE_SPEED = 500MOVEOP_DELAY = -0.1MOVE_OP(44,ON)MOVESCANABS(0.00000,0.00000)MOVEOP_DELAY = 0MOVE_DELAY(1)MOVE_OP(44,OFF)FORCE_SPEED = 1000MOVESCANABS(-5.00000,5.00000)MOVE_DELAY(200,1)FORCE_SPEED = 500MOVEOP_DELAY = -0.1MOVE_OP(44,ON)MOVESCANABS(5.00000,5.00000)MOVESCANABS(5.00000,-5.00000)MOVESCANABS(-5.00000,-5.00000)MOVESCANABS(-5.00000,5.00000)MOVEOP_DELAY = 0MOVE_DELAY(1)MOVE_OP(44,OFF)
06、激光標(biāo)刻過(guò)程
激光標(biāo)刻的過(guò)程,初始化、空移、開(kāi)光、標(biāo)刻、關(guān)光都封裝成函數(shù)接口,在進(jìn)行標(biāo)刻時(shí),調(diào)用相關(guān)的函數(shù)接口即可生成對(duì)應(yīng)的三次文件字符串。
完整代碼獲取地址
▼
本次,正運(yùn)動(dòng)技術(shù)開(kāi)放式激光振鏡運(yùn)動(dòng)控制器在Ubuntu+Qt下自定義圖形標(biāo)刻,就分享到這里。
更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào),需要相關(guān)開(kāi)發(fā)環(huán)境與例程代碼,請(qǐng)咨詢正運(yùn)動(dòng)技術(shù)銷售工程師:400-089-8936。
本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來(lái)源。
中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.wangxinlc.cn)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
相關(guān)資訊
產(chǎn)品新聞
更多>2025-04-30
性能躍升20%!維宏NK300CX Plus數(shù)控系統(tǒng)...
2025-04-11
rpi-image-gen:樹(shù)莓派軟件鏡像構(gòu)建的終...
2025-04-08
【產(chǎn)品解讀】全面提升精密制造檢測(cè)節(jié)拍...
2025-03-31
激光閃耀 智慧引領(lǐng) | WISE MASER 黑武士...
2025-03-20