亚洲精华国产精华精华液网站,你懂的,娇生惯养4ph归寻(矜以),丰年经继拇中文3与其他教材比较

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > C#之Delta并聯機械手正逆解的建立和手動運動

C#之Delta并聯機械手正逆解的建立和手動運動

時間:2024-06-25 10:35:44來源:深圳市正運動技術有限公司

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

  ZMC406R-V2硬件介紹

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

正運動

  ZMC406R-V2支持6軸運動控制,最多可擴展至32軸,支持直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨等功能。

  ZMC406R-V2可以采用脫機的方式將編輯好的程序下載到控制器上,可利用觸摸屏示教的方式編輯想要運動的軌跡。也可以用PC API函數調用方式或者實時發送指令操作,在PC上位機C#,C++,Labview,Python等語言來開發Delta并聯機械手的應用。

正運動

  ZMC406R-V2支持6軸運動控制,可采用脈沖軸(帶編碼器反饋)或EtherCAT總線軸,通用IO包含24路輸入口和12路輸出口,模擬量AD/DA各兩路,EtherCAT最快125us的刷新周期。

  硬件接線參考

  1.通用輸入口接線參考圖

正運動

  2.通用輸出口接線參考圖

正運動

  C#語言進行Delta并聯機械手的開發

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

正運動

  2.選擇開發語言為“Visual C#”和.NET Framework 4以及Windows窗體應用程序。

正運動

  3. 找到廠家提供的光盤資料里面的C#函數庫,路徑如下(32位庫為例)。

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

正運動

  2)選擇“函數庫2.1”文件夾。

正運動

  3)選擇“Windows平臺”文件夾。

正運動

  4)根據需要選擇對應的函數庫,這里選擇32位庫。

正運動

  5)解壓C#壓縮包,里面有C#對應的函數庫。

正運動

  6)函數庫具體路徑如下。

正運動

  4. 將廠商提供的C#的庫文件以及相關文件復制到新建的項目中。

  1)將zmcaux.cs文件復制到新建的項目里面中。

正運動

  2)將zaux.dll和zmotion.dll文件放入bin\debug文件夾中。

正運動

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

正運動

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

正運動

  PC函數介紹

  1.PC函數手冊可在光盤資料查看,具體路徑如下。

正運動

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

正運動

  3.機械手模型正解的建立。

正運動

正運動

正運動

  4.機械手模型逆解的建立。

正運動

正運動

正運動

正運動

  5.機械手坐標系旋轉,用于得到用戶坐標系。

正運動

正運動

  1.軸方向要求

  使用正運動Delta并聯機械手模型,需要保證3個關節軸向下旋轉時為正向,末端旋轉軸逆時針旋轉為正(俯視)。

正運動

  2.結構參數(結構參數由機械手本體廠家提供)機械手的結構參數需要先寫進控制器的TABLE寄存器后,才可以調接口建立機械手的正逆解。

正運動

正運動

  3.原點定義A、各關節軸的連桿L1都處于水平位置時,認為是關節零點位置。(一般本體會提供定位銷,沒有提供的可以通過水平儀確保零點時L1處于水平位置)B、此時軸0和軸1連線方向為直角坐標系X方向,直角坐標系零點位于連桿L1水平面的中心。

正運動

  4.關節軸與虛擬軸關節軸是實際存在的電機軸,Delta有關節軸0電機、關節軸1電機、關節軸2電機和末端旋轉軸電機,這些關機軸脈沖當量的設置都需要設置成對應關節軸轉1度需要的脈沖數,如:(Units = 電機一圈脈沖數 * 減速比 / 360)。虛擬軸是虛擬出來的直角坐標系的X軸、Y軸、Z軸和一個旋轉軸RZ,其中X、Y、Z軸的脈沖當量推薦設置成1000,旋轉軸RZ的脈沖當量設置成旋轉軸轉1度需要的脈沖數。

  相關例程演示

  1.鏈接控制器獲取句柄,上位機操作通過獲取到的句柄來操作控制器。

  ·

  //連接控制器,控制器默認IP是192.168.0.11ZauxErr = zmcaux.ZAux_OpenEth("192.168.0.11", out g_Handle);if (0 != ZauxErr){AlmInifFile.Write(DateTime.Now.ToString("F"), "ZAux_OpenEth執行錯誤,錯誤碼:" + ZauxErr.ToString(), "錯誤碼信息");}

  2.Delta并聯機械手參數設置。

