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 |  233 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 191 insertions(+), 42 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 5dc3c5f..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;
@@ -64,13 +65,19 @@
 
         public Task Execute(IJobExecutionContext context)
         {
+            
             try
             {
                 CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
-
-                if( conveyorLine != null )
+                if ( conveyorLine != null )
                 {
-                    RequestInbound(conveyorLine);   //鍒ゆ柇宸烽亾鍘诲摢涓贩閬�
+                    if(conveyorLine.DeviceCode == "1002")
+                    {
+                        RequestInbound(conveyorLine);   //涓�妤糃,B鍖轰笟鍔�
+                    }
+                    
+
+
                 }
                 //RequestInNextAddress(conveyorLine);
 
@@ -87,36 +94,88 @@
             return Task.CompletedTask;
         }
 
-        /// <summary>
-        /// 杈撻�佺嚎璇锋眰鍏ュ簱鍒板摢涓贩閬�
-        /// </summary>
-        /// <param name="conveyorLine">杈撻�佺嚎瀹炰緥瀵硅薄</param>
-        /// <param name="command">璇诲彇鐨勮姹備俊鎭�</param>
-        /// <param name="childDeviceCode">瀛愯澶囩紪鍙�</param>
         public void RequestInbound(CommonConveyorLine conveyorLine)
         {
             //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._01_PLC_EVENT"); //鍒ゆ柇鏄惁鍙栫┖鎵�
-            CheckForEmptyPallet(conveyorLine, "PLC_WCS_C._01_PLC_EVENT"); //鍒ゆ柇鏄惁鍙栫┖鎵�
-            ProcessConveyorEvent(conveyorLine, "PLC_WCS_B._01_PLC_EVENT", "PLC_WCS_B._01_PLC_LPN", "R02-003-027-001-01");// 澶勭悊 B 绔欏彴浜嬩欢 //鍒ゆ柇杈撻�佺嚎鍒拌揪淇″彿
-            ProcessConveyorEvent(conveyorLine, "PLC_WCS_C._03_PLC_EVENT", "PLC_WCS_C._03_PLC_LPN", "R01-003-041-001-01");// 澶勭悊 C 绔欏彴浜嬩欢 //鍒ゆ柇杈撻�佺嚎鍒拌揪淇″彿
+            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>
         /// 鐢ㄤ簬鍏ュ簱鍒ゆ柇宸烽亾
@@ -133,23 +192,37 @@
                 if (events == 1)
                 {
                     string barcode = conveyorLine.Communicator.Read<string>(barcodeTag); // 璇诲彇鏉$爜
-                    if ((_taskService.ToPlatform(barcode)).Status)
+                    if(barcode != "1" || barcode != "0")    
                     {
-                        // 鍐欏叆鍘诲悜1鍙峰爢鍨涙満
-                        bool result = conveyorLine.Communicator.Write(writeTag, 1);
+                        if ((_taskService.ToPlatform(barcode)).Status)
+                        {
+                            // 鍐欏叆鍘诲悜2鍙峰爢鍨涙満
+                            bool result = conveyorLine.Communicator.Write(writeTag, (byte)1);   //鍘熸潗鏂欏幓鍚�
+                            if (result)
+                            {   
+                                WriteLog.GetLog("PLC鏃ュ織").Write("鍐欏叆鍘诲悜锛�3", "鍘诲悜");
+                            }
+                        }
+                    }
+
+
+                    if (barcode == "1")
+                    {
+                        // 鍐欏叆鍘诲悜2鍙峰爢鍨涙満
+                        bool result = conveyorLine.Communicator.Write(writeTag, (byte)1);   //绌烘墭鍘诲悜
                         if (result)
                         {
-                            WriteLog.GetLog("PLC鏃ュ織").Write("鍐欏叆鍘诲悜锛�1", "鍘诲悜");
+                            WriteLog.GetLog("PLC鏃ュ織").Write("绌烘墭鍏ュ簱锛屽啓鍏ュ幓鍚戯細1", "鍘诲悜");
                         }
                     }
                     /*else
                     {
-                        // 鍐欏叆鍘诲悜2鍙峰爢鍨涙満
-                        *//*bool result = conveyorLine.Communicator.Write(writeTag, 2);
+                        // 鍐欏叆鍘诲悜1鍙峰爢鍨涙満
+                        bool result = conveyorLine.Communicator.Write(writeTag, (byte)1);
                         if (result)
                         {
                             WriteLog.GetLog("PLC鏃ュ織").Write("鍐欏叆鍘诲悜锛�2", "鍘诲悜");
-                        }*//*
+                        }
 
                         WriteLog.GetLog("PLC鏃ュ織").Write("鍏ュ簱澶辫触", "鍏ュ簱缁勭洏");
                     }*/
@@ -163,34 +236,93 @@
         }
 
         //鐢ㄤ簬鍒ゆ柇鏄惁琛ョ┖鎵�
-        private void CheckForEmptyPallet(CommonConveyorLine conveyorLine,string eventTag)
+        private void CheckForEmptyPallet(CommonConveyorLine conveyorLine,string eventTag, string barcodeTag,string plcput,string Loc)
         {
 
-            Byte events = conveyorLine.Communicator.Read<Byte>(eventTag);  // 璇诲彇浜嬩欢
-            if (events == 0)
+            try
             {
-                WriteLog.GetLog("PLC鏃ュ織").Write($"璇诲彇鍒板嚭搴撳彛琛ョ┖鎵樹俊鍙凤細{events}", "闇�瑕佺┖鎵�");
-                // 鐢熸垚鍫嗗灈鏈哄彇绌烘墭浠诲姟
-                if ((_taskService.RequestWMSTask2(conveyorLine.DeviceCode)).Status)
+                Byte events = conveyorLine.Communicator.Read<Byte>(eventTag);  // 璇诲彇浜嬩欢
+                if (events == 1)        //1涓虹┖锛�0涓烘湁
                 {
-                    WriteLog.GetLog("PLC鏃ュ織").Write($"宸茬敓鎴愮┖鎵樺嚭搴撲换鍔★細{events}", "闇�瑕佺┖鎵�");
+                    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}", "闇�瑕佺┖鎵�");
+                            }
+                        }
+                    }
+                    
+                    
                 }
