public ServiceFactory InitDoorService() { _doorService = new DoorService(_mqttOutboundEventBus, _driversFactory.DoorReedSwitch); _doorService.Start(); Logger.Log(() => $"Free memory after init door service {GC.Run(false)}"); return(this); }
public DoorManagementService() { // LoadDoorConfigure(); DoorInfoConfigList = new List <DoorInfoConfig>(); PropertiesDoor_List = new List <DoorInfoConfig>(); Grouped_PropertiesDoor = (ListCollectionView)CollectionViewSource.GetDefaultView(PropertiesDoor_List); if (fistInit == false) { fistInit = true; LoadConfigure(); DoorMezzamineUpNew = new DoorService(DoorInfoConfigList[0]); /* DoorMezzamineUpNew_InV = new DoorService(DoorInfoConfigList[1]); * DoorMezzamineUp = new DoorService(DoorInfoConfigList[2]); * DoorMezzamineUp_InV = new DoorService(DoorInfoConfigList[3]); * DoorMezzamineReturn = new DoorService(DoorInfoConfigList[4]); // kiem tra lai * DoorMezzamineReturn_InV = new DoorService(DoorInfoConfigList[5]); // kiem tra lai */ try { doorConfigure = new DoorConfigure(this); } catch { } } }
public Scanner(IUnitOfWork unitOfWork, DoorService doorService) { _unitOfWork = unitOfWork; _doorService = doorService; var button = new Button(Pi.Gpio[BcmPin.Gpio17], GpioPinResistorPullMode.PullUp); button.Pressed += (s, e) => ContinueReading(); }
public void Setup() { _userDoorRepository = new Mock <IUserDoorRepository>(); _eventTracker = new Mock <IEventTracker>(); _doorUnlocker = new Mock <IDoorUnlocker>(); _doorService = new DoorService(_userDoorRepository.Object, _eventTracker.Object, _doorUnlocker.Object); }
protected override void Load() { Instance = this; MessageColor = UnturnedChat.GetColorFromName(Configuration.Instance.MessageColor, Color.green); DoorService = gameObject.AddComponent <DoorService>(); harmony = new Harmony(HarmonyId); harmony.PatchAll(Assembly); Logger.Log($"{Name} {Assembly.GetName().Version} has been loaded!", ConsoleColor.Yellow); }
public ControlService(RobotAgent robot, DoorService doorService) { if (robot != null) { robot.ZoneHandler += ZoneHandler; robot.FinishStatesHandler += FinishStatesHandler; robot.AmclPoseHandler += AmclPoseHandler; doorService.ReceiveRounterEvent += ReceiveRounterEvent; } if (doorService != null) { } }
protected DoorService getDoorService() { DoorService door = null; if (this.traffic.RobotIsInArea("RSGATE", robot.properties.pose.Position)) { door = this.doorservice.DoorMezzamineUpNew_InV; } else { door = this.doorservice.DoorMezzamineUpNew; } return(door); }
public MainWindow() { InitializeComponent(); HubConnection connection = new HubConnectionBuilder() .WithUrl("http://localhost:5000/door") .Build(); IDoorService doorService = new DoorService(); DataContext = new MainWindowViewModel(doorService, connection); ConnectSignalR(connection); }
public static void Init() { Console.WriteLine("\n[MySQL] Подключение к Базе Данных..."); try { connection = new MySqlConnection(myConnectionString); connection.Open(); Debug(0, "[MySQL] База Данных успешно подключена!\n"); DoorService.LoadAllDoorsFromDB(); } catch (MySqlException error) { Debug(1, "[MySQL] MySQL error: (#" + error.Number + ") " + error.Message + "\n"); } }
public void openDoorTest() { var mock = new Mock <IDoorDAO>(); mock.SetupSequence(x => x.getDoor(It.IsAny <long>())).Returns(doorList[0]).Returns(doorList[1]).Returns(doorList[2]); var service = new DoorService(mock.Object); bool result; result = service.openDoor(0); Assert.IsTrue(result); result = service.openDoor(0); Assert.IsFalse(result); result = service.openDoor(0); Assert.IsTrue(result); }
public void LoadAllMySQLInformations() { ATMService.LoadAllATMs(); BlipService.LoadCustomBlipsFromDatabase(); ClothingService.LoadAllClothing(); ItemService.LoadItemsFromDB(); ShopService.LoadShopsFromDB(); GarageService.LoadAllGarageFromDB(); VehicleService.ResetAllVehicles(); GasStationService.LoadAllGasStationsFromDB(); VehicleService.LoadVehicleInformationsFromDB(); VehicleShopService.LoadAllVehicleShopsFromDB(); DoorService.LoadAllDoorsFromDB(); ClothingShopService.LoadAllClothingShopsFromDB(); API.delay(3000, true, () => { API.setServerPassword(oldServerPassword); API.consoleOutput("Server is now unlocked.."); }); }
public void Start(ForkLiftToMachine state = ForkLiftToMachine.FORMACH_ROBOT_GOTO_CHECKIN_GATE) { if ((DoorId)order.gate == DoorId.DOOR_MEZZAMINE_UP) { door = doorservice.DoorMezzamineUp; } else if ((DoorId)order.gate == DoorId.DOOR_MEZZAMINE_UP_NEW) { door = doorservice.DoorMezzamineUpNew; } robot.robotTag = RobotStatus.WORKING; robot.robotBahaviorAtGate = RobotBahaviorAtReadyGate.GOING_INSIDE_GATE; errorCode = ErrorCode.RUN_OK; robot.ProcedureAs = ProcedureControlAssign.PRO_FORKLIFT_TO_MACHINE; StateForkLiftToMachine = state; ProForkLiftToMachine = new Thread(this.Procedure); ProRun = true; ProRunStopW = true; //robot.prioritLevel.OnAuthorizedPriorityProcedure = false; robot.robotRegistryToWorkingZone.onRobotwillCheckInsideGate = true; order.startTimeProcedure = DateTime.Now; ProForkLiftToMachine.Start(this); }
private void CheckDoors(Client client, Player player) { if (client.position.DistanceTo(new Vector3(460.1322, -990.9448, 30.6896)) <= 2) { if (client.hasSyncedData("onduty")) { PoliceService.SetOnDuty(client, false); } else { PoliceService.SetOnDuty(client, true); } return; } if (client.position.DistanceTo(new Vector3(434.6926, -981.8649, 30.71322)) <= 1) // Mission Row Main Doors { DoorService.ToggleDoorState(19); if (DoorService.ToggleDoorState(18)) { API.sendNotificationToPlayer(client, "~r~Locked ~w~Door"); } else { API.sendNotificationToPlayer(client, "~g~Unlocked ~w~Door"); } return; } if (client.position.DistanceTo(new Vector3(464.3711, -983.8344, 43.69287)) <= 1) // Mission Row Top Door { if (DoorService.ToggleDoorState(27)) { API.sendNotificationToPlayer(client, "~r~Locked ~w~Door"); } else { API.sendNotificationToPlayer(client, "~g~Unlocked ~w~Door"); } return; } if (client.position.DistanceTo(new Vector3(463.7195, -992.5253, 24.91487)) <= 1) // Mission Row Main Cell Door { if (DoorService.ToggleDoorState(26)) { API.sendNotificationToPlayer(client, "~r~Locked ~w~Door"); } else { API.sendNotificationToPlayer(client, "~g~Unlocked ~w~Door"); } return; } if (client.position.DistanceTo(new Vector3(464.1983, -1003.415, 24.91487)) <= 1) // Mission Row Back Cell Door (Not Working) { if (DoorService.ToggleDoorState(20)) { API.sendNotificationToPlayer(client, "~r~Locked ~w~Door"); } else { API.sendNotificationToPlayer(client, "~g~Unlocked ~w~Door"); } return; } if (client.position.DistanceTo(new Vector3(462.0896, -993.7011, 24.91486)) <= 1) // Mission Row Cell Door Right { if (!player.Character.OnDuty) { return; } if (DoorService.ToggleDoorState(23)) { API.sendNotificationToPlayer(client, "~r~Locked ~w~Door"); } else { API.sendNotificationToPlayer(client, "~g~Unlocked ~w~Door"); } return; } if (client.position.DistanceTo(new Vector3(462.0993, -998.6472, 24.91486)) <= 1) // Mission Row Cell Door Middle { if (!player.Character.OnDuty) { return; } if (DoorService.ToggleDoorState(24)) { API.sendNotificationToPlayer(client, "~r~Locked ~w~Door"); } else { API.sendNotificationToPlayer(client, "~g~Unlocked ~w~Door"); } return; } if (client.position.DistanceTo(new Vector3(462.2214, -1002.128, 24.91486)) <= 1) // Mission Row Cell Door Left { if (!player.Character.OnDuty) { return; } if (DoorService.ToggleDoorState(25)) { API.sendNotificationToPlayer(client, "~r~Locked ~w~Door"); } else { API.sendNotificationToPlayer(client, "~g~Unlocked ~w~Door"); } return; } if (client.position.DistanceTo(new Vector3(468.6248, -1014.067, 26.38638)) <= 1) // Mission Row Back Doors { if (DoorService.ToggleDoorState(20)) { API.sendNotificationToPlayer(client, "~r~Locked ~w~Door"); } else { API.sendNotificationToPlayer(client, "~g~Unlocked ~w~Door"); } DoorService.ToggleDoorState(21); return; } return; }
public ProcedureForkLiftToBuffer(RobotAgent robot, DoorService doorservice) : base(robot, doorservice) { StateForkLiftToBuffer = ForkLiftToBuffer.FORBUF_IDLE; }
public ProcedureReturnPalletToGround(RobotAgent robot, DoorService doorservice) : base(robot, doorservice) { }
public void Procedure(object ojb) { ProcedureBufferToGate BuffToGate = (ProcedureBufferToGate)ojb; RobotUnity rb = BuffToGate.robot; // DataBufferToGate p = BuffToGate.points; doorServiceCtrl = getDoorService(); ds = doorServiceCtrl.doorService; ds.setRb(rb); TrafficManagementService Traffic = BuffToGate.Traffic; rb.mcuCtrl.lampRbOn(); robot.ShowText(" Start -> " + procedureCode); while (ProRun) { switch (StateBufferToGate) { case BufferToGate.BUFGATE_IDLE: break; case BufferToGate.BUFGATE_SELECT_BEHAVIOR_ONZONE: if (Traffic.RobotIsInArea("READY", robot.properties.pose.Position, TypeZone.OPZS)) { if (rb.PreProcedureAs == ProcedureControlAssign.PRO_READY) { StateBufferToGate = BufferToGate.BUFGATE_ROBOT_GOTO_BACK_FRONTLINE_READY; registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = BuffToGate.GetFrontLineBuffer().Position; ////robot.ShowText("BUFMAC_SELECT_BEHAVIOR_ONZONE : READY"); ////robot.ShowText("CHECK - REG"); } } else if (Traffic.RobotIsInArea("VIM", robot.properties.pose.Position, TypeZone.MAIN_ZONE)) { if (rb.SendPoseStamped(BuffToGate.GetFrontLineBuffer())) { StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER; registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = BuffToGate.GetFrontLineBuffer().Position; ////robot.ShowText("BUFMAC_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER"); } } else if (Traffic.RobotIsInArea("OUTER", robot.properties.pose.Position, TypeZone.MAIN_ZONE)) { Point destPos1 = BuffToGate.GetFrontLineBuffer().Position; String destName1 = Traffic.DetermineArea(destPos1, TypeZone.MAIN_ZONE); if (destName1.Equals("OUTER")) { ////robot.ShowText("GO FRONTLINE IN OUTER"); if (rb.SendPoseStamped(BuffToGate.GetFrontLineBuffer())) { StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER; registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = destPos1; ////robot.ShowText("BUFMAC_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER"); } } else if (destName1.Equals("VIM")) { ////robot.ShowText("GO FRONTLINE IN VIM"); if (rb.SendPoseStamped(BuffToGate.GetFrontLineBuffer())) { StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER_FROM_VIM_REG; registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = destPos1; ////robot.ShowText("BUFMAC_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER"); ////robot.ShowText("CHECK - REG"); } } } break; case BufferToGate.BUFGATE_ROBOT_GOTO_BACK_FRONTLINE_READY: if (TrafficRountineConstants.DetetectInsideStationCheck(registryRobotJourney)) { break; } ////robot.ShowText("START :GOTO_BACK_FRONTLINE_READY"); if (rb.SendCmdPosPallet(RequestCommandPosPallet.REQUEST_GOBACK_FRONTLINE_TURN_RIGHT)) { Stopwatch sw = new Stopwatch(); sw.Start(); do { robot.onFlagGoBackReady = true; if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { robot.onFlagGoBackReady = false; Pose destPos2 = BuffToGate.GetFrontLineBuffer(); String destName2 = Traffic.DetermineArea(destPos2.Position, TypeZone.MAIN_ZONE); if (destName2.Equals("OUTER")) { ////robot.ShowText("GO FRONTLINE IN OUTER"); if (rb.SendPoseStamped(BuffToGate.GetFrontLineBuffer())) { resCmd = ResponseCommand.RESPONSE_NONE; StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER; registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = destPos2.Position; ////robot.ShowText("BUFMAC_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER"); } } else if (destName2.Equals("VIM")) { ////robot.ShowText("GO FRONTLINE IN VIM"); if (rb.SendPoseStamped(BuffToGate.GetFrontLineBuffer())) { resCmd = ResponseCommand.RESPONSE_NONE; StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER_FROM_VIM_READY; registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = destPos2.Position; ////robot.ShowText("BUFMAC_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER"); ////robot.ShowText("CHECK - REG"); } } break; } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); break; } if (sw.ElapsedMilliseconds > TIME_OUT_WAIT_GOTO_FRONTLINE) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); break; } Thread.Sleep(100); } while (ProRunStopW); sw.Stop(); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_ZONE_BUFFER_READY: // doi khu vuc buffer san sang de di vao try { if (false == robot.CheckInZoneBehavior(BuffToGate.GetFrontLineBuffer().Position)) { if (rb.SendPoseStamped(BuffToGate.GetFrontLineBuffer())) { StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER; ////robot.ShowText("BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER"); } } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER_FROM_VIM_READY: TrafficRountineConstants.DetectRelease(registryRobotJourney); try { if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { resCmd = ResponseCommand.RESPONSE_NONE; StateBufferToGate = BufferToGate.BUFGATE_ROBOT_SEND_CMD_PICKUP_PALLET_BUFFER; } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER_FROM_VIM_REG: if (TrafficRountineConstants.DetetectInsideStationCheck(registryRobotJourney)) { break; } else { StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER_FROM_VIM; } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER_FROM_VIM: TrafficRountineConstants.DetectRelease(registryRobotJourney); if (TrafficCheckInBuffer(goalFrontLinePos, bayId)) { break; } try { if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { resCmd = ResponseCommand.RESPONSE_NONE; StateBufferToGate = BufferToGate.BUFGATE_ROBOT_SEND_CMD_PICKUP_PALLET_BUFFER; } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER: try { if (TrafficCheckInBuffer(goalFrontLinePos, bayId)) { break; } if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { resCmd = ResponseCommand.RESPONSE_NONE; StateBufferToGate = BufferToGate.BUFGATE_ROBOT_SEND_CMD_PICKUP_PALLET_BUFFER; } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case BufferToGate.BUFGATE_ROBOT_SEND_CMD_PICKUP_PALLET_BUFFER: String palletInfo = JsonConvert.SerializeObject(BuffToGate.GetInfoOfPalletBuffer(PistonPalletCtrl.PISTON_PALLET_UP)); if (rb.SendCmdAreaPallet(palletInfo)) { // rb.SendCmdLineDetectionCtrl(RequestCommandLineDetect.REQUEST_LINEDETECT_PALLETUP); //rb.prioritLevel.OnAuthorizedPriorityProcedure = true; StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_PICKUP_PALLET_BUFFER; ////robot.ShowText("BUFGATE_ROBOT_WAITTING_PICKUP_PALLET_BUFFER"); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_PICKUP_PALLET_BUFFER: if (resCmd == ResponseCommand.RESPONSE_LINEDETECT_PALLETUP) { resCmd = ResponseCommand.RESPONSE_NONE; BuffToGate.UpdatePalletState(PalletStatus.F, order.palletId_H, order.planId); StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_BUFFER; ////robot.ShowText("BUFGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_BUFFER"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_BUFFER: // đợi if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { robot.bayId = -1; robot.bayIdReg = false; resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = false; StateBufferToGate = BufferToGate.BUFGATE_SELECT_BEHAVIOR_ONZONE_TO_GATE; // cập nhật lại điểm xuất phát registryRobotJourney.startPoint = robot.properties.pose.Position; } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case BufferToGate.BUFGATE_SELECT_BEHAVIOR_ONZONE_TO_GATE: String startNamePoint = Traffic.DetermineArea(registryRobotJourney.startPoint, TypeZone.MAIN_ZONE); Pose destPos = doorServiceCtrl.PointFrontLine; String destName = Traffic.DetermineArea(destPos.Position, TypeZone.MAIN_ZONE); // đi tới đầu line cổng theo tọa độ chỉ định. gate 1 , 2, 3 if (rb.SendPoseStamped(doorServiceCtrl.PointFrontLine)) { StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_GOTO_GATE_FROM_VIM_REG; // Cap Nhat Thong Tin CHuyen Di registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = doorServiceCtrl.PointFrontLine.Position; ////robot.ShowText("FORBUF_ROBOT_WAITTING_GOTO_GATE"); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_GOTO_GATE_FROM_VIM_REG: if (TrafficRountineConstants.DetetectInsideStationCheck(registryRobotJourney)) { break; } else { StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_GOTO_GATE_FROM_VIM; } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_GOTO_GATE_FROM_VIM: TrafficRountineConstants.DetectRelease(registryRobotJourney); if (Traffic.RobotIsInArea("C5", rb.properties.pose.Position)) { ds.setDoorBusy(true); ds.openDoor(DoorService.DoorType.DOOR_BACK); StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_GOTO_GATE_FROM_VIM_OPEN_DOOR; } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_GOTO_GATE_FROM_VIM_OPEN_DOOR: TrafficRountineConstants.DetectRelease(registryRobotJourney); if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = true; StateBufferToGate = BufferToGate.BUFGATE_ROBOT_CAME_GATE_POSITION; ////robot.ShowText("BUFGATE_ROBOT_CAME_GATE_POSITION"); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_GOTO_GATE: if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = true; StateBufferToGate = BufferToGate.BUFGATE_ROBOT_CAME_GATE_POSITION; ////robot.ShowText("BUFGATE_ROBOT_CAME_GATE_POSITION"); } break; case BufferToGate.BUFGATE_ROBOT_CAME_GATE_POSITION: // da den khu vuc cong , gui yeu cau mo cong. // ds.setDoorBusy(true); // ds.openDoor(DoorService.DoorType.DOOR_BACK); StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_OPEN_DOOR; ////robot.ShowText("BUFGATE_ROBOT_WAITTING_OPEN_DOOR"); break; case BufferToGate.BUFGATE_ROBOT_WAITTING_OPEN_DOOR: //doi mo cong RetState ret = ds.checkOpen(DoorService.DoorType.DOOR_BACK); if (ret == RetState.DOOR_CTRL_SUCCESS) { if (rb.SendCmdAreaPallet(doorServiceCtrl.infoPallet)) { StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_DROPDOWN_PALLET_BUFFER; ////robot.ShowText("BUFGATE_ROBOT_WAITTING_DROPDOWN_PALLET_BUFFER"); } } else if (ret == RetState.DOOR_CTRL_ERROR) { robot.ShowText("BUFGATE_ROBOT_WAITTING_OPEN_DOOR_ERROR__(-_-)"); Thread.Sleep(1000); ds.setDoorBusy(true); ds.openDoor(DoorService.DoorType.DOOR_BACK); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_DROPDOWN_PALLET_BUFFER: // doi robot gap hang if (resCmd == ResponseCommand.RESPONSE_LINEDETECT_PALLETDOWN) { resCmd = ResponseCommand.RESPONSE_NONE; // BuffToGate.UpdatePalletState(PalletStatus.W); StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE; ////robot.ShowText("BUFGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE: if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { resCmd = ResponseCommand.RESPONSE_NONE; ds.closeDoor(DoorService.DoorType.DOOR_BACK); ds.setDoorBusy(false); ds.LampSetStateOn(DoorType.DOOR_BACK); StateBufferToGate = BufferToGate.BUFGATE_ROBOT_WAITTING_CLOSE_GATE; ////robot.ShowText("BUFGATE_ROBOT_WAITTING_CLOSE_GATE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case BufferToGate.BUFGATE_ROBOT_WAITTING_CLOSE_GATE: // doi dong cong. StateBufferToGate = BufferToGate.BUFGATE_ROBOT_RELEASED; ////robot.ShowText("BUFGATE_ROBOT_WAITTING_CLOSE_GATE"); break; case BufferToGate.BUFGATE_ROBOT_RELEASED: // trả robot về robotmanagement để nhận quy trình mới ds.removeListCtrlDoorBack(); robot.bayId = -1; robot.bayIdReg = false; TrafficRountineConstants.ReleaseAll(robot); robot.robotTag = RobotStatus.IDLE; rb.PreProcedureAs = ProcedureControlAssign.PRO_BUFFER_TO_GATE; ReleaseProcedureHandler(this); ProRun = false; UpdateInformationInProc(this, ProcessStatus.S); order.endTimeProcedure = DateTime.Now; order.totalTimeProcedure = order.endTimeProcedure.Subtract(order.startTimeProcedure).TotalMinutes; KillEvent(); break; case BufferToGate.BUFGATE_ROBOT_DESTROY: ds.removeListCtrlDoorBack(); ProRunStopW = false; ProRunStopW = false; robot.robotTag = RobotStatus.IDLE; ProRun = false; order.endTimeProcedure = DateTime.Now; order.totalTimeProcedure = order.endTimeProcedure.Subtract(order.startTimeProcedure).TotalMinutes; TrafficRountineConstants.ReleaseAll(robot); break; default: break; } //robot.ShowText("-> " + procedureCode); Thread.Sleep(500); } StateBufferToGate = BufferToGate.BUFGATE_IDLE; }
public DoorViewModel() { DoorsData = new ObservableCollection <DoorData>(); LogsData = new ObservableCollection <LogData>(); service = new DoorService(this); }
public void RegisteAnItem(ProcedureControlServices item, ProcedureDataItems procedureDataItems, RobotAgent robot, DoorService door) { RegisterProcedureItem itemprocedure = new RegisterProcedureItem() { item = item, robot = robot, procedureDataItems = procedureDataItems }; item.ReleaseProcedureHandler += ReleaseProcedureItemHandler; RegisterProcedureItemList.Add(itemprocedure); }
public void LoadAllMySQLInformations() { DoorService.LoadAllDoorsFromDB(); Arcadia.Server.Services.StorageService.LoadAllStoragesFromDB(); }
public DoorController(ApplicationDbContext context) { _doorService = new DoorService(context); }
public void Procedure(object ojb) { ProcedureReturnToGate ReToGate = (ProcedureReturnToGate)ojb; RobotUnity rb = ReToGate.robot; // DataReturnToGate p = ReToGate.points; ds = ReToGate.door.DoorMezzamineReturn; ds.setRb(rb); TrafficManagementService Traffic = ReToGate.Traffic; rb.mcuCtrl.lampRbOn(); robot.ShowText(" Start -> " + procedureCode); while (ProRun) { switch (StateReturnToGate) { case ReturnToGate.RETGATE_IDLE: break; case ReturnToGate.RETGATE_ROBOT_WAITTING_GOTO_CHECKIN_RETURN: // doi robot di den khu vuc checkin cua vung buffer try { if (rb.PreProcedureAs == ProcedureControlAssign.PRO_READY) { if (rb.SendCmdPosPallet(RequestCommandPosPallet.REQUEST_GOBACK_FRONTLINE_TURN_RIGHT)) { Stopwatch sw = new Stopwatch(); sw.Start(); do { if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { if (rb.SendPoseStamped(ReToGate.GetCheckInBuffer())) { resCmd = ResponseCommand.RESPONSE_NONE; StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_ZONE_RETURN_READY; robot.ShowText("RETGATE_ROBOT_WAITTING_ZONE_RETURN_READY"); break; } } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); break; } if (sw.ElapsedMilliseconds > TIME_OUT_WAIT_GOTO_FRONTLINE) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); break; } Thread.Sleep(100); } while (ProRunStopW); sw.Stop(); } } else { if (rb.SendPoseStamped(ReToGate.GetCheckInBuffer())) { StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_ZONE_RETURN_READY; robot.ShowText("RETGATE_ROBOT_WAITTING_ZONE_RETURN_READY"); } } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ReturnToGate.RETGATE_ROBOT_WAITTING_ZONE_RETURN_READY: // doi khu vuc buffer san sang de di vao try { if (false == robot.CheckInZoneBehavior(ReToGate.GetFrontLineReturn().Position)) { if (rb.SendPoseStamped(ReToGate.GetFrontLineReturn())) { StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_CAME_FRONTLINE_RETURN; robot.ShowText("RETGATE_ROBOT_WAITTING_CAME_FRONTLINE_RETURN"); } } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ReturnToGate.RETGATE_ROBOT_WAITTING_CAME_FRONTLINE_RETURN: try { if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { resCmd = ResponseCommand.RESPONSE_NONE; StateReturnToGate = ReturnToGate.RETGATE_ROBOT_SEND_CMD_PICKUP_PALLET; } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ReturnToGate.RETGATE_ROBOT_SEND_CMD_PICKUP_PALLET: if (rb.SendCmdAreaPallet(ReToGate.GetInfoOfPalletReturn(PistonPalletCtrl.PISTON_PALLET_UP))) { StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_PICKUP_PALLET_RETURN; robot.ShowText("RETGATE_ROBOT_WAITTING_PICKUP_PALLET_RETURN"); } break; case ReturnToGate.RETGATE_ROBOT_WAITTING_PICKUP_PALLET_RETURN: if (resCmd == ResponseCommand.RESPONSE_LINEDETECT_PALLETUP) { resCmd = ResponseCommand.RESPONSE_NONE; ReToGate.UpdatePalletState(PalletStatus.F, order.palletId_H, order.planId); StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_RETURN; robot.ShowText("RETGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_RETURN"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ReturnToGate.RETGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_RETURN: // đợi if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { //rb.prioritLevel.OnAuthorizedPriorityProcedure = false; if (rb.SendPoseStamped(ds.config.PointCheckInGate)) { resCmd = ResponseCommand.RESPONSE_NONE; StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_GOTO_CHECKIN_GATE; robot.ShowText("RETGATE_ROBOT_WAITTING_GOTO_CHECKIN_GATE"); } } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; // case ReturnToGate.RETGATE_ROBOT_GOTO_CHECKIN_GATE: //gui toa do di den khu vuc checkin cong // rb.SendPoseStamped(ds.config.PointCheckInGate); // StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_GOTO_CHECKIN_GATE; // break; case ReturnToGate.RETGATE_ROBOT_WAITTING_GOTO_CHECKIN_GATE: if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = true; StateReturnToGate = ReturnToGate.RETGATE_ROBOT_CAME_CHECKIN_GATE; robot.ShowText("RETGATE_ROBOT_CAME_CHECKIN_GATE"); } break; case ReturnToGate.RETGATE_ROBOT_CAME_CHECKIN_GATE: // đã đến vị trí, kiem tra va cho khu vuc cong san sang de di vao. if (false == robot.CheckInZoneBehavior(ds.config.PointFrontLine.Position)) { //rb.prioritLevel.OnAuthorizedPriorityProcedure = false; if (rb.SendPoseStamped(ds.config.PointFrontLine)) { StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_GOTO_GATE; robot.ShowText("RETGATE_ROBOT_WAITTING_GOTO_GATE"); } } break; case ReturnToGate.RETGATE_ROBOT_WAITTING_GOTO_GATE: if (Traffic.RobotIsInArea("GATE3", rb.properties.pose.Position)) { ds.setDoorBusy(true); ds.openDoor(DoorService.DoorType.DOOR_BACK); StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_GOTO_GATE_OPENDOOR; } break; case ReturnToGate.RETGATE_ROBOT_WAITTING_GOTO_GATE_OPENDOOR: if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = true; StateReturnToGate = ReturnToGate.RETGATE_ROBOT_CAME_GATE_POSITION; robot.ShowText("RETGATE_ROBOT_CAME_GATE_POSITION"); } break; case ReturnToGate.RETGATE_ROBOT_CAME_GATE_POSITION: // da den khu vuc cong , gui yeu cau mo cong. //ds.setDoorBusy(true); //ds.openDoor(DoorService.DoorType.DOOR_BACK); StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_OPEN_DOOR; robot.ShowText("RETGATE_ROBOT_WAITTING_OPEN_DOOR"); break; case ReturnToGate.RETGATE_ROBOT_WAITTING_OPEN_DOOR: //doi mo cong RetState ret = ds.checkOpen(DoorService.DoorType.DOOR_BACK); if (ret == RetState.DOOR_CTRL_SUCCESS) { if (rb.SendCmdAreaPallet(ds.config.infoPallet)) { StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_DROPDOWN_PALLET_RETURN; robot.ShowText("RETGATE_ROBOT_WAITTING_DROPDOWN_PALLET_RETURN"); } } else if (ret == RetState.DOOR_CTRL_ERROR) { robot.ShowText("RETGATE_ROBOT_WAITTING_OPEN_DOOR_ERROR__(-_-)"); Thread.Sleep(1000); ds.setDoorBusy(true); ds.openDoor(DoorService.DoorType.DOOR_BACK); } break; // case ReturnToGate.RETGATE_ROBOT_OPEN_DOOR_SUCCESS: // mo cua thang cong ,gui toa do line de robot di vao // rb.SendCmdLineDetectionCtrl(RequestCommandLineDetect.REQUEST_LINEDETECT_PALLETDOWN); // StateReturnToGate = ReturnToGate.RETGATE_ROBOT_GOTO_POSITION_PALLET_RETURN; // break; // case ReturnToGate.RETGATE_ROBOT_GOTO_POSITION_PALLET_RETURN: // if (true == rb.CheckPointDetectLine(ds.config.PointOfPallet, rb)) // { // rb.SendCmdPosPallet(RequestCommandPosPallet.REQUEST_LINEDETECT_COMING_POSITION); // StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_DROPDOWN_PALLET_RETURN; // } // break; case ReturnToGate.RETGATE_ROBOT_WAITTING_DROPDOWN_PALLET_RETURN: // doi robot gap hang if (resCmd == ResponseCommand.RESPONSE_LINEDETECT_PALLETDOWN) { resCmd = ResponseCommand.RESPONSE_NONE; // ReToGate.UpdatePalletState(PalletStatus.W); StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE; robot.ShowText("RETGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ReturnToGate.RETGATE_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE: if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { resCmd = ResponseCommand.RESPONSE_NONE; ds.closeDoor(DoorService.DoorType.DOOR_BACK); ds.setDoorBusy(false); StateReturnToGate = ReturnToGate.RETGATE_ROBOT_WAITTING_CLOSE_GATE; robot.ShowText("RETGATE_ROBOT_WAITTING_CLOSE_GATE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ReturnToGate.RETGATE_ROBOT_WAITTING_CLOSE_GATE: // doi dong cong. //if (true == ds.WaitClose(DoorService.DoorType.DOOR_BACK, TIME_OUT_CLOSE_DOOR)) //{ StateReturnToGate = ReturnToGate.RETGATE_ROBOT_RELEASED; //rb.prioritLevel.OnAuthorizedPriorityProcedure = false; robot.ShowText("RETGATE_ROBOT_WAITTING_CLOSE_GATE"); //} //else //{ // errorCode = ErrorCode.CLOSE_DOOR_ERROR; // CheckUserHandleError(this); //} break; case ReturnToGate.RETGATE_ROBOT_RELEASED: // trả robot về robotmanagement để nhận quy trình mới ds.removeListCtrlDoorBack(); robot.robotTag = RobotStatus.IDLE; rb.PreProcedureAs = ProcedureControlAssign.PRO_RETURN_TO_GATE; // if (errorCode == ErrorCode.RUN_OK) { ReleaseProcedureHandler(this); // } else { // ErrorProcedureHandler (this); // } ProRun = false; robot.ShowText("RELEASED"); UpdateInformationInProc(this, ProcessStatus.S); order.endTimeProcedure = DateTime.Now; order.totalTimeProcedure = order.endTimeProcedure.Subtract(order.startTimeProcedure).TotalMinutes; KillEvent(); break; default: break; } Thread.Sleep(5); } StateReturnToGate = ReturnToGate.RETGATE_IDLE; }
public void Procedure(object ojb) { ProcedureForkLiftToMachine FlToMach = (ProcedureForkLiftToMachine)ojb; RobotUnity rb = FlToMach.robot; ds = FlToMach.door; ds.setRb(rb); TrafficManagementService Traffic = FlToMach.Traffic; rb.mcuCtrl.lampRbOn(); robot.ShowText(" Start -> " + procedureCode); while (ProRun) { switch (StateForkLiftToMachine) { case ForkLiftToMachine.FORMACH_IDLE: robot.ShowText("FORMACH_IDLE"); break; case ForkLiftToMachine.FORMACH_ROBOT_GOTO_CHECKIN_GATE: //gui toa do di den khu vuc checkin cong if (rb.PreProcedureAs == ProcedureControlAssign.PRO_READY) { if (false == robot.CheckInGateFromReadyZoneBehavior(ds.config.PointFrontLine.Position)) { robot.robotTag = RobotStatus.WORKING; StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_GOTO_BACK_FRONTLINE_READY; } } else { robot.robotTag = RobotStatus.WORKING; if (Traffic.RobotIsInArea("OPA4", rb.properties.pose.Position)) { rb.SendPoseStamped(ds.config.PointFrontLine); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOTO_GATE; robot.ShowText("FORMACH_ROBOT_CAME_CHECKIN_GATE"); } else { rb.SendPoseStamped(ds.config.PointCheckInGate); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOTO_CHECKIN_GATE; robot.ShowText("FORMACH_ROBOT_WAITTING_GOTO_CHECKIN_GATE"); } } break; case ForkLiftToMachine.FORMACH_ROBOT_GOTO_BACK_FRONTLINE_READY: if (rb.SendCmdPosPallet(RequestCommandPosPallet.REQUEST_GOBACK_FRONTLINE_TURN_LEFT)) { Stopwatch sw = new Stopwatch(); sw.Start(); do { if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { if (rb.SendPoseStamped(ds.config.PointFrontLine)) { resCmd = ResponseCommand.RESPONSE_NONE; StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOTO_GATE; robot.ShowText("FORMACH_ROBOT_WAITTING_GOTO_GATE"); break; } } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); break; } if (sw.ElapsedMilliseconds > TIME_OUT_WAIT_GOTO_FRONTLINE) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); break; } Thread.Sleep(100); } while (ProRunStopW); sw.Stop(); } break; case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOTO_CHECKIN_GATE: if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) //if (robot.ReachedGoal()) { resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = true; rb.UpdateRiskAraParams(0, rb.properties.L2, rb.properties.WS, rb.properties.DistInter); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_CAME_CHECKIN_GATE; robot.ShowText("FORMACH_ROBOT_CAME_CHECKIN_GATE"); } break; case ForkLiftToMachine.FORMACH_ROBOT_CAME_CHECKIN_GATE: // đã đến vị trí, kiem tra va cho khu vuc cong san sang de di vao. // robot.ShowText( "FORMACH_ROBOT_WAITTING_GOTO_GATE ===> FLAG " + Traffic.HasRobotUnityinArea(ds.config.PointFrontLine.Position)); if (false == robot.CheckInZoneBehavior(ds.config.PointFrontLine.Position)) { if (TrafficRountineConstants.RegIntZone_READY.ProcessRegistryIntersectionZone(robot)) { rb.UpdateRiskAraParams(40, rb.properties.L2, rb.properties.WS, rb.properties.DistInter); //rb.prioritLevel.OnAuthorizedPriorityProcedure = false; rb.SendPoseStamped(ds.config.PointFrontLine); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOTO_GATE; robot.ShowText("FORMACH_ROBOT_WAITTING_GOTO_GATE"); } else { Thread.Sleep(500); break; } } break; case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOTO_GATE: if (Traffic.RobotIsInArea("C3", rb.properties.pose.Position)) { ds.setDoorBusy(true); ds.openDoor(DoorService.DoorType.DOOR_BACK); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOTO_GATE_OPENDOOR; } break; case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOTO_GATE_OPENDOOR: if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { TrafficRountineConstants.RegIntZone_READY.Release(robot); robot.SwitchToDetectLine(true); resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = true; StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_CAME_GATE_POSITION; robot.ShowText("FORMACH_ROBOT_CAME_GATE_POSITION"); } break; case ForkLiftToMachine.FORMACH_ROBOT_CAME_GATE_POSITION: // da den khu vuc cong , gui yeu cau mo cong. robot.robotRegistryToWorkingZone.onRobotwillCheckInsideGate = false; //ds.setDoorBusy(true); //ds.openDoor(DoorService.DoorType.DOOR_BACK); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_OPEN_DOOR; robot.ShowText("FORMACH_ROBOT_WAITTING_OPEN_DOOR"); break; case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_OPEN_DOOR: //doi mo cong RetState ret = ds.checkOpen(DoorService.DoorType.DOOR_BACK); if (ret == RetState.DOOR_CTRL_SUCCESS) { StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_OPEN_DOOR_SUCCESS; robot.ShowText("FORMACH_ROBOT_OPEN_DOOR_SUCCESS"); } else if (ret == RetState.DOOR_CTRL_ERROR) { robot.ShowText("FORMACH_ROBOT_OPEN_DOOR_ERROR"); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_CAME_GATE_POSITION; Thread.Sleep(1000); } break; case ForkLiftToMachine.FORMACH_ROBOT_OPEN_DOOR_SUCCESS: // mo cua thang cong ,gui toa do line de robot di vao gap hang // rb.SendCmdLineDetectionCtrl(RequestCommandLineDetect.REQUEST_LINEDETECT_PALLETUP); rb.SendCmdAreaPallet(ds.config.infoPallet); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_PICKUP_PALLET_IN; robot.ShowText("FORMACH_ROBOT_WAITTING_PICKUP_PALLET_IN"); break; case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_PICKUP_PALLET_IN: // doi robot gap hang if (resCmd == ResponseCommand.RESPONSE_LINEDETECT_PALLETUP) { resCmd = ResponseCommand.RESPONSE_NONE; // FlToMach.UpdatePalletState(PalletStatus.F); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE; robot.robotBahaviorAtGate = RobotBahaviorAtReadyGate.GOING_OUTSIDE_GATE; robot.ShowText("FORMACH_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE: if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { Global_Object.setGateStatus(order.gate, false); robot.SwitchToDetectLine(false); resCmd = ResponseCommand.RESPONSE_NONE; ds.LampSetStateOff(DoorService.DoorType.DOOR_FRONT); ds.closeDoor(DoorService.DoorType.DOOR_BACK); ds.setDoorBusy(false); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_CLOSE_GATE; robot.ShowText("FORMACH_ROBOT_WAITTING_CLOSE_GATE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_CLOSE_GATE: // doi dong cong. try { if (TrafficRountineConstants.RegIntZone_READY.ProcessRegistryIntersectionZone(robot)) { //rb.prioritLevel.OnAuthorizedPriorityProcedure = false; if (rb.SendPoseStamped(FlToMach.GetFrontLineMachine())) { Global_Object.setGateStatus(order.gate, false); // Global_Object.onFlagDoorBusy = false; StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_CAME_FRONTLINE_MACHINE; robot.ShowText("FORMACH_ROBOT_WAITTING_CAME_FRONTLINE_MACHINE"); } } else { Thread.Sleep(500); break; } //} //else //{ // // errorCode = ErrorCode.CLOSE_DOOR_ERROR; // // CheckUserHandleError(this); //} } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_CAME_FRONTLINE_MACHINE: try { // Global_Object.onFlagDoorBusy = false; if (!Traffic.HasRobotUnityinArea("GATE_CHECKOUT", robot)) { // robot.ShowText("RELEASED ZONE"); if (!onFlagResetedGate) { TrafficRountineConstants.RegIntZone_READY.Release(robot); robot.robotBahaviorAtGate = RobotBahaviorAtReadyGate.IDLE; onFlagResetedGate = true; Global_Object.onFlagRobotComingGateBusy = false; robot.ReleaseWorkingZone(); } } if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) //if (robot.ReachedGoal()) { //robot.TurnOnCtrlSelfTraffic(false); //rb.prioritLevel.OnAuthorizedPriorityProcedure = true; rb.SendCmdPosPallet(RequestCommandPosPallet.REQUEST_DROPDOWN_PALLET); StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_WAITTING_DROPDOWN_PALLET_MACHINE; robot.ShowText("FORMACH_ROBOT_WAITTING_DROPDOWN_PALLET_MACHINE"); } } catch (System.Exception) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_DROPDOWN_PALLET_MACHINE: if (resCmd == ResponseCommand.RESPONSE_FINISH_DROPDOWN_PALLET) { resCmd = ResponseCommand.RESPONSE_NONE; StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_RELEASED; robot.ShowText("FORMACH_ROBOT_RELEASED"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; //case ForkLiftToMachine.FORMACH_ROBOT_WAITTING_GOBACK_FRONTLINE_MACHINE: // đợi // if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) // { // resCmd = ResponseCommand.RESPONSE_NONE; // rb.prioritLevel.OnAuthorizedPriorityProcedure = false; // StateForkLiftToMachine = ForkLiftToMachine.FORMACH_ROBOT_RELEASED; // robot.ShowText("FORMACH_ROBOT_RELEASED"); // } // else if (resCmd == ResponseCommand.RESPONSE_ERROR) // { // errorCode = ErrorCode.DETECT_LINE_ERROR; // CheckUserHandleError(this); // } // break; case ForkLiftToMachine.FORMACH_ROBOT_RELEASED: // trả robot về robotmanagement để nhận quy trình mới ds.removeListCtrlDoorBack(); robot.orderItem = null; //Global_Object.onFlagDoorBusy = false; robot.SwitchToDetectLine(false); // robot.robotTag = RobotStatus.IDLE; robot.ReleaseWorkingZone(); rb.PreProcedureAs = ProcedureControlAssign.PRO_FORKLIFT_TO_MACHINE; order.status = StatusOrderResponseCode.FINISHED; // if (errorCode == ErrorCode.RUN_OK) { ReleaseProcedureHandler(this); // } else { // ErrorProcedureHandler (this); // } ProRun = false; robot.ShowText("RELEASED"); UpdateInformationInProc(this, ProcessStatus.S); order.endTimeProcedure = DateTime.Now; order.totalTimeProcedure = order.endTimeProcedure.Subtract(order.startTimeProcedure).TotalMinutes; KillEvent(); break; default: break; } Thread.Sleep(5); } StateForkLiftToMachine = ForkLiftToMachine.FORMACH_IDLE; }
public ProcedureControlServices(RobotAgent robot, DoorService doorService) : base(robot, doorService) { }
public void Procedure(object ojb) { ProcedureForkLiftToBuffer FlToBuf = (ProcedureForkLiftToBuffer)ojb; RobotUnity rb = FlToBuf.robot; doorServiceCtrl = new DoorServiceCtrl(); doorServiceCtrl = getDoorService(); ds = doorServiceCtrl.doorService; ds.setRb(rb); TrafficManagementService Traffic = FlToBuf.Traffic; ForkLiftToMachineInfo flToMachineInfo = new ForkLiftToMachineInfo(); rb.mcuCtrl.lampRbOn(); robot.ShowText(" Start -> " + procedureCode); /* endPointBuffer = FlToBuf.GetFrontLineBuffer(true); * if (endPointBuffer == null) * { * robot.bayId = -1; * Console.WriteLine("Error Data Request" + order.dataRequest); * order.status = StatusOrderResponseCode.ERROR_GET_FRONTLINE; * TrafficRountineConstants.ReleaseAll(robot); * robot.orderItem = null; * robot.SwitchToDetectLine(false); * robot.ReleaseWorkingZone(); * if (Traffic.RobotIsInArea("READY", robot.properties.pose.Position)) * { * TrafficRountineConstants.RegIntZone_READY.Release(robot); * robot.robotTag = RobotStatus.IDLE; * robot.SetSafeYellowcircle(false); * robot.SetSafeBluecircle(false); * robot.SetSafeSmallcircle(false); * robot.TurnOnSupervisorTraffic(false); * // rb.mcuCtrl.lampRbOff(); * procedureCode = ProcedureCode.PROC_CODE_ROBOT_TO_READY; * } * else * procedureCode = ProcedureCode.PROC_CODE_FORKLIFT_TO_BUFFER; * ReleaseProcedureHandler(this); * ProRun = false; * robot.ShowText("RELEASED"); * UpdateInformationInProc(this, ProcessStatus.S); * order.endTimeProcedure = DateTime.Now; * order.totalTimeProcedure = order.endTimeProcedure.Subtract(order.startTimeProcedure).TotalMinutes; * SaveOrderItem(order); * KillEvent(); * } * else * { * order.frontLinePos = endPointBuffer.Position; * robot.bayId = bayId; * }*/ while (ProRun) { // JPallet aa= GetInfoPallet_P_InBuffer(TrafficRobotUnity.PistonPalletCtrl.PISTON_PALLET_DOWN); switch (StateForkLift) { case ForkLift.FORBUF_IDLE: robot.ShowText("FORBUF_IDLE"); break; case ForkLift.FORBUF_GET_FRONTLINE: endPointBuffer = FlToBuf.GetFrontLineBuffer(true); if (endPointBuffer == null) { if (countFrontLineNull++ < 10) { break; } countFrontLineNull = 0; robot.bayId = -1; robot.ShowText("Error Data Request FrontLine ForkLift" + order.dataRequest); order.status = StatusOrderResponseCode.ERROR_GET_FRONTLINE; TrafficRountineConstants.ReleaseAll(robot); robot.orderItem = null; robot.SwitchToDetectLine(false); robot.ReleaseWorkingZone(); if (Traffic.RobotIsInArea("READY", robot.properties.pose.Position)) { TrafficRountineConstants.RegIntZone_READY.Release(robot); robot.robotTag = RobotStatus.IDLE; robot.SetSafeYellowcircle(false); robot.SetSafeBluecircle(false); robot.SetSafeSmallcircle(false); robot.TurnOnSupervisorTraffic(false); // rb.mcuCtrl.lampRbOff(); procedureCode = ProcedureCode.PROC_CODE_ROBOT_TO_READY; } else { procedureCode = ProcedureCode.PROC_CODE_FORKLIFT_TO_BUFFER; } ProRun = false; robot.ShowText("RELEASED FL---"); UpdateInformationInProc(this, ProcessStatus.S); order.endTimeProcedure = DateTime.Now; order.totalTimeProcedure = order.endTimeProcedure.Subtract(order.startTimeProcedure).TotalMinutes; SaveOrderItem(order); KillEvent(); ReleaseProcedureHandler(this); } else { order.frontLinePos = endPointBuffer.Position; robot.bayId = bayId; StateForkLift = ForkLift.FORBUF_SELECT_BEHAVIOR_ONZONE; } break; case ForkLift.FORBUF_SELECT_BEHAVIOR_ONZONE: order.status = StatusOrderResponseCode.GOING_AND_PICKING_UP; if (Traffic.RobotIsInArea("READY", robot.properties.pose.Position)) { if (rb.PreProcedureAs == ProcedureControlAssign.PRO_READY) { //if (false == rb.CheckInGateFromReadyZoneBehavior(doorServiceCtrl.PointFrontLine.Position)) { robot.ShowText("FORBUF_ROBOT_GOTO_BACK_FRONTLINE_READY"); registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = doorServiceCtrl.PointFrontLine.Position; StateForkLift = ForkLift.FORBUF_ROBOT_GOTO_BACK_FRONTLINE_READY; } } } else if (Traffic.RobotIsInArea("VIM", robot.properties.pose.Position)) { robot.robotTag = RobotStatus.WORKING; if (rb.SendPoseStamped(doorServiceCtrl.PointFrontLine)) { StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_FROM_VIM_REG; // Cap Nhat Thong Tin CHuyen Di registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = doorServiceCtrl.PointFrontLine.Position; robot.ShowText("FORBUF_ROBOT_WAITTING_GOTO_GATE"); } } else if (Traffic.RobotIsInArea("OUTER", robot.properties.pose.Position)) { // public void Start (ForkLiftToBuffer state = ForkLiftToBuffer.FORBUF_ROBOT_RELEASED) { robot.robotTag = RobotStatus.WORKING; if (rb.SendPoseStamped(doorServiceCtrl.PointFrontLine)) { StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_FROM_VIM_REG; registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = doorServiceCtrl.PointFrontLine.Position; robot.ShowText("FORBUF_ROBOT_WAITTING_GOTO_CHECKIN_GATE"); } } break; case ForkLift.FORBUF_ROBOT_GOTO_BACK_FRONTLINE_READY: if (TrafficRountineConstants.DetetectInsideStationCheck(registryRobotJourney)) { break; } robot.ShowText("Detetect Inside Station Check Ready"); if (rb.SendCmdPosPallet(RequestCommandPosPallet.REQUEST_GOBACK_FRONTLINE_TURN_LEFT)) { Stopwatch sw = new Stopwatch(); sw.Start(); do { robot.onFlagGoBackReady = true; if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE || Traffic.RobotIsInArea("READY_FRONTLINE", robot.properties.pose.Position)) { robot.onFlagGoBackReady = false; robot.robotTag = RobotStatus.WORKING; if (rb.SendPoseStamped(doorServiceCtrl.PointFrontLine)) { resCmd = ResponseCommand.RESPONSE_NONE; StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_READY; robot.ShowText("FORBUF_ROBOT_WAITTING_GOTO_GATE"); break; } } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); break; } if (sw.ElapsedMilliseconds > TIME_OUT_WAIT_GOTO_FRONTLINE) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); break; } Thread.Sleep(100); } while (ProRunStopW); sw.Stop(); } break; case ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_READY: // dò ra điểm đích đến và xóa đăng ký vùng // TrafficRountineConstants.DetectRelease(registryRobotJourney); if (Traffic.RobotIsInArea("C3", rb.properties.pose.Position)) { ds.setDoorBusy(true); ds.openDoor(DoorService.DoorType.DOOR_BACK); StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_READY_OPEN_DOOR; } break; case ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_READY_OPEN_DOOR: // dò ra điểm đích đến và xóa đăng ký vùng TrafficRountineConstants.DetectRelease(registryRobotJourney); if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { robot.setTrafficAllCircles(false, false, false, false); TrafficRountineConstants.RegIntZone_READY.Release(robot); robot.SwitchToDetectLine(true); resCmd = ResponseCommand.RESPONSE_NONE; StateForkLift = ForkLift.FORBUF_ROBOT_CAME_GATE_POSITION; robot.ShowText("FORBUF_ROBOT_CAME_GATE_POSITION"); } break; case ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_FROM_VIM_REG: // kiem tra vung đăng ký tai khu vuc xac định if (TrafficRountineConstants.DetetectInsideStationCheck(registryRobotJourney)) { break; } else { // dò ra điểm đích đến và xóa đăng ký vùng StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_FROM_VIM; } break; case ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_FROM_VIM: // kiem tra vung đăng ký tai khu vuc xac định //TrafficRountineConstants.DetectRelease(registryRobotJourney); if (Traffic.RobotIsInArea("C3", rb.properties.pose.Position)) { ds.setDoorBusy(true); ds.openDoor(DoorService.DoorType.DOOR_BACK); StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_FROM_VIM_OPEN_DOOR; } break; case ForkLift.FORBUF_ROBOT_WAITTING_GOTO_GATE_FROM_VIM_OPEN_DOOR: // kiem tra vung đăng ký tai khu vuc xac định TrafficRountineConstants.DetectRelease(registryRobotJourney); if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { // robot.setTrafficAllCircles(false, false, false, false); TrafficRountineConstants.RegIntZone_READY.Release(robot); robot.SwitchToDetectLine(true); resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = true; StateForkLift = ForkLift.FORBUF_ROBOT_CAME_GATE_POSITION; robot.ShowText("FORBUF_ROBOT_CAME_GATE_POSITION"); } break; case ForkLift.FORBUF_ROBOT_CAME_GATE_POSITION: // da den khu vuc cong , gui yeu cau mo cong. robot.robotRegistryToWorkingZone.onRobotwillCheckInsideGate = false; //ds.setDoorBusy(true); //ds.openDoor(DoorService.DoorType.DOOR_BACK); StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_OPEN_DOOR; robot.ShowText("FORBUF_ROBOT_WAITTING_OPEN_DOOR"); break; case ForkLift.FORBUF_ROBOT_WAITTING_OPEN_DOOR: //doi mo cong RetState ret = ds.checkOpen(DoorService.DoorType.DOOR_BACK); if (RetState.DOOR_CTRL_SUCCESS == ret || robot.onForceGoToGate) { ds.resetWaitOpenBack(); robot.onForceGoToGate = false; StateForkLift = ForkLift.FORBUF_ROBOT_OPEN_DOOR_SUCCESS; robot.ShowText("FORBUF_ROBOT_OPEN_DOOR_SUCCESS"); } else if (RetState.DOOR_CTRL_ERROR == ret) { robot.ShowText("FORBUF_ROBOT_OPEN_DOOR_ERROR"); //StateForkLift = ForkLift.FORBUF_ROBOT_CAME_GATE_POSITION; Thread.Sleep(1000); ds.setDoorBusy(true); ds.openDoor(DoorService.DoorType.DOOR_BACK); } break; case ForkLift.FORBUF_ROBOT_OPEN_DOOR_SUCCESS: // mo cua thang cong ,gui toa do line de robot di vao gap hang // rb.SendCmdLineDetectionCtrl(RequestCommandLineDetect.REQUEST_LINEDETECT_PALLETUP); if (rb.SendCmdAreaPallet(doorServiceCtrl.infoPallet)) { StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_PICKUP_PALLET_IN; robot.ShowText("FORBUF_ROBOT_WAITTING_PICKUP_PALLET_IN"); } break; case ForkLift.FORBUF_ROBOT_WAITTING_PICKUP_PALLET_IN: // doi robot gap hang try { DoorStatus ret1 = ds.getStatusDoor(DoorType.DOOR_BACK); if (DoorStatus.DOOR_OPEN == ret1) { robot.SetSpeedTraffic(RobotSpeedLevel.ROBOT_SPEED_NORMAL, false); if (resCmd == ResponseCommand.RESPONSE_LINEDETECT_PALLETUP) { resCmd = ResponseCommand.RESPONSE_NONE; StateForkLift = ForkLift.FORBUF_ROBOT_FINISH_PALLET_UP; Console.WriteLine("pallet ID" + order.palletId); robot.robotBahaviorAtGate = RobotBahaviorAtReadyGate.GOING_OUTSIDE_GATE; robot.ShowText("FORBUF_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } } //else if (DoorStatus.DOOR_UNKNOW == ret1) //{ //} else /* if(DoorStatus.DOOR_CLOSE == ret1)*/ { robot.ShowText("DOOR_ERROR_(-___-)"); robot.SetSpeedTraffic(RobotSpeedLevel.ROBOT_SPEED_STOP, true); ds.setDoorBusy(true); ds.openDoor(DoorType.DOOR_BACK); Thread.Sleep(7000); } } catch { } break; case ForkLift.FORBUF_ROBOT_FINISH_PALLET_UP: String destName = Traffic.DetermineArea(endPointBuffer.Position, TypeZone.MAIN_ZONE); if (destName.Equals("VIM")) { if (checkAnyRobotAtElevator(robot)) { break; } else { StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE; } } else { StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE; } break; case ForkLift.FORBUF_ROBOT_WAITTING_GOBACK_FRONTLINE_GATE: // kiem tra da toi vung dong cong if (!Traffic.RobotIsInArea("CLOSE-GATE", robot.properties.pose.Position)) { DoorStatus ret2 = ds.getStatusDoor(DoorType.DOOR_BACK); if (DoorStatus.DOOR_OPEN == ret2) { robot.SetSpeedTraffic(RobotSpeedLevel.ROBOT_SPEED_NORMAL, false); if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { Global_Object.setGateStatus(order.gate, false); resCmd = ResponseCommand.RESPONSE_NONE; ds.LampSetStateOff(DoorType.DOOR_FRONT); ds.closeDoor(DoorType.DOOR_BACK); ds.setDoorBusy(false); StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_CLOSE_GATE; robot.ShowText("FORBUF_ROBOT_WAITTING_CLOSE_GATE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } } //else if (DoorStatus.DOOR_UNKNOW == ret1) //{ //} else /* if(DoorStatus.DOOR_CLOSE == ret1)*/ { robot.ShowText("DOOR_ERROR_(-___-)"); robot.SetSpeedTraffic(RobotSpeedLevel.ROBOT_SPEED_STOP, true); ds.setDoorBusy(true); ds.openDoor(DoorType.DOOR_BACK); Thread.Sleep(6000); } } else { robot.SetSpeedTraffic(RobotSpeedLevel.ROBOT_SPEED_NORMAL, false); if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { Global_Object.setGateStatus(order.gate, false); resCmd = ResponseCommand.RESPONSE_NONE; ds.LampSetStateOff(DoorType.DOOR_FRONT); ds.closeDoor(DoorType.DOOR_BACK); ds.setDoorBusy(false); StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_CLOSE_GATE; robot.ShowText("FORBUF_ROBOT_WAITTING_CLOSE_GATE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } } break; case ForkLift.FORBUF_ROBOT_WAITTING_CLOSE_GATE: try { StateForkLift = ForkLift.FORBUF_ROBOT_CHECK_GOTO_BUFFER_OR_MACHINE; robot.SwitchToDetectLine(false); registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = endPointBuffer.Position; } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ForkLift.FORBUF_ROBOT_CHECK_GOTO_BUFFER_OR_MACHINE: order.status = StatusOrderResponseCode.DELIVERING; flToMachineInfo = GetPriorityTaskForkLiftToMachine(order.productDetailId); if (flToMachineInfo == null) { StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_ZONE_BUFFER_READY; registryRobotJourney.startPlaceName = Traffic.DetermineArea(robot.properties.pose.Position, TypeZone.OPZS); registryRobotJourney.startPoint = robot.properties.pose.Position; registryRobotJourney.endPoint = endPointBuffer.Position; } else { FreePlanedBuffer(order.palletId_P); UpdatePalletState(PalletStatus.W, flToMachineInfo.palletId, flToMachineInfo.planId); StateForkLift = ForkLift.FORMAC_ROBOT_GOTO_FRONTLINE_MACHINE_FROM_VIM_REG; } break; case ForkLift.FORBUF_ROBOT_WAITTING_ZONE_BUFFER_READY: if (TrafficRountineConstants.DetetectInsideStationCheck(registryRobotJourney)) { break; } Pose destPos1 = endPointBuffer; if (rb.SendPoseStamped(destPos1)) { StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER; robot.ShowText("FORBUF_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER"); } break; case ForkLift.FORBUF_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER_FROM_VIM_REG: if (TrafficRountineConstants.DetetectInsideStationCheck(registryRobotJourney)) { break; } else { StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER_FROM_VIM; } break; case ForkLift.FORBUF_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER_FROM_VIM: TrafficRountineConstants.DetectRelease(registryRobotJourney); try { if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { robot.SwitchToDetectLine(true); resCmd = ResponseCommand.RESPONSE_NONE; StateForkLift = ForkLift.FORBUF_ROBOT_SEND_CMD_DROPDOWN_PALLET_BUFFER; } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ForkLift.FORBUF_ROBOT_WAITTING_CAME_FRONTLINE_BUFFER: // xóa đăng ký vùng TrafficRountineConstants.DetectRelease(registryRobotJourney); if (TrafficCheckInBuffer(goalFrontLinePos, bayId)) { break; } try { if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { robot.SwitchToDetectLine(true); resCmd = ResponseCommand.RESPONSE_NONE; StateForkLift = ForkLift.FORBUF_ROBOT_SEND_CMD_DROPDOWN_PALLET_BUFFER; } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ForkLift.FORBUF_ROBOT_SEND_CMD_DROPDOWN_PALLET_BUFFER: JResult = FlToBuf.GetInfoPallet_P_InBuffer(PistonPalletCtrl.PISTON_PALLET_DOWN); String data = JsonConvert.SerializeObject(JResult.jInfoPallet); if (rb.SendCmdAreaPallet(data)) { StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_DROPDOWN_PALLET_BUFFER; robot.ShowText("FORBUF_ROBOT_WAITTING_DROPDOWN_PALLET_BUFFER"); } break; case ForkLift.FORBUF_ROBOT_WAITTING_DROPDOWN_PALLET_BUFFER: if (resCmd == ResponseCommand.RESPONSE_LINEDETECT_PALLETDOWN) { resCmd = ResponseCommand.RESPONSE_NONE; FlToBuf.UpdatePalletState(PalletStatus.W, JResult.palletId, order.planId); // rb.SendCmdPosPallet (RequestCommandPosPallet.REQUEST_GOBACK_FRONTLINE); StateForkLift = ForkLift.FORBUF_ROBOT_WAITTING_GOBACK_FRONTLINE_BUFFER; robot.ShowText("FORBUF_ROBOT_WAITTING_GOBACK_FRONTLINE_BUFFER"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { Console.WriteLine("Loi Update :ForkLift.FORBUF_ROBOT_WAITTING_DROPDOWN_PALLET_BUFFER"); errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ForkLift.FORBUF_ROBOT_WAITTING_GOBACK_FRONTLINE_BUFFER: // đợi if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { robot.bayId = -1; robot.bayIdReg = false; robot.ReleaseWorkingZone(); robot.SwitchToDetectLine(false); resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = false; StateForkLift = ForkLift.FORBUF_ROBOT_RELEASED; robot.ShowText("FORBUF_ROBOT_RELEASED"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { Console.WriteLine("Loi Update :ForkLift.FORBUF_ROBOT_WAITTING_GOBACK_FRONTLINE_BUFFER"); errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ForkLift.FORBUF_ROBOT_RELEASED: // trả robot về robotmanagement để nhận quy trình mới rb.PreProcedureAs = ProcedureControlAssign.PRO_FORKLIFT_TO_BUFFER; ReleaseProcedureHandler(this); ProRun = false; robot.ShowText("RELEASED"); UpdateInformationInProc(this, ProcessStatus.S); order.status = StatusOrderResponseCode.FINISHED; break; case ForkLift.FORMAC_ROBOT_GOTO_FRONTLINE_MACHINE_FROM_VIM_REG: if (TrafficRountineConstants.DetetectInsideStationCheck(registryRobotJourney)) { break; } else { StateForkLift = ForkLift.FORMAC_ROBOT_GOTO_FRONTLINE_MACHINE_FROM_VIM; } break; case ForkLift.FORMAC_ROBOT_GOTO_FRONTLINE_MACHINE_FROM_VIM: TrafficRountineConstants.DetectRelease(registryRobotJourney); try { if (rb.SendPoseStamped(flToMachineInfo.frontLinePose)) { StateForkLift = ForkLift.FORMAC_ROBOT_WAITTING_CAME_FRONTLINE_MACHINE; robot.ShowText("FORMAC_ROBOT_WAITTING_CAME_FRONTLINE_MACHINE"); onFlagResetedGate = false; } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ForkLift.FORMAC_ROBOT_GOTO_FRONTLINE_MACHINE: try { if (TrafficRountineConstants.DetetectInsideStationCheck(registryRobotJourney)) { break; } if (rb.SendPoseStamped(flToMachineInfo.frontLinePose)) { StateForkLift = ForkLift.FORMAC_ROBOT_WAITTING_CAME_FRONTLINE_MACHINE; robot.ShowText("FORMAC_ROBOT_WAITTING_CAME_FRONTLINE_MACHINE"); onFlagResetedGate = false; } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ForkLift.FORMAC_ROBOT_WAITTING_CAME_FRONTLINE_MACHINE: try { TrafficRountineConstants.DetectRelease(registryRobotJourney); if (resCmd == ResponseCommand.RESPONSE_LASER_CAME_POINT) { robot.SwitchToDetectLine(true); StateForkLift = ForkLift.FORMAC_ROBOT_SEND_CMD_DROPDOWN_PALLET_MACHINE; } } catch (System.Exception) { errorCode = ErrorCode.CAN_NOT_GET_DATA; CheckUserHandleError(this); } break; case ForkLift.FORMAC_ROBOT_SEND_CMD_DROPDOWN_PALLET_MACHINE: if (rb.SendCmdAreaPallet(flToMachineInfo.infoPallet)) { StateForkLift = ForkLift.FORMAC_ROBOT_WAITTING_DROPDOWN_PALLET_MACHINE; robot.ShowText("FORMAC_ROBOT_WAITTING_DROPDOWN_PALLET_MACHINE"); } break; case ForkLift.FORMAC_ROBOT_WAITTING_DROPDOWN_PALLET_MACHINE: if (resCmd == ResponseCommand.RESPONSE_LINEDETECT_PALLETDOWN) { resCmd = ResponseCommand.RESPONSE_NONE; // FlToBuf.UpdatePalletState(PalletStatus.W); // rb.SendCmdPosPallet (RequestCommandPosPallet.REQUEST_GOBACK_FRONTLINE); StateForkLift = ForkLift.FORMAC_ROBOT_WAITTING_GOBACK_FRONTLINE_MACHINE; robot.ShowText("FORMAC_ROBOT_WAITTING_GOBACK_FRONTLINE_MACHINE"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ForkLift.FORMAC_ROBOT_WAITTING_GOBACK_FRONTLINE_MACHINE: // đợi if (resCmd == ResponseCommand.RESPONSE_FINISH_GOBACK_FRONTLINE) { robot.SwitchToDetectLine(false); resCmd = ResponseCommand.RESPONSE_NONE; //rb.prioritLevel.OnAuthorizedPriorityProcedure = false; StateForkLift = ForkLift.FORMAC_ROBOT_RELEASED; robot.ShowText("FORMAC_ROBOT_RELEASED"); } else if (resCmd == ResponseCommand.RESPONSE_ERROR) { errorCode = ErrorCode.DETECT_LINE_ERROR; CheckUserHandleError(this); } break; case ForkLift.FORMAC_ROBOT_RELEASED: // trả robot về robotmanagement để nhận quy trình mới ds.removeListCtrlDoorBack(); TrafficRountineConstants.ReleaseAll(robot); robot.orderItem = null; // Global_Object.onFlagDoorBusy = false; robot.SwitchToDetectLine(false); // robot.robotTag = RobotStatus.IDLE; robot.ReleaseWorkingZone(); rb.PreProcedureAs = ProcedureControlAssign.PRO_FORKLIFT_TO_BUFFER; // if (errorCode == ErrorCode.RUN_OK) { // } else { // ErrorProcedureHandler (this); // } ProRun = false; robot.ShowText("RELEASED"); UpdateInformationInProc(this, ProcessStatus.S); order.status = StatusOrderResponseCode.FINISHED; order.endTimeProcedure = DateTime.Now; order.totalTimeProcedure = order.endTimeProcedure.Subtract(order.startTimeProcedure).TotalMinutes; KillEvent(); ReleaseProcedureHandler(this); break; case ForkLift.FORMAC_ROBOT_DESTROY: // trả robot về robotmanagement để nhận quy trình mới ds.removeListCtrlDoorBack(); TrafficRountineConstants.ReleaseAll(robot); robot.SwitchToDetectLine(false); robot.ReleaseWorkingZone(); robot.robotBahaviorAtGate = RobotBahaviorAtReadyGate.IDLE; //robot.prioritLevel.OnAuthorizedPriorityProcedure = false; ProRun = false; UpdateInformationInProc(this, ProcessStatus.F); order.status = StatusOrderResponseCode.ROBOT_ERROR; selectHandleError = SelectHandleError.CASE_ERROR_EXIT; procedureStatus = ProcedureStatus.PROC_KILLED; // RestoreOrderItem(); //FreePlanedBuffer(order.palletId_P); order.endTimeProcedure = DateTime.Now; order.totalTimeProcedure = order.endTimeProcedure.Subtract(order.startTimeProcedure).TotalMinutes; KillEvent(); break; ////////////////////////////////////////////////////// default: break; } Thread.Sleep(700); } StateForkLift = ForkLift.FORBUF_IDLE; }
private void FixedBtn_Click(object sender, RoutedEventArgs e) { DoorService ds = (sender as Button).DataContext as DoorService; this.doorManagementService.SaveConfig(JsonConvert.SerializeObject(MainDataGrid.ItemsSource, Formatting.Indented)); }