今天,正運動小助手給大家分享一下EtherCAT運動控制卡開發(fā)教程之Qt,主要介紹一下如何通過Qt編程實現(xiàn)直線插補的運動控制。
?
ECI2828運動控制卡的硬件介紹
?
ECI2828系列控制卡支持最多達16軸直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸、機械手指令等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實現(xiàn)實時的運動控制。
?
ECI2828系列運動控制卡支持以太網(wǎng),232通訊接口和電腦相連,接收電腦的指令運行,可以通過EtherCAT總線和CAN總線去連接各個擴展模塊,從而擴展輸入輸出點數(shù)或運動軸。
ECI2828系列運動控制卡的應(yīng)用程序可以使用VC、VB、VS、C++、C#等多種高級語言編程來開發(fā),程序運行時需要動態(tài)庫zmotion.dll。調(diào)試時可以把ZDevelop軟件同時連接到控制器,從而方便調(diào)試、方便觀察。
?
?
一、Qt進行運動控制卡開發(fā)的流程
?
1.新建Qt項目。
圖1:新建Qt項目
圖2:選擇項目路徑
圖3:選擇Qt編譯套件(kits)
圖4:選擇基類
2.將函數(shù)庫相關(guān)的文件復(fù)制到新建的項目中。
3.向新建的項目里面添加函數(shù)庫的靜態(tài)庫。(zmotion.lib)
第一步:添加函數(shù)庫1
第二步:添加函數(shù)庫2
第三步:添加函數(shù)庫3
4.添加函數(shù)庫相關(guān)的頭文件到項目中。
5.聲明相關(guān)頭文件,并定義連接句柄。
二、PC函數(shù)介紹
?
1.PC函數(shù)手冊也在光盤資料里面,具體路徑如下:“光盤資料\8.PC函數(shù)\函數(shù)庫2.1\ZMotion函數(shù)庫編程手冊 V2.1.pdf”。
2.PC編程,一般如果網(wǎng)口對控制器和工控機進行鏈接。網(wǎng)口鏈接函數(shù)接口是ZAux_OpenEth();如果鏈接成功,該接口會返回一個鏈接句柄。通過操作這個鏈接句柄可以實現(xiàn)對控制器的控制。
ZAux_OpenEth()接口說明:
? 3.多軸插補指令ZAux_Direct_MoveAbs介紹。
4.獲取軸位置信息指令介紹。3.多軸插補指令ZAux_Direct_MoveAbs介紹。
? 5.獲取軸位置信息指令介紹。
?
三、Qt開發(fā)實現(xiàn)多軸插補運動
?
1.多軸插補運動Qt界面如下。
2.在構(gòu)造函數(shù)里面調(diào)用鏈接控制器的接口ZAux_OpenEth(),與控制器進行鏈接,鏈接成功后啟動定時器監(jiān)控控制器的軸信息。
?
? ? ? ? MainWindow::MainWindow(QWidget *parent) :
? ? ? ? ? ? ? ? ?QMainWindow(parent),
? ? ? ? ? ? ? ? ?ui(new Ui::MainWindow)
? ? ? ? {
? ? ? ? ? ? ? ? ? int rint=0;
? ? ? ? ? ? ? ? ? ui->setupUi(this);
? ? ? ? ? ? ? ? ? //系統(tǒng)啟動自動連接控制器
? ? ? ? ? ? ? ? ? rint = ZAux_OpenEth("192.168.0.223", &g_handle);
? ? ? ? ? ? ? ? ? //如果鏈接成功則啟動定時器
? ? ? ? ? ? ? ? ? if(rint==0)
? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ?startTimer(50);
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ?}
?
3.通過定時器更新控制器各個軸的位置和速度信息。
//定時器事件
void MainWindow::timerEvent(QTimerEvent *event)
{
? ? QString StrText;
? ? float AxisDpos[3]={0};
? ? float AxisMspeed[3]={0};
? ? if(NULL != g_handle)
? ? {
? ? ? ? for(int i=0;i<3;i++)
? ? ? ? {
? ? ? ? ? ? //獲取軸0的位置信息
? ? ? ? ? ? ZAux_Direct_GetDpos(g_handle,i,&AxisDpos[i]);
? ? ? ? ? ? //獲取軸0的速度信息
? ? ? ? ? ? ZAux_Direct_GetMspeed(g_handle,i,&AxisMspeed[i]);
? ? ? ? }
? ? ? ? StrText = QString("#軸0位置:(%1) #軸1位置:(%2) #軸2位置:(%3)").arg(AxisDpos[0]).arg(AxisDpos[1]).arg(AxisDpos[2]);
? ? ? ? ui->AxisDpos->setText(StrText);
? ? ? ? StrText = QString("#軸0速度:(%1) #軸1速度:(%2) #軸2速度:(%3)").arg(AxisMspeed[0]).arg(AxisMspeed[1]).arg(AxisMspeed[2]);
? ? ? ? ui->AxisMspeed->setText(StrText);
?
4.通過啟動按鈕的槽函數(shù)調(diào)用多軸插補命令進行多軸插補運動。
?
//啟動按鈕槽函數(shù):開始直線插補運動
void MainWindow::on_RunButton_clicked()
{
? ? QString Text;
? ? int AxisList[3] = {0,1,2};
? ? float DisList[3]={0};
? ? //設(shè)置軸參數(shù)
? ? for(int i=0; i<3; i++)
? ? {
? ? ? ? //軸類型設(shè)置為脈沖軸
? ? ? ? ZAux_Direct_SetAtype(g_handle,i,1);
? ? ? ? //設(shè)置脈沖當量,一般設(shè)置成機臺運動1mm需要的脈沖數(shù)
? ? ? ? ZAux_Direct_SetUnits(g_handle,i,1000);
? ? ? ? //設(shè)置軸運動速度
? ? ? ? ZAux_Direct_SetSpeed(g_handle,i,200);
? ? ? ? //設(shè)置軸的加速度
? ? ? ? ZAux_Direct_SetAccel(g_handle,i,2000);
? ? ? ? //設(shè)置軸的減速度
? ? ? ? ZAux_Direct_SetDecel(g_handle,i,2000);
? ? }
? ? //更新第一行的位置數(shù)據(jù)
? ? Text = ui->DisX1->toPlainText();
? ? DisList[0] = Text.toFloat();
? ? Text = ui->DisY1->toPlainText();
? ? DisList[1] = Text.toFloat();
? ? Text = ui->DisZ1->toPlainText();
? ? DisList[2] = Text.toFloat();
? ? ZAux_Direct_MoveAbs(g_handle,3,AxisList,DisList);
? ? //更新第二行的位置數(shù)據(jù)
? ? Text = ui->DisX2->toPlainText();
? ? DisList[0] = Text.toFloat();
? ? Text = ui->DisY2->toPlainText();
? ? DisList[1] = Text.toFloat();
? ? Text = ui->DisZ2->toPlainText();
? ? DisList[2] = Text.toFloat();
? ? //更新第三行的位置數(shù)據(jù)
? ? ZAux_Direct_MoveAbs(g_handle,3,AxisList,DisList);
? ? Text = ui->DisX3->toPlainText();
? ? DisList[0] = Text.toFloat();
? ? Text = ui->DisY3->toPlainText();
? ? DisList[1] = Text.toFloat();
? ? Text = ui->DisZ3->toPlainText();
? ? DisList[2] = Text.toFloat();
? ? ZAux_Direct_MoveAbs(g_handle,3,AxisList,DisList);
}
?
?
?
5.通過停止按鈕的槽函數(shù)調(diào)用軸運動停止指令停止軸運動。
?
?
//停止軸運動
void MainWindow::on_StopButton_clicked()
{
? ? ZAux_Direct_Rapidstop(g_handle,2);
}
?
?
?
?
四、例程移植到Linux設(shè)備上
?
1.Linux對應(yīng)架構(gòu)的庫復(fù)制到項目文件夾里面。
2.向新建的項目里面添加函數(shù)庫的靜態(tài)庫。(libzmotion.so)
添加函數(shù)庫1
添加函數(shù)庫2
添加函數(shù)庫3
?
3.重新編譯即可運行。
4.調(diào)試與監(jiān)控。
編譯運行例程,同時連接ZDevelop軟件進行調(diào)試,對運動控制的軸參數(shù)和運動情況進行監(jiān)控。
(1)多軸插補X-Y位置波形圖
(2)多軸插補X-Y軸速度波形圖(未打開連續(xù)插補)
?
?
本次,正運動技術(shù)EtherCAT運動控制卡開發(fā)教程之Qt(上):開發(fā)環(huán)境配置與簡單運動控制應(yīng)用,就分享到這里。
?
審核編輯:湯梓紅
評論
查看更多