ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABB 机械手模板二

2022-08-24 13:31:57  阅读:146  来源: 互联网

标签:ABB rot isAtHomePos WaitTime 机械手 PLC D2 actualPos 模板


这种模板适合把机器人当作一套运动控制单元,顺控逻辑放在PLC里,机器人只做动作逻辑。机器人和PLC通讯可以用profinet,或直接用电缆连接。

下面是PLC和机械手通讯用到的两个任务信号:

信号 说明
D2_Gi_5_8_TaskReceive 机械手从PLC接收的任务号
D2_Go5_8_TaskReceived 机械手发给PLC当前完成的任务号

机械手在接受D2_Gi_5_8_TaskReceive任务号后,执行动作,完成后把D2_Go5_8_TaskReceived的值设置成刚执行的任务号,告诉PLC,任务已完成。PLC判断发送任务号和接受任务号相等,知道任务已完成,置D2_Gi_5_8_TaskReceive为零,机械手执行D2_Go5_8_TaskReceived置零,这一步其实是多余的,主要是保证安全。机械手再次等待PLC的下次任务号。

机械手程序比较简单,大部分工作在PLC侧。PLC侧的顺控程序可以看我以前的博客。在此不再赘述。

MODULE MainModule
    PROC main()

        Init;
        WHILE TRUE DO
            WaitUntil D2_Gi_5_8_TaskReceive<>0;
            WaitTime 0.1;
            TEST D2_Gi_5_8_TaskReceive
            CASE 1:
                WaitTime 1;
                ! 这些为子程序,需要在后面实现机器人动作
                PickButtomCover;   
            CASE 2:
                WaitTime 1;
                PutButtomCover;  
            CASE 3:
                WaitTime 1;
                PickTopCover;    
            CASE 4:
                WaitTime 1;
                PutTopCover;   
            CASE 5:
                WaitTime 1;
                PickEndIterms;    
            CASE 6:
                WaitTime 1;
                PutOk;           
            CASE 7:
                WaitTime 1;
                PutNG;            
            DEFAULT:
                TPWrite "wrong task step";
                WaitTime WAIT_MAX;
            ENDTEST
            SetGO D2_Go5_8_TaskReceived, D2_Gi_5_8_TaskReceive;
            WaitGI D2_Gi_5_8_TaskReceive, 0;
            SetGO D2_Go5_8_TaskReceived, 0;
        ENDWHILE

    ENDPROC

    PROC Init()

        Reset do_01;
        Reset do_02;
        SetGO D2_Go5_8_TaskReceived,0;
        GoHome;
        
    ENDPROC

    PROC GoHome()
        VAR robtarget pactualPos;
        IF NOT CheckAtHomePos(pHome,Tool_Sucker) THEN
            pactualPos:=CRobT(\Tool:=Tool_Sucker\WObj:=wobj0);
            MoveL Offs(pactualPos,0,0,100),v200,z10,Tool_Sucker;
            MoveJ pHome,v1000,fine,Tool_Sucker;
        ENDIF
    ENDPROC

    FUNC bool CheckAtHomePos(robtarget comparePos,INOUT tooldata TCP)
        VAR robtarget actualPos;
        VAR bool isAtHomePos:=TRUE;
        actualPos:=CRobT(\Tool:=TCP\Wobj:=wobj0);

        IF actualPos.trans.x<comparePos.trans.x-200 OR actualPos.trans.x>comparePos.trans.x+200 THEN
            isAtHomePos:=FALSE;
        ELSEIF actualPos.trans.y<comparePos.trans.y-200 OR actualPos.trans.y>comparePos.trans.y+200 THEN
            isAtHomePos:=FALSE;
        ELSEIF actualPos.trans.z<comparePos.trans.z-200 OR actualPos.trans.z>comparePos.trans.z+200 THEN
            isAtHomePos:=FALSE;
        ELSEIF actualPos.rot.q1<comparePos.rot.q1-200 OR actualPos.rot.q1>comparePos.rot.q1+200 THEN
            isAtHomePos:=FALSE;
        ELSEIF actualPos.rot.q2<comparePos.rot.q2-200 OR actualPos.rot.q2>comparePos.rot.q2+200 THEN
            isAtHomePos:=FALSE;
        ELSEIF actualPos.rot.q3<comparePos.rot.q3-200 OR actualPos.rot.q3>comparePos.rot.q3+200 THEN
            isAtHomePos:=FALSE;
        ELSEIF actualPos.rot.q4<comparePos.rot.q4-200 OR actualPos.rot.q4>comparePos.rot.q4+200 THEN
            isAtHomePos:=FALSE;
        ENDIF

        RETURN isAtHomePos;

    ENDFUNC

ENDMODULE

标签:ABB,rot,isAtHomePos,WaitTime,机械手,PLC,D2,actualPos,模板
来源: https://www.cnblogs.com/TomDing/p/16619502.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有