/// <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 = WcfMainHelper.GetDispatch(Id); if (_taskDispatch == null) { FDispatchOrder dis = new FDispatchOrder(); dis.NavigationType = EnumNavigationType.Magnet; dis.Id = Id; dis.EndSite = _endSite; if (!string.IsNullOrEmpty(_startSite)) { dis.StartSiteList.Add(_startSite); } ///修改By fujun dis.DevList.Add(Id); string back = ""; WcfMainHelper.StartDispatch(dis, out back); return(back); } else { ///修改By fujun _isStart = true; #region 滚筒逻辑 ///确定此时任务的AGV if (_agv == null) { _agv = new F_AGV(_taskDispatch.Dev); } ///此次调度任务已经完成 if (_taskDispatch.Statue == EnumResultType.Suc) { if (_operType == EnumOper.取货) //窑尾 { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { FLog.Log(_agv.Id + "到达窑尾,开始取货"); if (_agv != null && _plc.EnterChargeAgv == _agv.Id) { if (_plc.IsEnterBatteryLock //&& !ParamControl.Do_EnterEndChargeLock ) { _plc.IsEnterBatteryLock = false; ParamControl.Do_EnterEndChargeLock = true; ParamControl.EndChargeLock = _plc.IsEnterBatteryLock; _plc.EnterChargeAgv = null; } } //如果界面打开忽略《窑尾》AGV货物状态和Plc货物状态则 直接发送棍台转动命令 if (ParamControl.Is_IgnoreTailUnloadStatus || (_plc.Sta_Material == EnumSta_Material.货 && (_agv.Sta_Material == EnumagvSta_Material.无货 || _agv.Sta_Material == EnumagvSta_Material.送中))) { if (_agv.Sta_Monitor != EnumSta_Monitor.电机反转) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动); FLog.Log(_agv.Id + "启动车载辊台"); } else { if (BeginTime == null) { BeginTime = System.DateTime.Now; } _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动); _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台允许下料); FLog.Log(_agv.Id + "启动车载辊台,启动窑尾辊台"); } } //如果界面打开忽略《窑尾》AGV货物状态,并且上面已经发送了指定时间的棍台转动时间 if ((ParamControl.Is_IgnoreTailUnloadStatus && IsTailRunTimeFinish()) || (//_plc.Sta_Material == EnumSta_Material.无货 && _agv.Sta_Material == EnumagvSta_Material.货)) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成); FLog.Log(_agv.Id + "停止车载辊台,停止窑尾辊台"); //如果界面打开忽略《窑尾》AGV棍台状态,则进去结束任务 if (ParamControl.Is_IgnoreTailStaStatus || _agv.Sta_Monitor == EnumSta_Monitor.电机停止 ) { //取货完成,解锁窑尾 if (_plc != null // && !ParamControl.Do_EndPlcLock ) { _plc.IsLock = false; ParamControl.Do_EndPlcLock = true; } ISetTaskSuc(); } } } else { ISetTaskSuc(); } return(""); } else if (_operType == EnumOper.放货) //窑头 { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { FLog.Log(_agv.Id + "到达窑头,开始放货"); if (_agv != null && _plc.EnterChargeAgv == _agv.Id) { if (_plc.IsEnterBatteryLock ) { _plc.IsEnterBatteryLock = false; _plc.EnterChargeAgv = null; } } //如果界面打开忽略《窑头》AGV货物状态和Plc货物状态则 直接发送棍台转动命令 if (ParamControl.Is_IgnoreHeadUnloadStatus || ((_plc.Sta_Material == EnumSta_Material.允许下料 || _plc.Sta_Material == EnumSta_Material.无货 || _plc.Sta_Material == EnumSta_Material.未知) && (_agv.Sta_Material == EnumagvSta_Material.送中 || _agv.Sta_Material == EnumagvSta_Material.货))) { if (_agv.Sta_Monitor != EnumSta_Monitor.电机反转) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv下料启动); FLog.Log(_agv.Id + "启动车载辊台"); } else { if (BeginTime == null) { BeginTime = System.DateTime.Now; } _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料中); _agv.SendOrdr(EnumType.料操作, EnumPara.agv下料启动); FLog.Log(_agv.Id + "启动车载辊台,启动窑头辊台"); } } //如果界面打开忽略《窑头》AGV货物状态,并且上面已经发送了指定时间的棍台转动时间 if ((ParamControl.Is_IgnoreHeadUnloadStatus && IsHeadRunTimeFinish()) || (//(_plc.Sta_Material == EnumSta_Material.允许下料 || _plc.Sta_Material == EnumSta_Material.未知) && _agv.Sta_Material == EnumagvSta_Material.无货)) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成); _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); FLog.Log(_agv.Id + "停止车载辊台,停止窑头辊台"); //如果界面打开忽略《窑头》AGV棍台状态,则进去结束任务 if (ParamControl.Is_IgnoreHeadStaStatus || _agv.Sta_Monitor == EnumSta_Monitor.电机停止 ) { //放货完成,解锁窑头 if (_plc != null //&& !ParamControl.Do_HeadPlcLock ) { _plc.IsLock = false; ParamControl.Do_HeadPlcLock = true; } ISetTaskSuc(); } } } else { ISetTaskSuc(); } return(""); } else if (_operType == EnumOper.充电) { if (!_plc.ExitFlag) { _plc.ExitFlag = true; } ISetTaskSuc(); return(""); } else if (_operType == EnumOper.无动作) { ISetTaskSuc(); return(""); } else if (_operType == EnumOper.对接完成) { if (_plc.IsExitBatteryLock && _plc.ExitChargeAgv == _agv.Id) { if (_plc.Site == "14") { ParamControl.Do_ExitHeadChargeLock = true; } //else if (_plc.Site == "11") //{ // ParamControl.Do_ExitEndChargeLock = true ; //} _plc.IsExitBatteryLock = false; _plc.ExitChargeAgv = null; ParamControl.HeadChargeAGV = _plc.ExitChargeAgv; ParamControl.HeadChargeLock = _plc.IsExitBatteryLock; } if (!_plc.ExitFlag) { _plc.ExitFlag = true; } ISetTaskSuc(); return(""); } } return(""); #endregion } }
/// <summary> /// 事务处理 /// </summary> public String DoWork() { if (_isSuc) { return(""); } _taskDispatch = WcfMainHelper.GetDispatch(Id); if (_taskDispatch == null) { FDispatchOrder dis = new FDispatchOrder(); dis.NavigationType = EnumNavigationType.Magnet; dis.Id = Id; dis.EndSite = _endSite; if (!string.IsNullOrEmpty(_startSite)) { dis.StartSiteList.Add(_startSite); } string back = ""; WcfMainHelper.StartDispatch(dis, out back); return(back); } else { ///确定此时任务的AGV if (_agv == null) { _agv = new F_AGV(_taskDispatch.Dev); } ///此次调度任务已经完成 if (_taskDispatch.Statue == EnumResultType.Suc) { if (_operType == EnumOper.取货) //窑尾 { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { if (_agv != null && _plc.EnterChargeAgv == _agv.Id) { if (_plc.IsEnterBatteryLock) { _plc.IsEnterBatteryLock = false; } } //如果界面打开忽略《窑尾》AGV货物状态和Plc货物状态则 直接发送棍台转动命令 if (ParamControl.Is_IgnoreTailUnloadStatus || (_plc.Sta_Material == EnumSta_Material.货 && (_agv.Sta_Material == EnumSta_Material.无货 || _agv.Sta_Material == EnumSta_Material.送中))) { if (BeginTime == null) { BeginTime = System.DateTime.Now; } _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动); _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台允许下料); } //如果界面打开忽略《窑尾》AGV货物状态,并且上面已经发送了指定时间的棍台转动时间 if ((ParamControl.Is_IgnoreTailUnloadStatus && IsTailRunTimeFinish()) || (_plc.Sta_Material == EnumSta_Material.无货 && _agv.Sta_Material == EnumSta_Material.货)) { _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成); //如果界面打开忽略《窑尾》AGV棍台状态,则进去结束任务 if (ParamControl.Is_IgnoreTailStaStatus || _agv.Sta_Monitor == EnumSta_Monitor.电机停止 ) { ISetTaskSuc(); } } } return(""); } else if (_operType == EnumOper.放货) //窑头 { ///当前AGV的到达的地标 与 棍台绑定地标一致 if (_agv.Site == _plc.Site) { if (_agv != null && _plc.EnterChargeAgv == _agv.Id) { if (_plc.IsEnterBatteryLock) { _plc.IsEnterBatteryLock = false; } } //如果界面打开忽略《窑头》AGV货物状态和Plc货物状态则 直接发送棍台转动命令 if (ParamControl.Is_IgnoreHeadUnloadStatus || ((_plc.Sta_Material == EnumSta_Material.货 || _plc.Sta_Material == EnumSta_Material.无货) && (_agv.Sta_Material == EnumSta_Material.送中 || _agv.Sta_Material == EnumSta_Material.货))) { if (BeginTime == null) { BeginTime = System.DateTime.Now; } _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料中); _agv.SendOrdr(EnumType.料操作, EnumPara.agv下料启动); } //如果界面打开忽略《窑头》AGV货物状态,并且上面已经发送了指定时间的棍台转动时间 if ((ParamControl.Is_IgnoreHeadUnloadStatus && IsHeadRunTimeFinish()) || (_plc.Sta_Material == EnumSta_Material.货 && _agv.Sta_Material == EnumSta_Material.无货)) { _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成); _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止); //如果界面打开忽略《窑头》AGV棍台状态,则进去结束任务 if (ParamControl.Is_IgnoreHeadStaStatus || _agv.Sta_Monitor == EnumSta_Monitor.电机停止 ) { ISetTaskSuc(); } } } return(""); } else if (_operType == EnumOper.充电) { ISetTaskSuc(); return(""); } else if (_operType == EnumOper.无动作) { ISetTaskSuc(); return(""); } else if (_operType == EnumOper.对接完成) { if (_plc.IsExitBatteryLock && _plc.ExitChargeAgv == _agv.Id) { _plc.IsExitBatteryLock = false; } if (_plc.ExitFlag) { _plc.ExitFlag = true; } ISetTaskSuc(); return(""); } } return(""); } }