正運動

正運動

正運動

  3.機械手正逆解的建立。

  ·

  /************************************************************************************'任務編號:無'函數功能:機械手的正逆解的建立 'Input:Mode=0斷開機械手;1建立機械手的逆解;2建立機械手的正解'Output:無 '返回值:0:表示機械手建立成功; -1:表示機械手建立失敗'備注:1、控制器型號帶R后綴的才支持該機械手模型' 2、正解狀態時,虛擬軸的MTYPE=34' 3、逆解狀態時,關節軸的MTYPE=33' 4、機械手處于逆解狀態時不要斷使能,不然操作不當容易飛車。**************************************************************************************/public int ScaraEstab(int Mode){ //更新Ui界面的Delta參數 ScaraParaWindows.DeltaParaSave(); //設置機械參數到控制器 SetControPara(); //保存Delta參數到Ini文件 WriteIniFile(); //清除控制器報警 ZauxErr = zmcaux.ZAux_Direct_Single_Datum(g_Handle, 0, 0); //更新軸列表 建立正逆解的軸順序是 J1、J2、Ju、Jz(關節軸) Vx、Vy、Vr、Vz(虛擬軸) int[] mJScaraAxisList = new int[4]; //關節軸列表 int[] mVScaraAxisList = new int[4]; //虛擬軸列表 for (int i = 0; i < 4; i++) { mJScaraAxisList[i] = gDeltaAxisList[i]; mVScaraAxisList[i] = gVAxisList[i]; } //判讀機械手參數是否設置正確 if ((DeltaR <= 0) || (Deltar <= 0) || (DeltaL1 <= 0) || (DeltaL2 <= 0)) { MessageBox.Show("Delta機械手參數有問題請確認!"); return -1; } //機械手的結構參數要先寫進控制器的TABLE寄存器后,才可以調接口建立機械手的正逆解 //更新機械手參數到控制器的TABLE寄存器 float[] ScaraParaList = new float[11] { DeltaR, Deltar, DeltaL1, DeltaL2, gMotorPulNum[0] * gReducRatio[0], gMotorPulNum[1] * gReducRatio[1], gMotorPulNum[2] * gReducRatio[2], 0, 0, 0, gMotorPulNum[3] * gReducRatio[3] }; ZauxErr = zmcaux.ZAux_Direct_SetTable(g_Handle, TableStaraId, 11, ScaraParaList); if (0 != ZauxErr) { return -1; } if ((1 == Mode) && (0 == ZauxErr)) //建立機械手的逆解(機械手參數更新成功的情況下) { //建立Scara逆解 ZauxErr = zmcaux.ZAux_Direct_Connframe(g_Handle, 4, mJScaraAxisList, 14, TableStaraId, 4, mVScaraAxisList); if (0 != ZauxErr) { ProceWindows.WriteLog("切換為逆解模式失敗"); return -1; } ProceWindows.WriteLog("切換為逆解模式"); } else if ((2 == Mode) && (0 == ZauxErr)) //建立機械手的正解(機械手參數更新成功的情況下) { //建立Scara正解 ZauxErr = zmcaux.ZAux_Direct_Connreframe(g_Handle, 4, mVScaraAxisList, 14, TableStaraId, 4, mJScaraAxisList); if (0 != ZauxErr) { ProceWindows.WriteLog("切換為正解模式失敗"); return -1; } ProceWindows.WriteLog("切換為正解模式"); } } return 0;}

正運動

正運動

  4.手動運動界面

       下圖是例程手動運動的界面。“關節坐標系手動控制”的手動按鈕是進行關節軸的手動運動的按下時會自動建立機械手的正解。“直角坐標系手動控制”的手動按鈕是進行虛擬軸XYZ的手動運動的按下時會自動建立機械手的逆解。當手動速度降低到一定值時會自動切換到寸動模式。

正運動

正運動

  5.關節軸手動運動  /************************************************************************************'任務編號: 無'函數功能: 關節軸負向手動運動,負向點動按鈕按下時調用'Input: 無'Output: 無 '返回值: 無'備注: 無 **************************************************************************************/private void JHandDirRev0_MouseDown(object sender, MouseEventArgs e){ //判斷是否上鎖,上鎖才可以運動 int EnableState = 0; cszmcaux.zmcaux.ZAux_Direct_GetAxisEnable(MainWindows.g_Handle, MainWindows.gDeltaAxisList[0], ref EnableState); //如果使能上了 if ((1 == EnableState) || (MainWindows.IsDebug)) { int Vmtype = 0;//虛擬軸MTYPE cszmcaux.zmcaux.ZAux_Direct_GetMtype(MainWindows.g_Handle, MainWindows.gVAxisList[0], ref Vmtype); //如果不是正解狀態 if (Vmtype != 34) { //建立機械手的正解 if (0 != MainWindows.ScaraEstab(2)) { //機械手沒有成功建立 return; } } //哪個按鈕按下 int Id = 0; for (int i = 0; i < 4; i++) { if (((Button)sender).Name == ("JHandDirRev" + i)) { Id = i; } } int TempAxis = 0; TempAxis = MainWindows.gDeltaAxisList[Id]; //手動速度小于5是寸動模式 if (5 <= MainWindows.HnadSpeedPerc) { //設置點動速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100); //發送負向運動指令 cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, -1); } else { //設置寸動速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10); //發送寸動運動指令 cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, -1 * MainWindows.HnadSpeedPerc); } }}/************************************************************************************'任務編號: 無'函數功能: 關節軸正向手動運動,正向點動按鈕按下時調用'Input: 無'Output: 無 '返回值: 無'備注: 無 **************************************************************************************/private void JHandDirFwd0_MouseDown(object sender, MouseEventArgs e){ //判斷是否上鎖,上鎖才可以運動 int EnableState = 0; cszmcaux.zmcaux.ZAux_Direct_GetAxisEnable(MainWindows.g_Handle, MainWindows.gDeltaAxisList[0], ref EnableState); //如果使能上了 if ((1 == EnableState) || (MainWindows.IsDebug)) { int Vmtype = 0;//虛擬軸MTYPE cszmcaux.zmcaux.ZAux_Direct_GetMtype(MainWindows.g_Handle, MainWindows.gVAxisList[0], ref Vmtype); //如果不是正解狀態 if (Vmtype != 34) { //建立機械手的正解 if (0 != MainWindows.ScaraEstab(2)) { //機械手沒有成功建立 return; } } //哪個按鈕按下 int Id = 0; for (int i = 0; i < 4; i++) { if (((Button)sender).Name == ("JHandDirFwd" + i)) { Id = i; } } int TempAxis = 0; TempAxis = MainWindows.gDeltaAxisList[Id]; //手動速度小于5是寸動模式 if (5 <= MainWindows.HnadSpeedPerc) { //設置點動速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100); //發送正向運動指令 cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, 1); } else { //設置寸動速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10); //發送寸動運動指令 cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, 1 * MainWindows.HnadSpeedPerc); } }}/************************************************************************************'任務編號: 無'函數功能: 關節軸停止手動運動,點動按鈕松開時調用。'Input: 無'Output: 無 '返回值: 無'備注: 無 **************************************************************************************/private void JHandDirRev0_MouseUp(object sender, MouseEventArgs e){ //哪個按鈕按下 int Id = 0; for (int i = 0; i < 4; i++) { if (((Button)sender).Name == ("JHandDirRev" + i)) { Id = i; } } int TempAxis = 0; TempAxis = MainWindows.gDeltaAxisList[Id]; //手動速度小于5是寸動模式 if (5 <= MainWindows.HnadSpeedPerc) { MainWindows.ZauxErr = cszmcaux.zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, TempAxis, 2); }}

  關節軸手動運動演示

  6.虛擬軸手動運動

  ·

  /************************************************************************************'任務編號:無'函數功能:虛擬軸負向手動運動,負向點動按鈕按下時調用'Input:無'Output:無 '返回值:無'備注:無 **************************************************************************************/private void VHandDirRev0_MouseDown(object sender, MouseEventArgs e){ //判斷是否上鎖,上鎖才可以運動 int EnableState = 0; cszmcaux.zmcaux.ZAux_Direct_GetAxisEnable(MainWindows.g_Handle, MainWindows.gDeltaAxisList[0], ref EnableState); //如果使能上了 if ((1 == EnableState) || (MainWindows.IsDebug)) { int Jmtype = 0;//關節軸Mtype cszmcaux.zmcaux.ZAux_Direct_GetMtype(MainWindows.g_Handle, gDeltaAxisList[0], ref Jmtype); //如果不是逆解狀態 if (Jmtype != 33) { //建立機械手的逆解 if (0 != MainWindows.ScaraEstab(1)) { //機械手沒有成功建立 return; } } //哪個按鈕按下 int Id = 0; for (int i = 0; i < 5; i++) { if (((Button)sender).Name == ("VHandDirRev" + i)) { Id = i; } } int TempAxis = 0; //更新當前機械手狀態 TempAxis = MainWindows.gVAxisList[Id]; //手動速度小于5是寸動模式 if (5 <= MainWindows.HnadSpeedPerc) { //設置點動速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100); //發送負向運動指令 cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, -1); } else { //設置寸動速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10); //發送寸動運動指令 cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, -1 * MainWindows.HnadSpeedPerc); } }}/************************************************************************************'任務編號:無'函數功能:虛擬軸負向手動運動,負向點動按鈕按下時調用'Input:無'Output:無 '返回值:無'備注:無 **************************************************************************************/private void VHandDirFwd0_MouseDown(object sender, MouseEventArgs e){ //判斷是否上鎖,上鎖才可以運動 int EnableState = 0; cszmcaux.zmcaux.ZAux_Direct_GetAxisEnable(MainWindows.g_Handle, MainWindows.gDeltaAxisList[0], ref EnableState); //如果使能上了 if ((1 == EnableState) || (MainWindows.IsDebug)) { int Jmtype = 0;//關節軸Mtype cszmcaux.zmcaux.ZAux_Direct_GetMtype(MainWindows.g_Handle, gDeltaAxisList[0], ref Jmtype); //如果不是逆解狀態 if (Jmtype != 33) { //建立機械手的逆解 if (0 != MainWindows.ScaraEstab(1)) { //機械手沒有成功建立 return; } } //哪個按鈕按下 int Id = 0; for (int i = 0; i < 5; i++) { if (((Button)sender).Name == ("VHandDirFwd" + i)) { Id = i; } } int TempAxis = 0; //更新當前機械手狀態 TempAxis = MainWindows.gVAxisList[Id]; //手動速度小于5是寸動模式 if (5 <= MainWindows.HnadSpeedPerc) { //設置點動速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100); //發送正向運動指令 cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, 1); } else { //設置寸動速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10); //發送寸動運動指令 cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, 1 * MainWindows.HnadSpeedPerc); } }}/************************************************************************************'任務編號:無'函數功能:虛擬軸停止軸運動,點動按鈕松開時調用'Input:無'Output:無 '返回值:無'備注:無 **************************************************************************************///停止運動private void VHandDirRev0_MouseUp(object sender, MouseEventArgs e){ //哪個按鈕按下 int Id = 0; for (int i = 0; i < 5; i++) { if (((Button)sender).Name == ("VHandDirRev" + i)) { Id = i; } } int TempAxis = 0; TempAxis = MainWindows.gVAxisList[Id]; //手動速度小于5是寸動模式 if (5 <= MainWindows.HnadSpeedPerc) { cszmcaux.zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, TempAxis, 2); }}

  虛擬軸手動運動演示

  7.機械手仿真工具的使用打開【ZRobotView】軟件,點擊【連接】輸入控制器的IP(默認IP:192.168.0.11),點擊連接,待連接成功后點擊切換即可3D仿真機械手的運動情況。

正運動

正運動

  本次,正運動技術C#之Delta并聯機械手正逆解的建立和手動運動,就分享到這里。

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

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

標簽: 運動控制正運動

點贊

分享到:

上一篇: 變頻器的參數設定步驟解析

下一篇:伺服電機轉速不穩定的因素

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

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

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

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

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

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

主站蜘蛛池模板: 双流县| 临高县| 平昌县| 林口县| 贡觉县| 商洛市| 霍城县| 洛川县| 叙永县| 河西区| 北流市| 北海市| 柳江县| 黑龙江省| 湘西| 叶城县| 普陀区| 开远市| 黎平县| 菏泽市| 广灵县| 墨玉县| 新河县| 桑日县| 岳普湖县| 林甸县| 自贡市| 德清县| 遂昌县| 时尚| 孝感市| 安阳市| 营口市| 沛县| 临猗县| 孟州市| 鸡西市| 屯门区| 宝清县| 泰兴市| 黄浦区|