技術頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網 > 技術頻道 > 應用方案 > EtherCAT驅動器回零與控制器回零:EtherCAT超高速實時運動控制卡XPCIE1032H上位機C#開發(fā)(九)

EtherCAT驅動器回零與控制器回零:EtherCAT超高速實時運動控制卡XPCIE1032H上位機C#開發(fā)(九)

時間:2024-01-12 14:51:39來源:深圳市正運動技術有限公司

導語:?XPCIE1032H是一款基于PCI Express的EtherCAT總線運動控制卡,可選6-64軸運動控制,支持多路高速數(shù)字輸入輸出,可輕松實現(xiàn)多軸同步控制和高速數(shù)據(jù)傳輸。

  XPCIE1032H功能簡介

  XPCIE1032H是一款基于PCI Express的EtherCAT總線運動控制卡,可選6-64軸運動控制,支持多路高速數(shù)字輸入輸出,可輕松實現(xiàn)多軸同步控制和高速數(shù)據(jù)傳輸。XPCIE1032H集成了強大的運動控制功能,結合MotionRT7運動控制實時軟核,解決了高速高精應用中,PC Windows開發(fā)的非實時痛點,指令交互速度比傳統(tǒng)的PCI/PCIe快10倍。

運動控制

  XPCIE1032H支持PWM,PSO功能,板載16進16出通用IO口,其中輸出口全部為高速輸出口,可配置為4路PWM輸出口或者16路高速PSO硬件比較輸出口。輸入口含有8路高速輸入口,可配置為4路高速色標鎖存或兩路編碼器輸入。

  XPCIE1032H搭配MotionRT7實時內核,使用本地LOCAL接口連接,通過高速的核內交互,可以做到更快速的指令交互,單條指令與多條指令一次性交互時間可以達到3-5us左右。

運動控制

  ?XPCIE1032H與MotionRT7實時內核的配合具有以下優(yōu)勢:

運動控制

  1.支持多種上位機語言開發(fā),所有系列產品均可調用同一套API函數(shù)庫;

  2.借助核內交互,可以快速調用運動指令,響應時間快至微秒級,比傳統(tǒng)PCI/PCIe快10倍;

  3.解決傳統(tǒng)PCI/PCIe運動控制卡在Windows環(huán)境下控制系統(tǒng)的非實時性問題;

  4.支持一維/二維/三維PSO(高速硬件位置比較輸出),適用于視覺飛拍、精密點膠和激光能量控制等應用;

  5.提供高速輸入接口,便于實現(xiàn)位置鎖存;

  6.支持EtherCAT總線和脈沖輸出混合聯(lián)動、混合插補。

運動控制

  ?使用XPCIE1032H和MotionRT7進行項目開發(fā)時,通常需要進行以下步驟:

  1.安裝驅動程序,識別XPCIE1032H;

  2.打開并執(zhí)行文件“MotionRT710.exe”,配置參數(shù)和運行運動控制實時內核;

  3.使用ZDevelop軟件連接到控制器,進行參數(shù)監(jiān)控。連接時請使用PCI/LOCAL方式,并確保ZDevelop軟件版本在3.10以上;

  4.完成控制程序開發(fā),通過LOCAL鏈接方式連接到運動控制卡,實現(xiàn)實時運動控制。

運動控制

  ?與傳統(tǒng)PCI/PCIe卡和PLC的測試數(shù)據(jù)結果對比:

運動控制

  我們可以從測試對比結果看出,XPCIE1032H運動控制卡配合實時運動控制內核MotionRT7,在LOCAL鏈接(核內交互)的方式下,指令交互的效率是非常穩(wěn)定,當測試數(shù)量從1w增加到10w時,單條指令交互時間與多條指令交互時間波動不大,非常適用于高速高精的應用。XPCIE1032H控制卡安裝

  §關閉計算機電源。

  §打開計算機機箱,選擇一條空閑的XPCIE卡槽,用螺絲刀卸下相應的擋板條。

  § 將運動控制卡插入該槽,擰緊擋板條上的固定螺絲。

  XPCIE1032H驅動安裝與建立連接參考往期文章EtherCAT超高速實時運動控制卡XPCIE1032H上位機C#開發(fā)(一):驅動安裝與建立連接。

  一、C#語言進行運動控制項目開發(fā)

運動控制

  1.到正運動技術官網的下載中心選擇需要的平臺庫文件。

  庫文件下載地址:http://www.zmotion.com.cn/download_list_21.html

運動控制

  2.解壓下載的安裝包找到“ Zmcaux.cs ”,“ zauxdll.dll ”,“ zmotion.dll ”放入到項目文件中。

       (1)“Zmcaux.cs”放在項目根目錄文件中,與bin目錄同級。

運動控制

  (2)“zauxdll.dll”,“zmotion.dll”放在bin → Debug。

運動控制

  3.用vs打開新建的項目文件,在右邊的解決方案資源管理器中點擊顯示所有,然后鼠標右鍵點擊zmcaux.cs文件,點擊包括在項目中。

運動控制

