Advertisement
Guest User

SorterCode

a guest
Feb 19th, 2015
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Mainstate
  2.  
  3. CASE #e_CurrentState OF
  4.        
  5.     #State_Idle:  // Statement section case Idle
  6.         #q_ArmIn := 1;
  7.         #q_ArmOut := 0;
  8.         #q_ConveyerBack := 0;
  9.         #q_ConveyerFront := 0;
  10.         #e_Q1State := #Light_Flash;
  11.         #e_Q2State := #Light_Off;
  12.         IF #i_StartButton AND NOT #i_AutoManualSwitch AND #i_EmergencyButton THEN
  13.             #e_CurrentState := #State_Automatic; // Statement section IF
  14.         ELSIF #i_StartButton AND #i_AutoManualSwitch AND #i_EmergencyButton THEN
  15.             #e_CurrentState := #State_Manual;
  16.         END_IF;
  17.        
  18.     #State_Automatic:  // Statement section case Automatic
  19.         #e_Q1State := #Light_On;
  20.         #e_Q2State := #Light_Off;
  21.         #q_StartLight := 1;
  22.         "Automatic_DB"(i_ConveyerInSensor:="SensorStartCoveyer",
  23.                        i_ConveyerOutsensor:="SensorEndConveyer",
  24.                        i_PuckSensor:="SensorCheckPuck",
  25.                        i_MetalSensor:="SensorMetal",
  26.                        i_ArmSensor:="SensorCheckArm",
  27.                        i_BinSensor:="SensorBin",
  28.                        q_ConveyerFront=>#q_ConveyerFront,
  29.                        q_ConveyerBack=>#q_ConveyerBack,
  30.                        q_ArmIn=>#q_ArmIn,
  31.                        q_ArmOut=>#q_ArmOut,
  32.                        q_ErrorState=>#JunkTemp,
  33.                        q_ErrorFound=>#i_ErrorFound);
  34.        
  35.        
  36.         IF NOT #i_StopButton AND #i_EmergencyButton THEN
  37.             #q_StartLight := 0;
  38.             #e_CurrentState := #State_Idle;// Statement section IF
  39.         ELSIF #i_ErrorFound AND #i_EmergencyButton THEN
  40.             #q_StartLight := 0;
  41.             #e_CurrentState := #State_Error;
  42.         ELSIF NOT #i_EmergencyButton THEN
  43.             #q_StartLight := 0;
  44.             #e_CurrentState := #State_Emergency;
  45.         END_IF;
  46.        
  47.     #State_Manual:  // Statement section case Manual
  48.         #e_Q1State := #Light_Off;
  49.         #e_Q2State := #Light_On;
  50.         #q_StartLight := 1;
  51.        
  52.         IF NOT #i_StopButton AND #i_EmergencyButton THEN
  53.             #q_StartLight := 0;
  54.             #e_CurrentState := #State_Idle;// Statement section IF
  55.         ELSIF NOT #i_EmergencyButton THEN
  56.             #q_StartLight := 0;
  57.             #e_CurrentState := #State_Emergency;
  58.         END_IF;
  59.        
  60.     #State_Error:  // Statement section case Error
  61.         #e_Q1State := #Light_Off;
  62.         #e_Q2State := #Light_Flash;
  63.         #q_ResetLight := 1;
  64.        
  65.         IF NOT #i_EmergencyButton THEN
  66.             #q_ResetLight := 0;
  67.             #e_CurrentState := #State_Emergency;
  68.         ELSIF #i_ResetButton AND #i_EmergencyButton THEN
  69.             #q_ResetLight := 0;
  70.             #e_CurrentState := #State_Automatic;
  71.         END_IF;
  72.        
  73.     #State_Emergency:  // Statement section case Emergency
  74.         #q_ArmIn := 0;
  75.         #q_ArmOut := 0;
  76.         #q_ConveyerBack := 0;
  77.         #q_ConveyerFront := 0;
  78.         #e_Q1State := #Light_Flash;
  79.         #e_Q2State := #Light_Flash;
  80.         #q_ResetLight := 1;
  81.         IF #i_EmergencyButton AND #i_ResetButton THEN
  82.             #q_ResetLight := 0;
  83.             #e_CurrentState := #State_Idle;
  84.         END_IF;
  85.        
  86.     #State_Initial:  // Statement section case Init
  87.         IF #e_CurrentState = #State_Initial THEN
  88.             #e_CurrentState := #State_Idle; // Statement section IF
  89.         END_IF;
  90. END_CASE;
  91.  
  92. CASE #e_Q1State OF
  93.     #Light_Off:
  94.         #q_LightQ1 := FALSE;
  95.     #Light_On:
  96.         #q_LightQ1 := TRUE;
  97.     #Light_Flash:
  98.         #e_FlashTimer(IN := NOT #e_FlashTimer.Q,
  99.                       PT := T#500MS);
  100.        
  101.         IF #e_FlashTimer.Q THEN
  102.             #e_LightState := NOT #e_LightState;
  103.         END_IF;
  104.         #q_LightQ1 := #e_LightState;
  105. END_CASE;
  106.  
  107. CASE #e_Q2State OF
  108.     #Light_Off:
  109.         #q_LightQ2 := FALSE;
  110.     #Light_On:
  111.         #q_LightQ2 := TRUE;
  112.     #Light_Flash:
  113.         #e_FlashTimer(IN := NOT #e_FlashTimer.Q,
  114.                       PT := T#500MS);
  115.        
  116.         IF #e_FlashTimer.Q THEN
  117.             #e_LightState := NOT #e_LightState;
  118.         END_IF;
  119.         #q_LightQ2 := #e_LightState;
  120. END_CASE;
  121.  
  122. // Automatic
  123.  
  124. CASE #e_ProgramState OF
  125.     #InitState:  // Statement section case #eInitState
  126.         #q_ArmIn := 1;
  127.         #q_ArmOut := 0;
  128.         #q_ErrorFound := 0;
  129.         #q_ErrorState := 0;
  130.         #e_ErrorState := 0;
  131.         IF #e_PackageCount > 0 THEN
  132.             #e_ProgramState := #ConveyorOn;
  133.         ELSIF #e_PackageCount < 0 THEN
  134.             #e_PackageCount := 0;
  135.         ELSE
  136.             #e_ProgramState := #ConveyorOff;
  137.         END_IF
  138.         ;
  139.     #ConveyorOff:  // Statement section case #eConveyorOff
  140.         IF #t_Blink THEN
  141.             #e_Timer(IN := NOT #e_Timer.Q,
  142.                     PT := T#1000MS);
  143.             IF #e_Timer.Q THEN
  144.                 #t_Blink := 0;
  145.                 #q_ConveyerFront := #t_Blink;
  146.                 #q_ConveyerBack := #t_Blink;
  147.             END_IF;
  148.         ELSIF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN
  149.             #t_SensorOn := 1;
  150.             #t_SensorOnOld := 0;
  151.             #e_ProgramState := #ConveyorOn;
  152.         ELSIF #e_PackageCount > 0 THEN
  153.             #e_ProgramState := #ConveyorOn;
  154.         END_IF
  155.         ;
  156.     #ConveyorOn:  // Statement section case #eConveyorOn
  157.         #q_ConveyerFront := 1;
  158.         #q_ConveyerBack := 0;
  159.         #t_Blink := 1;
  160.         IF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN
  161.             #t_SensorOn := 1;
  162.             #t_SensorOnOld := 0;
  163.         ELSIF #i_MetalSensor THEN
  164.             #e_ProgramState := #ArmOut;
  165.         ELSIF NOT #i_ConveyerOutsensor AND #t_SensorOffOld THEN
  166.             #t_SensorOff := 1;
  167.             #t_SensorOffOld := 0;
  168.         ELSIF #e_PackageCount < 0 THEN
  169.             #e_PackageCount := 0;
  170.             #e_ProgramState := #ErrorFound;
  171.         END_IF
  172.         ;
  173.     #ArmOut:  // Statement section case #eArmOut
  174.         #q_ArmIn := 0;
  175.         #q_ArmOut := 1;
  176.         IF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN
  177.             #t_SensorOn := 1;
  178.             #t_SensorOnOld := 0;
  179.         ELSIF NOT #i_BinSensor AND #t_SensorBinOld THEN
  180.             #t_SensorBin := 1;
  181.             #t_SensorBinOld := 0;
  182.             #e_ProgramState := #ArmIn;
  183.         ELSIF NOT #i_ConveyerOutsensor THEN
  184.             #e_ErrorState := #PuckMissing;
  185.             #e_ProgramState := #ErrorFound;
  186.         END_IF
  187.         ;
  188.     #ArmIn:  // Statement section case #eArmIn
  189.         #q_ArmOut := 0;
  190.         #q_ArmIn := 1;
  191.         IF NOT #i_ConveyerInSensor AND #t_SensorOnOld THEN
  192.             #t_SensorOn := 1;
  193.             #t_SensorOnOld := 0;
  194.         ELSIF NOT "SensorBin" AND NOT #t_Binfull THEN
  195.             #t_Binfull := 1;
  196.         ELSIF #e_PackageCount = 0 THEN
  197.             #e_ProgramState := #ConveyorOff;
  198.         ELSIF #e_PackageCount > 0 THEN
  199.             #e_ProgramState := #ConveyorOn;
  200.         END_IF
  201.         ;
  202.     #ErrorFound:  // Statement section case #eErrorFound
  203.         #e_ProgramState := #InitState;
  204.         #q_ErrorFound := 1;
  205.         #q_ErrorState := #e_ErrorState;
  206.         ;
  207. END_CASE;
  208.  
  209. IF #t_Binfull THEN
  210.     #e_Timer(IN := NOT #e_Timer.Q,
  211.             PT := T#1000MS);
  212.    
  213.     IF #e_Timer.Q AND NOT #i_BinSensor THEN
  214.         #t_Binfull := 0;
  215.         #e_ErrorState := #BinFull;
  216.         #e_ProgramState := #ErrorFound;
  217.     ELSIF #e_Timer.Q AND #i_BinSensor THEN
  218.         #t_Binfull := 0;
  219.         #e_ProgramState := #ConveyorOff;
  220.     END_IF;
  221. END_IF;
  222.  
  223. IF #t_SensorOff AND #i_ConveyerOutsensor THEN
  224.     #e_PackageCount := #e_PackageCount - 1;
  225.     #t_SensorOff := 0;
  226.     #t_SensorOffOld := 1;
  227.     IF #e_PackageCount = 0 THEN
  228.         #e_ProgramState := #ConveyorOff;
  229.     END_IF;
  230. ELSIF NOT #t_SensorOff AND NOT #t_SensorOffOld THEN
  231.     #t_SensorOff := 0;
  232.     #t_SensorOffOld := 1;
  233. END_IF;
  234.  
  235. IF #t_SensorBin AND #i_BinSensor THEN
  236.     #e_PackageCount := #e_PackageCount - 1;
  237.     #t_SensorBin := 0;
  238.     #t_SensorBinOld := 1;
  239. ELSIF NOT #t_SensorBin AND NOT #t_SensorBinOld THEN
  240.     #t_SensorBin := 0;
  241.     #t_SensorBinOld := 1;
  242. END_IF;
  243.  
  244. IF #t_SensorOn AND #i_ConveyerInSensor THEN
  245.     #e_PackageCount := #e_PackageCount + 1;
  246.     #t_SensorOn := 0;
  247.     #t_SensorOnOld := 1;
  248. ELSIF NOT #t_SensorOn AND NOT #t_SensorOnOld THEN
  249.     #t_SensorOnOld := 1;
  250.     #t_Blink := 0;
  251.     #t_Binfull := 0;
  252. END_IF;
  253.  
  254. //ErrorState
  255.  
  256. CASE #i_ErrorState OF
  257.     1:  // Statement section case 1
  258.         ;
  259.     2:  // Statement section case 2 to 4
  260.         ;
  261.     ELSE  // Statement section ELSE
  262.         ;
  263. END_CASE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement