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;