技術頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網 > 技術頻道 > 應用方案 > EtherCAT運動控制器實時數(shù)據(jù)的Qt示波器

EtherCAT運動控制器實時數(shù)據(jù)的Qt示波器

時間:2025-04-18 16:06:39來源:深圳市正運動技術有限公司

導語:?ZMC408CE是正運動推出的一款多軸高性能EtherCAT總線運動控制器,具有EtherCAT、EtherNET、RS232、CAN和U盤等通訊接口,ZMC系列運動控制器可應用于各種需要脫機或聯(lián)機運行的場合。

  ZMC408CE - 高性能總線型運動控制

  ZMC408CE是正運動推出的一款多軸高性能EtherCAT總線運動控制器,具有EtherCAT、EtherNET、RS232、CAN和U盤等通訊接口,ZMC系列運動控制器可應用于各種需要脫機或聯(lián)機運行的場合。

運動控制

  ZMC408CE支持PLC、Basic、HMI組態(tài)三種編程方式。PC上位機API編程支持C#、C++、LabVIEW、Matlab、Qt、Linux、VB.Net、Python等接口。

運動控制

  ZMC408CE硬件功能特性:

  1.支持8軸運動控制(脈沖+EtherCAT總線),EtherCAT同步周期可快至125us;

  2.24路通用輸入、16路通用輸出,模擬量AD/DA各兩路;

  3.8路10MHz高速差分脈沖輸出,總線軸、脈沖軸可混合插補;

  4.高性能處理器,提升運算速度、響應時間和掃描周期等;

  5.一維/二維/三維、多通道視覺飛拍,高速高精;

  6.位置同步輸出PSO,連續(xù)軌跡加工中對精密點膠膠量控制和激光能量控制等;

  7.多軸同步控制,多坐標系獨立控制等;

  8.直線插補、任意空間圓弧插補、螺旋插補、樣條插補等;

  9.應用靈活,可PC上位機開發(fā),也可脫機獨立運行;

  PCIE464M - PCIe EtherCAT總線運動控制卡

  PCIE464M是一款基于PCIe的PCI Express的EtherCAT總線運動控制卡,具有多項實時和高精度運動控制控制功能。

運動控制

  PCIE464M運動控制卡上自帶16進16出,第三方圖像處理工控機或PC無需額外配置IO數(shù)據(jù)采集卡和PLC,即可實現(xiàn)IPC形態(tài)的機器視覺運動控制一體機,簡化硬件架構,節(jié)省成本,軟硬件一體化。

運動控制

  PCIE464M硬件功能特性:

  1.可選6-64軸運動控制,支持EtherCAT總線/脈沖/步進伺服驅動器;

  2.聯(lián)動軸數(shù)最高可達16軸,運動周期最小為100μs;

  3.標配16進16出,其中4路高速鎖存輸入、4路高速PWM和12路高速硬件比較輸出PSO;

  4.支持PWM輸出、1D/2D/3D PSO硬件位置比較輸出、視覺飛拍、連續(xù)軌跡插補等;

  5.支持30+機械手模型正逆解模型算法,比如SCARA、Delta、UVW、4軸/5軸 RTCP...;

  6.支持掉電存儲和掉電中斷,多重加密,提供程序更安全機制;

  7.8路單端脈沖軸、4路單端編碼器軸;

  8.具有一維、二維螺距補償控制,實現(xiàn)更高的加工精度;

  ECI2A18B - 高性價比10軸運動控制卡

  ECI2A18B是正運動推出的一款高性價比10軸脈沖型、模塊化的網絡型運動控制卡,采用優(yōu)化的網絡通訊協(xié)議可以實現(xiàn)實時的運動控制,同時支持多種通信協(xié)議,方便與其他工業(yè)控制設備連接和集成。安裝配置相對便捷,適合于模塊化和靈活性要求較高的控制系統(tǒng)。

運動控制

  ECI2A18B控制卡最大可擴展至12脈沖軸,支持8路高速輸入和4路高速輸出,集成豐富的運動控制功能,包含多軸點位運動、電子凸輪,直線插補,圓弧插補,連續(xù)插補運動等,滿足多樣化的工業(yè)應用需求。

