0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C#之Delta并聯(lián)機(jī)械手的視覺(jué)同步分揀

正運(yùn)動(dòng)技術(shù) ? 來(lái)源:正運(yùn)動(dòng)技術(shù) ? 作者:正運(yùn)動(dòng)技術(shù) ? 2024-07-03 09:52 ? 次閱讀

本文導(dǎo)讀

前面兩節(jié)課程我們介紹了怎么建立Delta并聯(lián)機(jī)械手的正逆解以及如何通過(guò)視覺(jué)進(jìn)行匹配定位。本節(jié)課程給大家分享如何通過(guò)C#語(yǔ)言開(kāi)發(fā)正運(yùn)動(dòng)Delta并聯(lián)機(jī)械手傳送帶同步的視覺(jué)分揀。

VPLC711硬件介紹

VPLC711是正運(yùn)動(dòng)推出的一款基于x86平臺(tái)和Windows操作系統(tǒng)的高性能機(jī)器視覺(jué)EtherCAT運(yùn)動(dòng)控制器,具備強(qiáng)大的運(yùn)算能力和靈活性。它具有出色的實(shí)時(shí)性能和多路高速硬件輸入與多路高速PSO輸出,能夠精準(zhǔn)控制多軸同步運(yùn)動(dòng),并與外部設(shè)備實(shí)現(xiàn)多協(xié)議的高速通信

wKgZomZ7vT-AQUGfAATEZEEcnQY989.png

VPLC711支持多種硬件接口和通信協(xié)議,方便與其他設(shè)備的連接和集成。除此之外,VPLC711還具備視覺(jué)處理功能,能夠?qū)崟r(shí)處理圖像數(shù)據(jù),實(shí)現(xiàn)視覺(jué)檢測(cè)、測(cè)量和定位等應(yīng)用。

wKgaomSuBgKAfwvPAAP2e_t0m3I135.png

VPLC711內(nèi)置Windows運(yùn)動(dòng)控制實(shí)時(shí)內(nèi)核MotionRT7,形成一種開(kāi)放式IPC形態(tài)實(shí)時(shí)軟控制器/軟PLC,為用戶提供靈活集成的運(yùn)動(dòng)控制+視覺(jué)一體化解決方案。

wKgaomZ7vU2AfKbMAAGN_SO6-4Q279.png

VPLC711硬件參數(shù)

1.采用x86高性能CPU,EtherCAT可支持1ms 64軸同步運(yùn)行;

2.板載RS232,RS485EtherNet*5,EtherCAT,USB3.0*4硬件接口;

3.板載20DI,其中4個(gè)高速色標(biāo)鎖存,2組高速單端編碼器;

4.板載20DO,其中4個(gè)高速單端脈沖軸,4組高速PWM;

5.支持DVI-D,HDMI顯示,支持雙網(wǎng)口不同IP設(shè)置。

想要了解更多關(guān)于VPLC711的詳情介紹,可以點(diǎn)擊“x86平臺(tái)實(shí)時(shí)Windows機(jī)器視覺(jué)EtherCAT運(yùn)動(dòng)控制器VPLC711”查看。

一、C#語(yǔ)言進(jìn)行Delta并聯(lián)械手的開(kāi)發(fā)之運(yùn)動(dòng)庫(kù)和視覺(jué)庫(kù)的添加

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

wKgZomZ7vX2AJ3R_AABq6AhfRSo071.png

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

wKgaomZ7vYGAV_xXAAFwzZf56Bw151.png

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

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

wKgaomZ7vYaAaXB0AAHXfDSiyik568.png

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

wKgaomZ7vYmAHa9bAAGbBrVuQZ8047.png

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

wKgZomZ7vYyAd9-lAAEuaVsobUk562.png

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

wKgaomZ7vZGAU8-OAAEZuUmX8mk399.png

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

wKgZomZ7vZaAJOYOAAGiJAn1QZI072.png

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

wKgZomZ7vZqAYOQOAAGoEa8S6tE832.png

