From 78b99e5348592a29ca1393a5e13db619cc4eba56 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期四, 26 十二月 2024 23:40:56 +0800
Subject: [PATCH] 入壳设备增加

---
 wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/AGV/heartbeatRK.cs         |  322 ++++++++++++++++
 wcs-server-hbf/WIDESEA_WCS/JobsPart/AGV/UpdateAgvTaskText.cs           |  106 ++++-
 wcs-server-hbf/WIDESEA_WCS/Jobs/RGV/AluminumCaseJob.cs                 |  174 +++++++++
 wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/AGV/AgvAndEquiWork_JLM.cs  |   56 ++
 wcs-server-hbf/WIDESEA_WCS/Jobs/AGV/JobRK_1209.cs                      |   52 ++
 DB/林洋SQL.sql                                                           |    0 
 wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/Equipment/RKSB_UPTask.cs   |  115 ++++++
 林洋程序包.zip                                                              |    0 
 wcs-server-hbf/WIDESEA_WCS/Config/铝壳缓存架.json                           |   97 +++-
 入壳机信号.png                                                              |    0 
 wcs-server-hbf/WIDESEA_WCS/Jobs/AGV/heartbeatRKJob.cs                  |   35 +
 wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/Equipment/RKSB_DownTask.cs |  128 ++++++
 12 files changed, 1,027 insertions(+), 58 deletions(-)

diff --git "a/DB/\346\236\227\346\264\213SQL.sql" "b/DB/\346\236\227\346\264\213SQL.sql"
index 2f55a44..fe65cbd 100644
--- "a/DB/\346\236\227\346\264\213SQL.sql"
+++ "b/DB/\346\236\227\346\264\213SQL.sql"
Binary files differ
diff --git "a/wcs-server-hbf/WIDESEA_WCS/Config/\351\223\235\345\243\263\347\274\223\345\255\230\346\236\266.json" "b/wcs-server-hbf/WIDESEA_WCS/Config/\351\223\235\345\243\263\347\274\223\345\255\230\346\236\266.json"
index f7e08e2..098b883 100644
--- "a/wcs-server-hbf/WIDESEA_WCS/Config/\351\223\235\345\243\263\347\274\223\345\255\230\346\236\266.json"
+++ "b/wcs-server-hbf/WIDESEA_WCS/Config/\351\223\235\345\243\263\347\274\223\345\255\230\346\236\266.json"
@@ -37,44 +37,44 @@
         "RPLCDB": [ "x=2;8700", "x=2;8701", "x=2;8702", "x=2;8703", "x=2;8704" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
         "WPLCDB": [ "0", "1", "2" ] //榛勭伅,缁跨伅,绾㈢伅
       },
