From ce70974f99cd377579e9b07873c8ce79df6e05c3 Mon Sep 17 00:00:00 2001
From: zhangchengsong <zhangchengsong@hnkhzn.com>
Date: 星期二, 14 四月 2026 20:47:26 +0800
Subject: [PATCH] '完善二楼出库放货中屏蔽光栅'
---
项目代码/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs | 165 +++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 117 insertions(+), 48 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs"
index dcb91f9..1370735 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs"
@@ -16,6 +16,7 @@
#endregion << 鐗� 鏈� 娉� 閲� >>
using AutoMapper;
+using AutoMapper.Internal;
using Castle.Components.DictionaryAdapter.Xml;
using HslCommunication;
using Microsoft.AspNetCore.Mvc;
@@ -85,7 +86,7 @@
if (transfer.to == null || string.IsNullOrEmpty(transfer.to.code)) return apiResponse.ErrorResponse("鐩爣浣嶇疆涓嶈兘涓虹┖");
if (transfer.device == null || string.IsNullOrEmpty(transfer.device.uuid)) return apiResponse.ErrorResponse("璁惧鏍囪瘑涓嶈兘涓虹┖");
- Dt_Task setask = BaseDal.QueryData(x => x.WMStaskid == transfer.barCode).FirstOrDefault();
+ Dt_Task? setask = BaseDal.QueryData(x => x.WMStaskid == transfer.barCode).FirstOrDefault();
if (setask != null) return apiResponse.ErrorResponse($"WCS宸叉湁褰撳墠浠诲姟锛屼笉鍙噸澶嶄笅鍙戯紝鎵樼洏缂栧彿锛歿transfer.barCode}");
@@ -209,7 +210,7 @@
//鑾峰彇鍏夊箷鐘舵��
- public ApiResponse getSafeStatus(string[] datas)
+ public ApiResponse getSafeStatus(string[] datas)
{
WriteLog.Write_Log("鑾峰彇鍏夊箷鐘舵�佹帴鍙�", "鑾峰彇鍏夊箷鐘舵�佷俊鎭�", "璋冨彇鍙傛暟", setCurtain);
ApiResponse apiResponse = new ApiResponse();
@@ -233,19 +234,63 @@
//璁剧疆鍏夊箷
public ApiResponse setCurtain(SetCurtainRequest setCurtain)
{
- //鑾峰彇WMS璋冨彇鐨勫弬鏁�
- WriteLog.Write_Log("璁剧疆鍏夊箷鎺ュ彛", "璁剧疆鍏夊箷淇℃伅", "璋冨彇鍙傛暟", setCurtain);
ApiResponse apiResponse = new ApiResponse();
+ bool HandShakeboolOPEN = false;
+ bool HandShakeboolCLOSE = false;
try
{
- return apiResponse.SuccessResponse();
- }
+ Dictionary<string, int> portStatusDict = new Dictionary<string, int>();
+ foreach (string DeStateName in setCurtain.Datas)
+ {
+ string DeciceCodes = "1003";
+ if (DeStateName.StartsWith("C")) DeciceCodes = "1004";
+
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeciceCodes);
+ if (device == null) return apiResponse.ErrorResponse("WCS鏈兘鑾峰彇鍒板簱鍙e疄渚�");
+
+ CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+
+ DeviceProDTO? HandShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeStateName && x.DeviceProParamName == "HandShake");
+ if (HandShake == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{setCurtain.Datas},瀵瑰簲鐨勫崗璁�");
+ DeviceProDTO? Request = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeStateName && x.DeviceProParamName == "Request");
+ if (HandShake == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{setCurtain.Datas},瀵瑰簲鐨勫崗璁�");
+
+ if (setCurtain.Operate.Equals("OPEN"))
+ {
+ //鍐欏叆plc锛宎gv閫�鍑轰腑鎵撳紑淇″彿
+ HandShakeboolOPEN = conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 0);
+
+ WriteLog.Write_Log("璁剧疆鎵撳紑鍏夊箷鎺ュ彛", "璁剧疆鎵撳紑鍏夊箷淇℃伅", $"搴撳彛鍚嶇О锛氥�恵DeStateName}銆戯紝鎵撳紑鍏夊箷淇″彿鍦板潃锛氥�恵Request.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵conveyorLine.Communicator.Read<ushort>(Request.DeviceProAddress)}銆慭n" +
+ $"鍐欏叆鎵撳紑鍏夊箷淇″彿鏄惁鎴愬姛杩斿洖鍊硷細銆恵HandShakeboolOPEN}銆�");
+
+ }
+ else
+ {
+ //鍐欏叆plc锛宎gv杩涘叆鍏抽棴鍏夋爡淇″彿
+ HandShakeboolCLOSE = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 1)&& conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 1);
+
+ WriteLog.Write_Log("璁剧疆鍏抽棴鍏夊箷鎺ュ彛", "璁剧疆鍏抽棴鍏夊箷鎺ュ彛淇℃伅", $"搴撳彛鍚嶇О锛氥�恵DeStateName}銆戯紝鍏抽棴鍏夊箷淇″彿鍦板潃锛氥�恵HandShake.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵conveyorLine.Communicator.Read<ushort>(HandShake.DeviceProAddress)}銆�" +
+ $"鍏抽棴鍏夊箷淇″彿澶囩敤鍦板潃锛氥�恵Request.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵conveyorLine.Communicator.Read<ushort>(Request.DeviceProAddress)}銆慭n" +
+ $"鍐欏叆鍏抽棴鍏夊箷淇″彿鏄惁鎴愬姛杩斿洖鍊硷細銆恵HandShakeboolCLOSE}銆�");
+ }
+ }
+ if ((HandShakeboolOPEN && setCurtain.Operate.Equals("OPEN") )|| (HandShakeboolCLOSE && setCurtain.Operate.Equals("CLOSE")))
+ {
+ return apiResponse.SuccessResponse();
+ }
+ else
+ {
+ return apiResponse.ErrorResponse("鍐欏叆plc杩涘叆淇″彿澶辫触");
+ }
+ }
catch (Exception ex)
{
return apiResponse.ErrorResponse($"WCS浠诲姟娣诲姞閿欒锛屽師鍥狅細{ex.Message}");
}
}
+
+
//agv杩涘嚭鐘舵�佸弽棣�
@@ -267,59 +312,83 @@
//鏄惁鍙繘鍑�
DeviceProDTO? HandShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "HandShake");
if (HandShake == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{agvUpdateRequest.warehousenumber},瀵瑰簲鐨勫崗璁�");
-
- if (agvUpdateRequest.agvstatus == 1)
- {
- //鍐欏叆plc锛宎gv杩涘叆淇″彿
- bool HandShakebool = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 1);
- if (HandShakebool)
+ DeviceProDTO? Request = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "Request");
+
+ if (agvUpdateRequest.agvstatus == 1)
{
- //鏄惁鍙繘鍑� 1鍏佽鍙� 2鍏佽鏀�
- DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "PermitHandShake");
- //鏄惁鏈夎揣
- DeviceProDTO? StationNumProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "StationNum");
- if (deviceProDTO == null || StationNumProDTO == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{agvUpdateRequest.warehousenumber},瀵瑰簲鐨勫崗璁�");
- int statusValue = 0;
- int portStatus = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
- int StationStatus = conveyorLine.Communicator.Read<ushort>(StationNumProDTO.DeviceProAddress);
-
- //鏈夎揣锛屽彲杩涗俊鍙�
- statusValue = ((portStatus == 1 && StationStatus == 1) || (portStatus == 2 && StationStatus == 0)) ? 1 : (portStatus == 0) ? 0 : 0;
- WriteLog.Write_Log("AGV鍙嶉淇″彿淇℃伅", "AGV鍙嶉淇″彿淇℃伅", $"鏄惁鍏佽杩涘叆鍦板潃锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵portStatus}銆慭n" +
- $"鏄惁鏈夎揣鍦板潃锛氥�恵StationNumProDTO.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵StationStatus}銆慭n" +
- $"鏈夎揣鍙繘鍏ヤ俊鍙凤細銆恵statusValue}銆�");
-
- if (statusValue == 1)
+ bool HandShakebool = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 1);
+ if (HandShakebool)
{
+ if (Request != null)
+ {
+ conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 1);
+ }
+ //鏄惁鍙繘鍑� 1鍏佽鍙� 2鍏佽鏀�
+ DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "PermitHandShake");
+ //鏄惁鏈夎揣
+ DeviceProDTO? StationNumProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "StationNum");
+ if (deviceProDTO == null || StationNumProDTO == null) return apiResponse.ErrorResponse($"WCS鏈壘鍒板簱鍙o細{agvUpdateRequest.warehousenumber},瀵瑰簲鐨勫崗璁�");
+ int statusValue = 0;
+ int portStatus = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
+ int StationStatus = conveyorLine.Communicator.Read<ushort>(StationNumProDTO.DeviceProAddress);
+
+ //鏈夎揣锛屽彲杩涗俊鍙�
+ statusValue = ((portStatus == 1 && StationStatus == 1) || (portStatus == 2 && StationStatus == 0)) ? 1 : (portStatus == 0) ? 0 : 0;
+ WriteLog.Write_Log("鐢宠杩涘叆AGV鍙嶉淇″彿淇℃伅", "鐢宠杩涘叆AGV鍙嶉淇″彿淇℃伅", $"搴撳彛缂栧彿锛氥�恵agvUpdateRequest.warehousenumber}銆戯紝鏄惁鍏佽杩涘叆鍦板潃锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵portStatus}銆慭n" +
+ $"鏄惁鏈夎揣鍦板潃锛氥�恵StationNumProDTO.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵StationStatus}銆慭n" +
+ $"鏄惁鍙繘鍏ヤ俊鍙凤細銆恵statusValue}銆�");
+ if (agvUpdateRequest.warehousenumber == "G01" || agvUpdateRequest.warehousenumber == "G06" || agvUpdateRequest.warehousenumber == "G07")
+ {
+ if (statusValue == 1)
+ {
+ return apiResponse.SuccessResponse();
+
+ }
+ else
+ {
+ conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 0);
+ return apiResponse.ErrorResponse("璇诲彇plc涓嶅彲杩涘叆淇℃伅");
+ }
+ }
+ else
+ {
+ return apiResponse.SuccessResponse();
+ }
+ }
+ else
+ {
+ return apiResponse.ErrorResponse("鍐欏叆plc杩涘叆淇″彿澶辫触");
+ }
+ }
+ else if (agvUpdateRequest.agvstatus == 2)
+ {
+ //鍐欏叆杈撻�佺嚎淇″彿
+ bool portStatus = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 0);
+ if (portStatus)
+ {
+ if (Request != null)
+ {
+ conveyorLine.Communicator.Write<short>(Request.DeviceProAddress, 0);
+ WriteLog.Write_Log("鐢宠绂诲紑AGV鍙嶉淇″彿淇℃伅", "鐢宠绂诲紑AGV鍙嶉淇″彿淇℃伅", $"搴撳彛缂栧彿锛氥�恵agvUpdateRequest.warehousenumber}銆戯紝鐢宠淇″彿鍦板潃锛氥�恵HandShake.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵conveyorLine.Communicator.Read<ushort>(HandShake.DeviceProAddress)}銆慭n" +
+ $"澶囩敤淇″彿鍦板潃锛氥�恵Request.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵conveyorLine.Communicator.Read<ushort>(Request.DeviceProAddress)}銆�");
+
+ }
+ else
+ {
+ WriteLog.Write_Log("鐢宠绂诲紑AGV鍙嶉淇″彿淇℃伅", "鐢宠绂诲紑AGV鍙嶉淇″彿淇℃伅", $"搴撳彛缂栧彿锛氥�恵agvUpdateRequest.warehousenumber}銆戯紝鐢宠淇″彿鍦板潃锛氥�恵HandShake.DeviceProAddress}銆戯紝璇诲彇鏁版嵁锛氥�恵conveyorLine.Communicator.Read<ushort>(HandShake.DeviceProAddress)}銆慭n" );
+ }
return apiResponse.SuccessResponse();
}
else
{
- return apiResponse.ErrorResponse("璇诲彇plc涓嶅彲杩涘叆淇℃伅");
+ return apiResponse.ErrorResponse("鍐欏叆plc娓呴櫎淇″彿澶辫触");
}
}
else
{
- return apiResponse.ErrorResponse("鍐欏叆plc杩涘叆淇″彿澶辫触");
+ return apiResponse.ErrorResponse($"agv瀵瑰簲鐨勭敵璇烽敊璇紝瀛楁锛歛gvstatus锛岀敵璇风殑鍊硷細{agvUpdateRequest.agvstatus}");
}
- }
- else if(agvUpdateRequest.agvstatus == 2)
- {
- //鍐欏叆杈撻�佺嚎淇″彿
- bool portStatus = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 0);
- if (portStatus)
- {
- return apiResponse.SuccessResponse();
- }
- else
- {
- return apiResponse.ErrorResponse("鍐欏叆plc娓呴櫎淇″彿澶辫触");
- }
- }
- else
- {
- return apiResponse.ErrorResponse($"agv瀵瑰簲鐨勭敵璇烽敊璇紝瀛楁锛歛gvstatus锛岀敵璇风殑鍊硷細{agvUpdateRequest.agvstatus}");
- }
+
}
catch (Exception ex)
{
--
Gitblit v1.9.3