/// <summary> /// 检测调度状态 /// </summary> private void CheckDispatch() { WcfMainHelper.InitPara(_severIp, "", ""); List <DispatchBackMember> result = WcfMainHelper.GetDispatchList(); if (result != null) { foreach (var item in result) { if (item.TaskImf == _clientMark && item.OrderStatue == ResultTypeEnum.Suc) { WcfMainHelper.CtrDispatch(item.DisGuid, DisOrderCtrTypeEnum.Stop); } } if (_callingTask != null) { if (result.Find(c => { return(c.DisGuid == _callingTask.DisGuid); }) == null) { _callingTask = null; } } } if (_callingTask == null) { _isCalling = false; } }
/// <summary> /// 发生故障、离线的车,清除其相应的任务 /// </summary> public void ClearTask() { while (true) { Thread.Sleep(5000); List <F_AGV> agvs = F_DataCenter.MDev.ErrorOrFalse(); List <FDispatchBackImf> dispatchList = WcfMainHelper.GetDispatchList(); if (dispatchList != null && agvs != null && dispatchList.Count > 0) { foreach (var agv in agvs) { foreach (var dispatch in dispatchList) { // 有故障的车是否对应任务的设备ID if (agv.Id == dispatch.Dev) { if (dic.ContainsKey(agv.Id)) { int count = 0; dic.TryGetValue(agv.Id, out count); if (count >= 10) { // 终止该任务 WcfMainHelper.CtrDispatch(dispatch.Id, EnumCtrType.Stop); sendServerLog("终止异常的 " + agv.Id + "正在执行的任务"); //LogFactory.LogRunning("终止异常的 " + agv.Id + "正在执行的任务"); FLog.Log("终止异常的 " + agv.Id + "正在执行的任务"); count = 0; //异常终止的任务释放AGV F_AGV.AgvRelease(agv.Id); } else { count++; sendServerLog("异常的 " + agv.Id + "已等待处理 " + count + " 次"); //LogFactory.LogRunning("异常的 " + agv.Id + "已等待处理 " + count + " 次"); FLog.Log("异常的 " + agv.Id + "已等待处理 " + count + " 次"); } dic.Remove(agv.Id); dic.Add(agv.Id, count); } else { dic.Add(agv.Id, 0); } } } } } else { dic.Clear(); } } }
/// <summary> /// 返回区域二附近的待命点 /// </summary> private void BackToPointAround() { if (_devArea2 == null) { return; } if (_devTarWait == null) { WcfMainHelper.InitPara(_severIp, "", ""); List <DispatchBackMember> diss = WcfMainHelper.GetDispatchList(); List <DeviceBackImf> devs = WcfMainHelper.GetDevList(); foreach (var item in _waitAreaTwoList) { if ((!IsDispatchContainPath(diss, item.StaTarget)) && (!IsDevOnSite(devs, item.StaSite))) { _devTarWait = item; break; } } } if (_devTarWait != null) { WcfMainHelper.InitPara(_severIp, "", ""); DeviceBackImf result = WcfMainHelper.GetDev(_devArea2.DevId); if (result != null) { if (result.SensorList.Find(c => { return(c.SenId == string.Format("{0}0003", _devArea2.DevId)); }).RValue == _devTarWait.StaTarget.ToString()) { _devTarWait = null; _devArea2 = null; } else { WcfMainHelper.SendOrder(_devArea2.DevId, new CommonDeviceOrderObj(DeviceOrderTypeEnum.OrderIndexThree, _devTarWait.StaTarget)); } } } }
/// <summary> /// 事务线程 /// </summary> private void ThreadFunc() { List <DeviceBackImf> getList = null; List <FDispatchBackImf> dispatchList = null; while (true) { Thread.Sleep(1000); try { getList = WcfMainHelper.GetDevList(); dispatchList = WcfMainHelper.GetDispatchList(); if (getList != null) { lock (_ans) { _devList.Clear(); _devList.AddRange(getList); //AGVDataMaster.UpdateAgvs(_devList); } MapItemMaster.UpdateItems(_devList); MapDevMsgMaster.UpdateDevInfo(_devList); } if (dispatchList != null) { lock (_ansDis) { _dispatchList.Clear(); _dispatchList.AddRange(dispatchList); } } } catch { } } }
/// <summary> /// 事务线程 /// </summary> private void ThreadFunc() { List <DeviceBackImf> getList = null; List <FDispatchBackImf> dispatchList = null; while (true) { Thread.Sleep(500); try { getList = WcfMainHelper.GetDevList(); dispatchList = WcfMainHelper.GetDispatchList(); if (getList != null) { lock (_ans) { _devList.Clear(); _devList.AddRange(getList); } } if (dispatchList != null) { lock (_ansDis) { _dispatchList.Clear(); _dispatchList.AddRange(dispatchList); } } } catch { } } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ClientForm_FormClosing(object sender, FormClosingEventArgs e) { WcfMainHelper.InitPara(_severIp, "", ""); List <DispatchBackMember> result = WcfMainHelper.GetDispatchList(); if (result != null) { _isCalling = false; foreach (var item in result) { if (item.TaskImf == _clientMark) { MessageBox.Show("当前还有任务未完成,不允许关闭客户端!", "提示"); e.Cancel = true; return; } } } if (_devArea2 != null || _isCalling) { MessageBox.Show("当前还有任务未完成,不允许关闭客户端!", "提示"); e.Cancel = true; return; } if (MessageBox.Show("确定关闭客户端?", "提示", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes) { e.Cancel = true; } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonAlter_Click(object sender, EventArgs e) { if (_isLogin) { #region if (buttonAlter.Text != "保 存") { WcfMainHelper.InitPara(_severIp, "", ""); List <DispatchBackMember> result = WcfMainHelper.GetDispatchList(); if (_devArea2 != null) { MessageBox.Show("当前客户端目前有派发任务未完成,不允许修改!", "提示"); return; } if (result != null) { foreach (var item in result) { if (item.TaskImf == _clientMark) { MessageBox.Show("当前客户端目前有派发任务未完成,不允许修改!", "提示"); return; } } } buttonAlter.Text = "保 存"; textBoxCurTar.ReadOnly = false; } else { if (Int32.TryParse(textBoxCurTar.Text, out _locTar)) { buttonAlter.Text = "修 改"; textBoxCurTar.ReadOnly = true; string Section = "CientConfig"; string key = "LoctionSite"; ConfigHelper.IniWriteValue(Section, key, _locTar.ToString()); InitPara(); MessageBox.Show("修改成功!", "提示"); } else { MessageBox.Show("输入站点格式有误!", "提示"); } } #endregion } else { MessageBox.Show("请先登录后再操作!", "提示"); } }