時間:2021-06-30 17:41:56來æºï¼šæ·±åœ³å¸‚æ£é‹å‹•技術有é™å…¬å¸
ã€€ã€€é½’è¼ªç¼ºé½’æ˜¯å…¶ç”Ÿç”¢åˆ¶é€ éŽç¨‹ä¸çš„一個é‡å¤§ç¼ºé™·ï¼Œéœ€é€šéŽæª¢æ¸¬æŠ€è¡“進行è¦é¿ã€‚如果使用人工進行檢測,ä¸åƒ…æœƒå¢žåŠ äººå·¥æˆæœ¬ï¼Œä¸”æª¢æ¸¬æ™‚å®¹æ˜“æ¼æª¢æˆ–者由于注æ„力ä¸é›†ä¸è€Œå°Žè‡´èª¤åˆ¤ï¼Œå› æ¤æˆ‘們引入了機器視覺檢測技術進行齒輪缺齒檢測。
ã€€ã€€æ©Ÿå™¨è¦–è¦ºé½’è¼ªæª¢æ¸¬ç‚ºéžæŽ¥è§¸å¼çš„ç„¡ææª¢æ¸¬æ–¹æ³•,與傳統人工檢測相比,具有ä¸å¯å–代的優越性。
  機器視覺齒輪檢測系統在追求高速度ã€é«˜æ•ˆçއã€é«˜é‡å¾©æ€§å’Œç²¾ç¢ºåº¦çš„å·¥æ¥ç”Ÿç”¢åˆ¶é€ éŽç¨‹ä¸ä¹Ÿæ›´ç‚ºå¯é ï¼ŒæŠŠæ©Ÿå™¨è¦–è¦ºæª¢æ¸¬æ–¹æ³•ç”¨äºŽåˆ¶é€ ç³»çµ±æ˜¯å·¥æ¥ç™¼å±•的方å‘和必然趨勢,也是æé«˜ç”Ÿç”¢æ•ˆçŽ‡çš„æœ‰æ•ˆé€”å¾‘ã€‚
