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

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

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

VPLC系列機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)快速入門(十)

正運(yùn)動(dòng)技術(shù) ? 2021-11-08 17:09 ? 次閱讀

此前,我們依次講解了軟硬件介紹及計(jì)數(shù)實(shí)例、相機(jī)的基本使用、基于形狀匹配的視覺定位、BLOB有無檢測、測量尺寸、機(jī)器視覺方案中使用到的標(biāo)定功能、ZDevelop軟件實(shí)現(xiàn)識(shí)別條形碼和二維碼,測量點(diǎn)/直線/圓以及劃痕檢測功能。

本期課程我們和大家一起使用ZDevelop軟件實(shí)現(xiàn)機(jī)器視覺中使用到的OCR功能。

一、 OCR 檢測原理

什么是OCR?

OCR全稱是Optical Character Recognition,即光學(xué)字符識(shí)別。在機(jī)器視覺中OCR是指使用圖像處理方法將獲取到的圖像上的黑白字符進(jìn)行分割訓(xùn)練后,識(shí)別并輸出對(duì)應(yīng)的字符。

2.png

OCR的檢測原理?

在機(jī)器視覺中進(jìn)行OCR檢測時(shí),首先根據(jù)字符(前景)和背景的對(duì)比度以及字符的寬度和高度等參數(shù)將字符進(jìn)行分割后提取字符圖像,然后對(duì)提取的字符逐一進(jìn)行訓(xùn)練學(xué)習(xí),將所有可能出現(xiàn)的字符進(jìn)行訓(xùn)練學(xué)習(xí)后存儲(chǔ)到訓(xùn)練庫中,在執(zhí)行識(shí)別檢測時(shí),將當(dāng)前提取到的字符和訓(xùn)練庫中的字符進(jìn)行對(duì)比,輸出相似度滿足條件的字符結(jié)果。

3.png

二 、OCR 應(yīng)用場景

1.驗(yàn)證字符準(zhǔn)確性

可以驗(yàn)證待測產(chǎn)品上印刷字符的準(zhǔn)確性。

2.獲取產(chǎn)品字符信息

可以獲取待測產(chǎn)品上的字符信息上傳數(shù)據(jù)庫或錄入系統(tǒng)。

3.信息對(duì)比

可以將待測產(chǎn)品識(shí)別出的字符和條碼輸出的信息進(jìn)行對(duì)比,判斷字符印刷和條碼信息是否一致。

三、 軟件實(shí)現(xiàn)

(一)流程圖

4.png

(二)實(shí)例演示

1.打開ZDevelop軟件:新建項(xiàng)目→新建HMI文件→新建main.bas文件,用于編寫界面響應(yīng)函數(shù)→新建global_variable.bas文件用于存放全局變量并開啟HMI自動(dòng)運(yùn)行任務(wù)→新建InitParam.bas文件用于初始化測量參數(shù)→新建camera.bas文件用于實(shí)現(xiàn)相機(jī)采集功能→新建draw.bas文件用于更新繪制圖形刷新界面→文件添加到項(xiàng)目。

5.png

2.設(shè)計(jì)HMI界面。

6.png

3.在global_variable.bas文件中定義全局變量,定義完成后運(yùn)行Hmi.hmi文件。

'''''全局變量大部分使用數(shù)組結(jié)構(gòu)'''''

''注:basic編程中很多函數(shù)會(huì)以TABLE(系統(tǒng)的數(shù)據(jù)結(jié)構(gòu))做為參數(shù)

''在這里table均是做為中間變量

''table 21-22,鼠標(biāo)按鍵,控件坐標(biāo)系

''table 31-35,旋轉(zhuǎn)矩ROI參數(shù),cx、cy、width、height、angle,控件坐標(biāo)系

''table 41-45,旋轉(zhuǎn)矩形控件坐標(biāo)轉(zhuǎn)換后對(duì)應(yīng)的圖像坐標(biāo),圖像坐標(biāo)系

