技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > C#之Delta并聯(lián)機(jī)械手正逆解的建立和手動(dòng)運(yùn)動(dòng)

C#之Delta并聯(lián)機(jī)械手正逆解的建立和手動(dòng)運(yùn)動(dòng)

時(shí)間:2024-06-25 10:35:44來源:深圳市正運(yùn)動(dòng)技術(shù)有限公司

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

  ZMC406R-V2硬件介紹

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

正運(yùn)動(dòng)

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

  ZMC406R-V2可以采用脫機(jī)的方式將編輯好的程序下載到控制器上,可利用觸摸屏示教的方式編輯想要運(yùn)動(dòng)的軌跡。也可以用PC API函數(shù)調(diào)用方式或者實(shí)時(shí)發(fā)送指令操作,在PC上位機(jī)C#,C++,Labview,Python等語言來開發(fā)Delta并聯(lián)機(jī)械手的應(yīng)用。

正運(yùn)動(dòng)

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

  硬件接線參考

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

正運(yùn)動(dòng)

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

正運(yùn)動(dòng)

  C#語言進(jìn)行Delta并聯(lián)機(jī)械手的開發(fā)

  1.在VS2010菜單“文件”→“新建”→“項(xiàng)目”,啟動(dòng)創(chuàng)建項(xiàng)目向?qū)А?/p>

正運(yùn)動(dòng)

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

正運(yùn)動(dòng)

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

  1)進(jìn)入廠商提供的光盤資料找到“04PC函數(shù)”文件夾,并點(diǎn)擊進(jìn)入。

正運(yùn)動(dòng)

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

正運(yùn)動(dòng)

  3)選擇“Windows平臺(tái)”文件夾。

正運(yùn)動(dòng)

  4)根據(jù)需要選擇對(duì)應(yīng)的函數(shù)庫,這里選擇32位庫。

正運(yùn)動(dòng)

  5)解壓C#壓縮包,里面有C#對(duì)應(yīng)的函數(shù)庫。

正運(yùn)動(dòng)

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

正運(yùn)動(dòng)

  4. 將廠商提供的C#的庫文件以及相關(guān)文件復(fù)制到新建的項(xiàng)目中。

  1)將zmcaux.cs文件復(fù)制到新建的項(xiàng)目里面中。

正運(yùn)動(dòng)

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

正運(yùn)動(dòng)

  5.用vs打開新建的項(xiàng)目文件,在右邊的解決方案資源管理器中點(diǎn)擊顯示所有文件,然后鼠標(biāo)右擊zmcaux.cs文件,點(diǎn)擊包括在項(xiàng)目中。

正運(yùn)動(dòng)

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

正運(yùn)動(dòng)

  PC函數(shù)介紹

  1.PC函數(shù)手冊(cè)可在光盤資料查看,具體路徑如下。

正運(yùn)動(dòng)

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

正運(yùn)動(dòng)

  3.機(jī)械手模型正解的建立。

正運(yùn)動(dòng)

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  4.機(jī)械手模型逆解的建立。

正運(yùn)動(dòng)

正運(yùn)動(dòng)

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  5.機(jī)械手坐標(biāo)系旋轉(zhuǎn),用于得到用戶坐標(biāo)系。

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  1.軸方向要求

  使用正運(yùn)動(dòng)Delta并聯(lián)機(jī)械手模型,需要保證3個(gè)關(guān)節(jié)軸向下旋轉(zhuǎn)時(shí)為正向,末端旋轉(zhuǎn)軸逆時(shí)針旋轉(zhuǎn)為正(俯視)。

正運(yùn)動(dòng)

  2.結(jié)構(gòu)參數(shù)(結(jié)構(gòu)參數(shù)由機(jī)械手本體廠家提供)機(jī)械手的結(jié)構(gòu)參數(shù)需要先寫進(jìn)控制器的TABLE寄存器后,才可以調(diào)接口建立機(jī)械手的正逆解。

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  3.原點(diǎn)定義A、各關(guān)節(jié)軸的連桿L1都處于水平位置時(shí),認(rèn)為是關(guān)節(jié)零點(diǎn)位置。(一般本體會(huì)提供定位銷,沒有提供的可以通過水平儀確保零點(diǎn)時(shí)L1處于水平位置)B、此時(shí)軸0和軸1連線方向?yàn)橹苯亲鴺?biāo)系X方向,直角坐標(biāo)系零點(diǎn)位于連桿L1水平面的中心。

