第三题1.添加1个实轴,3个虚轴,建立2个程序,分别为整机回原,和自动程序2.触发愁机,回原按钮,4个钟依次定位到10,30,40,60的位置,输出回原亮成信号。3.按下启动按钮,并且有回原完或信号的时候,才可以自动运行,运行皮如下;利用4个轴,从轴1开始,每个轴依次走到下一个始的位置去,无限循环,当按下停止按钮,所有轴立马停止运行,握要启动,必须回原才能启动、 以下面这种为例在CODESYS的ST语言里做出来,不需要简化
GVL_0.MC_Power_0(
Axis:= shizhou,
Enable:= TRUE,
bRegulatorOn:= GVL_0.使能,
bDriveStart:= TRUE,
bRegulatorRealState=> GVL_0.使能状态,
Error=> GVL_0.使能报错,
ErrorID=> GVL_0.使能报错ID);
GVL_0.MC_Power_1(
Axis:= xuzhou1,
Enable:= TRUE,
bRegulatorOn:= GVL_0.使能1,
bDriveStart:= TRUE,
bRegulatorRealState=> GVL_0.使能状态1,
Error=> GVL_0.使能报错1,
ErrorID=> GVL_0.使能报错ID1);
GVL_0.MC_Power_2(
Axis:= xuzhou2,
Enable:= TRUE,
bRegulatorOn:= GVL_0.使能2,
bDriveStart:= TRUE,
bRegulatorRealState=> GVL_0.使能状态2,
Error=> GVL_0.使能报错2,
ErrorID=> GVL_0.使能报错ID2);
//点动
GVL_0.MC_Jog_0(
Axis:= shizhou,
JogForward:= GVL_0.正向运动,
JogBackward:= GVL_0.反向运动,
Velocity:= REAL_TO_LREAL(GVL_0.目标速度) ,
Acceleration:= REAL_TO_LREAL(GVL_0.加速度),
Deceleration:= REAL_TO_LREAL(GVL_0.h_f减速度),
Error=> GVL_0.h_f点动报错,
ErrorId=> GVL_0.h_f点动报错ID);
GVL_0.MC_Jog_1(
Axis:= xuzhou1,
JogForward:= GVL_0.正向运动2,
JogBackward:= GVL_0.反向运动2,
Velocity:= REAL_TO_LREAL(GVL_0.目标速度2) ,
Acceleration:= REAL_TO_LREAL(GVL_0.加速度2),
Deceleration:= REAL_TO_LREAL(GVL_0.h_f减速度2),
Error=> GVL_0.h_f点动报错2,
ErrorId=> GVL_0.h_f点动报错ID2);
GVL_0.MC_Jog_2(
Axis:= xuzhou2,
JogForward:= GVL_0.正向运动3,
JogBackward:= GVL_0.反向运动3,
Velocity:= REAL_TO_LREAL(GVL_0.目标速度3) ,
Acceleration:= REAL_TO_LREAL(GVL_0.加速度3),
Deceleration:= REAL_TO_LREAL(GVL_0.h_f减速度3),
Error=> GVL_0.h_f点动报错3,
ErrorId=> GVL_0.h_f点动报错ID3);
GVL_0.MC_Reset_0(
Axis:= shizhou,
Execute:= GVL_0.h_x复位,
Done=> GVL_0.h_x复位成功,
Error=> GVL_0.h_f复位报错,
ErrorID=> GVL_0.h_f复位报错ID);
GVL_0.MC_Reset_1(
Axis:= xuzhou1,
Execute:= GVL_0.h_x复位1,
Done=> GVL_0.h_x复位成功1,
Error=> GVL_0.h_f复位报错1,
ErrorID=> GVL_0.h_f复位报错ID1);
GVL_0.MC_Reset_2(
Axis:= xuzhou2,
Execute:= GVL_0.h_x复位2,
Done=> GVL_0.h_x复位成功2,
Error=> GVL_0.h_f复位报错2,
ErrorID=> GVL_0.h_f复位报错ID2);
//
GVL_0.MC_Stop_0(
Axis:= shizhou,
Execute:= GVL_0.h_x停止,
Deceleration:= REAL_TO_LREAL(GVL_0.h_f停止速度),
Done=> GVL_0.h_x停止成功,
Error=> GVL_0.h_f停止报错,
ErrorID=> GVL_0.h_f停止报错ID);
GVL_0.MC_Stop_1(
Axis:= xuzhou1,
Execute:= GVL_0.h_x停止1,
Deceleration:= REAL_TO_LREAL(GVL_0.h_f停止速度1),
Done=> GVL_0.h_x停止成功1,
Error=> GVL_0.h_f停止报错1,
ErrorID=> GVL_0.h_f停止报错ID1);
GVL_0.MC_Stop_2(
Axis:= xuzhou2,
Execute:= GVL_0.h_x停止2,
Deceleration:= REAL_TO_LREAL(GVL_0.h_f停止速度2),
Done=> GVL_0.h_x停止成功2,
Error=> GVL_0.h_f停止报错2,
ErrorID=> GVL_0.h_f停止报错ID2);
//
GVL_0.MC_Halt_0(
Axis:= shizhou,
Execute:= GVL_0.暂停,
Deceleration:= REAL_TO_LREAL(GVL_0.暂停速度),
Done=> GVL_0.暂停完成,
Error=> GVL_0.暂停报错,
ErrorID=> GVL_0.暂停报错ID);
GVL_0.MC_Halt_1(
Axis:= xuzhou1,
Execute:= GVL_0.暂停1,
Deceleration:= REAL_TO_LREAL(GVL_0.暂停速度1),
Done=> GVL_0.暂停完成1,
Error=> GVL_0.暂停报错1,
ErrorID=> GVL_0.暂停报错ID1);
GVL_0.MC_Halt_2(
Axis:= xuzhou2,
Execute:= GVL_0.暂停2,
Deceleration:= REAL_TO_LREAL(GVL_0.暂停速度2),
Done=> GVL_0.暂停完成2,
Error=> GVL_0.暂停报错2,
ErrorID=> GVL_0.暂停报错ID2);
//
GVL_0.MC_MoveVelocity_0(
Axis:= shizhou,
Execute:= GVL_0.h_x速度触发,
Velocity:= REAL_TO_LREAL(GVL_0.h_fv速度),
Acceleration:= REAL_TO_LREAL(GVL_0.h_fv加速度),
Deceleration:= REAL_TO_LREAL(GVL_0.h_fv减速度),
Direction:= GVL_0.h_i方向,
InVelocity=> GVL_0.h_x速度到达,
Error=> GVL_0.h_f速度报错,
ErrorID=> GVL_0.h_f速度报错ID);
GVL_0.MC_MoveVelocity_1(
Axis:= xuzhou1,
Execute:= GVL_0.h_x速度触发1,
Velocity:= REAL_TO_LREAL(GVL_0.h_fv速度1),
Acceleration:= REAL_TO_LREAL(GVL_0.h_fv加速度1),
Deceleration:= REAL_TO_LREAL(GVL_0.h_fv减速度1),
Direction:= GVL_0.h_i方向1,
InVelocity=> GVL_0.h_x速度到达1,
Error=> GVL_0.h_f速度报错1,
ErrorID=> GVL_0.h_f速度报错1ID);
GVL_0.MC_MoveVelocity_2(
Axis:= xuzhou2,
Execute:= GVL_0.h_x速度触发2,
Velocity:= REAL_TO_LREAL(GVL_0.h_fv速度2),
Acceleration:= REAL_TO_LREAL(GVL_0.h_fv加速度2),
Deceleration:= REAL_TO_LREAL(GVL_0.h_fv减速度2),
Direction:= GVL_0.h_i方向2,
InVelocity=> GVL_0.h_x速度到达2,
Error=> GVL_0.h_f速度报错2,
ErrorID=> GVL_0.h_f速度报错2ID);
GVL_0.MC_HOME(
Axis:= shizhou,
Execute:= GVL_0.回原,
Position:= REAL_TO_LREAL(GVL_0.回原位置),
Done=> GVL_0.回原成功,
Error=> GVL_0.回原报错,
ErrorID=> GVL_0.回原报错ID);
GVL_0.MC_HOME1(
Axis:= xuzhou1,
Execute:= GVL_0.回原1,
Position:= REAL_TO_LREAL(GVL_0.回原位置1),
Done=> GVL_0.回原成功1,
Error=> GVL_0.回原报错1,
ErrorID=> GVL_0.回原报错1ID);
GVL_0.MC_HOME2(
Axis:= xuzhou2,
Execute:= GVL_0.回原2,
Position:= REAL_TO_LREAL(GVL_0.回原位置2),
Done=> GVL_0.回原成功2,
Error=> GVL_0.回原报错2,
ErrorID=> GVL_0.回原报错2ID);
//
GVL_0.MC_MoveRelative_0(
Axis:= shizhou,
Execute:= GVL_0.hx相对触发1,
Distance:= REAL_TO_LREAL(GVL_0.h_f相对位置),
Velocity:= REAL_TO_LREAL(GVL_0.hf相对速度),
Acceleration:= REAL_TO_LREAL(GVL_0.h_iv1相对加速度),
Deceleration:= REAL_TO_LREAL(GVL_0.h_iv1相对减速度),
Done=>GVL_0.相对完成,
Error=> GVL_0.hf相对报错6,
ErrorID=> GVL_0.相对报错8ID);
GVL_0.MC_MoveRelative1(
Axis:= xuzhou1,
Execute:= GVL_0.hx相对触发,
Distance:= REAL_TO_LREAL(GVL_0.h_f相对位置1),
Velocity:= REAL_TO_LREAL(GVL_0.hf相对速度1),
Acceleration:= REAL_TO_LREAL(GVL_0.h_iv1相对加速度1),
Deceleration:= REAL_TO_LREAL(GVL_0.h_iv1相对减速度1),
Done=> GVL_0.相对完成1,
Error=> GVL_0.hf相对报错4,
ErrorID=> GVL_0.相对报错5ID);
GVL_0.MC_MoveRelative3(
Axis:= xuzhou2,
Execute:= GVL_0.hx相对触发3,
Distance:= REAL_TO_LREAL(GVL_0.h_f相对位置3),
Velocity:= REAL_TO_LREAL(GVL_0.hf相对速度3),
Acceleration:= REAL_TO_LREAL(GVL_0.h_iv1相对加速度3),
Deceleration:= REAL_TO_LREAL(GVL_0.h_iv1相对减速度3),
Done=> GVL_0.相对完成2,
Error=> GVL_0.hf相对报错,
ErrorID=> GVL_0.相对报错8ID );
//
GVL_0.MC_MoveAbsolute_0(
Axis:= shizhou,
Execute:= GVL_0.hx绝对触发1,
Position:= REAL_TO_LREAL(GVL_0.h_f绝对位置),
Velocity:= REAL_TO_LREAL(GVL_0.hf绝对速度),
Acceleration:= REAL_TO_LREAL(GVL_0.h_iv1绝对加速度),
Deceleration:= REAL_TO_LREAL(GVL_0.h_iv1绝对减速度),
Direction:= GVL_0.绝对方向,
Done=> GVL_0.绝对完成,
Error=> GVL_0.hf绝对报错2,
ErrorID=> GVL_0.绝对报错3ID);
GVL_0.MC_MoveAbsolute1(
Axis:= xuzhou1,
Execute:= GVL_0.hx绝对触发2,
Position:= REAL_TO_LREAL(GVL_0.h_f绝对位置2),
Velocity:= REAL_TO_LREAL(GVL_0.hf绝对速度2),
Acceleration:= REAL_TO_LREAL(GVL_0.h_iv1绝对加速度2),
Deceleration:= REAL_TO_LREAL(GVL_0.h_iv1绝对减速度2),
Direction:= GVL_0.绝对方向1,
Done=> GVL_0.绝对完成1,
Error=> GVL_0.hf绝对报错3,
ErrorID=>GVL_0.绝对报错4ID);
GVL_0.MC_MoveAbsolute2(
Axis:= xuzhou2,
Execute:= GVL_0.hx绝对触发3,
Position:= REAL_TO_LREAL(GVL_0.h_f绝对位置3),
Velocity:= REAL_TO_LREAL(GVL_0.hf绝对速度3),
Acceleration:= REAL_TO_LREAL(GVL_0.h_iv1绝对加速度3),
Deceleration:= REAL_TO_LREAL(GVL_0.h_iv1绝对减速度3),
Direction:= GVL_0.绝对方向3,
Done=> GVL_0.绝对完成3,
Error=> GVL_0.hf绝对报错,
ErrorID=>GVL_0.绝对报错ID);
CASE i步序 OF
0:
IF h_x启动 AND GVL_0.使能 AND GVL_0.使能1 AND GVL_0.使能2 THEN
循环次数:=循环次数2:=循环次数3:=0;
GVL_0.h_x停止:=GVL_0.h_x停止1:=GVL_0.h_x停止2:=FALSE;
i步序:=10;
END_IF;
10:
GVL_0.h_x停止:=FALSE;
GVL_0.h_i方向:=1;
GVL_0.h_x速度触发:=TRUE;
TON_0.IN:=TRUE;
IF TON_0.Q THEN
GVL_0.h_x速度触发:=FALSE;
TON_0.IN:=FALSE;
END_IF;
IF GVL_0.h_fweizhi>=100 THEN
GVL_0.h_x停止:=TRUE;
i步序:=20;
END_IF;
20:
GVL_0.h_x停止:=FALSE;
GVL_0.h_i方向:=-1;
i步序:=30;
30:
GVL_0.h_x速度触发:=TRUE;
TON_0.IN:=TRUE;
IF TON_0.Q THEN
GVL_0.h_x速度触发:=FALSE;
TON_0.IN:=FALSE;
END_IF;
IF GVL_0.h_fweizhi<=-100 THEN
GVL_0.h_x停止:=TRUE;
i步序:=40;
END_IF;
40:
循环次数:=循环次数+1;
IF 循环次数<3 THEN
i步序:=10;
ELSE
i步序:=50;
END_IF;
50:
GVL_0.h_x停止2:=FALSE;
GVL_0.h_i方向2:=1;
GVL_0.h_x速度触发2:=TRUE;
TON_0.IN:=TRUE;
IF TON_0.Q THEN
GVL_0.h_x速度触发2:=FALSE;
TON_0.IN:=FALSE;
END_IF;
IF GVL_0.h_fweizhi2>=200 THEN
GVL_0.h_x停止2:=TRUE;
i步序:=60;
END_IF;
60:
GVL_0.h_x停止2:=FALSE;
GVL_0.h_i方向2:=-1;
i步序:=70;
70:
GVL_0.h_x速度触发2:=TRUE;
TON_0.IN:=TRUE;
IF TON_0.Q THEN
GVL_0.h_x速度触发2:=FALSE;
TON_0.IN:=FALSE;
END_IF;
IF GVL_0.h_fweizhi2<=-200 THEN
GVL_0.h_x停止2:=TRUE;
i步序:=80;
END_IF;
80:
循环次数2:=循环次数2+1;
IF 循环次数2<2 THEN
i步序:=50;
ELSE
i步序:=90;
END_IF;
90:
GVL_0.h_i方向2:=1;
GVL_0.h_x速度触发2:=TRUE;
TON_0.IN:=TRUE;
IF TON_0.Q THEN
GVL_0.h_x速度触发2:=FALSE;
TON_0.IN:=FALSE;
END_IF;
IF GVL_0.h_fweizhi2>=300 THEN
GVL_0.h_x停止2:=TRUE;
i步序:=100;
END_IF;
100:
GVL_0.h_x停止2:=FALSE;
GVL_0.h_i方向2:=-1;
i步序:=110;
110:
GVL_0.h_x速度触发2:=TRUE;
TON_0.IN:=TRUE;
IF TON_0.Q THEN
GVL_0.h_x速度触发2:=FALSE;
TON_0.IN:=FALSE;
END_IF;
IF GVL_0.h_fweizhi2<=-300 THEN
GVL_0.h_x停止2:=TRUE;
i步序:=0;
END_IF;
END_CASE;
IF T_x停止 THEN
GVL_0.h_x速度触发:=GVL_0.h_x速度触发1:=GVL_0.h_x速度触发2:=FALSE;
GVL_0.h_x停止:=GVL_0.h_x停止2:=GVL_0.h_x停止2:=TRUE;
设备状态:=0;
i步序:=0;
END_IF
IF h_x暂停 AND i步序<>1000 THEN
GVL_0.h_x速度触发:=GVL_0.h_x速度触发1:=GVL_0.h_x速度触发2:=FALSE;
GVL_0.暂停:=GVL_0.暂停1:=GVL_0.暂停2:=TRUE;
步序暂存:=i步序;
i步序:=1000;
END_IF;
IF h_x启动 AND i步序=1000 THEN
GVL_0.暂停:=GVL_0.暂停1:=GVL_0.暂停2:=FALSE;
i步序:=步序暂存;
END_IF;
IF h_x回原 AND 设备状态=0 THEN
GVL_0.回原:=GVL_0.回原1:=GVL_0.回原2:=TRUE;
TON_0.IN:=TRUE;
IF TON_0.Q THEN
GVL_0.回原:=GVL_0.回原1:=GVL_0.回原2:=FALSE;
TON_0.IN:=FALSE;
i步序:=0;
END_IF;
END_IF