'主任務(wù)狀態(tài)

'0 - 未初始化

'1 - 停止

'2 - 運(yùn)行中

'3 - 正在停止

GLOBAL DIM main_task_state

main_task_state = 1

'采集開關(guān)

'0 - 停止采集

'1 - 請(qǐng)求采集

GLOBAL DIM grab_switch

grab_switch = 0

'相機(jī)個(gè)數(shù)

GLOBAL cam_num

cam_num = 0

'相機(jī)種類,"zmotion;mvision;basler;mindvision;huaray"

GLOBAL DIM CAMERA_TYPE(16)

CAMERA_TYPE = "mvision"

' 定義主任務(wù)id - 10

GLOBAL DIM main_task_id

main_task_id = 10

'定義連續(xù)采集任務(wù)id - 9

GLOBAL DIM grab_task_id

grab_task_id = 9

'定義全局圖像變量

GLOBAL ZVOBJECT grabImg '采集圖像

'定義常用顏色變量

GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOW

C_RED = RGB(255, 0, 0)

C_GREEN = RGB( 0,255, 0)

C_BLUE = RGB( 0, 0,255)

C_YELLOW= RGB(255,255, 0)

'訓(xùn)練的字符庫、輸出的字符結(jié)果

GLOBAL DIM nameSample(32),result(32)

'旋轉(zhuǎn)矩形ROI參數(shù):cx、cy、width、height、angle

GLOBAL DIM d_roi_rect2(5)

'檢測參數(shù):閾值模式、閾值參數(shù)、最小字符面積、最大字符面積、最小字符寬度、最大字符寬度、最小字符高度、最大字符高度、字符極性、形態(tài)學(xué)類型、結(jié)構(gòu)元寬、結(jié)構(gòu)元高、字符最小間距

GLOBAL DIM d_detect_param(13)

'***********定義讀取本地文件功能相關(guān)變量**************

''注意,該功能只在使用仿真器時(shí)有效

'定義是否使用本地圖片標(biāo)志

GLOBAL DIM d_use_imgfile

d_use_imgfile=1

'定義本地圖片索引

GLOBAL DIM d_index

d_index=0

'定義讀取圖片的路徑

GLOBAL DIM File_Name(100)

'***********結(jié)束定義讀取本地文件功能相關(guān)變量**********

'運(yùn)行HMI文件

RUN "Hmi1.hmi",1

4.在InitParam.bas文件中初始化測量參數(shù)。

end

GLOBAL SUB init_detect_param()'初始化測量參數(shù)

'初始化roi參數(shù)

d_roi_rect2(0) = 160.0 'roi中心x

d_roi_rect2(1) = 120.0 'roi中心y

d_roi_rect2(2) = 80.0 'roi寬

d_roi_rect2(3) = 60.0 'roi高

d_roi_rect2(4) = 0.0 'roi角度

TABLE(31) = d_roi_rect2(0) '將roi變量賦值給起始地址為31的table數(shù)組

TABLE(32) = d_roi_rect2(1)

TABLE(33) = d_roi_rect2(2)

TABLE(34) = d_roi_rect2(3)

TABLE(35) = d_roi_rect2(4)

'初始化檢測參數(shù):閾值模式、閾值參數(shù)、最小字符面積、最大字符面積、最小字符寬度、最大字符寬度、最小字符高度、最大字符高度、字符極性、形態(tài)學(xué)類型、結(jié)構(gòu)元寬、結(jié)構(gòu)元高、字符最小間距

d_detect_param(0) = 0 '手動(dòng)閾值

d_detect_param(1) = 187 '低閾值

d_detect_param(2) = 500 '最小字符面積

d_detect_param(3) = 80000 '最大字符面積

d_detect_param(4) = 10 '最小字符寬度

d_detect_param(5) = 500 '最大字符寬度

d_detect_param(6) = 10 '最小字符高度