正運(yùn)動(dòng)

  4.關(guān)節(jié)軸與虛擬軸關(guān)節(jié)軸是實(shí)際存在的電機(jī)軸,Delta有關(guān)節(jié)軸0電機(jī)、關(guān)節(jié)軸1電機(jī)、關(guān)節(jié)軸2電機(jī)和末端旋轉(zhuǎn)軸電機(jī),這些關(guān)機(jī)軸脈沖當(dāng)量的設(shè)置都需要設(shè)置成對(duì)應(yīng)關(guān)節(jié)軸轉(zhuǎn)1度需要的脈沖數(shù),如:(Units = 電機(jī)一圈脈沖數(shù) * 減速比 / 360)。虛擬軸是虛擬出來的直角坐標(biāo)系的X軸、Y軸、Z軸和一個(gè)旋轉(zhuǎn)軸RZ,其中X、Y、Z軸的脈沖當(dāng)量推薦設(shè)置成1000,旋轉(zhuǎn)軸RZ的脈沖當(dāng)量設(shè)置成旋轉(zhuǎn)軸轉(zhuǎn)1度需要的脈沖數(shù)。

  相關(guān)例程演示

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

  ·

  //連接控制器,控制器默認(rèn)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執(zhí)行錯(cuò)誤,錯(cuò)誤碼:" + ZauxErr.ToString(), "錯(cuò)誤碼信息");}

  2.Delta并聯(lián)機(jī)械手參數(shù)設(shè)置。

