From 33ef96c0b10aea2a5c9cee18dbc39cdf169ccf92 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期一, 13 十月 2025 15:32:41 +0800
Subject: [PATCH] 优化四向车任务反馈流程
---
Admin.NET/WCS.Application/PLC/PLCService.cs | 798 +++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 578 insertions(+), 220 deletions(-)
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index a25f1e5..f48c058 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -1,11 +1,16 @@
锘縰sing Admin.NET.Core.Service;
+using AngleSharp.Io;
using COSXML.Network;
using DocumentFormat.OpenXml.Bibliography;
using DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Spreadsheet;
+using DocumentFormat.OpenXml.Wordprocessing;
+using Elastic.Clients.Elasticsearch.Snapshot;
using Furion.Logging;
using IoTClient;
using NewLife.Reflection;
+using Newtonsoft.Json;
+using Org.BouncyCastle.Ocsp;
using SixLabors.ImageSharp.ColorSpaces;
using WCS.Application.Entity;
using WCS.Application.Util;
@@ -25,6 +30,7 @@
try
{
var mod = sender as WcsDeviceDto;
+
//Console.WriteLine($"{mod.Text}鍊间负" + mod.Value);
switch (mod.Type)
{
@@ -35,6 +41,10 @@
AGV(mod); // AGV璋冨害
break;
case PLCTypeEnum.ShuttleCar: //绌挎杞�
+ //if (mod.PlcIdIP == "10.26.254.28")
+ //{
+ // break;
+ //}
ShuttleCar(mod);
break;
case PLCTypeEnum.RobotPalletizer:
@@ -70,7 +80,7 @@
TaskNo = _taskService.GetTaskCode(),
TaskType = TaskTypeEnum.Move,
Type = PLCTypeEnum.AGV,
- StartLocate = AGVStorageUtil.GetPalletOutStorage(),
+ StartLocate = "",
EndLocate = AGVStaionEnum.D1.ToString(),
PalletNo = "",
Status = TaskStatusEnum.Wait,
@@ -170,68 +180,215 @@
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)
+ if (carTask != null)
{
//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)
- {
- break;//娌℃湁鏌ヨ鍒版�讳换鍔�
- }
- 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鐨勪换鍔� 涓嬪彂
- carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing).OrderBy(m => m.CreateTime).First();
- //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭�
- if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
- {
- modFinshTask.Status = TaskStatusEnum.Complete;
- modFinshTask.FinishDate = DateTime.Now;
- _db.Updateable(modFinshTask).ExecuteCommand();
-
- //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠�
- if (modFinshTask.Levels == 888)
+ var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
+ if (modFinshTask == null)
{
- //鍐欏叆寮�濮嬪厖鐢�
- var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
- plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
- }
+ break;//娌℃湁鏌ヨ鍒版�讳换鍔�
+ }
+ if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
+ {
+ //鏌ユ壘璇ヤ换鍔$殑涓婁竴鏉″瓙浠诲姟瀹屾垚鏃堕棿鍜屽綋鍓嶆椂闂撮棿闅旓紝濡傛灉闂撮殧鏃堕棿澶煭璇存槑鏈夐棶棰橈紝绛�3绉掑悗鍐嶆墽琛�
+ var carTaskAfter = _db.Queryable<WcsCarTasks>().First(m => m.IsDelete == false && m.Status == TaskStatusEnum.Complete && m.CarTaskNo != valueTaskStr
+ && m.CarNo == modDevice.PlcIdIP && m.TaskNo == carTask.TaskNo);
+ if (carTaskAfter != null && carTaskAfter.UpdateTime != null)
+ {
+ TimeSpan difference = DateTime.Now - Convert.ToDateTime(carTaskAfter.UpdateTime);
+ double seconds = difference.TotalSeconds;
+ if (seconds < 3)
+ {
+ Log.Error($"鍥涘悜杞︾浜屾潯瀛愪换鍔″弽棣堝畬鎴愭椂闂村紓甯�:{carTaskNext.TaskNo}");
+ Thread.Sleep(3000);
+ break;
+ }
+ }
- //鍙嶉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>());
+ carTask.Status = TaskStatusEnum.Complete;
+ carTask.UpdateTime = DateTime.Now;
+ _db.Updateable(carTask).ExecuteCommand();
+ //娣诲姞浠诲姟鏄庣粏
+ var taskMonitor = new WcsTaskMonitor()
+ {
+ TaskNo = carTask.TaskNo,
+ PlcName = modDevice.Text,
+ Status = TaskStatusEnum.Complete,
+ InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
+ };
+ _db.Insertable(taskMonitor).ExecuteCommand();
+ //涓嬪彂浠诲姟鏃ュ織
+ HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
+ }
+ //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂
+ carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing).OrderBy(m => m.CreateTime).First();
+ //carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing && m.CarTaskNo != valueTaskStr).OrderBy(m => m.CreateTime).First();
+ if (carTaskNext != null)
+ {
+ if (carTaskNext.CarTaskNo != null && carTaskNext.CarTaskNo < valueTaskStr)
+ {
+ carTaskNext.Status = TaskStatusEnum.Complete;
+ carTaskNext.UpdateTime = DateTime.Now;
+ _db.Updateable(carTaskNext).ExecuteCommand();
+
+ carTaskNext = null;
+ Log.Error($"鍥涘悜杞︾涓�鏉″瓙浠诲姟娌¤嚜鍔ㄥ畬鎴�:{carTaskNext.TaskNo}");
+ }
+ }
+ //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭�
+ if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
+ {
+ if (modFinshTask.TaskType == TaskTypeEnum.Out)
+ {
+ //#region 浠诲姟鍙樻洿鎴愯緭閫佺嚎浠诲姟
+ //modFinshTask.Status = TaskStatusEnum.Wait;
+ //modFinshTask.Type = PLCTypeEnum.ConveyorLine;
+ //_db.Updateable(modFinshTask).ExecuteCommand();
+
+ //#endregion
+
+ #region 杈撻�佺嚎 鍐欏叆PLC 740
+
+ var text = "";
+ var devStation = ""; //宸ヤ綅
+ var endLocate = modFinshTask.EndRoadway;
+ var carcon = new carConverModel();
+ var ip = "";
+ if ( carcon.conveyorBei.Keys.Contains(endLocate))
+ {
+ text = "杈撻�佺嚎鍖�";
+ ip = "10.26.254.10";
+ devStation = carcon.conveyorBei[endLocate];
+ }
+ else if (carcon.conveyorNan.Keys.Contains(endLocate))
+ {
+ text = "杈撻�佺嚎鍗�";
+ ip = "10.26.254.11";
+ devStation = carcon.conveyorNan[endLocate];
+ }
+ if (text != "")
+ {
+
+ var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip);
+ //PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
+ //var modConn = new PLCUtil(modPlc);
+
+ var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation);
+ var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos);
+ if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730)
+ {
+ //modConn.Close();
+ return;//鏀捐揣宸ヤ綅娌℃湁璇诲彇鎴愬姛鎴栦笉鏄┖闂�
+ }
+
+ var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "740");
+ if (!plcResult.IsSucceed)
+ {
+ //modConn.Close();
+ return;
+ }
+ //娣诲姞浠诲姟鏄庣粏
+ var taskMonitor = new WcsTaskMonitor()
+ {
+ TaskNo = modFinshTask.TaskNo,
+ PlcName = modDevice.Text,
+ Status = TaskStatusEnum.Complete,
+ InteractiveMsg = $"鍐欏叆鎸囦护740锛氭墭鐩樺埌杈緖modFinshTask.EndRoadway}"
+ };
+ _db.Insertable(taskMonitor).ExecuteCommand();
+
+ //鏀瑰彉浠诲姟鐘舵��
+ modFinshTask.Status = TaskStatusEnum.Complete;
+ modFinshTask.FinishDate = DateTime.Now;
+ _db.Updateable(modFinshTask).ExecuteCommand();
+
+ var locateOut = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate);
+ if (locateOut != null && locateOut.Make == "1")
+ {
+ locateOut.PalletNo = "";
+ _db.Updateable(locateOut).ExecuteCommand();
+ }
+
+ //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
+ if (modFinshTask.Origin == "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>());
+ }
+
+ }
+
+
+ #endregion
+ }
+ else
+ {
+ modFinshTask.Status = TaskStatusEnum.Complete;
+ modFinshTask.FinishDate = DateTime.Now;
+ _db.Updateable(modFinshTask).ExecuteCommand();
+
+ if (modFinshTask.TaskType == TaskTypeEnum.Move)
+ {
+ var locatemove = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate);
+ if (locatemove != null && locatemove.Make == "1")
+ {
+ locatemove.PalletNo = "";
+ _db.Updateable(locatemove).ExecuteCommand();
+ }
+ }
+
+ var locateIn = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.EndLocate);
+ if (locateIn != null && locateIn.Make == "1")
+ {
+ locateIn.PalletNo = string.IsNullOrWhiteSpace(modFinshTask.PalletNo) ? "pall" : modFinshTask.PalletNo;
+ _db.Updateable(locateIn).ExecuteCommand();
+ }
+
+ //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
+ if (modFinshTask.Origin == "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>());
+ }
+
+
+
+ }
+
+ //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠�
+ if (modFinshTask.Levels == 888)
+ {
+ //鍐欏叆寮�濮嬪厖鐢�
+ var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+ plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
+ }
+
+
+ }
}
-
}
WcsTask modTask;
@@ -260,44 +417,53 @@
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)
+ if (modTask == null)
{
//璇诲彇灏忚溅鐢甸噺
var modPosCarDl = modDevice.listStation.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺");
var (resultDl, valueDl) = plcConn.GetDBValue(modPosCarDl.PosType, modPosCarDl.PlcPos);
- if (resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl)
+ if (resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl)
{
var endLocateCar = "";
if (valuez == 1)
{
- endLocateCar = "210401";
+ endLocateCar = "011201";
}
else if (valuez == 2)
{
- endLocateCar = "210402"; //011202
+ endLocateCar = "011202"; //
}
else
{
return; // 灞傛暟閿欒
}
- //娣诲姞灏忚溅鍏呯數浣嶇疆
- WcsTask modCarTask = new WcsTask()
+ var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing);
+ if (getCdTask == null)
{
- 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>());
+ var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
+ if (resultDlLock.IsSucceed && valueDlLock!=3 && carXYZ != endLocateCar)
+ {
+ //娣诲姞灏忚溅鍏呯數浣嶇疆
+ 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)
+ else if(resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl2)
{
//鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔� 鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
var carTime = _db.Queryable<WcsCarTime>().First(m => m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
@@ -338,22 +504,32 @@
{
return; // 灞傛暟閿欒
}
- //娣诲姞灏忚溅鍏呯數浣嶇疆
- WcsTask modCarTask = new WcsTask()
+ var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing);
+ if (getCdTask == null)
{
- 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>());
+ var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
+ if (resultDlLock.IsSucceed && valueDlLock != 3 && carXYZ != endLocateCar)
+ {
+ //娣诲姞灏忚溅鍏呯數浣嶇疆
+ 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>());
+ }
+
+ }
+
}
}
@@ -364,7 +540,10 @@
return;
}
-
+ if (carTaskNext == null)
+ {
+ return;
+ }
if (carTaskNext.Status == TaskStatusEnum.Doing)
{
Thread.Sleep(3000);
@@ -386,10 +565,27 @@
return;//鍓嶇疆浠诲姟鏈畬鎴�
}
}
+
+ //灏忚溅鐘舵��
+ var (resultCar, valueCar) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
- //鍏堝浣�
- var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
- plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
+ var modPosTaskStatus2 = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��");
+ var (resultTaskStatus2, valueTaskStatus2) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos);
+ if (resultCar.IsSucceed && valueCar == 1 && resultTaskStatus2.IsSucceed && (valueTaskStatus2 == 0 || valueTaskStatus2 == 1))
+ {
+ var carnew = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Doing).OrderBy(m => m.CreateTime).First();
+
+ if (carnew == null)
+ {
+ //鍏堝浣�
+ var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
+ plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
+ }
+ }
+ else
+ {
+ return;
+ }
List<Result> listResult = new List<Result>();
//鑾峰彇灏忚溅浠诲姟鍙�
@@ -404,7 +600,7 @@
}
var modWriteTask = modDevice.listStation.FirstOrDefault(s => s.Text == "鍐欏叆浠诲姟鍙�");
- listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
+ listResult.Add(plcConn.SetDBValueRepeat(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
var modNodeX = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣X");
var modNodeY = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣Y");
@@ -438,22 +634,97 @@
var epathz = ePath.Substring(4, 2);
var epathn = ePath.Substring(6, 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));
+ listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), epathx));
+ listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), epathy));
+ listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), epathz));
+ listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), epathn));
}
//杩欓噷鏄妸鍚庨潰鐨勫潗鏍囧叏鍐�0锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級
while (posX <= 43097)
{
- listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), "0"));
- listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), "0"));
- listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), "0"));
- listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "0"));
+ listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), "0"));
+ listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), "0"));
+ listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), "0"));
+ listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), "0"));
}
if (listResult.All(s => s.IsSucceed))
{
+ if (modTask.TaskType == TaskTypeEnum.Out)
+ {
+ #region 杈撻�佺嚎 鍐欏叆PLC 730
+
+ var text = "";
+ var devStation = "";
+ var endLocate = modTask.EndRoadway;
+ var carcon = new carConverModel();
+ var ip = "";
+ if (carcon.conveyorBei.Keys.Contains(endLocate))
+ {
+ text = "杈撻�佺嚎鍖�";
+ ip = "10.26.254.10";
+ devStation = carcon.conveyorBei[endLocate];
+ }
+ else if (carcon.conveyorNan.Keys.Contains(endLocate))
+ {
+ text = "杈撻�佺嚎鍗�";
+ ip = "10.26.254.11";
+ devStation = carcon.conveyorNan[endLocate];
+ }
+ if (text != "")
+ {
+ var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip);
+ //var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
+ //var modConn = new PLCUtil(modPlc);
+
+ var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation);
+ var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos);
+ if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) == 720)
+ {
+ var listResultcon = new List<Result>();
+
+ //浠诲姟鍙蜂笌鎵樼洏鏉$爜
+ var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "浠诲姟鍙�");
+ listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString()));
+ var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "鎵樼洏鏉$爜");
+ listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString()));
+
+ // 璧峰宸ヤ綅銆佺洰鐨勫伐浣�
+ var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "璧峰宸ヤ綅");
+ listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum));
+ var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "鐩殑宸ヤ綅");
+ listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverEndLocat.PosType, modDeviceConver.DbNumber, modPosConverEndLocat.PlcPos, modTask.EndLocate));
+
+ if (listResultcon.All(s => s.IsSucceed))
+ {
+ var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "730");
+ if (!plcResult.IsSucceed)
+ {
+ //modConn.Close();
+ return;
+ }
+ //娣诲姞浠诲姟鏄庣粏
+ var taskMonitor2 = new WcsTaskMonitor()
+ {
+ TaskNo = carTaskNext.TaskNo,
+ PlcName = modDevice.Text,
+ Status = TaskStatusEnum.Complete,
+ InteractiveMsg = $"鍐欏叆鎸囦护730锛氬伐浣嶆槸{modDeviceConver.StationNum}"
+ };
+ _db.Insertable(taskMonitor2).ExecuteCommand();
+ }
+ }
+ else if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730)
+ {
+ return;
+ }
+
+ }
+
+
+ #endregion
+ }
+
var modStart = modDevice.listStation.FirstOrDefault(s => s.Text == "鍚姩鍛戒护");
var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1");
if (result.IsSucceed)
@@ -461,11 +732,22 @@
carTaskNext.Status = TaskStatusEnum.Doing;
carTaskNext.CarTaskNo = carTaskNo;
_db.Updateable(carTaskNext).ExecuteCommand();
+
+
+
//娓呴櫎灏忚溅绌洪棽鏃堕棿
+ var carTimeClear = _db.Queryable<WcsCarTime>().First(m=>m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
+ if (carTimeClear!= null)
+ {
+ carTimeClear.CarTime = null;
+ carTimeClear.UpdateTime = DateTime.Now;
+ _db.Updateable(carTimeClear).ExecuteCommand();
+ }
var taskMonitor = new WcsTaskMonitor()
{
TaskNo = carTaskNext.TaskNo,
PlcName = modDevice.Text,
+ Status = TaskStatusEnum.Complete,
InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTaskNext.TaskNo}"
};
_db.Insertable(taskMonitor).ExecuteCommand();
@@ -540,14 +822,38 @@
var ledText = "";
switch (modDevice.Value.ToString())
{
+ case "120": //绌洪棽锛孉GV鍙斁璐�
+ {
+ var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.IsComple == "1");
+ if (task != null)
+ {
+ //娌℃湁鍑哄簱涓氬姟
+ var res = new HttpService().GenAgvContinueTask(task.TaskNo).Result;
+ if (res.code == "0")
+ {
+ var modTaskMonitor = new WcsTaskMonitor()
+ {
+ TaskNo = task.TaskNo,
+ PlcId = modDevice.modPlc.Id,
+ PlcName = modDevice.modPlc.IP,
+ InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂缁х画鎵ц浠诲姟"
+ };
+ _db.Insertable(modTaskMonitor).ExecuteCommand();
+
+ //涓嬪彂浠诲姟鏃ュ織
+ HubUtil.PublicTask(task.Adapt<WcsTaskOutput>());
+ HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+ }
+ }
+ }
+ break;
case "320":
{
// 鐢宠瀵嗛泦搴撶粍
string strMsg = "";
- string taskModel = "";
// 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
- var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+ var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
if (!res.IsSucceed)
{
@@ -568,7 +874,7 @@
}
// 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
- var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+ var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
if (ret.IsSucceed)
{
plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -589,7 +895,7 @@
}
// 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
- var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+ var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
if (ret.IsSucceed)
{
plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -600,7 +906,7 @@
var http = new HttpService();
string TaskNo = "", EndLocate = "";
- strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, "1", ref EndLocate, ref TaskNo);
+ strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, ref EndLocate, ref TaskNo);
if (!strMsg.Contains("-1"))
{
// 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
@@ -664,7 +970,7 @@
}
// 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
- var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+ var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
if (ret.IsSucceed)
{
plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -675,7 +981,7 @@
case "330":
{
// 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
- var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+ var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
if (!res.IsSucceed)
{
@@ -701,7 +1007,7 @@
}
// 鑾峰彇鍥涢」杞﹀彇璐у伐浣�
- string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum);
+ string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum.PadLeft(3,'0'));
@@ -709,17 +1015,17 @@
var listResult = new List<Result>();
// 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿
var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
- listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString()));
+ listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString()));
var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
var taskTypeStr = (int)modTask.TaskType;
- listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
- var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鐮�");
- listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
+ listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
+ var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鏉$爜");
+ listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
// 璧峰宸ヤ綅銆佺洰鐨勫伐浣�
var modPosStrLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
- listResult.Add(plcConn.SetPlcDBValue(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
+ listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
- listResult.Add(plcConn.SetPlcDBValue(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
+ listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
if (listResult.All(s => s.IsSucceed))
@@ -764,25 +1070,25 @@
{
// 鐢宠鍌ㄤ綅 鏇存柊鍏ュ簱浠诲姟(鍌ㄤ綅鍦板潃) 630
var strMsg = "";
- var taskModel = "";
- //// 鏍规嵁宸ヤ綅鍙疯幏鍙栧贩閬撳彿
- //var roadway = PLCCommon.GetRoadwayByStation(modDevice.StationNum);
- //if (roadway == "")
- //{
- // break;
- //}
+ // 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭�
+ var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+ var (resTask, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
+ if (!resTask.IsSucceed)
+ {
+ break;
+ }
// 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
- var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+ var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
if (!res.IsSucceed)
{
break;
}
- var http = new HttpService();
+
string TaskNo = "";
// 鍚慦MS鐢宠鍌ㄤ綅淇℃伅
- strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, "roadway", ref TaskNo);
+ strMsg = new HttpService().RequestLocate(palletVal, taskVal,ref TaskNo);
if (!strMsg.Contains("-1"))
{
@@ -989,22 +1295,57 @@
{
var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
- var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+ var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
+
+ int taskNoVal = Convert.ToInt32(taskVal);
+ var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskId == taskNoVal && w.TaskType == TaskTypeEnum.Out);
+ if (taskInfo == null)
+ {
+ Log.Error(string.Format("杈撻�佺嚎430:鏈壘鍒板搴旂殑浠诲姟銆�"));
+ break;
+ }
+ //// 鏀瑰彉浠诲姟鐘舵��
+ //taskInfo.Status = TaskStatusEnum.Complete;
+ //taskInfo.FinishDate = DateTime.Now;
+ ////modTask.Levels = 999;
+ //_db.Updateable(taskInfo).ExecuteCommand();
+ //HubUtil.PublicTask(taskInfo.Adapt<WcsTaskOutput>());
// 鎻掑叆浠诲姟鏄庣粏
var modInsertTaskMonitor = new WcsTaskMonitor()
{
- TaskNo = taskVal,
+ TaskNo = taskInfo.TaskNo,
PlcId = modDevice.Id,
PlcName = modDevice.Text,
InteractiveMsg = $"鍐欏叆鎸囦护430锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅",
PalletNo = palletVal,
Status = TaskStatusEnum.Complete,
- StartLocat = starVal,
+ StartLocat = Convert.ToString(starVal),
EndLocat = modDevice.StationNum,
};
+ //if (taskInfo.Origin == "WMS")
+ //{
+ // // 鍙嶉WMS
+ // var requestMode = new TaskRequestWMS()
+ // {
+ // TaskNo = taskInfo.TaskNo,
+ // PalletNo = taskInfo.PalletNo,
+ // TaskType = ((int)taskInfo.TaskType).ToString(),
+ // TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+ // };
+ // HttpService httpService = new HttpService();
+ // var modResponseTask = httpService.RequestTask(requestMode).Result;
+ // if (modResponseTask.StatusCode == 0)
+ // {
+ // modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚";
+ // }
+ // else
+ // {
+ // Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg));
+ // }
+ //}
// 鎻掑叆浜や簰鏃ュ織
_db.Insertable(modInsertTaskMonitor).ExecuteCommand();
@@ -1012,8 +1353,6 @@
// 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
- // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
- var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == modInsertTaskMonitor.TaskNo);
modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.EndLocate).Select(s => s.LedIP).First();
// led鏄剧ず鍐呭
@@ -1039,78 +1378,45 @@
case "440":
{
#region 鎷i�夊畬鎴�,鎵樼洏绂诲紑宸ヤ綅
+
+ var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+ var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
+ var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
+ var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
+ var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
+ var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
+
// 鍐欏叆450
var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "450");
if (ret.IsSucceed)
{
- var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
- var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
- var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
- var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
- var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
- var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
+
- string tasknoVal = taskVal.ToString();
- var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false);
+ int tasknoVal = Convert.ToInt32(taskVal);
+ var modTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.TaskId == tasknoVal);
if (modTask == null)
{
Log.Error(string.Format("杈撻�佺嚎440:鏈壘鍒板搴旂殑浠诲姟銆�"));
break;
}
- // 鏀瑰彉浠诲姟鐘舵��
- modTask.Status = TaskStatusEnum.Complete;
- modTask.FinishDate = DateTime.Now;
- modTask.Levels = 999;
- _db.Updateable(modTask).ExecuteCommand();
- HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+
// 鎻掑叆浠诲姟鏄庣粏
var modInsertTaskMonitor = new WcsTaskMonitor()
{
TaskNo = modTask.TaskNo,
PlcId = modDevice.Id,
PlcName = modDevice.Text,
- InteractiveMsg = $"鍐欏叆鎸囦护450锛歿modDevice.StationNum}鍑哄簱瀹屾垚",
+ InteractiveMsg = $"鍐欏叆鎸囦护450锛歿modDevice.StationNum}鎵樼洏绂诲紑宸ヤ綅",
PalletNo = palletVal,
Status = TaskStatusEnum.Complete,
StartLocat = starVal.ToString(),
EndLocat = modDevice.StationNum,
};
- if (modTask.Origin == "WMS")
- {
- // 鍙嶉WMS
- var requestMode = new TaskRequestWMS()
- {
- TaskNo = modTask.TaskNo + modTask.EndLocate,
- PalletNo = modTask.PalletNo,
- TaskType = ((int)TaskTypeEnum.Out).ToString(),
- TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
- };
- HttpService httpService = new HttpService();
- var modResponseTask = httpService.RequestTask(requestMode).Result;
- if (modResponseTask.StatusCode == 0)
- {
- modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚";
- }
- else
- {
- Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg));
- }
- }
-
// 鎻掑叆浜や簰鏃ュ織
_db.Insertable(modInsertTaskMonitor).ExecuteCommand();
// 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
- // led鏄剧ず鍐呭
- var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
-
- ledText += $"鍑哄簱瀹屾垚\n\n";
- ledText += $"浠诲姟鍙�:{modTask.TaskNo}\n";
- ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n";
- ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
- ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}";
- LedDisplay(ledDevice.LedIP, ledText);
}
#endregion
}
@@ -1128,56 +1434,103 @@
private static void AGV(WcsDeviceDto modDevice)
{
- //杩欓噷鎵惧嚭鏉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)
+ //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇銆佸垱寤烘椂闂翠笅鍙戜竴涓换鍔$粰AGV
+ var modTask = _db.Queryable<WcsTask>().Where(s => s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.AGV).OrderBy(s => new { s.Levels ,s.CreateTime}).First();
+ if (modTask == null)
{
return;
}
- foreach (var modTask in listTask)
+
+ if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV ))
{
- if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV ))
- {
- continue; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔�
- }
-
- //涓嬪彂AGV浠诲姟
- AgvTaskInput input = new AgvTaskInput()
- {
- ReqCode = modTask.Id.ToString(),
- TaskCode = modTask.TaskNo,
- CtnrCode = modTask.PalletNo,
- PositionCodePath = new List<PositionCodePathItem>()
- {
- new PositionCodePathItem(){ PositionCode = modTask.StartLocate },
- new PositionCodePathItem(){ PositionCode = modTask.EndLocate }
- }
- };
- input.TaskTyp = "1" + modTask.StartLocate.Substring(0, 1) + modTask.EndLocate.Substring(0, 1);
- var response = new HttpService().GenAgvSchedulingTask(input).Result;
- if (response.code == "0")
- {
- AGVStatus = true;
- modTask.Status = TaskStatusEnum.Doing;
- _db.Updateable(modTask).ExecuteCommand();
- var modTaskMonitor = new WcsTaskMonitor()
- {
- TaskNo = modTask.TaskNo,
- PlcId = modDevice.modPlc.Id,
- PlcName = modDevice.modPlc.IP,
- InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟"
- };
- _db.Insertable(modTaskMonitor).ExecuteCommand();
+ return; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔�
+ }
- //涓嬪彂浠诲姟鏃ュ織
- HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
- HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
- }
- Console.WriteLine(response.ToJson());
+ //涓嬪彂AGV浠诲姟
+ var taskTypeModel = AGVStorageUtil.GetTaskModle(modTask.StartLocate, modTask.EndLocate,out string type1,out string type2, out string jiebo);
+ if (string.IsNullOrWhiteSpace(taskTypeModel))
+ {
+ Console.WriteLine("鑾峰彇AGV浠诲姟妯℃澘澶辫触锛氳鏍稿疄浠诲姟璧峰鐩爣鍌ㄤ綅鏄惁姝g‘");
return;
}
+ AgvTaskSend taskModel = new AgvTaskSend();
+ taskModel.robotTaskCode = modTask.TaskNo;
+ taskModel.taskType = taskTypeModel;
+ if (jiebo == "")
+ {
+
+ taskModel.targetRoute = new List<targetRoute>();
+
+ if (taskModel.taskType == "DPJRK")
+ {
+ //var code = "[{\"type\":\"SITE\",\"code\":\"B100101\"},{\"type\":\"PILE_COUNT\",\"code\":\"8\"}]";
+ var code = new List<object>()
+ {
+ new {type = "SITE" , code = modTask.StartLocate},
+ new { type = "PILE_COUNT", code = modTask.Qty }
+ };
+
+ taskModel.targetRoute.Add(new targetRoute() {
+ seq = 0,
+ type = "MIX_CONDITION",
+ code = JsonConvert.SerializeObject(code) // "[{\"type":\"SITE", code = modTask.StartLocate },new { type = "PILE_COUNT", code = modTask.Qty }]"
+
+
+ });
+ taskModel.targetRoute.Add(new targetRoute() { seq = 1, type = type2, code = modTask.EndLocate });
+ }
+ else
+ {
+ taskModel.targetRoute.Add(new targetRoute() { seq = 0, type = type1, code = modTask.StartLocate });
+ taskModel.targetRoute.Add(new targetRoute() { seq = 1, type = type2, code = modTask.EndLocate });
+ }
+
+ }
+ else
+ {
+ taskModel.targetRoute = new List<targetRoute>()
+ {
+ new targetRoute(){seq = 0,type = type1,code = modTask.StartLocate},
+ new targetRoute(){seq = 1,type = "ZONE",code = jiebo},
+ new targetRoute(){seq = 2,type = type2,code = modTask.EndLocate}
+ };
+ }
+
+ taskModel.extra = new extra();
+
+ if (taskModel.taskType != "DPJRK")
+ {
+ taskModel.extra.carrierInfo = new List<carrierInfo>()
+ {
+ new carrierInfo(){ carrierType = "TP",carrierCode = modTask.PalletNo}
+ };
+ }
+
+
+
+ var response = new HttpService().GenAgvSendTask(taskModel).Result;
+ if (response.code == "SUCCESS")
+ {
+ modTask.Status = TaskStatusEnum.Doing;
+ _db.Updateable(modTask).ExecuteCommand();
+ var modTaskMonitor = new WcsTaskMonitor()
+ {
+ TaskNo = modTask.TaskNo,
+ PlcId = modDevice.modPlc.Id,
+ PlcName = modDevice.modPlc.IP,
+ InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟"
+ };
+ _db.Insertable(modTaskMonitor).ExecuteCommand();
+
+ //涓嬪彂浠诲姟鏃ュ織
+ HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+ HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+ }
+ //Console.WriteLine(response.ToJson());
Thread.Sleep(3000);
+ return;
+
}
/// <summary>
@@ -1222,6 +1575,11 @@
private static void Test(WcsDeviceDto modDevice)
{
+
+ var ledText = $"鐢宠鍏ュ簱澶辫触\n\n";
+ ledText += $"鎵樼洏鍙�:T2300001\n";
+ ledText += $"鍏ュ簱浠诲姟宸查攣瀹氾紝璇疯В閿佸悗閲嶈瘯!\n";
+ LedDisplay("10.26.254.31", ledText);
//鍗峰笜闂�2鐢宠鎵撳紑
//var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1152", "10");
//鍗峰笜闂�2鐢宠鍏抽棴
@@ -1233,7 +1591,7 @@
//var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1154", "30");
//C鍙GV鏀炬墭鐩樺畬鎴愮敵璇峰叆搴�
- var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100");
+ //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100");
////鍐欐娴嬭瘯璇籹tring
//var (res, val) = modDevice.PLCUtil.GetPlcDBValue(PLCDataTypeEnum.String, "DB100", "64");
--
Gitblit v1.8.0