d_detect_param(7) = 500 '最大字符高度

d_detect_param(8) = 1 '白底黑字

d_detect_param(9) = 1 '開運(yùn)算

d_detect_param(10) = 1 '結(jié)構(gòu)元寬,正奇數(shù)

d_detect_param(11) = 10 '結(jié)構(gòu)元高,正奇數(shù)

d_detect_param(12) = 1 '字符最小間距

nameSample="" '初始化訓(xùn)練字符樣本為空字符串

result=" " '初始化字符結(jié)果變量為空字符串

END SUB

5.關(guān)聯(lián)HMI界面值顯示控件變量。

7.png

具體變量關(guān)聯(lián)操作可參考視頻中相關(guān)內(nèi)容或獲取程序代碼進(jìn)行參考。

6.在main.bas文件中添加HMI界面初始化函數(shù)并在Hmi系統(tǒng)設(shè)置中關(guān)聯(lián)初始化函數(shù)。

'HMI界面初始化函數(shù)

GLOBAL SUB hmi_init()

grab_switch = 0 '初始化采集開關(guān)為停止采集

main_task_state = 1 '初始化主任務(wù)狀態(tài)為停止?fàn)顟B(tài)

'初始化時(shí)依據(jù)圖像分辨率設(shè)置區(qū)域的裁剪尺寸,此處圖像分辨率為1280x960

ZV_RESETCLIPSIZE(1280, 960)

'設(shè)置鎖存通道0的大小,以適應(yīng)圖片元件控件大小

ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10, 1), HMI_CONTROLSIZEY(10, 1))

ZV_SETSYSINT("LineWidth",5) '設(shè)置繪制畫筆寬度為5個(gè)像素

init_detect_param() '初始化測量參數(shù)

ZV_LATCHCLEAR(0) '清空鎖存通道0

END SUB

8.png

7.在camera.bas文件中添加HMI界面中采集相關(guān)按鈕響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)。

9.png

end


'主界面按下掃描相機(jī)按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB cam_scan_all()

if(d_use_imgfile=1)then

?"請(qǐng)先按下使用本地圖片按鈕關(guān)閉該功能"

return

endif

ZV_SETSYSINT("LogLevel", 7) '設(shè)置控制器信息

ZV_SETSYSSTR("DataDir","")

CAM_SCAN(CAMERA_TYPE) '掃描相機(jī),CAMERA_TYPE="mvision"

cam_num = CAM_COUNT() '獲取掃描到的相機(jī)數(shù)量

if (0 = cam_num) then '如果相機(jī)數(shù)量=0,打印提示信息

? "未找到相機(jī)"

return '退出子函數(shù),不往下執(zhí)行

endif

?"cam_num = " cam_num '如果掃描到相機(jī),打印相機(jī)數(shù)量

CAM_SEL(0) '選擇掃描到的第一個(gè)相機(jī)進(jìn)行操作

CAM_SETEXPOSURE(5000) '設(shè)置相機(jī)曝光時(shí)間為5000us

CAM_SETMODE(0) '設(shè)置軟件觸發(fā)模式

CAM_START(0) '開啟相機(jī)

END SUB

'主界面按下單次采集按鈕執(zhí)行的函數(shù)

GLOBAL SUB btn_grab()

'如果d_use_imgfile=1時(shí)使用讀取本地圖片功能,使用控制器時(shí)請(qǐng)將此部分代碼注釋掉

if (d_use_imgfile=1) then

if(d_index=3) then

d_index=0

endif

File_Name="\10"+TOSTR(d_index,1,0)+".bmp" '.../flash/10/目錄下的圖片所在的路徑名稱

ZV_IMGREAD(grabImg,File_Name,1)

ZV_LATCH(grabImg, 0)

d_index=d_index+1

return

endif

''讀取本地圖片功能結(jié)束

'如果相機(jī)數(shù)量為0,提示先掃描相機(jī),并退出子函數(shù)不往下執(zhí)行

