国产成人精品免高潮在线观看-国产精品99无码一区二区-国产av人人夜夜澡人人爽-精品国产免费一区二区三区香蕉

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 簡單易用的運動控制卡(七):一次性加載多條連續小線段數據

簡單易用的運動控制卡(七):一次性加載多條連續小線段數據

時間:2021-11-11 16:05:56來源:深圳市正運動技術有限公司

導語:?今天,正運動小助手給大家分享一下運動控制卡之ECI3808如何在大量小線段數據的情況下一次性加載多條連續小線段數據。

  今天,正運動小助手給大家分享一下運動控制卡之ECI3808如何在大量小線段數據的情況下一次性加載多條連續小線段數據。

  一ECI3808硬件介紹

  1.功能介紹

  ECI3808系列控制卡支持最多達12軸直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸、機械手指令等;采用優化的網絡通訊協議可以實現實時的運動控制。

  ECI3808系列運動控制卡支持以太網,RS232 通訊接口和電腦相連,接收電腦的指令運行,可以通過CAN總線去連接各個擴展模塊,從而擴展輸入輸出點數或運動軸。

  ECI3808系列運動控制卡的應用程序可以使用 VC,VB,VS,C++,C#等軟件來開發,程序運行時需要動態庫 zmotion.dll。調試時可以把ZDevelop軟件同時連接到控制器,從而方便調試和觀察。

運動控制

  2.硬件接口

運動控制

通用輸入口電路

運動控制

通用輸出口電路

運動控制

AD/DA接口說明

運動控制

本地脈沖軸說明

      3.控制器基本信息

運動控制

  二、C++進行運動控制開發

  1.新建MFC項目并添加函數庫

  (1)在VS2015菜單“文件”→“新建”→ “項目”,啟動創建項目向導。

運動控制

       (2)選擇開發語言為“Visual C++”和程序類型“MFC應用程序”。

運動控制

  (3)點擊下一步即可。

運動控制

  (4)選擇類型為“基于對話框”,下一步或者完成。

運動控制

       (5)找到廠家提供的光盤資料,路徑如下(64位庫為例)。

  A.進入廠商提供的光盤資料找到“8.PC函數”文件夾,并點擊進入。

運動控制

  B.選擇“函數庫2.1”文件夾。

運動控制

  C.選擇“Windows平臺”文件夾。

運動控制

  D.根據需要選擇對應的函數庫這里選擇64位庫。

運動控制

  E.解壓C++的壓縮包,里面有C++對應的函數庫。

運動控制

  F.函數庫具體路徑如下。

運動控制

  (6)將廠商提供的C++的庫文件和相關頭文件復制到新建的項目里面。

運動控制

       (7)在項目中添加靜態庫和相關頭文件。

  A.先右擊項目文件,接著依次選擇:“添加”→“現有項”。

運動控制

  B.在彈出的窗口中依次添加靜態庫和相關頭文件。

  (8)聲明用到的頭文件和定義控制器連接句柄。

運動控制

  至此項目新建完成,可進行MFC項目開發。

  2.查看PC函數手冊,熟悉相關函數接口。

       (1)PC函數手冊也在光盤資料里面,具體路徑如下:“光盤資料\8.PC函數\函數庫2.1\ZMotion函數庫編程手冊 V2.1.pdf”

運動控制

  (2)鏈接控制器,獲取鏈接句柄。

  ZAux_OpenEth()接口說明:

運動控制

  (3)利用直接basic命令發送實現功能函數。

  ZAux_DirectCommand函數直接下發命令執行basic功能塊,指令運行速度快,但是需要加載緩沖的指令不能成功執行,能夠成功執行的下發指令推薦使用,加快效率。

運動控制

  ZAux_Execute函數直接下發命令執行basic功能塊,執行指令速度會阻塞,執行速度慢一些,所有能夠執行的字符串命令都可以成功執行。

運動控制

  3.MFC開發控制器硬件外設讀寫例程。

       (1)例程界面如下。

運動控制

  (2)例程界面由三個部分組成。

  A.一是連接部分,用于連接當前的控制器,獲取到控制器的句柄進行之后的操作。

運動控制

  B.二是狀態檢測部分,可以查看到當前控制器的軸坐標,軸狀態,運動狀態以及緩沖區剩余大小。

運動控制

  C.三是參數設置部分進行設置控制器的運動參數,加減速以及速度等。

