Advertisement
Guest User

FB_CONV

a guest
Aug 22nd, 2016
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SCL 10.75 KB | None | 0 0
  1. //Reset flags
  2. IF #Inputs.ResetButton OR #Master.Reset THEN
  3.     #tStartFlag := FALSE;
  4.     #tStartFlag2 := FALSE;
  5. END_IF;
  6.  
  7. #tControl := #Control;//Get current status of VFD control word
  8. #tControl.DecRamp := #Settings.ConveyorDecRamp;
  9. #tControl.AccRamp := #Settings.ConveyorAccRamp;
  10. //MANUAL----------------------------------------------------------------------------------------------------------------
  11. //**********************************************************************************************************************
  12. IF NOT #Inputs.SW_Auto AND "FB_HMI_DB".MAN_Conveyor AND "MAN_Screen" AND NOT #Alarms.Active THEN
  13.     "FC_VALUE_SCALE"(EngUnitsMax := 2160,
  14.                      EngUnitsMin := 0.01,
  15.                      InputRaw := #Settings.SpeedConveyor,
  16.                      InputRawMin := 1,
  17.                      InputRawMax := 25.8,
  18.                      ScaledValue => #tScale);
  19.     #Manual := TRUE;
  20.     IF #Inputs.CON_Drive_Reverse THEN
  21.         #tSpeed := REAL_TO_INT(#tScale);
  22.     ELSIF #Inputs.CON_Drive_Forward THEN
  23.         #tSpeed := REAL_TO_INT(#tScale);
  24.         #tSpeed := #tSpeed * -1;
  25.     END_IF;
  26. ELSE
  27.     #Manual := FALSE;
  28. END_IF;
  29.  
  30. //AUTOMATIC-------------------------------------------------------------------------------------------------------------
  31. //**********************************************************************************************************************
  32.  
  33. //Complete handshake and enable transfer    
  34. IF #Trolley.Auto AND #Trolley.InPosition AND (#Master.JobType > 0 AND #Master.JobType < 5) AND NOT #Alarms.Active AND "DB_PROFIDRIVE_DRIVE".STATUS.Speed <= 0 AND NOT #Inputs.CON_Drive_Brake THEN
  35.     "FC_CONVEYOR_HANDSHAKE"(Enable := #Master.JobEnable AND #Trolley.Block = "DB_MASTER".Navigation.Destination.Final,
  36.                             Auto := #Trolley.Auto,
  37.                             Occupied := #Trolley.Occupied,
  38.                             InPosition := #Trolley.InPosition,
  39.                             JobType := #Master.JobType,
  40.                             EnableTransfer => #tTransfer); //Allow transfer
  41. ELSE
  42.     #tTransfer := FALSE;
  43.     "DB_STATUS".Handshake.Load.Ready := FALSE;
  44.     "DB_STATUS".Handshake.Load.Running := FALSE;
  45.     "DB_STATUS".Handshake.Unload.Ready := FALSE;
  46.     "DB_STATUS".Handshake.Unload.Running := FALSE;
  47. END_IF;
  48.  
  49. IF #tTransfer THEN
  50.     "FC_VALUE_SCALE"(EngUnitsMax := 2160,
  51.                           EngUnitsMin := 0.01,
  52.                           InputRaw := #Settings.SpeedConveyor,
  53.                           InputRawMin := 1,
  54.                           InputRawMax := 25.8,
  55.                           ScaledValue => #tScale);
  56.     //Speed converted from velocity                        
  57.     #tSpeed := REAL_TO_INT(#tScale);
  58.    
  59.    
  60.     //1=Load from left, 2=Load from right, 3=Unload to left, 4=Unload to right, 5=Position and end mission
  61.     CASE #Master.JobType OF
  62.         1:
  63.             #tStart := #Inputs.PE_Pallet_OH_Left;
  64.             #tEnd := #Inputs.PE_Pallet_OH_Right;
  65.             #tStart2 := #Inputs.PE_Pallet_Stop_Left;
  66.             #tStop := #Inputs.PE_Pallet_Stop_Right;
  67.             #tSpeed := #tSpeed * -1; //Reverse speed;
  68.         2:
  69.             #tStart := #Inputs.PE_Pallet_OH_Right;
  70.             #tEnd := #Inputs.PE_Pallet_OH_Left;
  71.             #tStart2 := #Inputs.PE_Pallet_Stop_Right;
  72.             #tStop := #Inputs.PE_Pallet_Stop_Left;
  73.         3:
  74.             #tStart := #Inputs.PE_Pallet_OH_Left;
  75.             #tStop := #Inputs.PE_Pallet_OH_Right;
  76.         4:
  77.             #tStart := #Inputs.PE_Pallet_OH_Right;
  78.             #tStop := #Inputs.PE_Pallet_OH_Left;
  79.             #tSpeed := #tSpeed * -1; //Reverse speed              
  80.         ELSE:
  81.             //Invalid job type
  82.             IF #Master.JobType <> 5 THEN
  83.                 #tControl.Enable := FALSE;
  84.                 #tControl.SpeedSet := 0;
  85.             END_IF;
  86.     END_CASE;
  87. ELSE
  88.    // #tStartFlag := FALSE;                                               //Reset flags when we lose tTransfer
  89.     #tStartFlag2 := FALSE;
  90.     #LoadComplete := FALSE;
  91. END_IF;
  92.  
  93.     //-------------------------------LOADING-----------------------------------------------------
  94. IF (#Master.JobType = 1 OR #Master.JobType = 2) AND (#tTransfer OR #tStartFlag OR #LoadComplete) AND NOT #Alarms.Active THEN
  95.         //Check sensors are flagged in correct order while loading.
  96.         IF #tStart THEN
  97.             #tStartFlag := TRUE;                                        //Start Photoeye made
  98.         END_IF;
  99.         IF #tStartFlag AND #tStart2 THEN
  100.             #tStartFlag2 := TRUE;                                       //Opposite stop photoeye made
  101.         END_IF;
  102.         IF (NOT #tStart AND #tStartFlag AND (NOT #Inputs.PE_Pallet_OH_Left AND NOT #Inputs.PE_Pallet_OH_Right) AND #tStop) OR #LoadComplete THEN
  103.             #tSpeed := 0;
  104.             #Control.SpeedSet := 0;
  105.             #LoadComplete := TRUE;
  106.         END_IF;
  107.         IF #LoadComplete AND (#tStop OR #tStart2) AND (NOT #Inputs.PE_Pallet_OH_Left OR NOT #Inputs.PE_Pallet_OH_Right) AND NOT #tEnd AND #VFDStatus.Speed = 0 THEN
  108.             #tSpeed := 0;
  109.             #Control.SpeedSet := 0;
  110.             #Trolley.Occupied := TRUE;
  111.             #LoadComplete := FALSE;
  112.         END_IF;
  113.         IF #tEnd THEN                                                   //-----------------------------------OVERHANG ALARM-----------------------------------
  114.             #Alarms.Overhang := TRUE;
  115.             #Alarms.Active := TRUE;
  116.         END_IF;
  117. END_IF;
  118.    
  119. //------------------------------UNLOADING----------------------------------------------------  
  120. #Unloading := #tStartFlag AND (#Master.JobType = 3 OR #Master.JobType = 4) AND #Trolley.Occupied;    //Keep transfer active until unoccupied.    
  121. //Set occupied false when we lose master jobenable and empty
  122. IF (#Master.JobType = 3 OR #Master.JobType = 4) AND (#tTransfer OR #Unloading) AND NOT #Alarms.Active AND #Trolley.InPosition THEN
  123.     #tStartFlag := TRUE;                                                        //Set start flag when transfer begins
  124.     //Occupied = false when sensors are clear
  125.     #UnloadSensors(IN := NOT #Inputs.PE_Pallet_Stop_Left AND NOT #Inputs.PE_Pallet_Stop_Right AND NOT #tStart AND NOT #tStop,
  126.                    PT := T#500MS);
  127.     IF  #UnloadSensors.Q THEN
  128.         //Force ready handshaking after transfer completes
  129.         "DB_STATUS".Handshake.Unload.Running := FALSE;
  130.         "DB_STATUS".Handshake.Unload.Ready := TRUE;
  131.         #Trolley.Occupied := FALSE;
  132.         #tSpeed := 0;
  133.         #tControl.SpeedSet := 0;
  134.         #tStartFlag := FALSE;
  135.     END_IF;
  136.    IF #tStop THEN                                                      //-------------------------------------OVERHANG ALARM-----------------------------------
  137.        #Alarms.Active := TRUE;
  138.         #Alarms.Overhang := TRUE;
  139.     END_IF;
  140. ELSIF (#Master.JobType = 3 OR #Master.JobType = 4) AND #Alarms.Active THEN          //Reset unloading start flag if an alarm is active
  141.     #tStartFlag := FALSE;
  142. END_IF;
  143.  
  144. //Job type 5
  145. IF #Master.JobType = 5 AND #Trolley.InPosition THEN
  146.     "DB_STATUS".Handshake.Mission.End := TRUE;
  147. END_IF;
  148.  
  149. //-----------------------------DRIVE AND BRAKE----------------------------------------------  
  150. IF ((#Master.JobType >= 1 AND #Master.JobType <= 4) AND #tTransfer) OR ((#Inputs.CON_Drive_Forward OR #Inputs.CON_Drive_Reverse) AND "FB_HMI_DB".MAN_Conveyor AND #Manual) AND NOT #Alarms.Active THEN
  151.     IF #Settings.SpeedConveyor <> 0 THEN
  152.         #tControl.SpeedSet := #tSpeed;                              //Set VFD speed
  153.         #tControl.Enable := #Inputs.CON_Conveyor_Brake;             //Run VFD once brake is released
  154.         "ConveyorBrake" := TRUE;
  155.     ELSE
  156.         #tControl.Enable := FALSE;
  157.         #tControl.SpeedSet := 0;
  158.         "ConveyorBrake" := NOT (#VFDStatus.Speed <= 5 AND #VFDStatus.Speed >= -5);
  159.     END_IF;//Release the brake if no alarms
  160. ELSE
  161.     #tControl.Enable := FALSE;
  162.     #tControl.SpeedSet := 0;
  163.     "ConveyorBrake" := NOT (#VFDStatus.Speed <= 5 AND #VFDStatus.Speed >= -5);
  164. END_IF;
  165.  
  166.     //Write speed + control word for vfd
  167.     #Control := #tControl;
  168.    
  169. //**********************************************************************************************************************    
  170. //END AUTOMATIC---------------------------------------------------------------------------------------------------------
  171.  
  172.     //-------------------------------ALARMS-------------------------------------------------------
  173.    
  174.     #tTimeout(IN:= #tTransfer,                                                                      //Start timer when transfer is active
  175.               PT:= #Settings.TransferTimeout);
  176.     IF #tTimeout.Q AND (#Master.JobType = 1 OR #Master.JobType = 2) THEN                            //Timeout Loading
  177.         #Alarms.TimeoutLoading := TRUE;
  178.         #Alarms.Active := TRUE;
  179.     ELSIF #tTimeout.Q AND (#Master.JobType = 3 OR #Master.JobType = 4) THEN                         //Timeout Unloading
  180.         #Alarms.TimeoutUnloading := TRUE;
  181.         #Alarms.Active := TRUE;
  182.     END_IF;
  183.    
  184.     IF (NOT #tTransfer AND NOT #Unloading) AND (#Inputs.PE_Pallet_OH_Left OR #Inputs.PE_Pallet_OH_Right) AND #Inputs.SW_Auto THEN              //OVERHANG
  185.         #Alarms.Overhang := TRUE;
  186.         #Alarms.Active := TRUE;
  187.     END_IF;
  188.    
  189.     IF #Master.JobType = 1 AND #tTransfer AND #tStart2 AND NOT #tStartFlag THEN                     //SENSOR: Overhang Left
  190.         #Alarms.SensorOHLeft := TRUE;
  191.         #Alarms.Active := TRUE;
  192.     ELSIF #Master.JobType = 1 AND NOT #tStartFlag2 AND #tStop THEN                                  //SENSOR: Stop Left
  193.         #Alarms.SensorStopLeft := TRUE;
  194.         #Alarms.Active := TRUE;
  195.     END_IF;
  196.    
  197.     IF #Master.JobType = 2 AND #tTransfer AND #tStart2 AND NOT #tStartFlag THEN                     //SENSOR: Overhang Right
  198.         #Alarms.SensorOHRight := TRUE;
  199.         #Alarms.Active := TRUE;
  200.     ELSIF #Master.JobType = 2 AND NOT #tStartFlag2 AND #tStop THEN                                  //SENSOR: Stop Right
  201.         #Alarms.SensorStopRight := TRUE;
  202.         #Alarms.Active := TRUE;
  203.     END_IF;
  204.                                                                                                     //Pallet Present
  205.     IF (NOT #tTransfer AND NOT #Unloading) AND (#Master.JobType = 1 OR #Master.JobType = 2) AND (#Inputs.PE_Pallet_Stop_Left OR #Inputs.PE_Pallet_Stop_Right) AND NOT #tStartFlag AND #Inputs.SW_Auto THEN
  206.         #Alarms.PalletPresent := TRUE;
  207.         #Alarms.Active := TRUE;                                                                     //Pallet Missing
  208.     ELSIF (NOT #tTransfer OR NOT #Unloading) AND (#Master.JobType = 3 OR #Master.JobType = 4) AND NOT (#Inputs.PE_Pallet_Stop_Left OR #Inputs.PE_Pallet_Stop_Right) AND NOT #tStartFlag AND #Trolley.Occupied AND #Inputs.SW_Auto THEN
  209.         #Alarms.PalletMissing := TRUE;
  210.         #Alarms.Active := TRUE;
  211.     END_IF;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement