
前麵課程我們講述了如何通過Ubuntu+Qt進行振鏡校正(詳情點擊→開放式激光振鏡運動控製器在Ubuntu+Qt下的激光振鏡校正),本節自定義圖形標刻是在振鏡校正的前提下實現的。在正式學習之前,我們先了解一下正運動技術的ZMC408SCAN-V22運動控製器,ZMC408SCAN-V22支持在Linux環境進行開發使用。
01 ZMC408SCAN-V22硬件介紹
ZMC408SCAN-V22是正運動技術推出的高性能雙振鏡運動控製器,集成了2個百兆以太網口,支持EtherCAT、EtherNET、CAN、RS232、RS485、24路通用數字輸入、20路通用數字輸出、2路通用模擬量輸出、2路通用模擬量輸入、4個本地差分脈衝軸接口、1個MPG手輪編碼器接口、2個帶反饋振鏡接口、1個LASER激光專用接口、1個FIBER激光器接口。開放式係統框圖如下所示:

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

ZMC408SCAN-V22通過CAN、EtherCAT總線可以連接各個擴展模塊,從而擴展數字量、模擬量或運動軸。可以在 Windows,Linux,Mac,Android,Wince各種操作係統下開發,提供vc,c#,vb.net,labview等各種環境的dll庫。上位機軟件編程參考《ZMotion PC函數庫編程手冊》。

02 Ubuntu+Qt進行自定義圖形標刻項目的開發
1.在Qt Creator菜單選擇“文件”→“新建文件或項目...”,打開創建項目向導。選擇Application項目集,創建Qt Widgets Application項目,設置項目名稱和保存位置。

2.導入廠家提供的相關函數庫及頭文件。
(1) 將zmotion.h和zmcaux.h、zmcaux.cpp以及libzmotion.so庫複製到新建的項目文件夾中。

(2) 在Qt Creator選擇新建的Qt項目右擊選擇“添加庫...”→“外部庫”點擊下一步,將剛才複製到項目文件夾上的libzmotion.so庫文件導入到項目中。

(3) 在Qt Creator下右擊新建的Qt項目,選擇“添加現有文件...”,將之前複製到項目文件下的頭文件zmotion.h以及zmcaux.cpp和zmcaux.h添加到項目中。

(4) 函數庫添加成功後,打開pro文件可以看到相關的函數庫和頭文件信息。此時已經將例程需要用到的函數庫和頭文件都加入到項目中了,接下來開始實現例程。

03 自定義圖形標刻流程以及相關函數介紹
1.自定義圖形標刻流程圖

2.相關函數介紹
(1)連接控製器

(2)通用命令執行接口

(3)三次文件初始化

(4)生成空移字符串

(5)生成開光字符串

(6)生成關光字符串

(7)生成標刻點字符串

(8)下載三次文件

(9)設置輸出口狀態

(10)設置模擬量輸出

(11)設置pwm占空比

(12)設置pwm頻率

