智趣黃sir
級別: 正式會員
|
1,采用匯川的EASy521,程序想實現(xiàn)自動切手動,只動氣缸,怕操作者移動軸,因為軸如果移動的話,沒法監(jiān)測到是否移動,再切回自動的話,會導(dǎo)致撞車。 本人的思路是如以下程序,切到手動的M3下降沿,記錄當(dāng)前位置,再切回自動,進(jìn)行差值計算,只能實現(xiàn)部分,還請各位大神指點。M3是自動模式,M4是自動運行中。現(xiàn)在的問題是可以實現(xiàn)部分功能,但是拍急停的話,就會出現(xiàn)報警,因為急停拍下后,各個軸就立即停止。 自動模式下降沿(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; |
---|---|
|
payfsl
級別: 工控俠客
|
您的程序邏輯是在自動模式切換到手動模式時記錄軸的位置,然后從手動模式切換回自動模式時計算位置差值,如果差值超過設(shè)定的閾值,則觸發(fā)報警。這個邏輯是合理的,但是您提到的問題是在急停情況下會出現(xiàn)報警,因為急停會導(dǎo)致軸立即停止,這可能會導(dǎo)致位置差值計算出現(xiàn)異常。 為了解決這個問題,您可以考慮以下幾個步驟: 1. **增加急停狀態(tài)檢測**:在您的程序中增加一個變量來檢測急停狀態(tài),當(dāng)急停按鈕被按下時,這個變量會被設(shè)置為真。 2. **在急停狀態(tài)下跳過位置差值計算**:在您的程序中,當(dāng)檢測到急停狀態(tài)時,跳過位置差值的計算和報警觸發(fā)。 3. **急停恢復(fù)后重置位置**:當(dāng)急停狀態(tài)被解除后,重置軸的位置記錄,以便下一次從手動切換到自動時能夠正確計算位置差值。 以下是修改后的程序示例: ```pascal VAR 急停狀態(tài): BOOL; (* 急停狀態(tài)標(biāo)志 *) X自動前位置old: REAL; Y自動前位置old: REAL; Z自動前位置old: REAL; L自動前位置old: REAL; X自動前位置new: REAL; Y自動前位置new: REAL; Z自動前位置new: REAL; L自動前位置new: REAL; X自動前位置差值: REAL; Y自動前位置差值: REAL; Z自動前位置差值: REAL; L自動前位置差值: REAL; X自動前位置點位差值: REAL; Y自動前位置點位差值: REAL; Z自動前位置點位差值: REAL; X自動前位置差值絕對值: REAL; Y自動前位置差值絕對值: REAL; Z自動前位置差值絕對值: REAL; L自動前位置差值絕對值: REAL; X自動前位置點位差值絕對值: REAL; Y自動前位置點位差值絕對值: REAL; Z自動前位置點位差值絕對值: REAL; END_VAR 自動模式下降沿(CLK := M3, Q => ); IF 自動模式下降沿.Q THEN IF NOT 急停狀態(tài) THEN X自動前位置old := X_Axis.fActPosition; Y自動前位置old := Y_Axis.fActPosition; Z自動前位置old := Z_Axis.fActPosition; L自動前位置old := Lift_Axis.fActPosition; END_IF; END_IF; 自動模式上升沿(CLK := M4, Q => ); IF 自動模式上升沿.Q THEN IF NOT 急停狀態(tài) 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自動前位置差值); 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; END_IF; END_IF; (* 急停按鈕被按下時設(shè)置急停狀態(tài) *) 急停按鈕按下(CLK := E-Stop, Q => ); IF 急停按鈕按下.Q THEN 急停狀態(tài) := TRUE; END_IF; (* 急停按鈕釋放后重置急停狀態(tài)和軸位置 *) 急停按鈕釋放(CLK := E-Stop, Q => ); IF 急停按鈕釋放.Q THEN 急停狀態(tài) := FALSE; X自動前位置old := X_Axis.fActPosition; Y自動前位置old := Y_Axis.fActPosition; Z自動前位置old := Z_Axis.fActPosition; L自動前位置old := Lift_Axis.fActPosition; END_IF; ``` 請注意,您需要根據(jù)您的實際硬件和軟件環(huán)境調(diào)整上述代碼。希望這些修改能夠幫助您解決問題。 |
|
---|---|---|
|