-      {
-        "HCJName": "閾濈洅缂撳瓨鏋�9",
-        "HCJCode": "1F-LKHCJ9",
-        "RPLCDB": [ "x=2;8705", "x=2;8706", "x=2;8707", "x=2;8708", "x=2;8709" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
-        "WPLCDB": [ "3", "4", "5" ] //榛勭伅,缁跨伅,绾㈢伅
-      },
-      {
-        "HCJName": "閾濈洅缂撳瓨鏋�8",
-        "HCJCode": "1F-LKHCJ8",
-        "RPLCDB": [ "x=2;8710", "x=2;8711", "x=2;8712", "x=2;8713", "x=2;8714" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
-        "WPLCDB": [ "6", "7", "8" ] //榛勭伅,缁跨伅,绾㈢伅
-      },
+      //{
+      //  "HCJName": "閾濈洅缂撳瓨鏋�9",
+      //  "HCJCode": "1F-LKHCJ9",
+      //  "RPLCDB": [ "x=2;8705", "x=2;8706", "x=2;8707", "x=2;8708", "x=2;8709" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+      //  "WPLCDB": [ "3", "4", "5" ] //榛勭伅,缁跨伅,绾㈢伅
+      //},
+      //{
+      //  "HCJName": "閾濈洅缂撳瓨鏋�8",
+      //  "HCJCode": "1F-LKHCJ8",
+      //  "RPLCDB": [ "x=2;8710", "x=2;8711", "x=2;8712", "x=2;8713", "x=2;8714" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+      //  "WPLCDB": [ "6", "7", "8" ] //榛勭伅,缁跨伅,绾㈢伅
+      //},
 
 
-      {
-        "HCJName": "涓�妤奸殧鑶滃簱3缂撳瓨鏌�6",
-        "HCJCode": "1F-LKHCJ3-6",
-        "RPLCDB": [ "x=2;8715", "x=2;8716", "x=2;8717", "x=2;8718", "x=2;8719" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
-        "WPLCDB": [ "9", "10", "11" ] //榛勭伅,缁跨伅,绾㈢伅
-      },
-      {
-        "HCJName": "涓�妤奸殧鑶滃簱3缂撳瓨鏌�4",
-        "HCJCode": "1F-LKHCJ3-4",
-        "RPLCDB": [ "x=2;8720", "x=2;8721", "x=2;8722", "x=2;8723", "x=2;8724" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
-        "WPLCDB": [ "12", "13", "14" ] //榛勭伅,缁跨伅,绾㈢伅
-      },
-      {
-        "HCJName": "涓�妤奸殧鑶滃簱3缂撳瓨鏌�2",
-        "HCJCode": "1F-LKHCJ3-2",
-        "RPLCDB": [ "x=2;8725", "x=2;8726", "x=2;8727", "x=2;8728", "x=2;8729" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
-        "WPLCDB": [ "15", "16", "17" ] //榛勭伅,缁跨伅,绾㈢伅
-      },
-      {
-        "HCJName": "涓�妤奸殧鑶滃簱3缂撳瓨鏌�8",
-        "HCJCode": "1F-LKHCJ3-8",
-        "RPLCDB": [ "x=2;8730", "x=2;8731", "x=2;8800", "x=2;8801", "x=2;8802" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
-        "WPLCDB": [ "18", "19", "20" ] //榛勭伅,缁跨伅,绾㈢伅
-      },
+      //{
+      //  "HCJName": "涓�妤奸殧鑶滃簱3缂撳瓨鏌�6",
+      //  "HCJCode": "1F-LKHCJ3-6",
+      //  "RPLCDB": [ "x=2;8715", "x=2;8716", "x=2;8717", "x=2;8718", "x=2;8719" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+      //  "WPLCDB": [ "9", "10", "11" ] //榛勭伅,缁跨伅,绾㈢伅
+      //},
+      //{
+      //  "HCJName": "涓�妤奸殧鑶滃簱3缂撳瓨鏌�4",
+      //  "HCJCode": "1F-LKHCJ3-4",
+      //  "RPLCDB": [ "x=2;8720", "x=2;8721", "x=2;8722", "x=2;8723", "x=2;8724" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+      //  "WPLCDB": [ "12", "13", "14" ] //榛勭伅,缁跨伅,绾㈢伅
+      //},
+      //{
+      //  "HCJName": "涓�妤奸殧鑶滃簱3缂撳瓨鏌�2",
+      //  "HCJCode": "1F-LKHCJ3-2",
+      //  "RPLCDB": [ "x=2;8725", "x=2;8726", "x=2;8727", "x=2;8728", "x=2;8729" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+      //  "WPLCDB": [ "15", "16", "17" ] //榛勭伅,缁跨伅,绾㈢伅
+      //},
+      //{
+      //  "HCJName": "涓�妤奸殧鑶滃簱3缂撳瓨鏌�8",
+      //  "HCJCode": "1F-LKHCJ3-8",
+      //  "RPLCDB": [ "x=2;8730", "x=2;8731", "x=2;8800", "x=2;8801", "x=2;8802" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+      //  "WPLCDB": [ "18", "19", "20" ] //榛勭伅,缁跨伅,绾㈢伅
+      //},
       {
         "HCJName": "涓�妤奸殧鑶滃簱3缂撳瓨鏌�7",
         "HCJCode": "1F-LKHCJ3-7",
@@ -140,8 +140,31 @@
         "HCJCode": "1F-LKHCJ1",
         "RPLCDB": [ "x=2;8921", "x=2;8922", "x=2;8923", "x=2;8924", "x=2;8925" ], //榛勮壊鎸夐挳锛岀豢鑹叉寜閽紝绾㈣壊鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
         "WPLCDB": [ "8019", "8020", "8021" ] //榛勭伅,缁跨伅,绾㈢伅
+      },
+      {
+        "HCJName": "鍏ュ3缂撳瓨鏋�1",
+        "HCJCode": "RKHCJ1",
+        "RPLCDB": [ "x=2;8600", "x=2;8601", "x=2;8602" ], //鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+        "WPLCDB": [ "s=2;2", "s=2;1", "s=2;0" ]  //榛勭伅,缁跨伅,绾㈢伅
+      },
+      {
+        "HCJName": "鍏ュ3缂撳瓨鏋�2",
+        "HCJCode": "RKHCJ2",
+        "RPLCDB": [ "x=2;8603", "x=2;8604", "x=2;8605" ], //鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+        "WPLCDB": [ "s=2;5", "s=2;4", "s=2;3" ] //榛勭伅,缁跨伅,绾㈢伅
+      },
+      {
+        "HCJName": "鍏ュ3缂撳瓨鏋�3",
+        "HCJCode": "RKHCJ3",
+        "RPLCDB": [ "x=2;8606", "x=2;8607", "x=2;8608" ], //鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+        "WPLCDB": [ "s=2;8", "s=2;7", "s=2;6" ] //榛勭伅,缁跨伅,绾㈢伅
+      },
+      {
+        "HCJName": "鍏ュ3缂撳瓨鏋�4",
+        "HCJCode": "RKHCJ4",
+        "RPLCDB": [ "x=2;8609", "x=2;8610", "x=2;8611" ], //鎸夐挳锛屾墭鐩樺厜鐢碉紝鐗╂枡鍏夌數
+        "WPLCDB": [ "s=2;11", "s=2;10", "s=2;9" ] //榛勭伅,缁跨伅,绾㈢伅
       }
-      
     ]
 
   }
diff --git a/wcs-server-hbf/WIDESEA_WCS/Jobs/AGV/JobRK_1209.cs b/wcs-server-hbf/WIDESEA_WCS/Jobs/AGV/JobRK_1209.cs
new file mode 100644
index 0000000..721feaf
--- /dev/null
+++ b/wcs-server-hbf/WIDESEA_WCS/Jobs/AGV/JobRK_1209.cs
@@ -0,0 +1,52 @@
+锘縰sing Quartz;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using WIDESEA_Common.Tools;
+
+namespace WIDESEA_WCS
+{
+    /// <summary>
+    /// 鍏ュ3鏈轰笂涓嬫枡璋冨害
+    /// </summary>
+    [DisallowConcurrentExecution]
+    public class JobRK_1209 : IJob
+    {
+        private static int lockObj1 = 0;
+        public Task Execute(IJobExecutionContext context)
+        {
+            if (lockObj1 == 0)
+            {
+                try
+                {
+                    lockObj1 = 1;
+                    Task task = Task.Run(() =>
+                    {
+                        while (true)
+                        {
+                            try
+                            {
+                                WriteLog.GetLog().Write($"寮�濮嬫椂闂达細{DateTime.Now} --------------", $"鍏ュ3鏈轰笂涓嬫枡璋冨害");
+                                StackerExecutor.RKSB_UpTask();    //鍏ュ3鏈轰笂鏂欎换鍔�
+                                StackerExecutor.RKSB_DownTask();  //鍏ュ3鏈轰笅鏂欎换鍔�
+                                WriteLog.GetLog().Write($"缁撴潫鏃堕棿锛歿DateTime.Now} --------------", $"鍏ュ3鏈轰笂涓嬫枡璋冨害");
+                            }
+                            catch { }
+
+                            Thread.Sleep(200);
+                        }
+                    });
+                }
+                catch (Exception ex)
+                {
+                    lockObj1 = 0;
+                    throw new Exception(ex.Message);
+                }
+            }
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git a/wcs-server-hbf/WIDESEA_WCS/Jobs/AGV/heartbeatRKJob.cs b/wcs-server-hbf/WIDESEA_WCS/Jobs/AGV/heartbeatRKJob.cs
new file mode 100644
index 0000000..1f15a07
--- /dev/null
+++ b/wcs-server-hbf/WIDESEA_WCS/Jobs/AGV/heartbeatRKJob.cs
@@ -0,0 +1,35 @@
+锘縰sing Quartz;
+using System;
+using System.Threading.Tasks;
+using WIDESEA_Common.Tools;
+using WIDESEA_WCS.Jobs;
+using WIDESEA_WCS.SchedulerExecute.AGV;
+
+namespace WIDESEA_WCS
+{
+    [DisallowConcurrentExecution]
+    public class heartbeatRKJob : JobBase, IJob
+    {
+        public Task Execute(IJobExecutionContext context)
+        {
+            try
+            {
+                var executeLog = ExecuteJob(context, () => Run(context));
+            }
+            catch (Exception)
+            {
+
+            }
+            return Task.FromResult(string.Empty);
+        }
+        public string Run(IJobExecutionContext context)
+        {
+            try
+            {
+                heartbeatRK.heartbeatWork();//鍏ュ3鏈鸿澶囧拰AGV浜や簰
+            }
+            catch (Exception) { }
+            return "";
+        }
+    }
+}
diff --git a/wcs-server-hbf/WIDESEA_WCS/Jobs/RGV/AluminumCaseJob.cs b/wcs-server-hbf/WIDESEA_WCS/Jobs/RGV/AluminumCaseJob.cs
index bd8839f..e0a83cf 100644
--- a/wcs-server-hbf/WIDESEA_WCS/Jobs/RGV/AluminumCaseJob.cs
+++ b/wcs-server-hbf/WIDESEA_WCS/Jobs/RGV/AluminumCaseJob.cs
@@ -445,6 +445,42 @@
                 doorState_1f_cx += 30;
            
             }
+            //鍏ュ3缂撳瓨鏋�
+            double comErr_rk = 9450.0;//鏄惁鎺夌嚎
+            double doorCode_rk = 9452.0;//缂撳瓨鏋禝D
+            double doorState_rk = 9474.0;//缂撳瓨鏋剁墿鏂欑姸鎬侊紙1锛氱┖浣嶏紝2:绌烘墭鐩橈紝3锛氭弧鎵樼洏锛�
+            var dt_stationinfo_rk = freeDB.Select<dt_stationinfo>().Where(d => d.stationType == "鍏ュ3缂撳瓨鏋�").OrderBy(t => t.sort).ToList();
+            foreach (var item in dt_stationinfo_rk)
+            {
+
+                if (item.connect == true)
+                {
+                    //鎺夌嚎
+                }
+                else
+                {
+                    if (item.tpgd == true && item.wlgd == true)
+                    {
+                        OperateResult W_HCJ_FullState = agvzzplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1003." + doorState_rk, Convert.ToInt16(3));
+                    }
+                    else if (item.tpgd == true && item.wlgd == false)
+                    {
+                        OperateResult W_HCJ_FullState = agvzzplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1003." + doorState_rk, Convert.ToInt16(2));
+                    }
+                    else
+                    {
+                        OperateResult W_HCJ_FullState = agvzzplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1003." + doorState_rk, Convert.ToInt16(1));
+                    }
+                }
+
+                OperateResult W_HCJ_StationCode = agvzzplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1003." + doorCode_rk, item.stationCode.ToString());
+                OperateResult W_HCJ_ComErr = agvzzplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1003." + comErr_rk, item.connect);
+
+                comErr_1f_cx += 30;
+                doorCode_1f_cx += 30;
+                doorState_1f_cx += 30;
+
+            }
         }
 
         private void agvtaskAdd(string agv_remark, string begin, string end,bool communi)
@@ -641,7 +677,7 @@
                         t.LampYellow
                     }).ExecuteAffrows();
                 }
-                else if (stationList.HCJCenterName == "閾濆3缂撳瓨鏋朵竴妤�")
+                else if (stationList.HCJCenterName == "閾濆3缂撳瓨鏋朵竴妤�" && !item.HCJName.Contains("鍏ュ3缂撳瓨鏋�"))
                 {
                     string ButtonResetDB = item.RPLCDB[0];  //澶嶄綅鎸夐挳(榛勮壊)淇″彿鐐逛綅
                     string ButtonEnsureDB = item.RPLCDB[1];//纭鎸夐挳(缁胯壊)淇″彿鐐逛綅
@@ -820,6 +856,142 @@
                         t.LampYellow
                     }).ExecuteAffrows();
                 }