04 自定義圖形標刻的實現例程
自(zi)定(ding)義(yi)圖(tu)形(xing)標(biao)刻(ke)例(li)程(cheng)主(zhu)要(yao)是(shi)通(tong)過(guo)選(xuan)擇(ze)簡(jian)單(dan)圖(tu)形(xing)來(lai)生(sheng)成(cheng)標(biao)刻(ke)的(de)三(san)次(ci)文(wen)件(jian),控(kong)製(zhi)器(qi)運(yun)行(xing)三(san)次(ci)文(wen)件(jian)標(biao)刻(ke)對(dui)應(ying)的(de)圖(tu)形(xing),例(li)程(cheng)中(zhong)的(de)三(san)次(ci)文(wen)件(jian)主(zhu)要(yao)通(tong)過(guo)字(zi)符(fu)串(chuan)追(zhui)加(jia)的(de)形(xing)式(shi)生(sheng)成(cheng),在(zai)將(jiang)所(suo)有(you)圖(tu)形(xing)的(de)繪(hui)製(zhi)過(guo)程(cheng)生(sheng)成(cheng)三(san)次(ci)文(wen)件(jian)後(hou)下(xia)載(zai)到(dao)控(kong)製(zhi)器(qi)即(ji)可(ke)。
1.建立控製器連接,設置相關的振鏡和工藝參數,可以通過設置模擬量口和pwm以及激光器使能信號,可以打開或者關閉激光。
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); //設置模擬量
ZAux_Direct_SetPwmDuty(g_handle,markPara.PwmIo,0.5); //設置占空比
ZAux_Direct_SetPwmFreq(g_handle,markPara.PwmIo,markPara.PwmFreq); //設置頻率
ZAux_Direct_SetOp(g_handle,io_value.emit_io,0); //關閉激光輸出口
ZAux_Direct_SetOp(g_handle,io_value.enable_io,0); //關閉激光器使能
}
2.生成初始化的三次文件字符串
可以將標刻過程中初始化的部分寫到相關的函數裏麵,包括設置初始化的激光器參數、標刻起點、延時參數等,方便在標刻自定義圖形的過程中直接使用。三次文件字符串本質是將basic指令進行拚接處理,將所有指令拚接完成後,可以直接寫入控製器中執行。
void MainWindow::LaserScan_z3p_Init()
{
strFile3.clear();
strFile3 += QString("BASE(%1,%2)\n").arg(4).arg(5); //設置軸號
strFile3 += "ATYPE = 21,21\n"; //設置軸類型
strFile3 += "UNITS = 100,100\n"; //設置脈衝當量
strFile3 += "AXIS_ZSET = 3,3\n"; // 開啟精準輸出
strFile3 += "MERGE = 1,1\n"; //開啟連續插補
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); //拐角延時時間
strFile3 += QString("FORCE_SPEED = %1\n").arg(markPara.JumpSpeed); //空移速度
strFile3 += "MOVESCANABS(0,0)\n"; //移動到 0 位
}
3.生成標刻自定義圖形的三次文件字符串
自(zi)定(ding)義(yi)圖(tu)形(xing)本(ben)質(zhi)上(shang)可(ke)以(yi)分(fen)解(jie)為(wei)線(xian)段(duan)進(jin)行(xing)繪(hui)製(zhi),在(zai)進(jin)行(xing)激(ji)光(guang)標(biao)刻(ke)時(shi)也(ye)是(shi)采(cai)用(yong)線(xian)段(duan)的(de)形(xing)式(shi),在(zai)生(sheng)成(cheng)自(zi)定(ding)義(yi)圖(tu)形(xing)時(shi),隻(zhi)需(xu)要(yao)控(kong)製(zhi)每(mei)一(yi)條(tiao)線(xian)段(duan)的(de)起(qi)始(shi)點(dian)和(he)結(jie)束(shu)點(dian)位(wei)置(zhi),同(tong)時(shi)在(zai)起(qi)始(shi)點(dian)和(he)結(jie)束(shu)點(dian)的(de)位(wei)置(zhi)控(kong)製(zhi)延(yan)時(shi)參(can)數(shu),最(zui)後(hou)在(zai)完(wan)成(cheng)繪(hui)製(zhi)時(shi)關(guan)閉(bi)激(ji)光(guang)和(he)使(shi)能(neng)即(ji)可(ke)。下(xia)麵(mian)是(shi)部(bu)分(fen)生(sheng)成(cheng)三(san)次(ci)文(wen)件(jian)字(zi)符(fu)串(chuan)以(yi)及(ji)下(xia)載(zai)的(de)代(dai)碼(ma)。
void MainWindow::on_create_File3_clicked()
{
LaserScan_z3p_Init(strFile3);
ListNode *ps = layers->next;
do
{
Coordinate * pData = ps->data;
if(ps->type == 1)//標刻點
{
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)//標刻直線
{
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)//標刻圓弧
{
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)//標刻整圓
{
LaserScan_z3p_Arc(pData->next->x + ps->radius,pData->next->y - ps->radius,ps->radius,0,360,0,0);
}
...... //標刻其他類型
ps = ps->next;
}while(ps != layers);
}
4.設置運行任務號,啟動任務進行標刻
三次文件已經下載到控製器中,這個時候可以通過ZMC_Execute函數輸入命令去運行生成的三次文件,完成圖形的標刻。下麵的啟動任務,進行標刻的部分實現代碼。
void MainWindow::on_but_Mark_clicked()
{
if( 0 == g_handle)
{
QMessageBox::warning(this,"提示","控製器未連接!");
return;
}
QString Cmd;
char Response[1024];
//設置啟動任務號,執行Zmc_polyline.z3p
ZMC_Execute(g_handle,"FILE3_RUN \"Zmc_polyline.z3p\",7 ",500,Response,1024);
}
5.設置配置文件信息,保留配置參數
通過生成ini配置文件信息,在程序加載時讀取文件,程序關閉時將配置數據寫到ini配置文件中,以此實現保留最後一次的使用參數,方便下一次加載使用。通過使用內部函數庫QSettings實現的,下麵是部分的實現代碼。
void MainWindow::saveINI()
{
//保存配置數據信息
QSettings *iniWrite = new QSettings("config.ini",QSettings::IniFormat);
iniWrite->setValue("laserType",ui->laser_List->currentIndex());
.....
delete iniWrite;
}
void MainWindow::readINI()
{
//讀取配置文件數據
QSettings *iniRead = new QSettings("config.ini",QSettings::IniFormat);
int laserType = iniRead->value("laserType").toInt();
ui->laser_List->setCurrentIndex(laserType);
.....
delete iniRead;
}
05 自定義圖形標刻的實現效果
1. 打開Qt繪製的基本圖形界麵,設置基本的激光器參數和運動參數。

