From 3e9a6a06132b06b8c2568f900df936ccc654bd58 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期二, 29 四月 2025 14:09:20 +0800
Subject: [PATCH] 修改问题,添加四向车车充电流程
---
Admin.NET/WCS.Application/PLC/PLCService.cs | 148 ++++++++++++++++++++++++++---
Admin.NET/WCS.Application/Entity/WcsTask.cs | 2
Admin.NET/WCS.Application/Entity/WCSCarTime.cs | 28 +++++
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | 25 ++++
Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs | 87 +++++++++++++++++
5 files changed, 270 insertions(+), 20 deletions(-)
diff --git a/Admin.NET/WCS.Application/Entity/WCSCarTime.cs b/Admin.NET/WCS.Application/Entity/WCSCarTime.cs
new file mode 100644
index 0000000..2b72486
--- /dev/null
+++ b/Admin.NET/WCS.Application/Entity/WCSCarTime.cs
@@ -0,0 +1,28 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateMarketingMemberCardActivityRequest.Types.AwardSendPeriod.Types.AwardSendDayTime.Types;
+
+namespace WCS.Application.Entity;
+/// <summary>
+/// 鍥涘悜杞︾┖闂叉椂闂磋〃
+/// </summary>
+[SugarTable("WCSCarTime", "鍥涘悜杞︾┖闂叉椂闂磋〃")]
+public class WcsCarTime : EntityBaseData
+{
+
+ /// <summary>
+ /// 灏忚溅IP
+ /// </summary>
+ [SugarColumn(ColumnName = "CarIp", ColumnDescription = "灏忚溅IP")]
+ public string? CarIp { get; set; }
+
+ /// <summary>
+ /// 灏忚溅绌洪棽鏃堕棿
+ /// </summary>
+ [SugarColumn(ColumnName = "CarTime", ColumnDescription = "灏忚溅绌洪棽鏃堕棿")]
+ public DateTime? CarTime { get; set; }
+
+}
diff --git a/Admin.NET/WCS.Application/Entity/WcsTask.cs b/Admin.NET/WCS.Application/Entity/WcsTask.cs
index b0d06aa..3482a07 100644
--- a/Admin.NET/WCS.Application/Entity/WcsTask.cs
+++ b/Admin.NET/WCS.Application/Entity/WcsTask.cs
@@ -165,7 +165,7 @@
public string? WcsPosValue { get; set; }
/// <summary>
- /// 浼樺厛绾�
+ /// 浼樺厛绾� 鍥涘悜杞� 灏忚溅鍏呯數888 鍏朵粬浠诲姟999
/// </summary>
[SugarColumn(ColumnName = "Levels", ColumnDescription = "浼樺厛绾�")]
public int? Levels { get; set; }
diff --git a/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs b/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs
new file mode 100644
index 0000000..5a0b3ce
--- /dev/null
+++ b/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs
@@ -0,0 +1,87 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.Application;
+
+/// <summary>
+/// 鍥涘悜杞﹀嚭鍏ュ簱鍙d綅缃灇涓�
+/// </summary>
+[Description("鍥涘悜杞﹀嚭鍏ュ簱鍙d綅缃灇涓�")]
+public enum FourWayCarEnum
+{
+ /// <summary>
+ /// 瀵嗛泦搴�1灞傚崡宸�
+ /// </summary>
+ [Description("瀵嗛泦搴�1灞傚崡宸�")]
+ A1 = 13,
+ /// <summary>
+ /// 瀵嗛泦搴�1灞傚崡鍙�
+ /// </summary>
+ [Description("瀵嗛泦搴�1灞傚崡鍙�")]
+ A2 = 13,
+ /// <summary>
+ /// 瀵嗛泦搴�2灞傚崡宸�
+ /// </summary>
+ [Description("瀵嗛泦搴�2灞傚崡宸�")]
+ A3 = 14,
+ /// <summary>
+ /// 瀵嗛泦搴�2灞傚崡鍙�
+ /// </summary>
+ [Description("瀵嗛泦搴�2灞傚崡鍙�")]
+ A4 = 15,
+
+ /// <summary>
+ /// 瀵嗛泦搴�1灞傚寳宸�
+ /// </summary>
+ [Description("瀵嗛泦搴�1灞傚寳宸�")]
+ B1,
+ /// <summary>
+ /// 瀵嗛泦搴�1灞傚寳涓�
+ /// </summary>
+ [Description("瀵嗛泦搴�1灞傚寳涓�")]
+ B2,
+ /// <summary>
+ /// 瀵嗛泦搴�1灞傚寳鍙�
+ /// </summary>
+ [Description("瀵嗛泦搴�1灞傚寳鍙�")]
+ B3,
+ /// <summary>
+ /// 瀵嗛泦搴�2灞傚寳宸�
+ /// </summary>
+ [Description("瀵嗛泦搴�2灞傚寳宸�")]
+ B4,
+ /// <summary>
+ /// 瀵嗛泦搴�2灞傚寳涓�
+ /// </summary>
+ [Description("瀵嗛泦搴�2灞傚寳涓�")]
+ B5,
+ /// <summary>
+ /// 瀵嗛泦搴�2灞傚寳鍙�
+ /// </summary>
+ [Description("瀵嗛泦搴�2灞傚寳鍙�")]
+ B6,
+}
+
+
+/// <summary>
+/// 鍥涘悜杞︾數閲忓�兼灇涓�
+/// </summary>
+[Description("鍥涘悜杞︾數閲忓�兼灇涓�")]
+public enum FourWayCarDLEnum
+{
+ /// <summary>
+ /// 鏋侀檺鐢甸噺 浣庝簬姝ょ數閲忎笉鎵ц浠诲姟
+ /// </summary>
+ [Description("鏋侀檺鐢甸噺")]
+ Dl = 30,
+ /// <summary>
+ /// 鍋ュ悍鐢甸噺 浣庝簬姝ょ數閲� 涓旀棤浠诲姟鏃跺幓鍏呯數
+ /// </summary>
+ [Description("鍋ュ悍鐢甸噺")]
+ Dl2 = 80,
+
+
+}
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index 371e13a..a25f1e5 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -6,6 +6,7 @@
using Furion.Logging;
using IoTClient;
using NewLife.Reflection;
+using SixLabors.ImageSharp.ColorSpaces;
using WCS.Application.Entity;
using WCS.Application.Util;
@@ -171,8 +172,8 @@
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 modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
- plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟 澶嶄綅
+ //var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
+ //plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟 澶嶄綅
return;
}
@@ -207,6 +208,14 @@
modFinshTask.FinishDate = DateTime.Now;
_db.Updateable(modFinshTask).ExecuteCommand();
+ //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠�
+ if (modFinshTask.Levels == 888)
+ {
+ //鍐欏叆寮�濮嬪厖鐢�
+ var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+ plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
+ }
+
//鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
//HttpService httpService = new HttpService();
//var requestMode = new TaskRequestWMS()
@@ -225,14 +234,6 @@
}
- 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)");
- var (resulty, valuey) = plcConn.GetDBValue(modStationY.PosType, modStationY.PlcPos);
- var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
- var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
-
-
WcsTask modTask;
//瑕佷笅鍙戣矾寰�2浠诲姟
if (carTaskNext != null)
@@ -245,17 +246,122 @@
{
// 鑾峰彇浠诲姟淇℃伅
modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.CarIp == modDevice.PlcIdIP).OrderBy(m => m.Levels).OrderBy(m => m.CreateTime).First();
- if (modTask == null)
+ if (modTask != null)
{
- return;
+ carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
}
- carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
}
- //return;
+ //璇诲彇灏忚溅浣嶇疆
+ 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)");
+ var (resulty, valuey) = plcConn.GetDBValue(modStationY.PosType, modStationY.PlcPos);
+ var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
+ var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
+ var carXYZ = valuex.ToString().PadLeft(2, '0') + valuey.ToString().PadLeft(2, '0') + valuez.ToString().PadLeft(2, '0');
if (modTask == null || carTaskNext == null)
{
- //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔� 鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
+ //璇诲彇灏忚溅鐢甸噺
+ var modPosCarDl = modDevice.listStation.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺");
+ var (resultDl, valueDl) = plcConn.GetDBValue(modPosCarDl.PosType, modPosCarDl.PlcPos);
+ if (resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl)
+ {
+ var endLocateCar = "";
+ if (valuez == 1)
+ {
+ endLocateCar = "210401";
+ }
+ else if (valuez == 2)
+ {
+ endLocateCar = "210402"; //011202
+ }
+ else
+ {
+ return; // 灞傛暟閿欒
+ }
+ //娣诲姞灏忚溅鍏呯數浣嶇疆
+ WcsTask modCarTask = new WcsTask()
+ {
+ TaskNo = _taskService.GetTaskCode(),
+ TaskType = TaskTypeEnum.Move,
+ Type = PLCTypeEnum.ShuttleCar,
+ StartLocate = carXYZ,
+ EndLocate = endLocateCar,
+ PalletNo = "",
+ Status = TaskStatusEnum.Wait,
+ Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
+ Origin = "WCS",
+ CarIp = modDevice.PlcIdIP
+ };
+ _db.Insertable(modCarTask).ExecuteCommand();
+ HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+ }
+ else if(resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl2)
+ {
+ //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔� 鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
+ var carTime = _db.Queryable<WcsCarTime>().First(m => m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
+ if (carTime == null)
+ {
+ var carTimeAdd = new WcsCarTime()
+ {
+ CarIp = modDevice.PlcIdIP,
+ CarTime = DateTime.Now
+ };
+ _db.Insertable(carTimeAdd).ExecuteCommand();
+ }
+ else
+ {
+ if (carTime.CarTime == null)
+ {
+ carTime.CarTime = DateTime.Now;
+ carTime.UpdateTime = DateTime.Now;
+ _db.Updateable(carTime).ExecuteCommand();
+ }
+ else
+ {
+ var date1 = DateTime.Now;
+ var data2 = (DateTime)carTime.CarTime;
+ TimeSpan interval = date1 - data2;
+ if (interval.TotalMinutes >= 5)
+ {
+ var endLocateCar = "";
+ if (valuez == 1)
+ {
+ endLocateCar = "011201";
+ }
+ else if (valuez == 2)
+ {
+ endLocateCar = "011202";
+ }
+ else
+ {
+ return; // 灞傛暟閿欒
+ }
+ //娣诲姞灏忚溅鍏呯數浣嶇疆
+ WcsTask modCarTask = new WcsTask()
+ {
+ TaskNo = _taskService.GetTaskCode(),
+ TaskType = TaskTypeEnum.Move,
+ Type = PLCTypeEnum.ShuttleCar,
+ StartLocate = carXYZ,
+ EndLocate = endLocateCar,
+ PalletNo = "",
+ Status = TaskStatusEnum.Wait,
+ Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
+ Origin = "WCS",
+ CarIp = modDevice.PlcIdIP
+ };
+ _db.Insertable(modCarTask).ExecuteCommand();
+ HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+ }
+ }
+
+
+ }
+ }
+
+
return;
}
@@ -264,6 +370,7 @@
Thread.Sleep(3000);
return;
}
+
//鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鍓嶇疆浠诲姟鏈畬鎴�
var preStrs = carTaskNext.PreId.Split(';');
foreach (var preStr in preStrs)
@@ -279,6 +386,7 @@
return;//鍓嶇疆浠诲姟鏈畬鎴�
}
}
+
//鍏堝浣�
var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
@@ -286,7 +394,15 @@
List<Result> listResult = new List<Result>();
//鑾峰彇灏忚溅浠诲姟鍙�
var carTaskNo = FourWayCarUtil.GetTaskNo();
-
+
+ //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟
+ if (modTask.Levels == 888)
+ {
+ //鍐欏叆鍏呯數鍛戒护
+ var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+ listResult.Add(plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "1"));
+ }
+
var modWriteTask = modDevice.listStation.FirstOrDefault(s => s.Text == "鍐欏叆浠诲姟鍙�");
listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
index 18c7c4b..08712ca 100644
--- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -9,6 +9,7 @@
using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using OnceMi.AspNetCore.OSS;
+using Qiniu.Storage;
using System;
using System.Drawing.Drawing2D;
using System.Net.NetworkInformation;
@@ -377,7 +378,7 @@
try
{
// 鑾峰彇瀵嗛泦搴撴湭鎵ц浠诲姟 鏍规嵁鍒涘缓鏃堕棿鎺掑簭
- var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => s.CreateTime).First();
+ var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => new {s.Levels, s.CreateTime}).First();
if (waitTask == null)
{
continue;
@@ -386,7 +387,7 @@
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 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞�
// 鑾峰彇鏈変换鍔$殑灏忚溅缂栧彿
@@ -412,6 +413,19 @@
{
//鑾峰彇宸ヤ綅WCSPLCPosition淇℃伅
var plcPosition = listPlcPosition.Where(s => s.DeviceId == modDevice.Id).ToList();
+ if (value == 3)
+ {
+ var modCarDl = plcPosition.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺");
+ var (resultDl, valueDl) = modbusUtil.GetDBValue(modCarDl.PosType, modCarDl.PlcPos);
+ if (resultDl.IsSucceed && valueDl> FourWayCarDLEnum.Dl)
+ {
+ //鍐欏叆缁撴潫鍏呯數鍛戒护
+ var modCdEnd = plcPosition.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+ modbusUtil.SetDBValue(modCdEnd.PosType, modCdEnd.PlcPos.ToString(), "2") ;
+ carErr = true;
+ break; //鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞
+ }
+ }
//灏忚溅绌洪棽鍔犲叆闆嗗悎
if (value == 1)
{
@@ -490,8 +504,13 @@
}
}
}
+ var typeStr = "1";
+ if (waitTask.Levels == 888 )
+ {
+ typeStr = "0";//灏忚溅浠诲姟鏄厖鐢典换鍔�
+ }
//鑾峰彇灏忚溅鍘绘斁璐у偍浣嶄换鍔¤矾寰�
- var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, "1");
+ var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, typeStr);
var datas2 = FourWayCarUtil.GetCarPathUp(data2, 1);
if (datas2 == null)
--
Gitblit v1.8.0