From f319fd5d5e5e0332c4c7e209df64c351dfbe6887 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期六, 25 四月 2026 22:13:19 +0800
Subject: [PATCH] fix: 修复PLC通信及任务处理中的多个问题
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs | 237 ++++++++++++++++++++++++++---------------------------------
1 files changed, 104 insertions(+), 133 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
index 84113a2..838bd20 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
@@ -79,7 +79,7 @@
/// <summary>
/// 鏃ュ織璁板綍鍣�
/// </summary>
- private readonly ILogger _logger;
+ private readonly ILogger _logger;
/// <summary>
/// 鏋勯�犲嚱鏁�
@@ -146,7 +146,7 @@
/// <returns>鍒犻櫎鏄惁鎴愬姛</returns>
public bool? DeleteTask(int ID)
{
- return _robotTaskService.Repository.DeleteDataById(ID);
+ return _robotTaskService.DeleteRobotTask(ID);
}
/// <summary>
@@ -170,36 +170,35 @@
// 鏋勫缓鍙栬揣鎸囦护锛屾牸寮忥細Pickbattery,{婧愬湴鍧�}
string taskString = $"Pickbattery,{task.RobotSourceAddress}";
- // 閫氳繃 Socket 缃戝叧鍙戦�佹寚浠ゅ埌鏈哄櫒浜哄鎴风
- bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+ // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
+ task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
- if (result)
+ // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
+ state.CurrentTask = task;
+
+ if (isScanNG)
{
- // 鍙戦�佹垚鍔燂紝璁板綍 Info 鏃ュ織
- QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
-
- // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
- task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-
- // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
- state.CurrentTask = task;
-
- if (isScanNG)
- {
- state.IsScanNG = true;
- }
-
- // 淇濇寔鍘熻涔夛細浠呭湪鐘舵�佸畨鍏ㄥ啓鍏ユ垚鍔熷悗鍐嶆洿鏂颁换鍔$姸鎬�
- // 杩欐牱鍙互纭繚鐘舵�佸拰浠诲姟璁板綍鐨勪竴鑷存��
- if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
- {
- await _robotTaskService.UpdateRobotTaskAsync(task);
- }
+ state.IsScanNG = true;
}
- else
+
+ // 淇濇寔鍘熻涔夛細浠呭湪鐘舵�佸畨鍏ㄥ啓鍏ユ垚鍔熷悗鍐嶆洿鏂颁换鍔$姸鎬�
+ // 杩欐牱鍙互纭繚鐘舵�佸拰浠诲姟璁板綍鐨勪竴鑷存��
+ if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
{
- // 鍙戦�佸け璐ワ紝璁板綍 Error 鏃ュ織
- QuartzLogHelper.LogError(_logger, $"涓嬪彂鍙栬揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ QuartzLogHelper.LogInfo(_logger, $"鐘舵�佹洿鏂版垚鍔燂紝璁惧: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ // 閫氳繃 Socket 缃戝叧鍙戦�佹寚浠ゅ埌鏈哄櫒浜哄鎴风
+ bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+ if (result)
+ {
+ // 鍙戦�佹垚鍔燂紝璁板綍 Info 鏃ュ織
+ QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ //await _robotTaskService.UpdateRobotTaskAsync(task);
+ }
+ else
+ {
+ // 鍙戦�佸け璐ワ紝璁板綍 Error 鏃ュ織
+ QuartzLogHelper.LogError(_logger, $"涓嬪彂鍙栬揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ }
}
}
@@ -234,27 +233,26 @@
// 鏍囪鐐逛綅涓哄凡浣跨敤
_fakeBatteryPositionService.MarkAsUsed(positions);
- // 閫氳繃 Socket 缃戝叧鍙戦�佹寚浠ゅ埌鏈哄櫒浜哄鎴风
- bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+ // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
+ task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
- if (result)
+ // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
+ state.CurrentTask = task;
+
+ if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
{
- QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍋囩數鑺彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {taskString}锛岀偣浣�: {string.Join(",", positions)}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ // 閫氳繃 Socket 缃戝叧鍙戦�佹寚浠ゅ埌鏈哄櫒浜哄鎴风
+ bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
- // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
- task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-
- // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
- state.CurrentTask = task;
-
- if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+ if (result)
{
- await _robotTaskService.UpdateRobotTaskAsync(task);
+ QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍋囩數鑺彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {taskString}锛岀偣浣�: {string.Join(",", positions)}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ //await _robotTaskService.UpdateRobotTaskAsync(task);
}
- }
- else
- {
- QuartzLogHelper.LogError(_logger, $"涓嬪彂鍋囩數鑺彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ else
+ {
+ QuartzLogHelper.LogError(_logger, $"涓嬪彂鍋囩數鑺彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ }
}
}
@@ -307,31 +305,31 @@
/// <param name="batchEnd">鎵规缁撴潫缂栧彿</param>
public async Task SendPickWithBatchAsync(Dt_RobotTask task, RobotSocketState state, string position, int batchStart, int batchEnd)
{
- // 鍏堝彂閫佹�绘暟鎸囦护
- string totalNumCmd = $"PickTotalNum,{task.RobotTaskTotalNum}";
- await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
- // 鍐嶅彂閫佹壒娆″彇璐ф寚浠�
- string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
- string taskString = $"Pickbattery,{position},{range}";
+ task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
+ state.CurrentTask = task;
- bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
-
- if (result)
+ if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
{
- QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鎵规鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ // 鍏堝彂閫佹�绘暟鎸囦护
+ string totalNumCmd = $"PickTotalNum,{task.RobotTaskTotalNum}";
+ await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
- task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
- state.CurrentTask = task;
+ // 鍐嶅彂閫佹壒娆″彇璐ф寚浠�
+ string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
+ string taskString = $"Pickbattery,{position},{range}";
- if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+ bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+
+ if (result)
{
- await _robotTaskService.UpdateRobotTaskAsync(task);
+ QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鎵规鍙栬揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ //await _robotTaskService.UpdateRobotTaskAsync(task);
}
- }
- else
- {
- QuartzLogHelper.LogError(_logger, $"涓嬪彂鎵规鍙栬揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ else
+ {
+ QuartzLogHelper.LogError(_logger, $"涓嬪彂鎵规鍙栬揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ }
}
}
@@ -351,31 +349,31 @@
/// <param name="batchEnd">鎵规缁撴潫缂栧彿</param>
public async Task SendFakeBatteryPickWithBatchAsync(Dt_RobotTask task, RobotSocketState state, int batchStart, int batchEnd)
{
- // 鍏堝彂閫佹�绘暟鎸囦护
- string totalNumCmd = $"PickTotalNum,{task.RobotTaskTotalNum}";
- await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
+ task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
+ state.CurrentTask = task;
- // 鍐嶅彂閫佹壒娆″彇璐ф寚浠わ紙鍋囩數鑺浐瀹氫粠5鍙蜂綅鍙栵級
- string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
- string taskString = $"Pickbattery,5,{range}";
-
- bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
-
- if (result)
+ if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
{
- QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍋囩數鑺壒娆″彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ // 鍏堝彂閫佹�绘暟鎸囦护
+ string totalNumCmd = $"PickTotalNum,{task.RobotTaskTotalNum}";
+ await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
- task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
- state.CurrentTask = task;
+ // 鍐嶅彂閫佹壒娆″彇璐ф寚浠わ紙鍋囩數鑺浐瀹氫粠5鍙蜂綅鍙栵級
+ string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
+ string taskString = $"Pickbattery,5,{range}";
- if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+ bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+
+ if (result)
{
- await _robotTaskService.UpdateRobotTaskAsync(task);
+ QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鍋囩數鑺壒娆″彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+
+ //await _robotTaskService.UpdateRobotTaskAsync(task);
}
- }
- else
- {
- QuartzLogHelper.LogError(_logger, $"涓嬪彂鍋囩數鑺壒娆″彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ else
+ {
+ QuartzLogHelper.LogError(_logger, $"涓嬪彂鍋囩數鑺壒娆″彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ }
}
}
@@ -396,31 +394,31 @@
/// <param name="batchEnd">鎵规缁撴潫缂栧彿</param>
public async Task SendPutWithBatchAsync(Dt_RobotTask task, RobotSocketState state, string position, int batchStart, int batchEnd)
{
- // 鍏堝彂閫佹�绘暟鎸囦护
- string totalNumCmd = $"PutTotalNum,{task.RobotTaskTotalNum}";
- await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
+ task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
+ state.CurrentTask = task;
- // 鍐嶅彂閫佹壒娆℃斁璐ф寚浠�
- string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
- string taskString = $"Putbattery,{position},{range}";
-
- bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
-
- if (result)
+ if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
{
- QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鏀捐揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ // 鍏堝彂閫佹�绘暟鎸囦护
+ string totalNumCmd = $"PutTotalNum,{task.RobotTaskTotalNum}";
+ await _socketClientGateway.SendToClientAsync(state.IPAddress, totalNumCmd);
- task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
- state.CurrentTask = task;
+ // 鍐嶅彂閫佹壒娆℃斁璐ф寚浠�
+ string range = batchEnd == 0 ? $"{batchStart}-0" : $"{batchStart}-{batchEnd}";
+ string taskString = $"Putbattery,{position},{range}";
- if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+ bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+
+ if (result)
{
- await _robotTaskService.UpdateRobotTaskAsync(task);
+ QuartzLogHelper.LogInfo(_logger, $"涓嬪彂鏀捐揣鎸囦护鎴愬姛锛屾寚浠�: {taskString}锛屾壒娆�: {range}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+
+ //await _robotTaskService.UpdateRobotTaskAsync(task);
}
- }
- else
- {
- QuartzLogHelper.LogError(_logger, $"涓嬪彂鏀捐揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ else
+ {
+ QuartzLogHelper.LogError(_logger, $"涓嬪彂鏀捐揣鎸囦护澶辫触锛屾寚浠�: {taskString}锛岃澶�: {state.RobotCrane?.DeviceName}", state.RobotCrane?.DeviceName);
+ }
}
}
@@ -592,39 +590,6 @@
return false;
}
- // 瑙f瀽杩斿洖鐨勪换鍔′俊鎭�
- //var taskInfos = JsonConvert.DeserializeObject<List<Dt_Task>>(content.Data.ToJson() ?? string.Empty) ?? new List<Dt_Task>();
- //var taskInfo = taskInfos.FirstOrDefault();
-
- //// 鑾峰彇婧愬湴鍧�
- //string sourceAddress = taskDTO.SourceAddress;
-
- //// 鏌ユ壘婧愬湴鍧�瀵瑰簲鐨勮緭閫佺嚎璁惧
- //IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceAddress));
-
- //if (device != null)
- //{
- // // 灏嗚澶囪浆鎹负杈撻�佺嚎绫诲瀷
- // CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
-
- // // 璁剧疆杈撻�佺嚎鐨勭洰鏍囧湴鍧�
- // conveyorLine.SetValue(ConveyorLineDBNameNew.Target, taskInfo.NextAddress, sourceAddress);
-
- // // 璁剧疆杈撻�佺嚎鐨勪换鍔″彿
- // conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, taskInfo.TaskNum, sourceAddress);
-
- // // 瑙﹀彂杈撻�佺嚎寮�濮嬫墽琛岋紙鍐欏叆 WCS_ACK = 1锛�
- // conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, sourceAddress);
-
- // // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴闃舵
- // if (_taskService.UpdateTaskStatusToNext(taskInfo).Status)
- // {
- // _logger.LogInformation("HandleInboundTaskAsync锛氬叆搴撲换鍔″鐞嗘垚鍔燂紝浠诲姟鍙�: {TaskNum}", taskInfo.TaskNum);
- // QuartzLogger.Info($"HandleInboundTaskAsync锛氬叆搴撲换鍔″鐞嗘垚鍔燂紝浠诲姟鍙�: {taskInfo.TaskNum}", state.RobotCrane?.DeviceName ?? "Unknown");
- // return true;
- // }
- //}
-
return true;
}
@@ -785,5 +750,11 @@
return result;
}
+
+ public bool UpdateRobotTask(Dt_RobotTask task)
+ {
+ WebResponseContent content = _robotTaskService.UpdateData(task);
+ return content.Status;
+ }
}
}
--
Gitblit v1.9.3