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

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 【正運動】機器視覺運動控制一體機應用例程(八)零件分揀系統

【正運動】機器視覺運動控制一體機應用例程(八)零件分揀系統

時間:2021-07-12 16:16:39來源:深圳市正運動技術有限公司

導語:?在傳統分揀中一般采用人工分揀的方式 ,因工人操作會存在疲勞度的問題,對于長時間作業來說,顯然工作效率是無法滿足。即使采用工業機器人分揀方式,由于傳統的工業機器人一般采用示教或離線編程的方式工作,機器人到達目標點的位置是固定的,每次動作均為重復進行,只能重復完成預先規定好的動作。

運動控制

  工件分揀是工業生產環節中重要的組成部分,其目的是將不同類型的物料或工件分類擺放到相應的位置,避免不同的物料或工件產生混料,其步驟主要分為定位、識別、抓取和放置4個階段。

  在傳統分揀中一般采用人工分揀的方式 ,因工人操作會存在疲勞度的問題,對于長時間作業來說,顯然工作效率是無法滿足。

  即使采用工業機器人分揀方式,由于傳統的工業機器人一般采用示教或離線編程的方式工作,機器人到達目標點的位置是固定的,每次動作均為重復進行,只能重復完成預先規定好的動作。

  對于加工對象以及工作環境的感知能力低,以及物料或工件的來料方向不確定,使機器人的使用受到了限制。隨著機器視覺和人工智能的發展,機器人也能夠適應分揀環境的需求,隨時變更作業對象和分揀工序。

  機器視覺分揀系統對工件或物料進行位置和類型的判斷是必要的,與傳統的機械分揀作業相比,使用正運動技術機器視覺運動控制一體機分揀系統的工業機器人進行分揀,不但工作效率高效準確而且穩定性強,在工業分揀系統中具有較大的優勢。

運動控制

  機器視覺運控一體機分揀系統案例分享視頻

  上期課程,我們講述了VPLC系列機器視覺運動控制一體機快速入門的實現多輪廓匹配功能,本期課程我們將和大家一起分享如何實現零件分揀的功能。

運動控制

  教學視頻

  一檢測原理梯形圖介紹

  (一)檢測要求

  在工位上同時存在若干個圓環狀的零件、稍大尺寸的六邊形螺帽零件、稍小尺寸的六邊形螺帽零件?,F在要求檢測出不同形狀零件的數量,并發送對應零件的位置供機械手進行抓取。

運動控制

  (二)軟件算法

  先將圖片進行二值化處理,其次計算黑色BLOB連通區域,將BLOB區域結果存放到列表后,對BLOB結果數據進行分析比較。

  首先根據面積結果降序排序,將對應序號顯示在BLOB結果中心,再根據不同形狀零件處理出來后的BLOB面積范圍進行分類,并統計對應數量,最后將BLOB的重心位置結果打印在命令與輸出窗口。

運動控制

  二軟件實現梯形圖介紹

  (一)軟件實現

  1.打開ZDevelop軟件:新建名稱為“sorting.zpj”項目→新建“HMI”文件→新建“main.bas”文件,用于編寫界面響應函數→新建“global_variable.bas”文件用于存放全局變量并開啟HMI自動運行任務→新建“detectParam.bas”文件用于初始化測量參數→新建“camera.bas”文件用于實現相機采集功能→文件添加到項目。

運動控制

  2.設計HMI界面。