運動控制

  4.雙擊Form1.cs里面的Form1,出現(xiàn)代碼編輯界面,在文件開頭寫入using cszmcaux,并聲明控制器句柄g_handle。

運動控制

  二、PC函數(shù)介紹

  相關PC函數(shù)介紹詳情可參考“ZMotion PC函數(shù)庫編程手冊 V2.1.1”。

運動控制

運動控制

運動控制

運動控制

  在form設計界面找到需要用到的控件拖拽到窗體中進行UI界面設計,效果如下。

運動控制

  三、相關程序以及設計思路

  本次設計操作步驟相應的流程圖如下:

運動控制

  本例程以運動控制卡XPLCIE1032H搭載MotionRT7實時內核,通過EthereCAT總線口接節(jié)點0(匯川驅動器-0軸),節(jié)點1(正運動擴展模塊EIO16084)1-4軸映射為總線軸為例:

運動控制

  注意:在總線初始化basic程序,驅動器PDO不能設置為-1,因為該PDO列表不含數(shù)據(jù)字典6060,不支持驅動器回零。

  關于pdo列表的配置詳細說明,可以查閱basic編程手冊,搜索DRIVE_PROFILE指令。

運動控制

  1、初始化程序執(zhí)行后,通過ZAux_Direct_GetUserVar函數(shù)接口,可以讀取basic程序自定義的變量。

  本節(jié)案例獲取的是總線初始化映射軸數(shù)量、總線初始化起始軸號和總線初始化完成狀態(tài)。下圖是事先編輯好的basic程序的自定義變量。

運動控制

  使用定時器將總線軸數(shù)量,總線起始軸號,初始化狀態(tài)等總線初始化信息進行獲取更新。

  ·

  //讀取basic程序自定義變量--總線初始化的總軸數(shù)zmcaux.ZAux_Direct_GetUserVar(g_handle, "Bus_TotalAxisnum", ref EcatAxisNum);//讀取basic程序自定義變量--總線初始化的總線起始軸號zmcaux.ZAux_Direct_GetUserVar(g_handle, "Bus_AxisStart", ref EcatStartAxisNum);//讀取basic程序自定義變量--總線初始化的初始化狀態(tài)zmcaux.ZAux_Direct_GetUserVar(g_handle, "Bus_InitStatus", ref EcatInitStatus)

  2、使用RTsys軟件,點擊軟件菜單欄的幫助→Zbasic幫助→搜索,搜索DATUM指令,選擇回零模式并設置回零模式對應的參數(shù)。假設回零模式選擇的是13,需要設置原點開關、限位開關、回零速度(SPEED)和爬行速度(CREEP)。該模式進行回零時軸以SPEED速度正向運行,碰到限位開關會反向查找原點。找到原點后以CREEP速度反向爬行,直到離開原點。