ã€€ã€€ä¸ŠæœŸèª²ç¨‹ï¼Œæˆ‘å€‘è¬›è¿°äº†æ©Ÿå™¨è¦–è¦ºæ–¹æ¡ˆä¸æ¶²ä½æª¢æ¸¬çš„æ‡‰ç”¨ä¾‹ç¨‹ï¼Œæœ¬æœŸèª²ç¨‹æˆ‘們和大家一起分享機器視覺齒輪缺輪檢測的應用例程。
  教å¸è¦–é »
  一檢測原ç†
  (一)æª¢æ¸¬è¦æ±‚
  檢測齒輪狀產å“外邊緣上的輪齒是å¦å®Œæ•´ï¼Œå¦‚有缺失返回“NGâ€ç‹€æ…‹ï¼Œå¹¶é¡¯ç¤ºä½ç½®ä¿¡æ¯ã€‚若齒輪完整,則返回“OKâ€ç‹€æ…‹ã€‚
  (二)軟件算法
  二軟件實ç¾
  (一)軟件實ç¾
  1.打開ZDevelopè»Ÿä»¶ï¼šæ–°å»ºé …ç›®â†’æ–°å»ºâ€œHMIâ€æ–‡ä»¶â†’新建“main.basâ€æ–‡ä»¶ï¼Œç”¨äºŽç·¨å¯«ç•Œé¢éŸ¿æ‡‰å‡½æ•¸â†’新建“global_variable.basâ€æ–‡ä»¶ç”¨äºŽå˜æ”¾å…¨å±€è®Šé‡å¹¶é–‹å•ŸHMI自動é‹è¡Œä»»å‹™â†’新建“detectParam.basâ€æ–‡ä»¶ç”¨äºŽåˆå§‹åŒ–測é‡åƒæ•¸â†’新建“camera.basâ€æ–‡ä»¶ç”¨äºŽå¯¦ç¾ç›¸æ©Ÿé‡‡é›†åŠŸèƒ½â†’æ–‡ä»¶æ·»åŠ åˆ°é …ç›®ã€‚
  2.è¨è¨ˆHMI界é¢ã€‚
  3.在“global_variable.basâ€æ–‡ä»¶ä¸å®šç¾©å…¨å±€è®Šé‡ï¼Œå®šç¾©å®ŒæˆåŽé‹è¡Œâ€œHmi.hmiâ€æ–‡ä»¶ã€‚
  '''''全局變é‡å¤§éƒ¨åˆ†ä½¿ç”¨æ•¸çµ„çµæ§‹'''''''注:basic編程ä¸å¾ˆå¤šå‡½æ•¸æœƒä»¥TABLE(ç³»çµ±çš„æ•¸æ“šçµæ§‹)åšç‚ºåƒæ•¸''table 說明 table 說明''0 ' 自動二值化閾值 11~12 é¼ æ¨™æ“作時ç²å–çš„åæ¨™''2 亮å€åŸŸçš„é¢ç© 20~24 圖åƒä¿¡æ¯''4 æš—å€åŸŸçš„é¢ç© 6 é½’è¼ªçš„æ•¸é‡ ''40~42 齒輪的é¢ç©å’Œä½ç½®X,Y數據
  '主任務狀態'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 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 DIM d_detect_time
  '顯示打å°çš„å—符GLOBAL ShowString(64)GLOBAL ShowString1(64)
  '***********å®šç¾©è®€å–æœ¬åœ°æ–‡ä»¶åŠŸèƒ½ç›¸é—œè®Šé‡**************''注æ„,該功能åªåœ¨ä½¿ç”¨ä»¿çœŸå™¨æ™‚有效'定義是å¦ä½¿ç”¨æœ¬åœ°åœ–片標志GLOBAL DIM d_use_imgfile
  '定義本地圖片索引GLOBAL DIM d_index
  '定義讀å–圖片的路徑GLOBAL DIM File_Name(100)
  '***********çµæŸå®šç¾©è®€å–本地文件功能相關變é‡**********
  'é‹è¡ŒHMI文件RUN "Hmi.hmi",1
  4.在“detectParam.basâ€æ–‡ä»¶ä¸åˆå§‹åŒ–測é‡åƒæ•¸ã€‚
  end
  endGLOBAL SUB init_detect_param() 'åˆå§‹åŒ–測é‡åƒæ•¸ 'åˆå§‹åŒ–æª¢æ¸¬åƒæ•¸ï¼šé–¾å€¼æ¨¡å¼(自動閾值 = 1 或 手動閾值 = 0)ã€ä½Žé–¾å€¼ã€é«˜é–¾å€¼ã€æ¥µæ€§(黑或白)ã€æœ€å¤§ã€æœ€å°ã€åå‘(å³çµæžœå–å,æˆåŠŸè®Šæˆå¤±æ•—ã€å¤±æ•—è®ŠæˆæˆåŠŸ) d_detect_param(0) = 0 '手動閾值 d_detect_param(1) = 140 '低閾值 d_detect_param(2) = 255 '高閾值 d_detect_param(3) = 160000 '最å°é¢ç©å³åƒç´ 個數 d_detect_param(4) = 180000 '最大é¢ç© d_use_imgfile = 1 '默èªä½¿ç”¨æœ¬åœ°åœ–片 d_index = 0 TABLE(6)=0 '將齒輪數é‡åˆå§‹åŒ–為0END SUB
  END SUB
  5.é—œè¯HMIç•Œé¢æŽ§ä»¶è®Šé‡ã€‚
  6.在“main.basâ€æ–‡ä»¶ä¸æ·»åŠ HMI界é¢åˆå§‹åŒ–函數并在Hmi系統è¨ç½®ä¸é—œè¯åˆå§‹åŒ–函數。
  'HMI界é¢åˆå§‹åŒ–函數GLOBAL SUB hmi_init() grab_switch = 0 'åœæ¢é‡‡é›† main_task_state = 1 'ä¸»ä»»å‹™åœæ¢é‹è¡Œ ZV_RESETCLIPSIZE(1280, 960) '便“šåœ–åƒåˆ†è¾¨çއè¨ç½®å€åŸŸçš„è£å‰ªå°ºå¯¸ï¼Œæ¤è™•圖åƒåˆ†è¾¨çŽ‡ç‚º1280x960 ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10, 7), HMI_CONTROLSIZEY(10, 7)) 'è¨ç½®éŽ–å˜çš„å¤§å° init_detect_param() 'åˆå§‹åŒ–測é‡åƒæ•¸ ZV_SETSYSDBL("CamGetTimeout", 1000) 'è¨ç½®é‡‡é›†è¶…時 ZV_SETSYSINT("LineWidth",6) ZV_LATCHCLEAR(0) '清空鎖å˜é€šé“0 END SUB
  7.在“camera.basâ€æ–‡ä»¶ä¸æ·»åŠ HMI界é¢ä¸é‡‡é›†ç›¸é—œæŒ‰éˆ•響應的函數并關è¯å‹•作函數。(說明:具體實ç¾å‡½æ•¸å‰å…©ç¯‡èª²ç¨‹å…§å®¹å·²ç¶“有æ“作演示,æ¤è™•ä¸åšè´…述。)
  8.在“main.basâ€æ–‡ä»¶ä¸æ·»åŠ HMIç•Œé¢æŒ‰ä¸‹ã€æ¸¬è©¦ã€‘按鈕時響應的函數并關è¯å‹•作函數å。
  'HMIç•Œé¢æŒ‰ä¸‹æ¸¬è©¦æŒ‰éˆ•時響應的函數GLOBAL SUB btn_test() TABLE(6)=0 '檢測å‰å…ˆå°‡çµæžœæ•¸æ“𿏅0 d_detect_time=0 TICKS=0 '定義變é‡ï¼Œä¾æ¬¡ç‚ºç™½è‰²åƒç´ 連通å€åŸŸï¼ŒæŽ©æ¨¡å€åŸŸï¼Œé»‘色åƒç´ 連通å€åŸŸï¼Œé½’輪連通å€åŸŸçµæžœåˆ—表,單個齒輪連通å€åŸŸï¼Œåœ“ç’°å€åŸŸ,齒輪齒牙連通å€åŸŸ ZVOBJECT regionWhite, regionMask, regionBlack,re_connecte,circle_connect,region,re_connecte1 '生æˆå…¨åœ–åƒå€åŸŸ ZV_REGENFULLIMG(grabImg,regionMask) 'äºŒå€¼åŒ–è™•ç† if d_detect_param(0) = 0 then 'å¦‚æžœé¸æ“‡æ‰‹å‹•é–¾å€¼æ¨¡å¼ 'æ ¹æ“šä½Žé–¾å€¼å’Œé«˜é–¾å€¼åƒæ•¸ç”Ÿæˆç™½è‰²åƒç´ 圖åƒregionWhite ZV_RETHRESH(grabImg, regionMask, regionWhite, d_detect_param(1), d_detect_param(2)) 'å°ç™½è‰²åƒç´ å€åŸŸé€²è¡Œä¸€æ¬¡1*1的開é‹ç®— ZV_REOPENING(regionWhite,regionWhite,3,3) 'å°ç™½è‰²åƒç´ å€åŸŸé€²è¡Œä¸€æ¬¡1*1的閉é‹ç®— ZV_RECLOSING(regionWhite,regionWhite,3,3) else 'å¦‚æžœé¸æ“‡è‡ªå‹•é–¾å€¼æ¨¡å¼ Dim autoThresh '定義自動閾值模å¼ä¸‹çš„二值化閾值 '在grabImg圖åƒä¸çš„æŒ‡å®šå€åŸŸå…§å°åœ–åƒé€²è¡Œè‡ªå‹•二值化處ç†ï¼Œè¼¸å‡ºäºŒå€¼åŒ–å€åŸŸregionWhite ZV_REAUTOTHRESH(grabImg, regionMask, regionWhite, 0) 'å°ç™½è‰²åƒç´ å€åŸŸé€²è¡Œä¸€æ¬¡1*1的開é‹ç®— ZV_REOPENING(regionWhite,regionWhite,1,1) 'å°ç™½è‰²åƒç´ å€åŸŸé€²è¡Œä¸€æ¬¡1*1的閉é‹ç®— ZV_RECLOSING(regionWhite,regionWhite,1,1) autoThresh = TABLE(0) ? "autoThresh = " autoThresh 'æ‰“å°æç¤ºä¿¡æ¯ï¼Œç•¶å‰äºŒå€¼åŒ–閾值 endif ZV_REDIFF (regionMask, regionWhite, regionBlack) '差集é‹ç®—ï¼Œçµæžœç‚ºregionBlack(黑色åƒç´ å€åŸŸ) ZV_REAREA(regionBlack, 500) '計算黑色åƒç´ å€åŸŸçš„é¢ç©(å³åƒç´ 數é‡)å˜æ”¾åˆ°table(500)ä¸ if(TABLE(500)>0) then '如果ç²å–到的黑色åƒç´ 數é‡å¤§äºŽ0 ZV_RECONNECT(regionBlack,re_connecte) '計算å€åŸŸçš„連通å€åŸŸï¼Œå˜æ”¾åˆ°re_connecteåˆ—è¡¨ä¸ zv_refilter(re_connecte,0,d_detect_param(3),d_detect_param(4),0)'å°å€åŸŸåˆ—表ä¸çš„å€åŸŸé€²è¡ŒéŽæ¿¾ï¼Œä¿ç•™é¢ç©åœ¨ d_detect_param(3) 到 d_detect_param(4) çš„å€åŸŸï¼Œé¢ç©ä¸åœ¨æ¤èŒƒåœçš„å€åŸŸå°‡è¢«éŽæ¿¾æŽ‰ zv_refilter(re_connecte,20,0.9,1.2,0)'å°å€åŸŸåˆ—表ä¸çš„å€åŸŸé€²è¡ŒéŽæ¿¾ï¼Œä¿ç•™æœ€å°å¤–接矩形高寬比在0.9 到 1.2 çš„å€åŸŸï¼Œé¢ç©ä¸åœ¨æ¤èŒƒåœçš„å€åŸŸå°‡è¢«éŽæ¿¾æŽ‰ ZV_LISTCOUNT(re_connecte,6) 'ç²å–列表ä¸çš„連通å€åŸŸçš„æ•¸é‡ï¼Œå˜æ”¾åˆ°table(6)ä¸ endif '繪制效果圖 Dim width, height ZV_IMGINFO (grabImg, 20)'ç²å–grabImg的圖åƒä¿¡æ¯ width = TABLE(20) height = TABLE(21) ZV_GRAYTORGB(grabImg,disImg)'å°‡ç°åº¦åœ–轉æ›åˆ°RGB圖åƒï¼Œç”¨äºŽç¹ªåˆ¶æª¢æ¸¬çµæžœåœ–åƒ ZV_REGION(disImg, regionMask, 0, ZV_COLOR(0,0,0)) '繪制黑色的regionMaskå€åŸŸ ZV_REGION(disImg, regionWhite, 0, ZV_COLOR(255,255,255))'繪制白色的regionWhiteå€åŸŸ for i=0 to TABLE(6)-1 '循環ç²å–齒輪的ä½ç½®XYä¿¡æ¯ç”Ÿæˆåœ“ç’°å€åŸŸï¼Œæª¢æ¸¬æ˜¯å¦ç¼ºé½’ ZV_LISTGET(re_connecte,circle_connect,i) 'ç²å–列表ä¸åºè™Ÿç‚ºiçš„å…ƒç´ ï¼Œå³ä¾æ¬¡ç²å–列表ä¸é½’輪連通å€åŸŸ ZV_REAREACENTER(circle_connect,40) '計算æ¯å€‹é½’輪的é¢ç©èˆ‡ä¸å¿ƒä½ç½®ï¼Œå°‡æ•¸æ“𿔾入TABLE(40)ä¸ ZV_REGENANNULAR(region,TABLE(41),TABLE(42),220,260)'生æˆåœ“ç’°å€åŸŸ 'æ ¹æ“šä½Žé–¾å€¼å’Œé«˜é–¾å€¼åƒæ•¸ç”Ÿæˆç™½è‰²åƒç´ 圖åƒregionWhite ZV_RETHRESH(grabImg, region, regionWhite, d_detect_param(1), d_detect_param(2)) ZV_REDIFF (region, regionWhite, regionBlack)'進行差集é‹ç®—ï¼Œçµæžœç‚ºregionBlack(黑色åƒç´ å€åŸŸ) ZV_RECONNECT(regionBlack,re_connecte1) '計算圓環å€åŸŸå…§çš„黑色連通å€åŸŸï¼Œå˜æ”¾åˆ°re_connecteåˆ—è¡¨ä¸ zv_refilter(re_connecte1,0,1000,3000,0) 'å°å€åŸŸåˆ—表ä¸çš„連通å€åŸŸé€²è¡Œé¢ç©éŽæ¿¾ ZV_LISTCOUNT(re_connecte1,8) 'ç²å–單個齒輪齒牙的數é‡ï¼Œå˜æ”¾åˆ°table(8)ä¸ if TABLE(8)=25 then ZV_TEXT(disImg,"OK",TABLE(41),TABLE(42),70,ZV_COLOR(0,255,0)) 'é¡¯ç¤ºçµæžœæ–‡æœ¬ else ShowString=TOSTR(TABLE(41),1,2) ShowString1=TOSTR(TABLE(42),1,2) ZV_TEXT(disImg,"NG,"ShowString","ShowString1,TABLE(41),TABLE(42),55,ZV_COLOR(255,0,0)) 'é¡¯ç¤ºçµæžœæ–‡æœ¬ endif ZV_MARKER(disImg,TABLE(41),TABLE(42),0,50,zv_color(0,255,0)) '在圖åƒimgä¸ç¹ªåˆ¶åå— next ZV_LATCH(disImg, 0) '在鎖å˜é€šé“0ä¸é¡¯ç¤ºçµæžœåœ–åƒ d_detect_time=ABS(TICKS)'計算檢測消耗時間
  END SUB
  9.在“main.basâ€æ–‡ä»¶ä¸æ·»åŠ ã€é‹è¡Œã€‘按鈕響應的函數并關è¯å‹•作函數。
  '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
  10.在“main.basâ€æ–‡ä»¶ä¸æ·»åŠ ã€åœæ¢ã€‘按鈕響應的函數并關è¯å‹•作函數。
  'HMIç•Œé¢æŒ‰ä¸‹åœæ¢æŒ‰éˆ•時響應的函數GLOBAL SUB btn_stop()
  if (2 = main_task_state) then '如果主任務狀態處于3峿£åœ¨é€£çºŒåŸ·è¡Œä»»å‹™æ™‚ main_task_state = 3 '將主任務狀態置為3,退出循環 endif END SUB
ã€€ã€€ä¸‰ã€æ“作演示梯形圖介紹
  (一)æ“作æ¥é©Ÿ
  查看é‹è¡Œæ•ˆæžœï¼šå°‡æŽ§åˆ¶å™¨æŽ¥å…¥é›»æºï¼Œä½¿ç”¨ç¶²ç·šå°‡æŽ§åˆ¶å™¨èˆ‡PC連接,將相機通電并接入控制器→將相機ã€å…‰æºå®‰è£åœ¨æ‰“光測試架上,é¡é é€£æŽ¥åˆ°ç›¸æ©Ÿä¸Šâ†’é€£æŽ¥æŽ§åˆ¶å™¨ï¼Œå¹¶å°‡é …ç›®ä¸‹è¼‰åˆ°æŽ§åˆ¶å™¨â†’é‹è¡Œç¨‹åºï¼Œèª¿æ•´æ‰“å…‰åœ–åƒæ•ˆæžœï¼Œæ¸¬è©¦ç¨‹åºé‹è¡Œæ•ˆæžœã€‚
  (二)效果演示
完整代碼ç²å–地å€â–¼
  本次,æ£é‹å‹•技術機器視覺é‹å‹•控制一體機應用例程(七)齒輪缺齒檢測,就分享到這里。
  更多精彩內容請關注“æ£é‹å‹•å°åŠ©æ‰‹â€å…¬çœ¾è™Ÿï¼Œéœ€è¦ç›¸é—œé–‹ç™¼ç’°å¢ƒèˆ‡ä¾‹ç¨‹ä»£ç¢¼ï¼Œè«‹å’¨è©¢æ£é‹å‹•技術銷售工程師:400-089-8936。
  本文由æ£é‹å‹•技術原創,æ¡è¿Žå¤§å®¶è½‰è¼‰ï¼Œå…±åŒå¸ç¿’,一起æé«˜ä¸åœ‹æ™ºèƒ½åˆ¶é€ æ°´å¹³ã€‚æ–‡ç« ç‰ˆæ¬Šæ¸æ£é‹å‹•æŠ€è¡“æ‰€æœ‰ï¼Œå¦‚æœ‰è½‰è¼‰è«‹æ³¨æ˜Žæ–‡ç« ä¾†æºã€‚
上一篇:太陽能光ä¼é›»ç«™æœ‰å“ªäº›å„ªé»žï¼Ÿ...
ä¸‹ä¸€ç¯‡ï¼šå·¥æ¥æ©Ÿå™¨äººåœ¨åŠ å·¥åˆ¶é€ é ˜åŸŸä¸...
ä¸åœ‹å‚³å‹•網版權與å…è²¬è²æ˜Žï¼šå‡¡æœ¬ç¶²æ³¨æ˜Ž[來æºï¼šä¸åœ‹å‚³å‹•ç¶²]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Šå‡ç‚ºä¸åœ‹å‚³å‹•ç¶²(www.hysjfh.com)ç¨å®¶æ‰€æœ‰ã€‚如需轉載請與0755-82949061è¯ç³»ã€‚任何媒體ã€ç¶²ç«™æˆ–å€‹äººè½‰è¼‰ä½¿ç”¨æ™‚é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹å‚³å‹•ç¶²â€ï¼Œé•å者本網將追究其法律責任。
本網轉載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯ç¶²æˆ–æ¥å…§æŠ•稿人士,版權屬于原版權人。轉載請ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² ç‰ˆæ¬Šæ³•å¾‹è²¬ä»»ã€‚
相關資訊