運動控制

  3.在“global_variable.bas”文件中定義全局變量,定義完成后運行“Hmi.hmi”文件。

  '''''全局變量大部分使用數組結構'''''''注:basic編程中很多函數會以TABLE(系統的數據結構)做為參數''table 說明 table 說明''0 ' 自動二值化閾值 4 暗區域的面積''2 亮區域的面積 6 連通區域的數量 ''20~24 圖像信息 '主任務狀態'0 - 未初始化'1 - 停止'2 - 運行中'3 - 正在停止GLOBAL DIM main_task_statemain_task_state = 1

  '采集開關'0 - 停止采集'1 - 請求采集GLOBAL DIM grab_switchgrab_switch = 0

  '相機個數GLOBAL cam_numcam_num = 0

  '相機種類,"zmotion;mvision;basler;mindvision;huaray"GLOBAL DIM CAMERA_TYPE(16)CAMERA_TYPE = "mvision"

  ' 定義主任務id - 10GLOBAL DIM main_task_idmain_task_id = 10

  '定義連續采集任務id - 9GLOBAL DIM grab_task_idgrab_task_id = 9

  '定義全局圖像變量GLOBAL ZVOBJECT grabImg '采集圖像GLOBAL ZVOBJECT binImg '采集圖像GLOBAL ZVOBJECT disImg '顯示圖像

  '定義常用顏色變量GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOWC_RED = RGB(255, 0, 0)C_GREEN = RGB( 0,255, 0)C_BLUE = RGB( 0, 0,255)C_YELLOW= RGB(255,255, 0)

  '檢測參數:閾值模式(自動閾值或手動閾值)、低閾值、高閾值、最小面積、最大面積GLOBAL DIM d_detect_param(5) 'd開頭表示數據結構

  '顯示打印的字符GLOBAL ShowString(64)

  '定義結果變量數組,包括墊圈數量、大螺帽數量、小螺帽數量GLOBAL DIM d_num_rst(3)

  '定義檢測消耗時間GLOBAL DIM d_detect_time

  '***********定義讀取本地文件功能相關變量**************''注意,該功能只在使用仿真器時有效'定義是否使用本地圖片標志GLOBAL DIM d_use_imgfile

  '定義本地圖片索引GLOBAL DIM d_index

  '定義讀取圖片的路徑GLOBAL DIM File_Name(100)

  '***********結束定義讀取本地文件功能相關變量**********

  '運行HMI文件RUN "Hmi.hmi",1

  4.在“detectParam.bas”文件中初始化測量參數。

  end

  GLOBAL SUB init_detect_param() '初始化測量參數 '初始化檢測參數:閾值模式(自動閾值 = 1 或 手動閾值 = 0)、低閾值、高閾值、極性(黑或白)、最大、最小、反向(即結果取反,成功變成失敗、失敗變成成功) d_detect_param(0) = 0 '手動閾值 d_detect_param(1) = 200 '低閾值 d_detect_param(2) = 255 '高閾值 d_detect_param(3) = 20000 '最小面積即像素個數 d_detect_param(4) = 50000 '最大面積 for i=0 to 2 d_num_rst(i)=0 next d_use_imgfile = 1 '默認使用本地圖片 d_index = 0 END SUB

  5.關聯HMI界面控件變量。

運動控制

  6.在“main.bas”文件中添加HMI界面初始化函數并在Hmi系統設置中關聯初始化函數。

  end

  '注:'凡是要使用Region有關的算子在系統初始化時都要調用ZV_RESETCLIPSIZE(width, height)這個算子設置下圖像尺寸,以滿足相機分辨率,因為默認的是640*480尺寸

  'HMI界面初始化函數GLOBAL SUB hmi_init()

  ZV_RESETCLIPSIZE(2448, 2048)'根據圖像分辨率設置圖像區域的裁剪尺寸,此處圖像分辨率為2448x2048 ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10, 7), HMI_CONTROLSIZEY(10, 7)) '設置鎖存的大小 init_detect_param()'初始化測量參數 ZV_SETSYSDBL("CamGetTimeout", 1000) '設置采集超時 ZV_LATCHCLEAR(0) '清空鎖存通道0 END SUB

運動控制

  7.在“camera.bas”文件中添加HMI界面中采集相關按鈕響應的函數并關聯動作函數。(說明:具體實現函數前面兩篇課程內容已經有操作演示,此處不做贅述。)

運動控制

  8.在“main.bas”文件中添加HMI界面中測試按鈕響應的函數并關聯動作函數。

  'HMI界面按下測試按鈕時響應的函數GLOBAL SUB btn_test()

  TICKS=0 for i=0 to 2 d_num_rst(i)=0 next ZVOBJECT regionWhite, regionMask, regionBlack,re_connecte,circle_connect dim loop_num,bigNut_num,smlNut_num loop_num=0 bigNut_num=0 smlNut_num=0 ZV_REGENFULLIMG(grabImg,regionMask)'生成的覆蓋全圖的區域到re這個區域變量中 ZV_DILATE (grabImg,binImg,15,15) '對圖像進行膨脹處理,分離輕微粘連的零件 '二值化處理 if d_detect_param(0) = 0 then '如果選擇手動閾值模式 '根據低閾值和高閾值參數生成白色像素圖像regionWhite ZV_RETHRESH(binImg, regionMask, regionWhite, d_detect_param(1), d_detect_param(2)) '對白色像素區域進行一次1*1的閉運算 ZV_RECLOSING(regionWhite,regionWhite,7,7) else '如果選擇自動閾值模式 Dim autoThresh '定義自動閾值模式下的二值化閾值 '在grabImg圖像中的指定區域內對圖像進行自動二值化處理,輸出二值化區域regionWhite ZV_REAUTOTHRESH(binImg, regionMask, regionWhite, 0) '對白色像素區域進行一次1*1的閉運算 ZV_RECLOSING(regionWhite,regionWhite,7,7) autoThresh = TABLE(0) ? "autoThresh = " autoThresh '打印提示信息,當前二值化閾值 endif ZV_REDIFF (regionMask, regionWhite, regionBlack) '將regionMask區域(檢測區域)和regionWhite(白色像素區域)進行差集運算,結果為regionBlack(黑色像素區域) ZV_REAREA(regionBlack, 4) '計算黑色像素區域的面積(即像素數量)存放到table(4)中 if(TABLE(4) >0) then '如果獲取到的黑色像素數量大于0 ZV_RECONNECT(regionBlack,re_connecte) '計算區域的連通區域,存放到re_connecte列表中 zv_refilter(re_connecte,0,d_detect_param(3),d_detect_param(4),0)'對區域列表中的區域進行過濾 zv_refilter(re_connecte,20,0.8,1.2,0) ZV_LISTCOUNT(re_connecte,6) '獲取列表中的連通區域的數量,存放到table(6)中 else TABLE(6)=0 endif ?"產品個數"TABLE(6) '打印提示信息 '繪制效果圖 Dim width, height ZV_IMGINFO (binImg, 20)'獲取grabImg的圖像信息 width = TABLE(20) height = TABLE(21) ZV_GRAYTORGB(binImg,disImg)'將灰度圖轉換到RGB圖像,用于繪制檢測結果圖像 ZV_REGION(disImg, regionMask, 0, ZV_COLOR(0,0,0)) '在disImg中繪制黑色的regionMask區域 ZV_REGION(disImg, regionWhite, 0, ZV_COLOR(255,255,255)) '在disImg中繪制白色的regionWhite區域 ZV_RESORT(re_connecte,0,0) '對BLOB結果進行面積降序排序 for i=0 to TABLE(6)-1 ZV_LISTGET(re_connecte,circle_connect,i) '獲取列表中序號為i的元素,即依次獲取列表中零件連通區域 ZV_REAREACENTER(circle_connect,40) '計算每個零件的面積與中心位置,將數據放入TABLE(40)中 ShowString=TOSTR(i+1,1,0) '將BLOB的數量轉換成字符串變量 if (TABLE(40)>47000) AND (TABLE(40)<50000) then '篩選出墊圈 loop_num=loop_num+1 ?"序號"ShowString"是圓環:位置為"TABLE(41),TABLE(42) endif if (TABLE(40)>33000) AND (TABLE(40)<36000) then '篩選出大螺帽 bigNut_num=bigNut_num+1 ?"序號"ShowString"是大螺帽:位置為"TABLE(41),TABLE(42) endif if (TABLE(40)>27000) AND (TABLE(40)<29000) then '篩選出小螺帽 smlNut_num=smlNut_num+1 ?"序號"ShowString"是小螺帽:位置為"TABLE(41),TABLE(42) endif ZV_TEXT(disImg,ShowString,TABLE(41),TABLE(42),140,ZV_COLOR(255,131,6)) '顯示結果文本 '?i+1,"面積"TABLE(40) next d_num_rst(0)=loop_num d_num_rst(1)=bigNut_num d_num_rst(2)=smlNut_num d_detect_time=ABS(TICKS) ZV_LATCH(disImg, 0) '在鎖存通道0中顯示結果圖像 END SUB

運動控制

  9.在“main.bas”文件中添加HMI界面中運行按鈕響應的函數并關聯動作函數。

  'HMI界面按下運行按鈕時響應的函數GLOBAL SUB btn_run() if(2 = main_task_state) then '如果主任務處于運行狀態,打印提示信息并退出函數 ?"已經開啟連續運行任務,請勿重復操作!" return endif if (1 = main_task_state) then '如果主任務處于停止狀態 if (0 = PROC_STATUS(main_task_id)) then '如果任務未開啟 main_task_state = 2 '主任務狀態設置為2,表示正在執行連續任務 RUNTASK main_task_id, main_task '開啟主任務 endif endifEND SUB

  '主任務實現函數main_task: while(1) if (3 = main_task_state) then '如果主任務狀態處于3即按下停止按鈕時 main_task_state = 1 '將主任務狀態置為1 exit while '退出循環 endif delay (500) '重復執行采集和檢測函數 if (d_use_imgfile=1) then if(d_index=3) then d_index=0 endif File_Name="分揀/"+TOSTR(d_index,1,0)+".bmp" '讀取本地圖片時圖片所在的路徑名稱 ZV_IMGREAD(grabImg,File_Name,1) d_index=d_index+1 else if cam_num = 0 then ?"請先掃描相機!" return endif CAM_SETPARAM("TriggerSoftware", 0) '發送觸發指令 CAM_GET(grabImg, 0) '獲取一幀圖像存放到grabImg變量中 endif btn_test() wendEND

運動控制

  10.在“main.bas”文件中添加HMI界面中停止按鈕響應的函數并關聯動作函數。

  'HMI界面按下停止按鈕時響應的函數GLOBAL SUB btn_stop()

  if (2 = main_task_state) then '如果主任務狀態處于3即正在連續執行任務時 main_task_state = 3 '將主任務狀態置為3,退出循環 endif END SUB

  三操作演示梯形圖介紹

  (一)操作步驟

  查看運行效果:將本次課程使用到的“分揀”圖像復制到ZDevelop軟件目錄下的flash文件夾項目→再將項目下載到仿真器中→使用本地圖片→單次采集→選用手動閾值模式→設置閾值范圍→設置篩選的黑色像素區域的面積范圍→點擊測試,查看單次運行效果→點擊運行,查看連續運行效果→結束。

  (二)效果演示

運動控制

  本次,正運動技術視覺運動控制一體機應用例程(八)零件分揀系統,就分享到這里。

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


標簽: 機器視覺工業機器人運動控制

點贊

分享到:

上一篇:【新時達】一秒10次輕松植毛...

下一篇:淺析智能傳感器技術原理

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

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

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

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

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

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

主站蜘蛛池模板: 蚌埠市| 灌南县| 方城县| 仲巴县| 兴海县| 晋江市| 山东省| 格尔木市| 上杭县| 弋阳县| 贵港市| 咸阳市| 广东省| 抚宁县| 威信县| 周宁县| 山东省| 合川市| 宁陕县| 崇礼县| 弥勒县| 瑞昌市| 恭城| 台前县| 泰和县| 大竹县| 陆河县| 东乌珠穆沁旗| 平原县| 岳阳市| 余姚市| 唐河县| 万宁市| 广元市| 乳源| 林周县| 阳东县| 徐州市| 涟水县| 额尔古纳市| 鄂托克前旗|