正運(yùn)動(dòng)

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  3.機(jī)械手正逆解的建立。

  ·

  /************************************************************************************'任務(wù)編號(hào):無'函數(shù)功能:機(jī)械手的正逆解的建立 'Input:Mode=0斷開機(jī)械手;1建立機(jī)械手的逆解;2建立機(jī)械手的正解'Output:無 '返回值:0:表示機(jī)械手建立成功; -1:表示機(jī)械手建立失敗'備注:1、控制器型號(hào)帶R后綴的才支持該機(jī)械手模型' 2、正解狀態(tài)時(shí),虛擬軸的MTYPE=34' 3、逆解狀態(tài)時(shí),關(guān)節(jié)軸的MTYPE=33' 4、機(jī)械手處于逆解狀態(tài)時(shí)不要斷使能,不然操作不當(dāng)容易飛車。**************************************************************************************/public int ScaraEstab(int Mode){ //更新Ui界面的Delta參數(shù) ScaraParaWindows.DeltaParaSave(); //設(shè)置機(jī)械參數(shù)到控制器 SetControPara(); //保存Delta參數(shù)到Ini文件 WriteIniFile(); //清除控制器報(bào)警 ZauxErr = zmcaux.ZAux_Direct_Single_Datum(g_Handle, 0, 0); //更新軸列表 建立正逆解的軸順序是 J1、J2、Ju、Jz(關(guān)節(jié)軸) Vx、Vy、Vr、Vz(虛擬軸) int[] mJScaraAxisList = new int[4]; //關(guān)節(jié)軸列表 int[] mVScaraAxisList = new int[4]; //虛擬軸列表 for (int i = 0; i < 4; i++) { mJScaraAxisList[i] = gDeltaAxisList[i]; mVScaraAxisList[i] = gVAxisList[i]; } //判讀機(jī)械手參數(shù)是否設(shè)置正確 if ((DeltaR <= 0) || (Deltar <= 0) || (DeltaL1 <= 0) || (DeltaL2 <= 0)) { MessageBox.Show("Delta機(jī)械手參數(shù)有問題請(qǐng)確認(rèn)!"); return -1; } //機(jī)械手的結(jié)構(gòu)參數(shù)要先寫進(jìn)控制器的TABLE寄存器后,才可以調(diào)接口建立機(jī)械手的正逆解 //更新機(jī)械手參數(shù)到控制器的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)) //建立機(jī)械手的逆解(機(jī)械手參數(shù)更新成功的情況下) { //建立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)) //建立機(jī)械手的正解(機(jī)械手參數(shù)更新成功的情況下) { //建立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;}

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  4.手動(dòng)運(yùn)動(dòng)界面

       下圖是例程手動(dòng)運(yùn)動(dòng)的界面!瓣P(guān)節(jié)坐標(biāo)系手動(dòng)控制”的手動(dòng)按鈕是進(jìn)行關(guān)節(jié)軸的手動(dòng)運(yùn)動(dòng)的按下時(shí)會(huì)自動(dòng)建立機(jī)械手的正解!爸苯亲鴺(biāo)系手動(dòng)控制”的手動(dòng)按鈕是進(jìn)行虛擬軸XYZ的手動(dòng)運(yùn)動(dòng)的按下時(shí)會(huì)自動(dòng)建立機(jī)械手的逆解。當(dāng)手動(dòng)速度降低到一定值時(shí)會(huì)自動(dòng)切換到寸動(dòng)模式。

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  5.關(guān)節(jié)軸手動(dòng)運(yùn)動(dòng)  /************************************************************************************'任務(wù)編號(hào): 無'函數(shù)功能: 關(guān)節(jié)軸負(fù)向手動(dòng)運(yùn)動(dòng),負(fù)向點(diǎn)動(dòng)按鈕按下時(shí)調(diào)用'Input: 無'Output: 無 '返回值: 無'備注: 無 **************************************************************************************/private void JHandDirRev0_MouseDown(object sender, MouseEventArgs e){ //判斷是否上鎖,上鎖才可以運(yùn)動(dòng) 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); //如果不是正解狀態(tài) if (Vmtype != 34) { //建立機(jī)械手的正解 if (0 != MainWindows.ScaraEstab(2)) { //機(jī)械手沒有成功建立 return; } } //哪個(gè)按鈕按下 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]; //手動(dòng)速度小于5是寸動(dòng)模式 if (5 <= MainWindows.HnadSpeedPerc) { //設(shè)置點(diǎn)動(dòng)速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100); //發(fā)送負(fù)向運(yùn)動(dòng)指令 cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, -1); } else { //設(shè)置寸動(dòng)速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10); //發(fā)送寸動(dòng)運(yùn)動(dòng)指令 cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, -1 * MainWindows.HnadSpeedPerc); } }}/************************************************************************************'任務(wù)編號(hào): 無'函數(shù)功能: 關(guān)節(jié)軸正向手動(dòng)運(yùn)動(dòng),正向點(diǎn)動(dòng)按鈕按下時(shí)調(diào)用'Input: 無'Output: 無 '返回值: 無'備注: 無 **************************************************************************************/private void JHandDirFwd0_MouseDown(object sender, MouseEventArgs e){ //判斷是否上鎖,上鎖才可以運(yùn)動(dòng) 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); //如果不是正解狀態(tài) if (Vmtype != 34) { //建立機(jī)械手的正解 if (0 != MainWindows.ScaraEstab(2)) { //機(jī)械手沒有成功建立 return; } } //哪個(gè)按鈕按下 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]; //手動(dòng)速度小于5是寸動(dòng)模式 if (5 <= MainWindows.HnadSpeedPerc) { //設(shè)置點(diǎn)動(dòng)速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.HnadSpeedPerc * MainWindows.gAxisHandSpeed[Id] / 100); //發(fā)送正向運(yùn)動(dòng)指令 cszmcaux.zmcaux.ZAux_Direct_Single_Vmove(MainWindows.g_Handle, TempAxis, 1); } else { //設(shè)置寸動(dòng)速度 cszmcaux.zmcaux.ZAux_Direct_SetSpeed(MainWindows.g_Handle, TempAxis, MainWindows.gAxisHandSpeed[Id] / 10); //發(fā)送寸動(dòng)運(yùn)動(dòng)指令 cszmcaux.zmcaux.ZAux_Direct_Single_Move(MainWindows.g_Handle, TempAxis, 1 * MainWindows.HnadSpeedPerc); } }}/************************************************************************************'任務(wù)編號(hào): 無'函數(shù)功能: 關(guān)節(jié)軸停止手動(dòng)運(yùn)動(dòng),點(diǎn)動(dòng)按鈕松開時(shí)調(diào)用。'Input: 無'Output: 無 '返回值: 無'備注: 無 **************************************************************************************/private void JHandDirRev0_MouseUp(object sender, MouseEventArgs e){ //哪個(gè)按鈕按下 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]; //手動(dòng)速度小于5是寸動(dòng)模式 if (5 <= MainWindows.HnadSpeedPerc) { MainWindows.ZauxErr = cszmcaux.zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, TempAxis, 2); }}

  關(guān)節(jié)軸手動(dòng)運(yùn)動(dòng)演示

  6.虛擬軸手動(dòng)運(yùn)動(dòng)

  ·

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

  虛擬軸手動(dòng)運(yùn)動(dòng)演示

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

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  本次,正運(yùn)動(dòng)技術(shù)C#之Delta并聯(lián)機(jī)械手正逆解的建立和手動(dòng)運(yùn)動(dòng),就分享到這里。

  更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào),需要相關(guān)開發(fā)環(huán)境與例程代碼,請(qǐng)咨詢正運(yùn)動(dòng)技術(shù)銷售工程師:400-089-8936。

  本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來源。

標(biāo)簽: 運(yùn)動(dòng)控制正運(yùn)動(dòng)

點(diǎn)贊

分享到:

上一篇: 變頻器的參數(shù)設(shè)定步驟解析

下一篇:伺服電機(jī)轉(zhuǎn)速不穩(wěn)定的因素

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

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

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

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

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

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