From 5883a139074dd7493d9f0d776540f196d55d1034 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期五, 25 四月 2025 20:42:30 +0800
Subject: [PATCH] 添加分配下发任务方法
---
Admin.NET/WCS.Application/PLC/PLCService.cs | 401 ++++++++++++++++++++------------------------------------
1 files changed, 146 insertions(+), 255 deletions(-)
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index 1fc0cd8..ee43c9c 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -5,6 +5,8 @@
using DocumentFormat.OpenXml.Spreadsheet;
using Furion.Logging;
using IoTClient;
+using NewLife.Reflection;
+using WCS.Application.Entity;
using WCS.Application.Util;
namespace WCS.Application;
@@ -154,52 +156,70 @@
sysCacheService.HashAddOrUpdate("AlarmInfo_Car", plcConn.PlcIP, -1);
var modPosTaskStatus = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��");
var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos);
+ //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1 0:鏈┖闂�,1:绌洪棽,2:寮傚父 3锛氬厖鐢典腑
+
+ WcsCarTasks carTask2 = null;//null 鏂颁换鍔� not null 璺緞2浠诲姟
if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
{
var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
var (resultTask, valueTask) = plcConn.GetDBValue(modPosTask.PosType, modPosTask.PlcPos);
- string valueTaskStr = Convert.ToString(valueTask);
- string strNo = "";
- var boNo = dicTaskNo.TryGetValue(modDevice.Id.ToString(), out strNo);
- if (valueTaskStr != "0" && strNo != valueTaskStr)
+ //璇诲彇浠诲姟鍙�
+ int valueTaskStr = Convert.ToInt32(valueTask);
+ //鑾峰彇浠诲姟淇℃伅 鏍规嵁 浠诲姟鍙枫�佸皬杞︾紪鍙�
+ var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP);
+ if (carTask == null)
{
- var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.Id.ToString().EndsWith(valueTaskStr));
- if (modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
- {
- //12.4鍑哄簱鏀规垚璋冪敤WMS瀹屾垚浠诲姟鎺ュ彛锛沇MS鎿嶆帶PDA鎵樼洏涓嬫灦鍚庯紝WCS浠诲姟鐘舵�佹墠瀹屾垚锛堥伩鍏嶅皬杞︾户缁窇锛�
- if (modFinshTask.TaskType == TaskTypeEnum.In)
- {
- modFinshTask.Status = TaskStatusEnum.Complete;
- modFinshTask.FinishDate = DateTime.Now;
- _db.Updateable(modFinshTask).ExecuteCommand();
- var taskMonitor = new WcsTaskMonitor()
- {
- TaskNo = modFinshTask.TaskNo,
- PlcName = modDevice.Text,
- InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
- };
- _db.Insertable(taskMonitor).ExecuteCommand();
- //涓嬪彂浠诲姟鏃ュ織
- HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
- HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
- }
- HttpService httpService = new HttpService();
- var requestMode = new TaskRequestWMS()
- {
- TaskNo = modFinshTask.TaskNo,
- PalletNo = modFinshTask.PalletNo,
- TaskType = ((int)modFinshTask.TaskType).ToString(),
- TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
- };
- var modResponseTask = httpService.RequestTask(requestMode).Result;
- modFinshTask.IsSuccess = TaskSuccessEnum.Success;
- _db.Updateable(modFinshTask).ExecuteCommand();
-
- if (dicTaskNo.ContainsKey(modDevice.Id.ToString()))
- dicTaskNo.Remove(modDevice.Id.ToString());
- dicTaskNo.Add(modDevice.Id.ToString(), valueTaskStr);
- }
+ return;//娌℃湁鎵惧埌浠诲姟
}
+
+ var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
+ if (modFinshTask == null)
+ {
+ return;//娌℃湁鏌ヨ鍒版�讳换鍔�
+ }
+ //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂
+ carTask2 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.PreId.Contains(carTask.Id.ToString())).OrderBy(m=>m.CreateTime).First();
+
+ if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
+ {
+ carTask.Status = TaskStatusEnum.Complete;
+ carTask.UpdateTime = DateTime.Now;
+ _db.Updateable(carTask).ExecuteCommand();
+ //娣诲姞浠诲姟鏄庣粏
+ var taskMonitor = new WcsTaskMonitor()
+ {
+ TaskNo = carTask.TaskNo,
+ PlcName = modDevice.Text,
+ InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
+ };
+ _db.Insertable(taskMonitor).ExecuteCommand();
+ //涓嬪彂浠诲姟鏃ュ織
+
+ HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
+ }
+ //娌℃湁璺緞2鐨勪换鍔� 鍙樻洿鎬讳换鍔′俊鎭�
+ if (carTask2 == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
+ {
+ modFinshTask.Status = TaskStatusEnum.Complete;
+ modFinshTask.FinishDate = DateTime.Now;
+ _db.Updateable(modFinshTask).ExecuteCommand();
+
+ //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
+ //HttpService httpService = new HttpService();
+ //var requestMode = new TaskRequestWMS()
+ //{
+ // TaskNo = modFinshTask.TaskNo,
+ // PalletNo = modFinshTask.PalletNo,
+ // TaskType = ((int)modFinshTask.TaskType).ToString(),
+ // TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+ //};
+ //var modResponseTask = httpService.RequestTask(requestMode).Result;
+ //modFinshTask.IsSuccess = TaskSuccessEnum.Success;
+ //_db.Updateable(modFinshTask).ExecuteCommand();
+ HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
+
+ }
+
}
var modStationX = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(X)");
@@ -210,35 +230,52 @@
var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
// 鑾峰彇浠诲姟淇℃伅
- var stationStart = ((int)valuex).ToString().PadLeft(2, '0');
- var stationEnd = ((int)valuez).ToString().PadLeft(2, '0') + "01";
- var listTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime)
- .Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar
- && s.StartLocate.StartsWith(stationStart) && s.StartLocate.EndsWith(stationEnd)).ToList();
- var modTask = listTask.FirstOrDefault();
- //return;
- if (modTask == null)
- return;
- if (modTask.StartLocate == modTask.EndLocate)
+ var modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime).First();
+
+ //瑕佷笅鍙戣矾寰�2浠诲姟
+ if (carTask2 == null)
{
- modTask.Status = TaskStatusEnum.Doing;
- _db.Updateable(modTask).ExecuteCommand();
- HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+ modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTask2.TaskNo && s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar);
+
+ carTask2= _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP).OrderBy(m => m.CreateTime).First();
+ }
+
+ //return;
+ if (modTask == null || carTask2 == null)
+ {
return;
}
- if (modTask.Status == TaskStatusEnum.Doing)
+
+ if (carTask2.Status == TaskStatusEnum.Doing)
{
Thread.Sleep(3000);
return;
+ }
+ //鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鍓嶇疆浠诲姟鏈畬鎴�
+ var preStrs = carTask2.PreId.Split(';');
+ foreach (var preStr in preStrs)
+ {
+ if (string.IsNullOrWhiteSpace(preStr))
+ {
+ continue;
+ }
+ var preId = long.Parse(preStr);
+ var CarTaskPre = _db.Queryable<WcsCarTasks>().First(m => m.Id == preId);
+ if (CarTaskPre.Status <= TaskStatusEnum.Doing)
+ {
+ return;//鍓嶇疆浠诲姟鏈畬鎴�
+ }
}
//鍏堝浣�
var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
List<Result> listResult = new List<Result>();
- //鍐欏叆浠诲姟鍙稩d鐨勬湯4浣嶏紝2涓皬杞︿竴璧疯窇鏈夋瀬浣庢鐜囬噸澶�
+ //鑾峰彇灏忚溅浠诲姟鍙�
+ var carTaskNo = FourWayCarUtil.GetTaskNo();
+
var modWriteTask = modDevice.listStation.FirstOrDefault(s => s.Text == "鍐欏叆浠诲姟鍙�");
- listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, modTask.Id.ToString().Substring(modTask.Id.ToString().Length - 4)));
+ listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
var modNodeX = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣X");
var modNodeY = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣Y");
@@ -256,29 +293,21 @@
listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), Convert.ToString(valuez)));
listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
}
- //鍐欏叆璧峰浣嶇疆鍙栬揣
- listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), modTask.StartLocate.Substring(0, 2)));
- listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), modTask.StartLocate.Substring(2, 2)));
- listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), modTask.StartLocate.Substring(4, 2)));
- listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "2"));
- //鍐欏叆鐩爣浣嶇疆鏀捐揣
- listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), modTask.EndLocate.Substring(0, 2)));
- listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), modTask.EndLocate.Substring(2, 2)));
- listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), modTask.EndLocate.Substring(4, 2)));
- listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
- string endPos = "";
- if (modTask.StartLocate.Substring(0, 2).ToInt() >= 14)
- endPos = "01";
- else
- endPos = "21";
- if (listTask.Count == 1 && modTask.EndLocate.Substring(2, 2) != endPos)
+ //浜や簰璺緞
+ var execuPath = carTask2.ExecutionPath.Split(';');
+ foreach (var ePath in execuPath)
{
- //濡傛灉鍚庣画娌℃湁浠诲姟锛屽氨璁╁皬杞﹀洖鍒板師浣�
- listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), modTask.EndLocate.Substring(0, 2)));
- listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), endPos));//todo:杩欓噷浣嶇疆寰呭畾
- listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), modTask.EndLocate.Substring(4, 2)));
- listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
+ if (string.IsNullOrWhiteSpace(ePath))
+ {
+ continue;
+ }
+ //鍐欏叆浜や簰浣嶇疆
+ listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), ePath.Substring(0, 2)));
+ listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), ePath.Substring(2, 2)));
+ listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), ePath.Substring(4, 2)));
+ listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), ePath.Substring(5, 1)));
}
+
//杩欓噷鏄妸鍚庨潰鐨勫潗鏍囧叏鍐�0锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級
while (posX <= 43097)
{
@@ -293,17 +322,17 @@
var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1");
if (result.IsSucceed)
{
- modTask.Status = TaskStatusEnum.Doing;
- _db.Updateable(modTask).ExecuteCommand();
+ carTask2.Status = TaskStatusEnum.Doing;
+ carTask2.CarTaskNo = carTaskNo;
+ _db.Updateable(carTask2).ExecuteCommand();
var taskMonitor = new WcsTaskMonitor()
{
- TaskNo = modTask.TaskNo,
+ TaskNo = carTask2.TaskNo,
PlcName = modDevice.Text,
- InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{modTask.TaskNo}"
+ InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTask2.TaskNo}"
};
_db.Insertable(taskMonitor).ExecuteCommand();
//涓嬪彂浠诲姟鏃ュ織
- HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
}
}
@@ -314,42 +343,42 @@
//灏忚溅鐘舵�佸紓甯�
var modPosTaskStatus = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��");
var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos);
+
+ if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
{
- if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
+ var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+ var (resultTask, valueTask) = plcConn.GetDBValue(modPosTask.PosType, modPosTask.PlcPos);
+ string valueTaskStr = Convert.ToString(valueTask);
+ string strNo = "";
+ var boNo = dicTaskNo.TryGetValue(modDevice.Id.ToString(), out strNo);
+ if (valueTaskStr != "0" && strNo != valueTaskStr)
{
- var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
- var (resultTask, valueTask) = plcConn.GetDBValue(modPosTask.PosType, modPosTask.PlcPos);
- string valueTaskStr = Convert.ToString(valueTask);
- string strNo = "";
- var boNo = dicTaskNo.TryGetValue(modDevice.Id.ToString(), out strNo);
- if (valueTaskStr != "0" && strNo != valueTaskStr)
+ var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.Id.ToString().EndsWith(valueTaskStr));
+ if (modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
{
- var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.Id.ToString().EndsWith(valueTaskStr));
- if (modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
+ HttpService httpService = new HttpService();
+ var requestMode = new TaskRequestWMS()
{
- HttpService httpService = new HttpService();
- var requestMode = new TaskRequestWMS()
- {
- TaskNo = modFinshTask.TaskNo,
- PalletNo = modFinshTask.PalletNo,
- TaskType = ((int)modFinshTask.TaskType).ToString(),
- TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
- };
- var modResponseTask = httpService.RequestTask(requestMode).Result;
- modFinshTask.IsSuccess = TaskSuccessEnum.Success;
- _db.Updateable(modFinshTask).ExecuteCommand();
- //涓嬪彂浠诲姟鏃ュ織
- //HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
- //HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
+ TaskNo = modFinshTask.TaskNo,
+ PalletNo = modFinshTask.PalletNo,
+ TaskType = ((int)modFinshTask.TaskType).ToString(),
+ TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+ };
+ var modResponseTask = httpService.RequestTask(requestMode).Result;
+ modFinshTask.IsSuccess = TaskSuccessEnum.Success;
+ _db.Updateable(modFinshTask).ExecuteCommand();
+ //涓嬪彂浠诲姟鏃ュ織
+ //HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
+ //HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
- if (dicTaskNo.ContainsKey(modDevice.Id.ToString()))
- dicTaskNo.Remove(modDevice.Id.ToString());
- dicTaskNo.Add(modDevice.Id.ToString(), valueTaskStr);
- }
+ if (dicTaskNo.ContainsKey(modDevice.Id.ToString()))
+ dicTaskNo.Remove(modDevice.Id.ToString());
+ dicTaskNo.Add(modDevice.Id.ToString(), valueTaskStr);
}
-
}
+
}
+
Console.WriteLine($"绌挎杞modDevice.PlcIdIP}寮傚父");
var modPosError = modDevice.listStation.FirstOrDefault(s => s.Text == "閿欒鐮�");
var (result, valueError) = plcConn.GetDBValue(modPosError.PosType, modPosError.PlcPos);
@@ -599,160 +628,22 @@
/// <param name="modDevice"></param>
private static void AGV(WcsDeviceDto modDevice)
{
- if (AGVStatus)
- {
- return;
- }
- //杩欓噷鎵惧嚭鏉GV寰呮墽琛屽拰姝e湪鎵ц鐨勪换鍔★紝濡傛灉鏈夋鍦ㄦ墽琛岀殑浠诲姟灏辫烦鍑猴紝娌℃湁鐨勮瘽灏辨寜鐓т紭鍏堢骇涓嬪彂涓�涓换鍔$粰AGV
- var listTask = _db.Queryable<WcsTask>()
- .Where(s => (s.Status == TaskStatusEnum.Doing || s.Status == TaskStatusEnum.Wait) && s.Type == PLCTypeEnum.AGV)
- .OrderBy(s => s.Levels).ToList();
+
+ //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇涓嬪彂涓�涓换鍔$粰AGV
+ var listTask = _db.Queryable<WcsTask>().Where(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.Type == PLCTypeEnum.AGV).OrderBy(s => s.Levels).ToList();
if (listTask.Count == 0)
- return;
- if (listTask.Any(s => s.Status == TaskStatusEnum.Doing))
{
- //鏈変换鍔℃墽琛屼腑 鏆備笉涓嬪彂浠诲姟
return;
}
- //WcsTask modTask = listTask.FirstOrDefault();
+
foreach (var modTask in listTask)
{
- //鍏ョ紦瀛樺尯鏃讹紝妫�楠屼竴涓嬬紦瀛樺尯浣嶇疆
- if (modTask.EndLocate.Substring(0, 1) == "Z")
+ if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV ))
{
- if (modTask.EndLocate.Substring(1, 1) == "5")
- {
- string end = AGVStorageUtil.GetPalletInStorage(modTask.TaskNo);
- if (end.IsNullOrEmpty())
- continue;
- if (modTask.EndLocate != end)
- {
- modTask.EndLocate = end;
- }
- }
- else
- {
- string end = AGVStorageUtil.GetProductInStorage(modTask.TaskNo);
- if (end.IsNullOrEmpty())
- continue;
- if (modTask.EndLocate != end)
- {
- modTask.EndLocate = end;
- }
- }
+ continue; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔�
}
- //鍑虹紦瀛樺尯鏃讹紝妫�楠屼竴涓嬬紦瀛樺尯浣嶇疆
- if (modTask.StartLocate.Substring(0, 1) == "Z")
- {
- if (modTask.StartLocate.Substring(1, 1) == "5")
- {
- string start = AGVStorageUtil.GetPalletOutStorage();
- if (start.IsNullOrEmpty())
- continue;
- if (modTask.StartLocate != start)
- {
- modTask.StartLocate = start;
- }
- }
- else
- {
- string start = AGVStorageUtil.GetProductOutStorage();
- if (start.IsNullOrEmpty())
- continue;
- if (modTask.StartLocate != start)
- {
- modTask.StartLocate = start;
- }
- }
- }
- //鎶婃墭鐩樻媺鍒扮紦瀛樹綅 鍏堝垽鏂繖閲屾湁娌℃湁
- if (modTask.EndLocate.Substring(0, 1) == "C")
- {
- var bo = _sysConfigService.GetConfigValue<bool>("cache_" + modTask.EndLocate).Result;
- if (bo)
- continue;
- }
- //濡傛灉鎷夋墭鐩樺幓鎴愬搧宸ヤ綅锛屽厛妫�鏌ユ湁娌℃湁缂烘墭
- if (modTask.StartLocate.Substring(0, 1) == "D" && modTask.EndLocate.Substring(0, 1) == "B")
- {
- //鍒ゆ柇鐩爣浣嶇疆鏄媶鎵樻満鐨勪换鍔℃湁娌℃湁锛屾湁灏辫烦杩囨媶鎵樻満鍒版垚鍝佸伐浣嶇殑浠诲姟
- if (listTask.Any(s => s.EndLocate.Substring(0, 1) == "D"))
- continue;
- }
- //濡傛灉鐩殑宸ヤ綅鏄師鏂欎粨锛屽厛妫�鏌ュ師鏂欎粨鍌ㄤ綅鐘舵��
- if (modTask.EndLocate == AGVStaionEnum.F1.ToString())
- {
- if (_sysConfigService.GetConfigValue<bool>("cache_Materal").Result)
- continue;
- }
- //if (modTask.StartLocate == AGVStaionEnum.F1.ToString())
- //{
- // if (!_sysConfigService.GetConfigValue<bool>("cache_Materal").Result)
- // continue;
- //}
- //濡傛灉璧峰宸ヤ綅鏄媶鎵樻満
- if (modTask.StartLocate == AGVStaionEnum.D1.ToString())
- {
- //鑾峰彇鍙犳媶鎵樻満IP
- var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.PalletMachine);
- //鑾峰彇鍙犳媶鎵樻満宸ヤ綅
- var modDevice2 = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Text == "鎷嗘墭鏈�");
- //鎵撳紑杩炴帴
- var modConn = new PLCUtil(modPlc);
- //鏄惁鍏佽鍙栨墭淇″彿
- var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "鍏佽鍙栨墭");
- var (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos);
- if (result.IsSucceed)
- {
- if (value)
- {
- //濡傛灉鏈畬鎴愬氨鍒ゆ柇涓嬪彇鎵樹俊鍙锋湁娌℃湁鍐欙紝瀹屾垚灏卞彨灏忚溅鍙栨墭鐩�
- modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "鍙栨墭淇″彿");
- (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos);
- //濡傛灉娌″啓鍏ュ彇鎵樹俊鍙凤紝灏卞啓鍏�
- if (result.IsSucceed && !value)
- {
- result = modConn.SetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos, "1");
- WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
- {
- TaskNo = modTask.TaskNo,
- PlcId = modDevice2.PlcId,
- PlcName = modPos.PlcPos,
- Status = TaskStatusEnum.Doing,
- InteractiveMsg = $"鍚憑modDevice2.Text}鍐欏叆鍙栨墭淇″彿1锛岀粨鏋渰result.IsSucceed}",
- };
- _db.Insertable(modTaskMonitor).ExecuteCommand();
- HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
- Thread.Sleep(5000);
- }
- break;
-
- }
- else
- {
- //涓嶅厑璁稿彇鎵橈紝鍒ゆ柇鏄惁鎷嗘墭鏈哄噯澶囧畬鎴�
- modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "鍑嗗瀹屾垚");
- (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos);
- if (!value)
- {
- continue;
- }
- }
- }
- else
- {
- Console.WriteLine("杩炴帴鎷嗘墭鏈轰俊鍙峰け璐�");
- continue;
- }
- }
- //濡傛灉鐩殑宸ヤ綅鏄彁鍗囨満鏀捐揣宸ヤ綅锛屽厛妫�鏌ユ湁娌℃湁鎵樼洏绾跨殑浠诲姟
- if (modTask.EndLocate == AGVStaionEnum.A1.ToString())
- {
- if (_db.Queryable<WcsTask>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Status == TaskStatusEnum.Doing).Any())
- continue;
- }
-
+ //涓嬪彂AGV浠诲姟
AgvTaskInput input = new AgvTaskInput()
{
ReqCode = modTask.Id.ToString(),
--
Gitblit v1.8.0