-                else
-                {
-                    WriteLog.GetLog("PLC鏃ュ織").Write($"鏈敓鎴愮┖鎵樺嚭搴撲换鍔★細{events}", "闇�瑕佺┖鎵�");
-                }
+            }
+            catch (Exception ex)
+            {
+
+                throw;
             }
         }
 
+        //鐢ㄤ簬鍒ゆ柇鏄惁鍑虹┖鎵�
+        private void CheckForEmptyPallet2(CommonConveyorLine conveyorLine, string eventTag, string barcodeTag, string plcput, string Loc)
+        {
+            Byte events = conveyorLine.Communicator.Read<Byte>(eventTag);  // 璇诲彇浜嬩欢
+            if (events == 1)        //1涓虹┖锛�0涓烘湁
+            {
+                string barcode = conveyorLine.Communicator.Read<string>(barcodeTag); // 璇诲彇鏉$爜
+                if (barcode != "1" || barcode != "0")
+                {
+                    WriteLog.GetLog("PLC鏃ュ織鍑哄簱鏃ュ織").Write($"璇诲彇鍒板師鏉愭枡鍑哄簱淇℃伅锛屾潯鐮佷俊鎭細{barcode}", "鍘熸潗鏂欏嚭搴�");
+
+                    byte outCount = conveyorLine.Communicator.Read<byte>(plcput);
+                    if ((_taskService.RequestWMSTask3(barcode, outCount,Loc)).Status)
+                    {
+                        //鍐欏叆杈撻�佺嚎娓呴櫎淇℃伅
+                        WriteLog.GetLog("PLC鏃ュ織鍑哄簱鏃ュ織").Write($"宸茬敓鎴愬師鏉愭枡鍑哄簱浠诲姟锛屾潯鐮佷俊鎭細{barcode}", "鍘熸潗鏂欏嚭搴�");
+                    }
+                    else
+                    {
+                        WriteLog.GetLog("PLC鏃ュ織鍑哄簱鏃ュ織").Write($"鏈敓鎴愬師鏉愭枡鍑哄簱浠诲姟锛屾潯鐮佷俊鎭細{barcode}", "鍘熸潗鏂欏嚭搴�");
+                    }
+                }
+            }
+            
+        }
+
         //鐢ㄤ簬鍒ゆ柇鍏ュ簱绔欏彴
-        private void ProcessConveyorEvent(CommonConveyorLine conveyorLine, string eventTag, string barcodeTag, string taskCode)
+        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)
@@ -211,5 +343,22 @@
                 }
             }
         }
+        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