今天,正運動小助手給大家分享一下EtherCAT運動控制卡開發教程之Qt,主要介紹一下如何通過Qt編程實現小線段軌跡連續加工,暫停與繼續。
ECI2828運動控制卡的硬件介紹
ECI2828系列控制卡支持最多達16軸直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸、機械手指令等;采用優化的網絡通訊協議可以實現實時的運動控制。
ECI2828系列運動控制卡支持以太網,232通訊接口和電腦相連,接收電腦的指令運行,可以通過EtherCAT總線和CAN總線去連接各個擴展模塊,從而擴展輸入輸出點數或運動軸。
ECI2828系列運動控制卡的應用程序可以使用VC、VB、VS、C++、C#等多種高級語言編程來開發,程序運行時需要動態庫zmotion.dll。調試時可以把ZDevelop軟件同時連接到控制器,從而方便調試、方便觀察。
一、Qt進行運動控制卡開發的流程
1.新建Qt項目。
圖1:新建Qt項目
圖2:選擇項目路徑
圖3:選擇Qt編譯套件(kits)
圖4:選擇基類
2.將函數庫相關的文件復制到新建的項目中。
3.向新建的項目里面添加函數庫的靜態庫。(zmotion.lib)
第一步:添加函數庫1
第二步:添加函數庫2
第三步:添加函數庫3
4.添加函數庫相關的頭文件到項目中。
5.聲明相關頭文件,并定義連接句柄。
二、PC函數介紹
1.PC函數手冊也在光盤資料里面,具體路徑如下:“光盤資料\8.PC函數\函數庫2.1\ZMotion函數庫編程手冊 V2.1.pdf”。
2.PC編程,一般如果網口對控制器和工控機進行鏈接。網口鏈接函數接口是ZAux_OpenEth();如果鏈接成功,該接口會返回一個鏈接句柄。通過操作這個鏈接句柄可以實現對控制器的控制。
ZAux_OpenEth()接口說明:
3.連續插補和S曲線設置相關指令介紹。
4.拐角模式設置相關指令介紹。
三、Qt開發實現小線段軌跡連續加工、暫停與繼續
1.Qt例程界面如下。
2.在構造函數里面調用鏈接控制器的接口ZAux_OpenEth(),與控制器進行鏈接,鏈接成功后啟動定時器監控控制器的軸信息。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
int rint=0;
ui->setupUi(this);
//系統啟動自動連接控制器
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.連續小線段的加工。(1)通過ZCADToMore2.0導圖工具將“dxf”格式的CAD圖紙導成“Z3P”文件的格式并下載到控制器里面。
(點擊控制器→發送到控制器按鈕,即可把代碼顯示窗口中的代碼發送到控制器中,在控制器中的文件名為:ZCAD.z3p)
(2)搜索控制器里面的Z3P文件。
//搜索Z3P文件
void MainWindow::on_Search_clicked()
{
char Buff[1024]={"123"};
ZAux_Execute(g_handle, "FILE "FLASH_FIRST", ".z3p",0", NULL, 0);
//獲取VR寄存器里面的文件名
ZAux_Execute(g_handle, "?vrstring(0,128)", Buff, 1024);
//去除文件名的\n
int Len = strlen(Buff);
Buff[Len-1]=0;
QString Str = QString(QLatin1String(Buff));
//更新到UI界面上
ui->lineEdit->setText(Str);
qDebug()<<
}
(3)通過啟動按鈕啟動Z3P文件。
//啟動按鈕槽函數:設置拐角模式,開始運行Z3P文件
void MainWindow::on_RunButton_clicked()
{
QString Text;
int AxisList[3] = {0,1,2};
float DisList[3]={0};
//設置軸參數
for(int i=0; i<3; i++)
{
//軸類型設置為脈沖軸
ZAux_Direct_SetAtype(g_handle,i,1);
//設置脈沖當量,一般設置成機臺運動1mm需要的脈沖數
ZAux_Direct_SetUnits(g_handle,i,1000);
//設置軸運動速度
ZAux_Direct_SetSpeed(g_handle,i,200);
//設置軸的加速度
ZAux_Direct_SetAccel(g_handle,i,2000);
//設置軸的減速度
ZAux_Direct_SetDecel(g_handle,i,2000);
//打開連續插補
ZAux_Direct_SetMerge(g_handle,i,1);
//設置S曲線參數
ZAux_Direct_SetSramp(g_handle,i,250);
}
//設置拐角模式
int CornerMode=0;
//是否打開自動倒角
if(ui->IsChamfer->checkState())
{
CornerMode = 32+CornerMode;
}
//是否打開拐角減速
if(ui->IsSlowDown->checkState())
{
CornerMode = 2+CornerMode;
//設置開始減速角度
Text = ui->StartAngle->toPlainText();
ZAux_Direct_SetDecelAngle(g_handle,AxisList[0],Text.toFloat()*3.14/180);
//設置停止減速角度
Text = ui->StopAngle->toPlainText();
ZAux_Direct_SetStopAngle(g_handle,AxisList[0],Text.toFloat()*3.14/180);
//設置參數速度
Text = ui->SpSpeed->toPlainText();
ZAux_Direct_SetForceSpeed(g_handle,AxisList[0],Text.toFloat());
}
//是否打開小圓限速
if(ui->IsMinCir->checkState())
{
CornerMode = 8+CornerMode;
//設置限速半徑
Text = ui->CirRadius->toPlainText();
ZAux_Direct_SetFullSpRadius(g_handle,AxisList[0],Text.toFloat());
//設置參數速度
Text = ui->SpSpeed->toPlainText();
ZAux_Direct_SetForceSpeed(g_handle,AxisList[0],Text.toFloat());
}
ZAux_Direct_SetCornerMode(g_handle,AxisList[0],CornerMode);
//停止線程1
ZAux_Execute(g_handle, "STOPTASK 1", NULL, 0);
//啟動Z3P文件
char CmdBuff[64];
char *str = ui->lineEdit->text().toLatin1().data();
sprintf(CmdBuff, "FILE3_RUN "%s",1",str);
ZAux_Execute(g_handle, CmdBuff, NULL, 0);
}
5.通過停止按鈕的槽函數調用軸運動停止指令停止軸運動
//停止軸運動
void MainWindow::on_StopButton_clicked()
{
//停止線程1
ZAux_Execute(g_handle, "STOPTASK 1", NULL, 0);
//停止軸運動
ZAux_Direct_Rapidstop(g_handle,2);
}
6.小線段連續軌跡加工的暫停與繼續。
//暫停運動
void MainWindow::on_Suspended_clicked()
{
//暫停軸運動
ZAux_Direct_MovePause(g_handle,0,0);
//暫停線程1
ZAux_Execute(g_handle, "PAUSETASK 1", NULL, 0);
}
//恢復運動
void MainWindow::on_Restore_clicked()
{
//恢復軸運動
ZAux_Direct_MoveResume(g_handle,0);
//恢復線程1
ZAux_Execute(g_handle, "RESUMETASK 1", NULL, 0);
}
四、例程移植到Linux設備上
1.Linux對應架構的庫復制到項目文件夾里面。
2.向新建的項目里面添加函數庫的靜態庫。(libzmotion.so)
添加函數庫1
添加函數庫2
添加函數庫3
→至此,重新編譯即可運行。
3.調試與監控。
編譯運行例程,同時連接ZDevelop軟件進行調試,對運動控制的軸參數和運動情況進行監控。
(1)小線段軌跡加工的X-Y位置波形圖。
(2)小線段軌跡加工的速度波形圖。(連續插補未打開拐角減速)
(3)小線段軌跡加工的速度波形圖。
(連續插補設置拐角減速)
本次,正運動技術EtherCAT運動控制卡開發教程之Qt(中):小線段連續軌跡加工、暫停與繼續,就分享到這里。
-
運動控制
+關注
關注
4文章
587瀏覽量
32931 -
ethercat
+關注
關注
18文章
729瀏覽量
38793 -
qt編程
+關注
關注
0文章
4瀏覽量
6262
發布評論請先 登錄
相關推薦
評論