4.將廠商提供的C#庫(kù)文件以及相關(guān)文件復(fù)制到新建的項(xiàng)目中(注意這里面的PC函數(shù)庫(kù)默認(rèn)提供的是運(yùn)動(dòng)庫(kù),如果使用視覺(jué)功能還需要獲取視覺(jué)庫(kù),視覺(jué)庫(kù)可以找廠商的相關(guān)銷售或技術(shù)人員獲?。?/p>

1)將Zmcaux.cs(運(yùn)動(dòng)庫(kù))和Zvision.cs(視覺(jué)庫(kù))文件復(fù)制到新建的項(xiàng)目里面中。

wKgaomZ7vZ6ANJo5AACGKDpmeyo890.png

2)將zauxdll.dll、zmotion.dll和zvision.dll文件放入bindebug文件夾中。

wKgaomZ7vaGAL_VAAABeNxxojLY082.png

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

wKgZomZ7vaSAYKQmAAC_x1ZsREI927.png

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

wKgZomZ7vaeAQDs-AADXCWgRD38104.png

二、PC函數(shù)介紹

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

wKgZomaErPGAUrHHAABJo7YSs_s073.png

2.皮帶同步指令。

wKgZomaErPeAEw-gAADQ9hb7hBk143.png

三、Basic腳本快速驗(yàn)證指令用法

1.編寫(xiě)B(tài)asic測(cè)試腳本進(jìn)行MoveSync指令的用法測(cè)試。

'**************************************************************************************
'背景:假設(shè)有一對(duì)對(duì)射型的光電傳感器固定在流水線的兩端,來(lái)實(shí)時(shí)檢測(cè)流水線上的產(chǎn)品到位情況
'MOVESYNC指令參數(shù)填寫(xiě)說(shuō)明:
'syncposition:物體到感應(yīng)點(diǎn)時(shí)皮帶軸的位置,需要通過(guò)編碼器鎖存把產(chǎn)品的對(duì)應(yīng)位置記錄下來(lái)。
'pos1:跟隨軸1原點(diǎn)到光電傳感器感應(yīng)點(diǎn)的位置,對(duì)于每個(gè)產(chǎn)品都是固定的。
'**************************************************************************************
GLOBAL CONST BeltAxis=4  '皮帶軸是軸4
GLOBAL CONST FollowAxis1=0  '跟隨軸1是軸0
GLOBAL CONST InducPos1=30  '跟隨軸1原點(diǎn)到光電傳感器感應(yīng)點(diǎn)的位置
GLOBAL CONST StandbyPos1=50'跟隨軸1的待機(jī)位
GLOBAL CONST EmptyPos1=400  '跟隨軸1的放料位
'停止所有軸
RAPIDSTOP(2)
WAIT IDLE     
'初始化相關(guān)軸的軸參數(shù)
BASE(FollowAxis1, BeltAxis)
ATYPE = 1,1
UNITS = 1000,1000
SPEED = 50,100
DPOS = 0,0
'觸發(fā)示波器采集波形
TRIGGER
DELAY(1000)
'跟隨軸先運(yùn)動(dòng)到待機(jī)位
BASE(FollowAxis1)
MOVEABS(StandbyPos1)
'皮帶軸開(kāi)始運(yùn)動(dòng)
VMOVE(1)  AXIS(BeltAxis)
'假設(shè)皮帶運(yùn)動(dòng)到200的位置時(shí),有一個(gè)產(chǎn)品被檢測(cè)到
BASE(FollowAxis1)
Wait UNTIL MPOS(BeltAxis)> 200
MOVESYNC(0, 2000, 200, BeltAxis, InducPos1) '跟隨軸加速同步段該指令執(zhí)行完后將同步上產(chǎn)品
MOVE_OP(0, ON)                               '同步上后打開(kāi)真空吸          
MOVESYNC(0, 1000, 200, BeltAxis, InducPos1)  '繼續(xù)同步1s
MOVESYNC(-1, 0, 0, -1, EmptyPos1)            '走到放料位置
MOVE_OP(0, OFF)                              '到放料位后關(guān)閉真空吸  

