Exemple #1
0
 private void SendOutMission(AgvOutMissonModel mission)
 {
     SendLogEvent?.Invoke(new StationClientState {
         State = StationClientStateEnum.INFO, Message = "出库请求:" + mission.Type.EnumToString()
     }.ToString());
     SendSingnalrEvent?.Invoke(AgvSendActionEnum.SendOutMission.EnumToString(), mission);
 }
Exemple #2
0
 public bool CanRequest()
 {
     warehouse_outmission      = missionContext.undo_outmissions.Where(x => x.CarryProcess == CarryMissonProcessEnum.NEW).FirstOrDefault();
     warehouse_outmission_last = missionContext.undo_outmissions.Where(x => x.CarryProcess > CarryMissonProcessEnum.NEW &&
                                                                       x.Process < AgvMissonProcessEnum.AGVPICKEDANDLEAVE).FirstOrDefault();
     //TODO:增加料道信号检查
     return(warehouse_outmission != null && warehouse_outmission_last == null);
 }
Exemple #3
0
        public void OnAgvOutMissonEvent(AgvOutMissonModel mission)
        {
            //毛坯输入
            if (mission.Id.Equals(Station_Id + "_RAWIN"))
            {
                if ((mission.Process == AgvMissonProcessEnum.FINISHED || mission.Process == AgvMissonProcessEnum.CLOSE) && mission.Process != AgvMissonProcessEnum.CANCEL && mission.Process != AgvMissonProcessEnum.CANCELED)
                {
                    bool raw_in     = false;
                    var  ret_raw_in = StationDevice.GetRawInRequireState(ref raw_in);
                    if (ret_raw_in == true && raw_in == true)
                    {
                        Console.WriteLine("RAWIN_" + DateTime.Now);

                        StationDevice.SetRawInFin(true);
                        bool raw_in_confirm = true;

                        while (raw_in_confirm)
                        {
                            ret_raw_in = StationDevice.GetRawInRequireState(ref raw_in_confirm);
                            if (ret_raw_in == true && raw_in_confirm == false)
                            {
                                StationDevice.SetRawInFin(false);
                            }
                            Thread.Sleep(1000);
                        }
                    }
                }
            }
            //成品空箱输入
            if (mission.Id.Equals(Station_Id + "_EMPTYIN"))
            {
                if ((mission.Process == AgvMissonProcessEnum.FINISHED || mission.Process == AgvMissonProcessEnum.CLOSE) && mission.Process != AgvMissonProcessEnum.CANCEL && mission.Process != AgvMissonProcessEnum.CANCELED)
                {
                    bool empty_in     = false;
                    var  ret_empty_in = StationDevice.GetEmptyInState(ref empty_in);
                    if (ret_empty_in == true && empty_in == true)
                    {
                        StationDevice.SetEmptyInFin(true);
                        bool empty_in_confirm = true;

                        while (empty_in_confirm)
                        {
                            ret_empty_in = StationDevice.GetEmptyInState(ref empty_in_confirm);
                            if (ret_empty_in == true && empty_in_confirm == false)
                            {
                                StationDevice.SetEmptyInFin(false);
                            }
                            Thread.Sleep(1000);
                        }
                    }
                }
            }
        }
Exemple #4
0
        public void PushOutMission(AgvOutMissonModel mission)
        {
            var count = missionContext.MissionOutNodes.Where(x => x.Id == mission.Id && (x.Process != AgvMissonProcessEnum.CLOSE || x.CarryProcess != CarryMissonProcessEnum.CLOSE)).Count();

            if (count == 0)
            {
                mission.AgvProcessChangeEvent += (obj, state) => AgvMissonChangeEvent?.Invoke(obj, state);
                AgvMissonChangeEvent?.Invoke(mission, true);
                missionContext.MissionOutNodes.Add(mission);
                SendAgvMissonEvent?.Invoke(mission);
            }
        }