運動控制

  private void Controllers_DatumPara_Button_Click(object sender, EventArgs e){ if (g_handle == (IntPtr)0) { MessageBox.Show("未連接到控制器!", "提示"); } else { //軸基本參數(shù)設置,控制器回零的速度是SPEED AxisParaSet(); int[] ret = new int[7]; //設置回零爬行速度 ret[0] = zmcaux.ZAux_Direct_SetCreep(g_handle, MoveAxis, Convert.ToSingle(Datum_Creep_Value.Text)); //配置原點信號。ZMC系列默認OFF時信號有效,常開傳感器需要反轉輸入口為ON ret[1] = zmcaux.ZAux_Direct_SetDatumIn(g_handle, MoveAxis, Convert.ToInt32(DatumIO_Value.Text)); ret[2] = zmcaux.ZAux_Direct_SetInvertIn(g_handle, Convert.ToInt32(DatumIO_Value.Text), 1); //正硬限位IO設置 ret[3] = zmcaux.ZAux_Direct_SetFwdIn(g_handle, MoveAxis, Convert.ToInt32(FWD_IO_Value.Text)); ret[4] = zmcaux.ZAux_Direct_SetInvertIn(g_handle, Convert.ToInt32(FWD_IO_Value.Text), 1); //負硬限位IO設置 ret[5] = zmcaux.ZAux_Direct_SetRevIn(g_handle, MoveAxis, Convert.ToInt32(REV_IO_Value.Text)); ret[6] = zmcaux.ZAux_Direct_SetInvertIn(g_handle, Convert.ToInt32(REV_IO_Value.Text), 1); //設置控制器回零模式 Controllers_DatumMode = Convert.ToInt32(Controllers_DatumMode_Value.Text); //定義臨時的變量記錄各個函數(shù)的返回值 int FinalRet = -1; for(int i = 0; i < 7; ++i) { FinalRet *= ret[i]; } if (FinalRet == 0) //說明所有函數(shù)的返回值都是0,回零等參數(shù)均設置成功 { MessageBox.Show("控制器回零參數(shù)設置成功!", "提示"); } else { MessageBox.Show("控制器回零參數(shù)設置失敗!", "提示"); } }}

  3、使用ZAux_Direct_Single_Datum函數(shù),函數(shù)語法如下:語法:ZAux_Direct_Single_Datum(連接句柄,軸號,控制器回零模式)選擇回零的軸號,模式以及設置完參數(shù),確認參數(shù)按鈕然后點擊回零按鈕,此時軸以控制器回零參數(shù)進行回零。

  ·

  private void Controllers_Datum_Button_Click(object sender, EventArgs e){ if (g_handle == (IntPtr)0) { MessageBox.Show("未連接到控制器!", "提示"); return; } int ret = -1; //觸發(fā)示波器 zmcaux.ZAux_Trigger(g_handle); //控制器回零 ret = zmcaux.ZAux_Direct_Single_Datum(g_handle, MoveAxis, Controllers_DatumMode); if(ret != 0) { MessageBox.Show("控制器回零啟動失敗!", "提示"); } else { MessageBox.Show("控制器回零啟動成功!", "提示"); }}

  4、查閱驅動器手冊→回零模式介紹,選擇驅動器支持的回零模式(數(shù)據(jù)字典6098),然后設置該回零模式的回零高速,回零低速等參數(shù)。

  在本次例程選擇的是模式19,開始回零時原點開關(HW)為0,以設置的回零高速Speed(50units/s)正向開始回零,遇到原點開關(HW)為1后以回零低速Creep(20units/s)反向爬行,直到原點開關(HW)為0時停機,回零完成。

運動控制

  private void Drivers_DatumPara_Button_Click(object sender, EventArgs e){ if (g_handle == (IntPtr)0) { MessageBox.Show("未連接到控制器!", "提示"); return; } int ret1, ret2, ret3; //設置驅動器回零高速 ret1 = zmcaux.ZAux_Direct_SetSpeed(g_handle, MoveAxis, Convert.ToSingle(Datum_HighSpeed_Value.Text)); //設置驅動器回零低速 ret2 = zmcaux.ZAux_Direct_SetCreep(g_handle, MoveAxis, Convert.ToSingle(Datum_LowSpeed_Value.Text)); //設置驅動器回零偏移 ret3 = zmcaux.ZAux_BusCmd_SetDatumOffpos(g_handle, (uint)MoveAxis, Convert.ToSingle(Datum_OffSet_Value.Text)); //設置驅動器回零模式 Drivers_DatumMode = Convert.ToInt32(Drivers_DatumMode_Value.Text); if (ret1 == 0 && ret2 == 0 && ret3 == 0) { MessageBox.Show("驅動器回零參數(shù)設置成功!", "提示"); } else { MessageBox.Show("驅動器回零參數(shù)設置失敗!", "提示"); }}

  5、使用ZAux_BusCmd_Datum函數(shù),函數(shù)語法如下:語法:ZAux_BusCmd_Datum(連接句柄,軸號,驅動器回零模式)選擇回零的軸號,模式以及設置完參數(shù),確認參數(shù)按鈕然后點擊回零按鈕,此時軸以驅動器回零參數(shù)進行回零。

  ·

  ·

  private void Drivers_Datum_Button_Click(object sender, EventArgs e){ if (g_handle == (IntPtr)0) { MessageBox.Show("未連接到控制器!", "提示"); return; } int ret = -1; //觸發(fā)示波器 zmcaux.ZAux_Trigger(g_handle); //驅動器回零 ret = zmcaux.ZAux_BusCmd_Datum(g_handle, (uint)MoveAxis, (uint)Drivers_DatumMode); if (ret != 0) { MessageBox.Show("驅動器回零啟動失敗!", "提示"); } else { MessageBox.Show("驅動器回零啟動成功!", "提示"); }}

  四、運行效果

  打開RTsys編程軟件,通過Local連接到控制器,同步上位機的軸等等參數(shù)。然后在工具欄→示波器界面,打開示波器觀察波形。

  選擇好數(shù)據(jù)源和編號,點擊啟動;在上位機界面點擊回零按鈕,回到RTsys軟件點擊手動觸發(fā),觀察對應回零模式的波形。

運動控制

  ⊙控制器回零:以模式13(軸以SPEED速度正向運行,碰到限位開關會反向查找原點。找到原點后以Creep速度反向爬行,直到離開原點)為例,抓取的圖形如下。

運動控制

  ⊙總線驅動器回零:查閱驅動器手冊,選擇驅動器支持的回零模式。

  這里以模式19為例,回零啟動時,原點信號為0,以回零高速(50units/s)正向回零運行;當原點信號為1時以回零低速Creep(20units/s)反向爬行;再次遇到下降沿將停機,回零完成。

運動控制

完整代碼獲取地址

運動控制

  本次,正運動技術EtherCAT驅動器回零與控制器回零:EtherCAT超高速實時運動控制卡XPCIE1032H上位機C#開發(fā)(九),就分享到這里。

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

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

標簽: 運動控制

點贊

分享到:

上一篇:應用案例 | PITTMAN Motors為...

下一篇:伺服電機和步進電機的工作狀...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.wangxinlc.cn)獨家所有。如需轉載請與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號