智趣黄sir
级别: 正式会员
精华主题: 0
发帖数量: 60 个
工控威望: 93 点
下载积分: 1738 分
在线时间: 26(小时)
注册时间: 2023-07-06
最后登录: 2024-12-17
查看智趣黄sir的 主题 / 回贴
楼主  发表于: 4天前
1,采用汇川的EASy521,程序想实现自动切手动,只动气缸,怕操作者移动轴,因为轴如果移动的话,没法监测到是否移动,再切回自动的话,会导致撞车。
本人的思路是如以下程序,切到手动的M3下降沿,记录当前位置,再切回自动,进行差值计算,只能实现部分,还请各位大神指点。M3是自动模式,M4是自动运行中。现在的问题是可以实现部分功能,但是拍急停的话,就会出现报警,因为急停拍下后,各个轴就立即停止。


自动模式下降沿(CLK := M3,Q => );
IF 自动模式下降沿.Q THEN
    X自动前位置old:=X_Axis.fActPosition;
    Y自动前位置old:=Y_Axis.fActPosition;
    Z自动前位置old:=Z_Axis.fActPosition;
    L自动前位置old:=Lift_Axis.fActPosition;
END_IF;

自动模式上升沿(CLK := M4 ,Q => );
IF 自动模式上升沿.Q then
    X自动前位置new:=X_Axis.fActPosition;
    Y自动前位置new:=Y_Axis.fActPosition;
    Z自动前位置new:=Z_Axis.fActPosition;
    L自动前位置new:=Lift_Axis.fActPosition;

    X自动前位置差值:=X自动前位置new-X自动前位置old;
    X自动前位置点位差值:=X自动前位置new-POSTION_X[X_Axis_AutoAbNum];
    X自动前位置差值绝对值:=ABS(X自动前位置差值);
    X自动前位置点位差值绝对值:=ABS(X自动前位置点位差值);

    Y自动前位置差值:=Y自动前位置new-Y自动前位置old;
    Y自动前位置点位差值:=Y自动前位置new-POSTION_Y[Y_Axis_AutoAbNum];
    Y自动前位置差值绝对值:=ABS(Y自动前位置差值);
    Y自动前位置点位差值绝对值:=ABS(Y自动前位置点位差值);
    
        Z自动前位置差值:=Z自动前位置new-Z自动前位置old;
    Z自动前位置点位差值:=Z自动前位置new-POSTION_Z[Z_Axis_AutoAbNum];
    Z自动前位置差值绝对值:=ABS(Z自动前位置差值);
    Z自动前位置点位差值绝对值:=ABS(Z自动前位置点位差值);
    
        L自动前位置差值:=L自动前位置new-L自动前位置old;
    L自动前位置差值绝对值:=ABS(L自动前位置差值);

END_IF;

IF M4=true AND X自动前位置差值绝对值>E0.5  AND X自动前位置点位差值绝对值>E0.5 THEN
           Alarm[86]:=TRUE;
END_IF;
IF M4=true AND Y自动前位置差值绝对值>E0.5  AND Y自动前位置点位差值绝对值>E0.5 THEN
           Alarm[87]:=TRUE;
END_IF;
IF M4=true AND Z自动前位置差值绝对值>E0.5  AND Z自动前位置点位差值绝对值>E0.5 THEN
           Alarm[88]:=TRUE;
END_IF;
IF M4=true AND L自动前位置差值绝对值>E0.5  THEN
           Alarm[89]:=TRUE;
END_IF;
nightblueblu
道阻且长,穷且益坚。
级别: 论坛先锋
精华主题: 0
发帖数量: 1025 个
工控威望: 1848 点
下载积分: 258 分
在线时间: 1127(小时)
注册时间: 2017-02-09
最后登录: 2024-12-19
查看nightblueblu的 主题 / 回贴
1楼  发表于: 4天前
常规思路,没啥问题,这么写虽然复杂却没有任何问题。
还有一种就是,轴定位全部使用绝对位置,移动也就移动了,只要恢复后检测轴移动过程中有没有干涉就可以了,一般轴移动过程中的干涉大致就是些气缸动作不到位,你把气缸的位置检测作为轴移动的条件就可以
至于急停,急停了就重新复位再来,急停式紧急情况下使用,不是当作普通的停止使用,急停最大程度的保护人员、设备、产品,不是随意使用的玩意儿
Your happiness is everything.