運動控制

  ECI2A18B硬件功能特性:

  1.支持6路差分脈沖軸+4路單端脈沖軸運動控制;

  2.支持1路專用的手輪輸入接口;

  3.差分脈沖軸最大輸出脈沖頻率10MHz;

  4.標配24+12進16+6出,其中支持4路高速鎖存,4路高速PWM,2路高速硬件比較輸出PSO(可選支持HW2功能);

  5.可支持RTSys+其他高級上位機編程語言的混合編程支持;

  6.支持RTBasic多任務編程;

  一.RTSys示波器介紹

  正運動RTSys軟件提供了示波器采集與分析工具,通過該工具可以把系統(tǒng)內部的系統(tǒng)變量與數(shù)據(jù)轉換成圖形顯示,便于研究各種信號的變化趨勢與數(shù)據(jù)測量的過程。

  示波器利用控制器內部處理的數(shù)據(jù),把數(shù)據(jù)顯示成波形,利用示波器可以顯示各種不同的信號。

運動控制

  詳情點擊→運動控制看的更清楚細致!RTSys示波器功能簡介。

  二.QT程序開發(fā)流程

  1.在Qt Creator菜單選擇“文件”→“新建文件或項目”,打開創(chuàng)建項目向導。選擇Application項目集,創(chuàng)建Qt Widgets Application項目,設置項目名稱和保存位置。

運動控制

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

  (1)將zmotion.h和zauxdll2.h頭文件、zauxdll.dll和zmotion.dll以及zmotion.lib和zauxdll.lib庫復制到新建的項目文件夾中。

運動控制

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

運動控制

  3.在Qt Creator下右擊新建的Qt項目,選擇“添加現(xiàn)有文件...”,將之前復制到項目文件下的頭文件zmotion.h和zauxdll2.h添加到項目中。

運動控制

  三.相關指令介紹

  1.相關BASIC指令介紹

  (1)SCOPE -- 數(shù)據(jù)采樣

運動控制

  (2)SCOPE_POS -- 采樣點數(shù)

運動控制

  (3)TRIGGER -- 觸發(fā)示波器

運動控制

  使用說明:

  先使用SCOPE指令確定需要采集的數(shù)據(jù)、采集周期、數(shù)據(jù)存放位置及使能。(例如:SCOPE(ON,1,0,8000,MPOS(0),MSPEED(0),MPOS(1),MSPEED(1)),表示每間隔1個系統(tǒng)周期采集一次MPOS(0)、MSPEED(0)、MPOS(1)、MSPEED(1)的數(shù)據(jù)分別存儲至被平均分割的TABLE(0)至TABLE(7999)中,如MPOS(0) → TABLE(0-1999)、MSPEED(0) → TABLE(2000-3999)、MPOS(1) → TABLE(4000-5999)、MSPEED(1) → TABLE(6000-7999)中),后續(xù)需要使用TRIGGER開始數(shù)據(jù)的抓取(如果需要使用連續(xù)采集需要帶參數(shù)1如TRIGGER(1));

  根據(jù)SCOPE_POS返回的值確定當前最新的數(shù)據(jù)保存至TABLE的何處(如SCOPE_POS的值為500表示最新的數(shù)據(jù)存放至TABLE(499)、TABLE(2499)、TABLE(4499)、TABLE(6499)中),根據(jù)上次與此次的最新數(shù)據(jù)存放位置即可確定此次需要加入至波形曲線中的內容,最后使用SCOPE(OFF)關閉數(shù)據(jù)采集。

  RTSys示波器波形展示:

運動控制

  QT例程示波器波形展示:

運動控制

  2.上位機在線命令接口的使用

  由于我們的函數(shù)庫中暫時沒有對上述的BASIC指令進行封裝,所以需要通過在線命令這個萬能的API接口進行上述BASIC指令的下發(fā),下面給大家介紹一下ZAux_DirectCommand和ZAux_Execute這兩個在線命令的API接口的使用。

運動控制

運動控制

  通過在線命令下發(fā)BASIC指令的API接口有ZAux_DirectCommand(直接方式)和ZAux_Execute(緩沖方式)這兩種。

