示例#1
0
        public CasePhotocell(CasePhotocellInfo info, BaseTrack conv) : base(info, conv)
        {
            photocellInfo = info;
            AssemblyInfo ai = new AssemblyInfo();

            conveyor = conv;

            photocellDisplay = new CasePhotocellDisplay(new PhotocellDisplayInfo {
                width = info.width
            });
            photocellDisplay.ListSolutionExplorer       = false;
            photocellDisplay.OnPhotocellDisplayDeleted += photocellDisplay_OnPhotocellDisplayDeleted;

            Add(photocellDisplay, new Vector3(info.length / 2, 0, 0));
            sensor.OnEnter += sensor_OnEnter;
            sensor.OnLeave += sensor_OnLeave;
            sensor.Color    = Color.Green;
            sensor.Visible  = false;

            conv.TransportSection.Route.InsertActionPoint(sensor);

            //If the photocell is connected to a belt conveyor then we want to pause the timers if the conveyor is not available
            if (conveyor is IBeltControl)
            {
                beltControl = conveyor as IRouteStatus;
                routeStatus = beltControl.GetRouteStatus(conveyor.StartFixPoint);
                routeStatus.OnRouteStatusChanged += routeStatus_OnRouteStatusChanged;
            }

            OnNameChanged += CasePhotocell_OnNameChanged;
        }
示例#2
0
        public override void StartFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e)
        {
            IRouteStatus connectedConv = stranger.Parent as IRouteStatus;

            PreviousLoadWaitingStraight = connectedConv.GetLoadWaitingStatus(stranger);
            PreviousLoadWaitingStraight.OnLoadWaitingChanged += PreviousLoadWaitingStraight_OnLoadWaitingChanged;
        }
示例#3
0
 /// <summary>
 /// The standard straight conveyor does not care what is waiting to be released into it, however if there is
 /// routing control on the receiving conveyor then this should be overridden to get the Load Waiting status of
 /// the previous conveyor.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public virtual void StartFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e)
 {
     if (stranger.Parent is IRouteStatus)
     {
         PreviousConveyor = stranger.Parent as IRouteStatus;
     }
 }
示例#4
0
        public void MergeSectionStartFixPoint_OnSnapped(FixPoint fixpoint, FixPoint.SnapEventArgs e)
        {
            IRouteStatus connectedConv = fixpoint.Parent as IRouteStatus;

            PreviousLoadWaitingMerge = connectedConv.GetLoadWaitingStatus(fixpoint);
            PreviousLoadWaitingMerge.OnLoadWaitingChanged += PreviousLoadWaitingMerge_OnLoadWaitingChanged;
        }
示例#5
0
        public override void StartFixPoint_OnSnapped(Core.Parts.FixPoint stranger, Core.Parts.FixPoint.SnapEventArgs e)
        {
            IRouteStatus PreviousConveyorStraight = stranger.Parent as IRouteStatus;

            previousLoadWaitingStatus = PreviousConveyorStraight.GetLoadWaitingStatus(stranger);
            if (previousLoadWaitingStatus != null)
            {
                previousLoadWaitingStatus.OnLoadWaitingChanged += PreviousLoadWaitingStatusStraight_OnLoadWaitingChanged;
            }
        }
