網上有很多關于pos機料主,ABB機器人壓鑄或CNC上下料的知識,也有很多人為大家解答關于pos機料主的問題,今天pos機之家(m.dsth100338.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
1、pos機料主
pos機料主
項目要求產生這樣的效果:本工作站以機器人壓鑄取件為例,工業(yè)機器人從壓鑄機將壓鑄完成的工件取出進行工件完好性檢查,然后放到冷卻臺上進行冷卻,冷卻后放到輸出傳送帶上或放置到廢件箱中。
程序詳解:
MODULE DATA
數據模塊
PERS num nPickOff_X:=0;
PERS num nPickOff_Y:=0;
PERS num nPickOff_Z:=200;
定義抓手抓取產品前的偏移值
PERS num nErrPickPartNo:=0;
定義產品錯誤變量,值為0時表示抓取的產品是OK的,1為抓取的產品是NG的或沒抓取到產品
PERS num nCTime:=28.768;
定義數字變量,用來計時
VAR num nRelPartNo:=1;
定義數字變量用來計算產品放到冷卻臺的數量
PERS num nCoolOffs_Z:=200;
定義冷卻臺Z方向偏移數字變量
VAR bool bDieOpenKO:=FALSE;
VAR bool bPartOK:=FALSE;
定義開模邏輯量和產品檢測OK邏輯量
VAR bool bEjectKo:=FALSE;
定義模具頂針是否頂出的邏輯量
VAR bool bFullOfCool:=FALSE;
PERS bool bCool1PosEmpty:=FALSE;
PERS bool bCool2PosEmpty:=FALSE;
PERS bool bCool3PosEmpty:=FALSE;
PERS bool bCool4PosEmpty:=FALSE;
定義冷卻臺產品是否放滿的邏輯量以及各冷卻位置是否有產品的邏輯量
PERS pos PosExtRobSafe1:=[-600,-1300,1450];
PERS pos PosExtRobSafe2:=[580,-2700,7];
定義兩個位置數據,作為設定安全區(qū)域的兩個對角點
VAR shapedata shExtRobSafe;
定義安全區(qū)域形狀參數
PERS wzstationary wzExtRobSafe:=[1];
VAR bool bErrorPickPart:=FALSE;
定義錯誤工件邏輯量
CONST speeddata vFast:=[1800,200,5000,1000];
CONST speeddata vLow:=[8000,100,5000,1000];
定義機器人運行速度參數
TASK PERS loaddata LoadPart:=[5,[50,0,150],[1,0,0,0],0,0,0];
定義產品有效載荷參數
PERS tooldata tGripper:=[TRUE,[[179.120678011,-62.809528063,676],[1,0,0,0]],[15,[0,0,400],[1,0,0,0],0,0,0]];
定義抓手工具坐標系數據
TASK PERS wobjdata wobjDCM:=[FALSE,TRUE,"",[[0,0,0],[1,0,0,0]],[[-308.662234013,-1631.501618476,1017.285148616],[0.707106781,0,0.707106781,0]]];
定義壓鑄機工件坐標系
TASK PERS wobjdata wobjCool:=[FALSE,TRUE,"",[[1352.299998099,1342.748724261,1000],[1,0,0,0]],[[0,0,0],[1,0,0,0]]];
定義冷卻臺工件坐標系
PERS robtarget pPosOK:=[[250.269,-114.084,90.8913],[0.512234,0.497181,0.473399,-0.516063],[-2,-1,-1,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];定義機器人目標點變量
定義機器人目標點:
CONST robtarget pWaitDCM:=[[363.271843642,775.682976655,131.654771915],[0.692753734,0.135233089,0.688267859,-0.167605577],[-2,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
等待取料點
CONST robtarget pPickDCM:=[[250.269312959,-114.083887662,90.891092311],[0.512233847,0.497181122,0.473399181,-0.516062625],[-2,-1,-1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
取料點
CONST robtarget pHome:=[[309.255608104,1511.670917954,1165.257460666],[0.592214035,-0.440078101,0.376552635,-0.560198104],[-1,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
安全點pHome
CONST robtarget pPartCheck:=[[-171.652051037,-737.574027743,468.168521378],[0.701868271,-0.020784671,0.712000437,0.002075084],[0,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
產品視覺檢測點
CONST robtarget pRelPart1:=[[-249.936787289,-35.537358372,115.066954193],[0.506064708,-0.506729912,0.482576145,0.504225716],[0,-1,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
冷卻臺產品放置點1
CONST robtarget pRelPart2:=[[-1069.116434473,-29.765794459,124.564800542],[0.503010468,-0.50990052,0.485758769,0.501019309],[0,-1,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
冷卻臺產品放置點2
CONST robtarget pRelPart3:=[[-896.806913336,-511.146776415,-286.764492689],[0.505651488,-0.507161439,0.483008924,0.503791849],[0,-1,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
冷卻臺產品放置點3
CONST robtarget pRelPart4:=[[-236.714507131,-536.90763484,-282.088774622],[0.504522446,-0.508336069,0.484188144,0.50260659],[-1,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
冷卻臺產品放置點4
CONST robtarget pRelCNV:=[[-1635.680769575,-264.873338752,-110.176859052],[0.010165395,0.701881937,-0.00702991,-0.712186065],[0,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
輸送鏈產品放置點
CONST robtarget pPickDCM10:=[[1174.58,-6.95,1557.78],[0.638375,-0.0820886,0.762059,-0.070745],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
壓鑄機產品拾取等待點
CONST robtarget pWaitDCM10:=[[1174.58,-6.95,1557.78],[0.638375,-0.0820886,0.762059,-0.070745],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
壓鑄機外等待點
CONST robtarget pMoveOutDie:=[[337.109921171,746.132828813,128.173761254],[0.683704858,0.165160382,0.683234825,-0.196111929],[-2,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
錯誤處理等待點
CONST robtarget pRelDaPart:=[[337.109921171,746.132828813,128.173761254],[0.683704858,0.165160382,0.683234825,-0.196111929],[-2,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
不良產品放置點
ENDMODULE
MODULE ExtMain
程序運行模塊
PROC rTeachPath()
示教目標點程序
MoveJ pWaitDCM,v10,fine,tGripper\\WObj:=wobjDCM;壓鑄機外過渡點
MoveJ pPickDCM,v10,fine,tGripper\\WObj:=wobjDCM;壓鑄機取料點
MoveJ pHome,v10,fine,tGripper\\WObj:=wobjDCM;安全點
MoveJ pMoveOutDie,v10,fine,tGripper\\WObj:=wobjDCM;壓鑄機外等待點
MoveJ pRelDaPart,v10,fine,tGripper\\WObj:=wobjDCM;不良品放置點
MoveJ pPartCheck,v10,fine,tGripper\\WObj:=wobjCool;產品視覺檢測點
MoveJ pRelPart1,v10,fine,tGripper\\WObj:=wobjCool;冷卻臺產品放置點1
MoveJ pRelPart2,v10,fine,tGripper\\WObj:=wobjCool;冷卻臺產品放置點2
MoveJ pRelPart3,v10,fine,tGripper\\WObj:=wobjCool;冷卻臺產品放置點3
MoveJ pRelPart4,v10,fine,tGripper\\WObj:=wobjCool;冷卻臺產品放置點4
MoveJ pRelCNV,v10,fine,tGripper\\WObj:=wobjCool;輸送鏈產品放置點
ENDPROC
PROC rPowerON()
安全區(qū)域例行程序
PosExtRobSafe1:=[-600,-1300,1450];
長方體安全區(qū)對角點1
PosExtRobSafe2:=[580,-2700,7];
長方體安全區(qū)對角點2
WZBoxDef\\Inside,shExtRobSafe,PosExtRobSafe1,PosExtRobSafe2;
由對角點1,、2,定義一個方形安全區(qū)域,方形安全區(qū)域內部有效
WZDOSet\\Stat,wzExtRobSafe\\Inside,shExtRobSafe,do05RobInDCM,1;
進入方形安全區(qū)域輸出信號設置
ENDPROC
PROC main()
主程序
rIninAll;調用初始化例行程序
WHILE TRUE DO
調用WHILE循環(huán)指令,并且用絕對真實條件Ture形成死循環(huán),將初始化程序隔離
IF di01DCMAuto=1 THEN
IF條件判斷指令,di01DCMAuto為壓鑄機處于自動狀態(tài)信號,即當壓鑄機處于自動聯機狀態(tài)
才開始執(zhí)行取件程序
rExtracting;調用取件例行程序
rCheckPart;調用產品檢測例行程序
IF bFullOfCool=TRUE THEN
條件判斷指令,判斷冷卻臺上的產品是否放滿
rRelGoodPart;
調用放置OK產品程序
ELSE
rReturnDCM;
調用返回壓鑄機位置程序
ENDIF
ENDIF
rCycleTime;調用計時例行程序
WaitTime 0.2;等待時間
ENDWHILE
ENDPROC
PROC rIninAll()
初始化程序,用來復位IO,初始化程序數據及返回Home點等
AccSet 100,100;
加速度控制指令
VelSet 100,3000;
速度控制指令
ConfJ\\Off;
ConfL\\Off;
機器人運動控制指令
rReset_Out;
調用輸出信號復位例行程序
rHome;調用回Home點程序
Set do04StartDCM;
壓鑄機輸出給機器人可以取件信號
ENDPROC
PROC rExtracting()
機器人從壓鑄機取件工作程序
MoveJ pWaitDCM,vFast,z20,tGripper\\WObj:=wobjDCM;
機器人運行到等待位
WaitDI di02DoorOpen,1;
等待壓鑄機安全門打開
WaitDI di03DieOpen,1\\MaxTime:=6\\TimeFlag:=bDieOpenKO;
等待開模信號,最長等待時間6s,得到信號后將邏輯量置位為Flase,如果沒有得到信號則將邏輯量值為TRUE
IF bDieOpenKO=TRUE THEN
當邏輯量為TRUE時表示機器人沒有在合理的時間內得到開模信號,此時取件失敗
nErrPickPartNo:=1;
將取件失敗的數字量置為1
GOTO lErrPick;
調轉到錯誤取件標簽lErrPick處
ELSE
nErrPickPartNo:=0;
如取件成功,則將取件失敗的數字量置為0
ENDIF
Reset do04StartDCM;
復位機器人開始取件信號
MoveJ Offs(pPickDCM,nPickOff_X,nPickOff_Y,nPickOff_Z),vLow,z10,tGripper\\WObj:=wobjDCM;
MoveJ pPickDCM,vLow,fine,tGripper\\WObj:=wobjDCM;
機器人運行到取件目標點
rGripperClose;調用關閉夾爪例行程序
rSoftActive;調用軟伺服激活例行程序
Set do07EjectFWD;置為模具頂針頂出信號
WaitDI di06LsEjectFWD,1\\MaxTime:=4\\TimeFlag:=bEjectKo;
等待模具頂針頂出到位信號,時間4s,在該時間內得到信號則將邏輯量置為False
pPosOK:=CRobT(\\Tool:=tGripper\\WObj:=wobjDCM);
記錄機器人當前位置,并賦值給pPosOK
IF bEjectKo=TRUE THEN
當邏輯量為TRUE時,表示頂針頂出失敗,則此次取件失敗,機器人開始取件失敗處理
rSoftDeactive;
調用軟伺服失效例行程序
rGripperOpen;
調用夾爪打開例行程序
MoveL Offs(pPosOK,0,0,100),vLow,z10,tGripper\\WObj:=wobjDCM;
以之前記錄的目標點偏移
ELSE
當邏輯量為False時,取件成功,機器人開始取件成功處理
WaitTime 0.5;
rSoftDeactive;
調用軟伺服失效例行程序
WaitTime 0.5;
等待時間,讓軟伺服失效完成
MoveL Offs(pPosOK,0,0,200),v300,z10,tGripper\\WObj:=wobjDCM;
以之前記錄的目標點偏移
GripLoad LoadPart;
加載產品有效載荷
ENDIF
lErrPick:
錯誤處理
MoveJ pMoveOutDie,vLow,z10,tGripper\\WObj:=wobjDCM;
壓鑄機外等待點
Reset do07EjectFWD;
復位模具頂針頂出信號
ENDPROC
PROC rCheckPart()
機器人產品檢測工作程序
IF nErrPickPartNo=1 THEN
如果取件失敗,則回到Home點,輸出取件失敗脈沖信號
MoveJ pHome,vFast,fine,tGripper\\WObj:=wobjDCM;
PulseDO\\PLength:=0.2,do12Error;
RETURN ;
ENDIF
MoveJ pHome,vLow,z200,tGripper\\WObj:=wobjDCM;
Set do04StartDCM;
置位機器人開始取件信號
MoveJ pPartCheck,vLow,fine,tGripper\\WObj:=wobjCool;
產品檢測點
Set do06AtPartCheck;
置位相機可以檢測信號
WaitTime 3;
等待時間
WaitDI di04PartOK,1\\MaxTime:=5\\TimeFlag:=bPartOK;
等待產品檢測OK為1,最大等待時間5s,在該時間內得到信號則將邏輯量置為False,反之
ReSet do06AtPartCheck;
復位相機可以檢測信號
IF bPartOK=TRUE THEN
若產品檢測失敗
rRelDamagePart;調用機器人放置不良品例行程序
ELSE
若產品檢測成功
rCooling;調用機器人產品冷卻程序
ENDIF
ENDPROC
PROC rCooling()
機器人產品冷卻程序
TEST nRelPartNo
檢測產品放到冷卻臺的數量
CASE 1:
冷卻臺產品擺放位置1
MoveJ Offs(pRelPart1,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
運動到產品擺放位置1的Z方向偏移200mm的位置
MoveJ pRelPart1,vLow,fine,tGripper\\WObj:=wobjCool;
運動到產品擺放位置1
rGripperOpen;調用松開夾爪例行程序
MoveJ Offs(pRelPart1,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
運動到產品擺放位置1的Z方向偏移200mm的位置
CASE 2:
冷卻臺產品擺放位置2
MoveJ Offs(pRelPart2,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
MoveJ pRelPart2,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperOpen;
Movej Offs(pRelPart2,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
CASE 3:
冷卻臺產品擺放位置2
MoveJ Offs(pRelPart3,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
MoveJ pRelPart3,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperOpen;
MoveJ Offs(pRelPart3,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
CASE 4:
冷卻臺產品擺放位置2
MoveJ Offs(pRelPart4,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
MoveJ pRelPart4,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperOpen;
MoveJ Offs(pRelPart4,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
ENDTEST
nRelPartNo:=nRelPartNo+1;
產品放到冷卻臺的數量加1
IF nRelPartNo>4 THEN
若產品放到冷卻臺的數量超過4個
bFullOfCool:=TRUE;
將冷卻臺產品放滿布爾量賦值為TRUE
nRelPartNo:=1;
產品放到冷卻臺的位置號賦值為1
ENDIF
ENDPROC
PROC rRelGoodPart()
機器人放置良品例行程序
WaitDI di05CNVEmpty,1;
等待輸送鏈上無產品為1
IF bFullOfCool=TRUE THEN
若冷卻臺產品放滿邏輯量為真
IF nRelPartNo=1 THEN
若產品放到冷卻臺的位置為1號位,運動到產品擺放位置1,夾取冷卻好的產品
MoveJ Offs(pRelPart1,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
MoveJ pRelPart1,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperClose;
MoveJ Offs(pRelPart1,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
ELSEIF nRelPartNo=2 THEN
若產品放到冷卻臺的位置為2號位,運動到產品擺放位置1,夾取冷卻好的產品
MoveJ Offs(pRelPart2,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
MoveJ pRelPart2,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperClose;
MoveJ Offs(pRelPart2,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
ELSEIF nRelPartNo=3 THEN
若產品放到冷卻臺的位置為3號位,運動到產品擺放位置1,夾取冷卻好的產品
MoveJ Offs(pRelPart3,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
MoveJ pRelPart3,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperClose;
MoveJ Offs(pRelPart3,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
ELSEIF nRelPartNo=4 THEN
若產品放到冷卻臺的位置為4號位,運動到產品擺放位置1,夾取冷卻好的產品
MoveJ Offs(pRelPart4,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
MoveJ pRelPart4,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperClose;
MoveJ Offs(pRelPart4,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
ENDIF
WaitTime 0.2;等待0.2秒,防止CPU過載
ENDIF
MoveJ Offs(pRelCNV,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
運動到輸送鏈產品放置點上方
MoveL pRelCNV,vLow,fine,tGripper\\WObj:=wobjCool;
運動到輸送鏈產品放置點
rGripperOpen;
調用松開夾爪例行程序
MoveL Offs(pRelCNV,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
運動到輸送鏈產品放置點上方200mm
MoveL Offs(pRelCNV,0,0,300),vLow,z50,tGripper\\WObj:=wobjCool;
運動到輸送鏈產品放置點上方300mm
MoveJ Offs(pRelPart2,0,0,nCoolOffs_Z),vFast,z50,tGripper\\WObj:=wobjCool;
運動到產品擺放位置2上方200mm處
MoveJ pPartCheck,vFast,z100,tGripper\\WObj:=wobjCool;
運動到產品檢測位
MoveJ pHome,vFast,z100,tGripper\\WObj:=wobjDCM;
運動到安全點
ENDPROC
PROC rRelDamagePart()
機器人放置不良品例行程序
ConfJ\\off;關節(jié)軸配置功能關閉
MoveJ pHome,vLow,z20,tGripper\\WObj:=wobjCool;
運動至安全點
MoveJ pMoveOutDie,vLow,z20,tGripper\\WObj:=wobjCool;
運動到壓鑄機外過渡等待點
MoveJ pRelDaPart,vLow,fine,tGripper\\WObj:=wobjCool;
運動不良品放置點
rGripperOpen;調用松開夾爪例行程序
MoveL pMoveOutDie,vLow,z20,tGripper\\WObj:=wobjCool;
運動到壓鑄機外過渡等待點
ConfJ\\on;
關節(jié)軸配置功能打開
ENDPROC
FUNC bool bCurrentPos(robtarget ComparePos,INOUT tooldata TCP)
安全點位置檢測功能程序
VAR num Counter:=0;
VAR robtarget ActualPos;
ActualPos:=CRobT(\\Tool:=TCP\\WObj:=wobjDCM);
IF ActualPos.trans.x>ComparePos.trans.x-25 AND ActualPos.trans.x<ComparePos.trans.x+25 Counter:=Counter+1;
IF ActualPos.trans.y>ComparePos.trans.y-25 AND ActualPos.trans.y<ComparePos.trans.y+25 Counter:=Counter+1;
IF ActualPos.trans.z>ComparePos.trans.z-25 AND ActualPos.trans.z<ComparePos.trans.z+25 Counter:=Counter+1;
IF ActualPos.rot.q1>ComparePos.rot.q1-0.1 AND ActualPos.rot.q1<ComparePos.rot.q1+0.1 Counter:=Counter+1;
IF ActualPos.rot.q2>ComparePos.rot.q2-0.1 AND ActualPos.rot.q2<ComparePos.rot.q2+0.1 Counter:=Counter+1;
IF ActualPos.rot.q3>ComparePos.rot.q3-0.1 AND ActualPos.rot.q3<ComparePos.rot.q3+0.1 Counter:=Counter+1;
IF ActualPos.rot.q4>ComparePos.rot.q4-0.1 AND ActualPos.rot.q4<ComparePos.rot.q4+0.1 Counter:=Counter+1;
RETURN Counter=7;
ENDFUNC
PROC rCheckHomePos()
檢測機器人是否在Home點程序
VAR robtarget pActualPos1;
IF NOT bCurrentPos(pHome,tGripper) THEN
pActualpos1.trans.z:=pHome.trans.z;
MoveL pActualpos1,v100,z10,tGripper;
MoveL pHome,v100,fine,tGripper;
ENDIF
ENDPROC
PROC rReset_Out()
機器人復位輸出信號例行程序,在初始化程序中調用
Reset do04StartDCM;
Reset do06AtPartCheck;
Reset do07EjectFWD;
Reset do09E_Stop;
Reset do12Error;
Reset do03GripperOFF;
Reset do01RobInHome;
ENDPROC
PROC rCycleTime()
機器人計時例行程序
ClkStop clock1;
nCTime:=ClkRead(clock1);
TPWrite "the cycletime is "\\Num:=nCTime;
ClkReset clock1;
ClkStart clock1;
ENDPROC
PROC rSoftActive()
軟伺服激活例行程序
SoftAct 1,99;
機器人關節(jié)軸1,軟化度99%
SoftAct 2,100;
SoftAct 3,100;
SoftAct 4,95;
SoftAct 5,95;
SoftAct 6,95;
WaitTime 0.3;
ENDPROC
PROC rSoftDeactive()
軟同服失效例行程序
SoftDeact;
WaitTime 0.3;
ENDPROC
PROC rHome()
回Home點程序
MoveJ pHome,vFast,fine,tGripper\\WObj:=wobjDCM;
ENDPROC
PROC rGripperOpen()
夾爪松開例行程序
Reset do03GripperOFF;
Set do02GripperON;
WaitTime 0.3;
ENDPROC
PROC rGripperClose()
夾爪閉合例行程序
Set do03GripperOFF;
Reset do02GripperON;
WaitTime 0.3;
ENDPROC
PROC rReturnDCM()
機器人返回到取件安全位置程序
MoveJ pPartCheck,vFast,z100,tGripper\\WObj:=wobjCool;
MoveJ pHome,vFast,z100,tGripper\\WObj:=wobjDCM;
ENDPROC
ENDMODULE
以上就是關于pos機料主,ABB機器人壓鑄或CNC上下料的知識,后面我們會繼續(xù)為大家整理關于pos機料主的知識,希望能夠幫助到大家!
