Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Mainstate
- CASE #e_CurrentState OF
- #State_Idle: // Statement section case Idle
- #q_ArmIn := 1;
- #q_ArmOut := 0;
- #q_ConveyerBack := 0;
- #q_ConveyerFront := 0;
- #e_Q1State := #Light_Flash;
- #e_Q2State := #Light_Off;
- IF #i_StartButton AND NOT #i_AutoManualSwitch AND #i_EmergencyButton THEN
- #e_CurrentState := #State_Automatic; // Statement section IF
- ELSIF #i_StartButton AND #i_AutoManualSwitch AND #i_EmergencyButton THEN
- #e_CurrentState := #State_Manual;
- END_IF;
- #State_Automatic: // Statement section case Automatic
- #e_Q1State := #Light_On;
- #e_Q2State := #Light_Off;
- #q_StartLight := 1;
- "Automatic_DB"(i_ConveyerInSensor:="SensorStartCoveyer",
- i_ConveyerOutsensor:="SensorEndConveyer",
- i_PuckSensor:="SensorCheckPuck",
- i_MetalSensor:="SensorMetal",
- i_ArmSensor:="SensorCheckArm",
- i_BinSensor:="SensorBin",
- q_ConveyerFront=>#q_ConveyerFront,
- q_ConveyerBack=>#q_ConveyerBack,
- q_ArmIn=>#q_ArmIn,
- q_ArmOut=>#q_ArmOut,
- q_ErrorState=>#JunkTemp,
- q_ErrorFound=>#i_ErrorFound);
- IF NOT #i_StopButton AND #i_EmergencyButton THEN
- #q_StartLight := 0;
- #e_CurrentState := #State_Idle;// Statement section IF
- ELSIF #i_ErrorFound AND #i_EmergencyButton THEN
- #q_StartLight := 0;
- #e_CurrentState := #State_Error;
- ELSIF NOT #i_EmergencyButton THEN
- #q_StartLight := 0;
- #e_CurrentState := #State_Emergency;
- END_IF;
- #State_Manual: // Statement section case Manual
- #e_Q1State := #Light_Off;
- #e_Q2State := #Light_On;
- #q_StartLight := 1;
- IF NOT #i_StopButton AND #i_EmergencyButton THEN
- #q_StartLight := 0;
- #e_CurrentState := #State_Idle;// Statement section IF
- ELSIF NOT #i_EmergencyButton THEN
- #q_StartLight := 0;
- #e_CurrentState := #State_Emergency;
- END_IF;
- #State_Error: // Statement section case Error
- #e_Q1State := #Light_Off;
- #e_Q2State := #Light_Flash;
- #q_ResetLight := 1;
- IF NOT #i_EmergencyButton THEN
- #q_ResetLight := 0;
- #e_CurrentState := #State_Emergency;
- ELSIF #i_ResetButton AND #i_EmergencyButton THEN
- #q_ResetLight := 0;
- #e_CurrentState := #State_Automatic;
- END_IF;
- #State_Emergency: // Statement section case Emergency
- #q_ArmIn := 0;
- #q_ArmOut := 0;
- #q_ConveyerBack := 0;
- #q_ConveyerFront := 0;
- #e_Q1State := #Light_Flash;
- #e_Q2State := #Light_Flash;
- #q_ResetLight := 1;
- IF #i_EmergencyButton AND #i_ResetButton THEN
- #q_ResetLight := 0;
- #e_CurrentState := #State_Idle;
- END_IF;
- #State_Initial: // Statement section case Init
- IF #e_CurrentState = #State_Initial THEN
- #e_CurrentState := #State_Idle; // Statement section IF
- END_IF;
- END_CASE;
- CASE #e_Q1State OF
- #Light_Off:
- #q_LightQ1 := FALSE;
- #Light_On:
- #q_LightQ1 := TRUE;
- #Light_Flash:
- #e_FlashTimer(IN := NOT #e_FlashTimer.Q,
- PT := T#500MS);
- IF #e_FlashTimer.Q THEN
- #e_LightState := NOT #e_LightState;
- END_IF;
- #q_LightQ1 := #e_LightState;
- END_CASE;
- CASE #e_Q2State OF
- #Light_Off:
- #q_LightQ2 := FALSE;
- #Light_On:
- #q_LightQ2 := TRUE;
- #Light_Flash:
- #e_FlashTimer(IN := NOT #e_FlashTimer.Q,
- PT := T#500MS);
- IF #e_FlashTimer.Q THEN
- #e_LightState := NOT #e_LightState;
- END_IF;
- #q_LightQ2 := #e_LightState;
- END_CASE;
- // Automatic
- CASE #e_ProgramState OF
- #InitState: // Statement section case #eInitState
- #q_ArmIn := 1;
- #q_ArmOut := 0;
- #q_ErrorFound := 0;
- #q_ErrorState := 0;
- #e_ErrorState := 0;
- IF #e_PackageCount > 0 THEN
- #e_ProgramState := #ConveyorOn;
- ELSIF #e_PackageCount < 0 THEN
- #e_PackageCount := 0;
- ELSE
- #e_ProgramState := #ConveyorOff;
- END_IF
- ;
- #ConveyorOff: // Statement section case #eConveyorOff
- IF #t_Blink THEN
- #e_Timer(IN := NOT #e_Timer.Q,
- PT := T#1000MS);
- IF #e_Timer.Q THEN
- #t_Blink := 0;
- #q_ConveyerFront := #t_Blink;
- #q_ConveyerBack := #t_Blink;
- END_IF;
- ELSIF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN
- #t_SensorOn := 1;
- #t_SensorOnOld := 0;
- #e_ProgramState := #ConveyorOn;
- ELSIF #e_PackageCount > 0 THEN
- #e_ProgramState := #ConveyorOn;
- END_IF
- ;
- #ConveyorOn: // Statement section case #eConveyorOn
- #q_ConveyerFront := 1;
- #q_ConveyerBack := 0;
- #t_Blink := 1;
- IF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN
- #t_SensorOn := 1;
- #t_SensorOnOld := 0;
- ELSIF #i_MetalSensor THEN
- #e_ProgramState := #ArmOut;
- ELSIF NOT #i_ConveyerOutsensor AND #t_SensorOffOld THEN
- #t_SensorOff := 1;
- #t_SensorOffOld := 0;
- ELSIF #e_PackageCount < 0 THEN
- #e_PackageCount := 0;
- #e_ProgramState := #ErrorFound;
- END_IF
- ;
- #ArmOut: // Statement section case #eArmOut
- #q_ArmIn := 0;
- #q_ArmOut := 1;
- IF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN
- #t_SensorOn := 1;
- #t_SensorOnOld := 0;
- ELSIF NOT #i_BinSensor AND #t_SensorBinOld THEN
- #t_SensorBin := 1;
- #t_SensorBinOld := 0;
- #e_ProgramState := #ArmIn;
- ELSIF NOT #i_ConveyerOutsensor THEN
- #e_ErrorState := #PuckMissing;
- #e_ProgramState := #ErrorFound;
- END_IF
- ;
- #ArmIn: // Statement section case #eArmIn
- #q_ArmOut := 0;
- #q_ArmIn := 1;
- IF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN
- #t_SensorOn := 1;
- #t_SensorOnOld := 0;
- ELSIF NOT "SensorBin" AND NOT #t_Binfull THEN
- #t_Binfull := 1;
- ELSIF #e_PackageCount = 0 THEN
- #e_ProgramState := #ConveyorOff;
- ELSIF #e_PackageCount > 0 THEN
- #e_ProgramState := #ConveyorOn;
- END_IF
- ;
- #ErrorFound: // Statement section case #eErrorFound
- #e_ProgramState := #InitState;
- #q_ErrorFound := 1;
- #q_ErrorState := #e_ErrorState;
- ;
- END_CASE;
- IF #t_Binfull THEN
- #e_Timer(IN := NOT #e_Timer.Q,
- PT := T#1000MS);
- IF #e_Timer.Q AND NOT #i_BinSensor THEN
- #t_Binfull := 0;
- #e_ErrorState := #BinFull;
- #e_ProgramState := #ErrorFound;
- ELSIF #e_Timer.Q AND #i_BinSensor THEN
- #t_Binfull := 0;
- #e_ProgramState := #ConveyorOff;
- END_IF;
- END_IF;
- IF #t_SensorOff AND #i_ConveyerOutsensor THEN
- #e_PackageCount := #e_PackageCount - 1;
- #t_SensorOff := 0;
- #t_SensorOffOld := 1;
- IF #e_PackageCount = 0 THEN
- #e_ProgramState := #ConveyorOff;
- END_IF;
- ELSIF NOT #t_SensorOff AND NOT #t_SensorOffOld THEN
- #t_SensorOff := 0;
- #t_SensorOffOld := 1;
- END_IF;
- IF #t_SensorBin AND #i_BinSensor THEN
- #e_PackageCount := #e_PackageCount - 1;
- #t_SensorBin := 0;
- #t_SensorBinOld := 1;
- ELSIF NOT #t_SensorBin AND NOT #t_SensorBinOld THEN
- #t_SensorBin := 0;
- #t_SensorBinOld := 1;
- END_IF;
- IF #t_SensorOn AND #i_ConveyerInSensor THEN
- #e_PackageCount := #e_PackageCount + 1;
- #t_SensorOn := 0;
- #t_SensorOnOld := 1;
- ELSIF NOT #t_SensorOn AND NOT #t_SensorOnOld THEN
- #t_SensorOnOld := 1;
- #t_Blink := 0;
- #t_Binfull := 0;
- END_IF;
- //ErrorState
- CASE #i_ErrorState OF
- 1: // Statement section case 1
- ;
- 2: // Statement section case 2 to 4
- ;
- ELSE // Statement section ELSE
- ;
- END_CASE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement