void _CYCLIC ProgramCyclic(void)
{
// Blender on
switch (gPlateTank[0].Status.SwingStep) //循环语句
{
case 0:
gPlateTank[0].ValveOut.Swing_ON = 0;
if (1 == EDGEPOS(gPlateTank[0].Cmd.Swing,Plate_Cmd_P_Buff[0].Swing))
{
if (gPlateTank[0].SensorIn.LV01_L)
{
gPlateTank[0].Status.SwingStep = 10; //上升沿触发,跳转至case 10
}
else
{
gImply = 1; // Level too low, pls Supply
gPlateTank[0].Cmd.Swing = 0;
}
}
break;
case 10:
gPlateTank[0].ValveOut.Swing_ON = 1; //Swing_Pos1 to Swing_Pos2 气缸动作,跳转至case 20
gPlateTank[0].Status.SwingStep = 20; //此处刚装好,启动程序,气缸动作后,位置应该在Swing_Pos2上,后续程序才正常运行
break;
case 20:
if (1 == gPlateTank[0].SensorIn.Swing_Pos2)
{
TON_10ms_Swing.IN = 1; //Delay 延时气缸动作
gPlateTank[0].Status.SwingStep = 30;
}
break;
//从case 10 转至 case 20时存在bug,如果Pos1 与Pos2 初始位置对调,会导致此处跳出循环,程序中断。
case 30:
if (TON_10ms_Swing.Q) //Delay OK 延时定时器触发
{
TON_10ms_Swing.IN = 0; //清零延时定时器
gPlateTank[0].ValveOut.Swing_ON = 0; //Swing_Pos2 to Swing_Pos1 气缸动作,跳转至case 40
gPlateTank[0].Status.SwingStep = 40;
}
break;
case 40:
if (1 == gPlateTank[0].SensorIn.Swing_Pos1) //位置信号触发,延时定时器置位,跳转至case 50
{
TON_10ms_Swing.IN = 1; //Delay
gPlateTank[0].Status.SwingStep = 50;
}
break;
case 50:
if (TON_10ms_Swing.Q) //Delay OK 延时定时器触发 ,跳转至case 10 ,此时气缸应该在SensorIn.Swing_Pos1位置
{
TON_10ms_Swing.IN = 0;
gPlateTank[0].Status.SwingStep = 10;
}
break;
}
gPlateTank[0].ParaAct.tSwingDly = TON_10ms_Swing.ET;
if (1 == EDGENEG(gPlateTank[0].Cmd.Swing,Plate_Cmd_N_Buff[0].Swing))
{
gPlateTank[0].Status.SwingStep = 0;
TON_10ms_Swing.IN = 0;
}
/Call Timer FB/
TON_10ms_Swing.PT = gPlateTank[0].ParaSet.tSwingDly; //气缸摆动延时参数
TON_10ms(&TON_10ms_Swing);
}