運動控制

 ?、僦苯臃绞剑涸摲绞接蒔C直接下發(fā)BASIC指令至控制器,下發(fā)即執(zhí)行,響應速度塊,雖有部分BASIC指令不支持但仍然推薦使用。

  ②緩沖方式:該方式需要將BASIC指令放入緩沖列中等待執(zhí)行,響應速度較慢但可以執(zhí)行所有命令,只推薦在BASIC指令無法通過直接方式下發(fā)時使用。

  例如:設置軸速度函數(shù)ZAux_Direct_SetSpeed(ZMC_HANDLE handle, int iaxis, float fValue)的源碼如下:

  /*************************************************************Description: //設置軸速度,單位為units/s,當多軸運動時,作為插補運動的速度Input: //卡鏈接handle Output: //Return: //錯誤碼*************************************************************/int32 __stdcall ZAux_Direct_SetSpeed(ZMC_HANDLE handle, int iaxis, float fValue){ int i; int32 iresult; char cmdbuff[2048]; char cmdbuffAck[2048]; if( iaxis > MAX_AXIS_AUX) { return ERR_AUX_PARAERR; } //生成命令 sprintf(cmdbuff, "SPEED(%d)=%f", iaxis, fValue); //調用命令執(zhí)行函數(shù) return ZAux_DirectCommand(handle, cmdbuff, cmdbuffAck, 2048);}

  四.例程原理及實現(xiàn)過程

  1.連接控制器

  代碼說明:讀取用戶設置的IP地址并通過函數(shù)接口ZAux_OpenEth來連接控制器。

  void MainWindow::on_ip_link_btn_clicked(){ int ret; char * tmp_buff = new char[20]; QString str; QString str_title; //獲取輸入的控制器IP地址 str = ui->ip_list->currentText(); QByteArray ba = str.toLatin1(); tmp_buff = ba.data(); //判斷控制器句柄是否為空,不為空則斷開連接并置句柄為空 if(nullptr != g_handle) { //斷開控制器的連接 ZAux_Close(g_handle); g_handle = nullptr; setWindowTitle(QString::fromLocal8Bit("示波器")); } //連接控制器 ret = ZAux_OpenEth(tmp_buff,&g_handle); if( 0 != ret) { QMessageBox::warning(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("連接失敗")); } else { QMessageBox::warning(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("連接成功")); str_title = windowTitle() + tmp_buff; setWindowTitle(str_title); }}

  2.開啟示波器

  代碼說明:讀取用戶設置的示波器參數(shù),通過字符串拼接的方式設置scope指令的參數(shù),trigger(1)指令開啟連續(xù)采集,由于ZAux_DirectCommand暫時不支持這兩個指令的下發(fā),所以通過ZAux_Execute下發(fā)拼接好的basic指令。

  void MainWindow::on_start_scope_btn_clicked(){ int ret; QString cmd; QString temp; char tmp_commandback_buff[20480] = {0}; if(nullptr == g_handle) { QMessageBox::warning(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("請先連接控制器")); qDebug() << QString::fromLocal8Bit("請先連接控制器!!!"); return ; } //獲取設置的通道數(shù)、采集周期數(shù)和采集間隔周期 channel_num = ui->channel_num->currentText().toUInt(); current_acqu_cycle = ui->acquisition_cycle->text().toUInt(); current_time_period = ui->time_period->currentText().toUInt(); /*拼接示波器所需的參數(shù)SCOPE(enable, period, table_start, table_stop, p0 [,p1 [,p2 [,p3 [,p4 [,p5 [,p6 [,p7]]]]]]]) enable:使能與否 period:采集周期間隔 table_start:采樣數(shù)據(jù)存儲在TABLE的起始位置 table_stop:TABLE結束位置,減去起始位置為采樣個數(shù) p0~p7:采樣數(shù)據(jù)類型,等分存儲在TABLE范圍 拼接采集周期間隔及采樣的起始終止TABLE地址*/ cmd = QString("scope(1,%1,0,%2,").arg(current_time_period).arg(current_acqu_cycle * channel_num - 1); //拼接需采集的數(shù)據(jù)類型 for(int i = 0; i < channel_num; i++) { QWidget *widgetSex=ui->tableWidget->cellWidget(i,2); QComboBox *sex=(QComboBox*)widgetSex; cmd.append(sex->currentText()); cmd.append("("); cmd.append(ui->tableWidget->item(i,1)->text()); cmd.append(")"); cmd.append(","); } cmd.chop(1); cmd.append(") "); cmd.append("trigger(1)"); //清除波形圖中的數(shù)據(jù) for(int i = 0; i < 4; i++) { ui->customPlot->graph(i)->data().data()->clear(); ui->customPlot->xAxis->setRange(0, 5 * customplot_x_scale); } //重繪波形圖 ui->customPlot->replot(); //通過ZAux_Execute函數(shù)接口下發(fā)上面拼接的BASIC指令 ret = ZAux_Execute(g_handle, QByteArray(cmd.toLatin1()).data(), tmp_commandback_buff, 20480); if(ret == 0) { //把波形圖參數(shù)信息傳遞給獲取table數(shù)據(jù)至波形圖的子線程中 emit emit_para_int(current_acqu_cycle, current_time_period, channel_num, customplot_x_scale); //如果示波器已開啟則先停止獲取table數(shù)據(jù)至波形圖的子線程再開啟線程 if(scope_status == 1) { emit GetDataStop(); GetDataThread.wait(); GetDataThread.start(); } else { //開啟獲取table數(shù)據(jù)至波形圖的子線程 GetDataThread.start(); scope_status = 1; } } else { qDebug() << QString::fromLocal8Bit("示波器開啟失敗,錯誤代碼為 ") << ret; }}

  3.讀取對應table中的數(shù)據(jù)并顯示

  代碼說明:根據(jù)上次的TABLE數(shù)據(jù)更新位置與此次使用SCOPE_POS返回的最新數(shù)據(jù)存放的TABLE位置確定此次使用ZAux_Direct_GetTable獲取控制器中TABLE寄存器中的數(shù)據(jù)位置,將從TABLE寄存器中獲取到的數(shù)據(jù)加載進顯示的曲線,最后重新繪制圖形。

  void GetData::SetData(int Type, int Num){ int ret; //Type為0則表示當前采樣至的table位置比上次的要大,只需采集兩者之間的table數(shù)據(jù)即可 if(Type == 0) { //獲取table中的數(shù)據(jù) ret = ZAux_Direct_GetTable(g_handle, start_pos + current_acqu_cycle * Num, total_pos, NewData); if(ret == 0) { //向波形曲線中寫入從table中獲取的數(shù)據(jù) for(int i = 0;i < total_pos; i++) { CustomPlot->graph(Num)->addData(CustomPlot->graph(Num)->dataCount() * (current_time_period / 1000.0), NewData[i]); } } else{ qDebug() << "get table fail, error code is " << ret; } } //Type為1則表示當前采樣至的table位置比上次的要小,需采集上次采樣至的table位置至table結束位置,還需采集table開始位置至當前采樣至的位置 else if(Type == 1) { //獲取table中的數(shù)據(jù) ret = ZAux_Direct_GetTable(g_handle, start_pos + current_acqu_cycle * Num, current_acqu_cycle - start_pos, NewData); if(ret == 0) { //向波形曲線中寫入從table中獲取的數(shù)據(jù) for(int i = 0;i < current_acqu_cycle - start_pos; i++) { CustomPlot->graph(Num)->addData(CustomPlot->graph(Num)->dataCount() * (current_time_period / 1000.0), NewData[i]); } } else{ qDebug() << "get table fail, error code is " << ret; } if(current_pos != 0) { //獲取table中的數(shù)據(jù) ret = ZAux_Direct_GetTable(g_handle, current_acqu_cycle * Num, current_pos, NewData); if(ret == 0) { //向波形曲線中寫入從table中獲取的數(shù)據(jù) for(int i = 0;i < current_pos; i++) { CustomPlot->graph(Num)->addData(CustomPlot->graph(Num)->dataCount() * (current_time_period / 1000.0), NewData[i]); } } else{ qDebug() << "get table fail, error code is " << ret; } } }}

  4.例程使用與效果展示

  (1)連接控制器,先通過下拉框選擇控制器IP地址或直接輸入IP地址,之后連接即可。

運動控制

  (2)設置參數(shù)開啟示波器,先設置示波器參數(shù)再開啟示波器。

運動控制

  (3)停止示波器,可通過滾動條調整顯示位置,先停止示波器再通過滾動條調整顯示位置,可修改波形參數(shù)使波形顯示效果更好。

運動控制

  本次,正運動技術EtherCAT運動控制器實時數(shù)據(jù)的Qt示波器,就分享到這里。

  更多精彩內容請關注“正運動小助手”公眾號,需要相關開發(fā)環(huán)境與例程代碼,請咨詢正運動技術銷售工程師:400-089-8936。

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

標簽: 正運動運動控制

點贊

分享到:

上一篇:激光振鏡運動控制器在機械臂...

下一篇:物聯(lián)網與硬件融合:開啟智能...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.connectcrack.com)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯(lián)網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯(lián)系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業(yè)自動化與智能制造的全媒體“互聯(lián)網+”創(chuàng)新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號