/// <summary> /// 开启任务 /// </summary> /// <param name="taskId">任务</param> /// <param name="oper">操作类型</param> /// <param name="mark">客户端标记</param> /// <returns></returns> public static bool StartDispatch(DispatchOrderObj order, out string msg) { msg = "未连接服务端!"; if (!_channelState && !Open()) { return(false); } lock (_ans) { try { msg = _backupsClass.StartDispatch(order); } catch { return(false); } } return(msg == "s" ? true : false); }
/// <summary> /// 事务处理 /// </summary> public String DoWork() { if (_isSuc) { return(""); } _taskDispatch = JTWcfHelper.WcfMainHelper.GetDispatch(Id); if (_taskDispatch == null) { DispatchOrderObj dis = new DispatchOrderObj(); dis.DisGuid = Id; dis.EndSite = _endSite; if (!string.IsNullOrEmpty(_startSite)) { dis.StartSiteList.Add(_startSite); } string back = ""; JTWcfHelper.WcfMainHelper.StartDispatch(dis, out back); return(back); } else { ///确定此时任务的AGV if (_agv == null) { _agv = new F_AGV(_taskDispatch.DisDevId); } ///此次调度任务已经完成 if (_taskDispatch.OrderStatue == ResultTypeEnum.Suc) { if (_operType == EnumOper.取货) { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { if (//_plc.Sta_Material == EnumSta_Material.有货 && //(_agv.Sta_Material == EnumSta_Material.无货 || _agv.Sta_Material == EnumSta_Material.传送中)&& true) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动); _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台允许下料); } if (//_plc.Sta_Material == EnumSta_Material.无货 && //_agv.Sta_Material == EnumSta_Material.有货 && true) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成); if (true //&&_agv.Sta_Monitor == EnumSta_Monitor.电机停止 ) { ISetTaskSuc(); } } } return(""); } else if (_operType == EnumOper.放货) { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { if (//(_plc.Sta_Material == EnumSta_Material.有货 || _plc.Sta_Material == EnumSta_Material.无货 )&& //(_agv.Sta_Material == EnumSta_Material.传送中 || _agv.Sta_Material == EnumSta_Material.有货) && true) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料中); _agv.SendOrdr(EnumType.料操作, EnumPara.agv下料启动); } if (//_plc.Sta_Material == EnumSta_Material.有货 && //_agv.Sta_Material == EnumSta_Material.无货 && true) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成); _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); if (true //&& _agv.Sta_Monitor == EnumSta_Monitor.电机停止 ) { ISetTaskSuc(); } } } return(""); } else if (_operType == EnumOper.充电) { ISetTaskSuc(); return(""); } else if (_operType == EnumOper.无动作) { ISetTaskSuc(); return(""); } } return(""); } }
/// <summary> /// 事务处理 /// </summary> public void DoWork() { if (_isSuc) { return; } _taskDispatch = JTWcfHelper.WcfMainHelper.GetDispatch(Id); if (_taskDispatch == null) { DispatchOrderObj dis = new DispatchOrderObj(); dis.DisGuid = Id; dis.EndSite = _endSite; if (!string.IsNullOrEmpty(_startSite)) { dis.StartSiteList.Add(_startSite); } string back = ""; JTWcfHelper.WcfMainHelper.StartDispatch(dis, out back); } else { ///确定此时任务的AGV if (_agv == null) { _agv = new F_AGV(_taskDispatch.DisDevId); } ///此次调度任务已经完成 if (_taskDispatch.OrderStatue == ResultTypeEnum.Suc) { if (_operType == EnumOper.取货) { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { if (_plc.Sta_Material == EnumSta_Material.货 && _agv.Sta_Material == EnumSta_Material.无货) { _agv.SendOrdr(EnumType.料操作, EnumPara.反向启动); _plc.SendOrdr(EnumType.料操作, EnumPara.正向启动); } if (_plc.Sta_Material == EnumSta_Material.无货 && _agv.Sta_Material == EnumSta_Material.货) { _agv.SendOrdr(EnumType.料操作, EnumPara.辊台停止); _plc.SendOrdr(EnumType.料操作, EnumPara.辊台停止); if (_plc.Sta_Monitor == EnumSta_Monitor.停止) { ISetTaskSuc(); } } } } else if (_operType == EnumOper.放货) { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { } } else if (_operType == EnumOper.无动作) { ISetTaskSuc(); } } } }
/// <summary> /// 事务处理 /// </summary> public String DoWork() { if (_isSuc) { return(""); } if (!_isStart) { if (++_triggerCounter > F_DataCenter.ClearTime) { _isOverTime = true; } } if (_agv != null) { if (_agv.IsAlive) { _disAliveCounter = 0; } else { if (++_disAliveCounter > F_DataCenter.ClearTime) { _isDisaliveOverTime = true; } } } else { if (++_triggerCounter > F_DataCenter.ClearTime) { _isOverTime = true; } } _taskDispatch = JTWcfHelper.WcfMainHelper.GetDispatch(Id); if (_taskDispatch == null) { DispatchOrderObj dis = new DispatchOrderObj(); dis.DisGuid = Id; dis.EndSite = _endSite; if (!string.IsNullOrEmpty(_startSite)) { dis.StartSiteList.Add(_startSite); } ///修改By fujun dis.DevList.Add(Id); string back = ""; JTWcfHelper.WcfMainHelper.StartDispatch(dis, out back); return(back); } else { ///修改By fujun _isStart = true; ///确定此时任务的AGV if (_agv == null) { _agv = new F_AGV(_taskDispatch.DisDevId); } ///此次调度任务已经完成 if (_taskDispatch.OrderStatue == ResultTypeEnum.Suc) { if (_operType == EnumOper.取货) { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { // 判断窑尾PLC的货物状态和AGV货物状态 if ( (_plc.Sta_Material_End == EnumSta_Material_End.窑尾传输中 //|| _plc.Sta_Material_End == EnumSta_Material_End.状态未知 || _plc.Sta_Material_End == EnumSta_Material_End.窑尾有货) && (_agv.Sta_Material == EnumSta_AGV.AGV无货 || _agv.Sta_Material == EnumSta_AGV.AGV传输中) ) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动); _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台启动); } // // 判断窑尾是否出料完成 if (//_plc.Sta_Material_End == EnumSta_Material_End.窑尾出料完成 && _agv.Sta_Material == EnumSta_AGV.AGV有货 && true) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台停止); if (true && _agv.Sta_Monitor == EnumSta_AGVMonitor.AGV电机停止 ) { //取货完成,解锁窑尾 if (_plc != null) { _plc.IsLock = false; } ISetTaskSuc(); } } } else { ISetTaskSuc(); } return(""); } else if (_operType == EnumOper.放货) { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { if ((_plc.Sta_Material_Head == EnumSta_Material_Head.窑头无货 || _plc.Sta_Material_Head == EnumSta_Material_Head.窑头传输中) && (_agv.Sta_Material == EnumSta_AGV.AGV传输中 || _agv.Sta_Material == EnumSta_AGV.AGV有货) && true) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台启动); _agv.SendOrdr(EnumType.料操作, EnumPara.agv下料启动); } if (//_plc.Sta_Material_Head == EnumSta_Material_Head.窑头接料完成 && _agv.Sta_Material == EnumSta_AGV.AGV无货 && true) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台停止); _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); if (_agv.Sta_Monitor == EnumSta_AGVMonitor.AGV电机停止 && true) { //放货完成,解锁窑头 if (_plc != null) { _plc.IsLock = false; } Thread.Sleep(5000); ISetTaskSuc(); } } } else { ISetTaskSuc(); } return(""); } else if (_operType == EnumOper.充电) { ISetTaskSuc(); return(""); } else if (_operType == EnumOper.窑尾1号机械手) { ///当前AGV的地标是否为窑尾1号机械手位置 if (_agv.Site == _plc.Site) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾1号机械手启动); if (_plc.Sta_Material_End == EnumSta_Material_End.窑尾1号机械手完成 && true ) { //1号机械手完成动作 ISetTaskSuc(); } } return(""); } else if (_operType == EnumOper.窑尾2号机械手) { ///当前AGV的地标是否为窑尾2号机械手位置 if (_agv.Site == Site.窑尾2) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾2号机械手启动); if (_plc.Sta_Material_End == EnumSta_Material_End.窑尾2号机械手完成 && true ) { ISetTaskSuc(); } } return(""); } else if (_operType == EnumOper.窑头机械手) { ///当前AGV的地标是否为窑头机械手位置 if (_agv.Site == Site.窑头3) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头机械手启动); if (true && _plc.Sta_Material_HeadMLP == EnumSta_Material_HeadMLP.窑头机械手完成 ) { ISetTaskSuc(); } } return(""); } else if (_operType == EnumOper.无动作) { ISetTaskSuc(); return(""); } } return(""); } }
/// <summary> /// 事务处理 /// </summary> public String DoWork() { if (_isSuc) { return(""); } _taskDispatch = JTWcfHelper.WcfMainHelper.GetDispatch(Id); if (_taskDispatch == null) { DispatchOrderObj dis = new DispatchOrderObj(); dis.DisGuid = Id; dis.EndSite = _endSite; if (!string.IsNullOrEmpty(_startSite)) { dis.StartSiteList.Add(_startSite); } string back = ""; JTWcfHelper.WcfMainHelper.StartDispatch(dis, out back); return(back); } else { ///确定此时任务的AGV if (_agv == null) { _agv = new F_AGV(_taskDispatch.DisDevId); } ///此次调度任务已经完成 if (_taskDispatch.OrderStatue == ResultTypeEnum.Suc) { if (_operType == EnumOper.取货) { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { // 判断窑尾PLC的货物状态和AGV货物状态 if ((_plc.Sta_Material == EnumSta_Material.窑尾传输中 || _plc.Sta_Material == EnumSta_Material.AGV未知 || _plc.Sta_Material == EnumSta_Material.窑尾有货) && (_agv.Sta_Material == EnumSta_Material.AGV无货 || _agv.Sta_Material == EnumSta_Material.AGV传输中)) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动); _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台启动); } // // 判断窑尾是否出料完成 if (_plc.Sta_Material == EnumSta_Material.窑尾出料完成 && _agv.Sta_Material == EnumSta_Material.AGV有货 && true) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台停止); if (true && _agv.Sta_Monitor == EnumSta_Monitor.AGV电机停止 ) { ISetTaskSuc(); } } } return(""); } else if (_operType == EnumOper.放货) { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { if ((_plc.Sta_Material == EnumSta_Material.窑头无货 || _plc.Sta_Material == EnumSta_Material.窑头无货 || _plc.Sta_Material == EnumSta_Material.窑头传输中) && (_agv.Sta_Material == EnumSta_Material.AGV传输中 || _agv.Sta_Material == EnumSta_Material.AGV有货)) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台启动); _agv.SendOrdr(EnumType.料操作, EnumPara.agv下料启动); } if (_plc.Sta_Material == EnumSta_Material.窑头接料完成 && _agv.Sta_Material == EnumSta_Material.AGV无货 && true) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台停止); _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); if (_agv.Sta_Monitor == EnumSta_Monitor.AGV电机停止 && true) { Thread.Sleep(5000); ISetTaskSuc(); } } } return(""); } else if (_operType == EnumOper.充电) { ISetTaskSuc(); return(""); } else if (_operType == EnumOper.窑尾1号机械手) { ///当前AGV的地标是否为窑尾1号机械手位置 if (_agv.Site == _plc.Site) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾1号机械手启动); if (_plc.Sta_Material == EnumSta_Material.窑尾1号机械手完成 && true ) { //1号机械手完成动作 ISetTaskSuc(); } } return(""); } else if (_operType == EnumOper.窑尾2号机械手) { ///当前AGV的地标是否为窑尾2号机械手位置 if (_agv.Site == Site.窑尾2) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾2号机械手启动); if (_plc.Sta_Material == EnumSta_Material.窑尾2号机械手完成 && true ) { ISetTaskSuc(); } } return(""); } else if (_operType == EnumOper.窑头机械手) { ///当前AGV的地标是否为窑头机械手位置 if (_agv.Site == Site.窑头3) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头机械手启动); if (true && _plc.Sta_Material == EnumSta_Material.窑头机械手完成 ) { ISetTaskSuc(); } } return(""); } else if (_operType == EnumOper.无动作) { ISetTaskSuc(); return(""); } } return(""); } }