2.通過(guò)RTSys軟件的示波器觀察波形,分析同步過(guò)程。

wKgZomaErS-AMP_DAAPz5iU7f2g921.pngwKgaomaErTaAU9t9AABQp_3mM7U314.png

根據(jù)示波器的數(shù)據(jù)分析

1、產(chǎn)品剛剛被檢測(cè)到時(shí),皮帶的位置是200,跟隨軸的位置是50。

2、跟隨軸追上產(chǎn)品,并保持速度和皮帶軸同步時(shí)皮帶的位置是400,跟隨軸1的位置是230。

3、由1和2可知,產(chǎn)品在同步過(guò)程中前進(jìn)了200(400-200)。

4、因?yàn)楦S軸1原點(diǎn)到光電傳感器感應(yīng)點(diǎn)的位置InducPos1我們給的數(shù)據(jù)是30,所以在跟隨軸1和皮帶平行的情況下,皮帶帶著產(chǎn)品往前跑了200后,此時(shí)此刻跟隨軸1原點(diǎn)到光產(chǎn)品的實(shí)際距離是230(200+30)。

5、那么第4點(diǎn)計(jì)算的結(jié)果和第2的同步完成后跟隨軸1的實(shí)際位置是一致的,所以流水線同步指令測(cè)試正常。

四、C#例程建設(shè)之視覺(jué)流水線同步分揀

1.皮帶同步指令關(guān)鍵參數(shù)詳細(xì)介紹。

ZAux_Direct_MoveSync(ZMC_HANDLE handle,float imode,int synctime,float syncposition,int syncaxis,int imaxaxises,int *piAxislist,float *pfDisancelist).

(1)參數(shù)imode:

imode = 0+angle,表示同步模式,如果皮帶和X軸平行,填0即可。

imode = -1,表示結(jié)束同步模式,可運(yùn)動(dòng)到指定的絕對(duì)位置,一般同步上抓取完物料后運(yùn)動(dòng)到放料位使用。

(2)參數(shù)synctime: 同步時(shí)間,ms單位.運(yùn)動(dòng)在指定時(shí)間內(nèi)完成,完成時(shí)軸跟皮帶軸上物體保持速度一致。0表示根據(jù)運(yùn)動(dòng)軸的速度加速度來(lái)估計(jì)同步時(shí)間。

(3)參數(shù)syncposition: 視覺(jué)或傳感器識(shí)別到皮帶是的產(chǎn)品時(shí),皮帶此時(shí)此刻的位置信息MPOS。

(4)參數(shù)pfDisancelist:

如果是視覺(jué)定位產(chǎn)品時(shí),這個(gè)參數(shù)直接填視覺(jué)識(shí)別到產(chǎn)品時(shí)產(chǎn)品的世界坐標(biāo)。

如果用光電傳感器檢測(cè)產(chǎn)品時(shí),這個(gè)參數(shù)是固定的,在傳感器剛剛好感應(yīng)到產(chǎn)品時(shí),產(chǎn)品當(dāng)前位置的絕對(duì)坐標(biāo)??梢栽诖藭r(shí)此刻手動(dòng)運(yùn)動(dòng)從軸來(lái)定位到產(chǎn)品處來(lái)獲取位置信息。

2.視覺(jué)流水線同步分揀流程圖。

wKgaomaErVqAARASAAJhxaSRpC0551.png

(1)視覺(jué)匹配定位代碼詳情。