示例#6
0
        private void TrackStopPoint_OnEnter(ActionPoint sender, Load load)
        {
            track.Route.Motor.Stop();

            if (Tasks.Count > 0)
            {
                var currentTask = Tasks[0];

                if (currentTask.TCarCycle == TCycle.Load)
                {
                    IRouteStatus sourceConveyor = (IRouteStatus)currentTask.Source.Attached.Parent;
                    sourceConveyor.TransportSection.Route.NextRoute = conveyor.TransportSection.Route;
                    if (currentTask.Source.LocalPosition.Z == conveyor.StartFixPoint.LocalPosition.X)
                    {
                        conveyor.LocalYaw = Trigonometry.PI(Trigonometry.Angle2Rad(270.0f));
                    }
                    else
                    {
                        conveyor.LocalYaw = Trigonometry.PI(Trigonometry.Angle2Rad(90.0f));
                    }
                    conveyor.ThisRouteStatus.Available = RouteStatuses.Available;
                    currentTask.Source.FixPointRouteStatus.Available = RouteStatuses.Available;
                    currentTask.TCarCycle = TCycle.Unload;
                }
                else
                {
                    if (currentTask.Destination.LocalPosition.Z == conveyor.EndFixPoint.LocalPosition.X)
                    {
                        if (conveyor.TransportSection.Route.Loads.Count > 0)
                        {
                            var loadDistance = conveyor.TransportSection.Route.Loads.First().Distance;
                            conveyor.LocalYaw = Trigonometry.PI(Trigonometry.Angle2Rad(270.0f));
                            conveyor.TransportSection.Route.Loads.First().Distance = conveyor.TransportSection.Route.Length - loadDistance;
                        }
                    }
                    else if (currentTask.Destination.LocalPosition.Z == conveyor.StartFixPoint.LocalPosition.X)
                    {
                        if (conveyor.TransportSection.Route.Loads.Count > 0)
                        {
                            var loadDistance = conveyor.TransportSection.Route.Loads.First().Distance;
                            conveyor.LocalYaw = Trigonometry.PI(Trigonometry.Angle2Rad(90.0f));
                            conveyor.TransportSection.Route.Loads.First().Distance = conveyor.TransportSection.Route.Length - loadDistance;
                        }
                    }
                    IRouteStatus destinationConveyor = (IRouteStatus)currentTask.Destination.Attached.Parent;
                    conveyor.TransportSection.Route.NextRoute = destinationConveyor.TransportSection.Route;
                    if (currentTask.Destination.FixPointRouteStatus.Available == RouteStatuses.Available)
                    {
                        conveyor.ThisRouteStatus.Available = RouteStatuses.Request;
                    }
                }
            }
        }
示例#7
0
 public virtual void EndFixPoint_OnUnSnapped(Core.Parts.FixPoint stranger)
 {
     if (stranger.Parent is BaseTrack)
     {
         NextConveyor = null;
         if (NextRouteStatus != null)
         {
             NextRouteStatus.OnRouteStatusChanged -= NextRouteStatus_OnAvailableChanged;
             NextRouteStatus = null;
         }
     }
 }
示例#8
0
 public virtual void EndFixPoint_OnSnapped(Core.Parts.FixPoint stranger, Core.Parts.FixPoint.SnapEventArgs e)
 {
     NextConveyor = stranger.Parent as IRouteStatus;
     if (NextConveyor != null)
     {
         NextRouteStatus = NextConveyor.GetRouteStatus(stranger);
         if (NextRouteStatus != null)
         {
             NextRouteStatus.OnRouteStatusChanged += NextRouteStatus_OnAvailableChanged;
         }
     }
 }
示例#9
0
 private void DestinationFixPoint_OnUnSnapped(FixPoint stranger)
 {
     if (stranger.Parent is IRouteStatus)
     {
         IRouteStatus    destinationConveyor = (IRouteStatus)stranger.Parent;
         DematicFixPoint dfp = (DematicFixPoint)stranger.Attached;
         if (dfp != null)
         {
             dfp.FixPointRouteStatus.OnRouteStatusChanged -= DestinationConveyorRouteStatus_OnRouteStatusChanged;
         }
     }
 }
示例#10
0
 private void DestinationFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e)
 {
     if (stranger.Parent is IRouteStatus)
     {
         IRouteStatus    destinationConveyor = (IRouteStatus)stranger.Parent;
         DematicFixPoint dfp = (DematicFixPoint)stranger.Attached;
         if (dfp != null)
         {
             dfp.FixPointRouteStatus = destinationConveyor.GetRouteStatus(stranger);
             dfp.FixPointRouteStatus.OnRouteStatusChanged += DestinationConveyorRouteStatus_OnRouteStatusChanged;
         }
     }
 }
示例#11
0
 private void SourceFixPoint_OnUnSnapped(FixPoint stranger)
 {
     if (stranger.Parent is IRouteStatus)
     {
         IRouteStatus    sourceConveyor = (IRouteStatus)stranger.Parent;
         DematicFixPoint dfp            = (DematicFixPoint)stranger.Attached;
         if (dfp != null)
         {
             if (SourceFixPoints.ContainsKey(dfp.Name))
             {
                 SourceFixPoints.Remove(dfp.Name);
             }
             dfp.FixPointLoadWaitingStatus.OnLoadWaitingChanged -= FixPointLoadWaitingStatus_OnLoadWaitingChanged;
         }
     }
 }
