/// <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> /// <param name="taskId"></param> /// <returns></returns> public static ResultTypeEnum GetDipatchStatue(string disGuid) { DispatchBackMember temp = GetDispatch(disGuid); return((temp == null) ? ResultTypeEnum.Unknow : temp.OrderStatue); }
/// <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(""); } }
/// <summary> /// 呼叫AGV /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonCallAGv_Click(object sender, EventArgs e) { try { if (_isCalling) { MessageBox.Show("AGV过来的途中,请等待!", "提示"); return; } TaskDispatch task = new TaskDispatch(); task.Descip = _clientMark; StationMember sta = _staDic.Values.ToList().Find(c => { return(c.StaSite == LocSite); }); if (sta == null) { MessageBox.Show("未找到与本客户端绑定的站点", "提示"); return; } TaskPathNode node = new TaskPathNode(sta.StaSite.ToString(), sta.StaTarget, true); task.TaskPathNode.Add(node); if (sta != null && sta.WaitList != null) { foreach (var item in sta.WaitList) { task.StartSiteList.Add(item.ToString()); } } if (task.StartSiteList == null || task.StartSiteList.Count < 1) { MessageBox.Show("未正确配置其相应的待命点,请检查配置!", "提示"); return; } if (MessageBox.Show(string.Format("确定要呼叫AGV到【{0}】位置", sta.StaTarget), "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes) { WcfDispatchHelper.InitPara(_severIp, "", ""); string result = WcfDispatchHelper.IStartTaskDispatch(task); SetOutputMsg(string.Format("开启新任务")); if (result != "s") { SetOutputMsg(result); MessageBox.Show("当前没有空闲的AGV,请稍后再试!", "提示"); } else { _isCalling = true; _callingTask = task; DispatchBackMember disback = WcfMainHelper.GetDispatch(task.DisGuid); if (disback != null) { _callingAGV = disback.DisDevId; DeviceBackImf devback = WcfMainHelper.GetDev(_callingAGV); if (devback != null) { _callingSite = devback.SensorList.Find(c => { return(c.SenId == string.Format("{0}0002", devback.DevId)); }).RValue; } else { _callingSite = null; } } else { _callingAGV = null; } MessageBox.Show("呼叫成功,请等待AGV过来!", "提示"); } } } catch { } }