From c2bed218cc875e59fff53ef43a187d5934bdf35c Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期日, 27 四月 2025 14:59:20 +0800
Subject: [PATCH] 修改优化问题
---
Admin.NET/WCS.Application/PLC/PLCService.cs | 62 +++++++---
Admin.NET/WCS.Application/Util/FourWayCarUtil.cs | 107 ++++++++++++++---
Admin.NET/WCS.Application/Entity/WcsTask.cs | 2
Admin.NET/WCS.Application/OpenApi/OpenApi.cs | 54 ++++++++
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | 94 ++++++++++-----
5 files changed, 242 insertions(+), 77 deletions(-)
diff --git a/Admin.NET/WCS.Application/Entity/WcsTask.cs b/Admin.NET/WCS.Application/Entity/WcsTask.cs
index df6477c..7333be5 100644
--- a/Admin.NET/WCS.Application/Entity/WcsTask.cs
+++ b/Admin.NET/WCS.Application/Entity/WcsTask.cs
@@ -14,7 +14,7 @@
public string? TaskNo { get; set; }
/// <summary>
- /// 浠诲姟绫诲瀷
+ /// 浠诲姟绫诲瀷
/// </summary>
[SugarColumn(ColumnName = "TaskType", ColumnDescription = "浠诲姟绫诲瀷")]
public TaskTypeEnum? TaskType { get; set; }
diff --git a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
index 62c9a4d..7d62853 100644
--- a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
+++ b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
@@ -17,6 +17,8 @@
using Newtonsoft.Json.Linq;
using SqlSugar;
using NewLife.Reflection;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.CustomServiceKfSessionGetWaitCaseResponse.Types;
+using WCS.Application.Util;
namespace WCS.Application;
@@ -42,7 +44,54 @@
_taskService = taskService;
}
- // <summary>
+ /// <summary>
+ /// 娴嬭瘯鍒嗛厤浠诲姟璺緞
+ /// </summary>
+ /// <param name="models">浠诲姟淇℃伅</param>
+ /// <returns>鍙嶉淇℃伅</returns>
+ [AllowAnonymous]
+ public async Task AddAssignTasks(ResponseTasksModel models)
+ {
+ // 楠岃瘉浠诲姟鏄惁宸插瓨鍦�
+ var taskInfo = await _db.Queryable<WcsTask>().FirstAsync(w => w.TaskNo == models.TaskNo);
+ if (taskInfo == null)
+ {
+ throw Oops.Bah("浠诲姟:" + models.TaskNo + ";涓嶅瓨鍦�!");
+ }
+ var data1 = FourWayCarUtil.GetCarPath("090601", "080401");
+ if (data1 == null) //|| data1.Count == 0
+ {
+ throw Oops.Bah("鍒嗛厤璺緞涓嶅瓨鍦�!");
+ }
+
+ // 鏍规嵁浠诲姟鐘舵�� 琛ュ厖璧峰缁撴潫鑺傜偣鐘舵��
+ var data2 = FourWayCarUtil.GetCarPathUp(data1, 1);
+ var path = "";
+ var executionPath1 = "";
+ foreach (var item in data1)
+ {
+ //璺緞鑺傜偣
+ var pathXYZ = item.X.ToString().PadLeft(2, '0') + item.Y.ToString().PadLeft(2, '0') + item.Z.ToString().PadLeft(2, '0') + item.NodeCom.ToString();
+ path += pathXYZ + ";";
+ if (item.IsSendPlc)
+ {
+ executionPath1 += pathXYZ + ";";
+ }
+ }
+ // 鎻掑叆鍥涘悜杞︿换鍔¤〃
+ var carTask1 = new WcsCarTasks()
+ {
+ TaskNo = taskInfo.TaskNo,
+ PreId = "",
+ ExecutionPath = executionPath1,
+ Path = path,
+ CarNo = "",
+ Status = TaskStatusEnum.Wait
+ };
+ var i = _db.Insertable(carTask1).ExecuteCommand();
+ Console.WriteLine(""+i);
+ }
+
/// WCS鎺ュ彈WMS涓嬪彂鐨勪换鍔�(澶�
/// 鏉′换鍔�)
/// <param name="models">浠诲姟淇℃伅</param>
@@ -115,8 +164,9 @@
var taskAdd = new WcsTask()
{
TaskNo = models.TaskNo,
- TaskType = TaskTypeEnum.Out,
+ TaskType = (TaskTypeEnum?)int.Parse(models.TaskType),
Status = TaskStatusEnum.Wait,
+ Type = models.Type,
Levels = 999,
Origin = "WMS",
StartRoadway = models.StartRoadway,
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index ee43c9c..2fff948 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -146,6 +146,7 @@
private static void ShuttleCar(WcsDeviceDto modDevice)
{
var plcConn = modDevice.modbusUtil;
+ // 鍥涘悜杞︾姸鎬� 0:鏈┖闂�,1:绌洪棽,2:寮傚父 3锛氬厖鐢典腑
switch (modDevice.Value.ToString())
{
case "0":
@@ -156,9 +157,10 @@
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锛氬厖鐢典腑
-
+ //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1 0:鏃犱换鍔�,1:浠诲姟瀹屾垚,2:浠诲姟鍙栨秷,3:浠诲姟鏆傚仠锛�4锛氫换鍔″紓甯� 5锛氫换鍔℃墽琛屼腑
+
WcsCarTasks carTask2 = null;//null 鏂颁换鍔� not null 璺緞2浠诲姟
+
if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
{
var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
@@ -169,13 +171,15 @@
var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP);
if (carTask == null)
{
- return;//娌℃湁鎵惧埌浠诲姟
+ var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
+ plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟 澶嶄綅
+ return;
}
var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
if (modFinshTask == null)
{
- return;//娌℃湁鏌ヨ鍒版�讳换鍔�
+ break;//娌℃湁鏌ヨ鍒版�讳换鍔�
}
//鑾峰彇璺緞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();
@@ -221,7 +225,7 @@
}
}
-
+
var modStationX = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(X)");
var (resultx, valuex) = plcConn.GetDBValue(modStationX.PosType, modStationX.PlcPos);
var modStationY = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Y)");
@@ -229,20 +233,30 @@
var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
- // 鑾峰彇浠诲姟淇℃伅
- 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();
+ WcsTask modTask;
//瑕佷笅鍙戣矾寰�2浠诲姟
- if (carTask2 == null)
+ if (carTask2 != null)
{
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();
}
+ else
+ {
+ // 鑾峰彇浠诲姟淇℃伅
+ 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();
+ if (modTask == null)
+ {
+ return;
+ }
+ 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)
{
+ //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔� 鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
return;
}
@@ -285,27 +299,34 @@
int posY = Convert.ToInt32(modNodeY.PlcPos);
int posZ = Convert.ToInt32(modNodeZ.PlcPos);
int posStatus = Convert.ToInt32(modNodeStatus.PlcPos);
- if (Convert.ToInt32(valuey) != Convert.ToInt32(modTask.StartLocate.Substring(2, 2)))
- {
- //鍐欏叆灏忚溅褰撳墠浣嶇疆
- listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), Convert.ToString(valuex)));
- listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), Convert.ToString(valuey)));
- listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), Convert.ToString(valuez)));
- listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
- }
+
//浜や簰璺緞
var execuPath = carTask2.ExecutionPath.Split(';');
+ if (Convert.ToInt32(valuex) != Convert.ToInt32(execuPath[0].Substring(0, 2)) || Convert.ToInt32(valuey) != Convert.ToInt32(execuPath[0].Substring(2, 2)) || Convert.ToInt32(valuez) != Convert.ToInt32(execuPath[0].Substring(4, 2)))
+ {
+ return; //灏忚溅浣嶇疆涓庤矾寰勮捣濮嬩綅缃笉鍚�
+ ////鍐欏叆灏忚溅褰撳墠浣嶇疆
+ //listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), Convert.ToString(valuex)));
+ //listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), Convert.ToString(valuey)));
+ //listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), Convert.ToString(valuez)));
+ //listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
+ }
+
foreach (var ePath in execuPath)
{
if (string.IsNullOrWhiteSpace(ePath))
{
continue;
}
+ var epathx = ePath.Substring(0, 2);
+ var epathy = ePath.Substring(2, 2);
+ var epathz = ePath.Substring(4, 2);
+ var epathn = ePath.Substring(6, 1);
//鍐欏叆浜や簰浣嶇疆
- 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)));
+ listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), epathx));
+ listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), epathy));
+ listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), epathz));
+ listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), epathn));
}
//杩欓噷鏄妸鍚庨潰鐨勫潗鏍囧叏鍐�0锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級
@@ -325,6 +346,7 @@
carTask2.Status = TaskStatusEnum.Doing;
carTask2.CarTaskNo = carTaskNo;
_db.Updateable(carTask2).ExecuteCommand();
+ //娓呴櫎灏忚溅绌洪棽鏃堕棿
var taskMonitor = new WcsTaskMonitor()
{
TaskNo = carTask2.TaskNo,
diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
index e6932f9..17bcb90 100644
--- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -143,7 +143,7 @@
StartRead();
ConnectionStatus();
StartWatchAlarm();
- //AssignTasks();
+ AssignTasks();
//StartWatchPosition();
}
}
@@ -209,15 +209,15 @@
var (result, value) = modPlcUtil.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos);
if (result.IsSucceed)
{
- //濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺�
- if (modPlc.Type == PLCTypeEnum.ShuttleCar)
- {
- var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault();
- if (modHeart != null)
- {
- modPlcUtil.SetPlcDBValue(modHeart.PosType, modHeart.PlcPos, "1");
- }
- }
+ ////濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺�
+ //if (modPlc.Type == PLCTypeEnum.ShuttleCar)
+ //{
+ // var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault();
+ // if (modHeart != null)
+ // {
+ // modPlcUtil.SetPlcDBValue(modHeart.PosType, modHeart.PlcPos, "1");
+ // }
+ //}
//鏃犳祦绋嬭烦鍑�
if (Convert.ToInt32(value) == 0)
continue;
@@ -265,11 +265,22 @@
var (result, value) = modbusUtil.GetDBValue(modDevice.PosType, modDevice.PlcPos);
if (result.IsSucceed)
{
+ //濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺�
+ if (modPlc.Type == PLCTypeEnum.ShuttleCar)
+ {
+ var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault();
+ if (modHeart != null)
+ {
+ modbusUtil.SetDBValue(modHeart.PosType, modHeart.PlcPos, "1");
+ }
+ }
+
//鏃犳祦绋嬭烦鍑�
if (value == 0)
continue;
var dto = modDevice.Adapt<WcsDeviceDto>();
dto.Value = value;
+ dto.PlcIdIP = modPlc.IP;
dto.Type = _modplc.Type;
dto.modbusUtil = modbusUtil;
dto.listStation = listPlcPosition.Where(s => s.DeviceId == modDevice.Id).ToList();
@@ -367,10 +378,13 @@
{
// 鑾峰彇瀵嗛泦搴撴湭鎵ц浠诲姟 鏍规嵁鍒涘缓鏃堕棿鎺掑簭
var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => s.CreateTime).First();
-
+ if (waitTask == null)
+ {
+ continue;
+ }
//01010101: 01鎺� 01鍒� 01灞� 01娣卞害-姝ら」鐩笉鍋氬垽鏂�
- var taskpai = int.Parse(waitTask.StartLocate.Substring(4, 2));
- var tasklie = int.Parse(waitTask.StartLocate.Substring(4, 2));
+ var taskpai = int.Parse(waitTask.StartLocate.Substring(0, 2));
+ var tasklie = int.Parse(waitTask.StartLocate.Substring(2, 2));
var taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2));
#region 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞�
@@ -380,6 +394,7 @@
// 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞︼紙鏍规嵁灏忚溅浠诲姟琛ㄦ槸鍚︽湁浠诲姟鍜屽皬杞︾姸鎬佸叡鍚屽垽鏂皬杞︽槸鍚︾┖闂�)
var kXCarList = new List<CarInfo>();
+ var carErr = false;//灏忚溅鏄惁鏈夊け鑱旂殑
foreach (var modbusUtil in listModbusUtil)
{
//濡傛灉灏忚溅鏈夋湭鎵ц鐨勪换鍔★紝璺冲嚭
@@ -414,7 +429,8 @@
if (!kXCarList.Any(m => m.CarPlcIp == modbusUtil.PlcIP))
{
var carVal = ((int)valuex).ToString().PadLeft(2, '0') + ((int)valuey).ToString().PadLeft(2, '0') + ((int)valuez).ToString().PadLeft(2, '0');
- var d = FourWayCarUtil.GetCarPath(carVal, waitTask.StartLocate, 0);
+ //灏忚溅鍒板彇璐у偍浣嶈矾寰�
+ var d = FourWayCarUtil.GetCarPath(carVal, waitTask.StartLocate);
kXCarList.Add(new CarInfo()
{
CarPlcIp = modbusUtil.PlcIP,
@@ -430,8 +446,15 @@
else
{
Console.WriteLine($"璇诲彇鍥涘悜杞modbusUtil.PlcIP}鐘舵�佸け璐�");
- return;//鏈変竴涓皬杞﹁鍙栧け璐ヨ烦鍑烘柟娉曪紝鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞
+ carErr = true;
+ break;//鏈変竴涓皬杞﹁鍙栧け璐ヨ烦鍑烘柟娉曪紝鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞
}
+ }
+ //鏈夊皬杞﹀け鑱旓紝涓嶅垎閰嶄换鍔�
+ if (carErr)
+ {
+ kXCarList.Clear();//娓呮绌鸿溅璁板綍
+ break;
}
}
@@ -442,7 +465,7 @@
var assignCar = kXCarList.OrderBy(m => m.Level).FirstOrDefault();
if (assignCar == null)
{
- break;//娌℃湁绌洪棽灏忚溅
+ continue;//娌℃湁绌洪棽灏忚溅
}
var data = new List<CarModel>();
if (assignCar.Level != 0)
@@ -450,14 +473,15 @@
//鍒ゆ柇灏忚溅浣嶇疆鏄惁涓庝换鍔$殑璧峰鍌ㄤ綅鐩稿悓,涓嶇浉鍚岋細鑾峰彇灏忚溅鍒板彇璐у偍浣嶈矾寰�
var carLocate = assignCar.X.ToString().PadLeft(2, '0')+assignCar.Y.ToString().PadLeft(2, '0')+ assignCar.Z.ToString().PadLeft(2, '0');
//鑾峰彇灏忚溅鍘诲彇璐у偍浣嶄换鍔¤矾寰�
- var data1 = FourWayCarUtil.GetCarPath(carLocate, waitTask.StartLocate, 0);
- data.AddRange(data1);
+ var data1 = FourWayCarUtil.GetCarPath(carLocate, waitTask.StartLocate);
+ var datas = FourWayCarUtil.GetCarPathUp(data1, 0);
+ data.AddRange(datas);
}
//鑾峰彇灏忚溅鍘绘斁璐у偍浣嶄换鍔¤矾寰�
- var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, 2, "1");
-
- data.AddRange(data2);
- if (data == null) { break; }
+ var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, "1");
+ var datas2 = FourWayCarUtil.GetCarPathUp(data2, 1);
+ data.AddRange(datas2);
+ if (data == null) { continue; }
var preId1 = "";//鍓嶇疆浠诲姟Id
var executionPath1 = "";//浜や簰璺緞
@@ -478,10 +502,10 @@
//鍒ゆ柇濡傛灉鏄畬鏁磋矾寰� 璁板綍浜や簰璺緞
if (isOk == "1")
{
- if (i == 0)
- {
- return;//绗竴涓妭鐐规湁鍜屽叾浠栦换鍔¤矾寰勫啿绐侊紝鏃犳硶閬垮厤
- }
+ //if (i == 0)
+ //{
+ // return;//绗竴涓妭鐐规湁鍜屽叾浠栦换鍔¤矾寰勫啿绐侊紝鏃犳硶閬垮厤
+ //}
var pathXYZQian = data[i - 1].X.ToString().PadLeft(2, '0') + data[i - 1].Y.ToString().PadLeft(2, '0') + data[i - 1].Z.ToString().PadLeft(2, '0') + data[i].NodeCom.ToString();
if (!executionPath1.Contains(pathXYZQian))
{
@@ -540,14 +564,15 @@
var endLocate3 = "";
var executionPath3 = "";
var path3 = "";
- var data3 = new List<CarModel>();
+ var datas3 = new List<CarModel>();
//鏌ユ壘鐩爣浣嶇疆
- while (endLocate3 == "" || data3.Count == 0 || data3 == null)
+ while (endLocate3 == "" || datas3.Count == 0 || datas3 == null)
{
endLocate3 = FourWayCarUtil.GetCarEndLocation(carXYZ, str3);
- data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, 0, "0");
+ var data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, "0");
+ datas3 = FourWayCarUtil.GetCarPathUp(data3, 0);
}
- foreach (var itemPath in data3)
+ foreach (var itemPath in datas3)
{
var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString();
@@ -612,14 +637,15 @@
var endLocate = "";
var executionPath4 = "";
var path4 = "";
- var data4 = new List<CarModel>();
+ var datas4 = new List<CarModel>();
//鏌ユ壘鐩爣浣嶇疆
- while (endLocate == "" || data4.Count == 0 || data4 == null)
+ while (endLocate == "" || datas4.Count == 0 || datas4 == null)
{
endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4);
- data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate, 0, "0");
+ var data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate);
+ datas4 = FourWayCarUtil.GetCarPathUp(data4, 0);
}
- foreach (var itemPath in data4)
+ foreach (var itemPath in datas4)
{
var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString();
diff --git a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
index aaa4238..5116b4d 100644
--- a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
+++ b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
@@ -14,16 +14,67 @@
{
private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
-
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="list">闆嗗悎</param>
+ /// <param name="moveType">绉诲姩绫诲瀷 0:绉诲姩 1:绉昏揣 </param>
+ /// <returns></returns>
+ public static List<CarModel> GetCarPathUp(List<CarModel> list,int moveType)
+ {
+ for (int i = 0; i < list.Count; i++)
+ {
+ if (i > 0 && i < list.Count - 1)
+ {
+ if (list[i].X == list[i + 1].X)
+ {
+ list[i].NodeCom = 2;
+ }
+ else if (list[i].Y == list[i + 1].Y)
+ {
+ list[i].NodeCom = 3;
+ }
+ }
+ if (i== 0)
+ {
+ list[i].IsSendPlc = true;
+ if (moveType == 0)
+ {
+ if (list[i + 1] == null)
+ {
+ continue;
+ }
+
+ }
+ else
+ {
+ list[i].NodeCom = 1;
+ }
+ }
+ if (i == list.Count-1)
+ {
+ list[i].IsSendPlc = true;
+ if (moveType == 0)
+ {
+ list[i].NodeCom = list[i + 1].NodeCom;
+ }
+ else
+ {
+ list[i].NodeCom = 4;
+ }
+ }
+ }
+ return list;
+ }
+
/// <summary>
/// 鑾峰彇灏忚溅璺緞
/// </summary>
/// <param name="startLocation">璧峰浣嶇疆</param>
/// <param name="endLocation">鐩爣浣嶇疆</param>
- /// <param name="moveType">绉诲姩绫诲瀷 0:绉诲姩 1:鍙栬揣 2:鏀捐揣</param>
/// <param name="isLoad">鏄惁杞借揣0锛氭湭杞借揣 1锛氬凡杞借揣</param>
/// <returns></returns>
- public static List<CarModel> GetCarPath(string startLocation, string endLocation, int moveType, string isLoad = "0")
+ public static List<CarModel> GetCarPath(string startLocation, string endLocation, string isLoad = "0")
{
if (string.IsNullOrEmpty(startLocation) || string.IsNullOrEmpty(endLocation))
{
@@ -174,25 +225,41 @@
if (!gScore.ContainsKey(neighbor) || tentativeGScore < gScore[neighbor])
{
neighbor.IsSendPlc = false;
- // 琛ュ厖鍙傛暟
- if (neighbor.Equals(end))
- {
- neighbor.NodeCom = moveType;
- neighbor.IsSendPlc = true;
- }
- else if (currentModel.Make != locationModel.Make)
- {
- if (current.X == neighbor.X)
- {
- neighbor.NodeCom = 3;
- }
- else if (current.Y == neighbor.Y)
- {
- neighbor.NodeCom = 2;
- }
- neighbor.IsSendPlc = true;
+ //if (current.X == neighbor.X)
+ //{
+ // current.NodeCom = 2;
+ //}
+ //else if (current.Y == neighbor.Y)
+ //{
+ // current.NodeCom = 3;
+ //}
+
+ //// 琛ュ厖鍙傛暟
+ //if (current.Equals(start))
+ //{
+ // current.NodeCom = moveType;
+ // current.IsSendPlc = true;
+ //}
+ //if (neighbor.Equals(end))
+ //{
+ // //neighbor.NodeCom = moveType != 0 ? 2:0 ;
+ // if (moveType == 1)
+ // {
+ // neighbor.NodeCom = 4;
+ // }
+ // else
+ // {
+ // neighbor.NodeCom = current.NodeCom;
+ // }
+
+ // neighbor.IsSendPlc = true;
+ //}
+ if (currentModel.Make != locationModel.Make)
+ {
+ neighbor.IsSendPlc = true;
}
+
// 鏇存柊瀹為檯璺濈涓庨浼拌窛绂�
cameFrom[neighbor] = current;
--
Gitblit v1.8.0