if cam_num = 0 then

?"請(qǐng)先掃描相機(jī)!"

return

endif

CAM_SETPARAM("TriggerSoftware", 0) '發(fā)送觸發(fā)指令

CAM_GET(grabImg, 0) '獲取一幀圖像存放到grabImg變量中

ZV_LATCH(grabImg, 0) '將圖像顯示到鎖存通道0中

END SUB

'主界面按下連續(xù)采集按鈕響應(yīng)的函數(shù)

GLOBAL SUB btn_cgrab()

if grab_switch =1 then '如果已經(jīng)處于連續(xù)執(zhí)行狀態(tài),打印提示信息并退出函數(shù)

?"正在連續(xù)運(yùn)行中,請(qǐng)勿重復(fù)操作!"

return

endif

if( d_use_imgfile =0) then '如果使用相機(jī)采集功能

if cam_num = 0 then '判斷如果相機(jī)數(shù)量=0,打印提示信息并退出函數(shù)

?"請(qǐng)先掃描相機(jī)!"

return

endif

endif

grab_switch = 1 '采集任務(wù)開關(guān)置1

if (1 = grab_switch) then

if (0 = PROC_STATUS(grab_task_id)) then

RUNTASK grab_task_id, grab_task '開啟連續(xù)采集任務(wù)

endif

endif

END SUB

'采集任務(wù)實(shí)現(xiàn)函數(shù)

grab_task:

while(1)

if (0 = grab_switch) then '如果采集任務(wù)開關(guān)=0即停止采集按鈕按下時(shí)

exit while '退出循環(huán)

endif

'grab_switch=1時(shí)重復(fù)執(zhí)行以下操作

btn_grab()'單次采集按鈕響應(yīng)的函數(shù)

wend

END

'主界面按下停止采集按鈕響應(yīng)的函數(shù)

GLOBAL SUB btn_stopCgrab()

if grab_switch =0 then '如果已經(jīng)處于停止采集狀態(tài),打印提示信息并退出函數(shù)

?"未開啟連續(xù)采集!"

return

endif

grab_switch = 0 '將采集任務(wù)開關(guān)置0

END SUB

8.在draw.bas文件中添加檢測ROI更新繪制函數(shù),并在自定義元件屬性窗口中關(guān)聯(lián)刷新函數(shù)和繪制函數(shù)。

end

'和繪制(即選擇ROI)有關(guān)的界面的刷新繪制函數(shù)放在這個(gè)bas文件里

DIM is_redraw '繪圖標(biāo)志,0表示未進(jìn)行繪制,1表示正在進(jìn)行繪制

is_redraw = 0

DIM hit_pos '定義調(diào)整操作標(biāo)志

'根據(jù)鼠標(biāo)操作更新ROI位置區(qū)域函數(shù)

GLOBAL SUB update_roi()

if mouse_scan(21) = 1 then '掃描鼠標(biāo)按下操作

'只有按下時(shí)可以改變擊中位置,獲取鼠標(biāo)點(diǎn)擊位置對(duì)應(yīng)的擊中區(qū)域編號(hào)

hit_pos = ZV_HMIADJRECT2(table(21), table(22), 31, -1)

is_redraw = 1 '繪圖標(biāo)志置1

endif

if mouse_scan(21) = -1 then '掃描鼠標(biāo)松開操作

'根據(jù)區(qū)域編號(hào)調(diào)整roi區(qū)域位置

ZV_HMIADJRECT2(table(21), table(22), 31, hit_pos)

is_redraw = 1 '繪圖標(biāo)志置1

endif

if (MOUSE_state(21)) then '鼠標(biāo)按下時(shí)

'根據(jù)區(qū)域編號(hào)調(diào)整roi區(qū)域位置

ZV_HMIADJRECT2(table(21), table(22), 31, hit_pos)

is_redraw = 1 '繪圖標(biāo)志置1

