コード例 #1
0
 void routeStatus_OnRouteStatusChanged(object sender, RouteStatusChangedEventArgs e)
 {
     if (e._available == RouteStatuses.Available)
     {
         //Start the timers
         if (restartBlocked && BlockedTimeout != 0)
         {
             BlockedTimer.Start();
         }
         if (restartClear && ClearTimeout != 0)
         {
             ClearTimer.Start();
         }
         restartBlocked = false;
         restartClear   = false;
     }
     else
     {
         if (BlockedTimeout != 0 && BlockedTimer.Running)
         {
             BlockedTimer.Stop();
             restartBlocked = true;
         }
         if (ClearTimeout != 0 && ClearTimer.Running)
         {
             ClearTimer.Stop();
             restartClear = true;
         }
     }
 }
コード例 #2
0
        //Only the RHS has the attached conveyor
        void rhsConveyor_OnNextRouteStatusAvailableChanged(object sender, RouteStatusChangedEventArgs e)
        {
            if (e._available == RouteStatuses.Blocked)
            {
                ReleaseDelayTimer.Stop();

                if (lhsConveyor.RouteAvailable == RouteStatuses.Available)
                {
                    lhsTransfering = true;
                }

                if (rhsConveyor.RouteAvailable == RouteStatuses.Available)
                {
                    rhsTransfering = true;
                }

                lhsConveyor.RouteAvailable = RouteStatuses.Blocked;
                rhsConveyor.RouteAvailable = RouteStatuses.Blocked;
                lhsConveyor.TransportSection.Route.Motor.Stop();
                rhsConveyor.TransportSection.Route.Motor.Stop();
            }
            else if (e._available == RouteStatuses.Available)
            {
                ReleaseDelayTimer.Start();
                if (rhsTransfering)
                {
                    rhsConveyor.RouteAvailable = RouteStatuses.Available;
                }
                else
                {
                    rhsConveyor.RouteAvailable = RouteStatuses.Request;
                }

                if (lhsTransfering)
                {
                    lhsConveyor.RouteAvailable = RouteStatuses.Available;
                }
                else
                {
                    lhsConveyor.RouteAvailable = RouteStatuses.Request;
                }

                lhsConveyor.TransportSection.Route.Motor.Start();
                rhsConveyor.TransportSection.Route.Motor.Start();
            }

            if (!ReleaseDelayTimer.Running)
            {
                Release();
            }
        }
コード例 #3
0
        protected void sensor_OnLeave(DematicSensor sender, Load load)
        {
            if (sender.PreviousActiveLoad == load)
            {
                BlockChargeCheck();
                return;
            }

            int result;

            if (int.TryParse(sender.Name, out result))
            {
                if (result == LineFullPosition - 1)
                {
                    sensors[result].cube.Color = Color.Blue;
                }
                else if (PickPosition != 0 && result == PickPosition - 1)
                {
                    sensors[result].cube.Color = Color.DarkGreen;
                }
                else if (result < (Positions - InfeedBlockChargePositions))
                {
                    sensors[result].cube.Color = Color.Yellow;
                }
                else
                {
                    sensors[result].cube.Color = Color.Orange;
                }

                if (InfeedBlockChargePositions == 0 || result < (Positions - InfeedBlockChargePositions)) //Normal position (not block charge)
                {
                    //If there is a sensor behind you and it has a load and this sensor has been cleared then release the one behind
                    if (sensors.Count > (result + 1) && sensors[result + 1].sensor.Active)
                    {
                        if ((result + 1) != (PickPosition - 1) || ReleasePickLoad) // Also check if the position has stopped due to picking operation
                        {
                            ((Case_Load)sensors[result + 1].sensor.ActiveLoad).ReleaseLoad();
                            if (ReleasePickLoad) //Added by BG but shouldn't make any difference but it might
                            {
                                ReleasePickLoad = false;
                            }
                        }
                    }
                }
                else //Block Charge Position
                {
                    //Check all the positions behind and release the load if active
                    for (int i = result + 1; i < Positions; i++)
                    {
                        if (i != (PickPosition - 1) || ReleasePickLoad) // Also check if the position has stopped due to picking operation
                        {
                            sensors[i].sensor.ReleaseActiveCaseLoads();
                        }
                    }
                }

                if (result == 0) //Load has cleared front photocell
                {
                    if (sensors[0].sensor.ActiveLoad != null)
                    {
                        SetLoadWaiting(false, sensors[0].sensor.ActiveLoad.StartDisposing, load);
                    }
                    else
                    {
                        SetLoadWaiting(false, false, load);
                    }
                }

                //Set the route available status or start the timer
                if (LineFullPosition != 0 && result == LineFullPosition - 1)
                {
                    if (BlockedTimer != null)
                    {
                        BlockedTimer.Stop();
                        BlockedTimer.Reset();
                    }
                    if (LineAvailableTimeout == 0)
                    {
                        RouteAvailable = RouteStatuses.Available;
                    }
                    else
                    {
                        ClearTimer.Start();
                    }
                }
            }
        }
コード例 #4
0
        public void sensor_OnEnter(DematicSensor sender, Load load)
        {
            if (sender.PreviousActive)
            {
                BlockChargeCheck();
                return;
            }

            int result;

            if (int.TryParse(sender.Name, out result))
            {
                sensors[result].cube.Color = Color.Red;

                //Check if the location is a picking position
                if (result == (PickPosition - 1))
                {
                    load.Stop();
                    if (OnArrivedAtPickingPosition != null)
                    {
                        OnArrivedAtPickingPosition(this, new ManualPickArrivalArgs(load));
                    }
                }

                if (result != 0) // photocells are named 0 to n with 0 being the front photocell
                {
                    //bool stopLoad = false;
                    if (InfeedBlockChargePositions == 0 || result < (Positions - InfeedBlockChargePositions + 1))
                    {
                        //Normal Position
                        if (sensors[result - 1].sensor.Active) //Active means that there is a load on the sensor
                        {
                            //stopLoad = true;
                            load.Stop();
                        }
                    }
                    if (result >= (Positions - InfeedBlockChargePositions))
                    {
                        //Block Position
                        BlockChargeCheck();
                    }
                }
                else //Load has arrived at front (zeroth) photocell
                {
                    SetLoadWaiting(true, false, load);
                    if (NextRouteStatus == null || NextRouteStatus.Available != RouteStatuses.Available)
                    {
                        ((Case_Load)load).StopLoad_PLCControl();
                        //load.Stop();
                    }
                }

                if (InfeedBlockChargePositions == 0 || result < (Positions - InfeedBlockChargePositions)) //Normal positions
                {
                    //Stops the load behind if it's active to create a gap
                    if (sensors.Count > (result + 1) && sensors[result + 1].sensor.Active)
                    {
                        sensors[result + 1].sensor.StopActiveLoads();
                    }
                }

                //Set the route available status or start the timer
                if (LineFullPosition != 0 && result == LineFullPosition - 1)
                {
                    if (ClearTimer != null)
                    {
                        ClearTimer.Stop();
                        ClearTimer.Reset();
                    }
                    if (BlockedTimeout == 0)
                    {
                        RouteAvailable = RouteStatuses.Blocked;
                    }
                    else
                    {
                        BlockedTimer.Start();
                    }
                }
            }
        }