+                else if (stationList.HCJCenterName == "閾濆3缂撳瓨鏋朵竴妤�" && item.HCJName.Contains("鍏ュ3缂撳瓨鏋�"))
+                {
+                    string ButtonEnsureDB = item.RPLCDB[0];//纭鎸夐挳(缁胯壊)淇″彿鐐逛綅
+                    string tpgdstateDB = item.RPLCDB[1];//鎵樼洏鍏夌數鐘舵�佷俊鍙风偣浣�
+                    string wlgdstateDB = item.RPLCDB[2];//鐗╂枡鍏夌數鐘舵�佷俊鍙风偣浣�
+
+                    ////纭鎸夐挳(缁胯壊)
+                    OperateResult<bool> R_TBR_XT = ModbusPLCClient.ReadBool(ButtonEnsureDB);
+                    WriteLog.GetLog().Write($"{item.HCJName}缂撳瓨鏋�,杩炴帴{R_TBR_XT.IsSuccess}", "鍏ュ3缂撳瓨鏋�");
+                    if (!R_TBR_XT.IsSuccess)
+                    {
+                        //Console.WriteLine($"-{ModbusPLCClient.IpAddress}---{station.stationCode}----{ButtonEnsureDB}--------false--{R_TBR_XT.Message}----------------");
+                        station.connect = true;
+                        var stationoff = freeDB.Update(station).UpdateColumns(t => new
+                        {
+                            t.connect
+                        }).ExecuteAffrows();
+                        continue;
+                    }
+                    bool ButtonEnsure = ModbusPLCClient.ReadBool(ButtonEnsureDB).Content;
+                    //鎵樼洏鍏夌數鐘舵��
+                    bool pgdstate = ModbusPLCClient.ReadBool(tpgdstateDB).Content;
+                    //鐗╂枡鍏夌數鐘舵��
+                    bool wlgdstate = ModbusPLCClient.ReadBool(wlgdstateDB).Content;
+
+                    //鏍规嵁璇诲埌鐨凱LC淇℃伅锛岃疆璇㈡洿鏂版暟鎹簱淇℃伅
+                    station.getLastTime = DateTime.Now;
+                    station.greenbutton = ButtonEnsure;
+                    station.tpgd = pgdstate;
+                    station.wlgd = wlgdstate;
+
+                    string LampYellowDB = item.WPLCDB[0];//榛勭伅淇″彿鐐逛綅
+                    string LampGreenDB = item.WPLCDB[1];//缁跨伅淇″彿鐐逛綅
+                    string LampRedDB = item.WPLCDB[2];//绾㈢伅淇″彿鐐逛綅
+                    //璐ф灦瀛樺湪浠诲姟浠诲姟鏃�
+                    if (station.task)
+                    {
+                        if (station.LampYellow)
+                        {
+                            ModbusPLCClient.Write(LampYellowDB, false); //榛勭伅
+                            ModbusPLCClient.Write(LampRedDB, false); //绾㈢伅
+                            ModbusPLCClient.Write(LampGreenDB, false); //缁跨伅
+                                                                       // Console.WriteLine($"{station.stationCode}---浜�---{DateTime.Now}");
+                            station.LampRed = false;
+                            station.LampYellow = false;
+                            station.LampGreen = false;
+
+                        }
+                        else
+                        {
+                            ModbusPLCClient.Write(LampYellowDB, true); //榛勭伅
+                            ModbusPLCClient.Write(LampRedDB, false); //绾㈢伅
+                            ModbusPLCClient.Write(LampGreenDB, false); //缁跨伅
+                                                                       // Console.WriteLine($"{station.stationCode}---鐏�---{DateTime.Now}");
+                            station.LampRed = false;
+                            station.LampYellow = true;
+                            station.LampGreen = false;
+
+                        }
+                    }
+                    else
+                    {
+                        //褰撴湁浜烘寜涓嬬豢鑹叉寜閽椂锛�
+                        //灏嗙紦瀛樻灦鐨勭伅鍏変寒缁跨伅
+                        if (ButtonEnsure && pgdstate && wlgdstate)
+                        {
+                            DateTime date = DateTime.Now;
+                            DateTime time2 = station.greenbuttontime;
+                            Double STAMP = (date - time2).TotalSeconds;
+                            if (STAMP > 4)
+                            {
+                                if (station.LampGreen)
+                                {
+                                    ModbusPLCClient.Write(LampGreenDB, false); //缁跨伅
+                                    station.LampGreen = false;
+
+                                }
+                                else
+                                {
+                                    ModbusPLCClient.Write(LampGreenDB, true); //缁跨伅
+                                    station.LampGreen = true;
+                                }
+
+                                //ModbusPLCClient.Write(LampRedDB, false); //绾㈢伅
+                                ModbusPLCClient.Write(LampYellowDB, false); //榛勭伅
+                                //station.LampRed = false;
+                                station.LampYellow = false;
+                                station.greenbuttontime = DateTime.Now;
+                            }
+                        }
+                        else if (station.LampGreen && (!pgdstate || !wlgdstate))
+                        {
+                            ModbusPLCClient.Write(LampRedDB, false); //绾㈢伅
+                            ModbusPLCClient.Write(LampYellowDB, false); //榛勭伅
+                            ModbusPLCClient.Write(LampGreenDB, false); //缁跨伅
+                            station.LampRed = false;
+                            station.LampYellow = false;
+                            station.LampGreen = false;
+                        }
+                        //妫�娴嬫墭鐩樺厜鐢垫湁鏂欙紝浣嗘湭鎸夌‘璁ゆ寜閽紝浜粍鐏�
+                        else if (!station.LampGreen && pgdstate)
+                        {
+                            // ModbusPLCClient.Write(LampRedDB, false); //绾㈢伅
+                            ModbusPLCClient.Write(LampYellowDB, true); //榛勭伅
+                            ModbusPLCClient.Write(LampGreenDB, false); //缁跨伅
+                                                                       // station.LampRed = false;
+                            station.LampYellow = true;
+                            station.LampGreen = false;
+                        }
+                        else if (!station.LampGreen && !pgdstate && !wlgdstate)
+                        {
+                            ModbusPLCClient.Write(LampRedDB, false); //绾㈢伅
+                            ModbusPLCClient.Write(LampYellowDB, false); //榛勭伅
+                            ModbusPLCClient.Write(LampGreenDB, false); //缁跨伅
+
+                            station.LampRed = false;
+                            station.LampYellow = false;
+                            station.LampGreen = false;
+                        }
+
+                    }
+
+                    station.connect = false;
+
+                    var executeAffrows = freeDB.Update(station).UpdateColumns(t => new
+                    {
+                        t.connect,
+                        t.getLastTime,
+                        t.greenbutton,
+                        t.tpgd,
+                        t.wlgd,
+                        t.LampRed,
+                        t.LampGreen,
+                        t.LampYellow
+                    }).ExecuteAffrows();
+                }
             }
         }
 
diff --git a/wcs-server-hbf/WIDESEA_WCS/JobsPart/AGV/UpdateAgvTaskText.cs b/wcs-server-hbf/WIDESEA_WCS/JobsPart/AGV/UpdateAgvTaskText.cs
index c44cb50..8c37025 100644
--- a/wcs-server-hbf/WIDESEA_WCS/JobsPart/AGV/UpdateAgvTaskText.cs
+++ b/wcs-server-hbf/WIDESEA_WCS/JobsPart/AGV/UpdateAgvTaskText.cs
@@ -211,6 +211,20 @@
                                     WriteLog.GetLog().Write($"浠诲姟鍙凤細{agvTask.agv_tasknum},鍐呭锛氱粓鐐瑰湴鍧�锛歿dt_Stationinfo.stationCode},璐т綅淇敼澶辫触", $"璐т綅淇敼澶辫触");
                                 }
                             }