endif

if (1 = is_redraw) then '如果繪制標(biāo)志=1

is_redraw = 0 '繪圖標(biāo)志置0

'控件roi坐標(biāo)轉(zhuǎn)圖像roi坐標(biāo),控件坐標(biāo)存放在起始地址為111的數(shù)組,圖像坐標(biāo)存放在起始地址為50的數(shù)組

ZV_POSTOIMG(0, 1, 31, 41)

d_roi_rect2(0) = TABLE(41)'將圖像坐標(biāo)的數(shù)據(jù)賦值給ROI變量

d_roi_rect2(1) = TABLE(42)

d_roi_rect2(2) = ZV_LENTOIMG(0, TABLE(33))

d_roi_rect2(3) = ZV_LENTOIMG(0, TABLE(34))

d_roi_rect2(4) = TABLE(35)

SET_REDRAW '重新繪制全部區(qū)域

endif

END SUB

'ROI區(qū)域更新后實(shí)時(shí)繪制ROI區(qū)域

GLOBAL SUB draw_roi()

SET_COLOR(C_BLUE) '設(shè)置畫筆顏色為藍(lán)色

ZV_HMIRECT2(31, 300) '將旋轉(zhuǎn)矩形roi分解為HMI支持的繪圖圖元并添加控制參數(shù),便于HMI繪圖顯示

DRAWLINE(TABLE(300), TABLE(301), TABLE(302), TABLE(303)) '繪制外矩形

DRAWLINE(TABLE(302), TABLE(303), TABLE(304), TABLE(305))

DRAWLINE(TABLE(304), TABLE(305), TABLE(306), TABLE(307))

DRAWLINE(TABLE(306), TABLE(307), TABLE(300), TABLE(301))

DRAWLINE(TABLE(308), TABLE(309), TABLE(310), TABLE(311)) '繪制方向箭頭

DRAWLINE(TABLE(312), TABLE(313), TABLE(310), TABLE(311))

DRAWLINE(TABLE(314), TABLE(315), TABLE(310), TABLE(311))

END SUB

10.png

9.在main.bas文件中添加HMI界面按下【提取訓(xùn)練】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

'HMI界面按下提取字符按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_segment()

'定義檢測需要用到的變量:分割參數(shù)、樣本圖片庫、訓(xùn)練樣本庫、OCR分類器、結(jié)果圖片

GLOBAL ZVOBJECT param,sample,trainSample,ocr,colorImg

'根據(jù)界面輸入?yún)?shù)生成分割參數(shù)

ZV_OCRSEGSETPARAM_(param,d_detect_param(0),d_detect_param(1),d_detect_param(2),d_detect_param(3),d_detect_param(4),d_detect_param(5),d_detect_param(6),d_detect_param(7),d_detect_param(8),d_detect_param(9),d_detect_param(10),d_detect_param(11),d_detect_param(12))

'根據(jù)分割參數(shù)和檢測區(qū)域進(jìn)行字符分割,分割的字符樣本圖片存放到sample變量中

ZV_OCRSEGCHAR_(grabImg,param,sample,d_roi_rect2(0),d_roi_rect2(1),d_roi_rect2(2),d_roi_rect2(3),d_roi_rect2(4))

'獲取樣本數(shù)量,存放到table(100)中

ZV_OCRSAMPLECNT_(sample,100)

'灰度圖轉(zhuǎn)換到RGB圖,作為結(jié)果圖像

ZV_GRAYTORGB(grabImg, colorImg)

if(TABLE(100)>0) then '如果識(shí)別到的字符數(shù)量大于0

for i=0 to TABLE(100)-1'根據(jù)識(shí)別到的字符次數(shù)進(jìn)行循環(huán)

ZV_OCRSAMPLERECT2_(sample,i,150)'獲取每個(gè)樣本字符的最小外接矩陣,用于顯示分割結(jié)果