2. 添加想要標刻的自定義圖形,設置圖形參數,選擇添加圖形,例程中添加的圖形為點、矩形、整圓、圓弧、直線,點擊生成三次文件後,查看三次文件的內容。

3. 點擊標刻即可完成已選自定義圖形的標刻。
4.分(fen)析(xi)生(sheng)成(cheng)的(de)三(san)次(ci)文(wen)件(jian)信(xin)息(xi),下(xia)麵(mian)是(shi)生(sheng)成(cheng)三(san)次(ci)文(wen)件(jian)的(de)部(bu)分(fen)內(nei)容(rong),三(san)次(ci)文(wen)件(jian)的(de)開(kai)頭(tou)都(dou)是(shi)對(dui)軸(zhou)參(can)數(shu)加(jia)工(gong)參(can)數(shu)的(de)設(she)置(zhi),當(dang)移(yi)動(dong)到(dao)運(yun)動(dong)起(qi)始(shi)點(dian)時(shi),設(she)置(zhi)開(kai)光(guang)參(can)數(shu)和(he)延(yan)時(shi)參(can)數(shu),在(zai)軌(gui)跡(ji)完(wan)成(cheng)時(shi)設(she)置(zhi)關(guan)光(guang)延(yan)時(shi)和(he)關(guan)光(guang)操(cao)作(zuo)。
BASE(4,5)
ATYPE = 21,21
UNITS = 100,100
AXIS_ZSET = 3,3
MERGE = 1,1
OP(47,ON)
MOVE_AOUT(3,127)
MOVE_PWM(11,0.5,4000)
DECEL_ANGLE = 0.261799,0.261799
STOP_ANGLE = 1.5708,1.5708
ZSMOOTH = 1000,1000
FORCE_SPEED = 1000
MOVESCANABS(0,0)
FORCE_SPEED = 1000
MOVESCANABS(0.00000,0.00000)
MOVE_DELAY(0.2,1)
FORCE_SPEED = 500
MOVEOP_DELAY = -0.1
MOVE_OP(44,ON)
MOVESCANABS(0.00000,0.00000)
MOVEOP_DELAY = 0
MOVE_DELAY(1)
MOVE_OP(44,OFF)
FORCE_SPEED = 1000
MOVESCANABS(-5.00000,5.00000)
MOVE_DELAY(200,1)
FORCE_SPEED = 500
MOVEOP_DELAY = -0.1
MOVE_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 = 0
MOVE_DELAY(1)
MOVE_OP(44,OFF)
06 激光標刻過程
激光標刻的過程,初始化、空移、開光、標刻、關光都封裝成函數接口,在進行標刻時,調用相關的函數接口即可生成對應的三次文件字符串。

完整代碼獲取地址
▼

本次,正運動技術開放式激光振鏡運動控製器在Ubuntu+Qt下自定義圖形標刻,就分享到這裏。
更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請谘詢正運動技術銷售工程師:400-089-8936。
benwenyouzhengyundongjishuyuanchuang,huanyingdajiazhuanzai,gongtongxuexi,yiqitigaozhongguozhinengzhizaoshuiping。wenzhangbanquanguizhengyundongjishusuoyou,ruyouzhuanzaiqingzhumingwenzhanglaiyuan。

正運動技術專注於運動控製技術研究和通用運動控製軟硬件產品的研發,是國家級高新技術企業。正運動技術彙集了來自華為、zhongxingdenggongsideyouxiurencai,zaijianchizizhuchuangxindetongshi,jijilianhegedagaoxiaoxietongyundongkongzhijichujishudeyanjiu,shiguoneigongkonglingyufazhanzuikuaideqiyezhiyi,yeshiguoneishaoyou、完整掌握運動控製核心技術和實時工控軟件平台技術的企業。
|