示例#12
0
        private void SetNextDivertRouteStatus(bool value)
        {
            if (value)
            {
                IRouteStatus afterNextConv = divertSection.NextConveyor;

                if (afterNextConv is StraightConveyor)
                {
                    StraightConveyor straight = afterNextConv as StraightConveyor;
                    NextDivertRouteStatus = straight.NextConveyor.GetRouteStatus(divertSection.EndFixPoint.Attached);
                }
                else if (afterNextConv is CurveConveyor)
                {
                    CurveConveyor curve = afterNextConv as CurveConveyor;
                    NextDivertRouteStatus = curve.NextConveyor.GetRouteStatus(divertSection.EndFixPoint.Attached);
                }
            }
            else
            {
                NextDivertRouteStatus = divertSection.NextConveyor.GetRouteStatus(divertSection.EndFixPoint.Attached);
            }
        }
示例#13
0
        private void SourceFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e)
        {
            if (stranger.Parent is IRouteStatus)
            {
                IRouteStatus    sourceConveyor = (IRouteStatus)stranger.Parent;
                DematicFixPoint dfp            = (DematicFixPoint)stranger.Attached;

                if (!SourceFixPoints.ContainsKey(dfp.Name))
                {
                    SourceFixPoints.Add(dfp.Name, dfp);
                }

                if (dfp != null)
                {
                    dfp.FixPointLoadWaitingStatus = sourceConveyor.GetLoadWaitingStatus(stranger);
                    dfp.FixPointLoadWaitingStatus.OnLoadWaitingChanged += FixPointLoadWaitingStatus_OnLoadWaitingChanged;
                }
            }
            else
            {
                // call upsnap method
            }
        }
示例#14
0
        private void FixPointLoadWaitingStatus_OnLoadWaitingChanged(object sender, LoadWaitingChangedEventArgs e)
        {
            Load load = e._waitingLoad;

            if (load != null && load.Route != null && e._loadWaiting)
            {
                IRouteStatus conveyor = (IRouteStatus)e._waitingLoad.Route.Parent.Parent;
                if (ControlType == ControlTypes.Local)
                {
                    // Select a destination at random (this will be replaced by controller code)
                    string          destinationName = GetRandomDestination(); // Temporary : Get random one for now
                    DematicFixPoint destinationFP   = (DematicFixPoint)FixPoints.Find(x => x.Name == destinationName);
                    DematicFixPoint sourceFP        = (DematicFixPoint)conveyor.EndFixPoint.Attached;
                    if (sourceFP != null)
                    {
                        TCarTask task = new TCarTask
                        {
                            Source      = sourceFP,
                            Destination = destinationFP,
                        };
                        Tasks.Add(task);
                    }
                }
                else if (ControlType == ControlTypes.Project_Script) // TODO: Invent event to attach routing script to
                {
                    SourceLoadArrived(load, (DematicFixPoint)conveyor.EndFixPoint.Attached);
                }
                else if (ControlType == ControlTypes.Controller)
                {
                    if (Controller != null)
                    {
                        sourceArrival?.Invoke(load, (DematicFixPoint)conveyor.EndFixPoint.Attached);
                    }
                }
            }
        }
示例#15
0
 public bool has_the_same_value_as(IRouteStatus the_other_route_status)
 {
     return underlying_display_name.Equals(the_other_route_status.display_name());
 }
示例#16
0
 void EndFixPoint_OnSnapped(FixPoint stranger, FixPoint.SnapEventArgs e)
 {
     NextConveyor    = stranger.Parent as IRouteStatus;
     NextRouteStatus = NextConveyor.GetRouteStatus(stranger);
     NextRouteStatus.OnRouteStatusChanged += NextRouteStatus_OnAvailableChanged;
 }
示例#17
0
 void EndFixPoint_OnUnSnapped(FixPoint stranger)
 {
     NextConveyor = null;
     NextRouteStatus.OnRouteStatusChanged -= NextRouteStatus_OnAvailableChanged;
     NextRouteStatus = null;
 }
示例#18
0
 public PalletStationEventArgs(IRouteStatus status, Load load, string pickStation)
 {
     Status          = status;
     Load            = load;
     PickStationName = pickStation;
 }