'將樣本的最小外接矩陣?yán)L制到界面中

ZV_RECT2(colorImg,table(150),table(151),table(152),table(153),table(154),C_GREEN)

next

elseif (TABLE(100)=0) then '如果未分割提取到字符

?"未成功分割提取出字符!" '打印提示并退出執(zhí)行

return

endif

ZV_LATCH(colorImg,0)'在鎖存通道0中顯示結(jié)果圖像

if (STRCOMP(nameSample, "")=0)then '如果輸入的訓(xùn)練字符樣本是空的

?"請(qǐng)先輸入訓(xùn)練字符樣本再重新分割訓(xùn)練!" '打印提示

return '返回子函數(shù),不往下執(zhí)行

endif

'清空OCR分類器

ZV_CLEAR(ocr)

if(ZV_ISEMPTY(trainSample)=0) then '如果訓(xùn)練樣本庫不為空

ZV_OCRSAMPLECLR_(trainSample)'在訓(xùn)練字符之前先清空樣本庫

endif

'根據(jù)輸入的訓(xùn)練庫字符生成訓(xùn)練樣本庫

ZV_OCRSAMPLEAPP_(sample,trainSample,nameSample)

'使用訓(xùn)練樣本庫訓(xùn)練分類器,0.8為優(yōu)化參數(shù)(懲罰系數(shù)),表示分類器的預(yù)測能力, 越小預(yù)測能力越強(qiáng)但越容易出錯(cuò),范圍[0,1],建議 0.8;

'0.15為徑向基核參數(shù),表示非線性映射能力,值越大非線 性映射能力就越強(qiáng),范圍[0,1],建議 0.15

ZV_OCRTRAINSVM_(trainSample,ocr,0.8,0.15)

if(ZV_ISEMPTY(ocr)=0) then '如果分類器訓(xùn)練成功

?"字符分割訓(xùn)練已完成!" '打印成功提示

else

?"訓(xùn)練字符和分割提取的字符不匹配!"

endif

END SUB

11.png

10.在main.bas文件中添加HMI界面按下【識(shí)別】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。

'HMI界面按下識(shí)別按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_test()

result=" " '清空字符結(jié)果變量

'根據(jù)界面輸入?yún)?shù)生成分割參數(shù)

ZV_OCRSEGSETPARAM_(param,d_detect_param(0),d_detect_param(1),d_detect_param(2),d_detect_param(3),d_detect_param(4),d_detect_param(5),d_detect_param(6),d_detect_param(7),d_detect_param(8),d_detect_param(9),d_detect_param(10),d_detect_param(11),d_detect_param(12))

'根據(jù)分割參數(shù)和檢測區(qū)域進(jìn)行字符分割,分割的字符樣本存放到sample變量中

ZV_OCRSEGCHAR_(grabImg,param,sample,d_roi_rect2(0),d_roi_rect2(1),d_roi_rect2(2),d_roi_rect2(3),d_roi_rect2(4))

'獲取分割到的字符數(shù)量,存放到table(100)中

ZV_OCRSAMPLECNT_(sample,100)

if(TABLE(100)=0) then '如果未分割提取到字符

?"未成功分割提取出字符!" '打印提示并退出執(zhí)行

return

endif

'使用訓(xùn)練樣本和分類器識(shí)別字符并輸出字符結(jié)果到起始地址為50的變量中

ZV_OCRCLASSIFYSVM_(ocr,sample,32,50)

'獲取識(shí)別到的字符數(shù)量,存放到table(100)中

ZV_OCRSAMPLECNT_(sample,100)

'灰度圖轉(zhuǎn)換到RGB圖,作為結(jié)果圖像

ZV_GRAYTORGB(grabImg, colorImg)

if(TABLE(100)>0) then '如果識(shí)別到的字符數(shù)量大于0

for i=0 to TABLE(100)-1'將字符結(jié)果循環(huán)賦值給結(jié)果變量顯示到界面中