運動控制

  (3)鏈接按鈕的事件處理函數中調用鏈接控制器的接口函數ZAux_OpenEth(),與控制器進行鏈接,鏈接成功后啟動定時器1監控控制器狀態。

  //網口鏈接控制器void CSingle_move_Dlg::OnOpen(){ char buffer[256]; int32 iresult; //如果已經鏈接,則先斷開鏈接 if(NULL != g_handle) { ZAux_Close(g_handle); g_handle = NULL; } //從IP下拉框中選擇獲取IP地址 GetDlgItemText(IDC_IPLIST,buffer,255); buffer[255] = '\0'; //開始鏈接控制器 iresult = ZAux_OpenEth(buffer, &g_handle); if(ERR_SUCCESS != iresult) { g_handle = NULL; MessageBox(_T("鏈接失敗")); SetWindowText("未鏈接"); return; } //鏈接成功開啟定時器1 SetWindowText("已鏈接"); SetTimer( 1, 100, NULL ); }

  (4)通過定時器監控控制器狀態,定時器1讀取各軸當前的狀態,定時器2進行加載當前的運動數據并進行對應運動,每次運動加載1000條小線段數據。

  void CTest_multiMoveDlg::OnTimer(UINT_PTR nIDEvent){ if(NULL == g_handle) { MessageBox(_T("鏈接斷開")); return ; } uint32 iret = 0 ; if(1 == nIDEvent) { CString AxisPos; CString AxisStatus; CString AxisIdle; CString AxisBuffer; float showpos[4] ={0}; float showstatus[4] ={0}; float showidle[4] ={0}; int showbuff[4] ={0}; iret = ZAux_Direct_GetAllAxisPara( g_handle,"DPOS",4,showpos); //獲取當前軸位置 iret = ZAux_Direct_GetAllAxisPara( g_handle,"AXISSTATUS",4,showstatus); //獲取當前軸位置 iret = ZAux_Direct_GetAllAxisPara( g_handle,"IDLE",4,showidle); //獲取當前軸位置 iret = ZAux_Direct_GetRemain_LineBuffer(g_handle,0,&showbuff[0]); iret = ZAux_Direct_GetRemain_LineBuffer(g_handle,1,&showbuff[1]); iret = ZAux_Direct_GetRemain_LineBuffer(g_handle,2,&showbuff[2]); iret = ZAux_Direct_GetRemain_LineBuffer(g_handle,3,&showbuff[3]); AxisPos.Format("軸坐標 X: %.2f Y: %.2f Z: %.2f U: %.2f",showpos[0],showpos[1],showpos[2],showpos[3]); AxisStatus.Format("軸狀態 X: %.0f Y: %.0f Z: %.0f U: %.0f",showstatus[0],showstatus[1],showstatus[2],showstatus[3]); AxisIdle.Format("運動狀態 X: %s Y: %s Z: %s U: %s",showidle[0]?"停止":"運動中",showidle[1]?"停止":"運動中",showidle[2]?"停止":"運動中",showidle[3]?"停止":"運動中"); AxisBuffer.Format("剩余直線緩沖 X: %d Y: %d Z: %d U: %.d",showbuff[0],showbuff[1],showbuff[2],showbuff[3]); GetDlgItem( IDC_AXISPOS )->SetWindowText( AxisPos ); GetDlgItem( IDC_AXISSTATUS )->SetWindowText( AxisStatus ); GetDlgItem( IDC_AXISIDLE )->SetWindowText( AxisIdle ); GetDlgItem( IDC_REMAINBUFF )->SetWindowText( AxisBuffer ); } if(2 == nIDEvent) { int axislist[4] = {0,1,2,3}; //運動BASE軸列表 int iresult = 0; int iLen = 10; //單次發送運動長度 if (LEGS_MAX < g_curseges) //超過長度范圍 { iLen = g_curseges - LEGS_MAX; } iresult = ZAux_Direct_MultiMoveAbs(g_handle, iLen, 4, axislist, destdis[g_curseges]); //iresult = ZAux_Direct_MultiMove(g_handle,iLen, 4,axislist, destdis[g_curseges]);相對 if (ERR_OK != iresult) { //運動發送失敗, CString str; str.Format("%d", iresult); } else { g_curseges += iLen; if (g_curseges > LEGS_MAX) //是否填完 { KillTimer(2); return; } } } CDialog::OnTimer(nIDEvent); }

  (5)一次性加載多條小線段,并在加載完成之后進行運動。

  /*************************************************************Description: //多條相對多軸直線插補 Input: //卡鏈接handle iMoveLen 填寫的運動長度 imaxaxises 參與運動總軸數 piAxislist 軸號列表 pfDisancelist 距離列表Output: //Return: //錯誤碼*************************************************************/int32 __stdcall ZAux_Direct_MultiMoveAbs(ZMC_HANDLE handle,int iMoveLen, int imaxaxises, int *piAxislist, float *pfDisancelist){ int i,j; int32 iresult; char cmdbuff[2048]; char tempbuff[2048]; char cmdbuffAck[2048]; if(0 > imaxaxises || imaxaxises > MAX_AXIS_AUX) { return ERR_AUX_PARAERR; } //先讀取剩余直線緩沖 int iBuffLen = 0; iresult = ZAux_Direct_GetRemain_LineBuffer(handle,piAxislist[0],&iBuffLen); if(iBuffLen <= iMoveLen) { return 1002; //緩沖不夠 } //生成命令BASE命令 strcpy(cmdbuff, "BASE("); for(i = 0; i< imaxaxises-1; i++) { sprintf(tempbuff, "%d,",piAxislist[i]); strcat(cmdbuff, tempbuff); } sprintf(tempbuff, "%d)",piAxislist[imaxaxises-1]); strcat(cmdbuff, tempbuff); //換行 strcat(cmdbuff, "\n"); //生成運動命令 for(j=0;j<imovelen;j++) if(ilen="" 獲取命令長度="" ilen="strlen(cmdbuff);" int="" }="" tempbuff);="" strcat(cmdbuff,="" j*imaxaxises]);="" +="" ?%f)\n?,pfdisancelist[i="" sprintf(tempbuff,="" +j*imaxaxises]);="" ?%f,?,pfdisancelist[i="" {="" i++)="" imaxaxises-1;="" i<="" i="0;">1000) { return 20002; } //調用命令執行函數 return ZAux_DirectCommand(handle, cmdbuff, cmdbuffAck, 2048);}

  注:如上面代碼表述,此函數需要傳入小線段條數,以及對應的數據內容,利用獲取到的數據內容組成多條小線段運動的move指令直接下發,不通過每條指令重新處理的方式進行運動下發,以達到加快效率的目的.

  防止出現上位機下發指令速度不夠導致運行過程中間出現運動執行完成速度直接降到0的情況,在運行過程中會進行判斷下發的字符是否超過能夠下發的最大字符,若超過則會返回對應的錯誤碼。

  (6)通過斷開按鈕的事件處理函數來斷開與控制卡的連接。

  void CSingle_move_Dlg::OnClose() //斷開鏈接{ // TODO: Add your control notification handler code here if(NULL != g_handle) { KillTimer(1); //關定時器 KillTimer(2); ZAux_Close(g_handle); g_handle = NULL; SetWindowText("未鏈接"); }}

  (7)通過啟動按鈕的事件處理函數進行設置參數,并開啟定時器2進行運動指令的下發。

  void CTest_multiMoveDlg::OnStart() //啟動{ if(NULL == g_handle) { MessageBox(_T("鏈接斷開")); return ; } UpdateData(true);//刷新參數 int corner_mode = 0; int axislist[4] = {0,1,2,3}; //運動BASE軸列表 //選擇參與運動的軸,第一個軸為主軸,插補參數全用主軸參數 ZAux_Direct_SetUnits(g_handle, axislist[0], m_units); //脈沖當量 ZAux_Direct_SetSpeed(g_handle,axislist[0],m_speed); //速度 UNITS / S ZAux_Direct_SetAccel(g_handle,axislist[0],m_accel); //加速度 ZAux_Direct_SetDecel(g_handle,axislist[0],m_decel); //減速度UpdateData(true);//刷新參數 ZAux_Direct_SetMerge(g_handle,axislist[0],1); //連續插補開關 ZAux_Direct_SetLspeed(g_handle,axislist[0],0); //起始速度 ,拐角減速由 運動速度-起始速度 線性減速的 ZAux_Direct_SetCornerMode(g_handle,axislist[0],0); //拐角模式 0-開啟 ZAux_Direct_SetDecelAngle(g_handle,axislist[0],60*3.14/180); //開始減速角度,轉換為弧度 ZAux_Direct_SetStopAngle(g_handle,axislist[0],120*3.14/180); ZAux_Direct_SetFullSpRadius(g_handle,axislist[0],5); ZAux_Direct_SetZsmooth(g_handle,axislist[0],5); //調用運動 通過檢查是否還有剩余緩沖來確定是否發運動 g_curseges = 0; SetTimer(2, 50, NULL); //新建一個定時器,發運動 }

完整代碼獲取地址

運動控制

  三、調試與監控

  編譯運行例程,同時通過ZDevelop軟件連接控制器對控制器狀態進行監控。

  1.通過ZDevelop軟件的軸參數可以對比當前demo和ZDevelop上面參數的對比,軸坐標,軸狀態等。

運動控制

  2.通過ZDevelop軟件的示波器抓取多條小線段數據打包下發運動軌跡以及對應速度曲線。

  A.小線段運動軌跡:

運動控制

  B.小線段打包下發主軸的規劃速度一直能夠保持,不會存在由于上位機下發速度不夠快而導致中間速度為0情況:

運動控制

  3.ZDevelop軟件調試視頻。

運動控制

  本次,正運動技術簡單易用的運動控制卡(七):一次性加載多條連續小線段數據,就分享到這里。

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

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


標簽: 控制器運動控制

點贊

分享到:

上一篇:新型鋰離子電池負極材料 可讓...

下一篇:節能30% 英威騰全新塑料片材...

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

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

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

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

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

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