From 4279cb4384f7f960d87af8b8ad9db73c2dececa3 Mon Sep 17 00:00:00 2001
From: xiaojiao <xiaojiao@kaokeziliao.com>
Date: 星期五, 26 十二月 2025 16:53:29 +0800
Subject: [PATCH] xj添加pda两个新页面
---
项目代码/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs | 242 ++++++++++++++++++------------------------------
1 files changed, 90 insertions(+), 152 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs"
index 9feff89..9e6600c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs"
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection.Metadata;
using System.Text;
using System.Threading;
using WIDESEA_Common;
@@ -24,7 +25,7 @@
/// <summary>
/// 鍑哄簱鐨勫眰
/// </summary>
- private static List<string> OutboundStationLayerNo = new List<string>() { "90100", "90200", "90300", "90400", "90500", "90600", "90700", "90800" };
+ private static List<string> OutboundStationLayerNo = new List<string>() { "60101", "60102", "60103", "60104", "60105", "60106", "60107" };
//鍏ュ簱鎵樼洏鐢宠绔欏彴
private static string ReInboundRequestStationNo = "90101";
//鍑哄簱绔欏彴浜や簰
@@ -43,73 +44,25 @@
try
{
//鍑哄簱瀹屾垚
- OutboundCompleteAction(taskWCSinfoRepository, client);
- //璇诲彇鎻愬崌鏈烘槸鍚︽甯�
- //婊氱瓛绾跨姸鎬�
- string hoisterResult = client.ReadValue(CLineInfoDBName.R_Line_DeviceNormal.ToString(), hoisterResultNo).ToString();
- //鎻愬崌鏈虹姸鎬�
- string result = client.Read("DB506.36.0", "bool").ToString();
- if (!bool.Parse(hoisterResult) || !bool.Parse(result))
- return;
- //鍏ュ簱鐢宠
- InboundRequestAction(taskWCSinfoRepository, taskRGVinfoRepository, client);
+ OutboundCompleteAction(taskWCSinfoRepository, client); //鍘嬭鍑哄簱鍙d换鍔″畬鎴�
- //澧炲姞琛ヤ竵.澧炲姞杞﹀瓨鍌ㄤ腑鏈夐棶棰�.鍐嶅啓
- int logicValue = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Logic.ToString(), "OutboundArea").ToString());
- if (logicValue == 4)
- {
- string rfidResult = client.ReadValue(CLineInfoDBName.W_Line_Barcode.ToString(), "OutboundArea").ToString();
- if (!string.IsNullOrEmpty(rfidResult) && !"0".Equals(rfidResult))
- {
- Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == rfidResult
- && (r.wcstask_state == TaskState.TaskState_Empty_Out_Line_Executing.ToString()
- || r.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString()));
-
- if (null != wcsInfo)
- {
- //鎻愬崌鏈哄眰
- string hoisterLayer = client.ReadValue(CLineInfoDBName.R_Line_Layer.ToString(), hoisterResultNo).ToString();
- string[] locationArray = wcsInfo.wcstask_startLocation.Split('-');
- if (int.Parse(locationArray[0]).ToString() == hoisterLayer)
- {
- Dt_TaskRGVinfo rgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_barCode == wcsInfo.wcstask_barcode);
- if (null == rgvTask)
- {
- flag++;//閬垮厤鍒氬畬鎴愰噸澶嶅啓
- if (flag == 10)
- {
- WriteRGVState(client, false);
- WriteRGVState(client, true);
- flag = 0;
- return;
- }
- }
- }
- }
- }
- }
- else
- flag = 0;
-
- List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString()
- || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())
- && (OutboundStationLayerNo.Contains(r.wcstask_startPoint) || OutboundStationLayerNo.Contains(r.wcstask_endPoint)));
- if (executingTask.Count < 3)
+ //鐢熸垚鍙笅鍙戠殑RGV浠诲姟锛岃嚦缂撳瓨鍙�
+ List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => r.wcstask_state != TaskState.TaskState_Assigned.ToString()
+ && endStationNo.Contains(r.wcstask_endPoint));
+ if (executingTask.Count < 4) //灏忎簬4锛屽垯鍙敓鎴愬幓杩欒竟鐨勪换鍔�
{
//鐩存帴灏嗕换鍔℃坊鍔犲埌AGV浠诲姟
Dt_TaskWCSinfo outboundTask = GetOutboundTask(taskWCSinfoRepository, client);
if (null != outboundTask)
{
+ //鏌ユ壘鏄惁鏈夎鎵樼洏鏉$爜浠诲姟锛屽鏋滄病鏈夊垯杩涜娣诲姞RGV浠诲姟
Dt_TaskRGVinfo rgvInfo = taskRGVinfoRepository.FindFirst(r => r.rgvtask_barCode == outboundTask.wcstask_barcode
&& r.rgvtask_wcsTaskNumber == outboundTask.wcstask_taskNumber);
+
if (null == rgvInfo)
{
string rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString();
- //绌烘墭鐩樺洖搴�
- if (outboundTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Inbound.ToString()))
- rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString();
- //杞存壙鍑哄簱
- else if (outboundTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString())
+ if (outboundTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString())
|| outboundTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
rgvTaskType = RGVTaskType.RgvTaskType_Outbound.ToString();
@@ -123,56 +76,19 @@
}
}
- //鎻愬崌鏈鸿繍琛岀殑浠诲姟
- Dt_TaskWCSinfo hisTask = taskWCSinfoRepository.FindFirst(r => r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()
- && (OutboundStationLayerNo.Contains(r.wcstask_startPoint) || OutboundStationLayerNo.Contains(r.wcstask_endPoint)));
- if (null != hisTask)
- {
- //鎻愬崌鏈哄眰
- string hoisterLayer = client.ReadValue(CLineInfoDBName.R_Line_Layer.ToString(), hoisterResultNo).ToString();
- string[] locationArray = null;
- //绌烘墭鐩樺洖搴�
- if (hisTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Inbound.ToString()))
- {
- locationArray = hisTask.wcstask_endLocation.Split('-');
- //RGV涓婃姤鍙栬揣瀹屾垚鐩存帴鎵ц涓嬩竴涓�
- Dt_TaskRGVinfo rgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_wcsTaskNumber == hisTask.wcstask_taskNumber);
- if (null != rgvTask && "2" == rgvTask.rgvtask_backup_2)
- {
- if (rgvTask.rgvtask_taskType.Contains(RGVTaskType.RgvTaskType_Inbound.ToString()))
- {
- Dt_TaskWCSinfo inboundTask = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint) && r.wcstask_type ==
- TaskType.TaskType_Empty_Pallet_Inbound.ToString() && r.wcstask_state == TaskState.TaskState_RGV_Received.ToString());
- if (null != inboundTask)
- ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask);
- else
- OutboundRequestAction(taskWCSinfoRepository, client);
- return;
- }
- }
- string hoisterTaskNumber = client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), hoisterResultNo).ToString();
- string hoisterBarcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), hoisterResultNo).ToString();
- //閬垮厤鎻愬崌鏈鸿繕娌″彇灏卞仠姝簡
- if (string.IsNullOrEmpty(hoisterTaskNumber) || string.IsNullOrEmpty(hoisterBarcode))
- return;
- }
- //杞存壙鍑哄簱
- else if (hisTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString())
- || hisTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
- locationArray = hisTask.wcstask_startLocation.Split('-');
- //璇存槑鎻愬崌鏈哄埌杈句簡鐩爣灞�
- if (int.Parse(locationArray[0]).ToString() == hoisterLayer)
- WriteRGVState(client, false);// 鍐欏叆RGV寮�濮嬫墽琛�
- }
- else
- {
- Dt_TaskWCSinfo inboundTask = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint) && r.wcstask_type ==
- TaskType.TaskType_Empty_Pallet_Inbound.ToString() && r.wcstask_state == TaskState.TaskState_RGV_Received.ToString());
- if (null != inboundTask)
- ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask);
- else
- OutboundRequestAction(taskWCSinfoRepository, client);
- }
+ //缂撳瓨鍙h嚦杈撻�佺嚎
+ OutboundCZ_PLC(taskWCSinfoRepository, taskRGVinfoRepository, client);
+
+ //绌烘墭鍏ュ簱鐢宠(鐢熸垚浜嗙┖鎵樺叆搴撲换鍔�)
+ InboundRequestAction(taskWCSinfoRepository, taskRGVinfoRepository, client);
+
+ //绌烘墭鍒扮紦瀛樺彛
+ ReInboundKTP(taskWCSinfoRepository, client);
+
+ //绌烘墭鍏ュ簱鍙o紝鐢熸垚RGV浠诲姟,杩涜鍏ュ簱
+ RGV_InboundKTP(taskWCSinfoRepository, taskRGVinfoRepository, client);
+
+
}
catch (Exception ex)
{
@@ -219,11 +135,25 @@
Dt_TaskWCSinfo wcsTask = item.OrderBy(r => r.wcstask_createTime).FirstOrDefault();
if (null != wcsTask)
{
+ //鍒ゆ柇鍘嬭鍙版槸鍚︽湁璐�
+ bool yzflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), wcsTask.wcstask_endPoint).ToString());
+ bool yznoflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), wcsTask.wcstask_endPoint).ToString());
+ if (yzflag || !yznoflag)
+ continue;
+
+ //鍒ゆ柇缂撳瓨鏋舵槸鍚︽湁璐�
+ bool flag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), wcsTask.wcstask_startPoint).ToString());
+ bool noflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), wcsTask.wcstask_startPoint).ToString());
+ if (flag || !noflag)
+ continue;
+
+
//鍚屼竴灞傛湁鎵ц涓殑浠诲姟涓嶆坊鍔�
Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r => (r.wcstask_startPoint == wcsTask.wcstask_startPoint || r.wcstask_endPoint == wcsTask.wcstask_endPoint)
&& (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()));
if (null != executingTask)
continue;
+
List<Dt_TaskWCSinfo> listTarget = taskWCSinfoRepository.Find(r => r.wcstask_endPoint == wcsTask.wcstask_endPoint &&
r.wcstask_state != TaskState.TaskState_Assigned.ToString());
@@ -318,66 +248,74 @@
{
try
{
- string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), ReInboundRequestStationNo).ToString();
+ int R_Line_PLCDispatch = int.Parse(client.ReadValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo).ToString());
bool load = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), ReInboundRequestStationNo).ToString());
- if (!string.IsNullOrEmpty(barcode) && !"0".Equals(barcode) && load)
+ if (R_Line_PLCDispatch ==1 && load)
{
- Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == barcode && r.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString());
- if (null == wcsInfo)
+ string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), ReInboundRequestStationNo).ToString();
+ if (!string.IsNullOrEmpty(barcode) && !"0".Equals(barcode))
{
- //鏈夊嚭搴撲换鍔�,涓嶈兘涓嬪彂
- Dt_TaskRGVinfo executingRgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_areaCode == "OutboundArea"
- && OutboundStationLayerNo.Contains(r.rgvtask_endNode));
- if (null != executingRgvTask)
- return;
-
- //褰撳墠瀛樺湪鏈畬鎴愮殑浠诲姟 鍏ュ簱
- wcsInfo = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint));
- if (null != wcsInfo)
+ Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == barcode && r.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString());
+ if (null == wcsInfo)
{
- Dt_TaskRGVinfo rgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_wcsTaskNumber == wcsInfo.wcstask_taskNumber);
- if (null != rgvTask)
+ //鑾峰彇杞﹁酱鍑哄簱
+ List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => (r.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) ||
+ r.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString())) && endStationNo.Contains(r.wcstask_endPoint));
+
+ //鑾峰彇鏈夊灏戞潯鍑哄簱鐨勪换鍔�
+ int LineExecucount = executingTask.Count(x => x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString());
+ if (LineExecucount >= 4)
{
- //鍙栬揣瀹屾垚
- if ("2" != rgvTask.rgvtask_backup_2)
- return;
+ //鍒ゆ柇鏄惁鏈夊搴斿眰鐨勫嚭搴撲换鍔★紝
+ //鐢宠鍏ュ簱浠诲姟
+ WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
+ if (content.Status)
+ {
+ WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
+ wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
+ taskWCSinfoRepository.Add(wcsInfo, true);
+ client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
+ }
+ else
+ {
+ throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
+ }
+
}
else
- return;
- }
-
- //鐢宠鍏ュ簱浠诲姟
- WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
- if (content.Status)
- {
- WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
- wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
-
- string rgvTaskType = string.Empty;
- if (wcsInfo.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Inbound.ToString()))
- rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString();
- //杞存壙鍑哄簱
- else if (wcsInfo.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString())
- || wcsInfo.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
- rgvTaskType = RGVTaskType.RgvTaskType_Outbound.ToString();
-
- taskWCSinfoRepository.DbContextBeginTransaction(() =>
{
- Dt_TaskRGVinfo rgvInfo = GetRGVTask(taskRGVinfoRepository, wcsInfo, rgvTaskType);
- taskRGVinfoRepository.Add(rgvInfo, true);
+ //鍒ゆ柇鏈夊灏戞潯鍦ㄧ紦瀛樻灦鐨�
+ int RGV_Finishedcount = executingTask.Count(x => x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
+ && x.wcstask_state != TaskState.TaskState_Assigned.ToString());
+ if (RGV_Finishedcount == 0)
+ {
+ //鐢宠鍏ュ簱浠诲姟
+ WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
+ if (content.Status)
+ {
+ WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
+ wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
+ taskWCSinfoRepository.Add(wcsInfo, true);
+ client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
+ }
+ else
+ {
+ throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
+ }
- wcsInfo.wcstask_state = TaskState.TaskState_RGV_Received.ToString();
- taskWCSinfoRepository.Add(wcsInfo, true);
- return content.OK();
- });
+ }
+ }
}
- else
- throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
+ }
+ else
+ {
+ throw new Exception("鍏ュ簱鐢宠澶辫触:璇诲彇鍒扮殑绌烘墭鐩樻潯鐮佷负绌猴紝璇诲彇鍐呭锛�"+ barcode);
}
}
}
catch (Exception ex)
{
+ client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 3);
Console.Out.WriteLine(DateTime.Now + ex.Message);
}
}
--
Gitblit v1.9.3