From 3865dee5741693d2ce8cf1b1ee06242a7cbca1bb Mon Sep 17 00:00:00 2001 From: huanghongfeng <huanghongfeng@hnkhzn.com> Date: 星期六, 16 十一月 2024 19:49:22 +0800 Subject: [PATCH] 1 --- 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs | 293 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 232 insertions(+), 61 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" index a3a1fea..58ada7c 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" @@ -18,6 +18,7 @@ using AutoMapper; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using Quartz; using StackExchange.Profiling.Internal; @@ -36,6 +37,7 @@ using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; +using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Service; @@ -63,12 +65,21 @@ public Task Execute(IJobExecutionContext context) { + try { CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams"); + if ( conveyorLine != null ) + { + if(conveyorLine.DeviceCode == "1002") + { + RequestInbound(conveyorLine); //涓�妤糃,B鍖轰笟鍔� + } + - RequestInbound(conveyorLine); //妫�娴嬪叆鏂欏彛淇℃伅 - RequestInNextAddress(conveyorLine); + + } + //RequestInNextAddress(conveyorLine); } @@ -83,40 +94,88 @@ return Task.CompletedTask; } - /// <summary> - /// 杈撻�佺嚎璇锋眰鍏ュ簱鍒板摢涓贩閬� - /// </summary> - /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param> - /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> - /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> public void RequestInbound(CommonConveyorLine conveyorLine) { - HandleEvent(conveyorLine, "PLC_WCS_B.03_EVENT", "PLC_WCS_B.03_PLC_LPN", "PLC_WCS_B.03_WCS_TO"); - HandleEvent(conveyorLine, "PLC_WCS_C.02_EVENT", "PLC_WCS_C.02_PLC_LPN", "PLC_WCS_C.02_WCS_TO"); - - - CheckForEmptyPallet(conveyorLine,"PLC_WCS_B.01_EVENT"); - CheckForEmptyPallet(conveyorLine,"PLC_WCS_C.01_EVENT"); - - // 澶勭悊 B 绔欏彴浜嬩欢 - ProcessConveyorEvent(conveyorLine, "PLC_WCS_B.01_EVENT", "PLC_WCS_B.01_PLC_LPN", "B1", "R01-003-027-001-01"); - - // 澶勭悊 C 绔欏彴浜嬩欢 - ProcessConveyorEvent(conveyorLine, "PLC_WCS_C.03_EVENT", "PLC_WCS_C.03_PLC_LPN", "C7", "R01-003-041-001-01"); + //1妤艰緭閫佺嚎鍒ゆ柇 + HandleEvent(conveyorLine, "PLC_WCS_B._03_PLC_EVENT", "PLC_WCS_B._03_PLC_LPN", "WCS_PLC_B._03_WCS_TO"); //鍒ゆ柇宸烽亾 + HandleEvent(conveyorLine, "PLC_WCS_C._02_PLC_EVENT", "PLC_WCS_C._02_PLC_LPN", "WCS_PLC_C._02_WCS_TO"); //鍒ゆ柇宸烽亾 + CheckForEmptyPallet(conveyorLine, "PLC_WCS_B._02_PLC_EVENT", "PLC_WCS_B._02_PLC_LPN", "PLC_WCS_B._02_PLC_PUT", "R02-002-027-001-01"); //鍒ゆ柇鏄惁鍙栫┖鎵樺嚭搴� + CheckForEmptyPallet(conveyorLine, "PLC_WCS_C._01_PLC_EVENT", "PLC_WCS_C._01_PLC_LPN", "PLC_WCS_C._01_PLC_PUT", "R01-002-041-001-01"); //鍒ゆ柇鏄惁鍙栫┖鎵樺嚭搴� + ProcessConveyorEvent(conveyorLine, "PLC_WCS_B._01_PLC_EVENT", "PLC_WCS_B._01_PLC_LPN", "R02-003-027-001-01", "WCS_PLC_B._03_WCS_TO");// 澶勭悊 B 绔欏彴浜嬩欢 //鍒ゆ柇杈撻�佺嚎鍒拌揪淇″彿 + ProcessConveyorEvent(conveyorLine, "PLC_WCS_C._03_PLC_EVENT", "PLC_WCS_C._03_PLC_LPN", "R01-003-041-001-01", "WCS_PLC_C._02_WCS_TO");// 澶勭悊 C } - - /// <summary> - /// 鍒ゆ柇鍑哄簱绔欏彴鏄惁闇�瑕佺┖鎵� - /// </summary> - /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param> - /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param> - /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param> - public void ConveyorLineInFinish(CommonConveyorLine conveyorLine) + public void RequestInbound2(CommonConveyorLine conveyorLine) { - + //椤舵ゼ妤艰緭閫佺嚎鍒ゆ柇 + HandleEvent(conveyorLine, "PLC_WCS_D._05_PLC_EVENT", "PLC_WCS_D._05_PLC_LPN", "WCS_PLC_D._05_WCS_TO"); //鍒ゆ柇鍏ュ簱宸烽亾 + + ProcessConveyorEvent(conveyorLine, "PLC_WCS_D._01_PLC_EVENT", "PLC_WCS_D._01_PLC_LPN", "R02-003-027-011-01", "WCS_PLC_D._05_WCS_TO");// 澶勭悊 1宸烽亾 绔欏彴浜嬩欢鍏ョ┖ + ProcessConveyorEvent(conveyorLine, "PLC_WCS_D._03_PLC_EVENT", "PLC_WCS_D._03_PLC_LPN", "R01-003-041-011-01", "WCS_PLC_D._05_WCS_TO");// 澶勭悊 2宸烽亾 绔欏彴浜嬩欢 鍏ョ┖ + + CheckForEmptyPallet2(conveyorLine, "PLC_WCS_D._02_PLC_EVENT", "PLC_WCS_D._02_PLC_LPN", "PLC_WCS_D._02_PLC_PUT", "R02-002-027-011-01"); //鍘熸潗鏂欏嚭搴� 璇诲彇鏉$爜閫夊簱鍖哄嚭搴� + CheckForEmptyPallet2(conveyorLine, "PLC_WCS_D._04_PLC_EVENT", "PLC_WCS_D._04_PLC_LPN", "PLC_WCS_D._04_PLC_PUT", "R01-002-041-011-01"); //鍘熸潗鏂欏嚭搴� 璇诲彇鏉$爜閫夊簱鍖哄嚭搴� + //ConveyorLineInFinish(conveyorLine); //鐢ㄤ簬鍐欏叆杈撻�佺嚎鏉$爜淇℃伅锛屾殏鏃舵湭鐢� } + public void RequestInbound3(CommonConveyorLine conveyorLine) + { + ProcessConveyorEvent(conveyorLine, "PLC_WCS_A._02_PLC_EVENT", "PLC_WCS_A._02_PLC_LPN", "R02-003-043-011-01", "WCS_PLC_A._02_WCS_TO");// 澶勭悊 A21 绔欏彴浜嬩欢鍏ュ簱 + + ProcessConveyorEvent(conveyorLine, "PLC_WCS_A._03_PLC_EVENT", "PLC_WCS_A._03_PLC_LPN", "R01-003-042-011-01", "WCS_PLC_A._03_WCS_TO");// 澶勭悊 A22 绔欏彴浜嬩欢 鍏ユ枡 + + ConveyorLineInFinish(conveyorLine,"R01-002-044-001-01"); //鐢ㄤ簬鍐欏叆杈撻�佺嚎鏉$爜淇℃伅锛岀敤浜庡嚭搴� + } + + public void ConveyorLineInFinish(CommonConveyorLine conveyorLine,string SCAddress) + { + DeviceProDTO? deviceProDTO2 = GetDeviceProDTO(conveyorLine,SCAddress, "R_StackerCraneLowered"); //璇诲彇杈撻�佺嚎 鈥滃爢鍨涙満鏀句笅鈥� 淇″彿 + if ( deviceProDTO2 != null ) + { + byte strsd = GetLine(conveyorLine, deviceProDTO2.DeviceChildCode); + if (strsd == 1) + { + Dt_Task task = _taskService.IngStackerCraneTask2(conveyorLine.DeviceCode); + if(task != null && task.TaskType==(int)TaskOutboundTypeEnum.Outbound) + { + byte PalletType = 2; + if (task.TargetAddress == "R02-002-027-001-01" || task.TargetAddress == "R01-002-041-001-01") + { + PalletType = 1; + } + DeviceProDTO? deviceProDTO3 = GetDeviceProDTO(conveyorLine, SCAddress, "W_PalletBarcode"); //鍐欏叆鏉$爜 + DeviceProDTO? deviceProDTO4 = GetDeviceProDTO(conveyorLine, SCAddress, "W_PalletLayers"); //灞傛暟 + DeviceProDTO? deviceProDTO5 = GetDeviceProDTO(conveyorLine, SCAddress, "W_PalletType"); //绫诲瀷 + DeviceProDTO? deviceProDTO6 = GetDeviceProDTO(conveyorLine, SCAddress, "W_Destination"); //绫诲瀷 + if (deviceProDTO3 != null && deviceProDTO4 != null && deviceProDTO5 != null && deviceProDTO6 != null) + { + if (SetLinestring(conveyorLine, deviceProDTO3.DeviceProDataBlock, task.PalletCode) && SetLine(conveyorLine, deviceProDTO4.DeviceProDataBlock, (byte)task.PalletCodequantity) && SetLine(conveyorLine, deviceProDTO5.DeviceProDataBlock, PalletType) && SetLine(conveyorLine, deviceProDTO6.DeviceProDataBlock, (byte)task.PLCTo)) + { + + LogSignalStatus($"鍐欏叆鏀捐揣瀹屾垚淇℃伅锛屾墭鐩樻潯鐮侊紝灞傛暟锛岀被鍨嬩俊鎭垚鍔�", deviceProDTO2.DeviceChildCode); + + } + else + { + LogSignalStatus($"鍐欏叆鏀捐揣瀹屾垚淇℃伅锛屾墭鐩樻潯鐮侊紝灞傛暟锛岀被鍨嬩俊鎭け璐�", deviceProDTO2.DeviceChildCode); + + } + } + else + { + LogSignalStatus($"鏈壘鍒拌緭閫佺嚎鍗忚淇℃伅", task.TargetAddress); + + } + } + } + } + + } + //鑾峰彇杈撻�佺嚎瀹炰緥 + public DeviceProDTO? GetDeviceProDTO(CommonConveyorLine conveyorLine, string SCAddress, string Interactivet) + { + return conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == Interactivet); + } /// <summary> /// 鐢ㄤ簬鍏ュ簱鍒ゆ柇宸烽亾 @@ -127,67 +186,179 @@ /// <param name="writeTag"></param> private void HandleEvent(CommonConveyorLine conveyorLine,string eventTag, string barcodeTag, string writeTag) { - int events = conveyorLine.Communicator.Read<int>(eventTag); // 璇诲彇浜嬩欢 - if (events == 1) + try { - string barcode = conveyorLine.Communicator.Read<string>(barcodeTag); // 璇诲彇鏉$爜 - if ((_taskService.ToPlatform(barcode)).Status) + byte events = conveyorLine.Communicator.Read<byte>(eventTag); // 璇诲彇浜嬩欢 + if (events == 1) { - // 鍐欏叆鍘诲悜1鍙峰爢鍨涙満 - bool result = conveyorLine.Communicator.Write(writeTag, 1); - if (result) + string barcode = conveyorLine.Communicator.Read<string>(barcodeTag); // 璇诲彇鏉$爜 + if(barcode != "1" || barcode != "0") { - WriteLog.GetLog("PLC鏃ュ織").Write("鍐欏叆鍘诲悜锛�1", "鍘诲悜"); + if ((_taskService.ToPlatform(barcode)).Status) + { + // 鍐欏叆鍘诲悜2鍙峰爢鍨涙満 + bool result = conveyorLine.Communicator.Write(writeTag, (byte)1); //鍘熸潗鏂欏幓鍚� + if (result) + { + WriteLog.GetLog("PLC鏃ュ織").Write("鍐欏叆鍘诲悜锛�3", "鍘诲悜"); + } + } } - } - else - { - // 鍐欏叆鍘诲悜2鍙峰爢鍨涙満 - bool result = conveyorLine.Communicator.Write(writeTag, 2); - if (result) + + + if (barcode == "1") { - WriteLog.GetLog("PLC鏃ュ織").Write("鍐欏叆鍘诲悜锛�2", "鍘诲悜"); + // 鍐欏叆鍘诲悜2鍙峰爢鍨涙満 + bool result = conveyorLine.Communicator.Write(writeTag, (byte)1); //绌烘墭鍘诲悜 + if (result) + { + WriteLog.GetLog("PLC鏃ュ織").Write("绌烘墭鍏ュ簱锛屽啓鍏ュ幓鍚戯細1", "鍘诲悜"); + } } + /*else + { + // 鍐欏叆鍘诲悜1鍙峰爢鍨涙満 + bool result = conveyorLine.Communicator.Write(writeTag, (byte)1); + if (result) + { + WriteLog.GetLog("PLC鏃ュ織").Write("鍐欏叆鍘诲悜锛�2", "鍘诲悜"); + } + + WriteLog.GetLog("PLC鏃ュ織").Write("鍏ュ簱澶辫触", "鍏ュ簱缁勭洏"); + }*/ } + } + catch (Exception ex) + { + + throw; } } //鐢ㄤ簬鍒ゆ柇鏄惁琛ョ┖鎵� - private void CheckForEmptyPallet(CommonConveyorLine conveyorLine,string eventTag) + private void CheckForEmptyPallet(CommonConveyorLine conveyorLine,string eventTag, string barcodeTag,string plcput,string Loc) { - int events = conveyorLine.Communicator.Read<int>(eventTag); // 璇诲彇浜嬩欢 - if (events == 0) + + try { - WriteLog.GetLog("PLC鏃ュ織").Write($"璇诲彇鍒板嚭搴撳彛琛ョ┖鎵樹俊鍙凤細{events}", "闇�瑕佺┖鎵�"); - // 鐢熸垚鍫嗗灈鏈哄彇绌烘墭浠诲姟 + Byte events = conveyorLine.Communicator.Read<Byte>(eventTag); // 璇诲彇浜嬩欢 + if (events == 1) //1涓虹┖锛�0涓烘湁 + { + string barcode = conveyorLine.Communicator.Read<string>(barcodeTag); // 璇诲彇鏉$爜 + if(barcode == "") + { + WriteLog.GetLog("PLC鏃ュ織鍑哄簱鏃ュ織").Write($"璇诲彇鍒板嚭搴撳彛琛ョ┖鎵樹俊鍙凤細{events}", "闇�瑕佺┖鎵�"); + // 鐢熸垚鍫嗗灈鏈哄彇绌烘墭浠诲姟 + byte plcputts = conveyorLine.Communicator.Read<byte>(plcput); + if (plcputts != 1) + { + if ((_taskService.RequestWMSTask2("", Loc)).Status) + { + WriteLog.GetLog("PLC鏃ュ織鍑哄簱鏃ュ織").Write($"宸茬敓鎴愮┖鎵樺嚭搴撲换鍔★細{events}", "闇�瑕佺┖鎵�"); + } + else + { + WriteLog.GetLog("PLC鏃ュ織鍑哄簱鏃ュ織").Write($"鏈敓鎴愮┖鎵樺嚭搴撲换鍔★細{events}", "闇�瑕佺┖鎵�"); + } + } + } + + + } + } + catch (Exception ex) + { + + throw; } } - //鐢ㄤ簬鍒ゆ柇鍏ュ簱绔欏彴 - private void ProcessConveyorEvent(CommonConveyorLine conveyorLine, string eventTag, string barcodeTag, string stationId, string taskCode) + //鐢ㄤ簬鍒ゆ柇鏄惁鍑虹┖鎵� + private void CheckForEmptyPallet2(CommonConveyorLine conveyorLine, string eventTag, string barcodeTag, string plcput, string Loc) { - int eventStatus = conveyorLine.Communicator.Read<int>(eventTag); - if (eventStatus == 1) + Byte events = conveyorLine.Communicator.Read<Byte>(eventTag); // 璇诲彇浜嬩欢 + if (events == 1) //1涓虹┖锛�0涓烘湁 { - string barcode = conveyorLine.Communicator.Read<string>(barcodeTag); - if (barcode != null) + string barcode = conveyorLine.Communicator.Read<string>(barcodeTag); // 璇诲彇鏉$爜 + if (barcode != "1" || barcode != "0") { - // 鎷垮彇鎵樼洏鏉$爜鐢宠鍏ュ簱淇℃伅 - WebResponseContent content = _taskService.RequestWMSTask(barcode, taskCode); // 鐢宠鍏ュ簱锛岀敓鎴愬爢鍨涙満浠诲姟 - if (content.Status) + WriteLog.GetLog("PLC鏃ュ織鍑哄簱鏃ュ織").Write($"璇诲彇鍒板師鏉愭枡鍑哄簱淇℃伅锛屾潯鐮佷俊鎭細{barcode}", "鍘熸潗鏂欏嚭搴�"); + + byte outCount = conveyorLine.Communicator.Read<byte>(plcput); + if ((_taskService.RequestWMSTask3(barcode, outCount,Loc)).Status) { - WriteLog.GetLog("PLC鍏ュ簱绔欏彴鏃ュ織").Write($"鐢宠鍏ュ簱鎴愬姛锛岀珯鍙扮紪鍙蜂负锛歿stationId}", "绔欏彴淇℃伅"); + //鍐欏叆杈撻�佺嚎娓呴櫎淇℃伅 + WriteLog.GetLog("PLC鏃ュ織鍑哄簱鏃ュ織").Write($"宸茬敓鎴愬師鏉愭枡鍑哄簱浠诲姟锛屾潯鐮佷俊鎭細{barcode}", "鍘熸潗鏂欏嚭搴�"); } else { - WriteLog.GetLog("PLC鍏ュ簱绔欏彴鏃ュ織").Write($"鐢宠鍏ュ簱澶辫触锛岀珯鍙扮紪鍙蜂负锛歿stationId}", "绔欏彴淇℃伅"); + WriteLog.GetLog("PLC鏃ュ織鍑哄簱鏃ュ織").Write($"鏈敓鎴愬師鏉愭枡鍑哄簱浠诲姟锛屾潯鐮佷俊鎭細{barcode}", "鍘熸潗鏂欏嚭搴�"); + } + } + } + + } + + //鐢ㄤ簬鍒ゆ柇鍏ュ簱绔欏彴 + private void ProcessConveyorEvent(CommonConveyorLine conveyorLine, string eventTag, string barcodeTag, string taskCode,string writeTag) + { + byte eventStatus = conveyorLine.Communicator.Read<byte>(eventTag); + if (eventStatus == 1) + { + WriteLog.GetLog("PLC鍏ュ簱绔欏彴鏃ュ織").Write($"璇诲彇鍒拌緭閫佺嚎鐢宠鍏ュ簱淇℃伅EVENT涓猴細{eventStatus}锛岀珯鍙扮紪鍙蜂负锛歿taskCode}", "绔欏彴淇℃伅"); + string barcode = conveyorLine.Communicator.Read<string>(barcodeTag); + if(barcode == "1") + { + string currentTime = DateTime.Now.ToString("HHmmss"); + barcode = "KTP" + currentTime; + + } + if (barcode != null) + { + bool result = conveyorLine.Communicator.Write(writeTag, (byte)0); + if(taskCode== "R01-003-042-011-01") + { + if ((_taskService.ToPlatform(barcode)).Status) + { + WriteLog.GetLog("PLC鍏ュ簱绔欏彴鏃ュ織").Write($"缁勭洏鎴愬姛锛岀珯鍙扮紪鍙蜂负锛歿taskCode}", "绔欏彴淇℃伅"); + } + } + // 鎷垮彇鎵樼洏鏉$爜鐢宠鍏ュ簱淇℃伅 + WebResponseContent content = _taskService.RequestWMSTask(barcode, taskCode); // 鐢宠鍏ュ簱锛岀敓鎴愬爢鍨涙満浠诲姟 + if (content !=null) + { + if (content.Status) + { + WriteLog.GetLog("PLC鍏ュ簱绔欏彴鏃ュ織").Write($"鐢宠鍏ュ簱鎴愬姛锛岀珯鍙扮紪鍙蜂负锛歿taskCode}", "绔欏彴淇℃伅"); + } + else + { + WriteLog.GetLog("PLC鍏ュ簱绔欏彴鏃ュ織").Write($"鐢宠鍏ュ簱澶辫触锛岀珯鍙扮紪鍙蜂负锛歿taskCode}", "绔欏彴淇℃伅"); + } } } else { - WriteLog.GetLog("PLC鍏ュ簱绔欏彴鏃ュ織").Write($"璇诲彇鍒拌緭閫佺嚎淇℃伅涓虹┖锛岀珯鍙扮紪鍙蜂负锛歿stationId}", "绔欏彴淇℃伅"); + WriteLog.GetLog("PLC鍏ュ簱绔欏彴鏃ュ織").Write($"璇诲彇鍒拌緭閫佺嚎淇℃伅涓虹┖锛岀珯鍙扮紪鍙蜂负锛歿taskCode}", "绔欏彴淇℃伅"); } } } + public bool SetLine(CommonConveyorLine conveyorLine, string DeviceProDataBlock, byte Pali) + { + return conveyorLine.Communicator.Write(DeviceProDataBlock, Pali); + } + public bool SetLinestring(CommonConveyorLine conveyorLine, string DeviceProDataBlock, string Pali) + { + return conveyorLine.Communicator.Write(DeviceProDataBlock, Pali); + } + + public byte GetLine(CommonConveyorLine conveyorLine, string DeviceProDataBlock) + { + return conveyorLine.Communicator.Read<byte>(DeviceProDataBlock); + } + private void LogSignalStatus(string message, string sourceAddress) + { + WriteLog.GetLog("鍫嗗灈鏈轰笌plc浜や簰淇″彿").Write($"绔欏彴缂栧彿锛歿sourceAddress},淇℃伅锛歿message}", $"{sourceAddress}"); + } } } -- Gitblit v1.9.3