+                            else if (agvTask.agv_remark.Contains("鍏ュ3涓婃枡浠诲姟"))
+                            {
+                                dt_stationinfo dt_Stationinfo = stationinfoRepository.FindFirst(d => d.stationCode == agvTask.agv_fromaddress);
+                                if (dt_Stationinfo == null)
+                                {
+                                    return;
+                                }
+                                dt_Stationinfo.task = false;
+                                int a = stationinfoRepository.Update(dt_Stationinfo, x => new { x.task }, true);
+                                if (a == 0)
+                                {
+                                    WriteLog.GetLog().Write($"浠诲姟鍙凤細{agvTask.agv_tasknum},鍐呭锛氱粓鐐瑰湴鍧�锛歿dt_Stationinfo.stationCode},璐т綅淇敼澶辫触", $"璐т綅淇敼澶辫触");
+                                }
+                            }
                             #endregion
                             plcClient.WriteValue(TaskDBName.taskFbInteractiveW.ToString(), 1);
                             for (int i = 0; i < 5; i++)
@@ -276,19 +290,22 @@
                                 if (agvTask.agv_fromaddress.Contains("HCJ"))
                                 {
                                     base_ware_location location = locationRepository.FindFirst(x => x.upper_code == agvTask.agv_fromaddress);
-                                    if (!agvTask.agv_remark.Contains("鍒囧嵎涓婃枡鍥炵┖"))
+                                    if (location != null)
                                     {
-                                        location.geartype = "鏆傛棤";
-                                    }
-                                    location.update_time = DateTime.Now;
-                                    location.logic_col = 0;
-                                    location.task = 2;
-                                    location.logic_row = "0";
+                                        if (!agvTask.agv_remark.Contains("鍒囧嵎涓婃枡鍥炵┖"))
+                                        {
+                                            location.geartype = "鏆傛棤";
+                                        }
+                                        location.update_time = DateTime.Now;
+                                        location.logic_col = 0;
+                                        location.task = 2;
+                                        location.logic_row = "0";
 
-                                    int a = locationRepository.Update(location, x => new { x.logic_col, x.task, x.logic_row, x.update_time, x.geartype }, true);
-                                    if (a == 0)
-                                    {
-                                        WriteLog.GetLog().Write($"浠诲姟鍙凤細{agvTask.agv_tasknum},鍐呭锛氱粓鐐瑰湴鍧�锛歿location.upper_code},璐т綅淇敼澶辫触", $"璐т綅淇敼澶辫触");
+                                        int a = locationRepository.Update(location, x => new { x.logic_col, x.task, x.logic_row, x.update_time, x.geartype }, true);
+                                        if (a == 0)
+                                        {
+                                            WriteLog.GetLog().Write($"浠诲姟鍙凤細{agvTask.agv_tasknum},鍐呭锛氱粓鐐瑰湴鍧�锛歿location.upper_code},璐т綅淇敼澶辫触", $"璐т綅淇敼澶辫触");
+                                        }
                                     }
                                 }
                             }
@@ -583,6 +600,20 @@
                                 }
 
                             }
+                            else if (agvTask.agv_remark.Contains("鍏ュ3涓嬫枡浠诲姟"))
+                            {
+                                dt_stationinfo dt_Stationinfo = stationinfoRepository.FindFirst(d => d.stationCode == agvTask.agv_toaddress);
+                                if (dt_Stationinfo == null)
+                                {
+                                    return;
+                                }
+                                dt_Stationinfo.task = false;
+                                int a = stationinfoRepository.Update(dt_Stationinfo, x => new { x.task }, true);
+                                if (a == 0)
+                                {
+                                    WriteLog.GetLog().Write($"浠诲姟鍙凤細{agvTask.agv_tasknum},鍐呭锛氱粓鐐瑰湴鍧�锛歿dt_Stationinfo.stationCode},璐т綅淇敼澶辫触", $"璐т綅淇敼澶辫触");
+                                }
+                            }
                             #endregion
                             plcClient.WriteValue(TaskDBName.taskFbInteractiveW.ToString(), 1);
                             for (int i = 0; i < 5; i++)
@@ -691,22 +722,57 @@
                                 }
 
                             }