result(i)=TABLE(50+i)

ZV_OCRSAMPLERECT2_(sample,i,150)'獲取每個(gè)樣本字符的最小外接矩陣,用于顯示分割結(jié)果

'將樣本的最小外接矩陣?yán)L制到界面中

ZV_RECT2(colorImg,table(150),table(151),table(152),table(153),table(154),C_GREEN)

next

endif

ZV_LATCH(colorImg,0)'在鎖存通道0中顯示結(jié)果圖像

END SUB

12.png

11.在main.bas文件中添加【運(yùn)行】按鈕響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)。

'HMI界面按下運(yùn)行按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_run()

if(2 = main_task_state) then '如果主任務(wù)處于運(yùn)行中狀態(tài)

?"已經(jīng)開啟連續(xù)運(yùn)行任務(wù),請(qǐng)勿重復(fù)操作!" '打印提示

return

endif

if (1 = main_task_state) then '如果主任務(wù)處于停止?fàn)顟B(tài)

if (0 = PROC_STATUS(main_task_id)) then'如果程序中任務(wù)未開啟

main_task_state = 2 '將主任務(wù)狀態(tài)設(shè)置為運(yùn)行中狀態(tài)

RUNTASK main_task_id, main_task'開啟主任務(wù)

endif

endif

END SUB

'主任務(wù)執(zhí)行的函數(shù)

main_task:

while(1)

'如果主任務(wù)狀態(tài)處于正在停止?fàn)顟B(tài)即停止按鈕按下時(shí)

if (3 = main_task_state) then

main_task_state = 1'將主任務(wù)狀態(tài)設(shè)置為停止?fàn)顟B(tài)

exit while '退出循環(huán)

endif

'否則循環(huán)執(zhí)行采集和識(shí)別函數(shù)

btn_grab()

btn_test()

wend

END

13.png

12.在main.bas文件中添加【停止】按鈕響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)。

'HMI界面按下停止按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_stop()

if (2 = main_task_state) then '如果主任務(wù)狀態(tài)處于2即任務(wù)運(yùn)行中時(shí)

main_task_state = 3 '將主任務(wù)狀態(tài)置為3,退出循環(huán)

endif

END SUB

14.png

(三)仿真演示效果

15.png

16.png

17.png

本次,正運(yùn)動(dòng)技術(shù)VPLC系列機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)快速入門(十)——OCR功能,就分享到這里。