/************************************************************************************
'任務(wù)編號(hào):     無(wú)
'函數(shù)功能:     視覺(jué)定位產(chǎn)品
'Input:        無(wú)
'Output:       無(wú) 
'返回值:       子線程---進(jìn)行視覺(jué)定位             
**************************************************************************************/
public void RunSubTaskVisua()
{
   int TempArrid = 0;
   float TempVar = 0;
   WriteLog("視覺(jué)功能正常啟動(dòng)");
   while (SysRunFlag > 0)
   {
       //暫停按鈕沒(méi)有按下時(shí)
       while (SysRunFlag == 1) 
       {
           //采集圖像
           VisuaOper.CameAcquisition();
           //進(jìn)行模板匹配
           RTDisplay.Image = VisuaOper.ShapeFind();
           if (MainWindows.BeltMpos != 0)//如果采集照片的時(shí)候皮帶編碼器位置獲取正常
           {
               //操作MoveSyncBuff數(shù)據(jù)先加鎖
               while (true)
               {
                   if (MainWindows.SetMoveSyncFlag == 0)
                   {
                       MainWindows.SetMoveSyncFlag = 1;
                       break;
                   }
               }
               //找到可以存儲(chǔ)數(shù)據(jù)的數(shù)組起始下標(biāo)
               int ArrId = 0;
               for (int i = 0; i < 50; i++)
               {
                   if (MainWindows.MoveSyncBuff[i, 0] == 0)
                   {
                       ArrId = i;
                       break;
                   }
               }
               //開(kāi)始存儲(chǔ)數(shù)據(jù)  一次匹配最多10個(gè)結(jié)果
               TempArrid = ArrId;
               for (int i = 0; i < 10; i++)
               {
                   //如果分?jǐn)?shù)滿足要求
                   if (MainWindows.VisionRst[i, 0] >= MainWindows.VisionScore)
                   {
                       int j;
                       //如果有重復(fù)的目標(biāo)需要剔除
                       for (j = 0; j < TempArrid; j++)
                       {
                           TempVar = MainWindows.VisionRst[i, 1] - MainWindows.BeltMpos - MainWindows.MoveSyncBuff[j, 1] + MainWindows.MoveSyncBuff[j, 4];
                           if (((TempVar) <= 10) && (TempVar >= -10))
                           {
                               j = -10;
                               break;
                           }
                       }
                       if (j >= 0)
                       {
                           MainWindows.MoveSyncBuff[ArrId, 0] = 1;
                           MainWindows.MoveSyncBuff[ArrId, 1] = MainWindows.VisionRst[i, 1];   //存儲(chǔ)匹配結(jié)果的X坐標(biāo)
                           MainWindows.MoveSyncBuff[ArrId, 2] = MainWindows.VisionRst[i, 2];   //存儲(chǔ)匹配結(jié)果的Y坐標(biāo)
                           MainWindows.MoveSyncBuff[ArrId, 3] = MainWindows.VisionRst[i, 3];   //存儲(chǔ)匹配結(jié)果的角度偏移
                           MainWindows.MoveSyncBuff[ArrId, 4] = MainWindows.BeltMpos;          //存儲(chǔ)匹配到產(chǎn)品時(shí),傳送帶的位置信息
                           ArrId = ArrId + 1;
                           IdentiNum.Text = (Convert.ToInt32(IdentiNum.Text) + 1).ToString();
                           WriteLog("視覺(jué)目標(biāo):" + "(" + MainWindows.VisionRst[i, 1].ToString("0,0") + "," + MainWindows.VisionRst[i, 2].ToString("0,0") + ")");
                       }
                   }
                   //分?jǐn)?shù)清空
                   MainWindows.VisionRst[i, 0] = 0;
               }
               //解鎖
               MainWindows.SetMoveSyncFlag = 0;
           }
       }
       Thread.Sleep(100);
   }
}

(2)流水線同步分揀代碼詳情。

