From 4606665e0e359aa54483283c042934c644a45434 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期一, 28 四月 2025 17:26:15 +0800
Subject: [PATCH] 修改冲突问题
---
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | 328 ++++++++++++------------------------------------------
1 files changed, 73 insertions(+), 255 deletions(-)
diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
index e6932f9..f22caec 100644
--- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -90,7 +90,7 @@
/// <summary>
/// 鍒濆鍖朠LC杩炴帴
/// </summary>
- public static void Init()
+ public static void Init()
{
cts.Cancel();
listPlc = _db.Queryable<WcsPlc>()
@@ -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();
@@ -327,7 +338,7 @@
- Thread.Sleep(1000);
+ Thread.Sleep(3000);
}
catch (OperationCanceledException)
{
@@ -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,270 +446,72 @@
else
{
Console.WriteLine($"璇诲彇鍥涘悜杞modbusUtil.PlcIP}鐘舵�佸け璐�");
- return;//鏈変竴涓皬杞﹁鍙栧け璐ヨ烦鍑烘柟娉曪紝鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞
+ carErr = true;
+ break;//鏈変竴涓皬杞﹁鍙栧け璐ヨ烦鍑烘柟娉曪紝鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞
}
+ }
+ //鏈夊皬杞﹀け鑱旓紝涓嶅垎閰嶄换鍔�
+ if (carErr)
+ {
+ kXCarList.Clear();//娓呮绌鸿溅璁板綍
+ break;
}
}
#endregion
- #region 鑾峰彇閫傚悎鎵ц褰撳墠浠诲姟鐨勫皬杞� 鐢熸垚璺緞锛堥渶鑰冭檻灏忚溅闃婚樆鎸★級
+ // 鑾峰彇閫傚悎鎵ц褰撳墠浠诲姟鐨勫皬杞� 鐢熸垚璺緞锛堥渶鑰冭檻灏忚溅闃婚樆鎸★級
var assignCar = kXCarList.OrderBy(m => m.Level).FirstOrDefault();
if (assignCar == null)
{
- break;//娌℃湁绌洪棽灏忚溅
+ continue;//娌℃湁绌洪棽灏忚溅
}
- var data = new List<CarModel>();
+
if (assignCar.Level != 0)
{
//鍒ゆ柇灏忚溅浣嶇疆鏄惁涓庝换鍔$殑璧峰鍌ㄤ綅鐩稿悓,涓嶇浉鍚岋細鑾峰彇灏忚溅鍒板彇璐у偍浣嶈矾寰�
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 datas1 = FourWayCarUtil.GetCarPathUp(data1, 0);
+ if (datas1 == null)
+ {
+ continue;
+ }
+ else
+ {
+ var bl = FourWayCarUtil.AddCarTask(datas1, kXCarList, assignCar, waitTask,0);
+ //鍒嗛厤閿欒锛屽垹闄ゅ垎閰嶄俊鎭�
+ if (!bl)
+ {
+ var carTask = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == waitTask.TaskNo).ToList();
+ _db.Deleteable(carTask).ExecuteCommand();
+ }
+ }
}
//鑾峰彇灏忚溅鍘绘斁璐у偍浣嶄换鍔¤矾寰�
- var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, 2, "1");
+ var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, "1");
+ var datas2 = FourWayCarUtil.GetCarPathUp(data2, 1);
- data.AddRange(data2);
- if (data == null) { break; }
-
- var preId1 = "";//鍓嶇疆浠诲姟Id
- var executionPath1 = "";//浜や簰璺緞
- var executionPath2 = "";//浜や簰璺緞
- var path = "";//鎵�鏈夎矾寰�
- var isOk = "1"; //鏄惁瀹屾暣璺緞 1瀹屾暣 2 涓ゆ潯璺緞
- for (int i = 0; i < data.Count; i++)
- {
- //璺緞鑺傜偣
- var pathXYZ = data[i].X.ToString().PadLeft(2, '0') + data[i].Y.ToString().PadLeft(2, '0') + data[i].Z.ToString().PadLeft(2, '0')+ data[i].NodeCom.ToString();
- path += pathXYZ + ";";
-
- //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟
- var taskList = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.Path.Contains(pathXYZ)).Select(m => m.Id).Distinct().ToList();
-
- foreach (var item in taskList)
- {
- //鍒ゆ柇濡傛灉鏄畬鏁磋矾寰� 璁板綍浜や簰璺緞
- if (isOk == "1")
- {
- 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))
- {
- executionPath1 += pathXYZQian + ";";
- }
- executionPath2 += pathXYZQian + ";";
- }
- //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id
- if (!preId1.Contains(item + ""))
- {
- preId1 += item + ";";
- }
-
- isOk = "2";
- }
-
- if (data[i].IsSendPlc)
- {
- if (isOk == "1")
- {
- executionPath1 += pathXYZ + ";";
- }
- else
- {
- executionPath2 += pathXYZ + ";";
- }
-
- }
-
+ if (datas2 == null)
+ {
+ continue;
}
-
- #endregion
-
- #region 鍒ゆ柇鏄惁鏈夌┖闂插皬杞﹂樆鎸¤矾寰� 3
- var preId3 = "";//鍓嶇疆浠诲姟Id
- foreach (var item in kXCarList)
+ else
{
- if (item == assignCar)
+ var bl = FourWayCarUtil.AddCarTask(datas2,kXCarList,assignCar,waitTask,1);
+ //鍒嗛厤閿欒锛屽垹闄ゅ垎閰嶄俊鎭�
+ if (!bl)
{
- continue;//鎺掗櫎褰撳墠鍒嗛厤浠诲姟鐨勫皬杞�
- }
- //灏忚溅浣嶇疆
- var carXYZ = item.X.ToString().PadLeft(2, '0') + item.Y.ToString().PadLeft(2, '0') + item.Z.ToString().PadLeft(2, '0') ;
- //鍒嗛厤鐨勪换鍔¤矾寰勪腑 褰撳墠灏忚溅鏄惁闃绘尅
- if (path.Contains(carXYZ))
- {
- //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟锛屼笉浼氭湁澶浠诲姟锛屽悓灞傛湁鍑犱釜灏忚溅鏈�澶氭湁鍑犱釜浠诲姟
- var taskList3 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)).ToList();
-
- var str3 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜�
-
- foreach (var item2 in taskList3)
- {
- str3 += item2.Path;
- }
- var endLocate3 = "";
- var executionPath3 = "";
- var path3 = "";
- var data3 = new List<CarModel>();
- //鏌ユ壘鐩爣浣嶇疆
- while (endLocate3 == "" || data3.Count == 0 || data3 == null)
- {
- endLocate3 = FourWayCarUtil.GetCarEndLocation(carXYZ, str3);
- data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, 0, "0");
- }
- foreach (var itemPath in data3)
- {
- var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString();
-
- path3 += pathXYZ + ";";
- if (itemPath.IsSendPlc)
- {
- executionPath3 += pathXYZ + ";";
- }
- }
- WcsTask modTask = new WcsTask()
- {
- TaskNo = _taskService.GetTaskCode(),
- TaskType = TaskTypeEnum.Move,
- Type = PLCTypeEnum.ShuttleCar,
- StartLocate = carXYZ,
- EndLocate = endLocate3,
- PalletNo = "",
- Status = TaskStatusEnum.Wait,
- Levels = 2,
- Origin = "WCS"
- };
- _db.Insertable(modTask).ExecuteCommand();
- HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
- //绉诲姩灏忚溅
- var carTaskYC = new WcsCarTasks()
- {
- TaskNo = modTask.TaskNo,
- PreId = "",
- ExecutionPath = executionPath3,
- Path = path3,
- CarNo = item.CarPlcIp,
- Status = TaskStatusEnum.Wait
- };
- var idLong = _db.Insertable(carTaskYC).ExecuteReturnBigIdentity();
- preId3 += idLong + ";";
+ waitTask.Status = TaskStatusEnum.Wait;
+ _db.Updateable(waitTask).ExecuteCommand();
+ var carTask = _db.Queryable<WcsCarTasks>().Where(m=>m.IsDelete == false && m.TaskNo == waitTask.TaskNo).ToList();
+ _db.Deleteable(carTask).ExecuteCommand();
}
}
- #endregion
-
- #region 鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� 4
-
- //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟锛屼笉浼氭湁澶浠诲姟锛屽悓灞傛湁鍑犱釜灏忚溅鏈�澶氭湁鍑犱釜浠诲姟
- var taskList4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)).ToList();
- var preId4 = "";//鍓嶇疆浠诲姟Id
- var str4 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜�
-
- foreach (var item in taskList4)
- {
- str4 += item.Path;
- }
- //鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔�
- foreach (var item in taskList4)
- {
- var lastPathList = item.ExecutionPath.Split(';');
- // a;b;c; 鏈�鍚庝竴涓綅鏄�溾�濓紝鎵�浠astPathList.Length - 2
- var lastPath = lastPathList[lastPathList.Length - 2];
-
- //濡傛灉姝ゆ鍒嗛厤璺緞鍖呭惈閱夎垶涓渶缁堣妭鐐硅矾寰勶紝娣诲姞绉昏蛋灏忚溅
- if (path.Contains(lastPath))
- {
- var endLocate = "";
- var executionPath4 = "";
- var path4 = "";
- var data4 = new List<CarModel>();
- //鏌ユ壘鐩爣浣嶇疆
- while (endLocate == "" || data4.Count == 0 || data4 == null)
- {
- endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4);
- data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate, 0, "0");
- }
- foreach (var itemPath in data4)
- {
- var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString();
-
- path4 += pathXYZ + ";";
- if (itemPath.IsSendPlc)
- {
- executionPath4 += pathXYZ + ";";
- }
- }
- WcsTask modTask = new WcsTask()
- {
- TaskNo = _taskService.GetTaskCode(),
- TaskType = TaskTypeEnum.Move,
- Type = PLCTypeEnum.ShuttleCar,
- StartLocate = lastPath,
- EndLocate = endLocate,
- PalletNo = "",
- Status = TaskStatusEnum.Wait,
- Levels = 2,
- Origin = "WCS"
- };
- _db.Insertable(modTask).ExecuteCommand();
- HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
- //绉诲姩灏忚溅
- var carTaskYC = new WcsCarTasks()
- {
- TaskNo = modTask.TaskNo,
- PreId = "",
- ExecutionPath = executionPath4,
- Path = path4,
- CarNo = item.CarNo,
- Status = TaskStatusEnum.Wait
- };
- var idLong = _db.Insertable(carTaskYC).ExecuteReturnBigIdentity();
- preId4 += idLong + ";";
- }
- }
-
- #endregion
-
- #region 鎻掑叆浠诲姟鏁版嵁 鏀瑰彉浠诲姟鐘舵��
-
- // 鎻掑叆鍥涘悜杞︿换鍔¤〃
- var carTask1 = new WcsCarTasks()
- {
- TaskNo = waitTask.TaskNo,
- PreId = preId1+ preId3+preId4,
- ExecutionPath = executionPath1,
- Path = path,
- CarNo = assignCar.CarPlcIp,
- Status = TaskStatusEnum.Wait
- };
- _db.Insertable(carTask1).ExecuteCommand();
- if (!string.IsNullOrWhiteSpace(executionPath1) && isOk == "2")
- {
- // 鎻掑叆鍥涘悜杞︿换鍔¤〃
- var carTask2 = new WcsCarTasks()
- {
- TaskNo = waitTask.TaskNo,
- PreId = preId1,
- ExecutionPath = executionPath2,
- Path = path,
- CarNo = assignCar.CarPlcIp,
- Status = TaskStatusEnum.Wait
- };
- _db.Insertable(carTask2).ExecuteCommand();
- }
- // 鏀瑰彉鎬讳换鍔¤〃鐘舵��
- waitTask.Status = TaskStatusEnum.Doing;
- waitTask.UpdateTime = DateTime.Now;
- _db.Updateable(waitTask).ExecuteCommand();
- HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>());
-
- #endregion
+
Thread.Sleep(3000);
}
--
Gitblit v1.8.0