更多精彩內(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í),一起提高中國智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來源。

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

    關(guān)注

    161

    文章

    4320

    瀏覽量

    119995
  • 字符識(shí)別
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    8636
  • OCR
    OCR
    +關(guān)注

    關(guān)注

    0

    文章

    142

    瀏覽量

    16309
  • 正運(yùn)動(dòng)技術(shù)

    關(guān)注

    0

    文章

    96

    瀏覽量

    288
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    聚徽-工控一體機(jī)有什么創(chuàng)新

    工控一體機(jī)作為新代的工業(yè)控制設(shè)備,具有多項(xiàng)創(chuàng)新點(diǎn),這些創(chuàng)新使得工控一體機(jī)能夠更好地滿足工業(yè)控制的需求,提高自動(dòng)化生產(chǎn)的效率和質(zhì)量。
    的頭像 發(fā)表于 09-14 09:34 ?218次閱讀

    藍(lán)海華騰參股公司頂控科技發(fā)布運(yùn)動(dòng)控制一體機(jī)系列產(chǎn)品

    藍(lán)海華騰參股公司深圳市頂控科技有限公司運(yùn)動(dòng)控制一體機(jī)系列產(chǎn)品上市!本次新品發(fā)布會(huì)發(fā)布三個(gè)系列產(chǎn)品,這三個(gè)
    的頭像 發(fā)表于 09-03 09:28 ?423次閱讀

    思道SEEKVIEU一體機(jī)電腦

    一體機(jī)
    jf_69621499
    發(fā)布于 :2024年09月03日 08:50:17

    機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)VPLC532E在汽車膠帶纏繞的開放式CNC應(yīng)用

    機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)VPLC532E在汽車膠帶纏繞的開放式CNC應(yīng)用
    的頭像 發(fā)表于 08-19 10:03 ?279次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>視覺</b><b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制</b><b class='flag-5'>一體機(jī)</b><b class='flag-5'>VPLC</b>532E在汽車膠帶纏繞的開放式CNC應(yīng)用

    VPLC系列機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)在五軸聯(lián)動(dòng)點(diǎn)膠上的應(yīng)用

    技術(shù)針對(duì)現(xiàn)有市場需求,開發(fā)了種基于VPLC系列機(jī)器視覺運(yùn)動(dòng)
    發(fā)表于 07-29 14:29

    聚徽觸控-工控一體機(jī)和 PLC 一體機(jī)有什么不同

    在工業(yè)自動(dòng)化領(lǐng)域,工控一體機(jī)和 PLC 一體機(jī)都扮演著重要角色。盡管它們?cè)谀撤N程度上有所重疊,但它們?cè)诠δ?、?yīng)用和設(shè)計(jì)結(jié)構(gòu)等方面存在顯著的不同。工控一體機(jī)和 PLC 一體機(jī)有什么不同,
    的頭像 發(fā)表于 06-21 10:05 ?374次閱讀

    集特一體機(jī)

    顯卡一體機(jī)
    jf_67464575
    發(fā)布于 :2024年05月22日 09:05:55

    工業(yè)一體機(jī)在物聯(lián)網(wǎng)領(lǐng)域的應(yīng)用

    工業(yè)一體機(jī)在物聯(lián)網(wǎng)領(lǐng)域的應(yīng)用變得愈發(fā)重要,工業(yè)一體機(jī)作為種集計(jì)算、控制、通信于一體的設(shè)備,具備了在物聯(lián)網(wǎng)環(huán)境下應(yīng)用的獨(dú)特特點(diǎn).
    的頭像 發(fā)表于 05-18 16:54 ?262次閱讀

    基于VPLC711的曲面外觀檢測XYR運(yùn)動(dòng)控制解決方案

    中心線永遠(yuǎn)與產(chǎn)品表面垂直(曲面處相機(jī)中心線始終與切線方向垂直)。 (2)相機(jī)到被檢測產(chǎn)品的距離保持致,任何位置L1=L2 VPLC711機(jī)器視覺
    發(fā)表于 04-16 17:58

    機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)在喇叭跟隨點(diǎn)膠上的應(yīng)用

    等問題。 正運(yùn)動(dòng)技術(shù)視覺點(diǎn)膠整體解決方案: 在此背景下,正運(yùn)動(dòng)技術(shù)的視覺點(diǎn)膠整體解決方案脫穎而出,方案是基于VPLC
    發(fā)表于 04-16 17:37

    機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)在光伏匯流焊機(jī)器人系統(tǒng)的解決方案

    一體機(jī)結(jié)合SCARA機(jī)械手+機(jī)器視覺的電池片匯流焊解決方案??山鉀Q不同角度來料、規(guī)格等光伏太陽能電池板的串焊需求,實(shí)現(xiàn)生產(chǎn)效率和精度等大幅提升,同時(shí)將廢品率降至僅12%,并顯著加快數(shù)據(jù)處理速度,提高了
    發(fā)表于 02-28 15:01

    人臉考勤打卡一體機(jī)

    一體機(jī)
    jf_66410442
    發(fā)布于 :2024年01月09日 11:09:22

    基于VPLC711的XYR運(yùn)動(dòng)控制解決方案

    VPLC711機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)機(jī)器
    發(fā)表于 11-13 17:06 ?458次閱讀
    基于<b class='flag-5'>VPLC</b>711的XYR<b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制</b>解決方案