/************************************************************************************
'任務(wù)編號(hào):     無(wú)
'函數(shù)功能:     流水線同步分揀
'Input:        無(wú)
'Output:       無(wú) 
'返回值:       無(wú)             
**************************************************************************************/
public void RunSubTaskMotion()
{
   float[] MoveSyncTemp = new float[5];
   float TempMpos = 0;
   while (SysRunFlag > 0)
   {
       while (SysRunFlag == 1)
       {
           if (MainWindows.MoveSyncBuff[0, 0] == 1)
           {
               MainWindows.ZauxErr = zmcaux.ZAux_Direct_GetMpos(MainWindows.g_Handle, MainWindows.ConveyorAxisId, ref TempMpos);
               //如果編碼器位置抓取正確
               if (0 == MainWindows.ZauxErr) 
               {
                   //編碼器往前運(yùn)動(dòng)了多少
                   TempMpos = TempMpos - MainWindows.MoveSyncBuff[0, 4];

                   //判斷是否處于同步起始區(qū)
                   if (((MainWindows.MoveSyncBuff[0, 1] + TempMpos) >= MainWindows.SyncReX[0]) && ((MainWindows.MoveSyncBuff[0, 1] + TempMpos) <= MainWindows.SyncReX[1]))
                   {
                       WriteLog("開(kāi)始同步抓取");
                       //取一組數(shù)據(jù)
                       MoveSyncTemp[0] = MainWindows.MoveSyncBuff[0, 1] ;    //X
                       MoveSyncTemp[1] = MainWindows.MoveSyncBuff[0, 2] ;    //Y  
                       MoveSyncTemp[2] = MainWindows.GetBinHigt;            //取料高度
                       MoveSyncTemp[3] = MainWindows.MoveSyncBuff[0, 3];    //Aanle
                       MoveSyncTemp[4] = MainWindows.MoveSyncBuff[0, 4];    //Mpos
                      //下發(fā)同步運(yùn)動(dòng)的指令
                      //0、復(fù)位輸出口
                       zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0);
                       //1、先同步上傳送帶
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 0, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //2、同步一段時(shí)間(關(guān)節(jié)軸有滯后) 50ms
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 50, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //3、打開(kāi)真空吸嘴
                       zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 1);
                       //4、同步一段時(shí)間 1500ms
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 700, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //5、同步段把Z軸提升到安全高度,選擇軸到放料角度
                       MoveSyncTemp[2] = MainWindows.StandPos[2];             //取料高度
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 100, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //4、解除同步去放料點(diǎn)
                       MoveSyncTemp[0] = MainWindows.EmptPos[0];    //X
                       MoveSyncTemp[1] = MainWindows.EmptPos[1];    //Y  
                       MoveSyncTemp[2] = MainWindows.EmptPos[2];    //放料高度
                       MoveSyncTemp[3] = MainWindows.EmptPos[3];    //Aanle
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, -1, 0, 0, -1, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //5、關(guān)閉真空吸嘴放料,Delay100ms
                       zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0);
                       zmcaux.ZAux_Direct_MoveDelay(MainWindows.g_Handle, MainWindows.gVAxisList[0], 100);
                       //6、去安全高度
                       MoveSyncTemp[0] = MainWindows.EmptPos[0];    //X
                       MoveSyncTemp[1] = MainWindows.EmptPos[1];    //Y  
                       MoveSyncTemp[2] = MainWindows.StandPos[2];    //放料高度
                       MoveSyncTemp[3] = MainWindows.EmptPos[3];    //Aanle
                       zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MoveSyncTemp);

                       //操作MoveSyncBuff數(shù)據(jù)先加鎖
                       while (true)
                       {
                           if (MainWindows.SetMoveSyncFlag == 0)
                           {
                               MainWindows.SetMoveSyncFlag = 1;
                               break;
                           }
                       }
                       //視覺(jué)匹配緩沖區(qū)數(shù)據(jù)往前覆蓋
                       for (int k = 0; k < 49; k++)
                       {
                           MainWindows.MoveSyncBuff[k, 0] = MainWindows.MoveSyncBuff[k + 1, 0];
                           MainWindows.MoveSyncBuff[k, 1] = MainWindows.MoveSyncBuff[k + 1, 1];
                           MainWindows.MoveSyncBuff[k, 2] = MainWindows.MoveSyncBuff[k + 1, 2];
                           MainWindows.MoveSyncBuff[k, 3] = MainWindows.MoveSyncBuff[k + 1, 3];
                           MainWindows.MoveSyncBuff[k, 4] = MainWindows.MoveSyncBuff[k + 1, 4];
                       }
                       //解鎖
                       MainWindows.SetMoveSyncFlag = 0;
                       //等待輸出口打開(kāi)
                       int TimeOut = 10000;
                       TimeOut = 100000;
                       //等待軸停止
                       int AxisIdle = 0;                 //軸停止?fàn)顟B(tài)
                       while (TimeOut > 0)
                       {
                           zmcaux.ZAux_Direct_GetIfIdle(MainWindows.g_Handle, MainWindows.gVAxisList[0], ref AxisIdle);
                           if (AxisIdle == (-1))
                           {
                               break;
                           }
                           Thread.Sleep(10);
                           TimeOut = TimeOut - 10;
                       }
                       if (TimeOut <= 0)
                       {
                           //超時(shí)要報(bào)錯(cuò),程序要停止
                           WriteLog("等待軸停止超時(shí)");
                           //Thread.Sleep(100);
                           SysRunFlag = 0;
                           break;
                       }
                       SortNum.Text = (Convert.ToInt32(SortNum.Text) + 1).ToString();
                       WriteLog("放料成功");
                       //退出while 單次循環(huán)
                       continue;
                   }
                   else if ((MainWindows.MoveSyncBuff[0, 1] + TempMpos) > MainWindows.SyncReX[1])
                   {
                       //操作MoveSyncBuff數(shù)據(jù)先加鎖
                       while (true)
                       {
                           if (MainWindows.SetMoveSyncFlag == 0)
                           {
                               MainWindows.SetMoveSyncFlag = 1;
                               break;
                           }
                       }
                       //視覺(jué)匹配緩沖區(qū)數(shù)據(jù)往前覆蓋
                       for (int k = 0; k < 49; k++)
                       {
                           MainWindows.MoveSyncBuff[k, 0] = MainWindows.MoveSyncBuff[k + 1, 0];
                           MainWindows.MoveSyncBuff[k, 1] = MainWindows.MoveSyncBuff[k + 1, 1];
                           MainWindows.MoveSyncBuff[k, 2] = MainWindows.MoveSyncBuff[k + 1, 2];
                           MainWindows.MoveSyncBuff[k, 3] = MainWindows.MoveSyncBuff[k + 1, 3];
                           MainWindows.MoveSyncBuff[k, 4] = MainWindows.MoveSyncBuff[k + 1, 4];
                       }
                       //解鎖
                       MainWindows.SetMoveSyncFlag = 0;
                       //如果視覺(jué)匹配緩沖區(qū)沒(méi)有數(shù)據(jù)了
                       if (MainWindows.MoveSyncBuff[0, 0] == 0)
                       {
                           //Delta去待機(jī)位
                           zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos);
                           WriteLog("去待機(jī)位");
                       }
                   }
               }
           }
           else
           {
               //Delta去待機(jī)位
               zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos);
           }
           Thread.Sleep(50);
       }
       //停止傳送帶
       zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, MainWindows.ConveyorAxisId, 2);
   }
}