+                            else if (agvTask.agv_remark.Contains("鍏ュ3涓嬫枡浠诲姟"))
+                            {
+                                dt_stationinfo dt_Stationinfo = stationinfoRepository.FindFirst(d => d.stationCode == agvTask.agv_toaddress);
+                                if (dt_Stationinfo != null)
+                                {
+                                    dt_Stationinfo.task = false;
+                                    int a = stationinfoRepository.Update(dt_Stationinfo, x => new { x.task }, true);
+                                    if (a == 0)
+                                    {
+                                        WriteLog.GetLog().Write($"浠诲姟鍙凤細{agvTask.agv_tasknum},鍐呭锛氱粓鐐瑰湴鍧�锛歿dt_Stationinfo.stationCode},璐т綅淇敼澶辫触", $"璐т綅淇敼澶辫触");
+                                    }
+                                }
+                            }
                             else
                             {
                                 base_ware_location location = locationRepository.FindFirst(x => x.upper_code == agvTask.agv_toaddress);
-                                location.logic_col = 0;
-                                location.logic_row = "0";
-                                location.task = 2;
-                                locationRepository.Update(location, x => new { x.logic_col, x.logic_row, x.task }, true);
+                                if (location!=null)
+                                {
+                                    location.logic_col = 0;
+                                    location.logic_row = "0";
+                                    location.task = 2;
+                                    locationRepository.Update(location, x => new { x.logic_col, x.logic_row, x.task }, true);
+                                }
                             }
                         }
                         else if (agvTask.agv_toaddress.Contains("SB") && agvTask.agv_fromaddress.Contains("HCJ"))
                         {
-                            base_ware_location location = locationRepository.FindFirst(x => x.upper_code == agvTask.agv_fromaddress);
-                            location.logic_col = 0;
-                            location.logic_row = "0";
-                            location.task = 2;
-                            locationRepository.Update(location, x => new { x.logic_col, x.logic_row, x.task }, true);
+                            if (agvTask.agv_remark.Contains("鍏ュ3涓婃枡浠诲姟"))
+                            {
+                                dt_stationinfo dt_Stationinfo = stationinfoRepository.FindFirst(d => d.stationCode == agvTask.agv_fromaddress);
+                                if (dt_Stationinfo != null)
+                                {
+                                    dt_Stationinfo.task = false;
+                                    int a = stationinfoRepository.Update(dt_Stationinfo, x => new { x.task }, true);
+                                    if (a == 0)
+                                    {
+                                        WriteLog.GetLog().Write($"浠诲姟鍙凤細{agvTask.agv_tasknum},鍐呭锛氱粓鐐瑰湴鍧�锛歿dt_Stationinfo.stationCode},璐т綅淇敼澶辫触", $"璐т綅淇敼澶辫触");
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                base_ware_location location = locationRepository.FindFirst(x => x.upper_code == agvTask.agv_fromaddress);
+                                if (location != null)
+                                {
+                                    location.logic_col = 0;
+                                    location.logic_row = "0";
+                                    location.task = 2;
+                                    locationRepository.Update(location, x => new { x.logic_col, x.logic_row, x.task }, true);
+                                }
+                            }
                         }
                         else if (agvTask.agv_toaddress.Contains("HCJ") && agvTask.agv_fromaddress.Contains("HCJ"))
                         {
diff --git a/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/AGV/AgvAndEquiWork_JLM.cs b/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/AGV/AgvAndEquiWork_JLM.cs
index c87d749..d6554dc 100644
--- a/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/AGV/AgvAndEquiWork_JLM.cs
+++ b/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/AGV/AgvAndEquiWork_JLM.cs
@@ -2,10 +2,12 @@
 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
+using WIDESEA_Common;
 using WIDESEA_Common.Tools;
 using WIDESEA_Core.Utilities;
 using WIDESEA_Services.Services;
 using WIDESEA_WCS.WCSClient;
+using static FreeSql.Internal.GlobalFilter;
 
 namespace WIDESEA_WCS.SchedulerExecute.AGV
 {
@@ -17,12 +19,18 @@
         public static void AgvAndEquiWork_JLM()
         {
             PLCClient agvjrplc = WCSService.Clients.Find(v => v.PLCName == "缁勮AGV璋冨害");
+            PLCClient oiplc1F = WCSService.Clients.Find(v => v.PLCName == PLCConst.PLCName1FLKHCJ);
 
             #region 鏃犵嚎io妯″潡 104鍗风粫涓帶 寮�闂ㄤ俊鍙蜂紶閫�
             int comErr = 0;//鑷姩闂ㄦ帀绾�  "鎷嗗寘闂村嵎甯橀棬139", "娑傚竷姝h礋鏋佸嵎甯橀棬142",
             double doorCode = 2.0; //鑷姩闂↖D
             double doorState = 24.0;//鑷姩闂ㄧ姸鎬侊紝1闂ㄥ叧鍒颁綅锛�2 闂ㄥ紑鍒颁綅锛�3闂ㄦ湭鍒颁綅
             double doorOpen = 26.0; //鑷姩闂ㄦ帶鍒跺紑
+
+            int RKErr = 450;//鑷姩闂ㄦ帀绾�
+            double RKCode = 452.0; //鑷姩闂↖D
+            double RKState = 474.0;//鑷姩闂ㄧ姸鎬侊紝1闂ㄥ叧鍒颁綅锛�2 闂ㄥ紑鍒颁綅锛�3闂ㄦ湭鍒颁綅
+            double RKOpen = 476.0; //鑷姩闂ㄦ帶鍒跺紑
             try
             {
                 if (agvjrplc == null)
@@ -113,6 +121,54 @@
                     doorState += 30;
                     doorOpen += 30;
                 }
+                //鍏ュ3鍗峰笜闂� 24/12/12鏂板
+                OperateResult<bool> R_RKOpen = agvjrplc.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1004." + RKOpen);
+                if (!R_RKOpen.IsSuccess)
+                {
+                    return;
+                }
+                //AGV璇锋眰寮�闂�
+                if (R_RKOpen.Content)
+                {
+                    OperateResult RKOpenJLM = oiplc1F.ModbusPLCClient.ModbusTcpNetClient.Write("s=2;12",true);
+                    if (RKOpenJLM.IsSuccess)
+                    {
+                        OperateResult<bool> JLMOpen = oiplc1F.ModbusPLCClient.ModbusTcpNetClient.ReadBool("x=2;8612");
+                        if (JLMOpen.Content)//寮�闂ㄥ埌浣�
+                        {
+                            OperateResult W_stationDockSteps = agvjrplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1004." + (RKState), 2);
+                        }
+                        else//闂ㄦ湭鍒颁綅
+                        {
+                            OperateResult W_stationDockSteps = agvjrplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1004." + (RKState), 3);
+                        }
+                    }
+                    else
+                    {
+                        OperateResult W_stationDockSteps = agvjrplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1004." + (RKErr), true);
+                    }
+                }
+                else
+                {
+                    //AGV涓嶇粰寮�闂ㄤ俊鍙风殑鏃跺�� 鏂紑寮�闂ㄤ俊鍙�
+                    OperateResult RKOpenJLM = oiplc1F.ModbusPLCClient.ModbusTcpNetClient.Write("s=2;12", false);
+                    if (RKOpenJLM.IsSuccess)
+                    {
+                        OperateResult<bool> JLMOpen = oiplc1F.ModbusPLCClient.ModbusTcpNetClient.ReadBool("x=2;8613");
+                        if (JLMOpen.Content)//鍏抽棬鍒颁綅
+                        {
+                            OperateResult W_stationDockSteps = agvjrplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1004." + (RKState), 1);
+                        }
+                        else//闂ㄦ湭鍒颁綅
+                        {
+                            OperateResult W_stationDockSteps = agvjrplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1004." + (RKState), 3);
+                        }
+                    }
+                    else
+                    {
+                        OperateResult W_stationDockSteps = agvjrplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1004." + (RKErr), true);
+                    }
+                }
             }
             catch (Exception ex)
             {
diff --git a/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/AGV/heartbeatRK.cs b/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/AGV/heartbeatRK.cs
new file mode 100644
index 0000000..1dcb806
--- /dev/null
+++ b/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/AGV/heartbeatRK.cs
@@ -0,0 +1,322 @@
+锘縰sing HslCommunication;
+using NetTaste;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using WIDESEA_Common.Tools;
+using WIDESEA_Core.EFDbContext;
+using WIDESEA_Services.IRepositories;
+using WIDESEA_Services.Repositories;
+using WIDESEA_WCS.WCSClient;
+
+namespace WIDESEA_WCS.SchedulerExecute.AGV
+{
+    public partial class heartbeatRK
+    {
+        private static int lockObj1 = 0;
+        public static void heartbeatWork()
+        {
+            if (lockObj1 == 0)
+            {
+                lockObj1 = 1;
+                {
+                    string rksb = "鍏ュ3鏈�1";
+                    //蹇冭烦
+                    Task.Run(() =>
+                    {
+
+                        while (true)
+                        {
+                            try
+                            {
+                                Thread.Sleep(200);
+                                if (WCSService.Clients == null)
+                                {
+                                    continue;
+                                }
+                                PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb);
+                                if (rkplc == null)
+                                {
+                                    continue;
+                                }
+
+                                PLCClient agvplc = WCSService.Clients.Find(v => v.PLCName == "缁勮AGV璋冨害");
+                                if (agvplc == null)
+                                {
+                                    continue;
+                                }
+                                #region 鍏ュ3鏈轰竴鍙峰績璺�
+                                WriteLog.GetLog().Write($"--------------{rksb}蹇冭烦浼犻�掑紑濮�,鏃堕棿锛歿DateTime.Now}--------------{Environment.NewLine}", $"{rksb}蹇冭烦浼犻��");
+                                // 璇诲彇鍏ュ3鏈�1鍙疯澶囧績璺�
+                                bool R_RK1_XT =Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5300").Content);
+
+                                // 鍏ュ3鏈�1鍙疯澶囧績璺斥�斿啓鍏モ�斻�嬬粍瑁匒GV璋冨害蹇冭烦
+                                OperateResult W_AGV_XT = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3600.0", R_RK1_XT);
+                                
+                                // 璇诲彇缁勮AGV璋冨害蹇冭烦
+                                OperateResult<bool> R_AGV_XT = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.3700.0");
+
+                                Int16 readValue = Convert.ToInt16(R_AGV_XT.Content);
+                                // 缁勮AGV璋冨害鈥斿啓鍏モ�斻�嬪叆澹虫満1鍙疯澶囧績璺�
+                                OperateResult W_RK1_XT = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5300", readValue);
+                                
+                                WriteLog.GetLog().Write($"--------------{rksb}蹇冭烦浼犻�掔粨鏉�,鏃堕棿锛歿DateTime.Now}--------------{Environment.NewLine}", $"{rksb}蹇冭烦浼犻��");
+                                #endregion
+                            }
+                            catch (Exception ex) { }
+                        }
+
+                    });
+                    //涓婃枡鍙�
+                    Task.Run(() =>
+                    {
+                        while (true)
+                        {
+                            try
+                            {
+                                if (WCSService.Clients == null)
+                                {
+                                    continue;
+                                }
+                                PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb);
+                                if (rkplc == null)
+                                {
+                                    continue;
+                                }
+
+                                PLCClient agvplcZZ = WCSService.Clients.Find(v => v.PLCName == "缁勮AGV璋冨害");
+                                if (agvplcZZ == null)
+                                {
+                                    continue;
+                                }
+                                #region 涓婃枡鍙�
+                                WriteLog.GetLog().Write($"{rksb}涓婃枡鍙d俊鎭紶閫掑紑濮�,鏃堕棿锛歿DateTime.Now} --------------{Environment.NewLine}", $"{rksb}涓婃枡鍙d俊鎭紶閫�");
+                                //鍏ュ3鏈�1鍙锋姤璀�
+                                bool GYC_RBJ =Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5302").Content);
+                                // AGV鑾峰彇鍏ュ3鏈�1鍙锋姤璀︿俊鍙�
+                                OperateResult AGVC_WBJ = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3692", GYC_RBJ);
+                                // AGV鎶ヨ淇″彿
+                                OperateResult<bool> AGVC_RBJ = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.3792");
+                                Int16 RBJ = Convert.ToInt16(AGVC_RBJ.Content);
+                                //鍏ュ3鏈�1鍙疯幏鍙朅GV鎶ヨ淇″彿
+                                OperateResult GFC_WBJ = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5304", RBJ);
+                                //璇诲彇agv涓婃枡鍙i�昏緫
+                                OperateResult<Int16> R_up_bzR = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.3790");
+                                //鍐欏叆鍏ュ3鏈�1鍙蜂笂鏂欏彛瀵规帴娴佺▼姝ラ
+                                OperateResult W_ProcessStep_up = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5307", R_up_bzR.Content);
+                                //璇诲彇鍏ュ3鏈�1鍙锋搴�
+                                OperateResult<Int16> R_ProcessSteps_up = rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5306");
+                                //灏嗘搴忓啓鍏gv
+                                OperateResult W_stationDockSteps_up = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3690", R_ProcessSteps_up.Content);
+                                WriteLog.GetLog().Write($"{rksb}涓婃枡鍙d俊鎭紶閫掔粨鏉�,鏃堕棿锛歿DateTime.Now}--------------{Environment.NewLine}", $"{rksb}涓婃枡鍙d俊鎭紶閫�");
+                                #endregion
+                            }
+                            catch (Exception ex)
+                            {
+
+                            }
+                            Thread.Sleep(200);
+                        }
+                    });
+                    //涓嬫枡鍙�
+                    Task.Run(() =>
+                    {
+                        while (true)
+                        {
+                            try
+                            {
+                                if (WCSService.Clients == null)
+                                {
+                                    continue;
+                                }
+                                PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb);
+                                if (rkplc == null)
+                                {
+                                    continue;
+                                }
+                                PLCClient agvplc = WCSService.Clients.Find(v => v.PLCName == "缁勮AGV璋冨害");
+                                if (agvplc == null)
+                                {
+                                    continue;
+                                }
+                                #region 涓嬫枡鍙�
+                                //鍏ュ3鏈�1鍙峰彛鎶ヨ
+                                WriteLog.GetLog().Write($"{rksb}涓嬫枡鍙d俊鎭紶閫掑紑濮�,鏃堕棿锛歿DateTime.Now}--------------{Environment.NewLine}", $"{rksb}涓嬫枡鍙d俊鎭紶閫�");
+                                //鍏ュ3鏈�1鍙锋姤璀�
+                                bool GYC_RBJ = Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5302").Content);
+                                // AGV鑾峰彇鍏ュ3鏈�1鍙锋姤璀︿俊鍙�
+                                OperateResult AGV_WBJ = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3892", GYC_RBJ);
+                                // AGV鎶ヨ淇″彿
+                                OperateResult<bool> AGV_RBJ = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.3992");
+                                int RBJ = Convert.ToInt32(AGV_RBJ.Content);
+                                //鍏ュ3鏈�1鍙疯幏鍙朅GV鎶ヨ淇″彿
+                                OperateResult GFC_WBJ = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5304", RBJ);
+                                // 璇诲彇agv涓嬫枡鍙h姹傝繘鍏�
+                                OperateResult<Int16> R_Down1_bzR = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.3990");
+                                // 鍐欏叆鍏ュ3鏈�1鍙蜂笅鏂欏彛AGV璇锋眰杩涘叆
+                                OperateResult W_ProcessSteps1 = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5309", R_Down1_bzR.Content);
+                                // 璇诲彇鍏ュ3鏈�1鍙蜂笅鏂欏彛鏄惁鍏佽AGV璇锋眰杩涘叆
+                                OperateResult<Int16> R_ProcessSteps1 = rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5308");
+                                OperateResult W_stationDockSteps1 = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3890", R_ProcessSteps1.Content);
+                                WriteLog.GetLog().Write($"{rksb}涓嬫枡鍙d俊鎭紶閫掔粨鏉�,鏃堕棿锛歿DateTime.Now}--------------{Environment.NewLine}", $"{rksb}涓嬫枡鍙d俊鎭紶閫�");
+                                #endregion
+                            }
+                            catch (Exception ex) { }
+                            Thread.Sleep(200);
+                        }
+                    });
+                }
+
+                {
+                    string rksb = "鍏ュ3鏈�2";
+                    //蹇冭烦
+                    Task.Run(() =>
+                    {
+
+                        while (true)
+                        {
+                            try
+                            {
+                                Thread.Sleep(200);
+                                if (WCSService.Clients == null)
+                                {
+                                    continue;
+                                }
+                                PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb);
+                                if (rkplc == null)
+                                {
+                                    continue;
+                                }
+
+                                PLCClient agvplc = WCSService.Clients.Find(v => v.PLCName == "缁勮AGV璋冨害");
+                                if (agvplc == null)
+                                {
+                                    continue;
+                                }
+                                #region 鍏ュ3鏈轰簩鍙峰績璺�
+                                WriteLog.GetLog().Write($"--------------{rksb}蹇冭烦浼犻�掑紑濮�,鏃堕棿锛歿DateTime.Now} --------------{Environment.NewLine}", $"{rksb}蹇冭烦浼犻��");
+                                // 璇诲彇鍏ュ3鏈�2鍙疯澶囧績璺�
+                                bool R_RK2_XT = Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5300").Content);
+
+                                // 鍏ュ3鏈�2鍙疯澶囧績璺斥�斿啓鍏モ�斻�嬬粍瑁匒GV璋冨害蹇冭烦
+                                OperateResult W_AGV_XT = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4000.0", R_RK2_XT);
+
+                                // 璇诲彇缁勮AGV璋冨害蹇冭烦
+                                OperateResult<bool> R_AGV_XT = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.4100.0");
+
+                                Int16 readValue = Convert.ToInt16(R_AGV_XT.Content);
+                                // 缁勮AGV璋冨害鈥斿啓鍏モ�斻�嬪叆澹虫満2鍙疯澶囧績璺�
+                                OperateResult W_RK2_XT = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5300", readValue);
+
+                                WriteLog.GetLog().Write($"--------------{rksb}蹇冭烦浼犻�掔粨鏉�,鏃堕棿锛歿DateTime.Now} --------------{Environment.NewLine}", $"{rksb}蹇冭烦浼犻��");
+                                #endregion
+                            }
+                            catch (Exception ex) { }
+                        }
+
+                    });
+                    //涓婃枡鍙�
+                    Task.Run(() =>
+                    {
+                        while (true)
+                        {
+                            try
+                            {
+                                if (WCSService.Clients == null)
+                                {
+                                    continue;
+                                }
+                                PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb);
+                                if (rkplc == null)
+                                {
+                                    continue;
+                                }
+
+                                PLCClient agvplcZZ = WCSService.Clients.Find(v => v.PLCName == "缁勮AGV璋冨害");
+                                if (agvplcZZ == null)
+                                {
+                                    continue;
+                                }
+                                #region 涓婃枡鍙�
+                                WriteLog.GetLog().Write($"-------------- {rksb}涓婃枡鍙d俊鎭紶閫掑紑濮�,鏃堕棿锛歿DateTime.Now} --------------{Environment.NewLine}", $"{rksb}涓婃枡鍙d俊鎭紶閫�");
+                                //鍏ュ3鏈�2鍙锋姤璀�
+                                bool GYC_RBJ = Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5302").Content);
+                                // AGV鑾峰彇鍏ュ3鏈�2鍙锋姤璀︿俊鍙�
+                                OperateResult AGVC_WBJ = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4092", GYC_RBJ);
+                                // AGV鎶ヨ淇″彿
+                                OperateResult<bool> AGVC_RBJ = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.4192");
+                                Int16 RBJ = Convert.ToInt16(AGVC_RBJ.Content);
+                                //鍏ュ3鏈�2鍙疯幏鍙朅GV鎶ヨ淇″彿
+                                OperateResult GFC_WBJ = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5304", RBJ);
+                                //璇诲彇agv涓婃枡鍙i�昏緫
+                                OperateResult<Int16> R_up_bzR = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.4190");
+                                //鍐欏叆鍏ュ3鏈�2鍙蜂笂鏂欏彛瀵规帴娴佺▼姝ラ
+                                OperateResult W_ProcessStep_up = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5307", R_up_bzR.Content);
+                                //璇诲彇鍏ュ3鏈�2鍙锋搴�
+                                OperateResult<Int16> R_ProcessSteps_up = rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5306");
+                                //灏嗘搴忓啓鍏gv
+                                OperateResult W_stationDockSteps_up = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4090", R_ProcessSteps_up.Content);
+                                WriteLog.GetLog().Write($"-------------- {rksb}涓婃枡鍙d俊鎭紶閫掔粨鏉�,鏃堕棿锛歿DateTime.Now} -------------- {Environment.NewLine}", $"{rksb}涓婃枡鍙d俊鎭紶閫�");
+                                #endregion
+                            }
+                            catch (Exception ex)
+                            {
+
+                            }
+                            Thread.Sleep(200);
+                        }
+                    });
+                    //涓嬫枡鍙�
+                    Task.Run(() =>
+                    {
+                        while (true)
+                        {
+                            try
+                            {
+                                if (WCSService.Clients == null)
+                                {
+                                    continue;
+                                }
+                                PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb);
+                                if (rkplc == null)
+                                {
+                                    continue;
+                                }
+
+                                PLCClient agvplc = WCSService.Clients.Find(v => v.PLCName == "缁勮AGV璋冨害");
+                                if (agvplc == null)
+                                {
+                                    continue;
+                                }
+                                #region 涓嬫枡鍙�
+                                WriteLog.GetLog().Write($"{rksb}涓嬫枡鍙d俊鎭紶閫掑紑濮�,鏃堕棿锛歿DateTime.Now} --------------{Environment.NewLine}", $"{rksb}涓嬫枡鍙d俊鎭紶閫�");
+                                //鍏ュ3鏈�2鍙锋姤璀�
+                                bool GYC_RBJ = Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5302").Content);
+                                // AGV鑾峰彇鍏ュ3鏈�2鍙锋姤璀︿俊鍙�
+                                OperateResult AGV_WBJ = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4292", GYC_RBJ);
+                                // AGV鎶ヨ淇″彿
+                                OperateResult<bool> AGV_RBJ = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.4392");
+                                int RBJ = Convert.ToInt32(AGV_RBJ.Content);
+                                //鍏ュ3鏈�2鍙疯幏鍙朅GV鎶ヨ淇″彿
+                                OperateResult GFC_WBJ = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5304", RBJ);
+                                // 璇诲彇agv涓嬫枡鍙h姹傝繘鍏�
+                                OperateResult<Int16> R_Down1_bzR = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.4390");
+                                // 鍐欏叆鍏ュ3鏈�2鍙蜂笅鏂欏彛AGV璇锋眰杩涘叆
+                                OperateResult W_ProcessSteps1 = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5309", R_Down1_bzR.Content);
+                                // 璇诲彇鍏ュ3鏈�2鍙蜂笅鏂欏彛鏄惁鍏佽AGV璇锋眰杩涘叆
+                                OperateResult<Int16> R_ProcessSteps1 = rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5308");
+                                OperateResult W_stationDockSteps1 = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4290", R_ProcessSteps1.Content);
+                                WriteLog.GetLog().Write($"{rksb}涓嬫枡鍙d俊鎭紶閫掔粨鏉�,鏃堕棿锛歿DateTime.Now} --------------{Environment.NewLine}", $"{rksb}涓嬫枡鍙d俊鎭紶閫�");
+                                #endregion
+                            }
+                            catch (Exception ex) { }
+                            Thread.Sleep(200);
+                        }
+                    });
+                }
+            }
+        }
+    }
+}
diff --git a/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/Equipment/RKSB_DownTask.cs b/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/Equipment/RKSB_DownTask.cs
new file mode 100644
index 0000000..59d8e8c
--- /dev/null
+++ b/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/Equipment/RKSB_DownTask.cs
@@ -0,0 +1,128 @@
+锘縰sing Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using WIDESEA_Common;
+using WIDESEA_Common.LoctionEnum;
+using WIDESEA_Common.Tools;
+using WIDESEA_Core.EFDbContext;
+using WIDESEA_Core.Utilities;
+using WIDESEA_Entity.DomainModels;
+using WIDESEA_Services.IRepositories;
+using WIDESEA_Services.Repositories;
+using WIDESEA_WCS.WCSClient;
+
+namespace WIDESEA_WCS
+{
+    public partial class StackerExecutor
+    {
+        private static int _readRKSB_Down = 0;
+        /// <summary>
+        /// 璐熸瀬娑傚竷涓嬫枡宸ヤ綔閫昏緫
+        /// </summary>
+        /// <param name="client"></param>
+        public static void RKSB_DownTask()
+        {
+            if (Interlocked.Exchange(ref _readRKSB_Down, 1) == 0)
+            {
+                Task.Run(() =>
+                {
+                    try
+                    {
+                        VOLContext Context = new VOLContext();
+                        Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context);
+                        Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+                        Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context);
+                        List<string> RKSBS = new List<string> { "鍏ュ3鏈�1", "鍏ュ3鏈�2" };
+                        //寰幆澶勭悊娑傚竷璁惧涓嬫枡璇锋眰
+                        foreach (var RKSB in RKSBS)
+                        {
+                            if (WCSService.Clients == null)
+                            {
+                                return;
+                            }
+                            PLCClient plc = WCSService.Clients.Find(v => v.PLCName == RKSB);
+                            if (plc == null)
+                            {
+                                continue;
+                            }
+                            string SB_Up_Location = "XL-RKSB" + RKSB.Replace("鍏ュ3鏈�", "");//鎷兼帴鍏ュ3涓嬫枡鍙�
+                            string equipType = "RKSB" + RKSB.Replace("鍏ュ3鏈�", "");//璁惧
+                            //鑾峰彇褰撳墠鍏ュ3璁惧鏄惁鏈変笅鏂橝GV浠诲姟
+                            var SBtask = agvRepository.FindFirst(f => f.agv_fromaddress == SB_Up_Location);
+                            //鏈夌粨鏉熸湰娆″惊鐜�
+                            if (SBtask != null) { continue; }
+                            //鑾峰彇褰撳墠璁惧鐨勪笅鏂欒姹�
+                            int requestRKDown = plc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5308").Content;
+                            if (requestRKDown==4)
+                            {
+                                #region 璁板綍涓嬫枡璇锋眰淇″彿
+                                WriteLog.GetLog().Write($"{plc.PLCName}涓嬫枡璇锋眰锛歿requestRKDown}---{DateTime.Now}", $"鍏ュ3鏈轰笅鏂欒姹�");
+                                #endregion
+                                //鎵惧埌瀵瑰簲缂撳瓨鏋惰揣浣嶏紝骞剁‘璁ょ┖妗�
+                                dt_stationinfo location = stationinfoRepository.Find(x => x.area == equipType && x.tpgd == false 
+                                && x.wlgd == false && x.task == false).OrderBy(x => x.greenbuttontime).FirstOrDefault();
+                                if (location != null)
+                                {
+                                    WebResponseContent content = new WebResponseContent();
+                                    locRepository.DbContextBeginTransaction(() =>
+                                    {
+                                        //鐢熸垚娑傚竷鏈轰笅鏂欎换鍔�
+                                        dt_agvtask agvtask = new dt_agvtask()
+                                        {
+                                            agv_id = Guid.NewGuid(),
+                                            agv_tasknum = "KH-" + IdenxManager.GetTaskNo(),
+                                            agv_fromaddress = SB_Up_Location,//浠ヨ澶囪捣鐐�
+                                            agv_toaddress = location.stationCode,
+                                            agv_code = "缁勮AGV璋冨害",
+                                            agv_remark = "鍏ュ3涓嬫枡浠诲姟",
+                                            agv_taskstate = AGVTaskStateEnum.Create.ToString(),
+                                            agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(),
+                                            agv_worktype = 1,//宸ヤ綔绫诲瀷
+                                            agv_materielid = "",
+                                            agv_qty = 1,
+                                            agv_createtime = DateTime.Now,
+                                            agv_grade = 0,//浠诲姟浼樺厛绾�
+                                            agv_userid = "WCS",
+                                            agv_barcode = "",
+                                        };
+                                        location.task = true;
+                                        var entry = locRepository.DbContext.ChangeTracker.Entries<base_ware_location>().FirstOrDefault();
+                                        if (entry != null)
+                                        {
+                                            entry.State = EntityState.Detached;
+                                        }
+                                        int x = locRepository.Update(location, d => new { d.task}, true);
+                                        if (x == 1)
+                                        {
+                                            agvRepository.Add(agvtask, true);
+                                            return content.OK();
+                                        }
+                                        else
+                                        {
+                                            return content.Error();
+                                        }
+
+                                    });
+                                }
+                            }
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        WriteLog.GetLog().Write($"鍏ュ3鏈轰笅鏂欙細{DateTime.Now} --------------{ex}", $"鍏ュ3鏈轰笅鏂欒皟搴rror");
+                    }
+                    finally
+                    {
+
+                        Interlocked.Exchange(ref _readRKSB_Down, 0);
+                    }
+                });
+
+            }
+        }
+
+    }
+}
diff --git a/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/Equipment/RKSB_UPTask.cs b/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/Equipment/RKSB_UPTask.cs
new file mode 100644
index 0000000..0fc651d
--- /dev/null
+++ b/wcs-server-hbf/WIDESEA_WCS/SchedulerExecute/Equipment/RKSB_UPTask.cs
@@ -0,0 +1,115 @@
+锘縰sing Microsoft.CodeAnalysis;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using WIDESEA_Common;
+using WIDESEA_Common.LoctionEnum;
+using WIDESEA_Common.Tools;
+using WIDESEA_Core.EFDbContext;
+using WIDESEA_Entity.DomainModels;
+using WIDESEA_Services.IRepositories;
+using WIDESEA_Services.Repositories;
+using WIDESEA_WCS.WCSClient;
+
+namespace WIDESEA_WCS
+{
+    public partial class StackerExecutor
+    {
+        private static int _readRKSB_Up = 0;
+        /// <summary>
+        /// 鍏ュ3鏈轰笂鏂�
+        /// </summary>
+        /// <param name="client"></param>
+        public static void RKSB_UpTask()
+        {
+            if (Interlocked.Exchange(ref _readRKSB_Up, 1) == 0)
+            {
+                Task.Run(() =>
+                {
+                    try
+                    {
+                        VOLContext Context = new VOLContext();
+                        Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context);
+                        Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
+                        Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context);
+                        List<string> RKSBS = new List<string> { "鍏ュ3鏈�1", "鍏ュ3鏈�2"};
+                        //寰幆澶勭悊鍏ュ3鏈鸿澶囦笂鏂欒姹�
+                        foreach (var RKSB in RKSBS)
+                        {
+                            if (WCSService.Clients == null)
+                            {
+                                return;
+                            }
+                            PLCClient plc = WCSService.Clients.Find(v => v.PLCName == RKSB);
+                            if (plc == null)
+                            {
+                                continue;
+                            }
+                            string SB_Up_Location = "SL-RKSB" + RKSB.Replace("鍏ュ3鏈�", "");//鎷兼帴鍏ュ3涓婃枡鍙�
+                            string equipType = "RKSB" + RKSB.Replace("鍏ュ3鏈�", "");//璁惧
+                            //鑾峰彇褰撳墠鍏ュ3璁惧鏄惁鏈変笂鏂橝GV浠诲姟
+                            var SBtask = agvRepository.FindFirst(f => f.agv_toaddress == SB_Up_Location);
+                            //鏈夌粨鏉熸湰娆″惊鐜�
+                            if (SBtask != null) { continue; }
+                            //鑾峰彇褰撳墠璁惧鐨勪笂鏂欒姹�
+                            int requestRKUP = plc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5306").Content;
+                            if (requestRKUP==4)
+                            {
+                                //鎵惧埌瀵瑰簲缂撳瓨鏋惰揣浣嶏紝骞剁‘璁ゆ湁鏂�
+                                dt_stationinfo location = stationinfoRepository.Find(x=>x.area== equipType && x.greenbutton == true 
+                                && x.tpgd == true && x.wlgd == true && x.task == false).OrderBy(x=>x.greenbuttontime).FirstOrDefault();
+                                if (location != null)
+                                {
+                                    #region 璁板綍涓婃枡璇锋眰淇″彿
+                                    WriteLog.GetLog().Write($"{plc.PLCName}涓婃枡璇锋眰锛歿requestRKUP}---{DateTime.Now}", $"鍏ュ3鏈轰笂鏂欒姹�");
+                                    #endregion
+                                    //鐢熸垚鍏ュ3鏈轰笂鏂欎换鍔�
+                                    dt_agvtask agvtask = new dt_agvtask()
+                                    {
+                                        agv_id = Guid.NewGuid(),
+                                        agv_tasknum = "KH-" + IdenxManager.GetTaskNo(),
+                                        agv_fromaddress = location.stationCode,
+                                        agv_toaddress = SB_Up_Location,
+                                        agv_code = "缁勮AGV璋冨害",
+                                        agv_remark = "鍏ュ3涓婃枡浠诲姟",
+                                        agv_taskstate = AGVTaskStateEnum.Create.ToString(),
+                                        agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(),
+                                        agv_worktype = 1,//宸ヤ綔绫诲瀷
+                                        agv_materielid = "",
+                                        agv_qty = 1,
+                                        agv_createtime = DateTime.Now,
+                                        agv_grade = 0,//浠诲姟浼樺厛绾�
+                                        agv_userid = "WCS",
+                                        agv_barcode = "",
+                                    };
+                                    location.task = true;
+                                    int changeCount = locRepository.Update(location, d => new { d.task }, true);
+                                    if (changeCount == 1)
+                                    {
+                                        agvRepository.Add(agvtask, true);
+                                    }
+                                    break;
+                                }
+                            }
+
+
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        WriteLog.GetLog().Write($"鍏ュ3鏈轰笂鏂欙細{DateTime.Now} --------------{ex}", $"鍏ュ3鏈轰笂鏂欒皟搴rror");
+                    }
+                    finally
+                    {
+                        Interlocked.Exchange(ref _readRKSB_Up, 0);
+                    }
+                });
+
+            }
+        }
+
+    }
+}
diff --git "a/\345\205\245\345\243\263\346\234\272\344\277\241\345\217\267.png" "b/\345\205\245\345\243\263\346\234\272\344\277\241\345\217\267.png"
new file mode 100644
index 0000000..cbb3df9
--- /dev/null
+++ "b/\345\205\245\345\243\263\346\234\272\344\277\241\345\217\267.png"
Binary files differ
diff --git "a/\346\236\227\346\264\213\347\250\213\345\272\217\345\214\205.zip" "b/\346\236\227\346\264\213\347\250\213\345\272\217\345\214\205.zip"
new file mode 100644
index 0000000..291643f
--- /dev/null
+++ "b/\346\236\227\346\264\213\347\250\213\345\272\217\345\214\205.zip"
Binary files differ

--
Gitblit v1.9.3