/// <summary> /// 停止摆渡车接货 /// </summary> /// <param name="area"></param> /// <param name="tt"></param> /// <param name="goodsNum"></param> public bool IsStopTaking(string area, TaskTypeEnum tt, int goodsNum) { try { bool res = false; if (devices.Exists(c => c.area == area && c.taskType == tt)) { DevInfoARF arf = devices.Find(c => c.area == area && c.taskType == tt); if ((goodsNum == 2 && arf._.GoodsStatus == GoodsEnum.辊台满货) || (goodsNum == 1 && arf._.GoodsStatus == GoodsEnum.辊台1有货 && tt == TaskTypeEnum.入库) || (goodsNum == 1 && arf._.GoodsStatus == GoodsEnum.辊台2有货 && tt == TaskTypeEnum.出库)) { if (arf._.ActionStatus == ActionEnum.停止 && arf._.FinishTask == TaskEnum.停止辊台任务) { res = true; } else { arf.StopRoller(); } } } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 添加摆渡车信息 /// </summary> private void AddArf(DevInfoARF arf) { if (!devices.Exists(c => c.devName == arf.devName)) { devices.Add(arf); } }
/// <summary> /// 摆渡车是否接货中 /// </summary> /// <param name="area"></param> /// <param name="tt"></param> /// <returns></returns> public bool IsTaking(string area, TaskTypeEnum tt) { try { bool res = false; if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful)) { DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful); if (ADS.mSocket.IsConnected(a.devName) && a._.CommandStatus == CommandEnum.命令正常 && a._.DeviceStatus == DeviceEnum.设备正常) { if (a._.ActionStatus == ActionEnum.停止) { a.StartTakeRoll(tt, 2); } else { if (a._.CurrentTask == TaskEnum.辊台任务) { res = true; } } } } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 添加所有摆渡车信息 /// </summary> private void AddAllArf() { List <WCS_CONFIG_DEVICE> list = CommonSQL.GetDevInfo(DeviceType.摆渡车); if (list == null || list.Count == 0) { return; } foreach (WCS_CONFIG_DEVICE d in list) { AddArf(new DevInfoARF() { devName = d.DEVICE, area = d.AREA, isLock = d.IS_LOCK == 1 ? true : false, isUseful = d.IS_USEFUL == 1 ? true : false, lockID = d.LOCK_ID1, taskType = (TaskTypeEnum)d.FLAG, _ = new DeviceARF() }); ADS.mSocket.AddClient(d.DEVICE, d.IP, d.PORT, DevInfoARF.GetDataOrder()); if (d.IS_USEFUL == 0) { ADS.mSocket.UpdateUserful(d.DEVICE, false); } } }
/// <summary> /// 是否会撞车 /// </summary> private bool IsHit(DevInfoARF da, int site) { DevInfoARF arf = devices.Find(c => c.area.Equals(da.area) && c.devName != da.devName); if (arf == null) { return(false); } int safe = ADS.mDis.GetArfSafeDis(da.area); int loc; switch (da.taskType) { case TaskTypeEnum.入库: loc = ADS.mDis.GetArfStandByP2(da.area); if (arf._.CurrentSite <= (site + safe) && arf._.ActionStatus == ActionEnum.运行中) { return(true); } break; case TaskTypeEnum.出库: loc = ADS.mDis.GetArfStandByP1(da.area); if (arf._.CurrentSite >= (site - safe) && arf._.ActionStatus == ActionEnum.运行中) { return(true); } break; default: return(true); } arf.ToSite(loc); return(false); }
/// <summary> /// 停止摆渡车送货 /// </summary> /// <param name="area"></param> /// <param name="tt"></param> /// <param name="goodsNum"></param> public bool IsStopGiving(string area, TaskTypeEnum tt) { try { bool res = false; if (devices.Exists(c => c.area == area && c.taskType == tt)) { DevInfoARF arf = devices.Find(c => c.area == area && c.taskType == tt); if (arf._.GoodsStatus == GoodsEnum.辊台无货) { if (arf._.ActionStatus == ActionEnum.停止 && arf._.FinishTask == TaskEnum.停止辊台任务) { if (!arf.isLock) { res = true; } else { // 送完货直接解锁 arf.IsLockUnlock(false); } } else { arf.StopRoller(); } } } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 是否有锁定摆渡车 /// </summary> /// <returns></returns> public bool IsLockARF(string area, TaskTypeEnum tt, out int goods) { try { ChangeFlag(area); bool res = false; goods = 0; if (devices.Exists(c => c.isUseful && c.area == area && c.taskType == tt)) { DevInfoARF a = devices.Find(c => c.isUseful && c.area == area && c.taskType == tt); if (ADS.mSocket.IsConnected(a.devName) && a._.CommandStatus != CommandEnum.命令错误 && a._.DeviceStatus != DeviceEnum.设备故障) { if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务) { a.StopRoller(); } switch (a._.GoodsStatus) { case GoodsEnum.辊台1有货: case GoodsEnum.辊台2有货: case GoodsEnum.辊台中间有货: goods = 1; break; case GoodsEnum.辊台满货: goods = 2; break; default: break; } if (a.isLock) { if (a._.GoodsStatus == GoodsEnum.辊台无货 && a._.RollerStatus == RollerStatusEnum.辊台停止) { // 停止&解锁 a.StopTask(); a.IsLockUnlock(false); } else { res = true; } } } } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 移至待命点 /// </summary> /// <returns></returns> public bool Standby(string area, TaskTypeEnum tt, int site) { try { bool res = false; if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful)) { DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful); if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务) { a.StopRoller(); } if (a.isLock) { if (a._.CurrentSite != site) { res = true; } } else { int sb = tt == TaskTypeEnum.入库 ? ADS.mDis.GetArfStandByP1(a.area) : ADS.mDis.GetArfStandByP2(a.area); if (Math.Abs(a._.CurrentSite - sb) <= 2) { res = true; } else { if (a.isUseful && ADS.mSocket.IsConnected(a.devName) && a._.ActionStatus == ActionEnum.停止) { a.ToSite(sb); } } } } else { res = true; } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 锁定摆渡车 /// </summary> /// <param name="area"></param> /// <param name="tt"></param> /// <returns></returns> public bool IsLock(string area, TaskTypeEnum tt, string lockid) { try { bool res = false; if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful)) { DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful); switch (tt) { case TaskTypeEnum.入库: if (a.isLock && a.lockID == lockid) { res = true; } else if (a._.GoodsStatus == GoodsEnum.辊台无货) { a.IsLockUnlock(true, lockid); } break; case TaskTypeEnum.出库: if (a.isLock && a.lockID == lockid) { res = true; } else if (a._.GoodsStatus != GoodsEnum.辊台无货) { a.IsLockUnlock(true, lockid); } break; default: break; } } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 移动对接点 /// </summary> public bool MovingButtSite(string area, TaskTypeEnum tt, int site) { try { bool res = false; if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful)) { DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful); if (!ADS.mSocket.IsConnected(a.devName) || a._.CommandStatus == CommandEnum.命令错误 || a._.DeviceStatus == DeviceEnum.设备故障) { return(res); } if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务) { a.StopRoller(); } if (Standby(area, tt == TaskTypeEnum.入库 ? TaskTypeEnum.出库 : TaskTypeEnum.入库, site)) { if (a._.CurrentSite != site) { if (a._.ActionStatus == ActionEnum.停止) { a.ToSite(site); } } else { res = true; } } } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 是否有空闲摆渡车 /// </summary> /// <returns></returns> public bool IsFreeARF(string area, TaskTypeEnum tt) { try { ChangeFlag(area); bool res = false; if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful)) { DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful); if (ADS.mSocket.IsConnected(a.devName) && a._.CommandStatus != CommandEnum.命令错误 && a._.DeviceStatus != DeviceEnum.设备故障) { if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务) { a.StopRoller(); } if (a.isLock) { if (a._.GoodsStatus == GoodsEnum.辊台无货 && a._.ActionStatus == ActionEnum.停止) { // 停止&解锁 a.StopTask(); a.IsLockUnlock(false); res = true; } } else { res = true; } } } return(res); } catch (Exception ex) { throw ex; } }
public void Update() { bool con = ADS.mSocket.IsConnected(DevName); DevInfoARF arf = ADS.mArf.devices.Find(c => c.devName == DevName); if (isconnect != con) { IsConnected = con; } if (isUseful != arf.isUseful) { IsUseful = arf.isUseful; } if (!con) { return; } if (actionsta != arf._.ActionStatus) { ActionStatus = arf._.ActionStatus; } if (devicesta != arf._.DeviceStatus) { DeviceStatus = arf._.DeviceStatus; } if (commandsta != arf._.CommandStatus) { CommandStatus = arf._.CommandStatus; } if (currenttask != arf._.CurrentTask) { CurrentTask = arf._.CurrentTask; } if (finishtask != arf._.FinishTask) { FinishTask = arf._.FinishTask; } if (site != arf._.CurrentSite) { CurrentSite = arf._.CurrentSite; } if (rollersta != arf._.RollerStatus) { RollerStatus = arf._.RollerStatus; } if (rollerdir != arf._.RollerDiretion) { RollerDiretion = arf._.RollerDiretion; } if (goodstatus != arf._.GoodsStatus) { GoodsStatus = arf._.GoodsStatus; } if (errormsg != arf._.ErrorMessage) { ErrorMessage = arf._.ErrorMessage; } UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); }
/// <summary> /// 摆渡车是否到位 /// </summary> public bool IsArfOk(string area, TaskTypeEnum tt, int site) { try { bool res = false; if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful && c.isLock)) { DevInfoARF arf = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful && c.isLock); if (arf._.ActionStatus == ActionEnum.停止 || ADS.mSocket.IsConnected(arf.devName) || arf._.CommandStatus == CommandEnum.命令正常 || arf._.DeviceStatus == DeviceEnum.设备正常) { if (arf._.CurrentSite == site) { res = true; } else { int safe = ADS.mDis.GetArfSafeDis(area); if (devices.Exists(c => c.area == area && c.taskType != tt && !c.isLock)) { DevInfoARF a = devices.Find(c => c.area == area && c.taskType != tt && !c.isLock); if (ADS.mSocket.IsConnected(a.devName) || a._.CommandStatus == CommandEnum.命令正常 || a._.DeviceStatus == DeviceEnum.设备正常) { int loc = 0; switch (a.taskType) { case TaskTypeEnum.入库: loc = ADS.mDis.GetArfStandByP1(area); if (a._.CurrentSite <= (site - safe)) { arf.ToSite(site); } else if (a._.ActionStatus == ActionEnum.停止) { a.ToSite(loc); } break; case TaskTypeEnum.出库: loc = ADS.mDis.GetArfStandByP2(area); if (a._.CurrentSite >= (site + safe)) { arf.ToSite(site); } else if (a._.ActionStatus == ActionEnum.停止) { a.ToSite(loc); } break; default: break; } } } } } } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 锁定摆渡车 /// </summary> /// <returns></returns> public bool LockARF(string area, TaskTypeEnum tt) { try { ChangeFlag(area); bool res = false; if (devices.Exists(c => c.isUseful && c.area == area && c.taskType == tt)) { DevInfoARF a = devices.Find(c => c.isUseful && c.area == area && c.taskType == tt); if (ADS.mSocket.IsConnected(a.devName) && a._.CommandStatus == CommandEnum.命令正常 && a._.DeviceStatus == DeviceEnum.设备正常) { if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务) { a.StopRoller(); } if (a._.GoodsStatus == GoodsEnum.辊台无货) { if (a._.ActionStatus == ActionEnum.停止) { res = true; } } else { if (a.isLock) { res = true; } else { bool run = false; switch (tt) { case TaskTypeEnum.入库: if ((a._.GoodsStatus == GoodsEnum.辊台满货 && a._.RollerStatus == RollerStatusEnum.辊台停止) || (a._.GoodsStatus == GoodsEnum.辊台1有货 && a._.RollerStatus != RollerStatusEnum.辊台1启动 && a._.RollerStatus != RollerStatusEnum.辊台全启动)) { run = true; } break; case TaskTypeEnum.出库: if ((a._.GoodsStatus == GoodsEnum.辊台满货 && a._.RollerStatus == RollerStatusEnum.辊台停止) || (a._.GoodsStatus == GoodsEnum.辊台2有货 && a._.RollerStatus != RollerStatusEnum.辊台2启动 && a._.RollerStatus != RollerStatusEnum.辊台全启动)) { run = true; } break; default: break; } if (run) { // 停止 & 锁定 a.StopTask(); a.IsLockUnlock(true); res = true; } else { if (a._.ActionStatus == ActionEnum.停止) { a.StartTakeRoll(tt, 2); } } } } } } return(res); } catch (Exception ex) { throw ex; } }
/// <summary> /// 改变属性 /// </summary> /// <param name="area"></param> private void ChangeFlag(string area) { try { if (devices == null || devices.Count == 0) { return; } if (devices.Exists(c => c.area == area && c.isUseful)) { if (devices.FindAll(c => c.area == area && c.isUseful).Count == 1) { DevInfoARF a = devices.Find(c => c.area == area && c.isUseful); if (!ADS.mSocket.IsConnected(a.devName) || a.isLock || a._.ActionStatus == ActionEnum.运行中 || a._.GoodsStatus != GoodsEnum.辊台无货) { return; } if (PublicParam.IsDoJobIn && !PublicParam.IsDoJobOut) { if (a.taskType == TaskTypeEnum.入库) { return; } // 判断当前运输车任务 if (ADS.mRgv.GetNowTaskType(area) != TaskTypeEnum.出库) { a.UpdateFlag(TaskTypeEnum.入库); } } else if (!PublicParam.IsDoJobIn && PublicParam.IsDoJobOut) { if (a.taskType == TaskTypeEnum.出库) { return; } a.UpdateFlag(TaskTypeEnum.出库); } } else { if (devices.FindAll(c => c.area == area && c.taskType == TaskTypeEnum.入库).Count != 1 || devices.FindAll(c => c.area == area && c.taskType == TaskTypeEnum.出库).Count != 1) { DevInfoARF a1 = devices.Find(c => c.area == area); DevInfoARF a2 = devices.Find(c => c.area == area && c.devName != a1.devName); if (a1._.CurrentSite == 0 || a2._.CurrentSite == 0) { throw new Exception(area + " 区域有摆渡车无效坐标0!"); } if (a1._.GoodsStatus != GoodsEnum.辊台无货 || a2._.GoodsStatus != GoodsEnum.辊台无货) { throw new Exception(area + " 区域有停启摆渡车有货,无法分配属性!"); } if (a1._.CurrentSite <= a2._.CurrentSite) { a1.UpdateFlag(TaskTypeEnum.入库); a2.UpdateFlag(TaskTypeEnum.出库); } else { a1.UpdateFlag(TaskTypeEnum.出库); a2.UpdateFlag(TaskTypeEnum.入库); } } } } } catch (Exception ex) { throw ex; } }