本次,正運(yùn)動(dòng)技術(shù)C#之Delta并聯(lián)機(jī)械手的視覺(jué)同步分揀,就分享到這里。

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

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

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于機(jī)器視覺(jué)機(jī)械手裝配系統(tǒng)方案設(shè)計(jì)

    本文設(shè)計(jì)并實(shí)現(xiàn)了基于機(jī)器視覺(jué)機(jī)械手裝配系統(tǒng),可在線完成對(duì)不同型號(hào)和任意擺放工件的裝配任務(wù)。系統(tǒng)主要由機(jī)器視覺(jué)系統(tǒng)和機(jī)械手裝配系統(tǒng)組成。
    發(fā)表于 06-23 10:21 ?3693次閱讀
    基于機(jī)器<b class='flag-5'>視覺(jué)</b>的<b class='flag-5'>機(jī)械手</b>裝配系統(tǒng)方案設(shè)計(jì)

    EtherCAT運(yùn)動(dòng)控制器Delta機(jī)械手應(yīng)用

    以正運(yùn)動(dòng)ZMC406R運(yùn)動(dòng)控制器為例,講解Delta機(jī)械手運(yùn)動(dòng)控制應(yīng)用開(kāi)發(fā)。
    的頭像 發(fā)表于 05-09 10:47 ?1475次閱讀
    EtherCAT運(yùn)動(dòng)控制器<b class='flag-5'>Delta</b><b class='flag-5'>機(jī)械手</b>應(yīng)用

    C#Delta并聯(lián)機(jī)械手視覺(jué)相機(jī)標(biāo)定與形狀匹配

    本文主要介紹如何通過(guò)正運(yùn)動(dòng)VPLC711視覺(jué)接口來(lái)實(shí)現(xiàn)相機(jī)標(biāo)定和形狀匹配功能。
    的頭像 發(fā)表于 06-26 15:11 ?761次閱讀
    <b class='flag-5'>C#</b><b class='flag-5'>之</b><b class='flag-5'>Delta</b><b class='flag-5'>并聯(lián)機(jī)械手</b>的<b class='flag-5'>視覺(jué)</b>相機(jī)標(biāo)定與形狀匹配

    機(jī)械手 OEM 的應(yīng)用

    等。 并聯(lián)機(jī)械手并聯(lián)機(jī)械手由多個(gè)并聯(lián)的連桿機(jī)構(gòu)組成,具有高速、高精度、高剛度等優(yōu)點(diǎn)。它適用于一些對(duì)速度和精度要求較高的應(yīng)用場(chǎng)景,如食品、藥品的包裝等。 按驅(qū)動(dòng)方式劃分 : 電動(dòng)機(jī)械手
    發(fā)表于 09-18 10:31

    深圳機(jī)械手視覺(jué)分揀系統(tǒng)在手機(jī)蓋板的應(yīng)用

    的裝配精度,不便于將產(chǎn)品的精度穩(wěn)定地控制在所需的精度范圍內(nèi)。因而,當(dāng)組裝效率和裝配精度均需要提升時(shí),人工裝配的方式便于實(shí)現(xiàn)效率和精度之間的平衡。四元數(shù)機(jī)械手視覺(jué)分揀系統(tǒng)應(yīng)用于手機(jī)蓋板,末端工位識(shí)別抓取
    發(fā)表于 05-18 09:40

    湖北視覺(jué)分揀機(jī)械手系統(tǒng)在手機(jī)蓋板的應(yīng)用

    視覺(jué)分揀機(jī)械手是工廠自動(dòng)化立體倉(cāng)庫(kù)及物流配送中心對(duì)物流進(jìn)行分類、整理的關(guān)鍵設(shè)備之一,通過(guò)應(yīng)用分揀機(jī)可實(shí)現(xiàn)物流中心準(zhǔn)確、快捷的工作。因此,在快遞行業(yè)他被譽(yù)為“智能機(jī)器
    發(fā)表于 08-11 09:43

    深圳機(jī)械手視覺(jué)分揀系統(tǒng)有哪些特點(diǎn)及參數(shù)?

    可操作性好,可支持與觸摸屏聯(lián)機(jī)操作;4、通過(guò)識(shí)別產(chǎn)品特征,計(jì)算產(chǎn)品偏移值,控制機(jī)械手進(jìn)行定位抓??;5、可根據(jù)客戶具體機(jī)型進(jìn)行定制化的高效方案;6、機(jī)械手操作靈活、占地空間小。深圳機(jī)械手
    發(fā)表于 09-22 15:33

    PLC控制機(jī)械手設(shè)計(jì)

    PLC機(jī)械手控制的實(shí)現(xiàn)二、設(shè)計(jì)要求:1. 闡述機(jī)械手的工作原理2. 如何實(shí)現(xiàn)PLC對(duì)機(jī)械手的控制3. 機(jī)械手控制程序設(shè)計(jì)第一節(jié) 
    發(fā)表于 12-13 14:15 ?371次下載

    機(jī)械手圖冊(cè)——機(jī)械手設(shè)計(jì)必看

    機(jī)械手設(shè)計(jì)必看
    發(fā)表于 02-01 15:14 ?72次下載

    基于SJA1000芯片和82C250芯片實(shí)現(xiàn)機(jī)械手控制系統(tǒng)的設(shè)計(jì)

    物料搬運(yùn)機(jī)械手機(jī)械手和物料分揀兩部分裝置組成。如圖1所示,機(jī)械手主要由機(jī)座(采用步進(jìn)電機(jī)驅(qū)動(dòng)旋轉(zhuǎn))、水平手臂(采用直線坐標(biāo)氣缸HMP-20-200)、垂直手臂(采用滑塊氣缸SLT-1
    發(fā)表于 05-17 10:10 ?1898次閱讀

    使用并聯(lián)機(jī)器人和機(jī)器視覺(jué)技術(shù)實(shí)現(xiàn)自動(dòng)分揀機(jī)器視覺(jué)軟件系統(tǒng)的設(shè)計(jì)

    針對(duì)我國(guó)食品生產(chǎn)行業(yè)的實(shí)際需求,基于并聯(lián)機(jī)器人,機(jī)器視覺(jué)等先進(jìn)技術(shù),構(gòu)建了面向食品生產(chǎn)包裝的高速機(jī)器人分揀系統(tǒng),研究了輸送帶上運(yùn)動(dòng)食品的機(jī)器視覺(jué)定位算法,設(shè)計(jì)了運(yùn)動(dòng)食品分級(jí)與定位的機(jī)器
    發(fā)表于 11-16 18:05 ?26次下載
    使用<b class='flag-5'>并聯(lián)機(jī)</b>器人和機(jī)器<b class='flag-5'>視覺(jué)</b>技術(shù)實(shí)現(xiàn)自動(dòng)<b class='flag-5'>分揀</b>機(jī)器<b class='flag-5'>視覺(jué)</b>軟件系統(tǒng)的設(shè)計(jì)

    機(jī)械手視覺(jué)引導(dǎo)相機(jī)和伺服電機(jī)算法

    機(jī)械手分為:4軸,6軸或者XY模組或UVW模組。相關(guān)的視覺(jué)引導(dǎo)項(xiàng)目主要包括:抓取,放置,位置補(bǔ)正,貼合。
    發(fā)表于 10-11 15:44 ?2160次閱讀

    Delta并聯(lián)機(jī)械臂實(shí)現(xiàn)電磁鐵搬運(yùn)功能

    1. 功能說(shuō)明 ? ?R037樣機(jī)是一款Delta并聯(lián)機(jī)械臂。本文示例將利用Delta并聯(lián)機(jī)械臂實(shí)現(xiàn)不同點(diǎn)定點(diǎn)搬運(yùn)磁鐵物料的效果。 2. 結(jié)構(gòu)說(shuō)明 ? ?
    的頭像 發(fā)表于 03-09 08:43 ?1026次閱讀
    <b class='flag-5'>Delta</b><b class='flag-5'>并聯(lián)機(jī)械</b>臂實(shí)現(xiàn)電磁鐵搬運(yùn)功能

    機(jī)器視覺(jué)控制機(jī)械手的具體過(guò)程

    機(jī)器視覺(jué)控制機(jī)械手是一種將機(jī)器視覺(jué)技術(shù)與機(jī)械手控制技術(shù)相結(jié)合的自動(dòng)化技術(shù)。它通過(guò)機(jī)器視覺(jué)系統(tǒng)獲取目標(biāo)物體的圖像信息,然后利用圖像處理技術(shù)對(duì)圖
    的頭像 發(fā)表于 07-04 10:40 ?694次閱讀

    機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)在DELTA并聯(lián)機(jī)械手視覺(jué)上下料應(yīng)用

    機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)在DELTA并聯(lián)機(jī)械手視覺(jué)上下料的應(yīng)用
    的頭像 發(fā)表于 10-24 09:02 ?117次閱讀
    機(jī)器<b class='flag-5'>視覺(jué)</b>運(yùn)動(dòng)控制一體機(jī)在<b class='flag-5'>DELTA</b><b class='flag-5'>并聯(lián)機(jī)械手</b><b class='flag-5'>視覺(jué)</b>上下料應(yīng)用