Exemple #5
0
 public bool CanRequest()
 {
     if ((missionContext.undo_inmissions.Count() + missionContext.undo_outmissions.Count()) < 2)
     {
         new_outmission = missionContext.MissionOutNodes.Where(x => x.Process == AgvMissonProcessEnum.NEW && x.CarryProcess == CarryMissonProcessEnum.NEW).FirstOrDefault();
         if (new_outmission != null)
         {
             //检索出库任务之前是否有前置的入库任务
             var brother_mission_type = missionContext.brotherMissionType[new_outmission.Type];
             var brother_inmission    = missionContext.MissionOutNodes
                                        .Where(x => x.ClientId == new_outmission.ClientId &&
                                               x.Type == brother_mission_type &&
                                               x.Process == AgvMissonProcessEnum.NEW &&
                                               x.CarryProcess == CarryMissonProcessEnum.NEW)
                                        .FirstOrDefault();
             return(brother_inmission == null);
         }
     }
     return(false);
 }
Exemple #6
0
        //料库执行出库
        private bool WareHouseOutMission(AgvOutMissonModel mission)
        {
            if (missionContext.carryDevice as RightCarryService.TestControlDevice != null)
            {
                mission.CarryProcess = CarryMissonProcessEnum.FINISHED;
                return(true);
            }
            TestRightCarryService <IControlDevice> carry = new TestRightCarryService <IControlDevice>(missionContext.carryDevice);

            int quantity = 0;
            var ret      = carry.CarryOut(mission.ProductId, mission.MaterialId, ref quantity);

            if (ret == false)
            {
                mission.Process      = AgvMissonProcessEnum.CANCEL;
                mission.CarryProcess = CarryMissonProcessEnum.CANCEL;
                carry.ReleaseLock();
                return(false);
            }

            mission.CarryProcess = CarryMissonProcessEnum.FINISHED;
            carry.ReleaseLock();
            return(true);
        }
Exemple #7
0
 public bool CanRequest()
 {
     carrycancel_outmission = missionContext.MissionOutNodes.Where(x => x.CarryProcess == CarryMissonProcessEnum.CANCEL).FirstOrDefault();
     return(carrycancel_outmission != null);
 }
Exemple #8
0
 public bool CanRequest()
 {
     agvcancel_outmission = missionContext.MissionOutNodes.Where(x => x.Process == AgvMissonProcessEnum.CANCEL).FirstOrDefault();
     return(agvcancel_outmission != null);
 }
Exemple #9
0
 public SendOutMission(AgvOutMissonModel model)
 {
     Model = model;
 }
Exemple #10
0
 public receiveOutMissionFinMessage(AgvOutMissonModel model)
 {
     Model = model;
 }
Exemple #11
0
 public SendMissonOutOrder(AgvOutMissonModel model)
 {
     Model = model;
 }
Exemple #12
0
 public SendOutMissionFinMessage(AgvOutMissonModel model)
 {
     Model = model;
 }
Exemple #13
0
 public bool CanRequest()
 {
     agv_outmission = missionContext.undo_outmissions.Where(x => x.Process == AgvMissonProcessEnum.START).FirstOrDefault();
     return(agv_outmission != null);
 }
Exemple #14
0
 public void SendOutMissionFinMessage(AgvOutMissonModel message)
 {
     Clients.All.receiveOutMissionFinMessage(message);
 }
Exemple #15
0
 public bool CanRequest()
 {
     agv_outmissions_atprepick = missionContext.undo_outmissions.Where(x => x.Process == AgvMissonProcessEnum.AGVATPREPICK &&
                                                                       x.CarryProcess == CarryMissonProcessEnum.FINISHED).FirstOrDefault();
     return(agv_outmissions_atprepick != null);
 }
Exemple #16
0
 public bool CanRequest()
 {
     currentMisson = missionContext.MissionOutNodes.FirstOrDefault(x => x.CarryProcess == CarryMissonProcessEnum.FINISHED && x.Process > AgvMissonProcessEnum.AGVPICKEDANDLEAVE);
     return(currentMisson != null);
 }
Exemple #17
0
 public bool CanRequest()
 {
     agvfinished_outmission = missionContext.MissionOutNodes.Where(x => x.Process == AgvMissonProcessEnum.FINISHED).FirstOrDefault();
     return(agvfinished_outmission != null);
 }