aux
czw
2025-06-23 82e5d2df096e55f1142106657668b87c8cfedda3
aux
2个文件已添加
12个文件已修改
3067 ■■■■■ 已修改文件
2025年6月12日/AuxAllWCS/AutoThread.cs 1369 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/AuxAllWCS.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Build/Project/AuxAllWCS.csproj 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Build/Project/代码/VS自定义类/AutoThread.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Build/Project/代码/ViewModel.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Build/Project/代码/界面事件.cs 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Build/Project/代码/自定义类.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Devices/PlcConfig 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Devices/设备通信.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Net/Conn.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/RunTime/Code/VS自定义类/AutoThread.cs 1369 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/RunTime/Code/自定义类.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Scripts/Custom.json 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Scripts/Script.json 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/AutoThread.cs
New file
@@ -0,0 +1,1369 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using GZ.Modular.Redis;
using GZ.DB.Entity.OIDATABASE;
using GZ.DB.IRepository.OIDATABASE;
using GZ.DB.Repository.OIDATABASE;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using System.Windows.Interop;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
namespace GZ.Projects.AuxAllWCS
{
    public partial class AutoThread
    {
        private static AutoThread _instance;
        // ç§æœ‰æž„造函数防止外部实例化
        private AutoThread() { }
        public static AutoThread Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new AutoThread();
                }
                return _instance;
            }
        }
        // çº¿ç¨‹å®‰å…¨çš„委托缓存
        private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();
        // æ–¹æ³•执行器
        public static object InvokeMethod(object instance, string methodName, params object[] args)
        {
            var cacheKey = $"{instance.GetType().FullName}_{methodName}";
            if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))
            {
                // èŽ·å–æ–¹æ³•ä¿¡æ¯
                var methodInfo = instance.GetType().GetMethod(
                    methodName,
                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                if (methodInfo == null)
                    throw new MissingMethodException($"Method {methodName} not found");
                // åˆ›å»ºå§”托并缓存
                methodDelegate = Delegate.CreateDelegate(
                    GetDelegateType(methodInfo),
                    instance,
                    methodInfo);
                _methodCache.TryAdd(cacheKey, methodDelegate);
            }
            // æ‰§è¡Œå§”托
            return methodDelegate.DynamicInvoke(args);
        }
        // æ ¹æ®æ–¹æ³•签名生成对应的委托类型
        private static Type GetDelegateType(MethodInfo methodInfo)
        {
            var parameterTypes = methodInfo.GetParameters()
                .Select(p => p.ParameterType)
                .ToList();
            if (methodInfo.ReturnType == typeof(void))
            {
                return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());
            }
            else
            {
                parameterTypes.Add(methodInfo.ReturnType);
                return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());
            }
        }
        /// <summary>
        /// é…ç½®åˆå§‹åŒ–。
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="action"></param>
        public void ThreadSettingInit(Tag tag, Action action)
        {
            Console.WriteLine("初始化配置 çº¿ç¨‹ run " + tag.Global.SettingsOver);
            if (tag.Global.SettingsOver == 0)
            {
                action?.Invoke();
                tag.Global.SettingsOver = 1;
            }
            else if (Settings.deviceInfos.Count == 0)
            {
                tag.Global.SettingsOver = 0;
            }
        }
        /// <summary>
        /// æ·é¡º1 ä¿¡å·å¤„理
        /// </summary>
        /// <param name="tag"></param>
        public void ThreadJS1(Tag tag)
        {
            Console.WriteLine($"ThreadJS1 æ·é¡º1 ä¿¡å·å¤„理 =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == "Js捷顺1");
            if (VERX != null)
            {
                if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)
                {
                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                    {
                        requestType = 4,
                        endBit = VERX.location[0]
                    }));
                    LogHelper.Info($"{VERX.location[0]}申请mes任务结果{str}");
                    if (str.Contains("true"))
                    {
                        //tag.Js1.D1212_LAST = 1;
                        RedisHelper.Add($"Js捷顺1.D1212_LAST", "1", out string msg);
                    }
                }
                if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)
                {
                    //tag.Js1.D1212_LAST = 0;
                    RedisHelper.Add($"Js捷顺1.D1212_LAST", "0", out string msg);
                }
                if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)
                {
                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                    {
                        requestType = 4,
                        endBit = VERX.location[1]
                    }));
                    LogHelper.Info($"{VERX.location[1]}申请mes任务结果{str}");
                    if (str.Contains("true"))
                    {
                        //tag.Js1.D1213_LAST = 1;
                        RedisHelper.Add($"Js捷顺1.D1213_LAST", "1", out string msg);
                    }
                }
                if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)
                {
                    //tag.Js1.D1213_LAST = 0;
                    RedisHelper.Add($"Js捷顺1.D1213_LAST", "0", out string msg);
                }
            }
        }
        /// <summary>
        /// æ·é¡º2 ä¿¡å·å¤„理
        /// </summary>
        /// <param name="tag"></param>
        public void ThreadJS2(Tag tag)
        {
            Console.WriteLine($"ThreadJS2 æ·é¡º2 ä¿¡å·å¤„理 =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == "Js捷顺2");
            if (VERX != null)
            {
                if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)
                {
                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                    {
                        requestType = 4,
                        endBit = VERX.location[0]
                    }));
                    LogHelper.Info($"{VERX.location[0]}申请mes任务结果{str}");
                    if (str.Contains("true"))
                    {
                        //tag.Js2.D1212_LAST = 1;
                        RedisHelper.Add($"Js捷顺1.D1212_LAST", "1", out string msg);
                    }
                }
                if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)
                {
                    //tag.Js2.D1212_LAST = 0;
                    RedisHelper.Add($"Js捷顺1.D1212_LAST", "0", out string msg);
                }
                if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)
                {
                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                    {
                        requestType = 4,
                        endBit = VERX.location[1]
                    }));
                    LogHelper.Info($"{VERX.location[1]}申请mes任务结果{str}");
                    if (str.Contains("true"))
                    {
                        //tag.Js2.D1213_LAST = 1;
                        RedisHelper.Add($"Js捷顺1.D1213_LAST", "1", out string msg);
                    }
                }
                if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)
                {
                    //tag.Js2.D1213_LAST = 0;
                    RedisHelper.Add($"Js捷顺1.D1213_LAST", "0", out string msg);
                }
            }
        }
        /// <summary>
        /// ç»´å¸Œå°”1 å·¦
        /// </summary>
        /// <param name="tag"></param>
        public void Threadwxr1L(Tag tag)
        {
            Console.WriteLine($"Threadwxr1L ç»´å¸Œå°”1 å·¦ =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("1"));
            if (VERX != null)
            {
                if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)
                {
                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
                    {
                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                        {
                            requestType = 1,
                            cntrCode = traycode,
                            startBit = VERX.location[0],
                            endBit = ""
                        }));
                        LogHelper.Info($"{VERX.location[0]}申请mes任务结果{str}");
                        if (str.Contains("true"))
                        {
                            tag.wxr1.R44_LAST = true;
                        }
                    }
                    else
                    {
                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
                    }
                }
                else
                {
                    //TaskRepository ts = new TaskRepository();
                    if (tag.wxr1.R10_LAST) //托盘放置信号。。
                    {
                        if (tag.wxr1.R10)
                        {
                            tag.wxr1.R10_LAST = false;
                        }
                        else
                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
                        {
                            //上报校验。
                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
                            {
                                sceneType = 1,
                                cntrCode = traycode,
                            }));
                            if (str.Contains("true"))
                            {
                                //Conn.默认Redis.SetValue("维希尔抓臂1.R10", "true", "维希尔抓臂1Queue");
                                tag.wxr1.R10 = true;
                                tag.wxr1.R44_LAST = false;
                            }
                            else
                            {
                                //报警。
                            }
                        }
                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
                    }
                }
            }
        }
        /// <summary>
        /// ç»´å¸Œå°”1 å³
        /// </summary>
        /// <param name="tag"></param>
        public void Threadwxr1R(Tag tag)
        {
            Console.WriteLine($"Threadwxr1R ç»´å¸Œå°”1 å³ =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("1"));
            if (VERX != null)
            {
                if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)
                {
                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
                    {
                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                        {
                            requestType = 1,
                            cntrCode = traycode,
                            startBit = VERX.location[1],
                            endBit = ""
                        }));
                        LogHelper.Info($"{VERX.location[1]}申请mes任务结果{str}");
                        if (str.Contains("true"))
                        {
                            tag.wxr1.R46_LAST = true;
                        }
                    }
                    else
                    {
                        TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
                    }
                }
                else
                {
                    if (tag.wxr1.R11_LAST) //托盘放置信号。。
                    {
                        if (tag.wxr1.R11)
                        {
                            tag.wxr1.R11_LAST = false;
                        }
                        else
                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
                        {
                            //上报校验。
                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
                            {
                                sceneType = 1,
                                cntrCode = traycode,
                            }));
                            if (str.Contains("true"))
                            {
                                //Conn.默认Redis.SetValue("维希尔抓臂1.R10", "true", "维希尔抓臂1Queue");
                                tag.wxr1.R11 = true;
                                tag.wxr1.R46_LAST = false;
                            }
                            else
                            {
                                //报警。
                            }
                        }
                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
                    }
                }
            }
        }
        /// <summary>
        /// ç»´å¸Œå°”2 å·¦
        /// </summary>
        /// <param name="tag"></param>
        public void Threadwxr2L(Tag tag)
        {
            Console.WriteLine($"Threadwxr2L ç»´å¸Œå°”2 å·¦ =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("2"));
            if (VERX != null)
            {
                if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)
                {
                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
                    {
                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                        {
                            requestType = 1,
                            cntrCode = traycode,
                            startBit = VERX.location[0],
                            endBit = ""
                        }));
                        LogHelper.Info($"{VERX.location[0]}申请mes任务结果{str}");
                        if (str.Contains("true"))
                        {
                            tag.wxr2.R44_LAST = true;
                        }
                    }
                    else
                    {
                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
                    }
                }
                else
                {
                    if (tag.wxr2.R10_LAST) //托盘放置信号。。
                    {
                        if (tag.wxr2.R10)
                        {
                            tag.wxr2.R10_LAST = false;
                        }
                        else
                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
                        {
                            //上报校验。
                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
                            {
                                sceneType = 1,
                                cntrCode = traycode,
                            }));
                            if (str.Contains("true"))
                            {
                                //Conn.默认Redis.SetValue("维希尔抓臂1.R10", "true", "维希尔抓臂1Queue");
                                tag.wxr2.R10 = true;
                                tag.wxr2.R44_LAST = false;
                            }
                            else
                            {
                                //报警。
                            }
                        }
                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
                    }
                }
            }
        }
        /// <summary>
        /// ç»´å¸Œå°”2 å³
        /// </summary>
        /// <param name="tag"></param>
        public void Threadwxr2R(Tag tag)
        {
            Console.WriteLine($"Threadwxr2R ç»´å¸Œå°”2 å³ =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("2"));
            if (VERX != null)
            {
                if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)
                {
                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
                    {
                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                        {
                            requestType = 1,
                            cntrCode = traycode,
                            startBit = VERX.location[1],
                            endBit = ""
                        }));
                        LogHelper.Info($"{VERX.location[1]}申请mes任务结果{str}");
                        if (str.Contains("true"))
                        {
                            tag.wxr2.R46_LAST = true;
                        }
                    }
                    else
                    {
                        TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
                    }
                }
                else
                {
                    if (tag.wxr2.R11_LAST) //托盘放置信号。。
                    {
                        if (tag.wxr2.R11)
                        {
                            tag.wxr2.R11_LAST = false;
                        }
                        else
                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
                        {
                            //上报校验。
                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
                            {
                                sceneType = 1,
                                cntrCode = traycode,
                            }));
                            if (str.Contains("true"))
                            {
                                //Conn.默认Redis.SetValue("维希尔抓臂1.R10", "true", "维希尔抓臂1Queue");
                                tag.wxr2.R11 = true;
                                tag.wxr2.R46_LAST = false;
                            }
                            else
                            {
                                //报警。
                            }
                        }
                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
                    }
                }
            }
        }
        public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)
        {
            Console.WriteLine($"ThreadTaskRun ä»»åŠ¡ä¸‹å‘ =================> ");
            LogHelper.Info("ThreadTaskRun ä»»åŠ¡ä¸‹å‘");
            ITaskRepository taskservice = new TaskRepository();
            try
            {
                LogHelper.Info("任务下发  ARG ä»»åŠ¡ è¿›å…¥");
                #region AGV任务下发。
                var tklist = taskservice.FindList(x => x.S_B_STATE == "未执行" && x.S_WORK_MODE == "AGV");
                if (tklist.Any())
                    foreach (var tk in tklist.GroupBy(item =>
                    {
                        var ticks = item.T_CREATE.Ticks;
                        return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));
                    }).OrderBy(x => x.Key))
                    {
                        var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();
                        foreach (var t in ts)
                        {
                            var b = false;
                            b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);
                            if (b)
                            {
                                t.S_B_STATE = "已推送";
                                taskservice.Update(t);
                            }
                        }
                        break;
                    }
                //foreach (var tk in tklist.GroupBy(item =>
                //{
                //    var ticks = item.T_CREATE.Ticks;
                //    return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));
                //}).OrderBy(x => x.Key))
                //if (tklist.Any())
                //{
                #endregion
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.Message + ex.StackTrace);
            }
            try
            {
                #region Rgv
                LogHelper.Info($"查看RGV ç”µé‡ï¼šã€{tag.RGV.R当前电量}】 å……电状态:【{tag.RGV.R充电状态}】 æ•…障代码:【{tag.RGV.RgvrunError}】");
                if (tag.RGV.taskend == 125)
                {
                    System.Threading.Thread.Sleep(3000);
                    return;
                }
                LogHelper.Info("任务下发  Rgv ä»»åŠ¡ è¿›å…¥");
                var task1Isrun = false;
                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)
                {
                    task1Isrun = true;
                    //if (tag.RGV.bit1taskOver_LAST == 1)
                    //    RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                }
                var task2Isrun = false;
                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)
                {
                    task2Isrun = true;
                    //if (tag.RGV.bit2taskOver_LAST == 1)
                    //    RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                }
                if (task1Isrun || task2Isrun)
                {
                    string mes = "";
                    if (task1Isrun)
                        mes += tag.RGV.ReadTask1No + "执行中...";
                    if (task2Isrun)
                        mes += tag.RGV.ReadTask2No + "执行中...";
                    LogHelper.Info($"{mes} ä¸èƒ½ä¸‹å‘新任务。");
                    System.Threading.Thread.Sleep(3000);
                    return;
                }
                var thisOver = 0;
                TaskEntity task1 = null;
                TaskEntity task2 = null;
                LogHelper.Info($"查看RGV 1工位任务》");
                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)
                {
                    var taskno = tag.RGV.ReadTask1No;
                    LogHelper.Info($"RGV 1工位任务{tag.RGV.ReadTask1No}");
                    string tno = "TN" + (DateTime.Now.ToString("yy")) + ((taskno.ToString()).PadLeft(8, '0'));
                    task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);
                    LogHelper.Info($"RGV 1工位任务{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST:{tag.RGV.bit1taskOver_LAST}");
                    if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)
                    {
                        if (task1.S_B_STATE != "完成")
                        {
                            thisOver = 1;
                            if (task1.S_B_STATE == "取货完成")
                            {
                                task1.S_B_STATE = "完成";
                                tag.RGV.ReadTask1No = 0;
                            }
                            else
                            {
                                task1.S_B_STATE = "取货完成";
                            }
                            tag.RGV.bit1taskOver = 0;
                            LogHelper.Info($"RGV 1工位任务{task1.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task1.S_B_STATE}");
                            //tag.RGV.bit1taskOver_LAST = 1;
                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "1", out string msg);
                            LogHelper.Info($"RGV 1工位任务写处理");
                            taskservice.Update(task1);
                            LogHelper.Info($"RGV 1工位任务更新。");
                        }
                        else
                        {
                            LogHelper.Info("RGV1工位任务已经完成。");
                        }
                    }
                }
                else if (tag.RGV.ReadTask1No == 0)
                {
                    LogHelper.Info($"RGV 1工位没有任务》");
                }
                LogHelper.Info($"查看RGV 2工位任务》");
                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)
                {
                    var taskno = tag.RGV.ReadTask2No;
                    LogHelper.Info($"RGV 2工位任务{tag.RGV.ReadTask2No}");
                    string tno = "TN" + (DateTime.Now.ToString("yy")) + ((taskno.ToString()).PadLeft(8, '0'));
                    task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);
                    LogHelper.Info($"RGV2工位任务{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST:{tag.RGV.bit2taskOver_LAST}");
                    if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)
                    {
                        if (task2.S_B_STATE != "完成")
                        {
                            thisOver = 2;
                            if (task2.S_B_STATE == "取货完成")
                            {
                                task2.S_B_STATE = "完成";
                                tag.RGV.ReadTask2No = 0;
                            }
                            else
                            {
                                task2.S_B_STATE = "取货完成";
                            }
                            tag.RGV.bit2taskOver = 0;
                            LogHelper.Info($"RGV 2工位任务{task2.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task2.S_B_STATE}");
                            RedisHelper.Add($"RGV.bit2taskOver_LAST", "1", out string msg);
                            LogHelper.Info($"RGV 2工位任务写处理");
                            taskservice.Update(task2);
                            LogHelper.Info($"RGV 2工位任务更新。");
                        }
                        else
                        {
                            LogHelper.Info("RGV2工位任务已经完成。");
                        }
                    }
                }
                else if (tag.RGV.ReadTask2No == 0)
                {
                    LogHelper.Info($"RGV 2工位没有任务》");
                }
                //if (thisOver > 0)
                //{
                //    var v2 = RedisHelper.Get<WriteGroupEntity>("RGVQueue", out string rev);
                //    if (v2 != null)
                //    {
                //        LogHelper.Info($"RGVQueue è¯»åˆ°ç»“æžœ-{JsonConvert.SerializeObject(v2)}  \n ä¸‹å‘前进行清除。");
                //        var b = RedisHelper.Remove("RGVQueue", out rev);
                //    }
                //}
                ///1 æœ‰è´§  å°±2 å–。  1 æ²¡è´§ å°±2 å¸è´§ï¼Œ éƒ½æœ‰è´§  å°±1卸货。 éƒ½æ²¡è´§ å°±1卸
                var tklist = taskservice.FindList(x => x.S_B_STATE == "未执行" && x.S_WORK_MODE == "RGV").OrderBy(x => x.T_CREATE).ToList();
                if (task1 != null && task1.S_B_STATE != "完成") //1有任务
                {
                    if (task2 != null && task2.S_B_STATE != "完成")// 1 æœ‰ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚
                    {
                        LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 ä¹Ÿæœ‰ä»»åŠ¡{task2.S_TASK_NO}。 å¼€å§‹å·¥ä½1 å¸è´§ã€‚");
                        tag.RGV.workMod = 1;
                        tag.RGV.taskmod = 2;
                        tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));
                        tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);
                        System.Threading.Thread.Sleep(750);
                        //RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                        //tag.RGV.taskend = 125;
                        //Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue");
                        LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST å†™ 0");
                        RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                        LogHelper.Info($"{task1.S_TASK_NO}> end å†™ 125");
                        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                    }
                    else //1有任务  2 æ²¡ä»»åŠ¡ã€‚
                    {
                        LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务。");
                        var leftSide = new List<string> { "1023", "1020" };
                        var RightSide = new List<string> { "1002", "1008", "1010", "1016" };
                        bool creT2 = false;
                        // 2号 ä¼˜å…ˆç»™ 1020  1008  1016
                        var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == "1020" || x.S_START_LOC == "1008" || x.S_START_LOC == "1016");
                        if (t2 != null)
                        {
                            LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾1020  1008  1016取货任务{t2.S_TASK_NO}。");
                            tag.RGV.workMod = 2;
                            tag.RGV.taskmod = 1;
                            tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
                            tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
                            t2.S_B_STATE = "已推送";
                            taskservice.Update(t2);
                            creT2 = true;
                            System.Threading.Thread.Sleep(750);
                            LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0");
                            RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                            LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                            Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        }
                        ////2 å¦‚果有同侧取货任务。就取。没有
                        //else if (leftSide.Contains(task1.S_START_LOC))
                        //{
                        //    leftSide.Remove(task1.S_START_LOC);
                        //    var lsde = leftSide.FirstOrDefault();
                        //    t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != "1017");
                        //    if (t2 != null) //同侧取货任务。
                        //    {
                        //        LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务{t2.S_TASK_NO}。");
                        //        tag.RGV.workMod = 2;
                        //        tag.RGV.taskmod = 1;
                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
                        //        t2.S_B_STATE = "已推送";
                        //        taskservice.Update(t2);
                        //        creT2 = true;
                        //        System.Threading.Thread.Sleep(750);
                        //        LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0");
                        //        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                        //        LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                        //        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        //    }
                        //}
                        //else if (RightSide.Contains(task1.S_START_LOC))
                        //{
                        //    RightSide.Remove(task1.S_START_LOC);
                        //    t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != "1017");
                        //    if (t2 != null) //同侧取货任务。
                        //    {
                        //        LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§ 1002,1010 å–货任务{t2.S_TASK_NO}。");
                        //        tag.RGV.workMod = 2;
                        //        tag.RGV.taskmod = 1;
                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
                        //        t2.S_B_STATE = "已推送";
                        //        taskservice.Update(t2);
                        //        creT2 = true;
                        //        System.Threading.Thread.Sleep(750);
                        //        LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 125");
                        //        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                        //        LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                        //        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        //    }
                        //}
                        else //1 ç›´æŽ¥å¸è´§ã€‚
                        //if (!creT2)
                        {
                            LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ²¡æœ‰åŒä¾§å–货任务 1工位卸货。");
                            tag.RGV.workMod = 1;
                            tag.RGV.taskmod = 2;
                            tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));
                            tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);
                            System.Threading.Thread.Sleep(750);
                            LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST å†™ 0");
                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                            LogHelper.Info($"{task1.S_TASK_NO}> taskend å†™ 0");
                            Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        }
                    }
                }
                else
                {
                    if (task2 != null && task2.S_B_STATE != "完成")// 1 æ²¡ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚
                    {
                        LogHelper.Info($"查看RGV 1工位没任务,工位2 æœ‰ä»»åŠ¡{task2.S_TASK_NO}。工位2卸货。。");
                        //2 å¸è´§ã€‚
                        tag.RGV.workMod = 2;
                        tag.RGV.taskmod = 2;
                        tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));
                        tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);
                        System.Threading.Thread.Sleep(750);
                        LogHelper.Info($"{task2.S_TASK_NO}> bit2taskOver_LAST å†™ 0");
                        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                        //tag.RGV.taskend = 125;
                        LogHelper.Info($"{task2.S_TASK_NO}> taskend å†™125");
                        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                    }
                    else if (tklist.Any()) //1mei ä»»åŠ¡  2 æ²¡ä»»åŠ¡ã€‚
                    {
                        LogHelper.Info($"查看RGV 1工位没任务,工位2 ä¹Ÿæ²¡ä»»åŠ¡ã€‚ä¼˜å…ˆ1工位终点1017任务。。");
                        //、下 1017任务 ç»™1号工位。
                        //var lss = tklist.Take(2).ToList();
                        var e1017first = tklist.Find(x => x.S_START_LOC == "1002" || x.S_START_LOC == "1010" || x.S_START_LOC == "1023");
                        //if (e1017first != null)
                        //{
                        //    e1017first = tklist.FirstOrDefault();
                        //}
                        if (e1017first != null)
                        {
                            LogHelper.Info($"查看RGV1 ä»»åŠ¡å·¥ä½2 æ²¡ä»»åŠ¡ã€‚ 1002  1010  1023取货任务{e1017first.S_TASK_NO}。");
                            tag.RGV.workMod = 1;
                            tag.RGV.taskmod = 1;
                            uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));
                            LogHelper.Info($"{e1017first.S_TASK_NO}> è½¬æ¢åŽä»»åŠ¡å·{tno} å¼€å§‹å†™å…¥ã€‚");
                            tag.RGV.taskno1 = tno;
                            LogHelper.Info($"{e1017first.S_TASK_NO}>开始写入 task1do>>{e1017first.S_START_LOC}。");
                            tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);
                            LogHelper.Info($"{e1017first.S_TASK_NO}> æ›´æ–°ä»»åŠ¡ã€‚");
                            e1017first.S_B_STATE = "已推送";
                            taskservice.Update(e1017first);
                            System.Threading.Thread.Sleep(750);
                            LogHelper.Info($"{e1017first.S_TASK_NO}> bit1taskOver_LAST å†™0");
                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                            LogHelper.Info($"{e1017first.S_TASK_NO}> taskend å†™125");
                            //tag.RGV.taskend=125
                            Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        }
                        else
                        {
                            var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == "1020" || x.S_START_LOC == "1008" || x.S_START_LOC == "1016");
                            if (tklist != null)
                            {
                                LogHelper.Info($"查看RGV1 æ²¡ä»»åŠ¡å·¥ä½2 æ²¡ä»»åŠ¡ã€‚ æ‰¾1020  1008  1016取货任务{t2.S_TASK_NO}。");
                                tag.RGV.workMod = 2;
                                tag.RGV.taskmod = 1;
                                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
                                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
                                t2.S_B_STATE = "已推送";
                                taskservice.Update(t2);
                                System.Threading.Thread.Sleep(750);
                                LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0");
                                RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                                LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                                Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                            }
                        }
                    }
                }
                LogHelper.Info($"rgv å¤„理完成。taskend 125");
                #endregion
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.Message + ex.StackTrace);
            }
        }
        public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)
        {
            Console.WriteLine($"ThreadGrats å…‰æ …处理 =================> ");
            var taskCOdes = new List<string> { "Sarrive", "Srelease", "Earrive", "Erelease" };
            TaskActRepository taskActRepository = new TaskActRepository();
            TaskRepository taskRepository = new TaskRepository();
            var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);
            foreach (var item in requires)
            {
                var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);
                if (tin == -1)
                {
                    item.N_CREATEMETHOD = -1;
                    taskActRepository.Update(item);
                    continue;
                }
                //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);
                string loc = "";
                if (tin < 2)
                {
                    loc = item.S_START_LOC;
                }
                else
                {
                    loc = item.S_END_LOC;
                }
                if (loc == null) continue; else loc = loc.Trim();
                bool goin = tin % 2 == 0;
                bool continuuuuu = false;
                var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));
                if (dev != null)
                {
                    var V = dev.location.ToList().FindIndex(x => x == loc) == 0;
                    //车走了  å¼€å…‰æ …
                    if (!goin)
                    {
                        if (dev.deviceType == 1)
                        {
                            LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚" + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "R02" : "R04"), "true", dev.deviceName + "Queue"));
                            Conn.默认Redis.SetValue(dev.deviceName + "." + (V ? "R02" : "R04"), "true", dev.deviceName + "Queue");
                        }
                        else if (dev.deviceType == 2)
                        {
                            LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚" + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "D1222" : "D1223"), "1", dev.deviceName + "Queue"));
                            Conn.默认Redis.SetValue(dev.deviceName + "." + (V ? "D1222" : "D1223"), "1", dev.deviceName + "Queue");
                        }
                        item.N_CREATEMETHOD = 1;
                        taskActRepository.Update(item);
                    }
                    //车要进入交互。
                    else
                    {
                        if (dev.deviceType == 1)
                        {
                            var tf = Conn.默认Redis.GetValue(dev.deviceName + "." + (V ? "R50" : "R52"));//读关闭状态
                            if (tf?.ToLower() == "true")
                            {
                                LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼");
                                continuuuuu = true;
                            }
                            else
                            {
                                LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚" + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "R01" : "R03"), "true", dev.deviceName + "Queue"));
                                Conn.默认Redis.SetValue(dev.deviceName + "." + (V ? "R01" : "R03"), "true", dev.deviceName + "Queue");
                            }
                        }
                        else if (dev.deviceType == 2)
                        {
                            var tf = Conn.默认Redis.GetValue(dev.deviceName + ".D1202");
                            int numm = int.Parse(string.IsNullOrEmpty(tf) ? "0" : tf);
                            if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)
                            {
                                LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼");
                                continuuuuu = true;
                            }
                            else
                            {
                                LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚" + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "D1220" : "D1221"), dev.deviceName + "Queue"));
                                Conn.默认Redis.SetValue(dev.deviceName + "." + (V ? "D1220" : "D1221"), "1", dev.deviceName + "Queue");
                            }
                        }
                    }
                }
                if (continuuuuu)
                {
                    LogHelper.Info($"{item.S_TASK_NO}{item.S_ACTION_CODE} è½¦è¾†å‘送继续任务!");
                    continueTask?.Invoke(new HaiKangOrderInfo
                    {
                        reqCode = item.S_ID.Replace("-", ""),
                        taskCode = item.S_TASK_NO
                    });
                    item.N_CREATEMETHOD = 1;
                    taskActRepository.Update(item);
                }
            }
            System.Threading.Thread.Sleep(3000);
            //重置信号
            foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))
            {
                var tf = Conn.默认Redis.GetValue(dev.deviceName + ".D1202");
                int numm = int.Parse(string.IsNullOrEmpty(tf) ? "0" : tf);
                if (TcpServer.GetBitdata(numm, 0) == 0)
                {
                    Conn.默认Redis.SetValue(dev.deviceName + ".D1220", "0", dev.deviceName + "Queue");
                    Conn.默认Redis.SetValue(dev.deviceName + ".D1222", "0", dev.deviceName + "Queue");
                }
                else if (TcpServer.GetBitdata(numm, 1) == 0)
                {
                    Conn.默认Redis.SetValue(dev.deviceName + ".D1221", "0", dev.deviceName + "Queue");
                    Conn.默认Redis.SetValue(dev.deviceName + ".D1223", "0", dev.deviceName + "Queue");
                }
            }
        }
        /// <summary>
        /// 1020  1023空框下线
        /// </summary>
        /// <param name="tag"></param>
        public void ThreadEdown(Tag tag)
        {
            Console.WriteLine($"ThreadEdown 20 23 = ç©ºä¸‹æ£€æµ‹ =================> ");
            TaskRepository taskRepository = new TaskRepository();
            foreach (var Bssx in new string[] { "1020", "1023" })
            {
                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.R托盘码"), typeof(System.String));
                Console.WriteLine($"{Bssx} ç©ºä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}  ");
                if (RtaskState == 3 && RtaskState_LAST == 0)
                {
                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                    string msg = "";
                    if (task != null)
                    {
                        Console.WriteLine($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        LogHelper.Info($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        continue;
                    }
                    try
                    {
                        var listtep = new List<string>();
                        if (Bssx == "1020")
                        {
                            if (tag.SF下料位.RArrive1003 == 1)
                            {
                                listtep = new List<string> { "1012", "1004" };
                            }
                            else
                            {
                                listtep = new List<string> { "1004", "1012" };
                            }
                        }
                        else
                        {
                            if (tag.SF下料位.RArrive1005 == 1)
                            {
                                listtep = new List<string> { "1014", "1006" };
                            }
                            else
                            {
                                listtep = new List<string> { "1006", "1014" };
                            }
                        }
                        foreach (var item in listtep)//(Bssx == "1020" ? new string[] { "1004", "1012" } : new string[] { "1006", "1014" }))
                        {
                            var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲"), typeof(System.UInt16));
                            var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲_LAST"), typeof(System.UInt16));
                            if (R5 == 5 && R5空闲_LAST == 0 && task == null)
                            {
                                task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                                msg = "";
                                if (task != null)
                                {
                                    Console.WriteLine($" {item}有正在 [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                                    LogHelper.Info($" {item}有正在 [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                                    continue;
                                }
                                var b = TaskProcess.CreateTask("", Bssx, item, "空上RGV", 5, new List<string> { R托盘码 }, "RGV");
                                if (b)
                                {
                                    LogHelper.Debug($"输送线RGV空托任务 from:{Bssx}>to {item}开始创建成功");
                                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
                                    //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
                                    RedisHelper.Add($"S{item}Read.R5空闲_LAST", "1", out msg);
                                    //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "1", $"S{item}ReadQueue");
                                    break;
                                }
                            }
                            else if (R5 != 5 && R5空闲_LAST == 1)
                            {
                                RedisHelper.Add($"S{item}Read.R5空闲_LAST", "0", out msg);
                                //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "0", $"S{item}ReadQueue");
                            }
                        }
                        System.Threading.Thread.Sleep(1000);
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Error(ex.Message, ex);
                        Console.WriteLine(ex.Message + ex.StackTrace);
                    }
                }
                else if (RtaskState != 3 && RtaskState_LAST == 1)
                {
                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
                    //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "0", $"S{Bssx}ReadQueue");
                }
                System.Threading.Thread.Sleep(2000);
            }
            foreach (var item in new string[] { "1004", "1012", "1006", "1014", "1026", "1017" })
            {
                var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲"), typeof(System.UInt16));
                var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲_LAST"), typeof(System.UInt16));
                if (R5 != 5 && R5空闲_LAST == 1)
                {
                    RedisHelper.Add($"S{item}Read.R5空闲_LAST", "0", out string msg);
                    //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "0", $"S{item}ReadQueue");
                }
            }
        }
        public void ThreadDdown(Tag tag)
        {
            Console.WriteLine($"ThreadDdown 08 10 ==================> 1026");
            TaskRepository taskRepository = new TaskRepository();
            foreach (var Bssx in new string[] { "1008", "1016" })
            {
                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.R托盘码"), typeof(System.String));
                Console.WriteLine($"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}");
                if (RtaskState == 3 && RtaskState_LAST == 0)
                {
                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                    string msg = "";
                    if (task != null)
                    {
                        Console.WriteLine($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        LogHelper.Info($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        continue;
                    }
                    var item = "1026";
                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲"), typeof(System.UInt16));
                    var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲_LAST"), typeof(System.UInt16));
                    if (R5 == 5 && R5空闲_LAST == 0)
                    {
                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                        msg = "";
                        if (task != null)
                        {
                            Console.WriteLine($"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                            LogHelper.Info($"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                            continue;
                        }
                        var b = TaskProcess.CreateTask("", Bssx, item, "满转1026", 5, new List<string> { R托盘码 }, "RGV");
                        if (b)
                        {
                            RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
                            RedisHelper.Add($"S{item}Read.R5空闲_LAST", "1", out string msg2);
                            //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
                            //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "1", $"S{item}ReadQueue");
                            break;
                        }
                    }
                    else if (R5 != 5 && R5空闲_LAST == 1)
                    {
                        RedisHelper.Add($"S{item}Read.R5空闲_LAST", "0", out string msg2);
                    }
                }
                else if (RtaskState != 3 && RtaskState_LAST == 1)
                {
                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
                    //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "0", $"S{Bssx}ReadQueue");
                }
                System.Threading.Thread.Sleep(2000);
            }
        }
        public void Thread0210Down(Tag tag)
        {
            Console.WriteLine($"Thread0210Down ==================>");
            TaskRepository taskRepository = new TaskRepository();
            foreach (var Bssx in new string[] { "1002", "1010" })
            {
                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.R托盘码"), typeof(System.String));
                Console.WriteLine($"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}");
                if (RtaskState == 3 && RtaskState_LAST == 0)
                {
                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                    string msg = "";
                    if (task != null)
                    {
                        Console.WriteLine($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        LogHelper.Info($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        continue;
                    }
                    var item = "1017";
                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲"), typeof(System.UInt16));
                    var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲_LAST"), typeof(System.UInt16));
                    if (R5 == 5 && R5空闲_LAST == 0)
                    {
                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                        msg = "";
                        if (task != null)
                        {
                            Console.WriteLine($"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                            LogHelper.Info($"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                            continue;
                        }
                        var b = TaskProcess.CreateTask("", Bssx, item, "满转1017", 5, new List<string> { R托盘码 }, "RGV");
                        if (b)
                        {
                            RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
                            RedisHelper.Add($"S{item}Read.R5空闲_LAST", "1", out string msg1);
                            //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
                            //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "1", $"S{item}ReadQueue");
                            break;
                        }
                    }
                    else if (R5 != 5 && R5空闲_LAST == 1)
                    {
                        RedisHelper.Add($"S{item}Read.R5空闲_LAST", "0", out string msg1);
                    }
                }
                else if (RtaskState != 3 && RtaskState_LAST == 1)
                {
                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
                }
                System.Threading.Thread.Sleep(2000);
            }
        }
        public void Thread下料位检测(Tag tag)
        {
            Console.WriteLine($"Thread下料位检测    =====>");
            foreach (var ssx in new string[] { "1003", "1005", "1011", "1013" })
            {
                var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"FNK1003051113.RArrive{ssx}"), typeof(System.UInt16));
                var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"FNK1003051113.RArrive{ssx}_LAST"), typeof(System.UInt16));
                if (RArrive == 1 && RArriveLast == 0)
                {
                    if (ssx == "1005" && tag.SF下料位.WRelease1005 == 0)
                    {
                        tag.FNK1.D2215 = 1;
                        //tag.SF下料位.RArrive1005_LAST = 1;
                        RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "1", out string msg);
                        //tag.SF下料位.WRelease1005 = 0;
                        //tag.SF下料位.WSafe0305 = 0;
                    }
                    else if (ssx == "1003" && tag.SF下料位.WRelease1003 == 0)
                    {
                        tag.FNK1.D2210 = 1;
                        //tag.SF下料位.RArrive1003_LAST = 1;
                        RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "1", out string msg);
                        //tag.SF下料位.WRelease1003 = 0;
                        //tag.SF下料位.WSafe0305 = 0;
                    }
                    else if (ssx == "1013" && tag.SF下料位.WRelease1013 == 0)
                    {
                        tag.FNK2.D2215 = 1;
                        //tag.SF下料位.RArrive1013_LAST = 1;
                        RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "1", out string msg);
                        //tag.SF下料位.WRelease1013 = 0;
                        //tag.SF下料位.WSafe1113 = 0;
                    }
                    else if (ssx == "1011" && tag.SF下料位.WRelease1011 == 0)
                    {
                        tag.FNK2.D2210 = 1;
                        //tag.SF下料位.RArrive1011_LAST = 1;
                        RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "1", out string msg);
                        //tag.SF下料位.WRelease1011 = 0;
                        //tag.SF下料位.WSafe1113 = 0;
                    }
                }
                else if (RArrive == 0 && RArriveLast == 1)
                {
                    RedisHelper.Add($"FNK1003051113.RArrive{ssx}_LAST", "0", out string msg);
                    //Conn.默认Redis.SetValue($"FNK1003051113.RArrive{ssx}_LAST", "0", $"FNK1003051113Queue");
                }
            }
        }
        public void ThreadFNK1Over(Tag tag)
        {
            Console.WriteLine($"ThreadFNK1Over    =====>");
            if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)
            {
                tag.FNK1.D2215 = 0;
                //tag.FNK1.D2212_LAST = 1;
                RedisHelper.Add($"p发那科1下线.D2217_LAST", "1", out string msg);
                tag.SF下料位.WRelease1005 = 1;
                tag.SF下料位.WSafe0305 = 1;
                System.Threading.Thread.Sleep(1000);
                RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "0", out msg);
            }
            if (tag.FNK1.D2216 == 1)
                tag.FNK1.D2215 = 0;
            else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)
                //tag.FNK1.D2217_LAST = 0;
                RedisHelper.Add($"p发那科1下线.D2217_LAST", "0", out string msg);
            if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)
            {
                tag.FNK1.D2210 = 0;
                //tag.FNK1.D2217_LAST = 1;
                RedisHelper.Add($"p发那科1下线.D2212_LAST", "1", out string msg);
                tag.SF下料位.WRelease1003 = 1;
                tag.SF下料位.WSafe0305 = 1;
                System.Threading.Thread.Sleep(1000);
                RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "0", out msg);
            }
            //else if (tag.FNK1.D2211 == 1)
            //    tag.FNK1.D2210 = 0;
            else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)
            {
                //tag.FNK1.D2212_LAST = 0;
                RedisHelper.Add($"p发那科1下线.D2212_LAST", "0", out string msg);
            }
            if (tag.FNK1.D2211 == 1)
                tag.FNK1.D2210 = 0;
        }
        public void ThreadFNK2Over(Tag tag)
        {
            Console.WriteLine($"ThreadFNK2Over    =====>");
            if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)
            {
                tag.FNK2.D2215 = 0;
                //tag.FNK2.D2212_LAST = 1;
                RedisHelper.Add($"p发那科2下线.D2217_LAST", "1", out string msg);
                tag.SF下料位.WRelease1013 = 1;
                tag.SF下料位.WSafe1113 = 1;
                System.Threading.Thread.Sleep(1000);
                RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "0", out msg);
            }
            else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)
                //tag.FNK2.D2217_LAST = 0;
                RedisHelper.Add($"p发那科2下线.D2217_LAST", "0", out string msg);
            if (tag.FNK2.D2216 == 1)
                tag.FNK2.D2215 = 0;
            if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)
            {
                tag.FNK2.D2210 = 0;
                //tag.FNK2.D2217_LAST = 1;
                RedisHelper.Add($"p发那科2下线.D2212_LAST", "1", out string msg);
                tag.SF下料位.WRelease1011 = 1;
                tag.SF下料位.WSafe1113 = 1;
                System.Threading.Thread.Sleep(1000);
                RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "0", out msg);
            }
            else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)
            {
                //tag.FNK2.D2212_LAST = 0;
                RedisHelper.Add($"p发那科2下线.D2212_LAST", "0", out string msg);
            }
            if (tag.FNK2.D2211 == 1)
                tag.FNK2.D2210 = 0;
        }
        public void Thread1019Down(Tag tag)
        {
            Console.WriteLine($"1019任务状态:   =====>");
            Console.WriteLine($"1019任务状态:{tag.SA1019.RtaskState}- barcode:{tag.SA1019.R托盘码}- ç©ºé—²{tag.SA1019.R5空闲}");
        }
        public void Thread1025Up(Tag tag)
        {
            Console.WriteLine($"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š   =====>");
            Console.WriteLine($"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1025.RtaskState}- ç©ºé—²{tag.SA1025.R5空闲}");
        }
        public void Thread1022Up(Tag tag)
        {
            Console.WriteLine($"SA1022    =====>");
            Console.WriteLine($"SA1022 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1022.RtaskState}- ç©ºé—²{tag.SA1022.R5空闲}");
        }
        public void Thread1030Down(Tag tag)
        {
            Console.WriteLine($"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š   =====>");
            Console.WriteLine($"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1030.RtaskState}- ç©ºé—²{tag.SA1030.R5空闲}-->对应终点2001>空闲5:{tag.SA2001.R5空闲}");
        }
        public void Thread2030Down(Tag tag)
        {
            Console.WriteLine($"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š   =====>");
            Console.WriteLine($"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA2030.RtaskState}- ç©ºé—²{tag.SA2030.R5空闲} - barcode:{tag.SA2030.R托盘码}");
        }
    }
}
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/AuxAllWCS.json
@@ -9,5 +9,5 @@
  "DevelopVersion": "1.0.2.0",
  "Encode": "Ij/zvOgkqNT5SmHrFKCAVQ==",
  "CreationTime": "0001-01-01 00:00:00",
  "LastWriteTime": "2025-06-18 23:06:58"
  "LastWriteTime": "2025-06-23 08:57:03"
}
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/AuxAllWCS.csproj
@@ -2,11 +2,11 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0">
  <PropertyGroup>
    <Platform Condition="'$(Configuration)' == ''">AnyCPU</Platform>
    <OutputType>Exe</OutputType>
    <OutputType>WinExe</OutputType>
    <RootNamespace>GZ.Projects.AuxAllWCS</RootNamespace>
    <AssemblyName>AuxAllWCS</AssemblyName>
    <TargetFrameworkVersion>4.6.1</TargetFrameworkVersion>
    <ProjectGuid>{E1166F09-DED5-4E32-AB55-4DE61A402132}</ProjectGuid>
    <ProjectGuid>{50c6b7fe-daa2-4ebe-8ebe-6f6efc0a213c}</ProjectGuid>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <PlatformTarget>AnyCPU</PlatformTarget>
@@ -26,9 +26,6 @@
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup>
    <StartupObject />
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System">
@@ -198,7 +195,6 @@
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </Page>
    <Compile Include="代码\VS自定义类\AutoThread.cs" />
    <Compile Include="界面\View1.xaml.cs">
      <DependentUpon>View1.xaml</DependentUpon>
      <SubType>Code</SubType>
@@ -212,45 +208,11 @@
    <Compile Include="代码\自定义结构.cs" />
    <Compile Include="代码\自定义类.cs" />
    <Compile Include="代码\VS自定义类\TcpServer.cs" />
    <Compile Include="代码\VS自定义类\AutoThread.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="App.config" />
    <None Include="Static\config.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="Static\js\app.829e775c.js.map">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="Static\js\chunk-vendors.3e768dfe.js.map">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Content Include="Static\css\a.css">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Static\css\app.d545ec97.css">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Static\favicon.ico">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Static\index.html">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Static\js\a.js">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Static\js\app.829e775c.js">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Static\js\chunk-vendors.3e768dfe.js">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Static\W.html">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/VS×Ô¶¨ÒåÀà/AutoThread.cs
@@ -1,4 +1,5 @@
using Newtonsoft.Json;
#region    [自定义类-VS][20250623083459471][AutoThread]
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
@@ -569,7 +570,7 @@
                        mes += tag.RGV.ReadTask2No + "执行中...";
                    LogHelper.Info($"{mes} ä¸èƒ½ä¸‹å‘新任务。");
                    System.Threading.Thread.Sleep(3000);
                    return;
                    return;
                }
                var thisOver = 0;
                TaskEntity task1 = null;
@@ -1367,3 +1368,5 @@
    }
}
#endregion [自定义类-VS][20250623083459471][AutoThread]
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/ViewModel.cs
@@ -28,7 +28,6 @@
using GZ.DB.Repository.OIDATABASE;
using GZ.DB.IRepository.OIDATABASE;
using GZ.DB.Entity.OIDATABASE;
using GZ.Modular.Redis;
namespace GZ.Projects.AuxAllWCS
{
    public partial class ViewModel : System.ComponentModel.INotifyPropertyChanged
@@ -237,9 +236,7 @@
                                        //string V = inde ? "R05" : "R06";
                                        //Conn.默认Redis.SetValue(device2.deviceName + "." + V, "true", device2.deviceName + "Queue");
                                        string V2 = inde ? "R10_LAST" : "R11_LAST";
                                        //Conn.默认Redis.SetValue(device2.deviceName + "." + V2, "true", device2.deviceName + "Queue");
                                        RedisHelper.Add(device2.deviceName + "." + V2, "true", out string msg1);
                                        Conn.默认Redis.SetValue(device2.deviceName + "." + V2, "true", device2.deviceName + "Queue");
                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);
                                    }
                                }
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/½çÃæÊ¼þ.cs
@@ -28,9 +28,6 @@
using GZ.DB.Repository.OIDATABASE;
using GZ.DB.IRepository.OIDATABASE;
using GZ.DB.Entity.OIDATABASE;
using GZ.Modular.Redis;
using System.Security.Cryptography;
using System.Windows.Interop;
namespace GZ.Projects.AuxAllWCS
{
    /// <summary>
@@ -80,29 +77,9 @@
                    try
                    {
                        #region    [脚本][20250323111613779][业务逻辑.初始化配置]
                        //LogHelper.Info("1111 +" + DateTime.Now);
                        //((Type)typeof(Utils)).GetMethod("ThreadSettingInit").Invoke(new Utils(), null);
                        //LogHelper.Info("2222 +" + DateTime.Now);
                        //((Type)typeof(Utils)).GetMethod("ThreadSettingInit").Invoke(new Utils(), new object[] { });
                        //LogHelper.Info("3333 +" + DateTime.Now);
                        Action myDelegate = () => SettingInit();
                        AutoThread.InvokeMethod(AutoThread.Instance, "ThreadSettingInit", new object[] { tag, myDelegate });
                        //LogHelper.Info("4444 +" + DateTime.Now);
                        //AutoThread.InvokeMethod(AutoThread.Instance, "ThreadSettingInit", null);
                        //LogHelper.Info("4444 +" + DateTime.Now);
                        //if (Tag.Global.SettingsOver == 0)
                        //{
                        //    SettingInit();
                        //    Tag.Global.SettingsOver = 1;
                        //}
                        //else if (Settings.deviceInfos.Count == 0)
                        //{
                        //    Tag.Global.SettingsOver = 0;
                        //}
                        //var _=tag.wxr1.R46_LAST;
                        //RedisHelper.Add($"维希尔抓臂1.R46_LAST", "true", out string  msg);
                        #endregion [脚本][20250323111613779][业务逻辑.初始化配置]
                    }
                    catch (Exception ex)
@@ -123,46 +100,45 @@
                try
                {
                    #region    [脚本][20250323151832119][业务逻辑.Program4]
                    //Conn.默认Redis.SetValue("西门子2.Param3","300","西门子2Queue");
                    //return;
                    if (false)
                    {
                        List<string> locs = new List<string>() { "vxr1l", "vx1r", "vxr1c1", "vxr1c2", "vxr2l", "vxr2r", "vxr2c1", "vxr2c2" };
                        List<string> sites = new List<string>() { "196365BB283162", "193841BB283149", "198756BB287300", "198767BB286133", "206987BB282931", "204460BB282975", "209405BB287057", "209377BB285899" };
                    ////Conn.默认Redis.SetValue("西门子2.Param3","300","西门子2Queue");
                    ////return;
                    //if(false){
                    //                    List<string> locs = new List<string>() { "vxr1l", "vx1r", "vxr1c1", "vxr1c2", "vxr2l", "vxr2r", "vxr2c1", "vxr2c2" };
                    //                    List<string> sites = new List<string>() { "196365BB283162", "193841BB283149", "198756BB287300", "198767BB286133", "206987BB282931", "204460BB282975", "209405BB287057", "209377BB285899" };
                        LocRepository locservice = new LocRepository();
                        for (int i = 0; i < locs.Count; i++)
                        {
                            string loccode = locs[i];
                            string sitesss = sites[i];
                            var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);
                            if (loc == null)
                            {
                                locservice.Insert(new LocEntity
                                {
                                    S_ID = Guid.NewGuid().ToString(),
                                    S_STATE = "编辑",
                                    T_CREATE = DateTime.Now,
                                    T_MODIFY = DateTime.Now,
                                    S_DEEP = "vxr",
                    //                    LocRepository locservice = new LocRepository();
                    //                    for (int i = 0; i < locs.Count; i++)
                    //                    {
                    //                        string loccode = locs[i];
                    //                        string sitesss = sites[i];
                    //                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);
                    //                        if (loc == null)
                    //                        {
                    //                            locservice.Insert(new LocEntity
                    //                            {
                    //                                S_ID = Guid.NewGuid().ToString(),
                    //                                S_STATE = "编辑",
                    //                                T_CREATE = DateTime.Now,
                    //                                T_MODIFY = DateTime.Now,
                    //                                S_DEEP = "vxr",
                                    S_LOC_CODE = loccode,
                                    S_AGV_SITE = sitesss,
                    //                                S_LOC_CODE = loccode,
                    //                                S_AGV_SITE = sitesss,
                                    S_LOCK_STATE = "无",
                                    N_ROW = 1,
                                    N_COL = 1,
                                    N_AGV_CODE = 0,
                                    N_AGV_SITE_LAYER = 0,
                                    N_CAPACITY = 1,
                                    N_CURRENT_NUM = 0,
                                    S_TYPE = "",
                    //                                S_LOCK_STATE = "无",
                    //                                N_ROW = 1,
                    //                                N_COL = 1,
                    //                                N_AGV_CODE = 0,
                    //                                N_AGV_SITE_LAYER = 0,
                    //                                N_CAPACITY = 1,
                    //                                N_CURRENT_NUM = 0,
                    //                                S_TYPE = "",
                                });
                            }
                        }
                        // TaskProcess.CreateTask("", locs[6], locs[7], "test", 9, new List<string> { "test" }, 1, 1, 1);
                    }
                    //                            });
                    //                        }
                    //                    }
                    //                   // TaskProcess.CreateTask("", locs[6], locs[7], "test", 9, new List<string> { "test" }, 1, 1, 1);
                    //                   }
                    #endregion [脚本][20250323151832119][业务逻辑.Program4]
                }
@@ -220,10 +196,8 @@
                    try
                    {
                        #region    [脚本][20250325083326611][业务逻辑.第三标段.捷瞬抓臂2]
                        //jsz2捷瞬抓臂2
                        AutoThread.InvokeMethod(AutoThread.Instance, "ThreadJS2", new object[] { tag });
                        #endregion [脚本][20250325083326611][业务逻辑.第三标段.捷瞬抓臂2]
                    }
                    catch (Exception ex)
@@ -314,6 +288,7 @@
                    try
                    {
                        #region    [脚本][20250610002047005][业务逻辑.第三标段.维系尔1号.维希尔抓臂1R]
                        AutoThread.InvokeMethod(AutoThread.Instance, "Threadwxr1R", new object[] { tag });
                        #endregion [脚本][20250610002047005][业务逻辑.第三标段.维系尔1号.维希尔抓臂1R]
                    }
@@ -343,6 +318,7 @@
                    try
                    {
                        #region    [脚本][20250325083315503][业务逻辑.第三标段.维系尔2号.维希尔抓臂2L]
                        AutoThread.InvokeMethod(AutoThread.Instance, "Threadwxr2L", new object[] { tag });
                        #endregion [脚本][20250325083315503][业务逻辑.第三标段.维系尔2号.维希尔抓臂2L]
                    }
@@ -372,6 +348,7 @@
                    try
                    {
                        #region    [脚本][20250610002647095][业务逻辑.第三标段.维系尔2号.维希尔抓臂2R]
                        AutoThread.InvokeMethod(AutoThread.Instance, "Threadwxr2R", new object[] { tag });
                        #endregion [脚本][20250610002647095][业务逻辑.第三标段.维系尔2号.维希尔抓臂2R]
                    }
@@ -386,7 +363,6 @@
                }
                ExitJudgeStack.TryPop(out int exitJudgeVal);
            });
            /// <summary>
            /// ç¨‹åºç‰‡æ®µ:任务下发
            /// æè¿°:
@@ -487,6 +463,7 @@
                        // - å…‰æ …交互处理。。
                        Action<HaiKangOrderInfo> myDelegate = (t) => continueTask(t);
                        AutoThread.InvokeMethod(AutoThread.Instance, "ThreadGrats", new object[] { tag, myDelegate });
                        // å‘那科下料光栅。
                        #endregion [脚本][20250611223832523][业务逻辑.光栅处理]
                    }
@@ -516,6 +493,7 @@
                    try
                    {
                        #region    [脚本][20250616094224396][业务逻辑.流程2热处理炉进出.1020空框下线]
                        //1020  1023 ç©ºæ¡†ä¸‹çº¿
                        AutoThread.InvokeMethod(AutoThread.Instance, "ThreadEdown", new object[] { tag });
                        #endregion [脚本][20250616094224396][业务逻辑.流程2热处理炉进出.1020空框下线]
@@ -575,6 +553,7 @@
                    try
                    {
                        #region    [脚本][20250616094632985][业务逻辑.流程2热处理炉进出.定子满下线]
                        //定子满下线  1008  1016   ->  1026
                        AutoThread.InvokeMethod(AutoThread.Instance, "ThreadDdown", new object[] { tag });
                        #endregion [脚本][20250616094632985][业务逻辑.流程2热处理炉进出.定子满下线]
@@ -605,6 +584,7 @@
                    try
                    {
                        #region    [脚本][20250616094511322][业务逻辑.流程2热处理炉进出.转子满下线]
                        //转子满下线  1002  1010   - RGV2工位不可到 1017 ä¸å¯ä¸‹å‘2工位任务。
                        AutoThread.InvokeMethod(AutoThread.Instance, "Thread0210Down", new object[] { tag });
                        #endregion [脚本][20250616094511322][业务逻辑.流程2热处理炉进出.转子满下线]
@@ -635,6 +615,7 @@
                    try
                    {
                        #region    [脚本][20250616095605911][业务逻辑.流程2热处理炉进出.下料位检测]
                        //下料位检测。  1003  åˆ°ä½æ—¶ å†™ æ ‡è¯†ä¿¡å· å¹¶ ç»™æœºæ¢°æ‰‹ä¿¡å·ã€‚  
                        AutoThread.InvokeMethod(AutoThread.Instance, "Thread下料位检测", new object[] { tag });
                        #endregion [脚本][20250616095605911][业务逻辑.流程2热处理炉进出.下料位检测]
@@ -664,9 +645,8 @@
                    if (IsExitApp) { break; }
                    try
                    {
                        ////2217 - 1003
                        #region    [脚本][20250616095709155][业务逻辑.流程2热处理炉进出.1号FNK机械手完成]
                        AutoThread.InvokeMethod(AutoThread.Instance, "ThreadFNK1Over", new object[] { tag });
                        #endregion [脚本][20250616095709155][业务逻辑.流程2热处理炉进出.1号FNK机械手完成]
                    }
@@ -696,6 +676,7 @@
                    try
                    {
                        #region    [脚本][20250616095733680][业务逻辑.流程2热处理炉进出.2号FNK机械手完成]
                        AutoThread.InvokeMethod(AutoThread.Instance, "ThreadFNK2Over", new object[] { tag });
                        #endregion [脚本][20250616095733680][业务逻辑.流程2热处理炉进出.2号FNK机械手完成]
                    }
@@ -785,6 +766,7 @@
                    try
                    {
                        #region    [脚本][20250617085750712][业务逻辑.流程2热处理炉进出.1022agv上空.Program1]
                        AutoThread.InvokeMethod(AutoThread.Instance, "Thread1022Up", new object[] { tag });
                        #endregion [脚本][20250617085750712][业务逻辑.流程2热处理炉进出.1022agv上空.Program1]
                    }
@@ -814,6 +796,7 @@
                    try
                    {
                        #region    [脚本][20250617085800942][业务逻辑.流程2热处理炉进出.1030下母托.Program1]
                        AutoThread.InvokeMethod(AutoThread.Instance, "Thread1030Down", new object[] { tag });
                        #endregion [脚本][20250617085800942][业务逻辑.流程2热处理炉进出.1030下母托.Program1]
                    }
@@ -843,6 +826,7 @@
                    try
                    {
                        #region    [脚本][20250617085809982][业务逻辑.流程2热处理炉进出.2030输送线下定子.Program1]
                        AutoThread.InvokeMethod(AutoThread.Instance, "Thread2030Down", new object[] { tag });
                        #endregion [脚本][20250617085809982][业务逻辑.流程2热处理炉进出.2030输送线下定子.Program1]
                    }
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/×Ô¶¨ÒåÀà.cs
@@ -28,7 +28,6 @@
using GZ.DB.Repository.OIDATABASE;
using GZ.DB.IRepository.OIDATABASE;
using GZ.DB.Entity.OIDATABASE;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace GZ.Projects.AuxAllWCS
{
    public class Settings
@@ -563,8 +562,8 @@
        #region    [自定义类][20250325152141671][TaskProcess]
        internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = "AGV", int cntrCount = 1, int startLayer = 1, int endLayer = 1)
        {
            LogHelper.Info($"输送线RGV空托任务 from:{from}>to {to}开始创建>");
            LogHelper.Debug($"输送线RGV空托任务 from:{from}>to {to}开始创建>");
            var cntrInfo = string.Join(",", cntrs);
            ILocRepository locc = new LocRepository();
            var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);
@@ -605,6 +604,7 @@
                };
                ITaskRepository taskserice = new TaskRepository();
                taskserice.Insert(wmsTask);
                if (workMode == "AGV")
                {
                    fromLoc.S_LOCK_STATE = "出库锁";
@@ -613,7 +613,7 @@
                    locc.Update(endLoc);
                }
                LogHelper.Info($"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功");
                LogHelper.Debug($"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功");
                return true;
            }
            catch (Exception ex)
@@ -657,12 +657,6 @@
    {
        #region    [自定义类][20250417094750211][Utils]
        public void ThreadSettingInit()
        {
            Console.WriteLine("Utils ThreadSettingInit ");
        }
        #endregion [自定义类][20250417094750211][Utils]
    }
    public class ToWMSMES
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Devices/PlcConfig
@@ -5901,6 +5901,23 @@
          "Reserve1": "",
          "Reserve2": "",
          "Reserve3": ""
        },
        {
          "Id": "20250623084011631",
          "Order": 25,
          "Name": "R手动1自动2",
          "FullName": "RGV.R手动1自动2",
          "DataType": "System.UInt16",
          "DataValue": "",
          "SetValue": "",
          "Address": "DB104.2",
          "AddrType": "",
          "Length": 1,
          "Desc": "0-无效,1-手动,2-联机,3-脱机",
          "Trigger": false,
          "Reserve1": "",
          "Reserve2": "",
          "Reserve3": ""
        }
      ],
      "GroupList": [],
@@ -6769,5 +6786,5 @@
    }
  ],
  "CreationTime": "2025-02-26 15:31:23",
  "LastWriteTime": "2025-06-18 08:31:50"
  "LastWriteTime": "2025-06-23 08:50:40"
}
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Devices/É豸ͨÐÅ.json
@@ -2,5 +2,5 @@
  "ProjectSn": "1",
  "DeviceList": [],
  "CreationTime": "2025-02-26 15:31:23",
  "LastWriteTime": "2025-06-18 08:31:50"
  "LastWriteTime": "2025-06-23 08:51:04"
}
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Net/Conn.json
@@ -340,5 +340,5 @@
    }
  ],
  "CreationTime": "2025-02-26 15:31:23",
  "LastWriteTime": "2025-06-18 08:32:12"
  "LastWriteTime": "2025-06-23 08:57:03"
}
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/RunTime/Code/VS×Ô¶¨ÒåÀà/AutoThread.cs
New file
@@ -0,0 +1,1369 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using GZ.Modular.Redis;
using GZ.DB.Entity.OIDATABASE;
using GZ.DB.IRepository.OIDATABASE;
using GZ.DB.Repository.OIDATABASE;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using System.Windows.Interop;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
namespace GZ.Projects.AuxAllWCS
{
    public partial class AutoThread
    {
        private static AutoThread _instance;
        // ç§æœ‰æž„造函数防止外部实例化
        private AutoThread() { }
        public static AutoThread Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new AutoThread();
                }
                return _instance;
            }
        }
        // çº¿ç¨‹å®‰å…¨çš„委托缓存
        private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();
        // æ–¹æ³•执行器
        public static object InvokeMethod(object instance, string methodName, params object[] args)
        {
            var cacheKey = $"{instance.GetType().FullName}_{methodName}";
            if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))
            {
                // èŽ·å–æ–¹æ³•ä¿¡æ¯
                var methodInfo = instance.GetType().GetMethod(
                    methodName,
                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                if (methodInfo == null)
                    throw new MissingMethodException($"Method {methodName} not found");
                // åˆ›å»ºå§”托并缓存
                methodDelegate = Delegate.CreateDelegate(
                    GetDelegateType(methodInfo),
                    instance,
                    methodInfo);
                _methodCache.TryAdd(cacheKey, methodDelegate);
            }
            // æ‰§è¡Œå§”托
            return methodDelegate.DynamicInvoke(args);
        }
        // æ ¹æ®æ–¹æ³•签名生成对应的委托类型
        private static Type GetDelegateType(MethodInfo methodInfo)
        {
            var parameterTypes = methodInfo.GetParameters()
                .Select(p => p.ParameterType)
                .ToList();
            if (methodInfo.ReturnType == typeof(void))
            {
                return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());
            }
            else
            {
                parameterTypes.Add(methodInfo.ReturnType);
                return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());
            }
        }
        /// <summary>
        /// é…ç½®åˆå§‹åŒ–。
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="action"></param>
        public void ThreadSettingInit(Tag tag, Action action)
        {
            Console.WriteLine("初始化配置 çº¿ç¨‹ run " + tag.Global.SettingsOver);
            if (tag.Global.SettingsOver == 0)
            {
                action?.Invoke();
                tag.Global.SettingsOver = 1;
            }
            else if (Settings.deviceInfos.Count == 0)
            {
                tag.Global.SettingsOver = 0;
            }
        }
        /// <summary>
        /// æ·é¡º1 ä¿¡å·å¤„理
        /// </summary>
        /// <param name="tag"></param>
        public void ThreadJS1(Tag tag)
        {
            Console.WriteLine($"ThreadJS1 æ·é¡º1 ä¿¡å·å¤„理 =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == "Js捷顺1");
            if (VERX != null)
            {
                if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)
                {
                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                    {
                        requestType = 4,
                        endBit = VERX.location[0]
                    }));
                    LogHelper.Info($"{VERX.location[0]}申请mes任务结果{str}");
                    if (str.Contains("true"))
                    {
                        //tag.Js1.D1212_LAST = 1;
                        RedisHelper.Add($"Js捷顺1.D1212_LAST", "1", out string msg);
                    }
                }
                if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)
                {
                    //tag.Js1.D1212_LAST = 0;
                    RedisHelper.Add($"Js捷顺1.D1212_LAST", "0", out string msg);
                }
                if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)
                {
                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                    {
                        requestType = 4,
                        endBit = VERX.location[1]
                    }));
                    LogHelper.Info($"{VERX.location[1]}申请mes任务结果{str}");
                    if (str.Contains("true"))
                    {
                        //tag.Js1.D1213_LAST = 1;
                        RedisHelper.Add($"Js捷顺1.D1213_LAST", "1", out string msg);
                    }
                }
                if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)
                {
                    //tag.Js1.D1213_LAST = 0;
                    RedisHelper.Add($"Js捷顺1.D1213_LAST", "0", out string msg);
                }
            }
        }
        /// <summary>
        /// æ·é¡º2 ä¿¡å·å¤„理
        /// </summary>
        /// <param name="tag"></param>
        public void ThreadJS2(Tag tag)
        {
            Console.WriteLine($"ThreadJS2 æ·é¡º2 ä¿¡å·å¤„理 =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == "Js捷顺2");
            if (VERX != null)
            {
                if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)
                {
                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                    {
                        requestType = 4,
                        endBit = VERX.location[0]
                    }));
                    LogHelper.Info($"{VERX.location[0]}申请mes任务结果{str}");
                    if (str.Contains("true"))
                    {
                        //tag.Js2.D1212_LAST = 1;
                        RedisHelper.Add($"Js捷顺1.D1212_LAST", "1", out string msg);
                    }
                }
                if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)
                {
                    //tag.Js2.D1212_LAST = 0;
                    RedisHelper.Add($"Js捷顺1.D1212_LAST", "0", out string msg);
                }
                if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)
                {
                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                    {
                        requestType = 4,
                        endBit = VERX.location[1]
                    }));
                    LogHelper.Info($"{VERX.location[1]}申请mes任务结果{str}");
                    if (str.Contains("true"))
                    {
                        //tag.Js2.D1213_LAST = 1;
                        RedisHelper.Add($"Js捷顺1.D1213_LAST", "1", out string msg);
                    }
                }
                if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)
                {
                    //tag.Js2.D1213_LAST = 0;
                    RedisHelper.Add($"Js捷顺1.D1213_LAST", "0", out string msg);
                }
            }
        }
        /// <summary>
        /// ç»´å¸Œå°”1 å·¦
        /// </summary>
        /// <param name="tag"></param>
        public void Threadwxr1L(Tag tag)
        {
            Console.WriteLine($"Threadwxr1L ç»´å¸Œå°”1 å·¦ =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("1"));
            if (VERX != null)
            {
                if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)
                {
                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
                    {
                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                        {
                            requestType = 1,
                            cntrCode = traycode,
                            startBit = VERX.location[0],
                            endBit = ""
                        }));
                        LogHelper.Info($"{VERX.location[0]}申请mes任务结果{str}");
                        if (str.Contains("true"))
                        {
                            tag.wxr1.R44_LAST = true;
                        }
                    }
                    else
                    {
                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
                    }
                }
                else
                {
                    //TaskRepository ts = new TaskRepository();
                    if (tag.wxr1.R10_LAST) //托盘放置信号。。
                    {
                        if (tag.wxr1.R10)
                        {
                            tag.wxr1.R10_LAST = false;
                        }
                        else
                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
                        {
                            //上报校验。
                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
                            {
                                sceneType = 1,
                                cntrCode = traycode,
                            }));
                            if (str.Contains("true"))
                            {
                                //Conn.默认Redis.SetValue("维希尔抓臂1.R10", "true", "维希尔抓臂1Queue");
                                tag.wxr1.R10 = true;
                                tag.wxr1.R44_LAST = false;
                            }
                            else
                            {
                                //报警。
                            }
                        }
                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
                    }
                }
            }
        }
        /// <summary>
        /// ç»´å¸Œå°”1 å³
        /// </summary>
        /// <param name="tag"></param>
        public void Threadwxr1R(Tag tag)
        {
            Console.WriteLine($"Threadwxr1R ç»´å¸Œå°”1 å³ =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("1"));
            if (VERX != null)
            {
                if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)
                {
                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
                    {
                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                        {
                            requestType = 1,
                            cntrCode = traycode,
                            startBit = VERX.location[1],
                            endBit = ""
                        }));
                        LogHelper.Info($"{VERX.location[1]}申请mes任务结果{str}");
                        if (str.Contains("true"))
                        {
                            tag.wxr1.R46_LAST = true;
                        }
                    }
                    else
                    {
                        TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
                    }
                }
                else
                {
                    if (tag.wxr1.R11_LAST) //托盘放置信号。。
                    {
                        if (tag.wxr1.R11)
                        {
                            tag.wxr1.R11_LAST = false;
                        }
                        else
                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
                        {
                            //上报校验。
                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
                            {
                                sceneType = 1,
                                cntrCode = traycode,
                            }));
                            if (str.Contains("true"))
                            {
                                //Conn.默认Redis.SetValue("维希尔抓臂1.R10", "true", "维希尔抓臂1Queue");
                                tag.wxr1.R11 = true;
                                tag.wxr1.R46_LAST = false;
                            }
                            else
                            {
                                //报警。
                            }
                        }
                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
                    }
                }
            }
        }
        /// <summary>
        /// ç»´å¸Œå°”2 å·¦
        /// </summary>
        /// <param name="tag"></param>
        public void Threadwxr2L(Tag tag)
        {
            Console.WriteLine($"Threadwxr2L ç»´å¸Œå°”2 å·¦ =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("2"));
            if (VERX != null)
            {
                if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)
                {
                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
                    {
                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                        {
                            requestType = 1,
                            cntrCode = traycode,
                            startBit = VERX.location[0],
                            endBit = ""
                        }));
                        LogHelper.Info($"{VERX.location[0]}申请mes任务结果{str}");
                        if (str.Contains("true"))
                        {
                            tag.wxr2.R44_LAST = true;
                        }
                    }
                    else
                    {
                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
                    }
                }
                else
                {
                    if (tag.wxr2.R10_LAST) //托盘放置信号。。
                    {
                        if (tag.wxr2.R10)
                        {
                            tag.wxr2.R10_LAST = false;
                        }
                        else
                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
                        {
                            //上报校验。
                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
                            {
                                sceneType = 1,
                                cntrCode = traycode,
                            }));
                            if (str.Contains("true"))
                            {
                                //Conn.默认Redis.SetValue("维希尔抓臂1.R10", "true", "维希尔抓臂1Queue");
                                tag.wxr2.R10 = true;
                                tag.wxr2.R44_LAST = false;
                            }
                            else
                            {
                                //报警。
                            }
                        }
                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
                    }
                }
            }
        }
        /// <summary>
        /// ç»´å¸Œå°”2 å³
        /// </summary>
        /// <param name="tag"></param>
        public void Threadwxr2R(Tag tag)
        {
            Console.WriteLine($"Threadwxr2R ç»´å¸Œå°”2 å³ =================> ");
            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("2"));
            if (VERX != null)
            {
                if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)
                {
                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
                    {
                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
                        {
                            requestType = 1,
                            cntrCode = traycode,
                            startBit = VERX.location[1],
                            endBit = ""
                        }));
                        LogHelper.Info($"{VERX.location[1]}申请mes任务结果{str}");
                        if (str.Contains("true"))
                        {
                            tag.wxr2.R46_LAST = true;
                        }
                    }
                    else
                    {
                        TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
                    }
                }
                else
                {
                    if (tag.wxr2.R11_LAST) //托盘放置信号。。
                    {
                        if (tag.wxr2.R11)
                        {
                            tag.wxr2.R11_LAST = false;
                        }
                        else
                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
                        {
                            //上报校验。
                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
                            {
                                sceneType = 1,
                                cntrCode = traycode,
                            }));
                            if (str.Contains("true"))
                            {
                                //Conn.默认Redis.SetValue("维希尔抓臂1.R10", "true", "维希尔抓臂1Queue");
                                tag.wxr2.R11 = true;
                                tag.wxr2.R46_LAST = false;
                            }
                            else
                            {
                                //报警。
                            }
                        }
                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
                    }
                }
            }
        }
        public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)
        {
            Console.WriteLine($"ThreadTaskRun ä»»åŠ¡ä¸‹å‘ =================> ");
            LogHelper.Info("ThreadTaskRun ä»»åŠ¡ä¸‹å‘");
            ITaskRepository taskservice = new TaskRepository();
            try
            {
                LogHelper.Info("任务下发  ARG ä»»åŠ¡ è¿›å…¥");
                #region AGV任务下发。
                var tklist = taskservice.FindList(x => x.S_B_STATE == "未执行" && x.S_WORK_MODE == "AGV");
                if (tklist.Any())
                    foreach (var tk in tklist.GroupBy(item =>
                    {
                        var ticks = item.T_CREATE.Ticks;
                        return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));
                    }).OrderBy(x => x.Key))
                    {
                        var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();
                        foreach (var t in ts)
                        {
                            var b = false;
                            b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);
                            if (b)
                            {
                                t.S_B_STATE = "已推送";
                                taskservice.Update(t);
                            }
                        }
                        break;
                    }
                //foreach (var tk in tklist.GroupBy(item =>
                //{
                //    var ticks = item.T_CREATE.Ticks;
                //    return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));
                //}).OrderBy(x => x.Key))
                //if (tklist.Any())
                //{
                #endregion
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.Message + ex.StackTrace);
            }
            try
            {
                #region Rgv
                LogHelper.Info($"查看RGV ç”µé‡ï¼šã€{tag.RGV.R当前电量}】 å……电状态:【{tag.RGV.R充电状态}】 æ•…障代码:【{tag.RGV.RgvrunError}】");
                if (tag.RGV.taskend == 125)
                {
                    System.Threading.Thread.Sleep(3000);
                    return;
                }
                LogHelper.Info("任务下发  Rgv ä»»åŠ¡ è¿›å…¥");
                var task1Isrun = false;
                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)
                {
                    task1Isrun = true;
                    //if (tag.RGV.bit1taskOver_LAST == 1)
                    //    RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                }
                var task2Isrun = false;
                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)
                {
                    task2Isrun = true;
                    //if (tag.RGV.bit2taskOver_LAST == 1)
                    //    RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                }
                if (task1Isrun || task2Isrun)
                {
                    string mes = "";
                    if (task1Isrun)
                        mes += tag.RGV.ReadTask1No + "执行中...";
                    if (task2Isrun)
                        mes += tag.RGV.ReadTask2No + "执行中...";
                    LogHelper.Info($"{mes} ä¸èƒ½ä¸‹å‘新任务。");
                    System.Threading.Thread.Sleep(3000);
                    return;
                }
                var thisOver = 0;
                TaskEntity task1 = null;
                TaskEntity task2 = null;
                LogHelper.Info($"查看RGV 1工位任务》");
                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)
                {
                    var taskno = tag.RGV.ReadTask1No;
                    LogHelper.Info($"RGV 1工位任务{tag.RGV.ReadTask1No}");
                    string tno = "TN" + (DateTime.Now.ToString("yy")) + ((taskno.ToString()).PadLeft(8, '0'));
                    task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);
                    LogHelper.Info($"RGV 1工位任务{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST:{tag.RGV.bit1taskOver_LAST}");
                    if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)
                    {
                        if (task1.S_B_STATE != "完成")
                        {
                            thisOver = 1;
                            if (task1.S_B_STATE == "取货完成")
                            {
                                task1.S_B_STATE = "完成";
                                tag.RGV.ReadTask1No = 0;
                            }
                            else
                            {
                                task1.S_B_STATE = "取货完成";
                            }
                            tag.RGV.bit1taskOver = 0;
                            LogHelper.Info($"RGV 1工位任务{task1.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task1.S_B_STATE}");
                            //tag.RGV.bit1taskOver_LAST = 1;
                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "1", out string msg);
                            LogHelper.Info($"RGV 1工位任务写处理");
                            taskservice.Update(task1);
                            LogHelper.Info($"RGV 1工位任务更新。");
                        }
                        else
                        {
                            LogHelper.Info("RGV1工位任务已经完成。");
                        }
                    }
                }
                else if (tag.RGV.ReadTask1No == 0)
                {
                    LogHelper.Info($"RGV 1工位没有任务》");
                }
                LogHelper.Info($"查看RGV 2工位任务》");
                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)
                {
                    var taskno = tag.RGV.ReadTask2No;
                    LogHelper.Info($"RGV 2工位任务{tag.RGV.ReadTask2No}");
                    string tno = "TN" + (DateTime.Now.ToString("yy")) + ((taskno.ToString()).PadLeft(8, '0'));
                    task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);
                    LogHelper.Info($"RGV2工位任务{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST:{tag.RGV.bit2taskOver_LAST}");
                    if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)
                    {
                        if (task2.S_B_STATE != "完成")
                        {
                            thisOver = 2;
                            if (task2.S_B_STATE == "取货完成")
                            {
                                task2.S_B_STATE = "完成";
                                tag.RGV.ReadTask2No = 0;
                            }
                            else
                            {
                                task2.S_B_STATE = "取货完成";
                            }
                            tag.RGV.bit2taskOver = 0;
                            LogHelper.Info($"RGV 2工位任务{task2.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task2.S_B_STATE}");
                            RedisHelper.Add($"RGV.bit2taskOver_LAST", "1", out string msg);
                            LogHelper.Info($"RGV 2工位任务写处理");
                            taskservice.Update(task2);
                            LogHelper.Info($"RGV 2工位任务更新。");
                        }
                        else
                        {
                            LogHelper.Info("RGV2工位任务已经完成。");
                        }
                    }
                }
                else if (tag.RGV.ReadTask2No == 0)
                {
                    LogHelper.Info($"RGV 2工位没有任务》");
                }
                //if (thisOver > 0)
                //{
                //    var v2 = RedisHelper.Get<WriteGroupEntity>("RGVQueue", out string rev);
                //    if (v2 != null)
                //    {
                //        LogHelper.Info($"RGVQueue è¯»åˆ°ç»“æžœ-{JsonConvert.SerializeObject(v2)}  \n ä¸‹å‘前进行清除。");
                //        var b = RedisHelper.Remove("RGVQueue", out rev);
                //    }
                //}
                ///1 æœ‰è´§  å°±2 å–。  1 æ²¡è´§ å°±2 å¸è´§ï¼Œ éƒ½æœ‰è´§  å°±1卸货。 éƒ½æ²¡è´§ å°±1卸
                var tklist = taskservice.FindList(x => x.S_B_STATE == "未执行" && x.S_WORK_MODE == "RGV").OrderBy(x => x.T_CREATE).ToList();
                if (task1 != null && task1.S_B_STATE != "完成") //1有任务
                {
                    if (task2 != null && task2.S_B_STATE != "完成")// 1 æœ‰ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚
                    {
                        LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 ä¹Ÿæœ‰ä»»åŠ¡{task2.S_TASK_NO}。 å¼€å§‹å·¥ä½1 å¸è´§ã€‚");
                        tag.RGV.workMod = 1;
                        tag.RGV.taskmod = 2;
                        tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));
                        tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);
                        System.Threading.Thread.Sleep(750);
                        //RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                        //tag.RGV.taskend = 125;
                        //Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue");
                        LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST å†™ 0");
                        RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                        LogHelper.Info($"{task1.S_TASK_NO}> end å†™ 125");
                        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                    }
                    else //1有任务  2 æ²¡ä»»åŠ¡ã€‚
                    {
                        LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务。");
                        var leftSide = new List<string> { "1023", "1020" };
                        var RightSide = new List<string> { "1002", "1008", "1010", "1016" };
                        bool creT2 = false;
                        // 2号 ä¼˜å…ˆç»™ 1020  1008  1016
                        var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == "1020" || x.S_START_LOC == "1008" || x.S_START_LOC == "1016");
                        if (t2 != null)
                        {
                            LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾1020  1008  1016取货任务{t2.S_TASK_NO}。");
                            tag.RGV.workMod = 2;
                            tag.RGV.taskmod = 1;
                            tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
                            tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
                            t2.S_B_STATE = "已推送";
                            taskservice.Update(t2);
                            creT2 = true;
                            System.Threading.Thread.Sleep(750);
                            LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0");
                            RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                            LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                            Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        }
                        ////2 å¦‚果有同侧取货任务。就取。没有
                        //else if (leftSide.Contains(task1.S_START_LOC))
                        //{
                        //    leftSide.Remove(task1.S_START_LOC);
                        //    var lsde = leftSide.FirstOrDefault();
                        //    t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != "1017");
                        //    if (t2 != null) //同侧取货任务。
                        //    {
                        //        LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务{t2.S_TASK_NO}。");
                        //        tag.RGV.workMod = 2;
                        //        tag.RGV.taskmod = 1;
                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
                        //        t2.S_B_STATE = "已推送";
                        //        taskservice.Update(t2);
                        //        creT2 = true;
                        //        System.Threading.Thread.Sleep(750);
                        //        LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0");
                        //        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                        //        LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                        //        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        //    }
                        //}
                        //else if (RightSide.Contains(task1.S_START_LOC))
                        //{
                        //    RightSide.Remove(task1.S_START_LOC);
                        //    t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != "1017");
                        //    if (t2 != null) //同侧取货任务。
                        //    {
                        //        LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§ 1002,1010 å–货任务{t2.S_TASK_NO}。");
                        //        tag.RGV.workMod = 2;
                        //        tag.RGV.taskmod = 1;
                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
                        //        t2.S_B_STATE = "已推送";
                        //        taskservice.Update(t2);
                        //        creT2 = true;
                        //        System.Threading.Thread.Sleep(750);
                        //        LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 125");
                        //        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                        //        LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                        //        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        //    }
                        //}
                        else //1 ç›´æŽ¥å¸è´§ã€‚
                        //if (!creT2)
                        {
                            LogHelper.Info($"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ²¡æœ‰åŒä¾§å–货任务 1工位卸货。");
                            tag.RGV.workMod = 1;
                            tag.RGV.taskmod = 2;
                            tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));
                            tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);
                            System.Threading.Thread.Sleep(750);
                            LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST å†™ 0");
                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                            LogHelper.Info($"{task1.S_TASK_NO}> taskend å†™ 0");
                            Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        }
                    }
                }
                else
                {
                    if (task2 != null && task2.S_B_STATE != "完成")// 1 æ²¡ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚
                    {
                        LogHelper.Info($"查看RGV 1工位没任务,工位2 æœ‰ä»»åŠ¡{task2.S_TASK_NO}。工位2卸货。。");
                        //2 å¸è´§ã€‚
                        tag.RGV.workMod = 2;
                        tag.RGV.taskmod = 2;
                        tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));
                        tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);
                        System.Threading.Thread.Sleep(750);
                        LogHelper.Info($"{task2.S_TASK_NO}> bit2taskOver_LAST å†™ 0");
                        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                        //tag.RGV.taskend = 125;
                        LogHelper.Info($"{task2.S_TASK_NO}> taskend å†™125");
                        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                    }
                    else if (tklist.Any()) //1mei ä»»åŠ¡  2 æ²¡ä»»åŠ¡ã€‚
                    {
                        LogHelper.Info($"查看RGV 1工位没任务,工位2 ä¹Ÿæ²¡ä»»åŠ¡ã€‚ä¼˜å…ˆ1工位终点1017任务。。");
                        //、下 1017任务 ç»™1号工位。
                        //var lss = tklist.Take(2).ToList();
                        var e1017first = tklist.Find(x => x.S_START_LOC == "1002" || x.S_START_LOC == "1010" || x.S_START_LOC == "1023");
                        //if (e1017first != null)
                        //{
                        //    e1017first = tklist.FirstOrDefault();
                        //}
                        if (e1017first != null)
                        {
                            LogHelper.Info($"查看RGV1 ä»»åŠ¡å·¥ä½2 æ²¡ä»»åŠ¡ã€‚ 1002  1010  1023取货任务{e1017first.S_TASK_NO}。");
                            tag.RGV.workMod = 1;
                            tag.RGV.taskmod = 1;
                            uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));
                            LogHelper.Info($"{e1017first.S_TASK_NO}> è½¬æ¢åŽä»»åŠ¡å·{tno} å¼€å§‹å†™å…¥ã€‚");
                            tag.RGV.taskno1 = tno;
                            LogHelper.Info($"{e1017first.S_TASK_NO}>开始写入 task1do>>{e1017first.S_START_LOC}。");
                            tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);
                            LogHelper.Info($"{e1017first.S_TASK_NO}> æ›´æ–°ä»»åŠ¡ã€‚");
                            e1017first.S_B_STATE = "已推送";
                            taskservice.Update(e1017first);
                            System.Threading.Thread.Sleep(750);
                            LogHelper.Info($"{e1017first.S_TASK_NO}> bit1taskOver_LAST å†™0");
                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
                            LogHelper.Info($"{e1017first.S_TASK_NO}> taskend å†™125");
                            //tag.RGV.taskend=125
                            Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                        }
                        else
                        {
                            var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == "1020" || x.S_START_LOC == "1008" || x.S_START_LOC == "1016");
                            if (tklist != null)
                            {
                                LogHelper.Info($"查看RGV1 æ²¡ä»»åŠ¡å·¥ä½2 æ²¡ä»»åŠ¡ã€‚ æ‰¾1020  1008  1016取货任务{t2.S_TASK_NO}。");
                                tag.RGV.workMod = 2;
                                tag.RGV.taskmod = 1;
                                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
                                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
                                t2.S_B_STATE = "已推送";
                                taskservice.Update(t2);
                                System.Threading.Thread.Sleep(750);
                                LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0");
                                RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
                                LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                                Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                            }
                        }
                    }
                }
                LogHelper.Info($"rgv å¤„理完成。taskend 125");
                #endregion
            }
            catch (Exception ex)
            {
                LogHelper.Info(ex.Message + ex.StackTrace);
            }
        }
        public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)
        {
            Console.WriteLine($"ThreadGrats å…‰æ …处理 =================> ");
            var taskCOdes = new List<string> { "Sarrive", "Srelease", "Earrive", "Erelease" };
            TaskActRepository taskActRepository = new TaskActRepository();
            TaskRepository taskRepository = new TaskRepository();
            var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);
            foreach (var item in requires)
            {
                var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);
                if (tin == -1)
                {
                    item.N_CREATEMETHOD = -1;
                    taskActRepository.Update(item);
                    continue;
                }
                //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);
                string loc = "";
                if (tin < 2)
                {
                    loc = item.S_START_LOC;
                }
                else
                {
                    loc = item.S_END_LOC;
                }
                if (loc == null) continue; else loc = loc.Trim();
                bool goin = tin % 2 == 0;
                bool continuuuuu = false;
                var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));
                if (dev != null)
                {
                    var V = dev.location.ToList().FindIndex(x => x == loc) == 0;
                    //车走了  å¼€å…‰æ …
                    if (!goin)
                    {
                        if (dev.deviceType == 1)
                        {
                            LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚" + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "R02" : "R04"), "true", dev.deviceName + "Queue"));
                            Conn.默认Redis.SetValue(dev.deviceName + "." + (V ? "R02" : "R04"), "true", dev.deviceName + "Queue");
                        }
                        else if (dev.deviceType == 2)
                        {
                            LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚" + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "D1222" : "D1223"), "1", dev.deviceName + "Queue"));
                            Conn.默认Redis.SetValue(dev.deviceName + "." + (V ? "D1222" : "D1223"), "1", dev.deviceName + "Queue");
                        }
                        item.N_CREATEMETHOD = 1;
                        taskActRepository.Update(item);
                    }
                    //车要进入交互。
                    else
                    {
                        if (dev.deviceType == 1)
                        {
                            var tf = Conn.默认Redis.GetValue(dev.deviceName + "." + (V ? "R50" : "R52"));//读关闭状态
                            if (tf?.ToLower() == "true")
                            {
                                LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼");
                                continuuuuu = true;
                            }
                            else
                            {
                                LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚" + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "R01" : "R03"), "true", dev.deviceName + "Queue"));
                                Conn.默认Redis.SetValue(dev.deviceName + "." + (V ? "R01" : "R03"), "true", dev.deviceName + "Queue");
                            }
                        }
                        else if (dev.deviceType == 2)
                        {
                            var tf = Conn.默认Redis.GetValue(dev.deviceName + ".D1202");
                            int numm = int.Parse(string.IsNullOrEmpty(tf) ? "0" : tf);
                            if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)
                            {
                                LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼");
                                continuuuuu = true;
                            }
                            else
                            {
                                LogHelper.Info($"{dev.deviceName}{(V ? "å·¦" : "右")} å…‰æ …{(goin ? "关闭" : "开启")} ç”³è¯·ã€‚" + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "D1220" : "D1221"), dev.deviceName + "Queue"));
                                Conn.默认Redis.SetValue(dev.deviceName + "." + (V ? "D1220" : "D1221"), "1", dev.deviceName + "Queue");
                            }
                        }
                    }
                }
                if (continuuuuu)
                {
                    LogHelper.Info($"{item.S_TASK_NO}{item.S_ACTION_CODE} è½¦è¾†å‘送继续任务!");
                    continueTask?.Invoke(new HaiKangOrderInfo
                    {
                        reqCode = item.S_ID.Replace("-", ""),
                        taskCode = item.S_TASK_NO
                    });
                    item.N_CREATEMETHOD = 1;
                    taskActRepository.Update(item);
                }
            }
            System.Threading.Thread.Sleep(3000);
            //重置信号
            foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))
            {
                var tf = Conn.默认Redis.GetValue(dev.deviceName + ".D1202");
                int numm = int.Parse(string.IsNullOrEmpty(tf) ? "0" : tf);
                if (TcpServer.GetBitdata(numm, 0) == 0)
                {
                    Conn.默认Redis.SetValue(dev.deviceName + ".D1220", "0", dev.deviceName + "Queue");
                    Conn.默认Redis.SetValue(dev.deviceName + ".D1222", "0", dev.deviceName + "Queue");
                }
                else if (TcpServer.GetBitdata(numm, 1) == 0)
                {
                    Conn.默认Redis.SetValue(dev.deviceName + ".D1221", "0", dev.deviceName + "Queue");
                    Conn.默认Redis.SetValue(dev.deviceName + ".D1223", "0", dev.deviceName + "Queue");
                }
            }
        }
        /// <summary>
        /// 1020  1023空框下线
        /// </summary>
        /// <param name="tag"></param>
        public void ThreadEdown(Tag tag)
        {
            Console.WriteLine($"ThreadEdown 20 23 = ç©ºä¸‹æ£€æµ‹ =================> ");
            TaskRepository taskRepository = new TaskRepository();
            foreach (var Bssx in new string[] { "1020", "1023" })
            {
                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.R托盘码"), typeof(System.String));
                Console.WriteLine($"{Bssx} ç©ºä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}  ");
                if (RtaskState == 3 && RtaskState_LAST == 0)
                {
                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                    string msg = "";
                    if (task != null)
                    {
                        Console.WriteLine($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        LogHelper.Info($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        continue;
                    }
                    try
                    {
                        var listtep = new List<string>();
                        if (Bssx == "1020")
                        {
                            if (tag.SF下料位.RArrive1003 == 1)
                            {
                                listtep = new List<string> { "1012", "1004" };
                            }
                            else
                            {
                                listtep = new List<string> { "1004", "1012" };
                            }
                        }
                        else
                        {
                            if (tag.SF下料位.RArrive1005 == 1)
                            {
                                listtep = new List<string> { "1014", "1006" };
                            }
                            else
                            {
                                listtep = new List<string> { "1006", "1014" };
                            }
                        }
                        foreach (var item in listtep)//(Bssx == "1020" ? new string[] { "1004", "1012" } : new string[] { "1006", "1014" }))
                        {
                            var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲"), typeof(System.UInt16));
                            var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲_LAST"), typeof(System.UInt16));
                            if (R5 == 5 && R5空闲_LAST == 0 && task == null)
                            {
                                task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                                msg = "";
                                if (task != null)
                                {
                                    Console.WriteLine($" {item}有正在 [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                                    LogHelper.Info($" {item}有正在 [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                                    continue;
                                }
                                var b = TaskProcess.CreateTask("", Bssx, item, "空上RGV", 5, new List<string> { R托盘码 }, "RGV");
                                if (b)
                                {
                                    LogHelper.Debug($"输送线RGV空托任务 from:{Bssx}>to {item}开始创建成功");
                                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
                                    //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
                                    RedisHelper.Add($"S{item}Read.R5空闲_LAST", "1", out msg);
                                    //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "1", $"S{item}ReadQueue");
                                    break;
                                }
                            }
                            else if (R5 != 5 && R5空闲_LAST == 1)
                            {
                                RedisHelper.Add($"S{item}Read.R5空闲_LAST", "0", out msg);
                                //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "0", $"S{item}ReadQueue");
                            }
                        }
                        System.Threading.Thread.Sleep(1000);
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Error(ex.Message, ex);
                        Console.WriteLine(ex.Message + ex.StackTrace);
                    }
                }
                else if (RtaskState != 3 && RtaskState_LAST == 1)
                {
                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
                    //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "0", $"S{Bssx}ReadQueue");
                }
                System.Threading.Thread.Sleep(2000);
            }
            foreach (var item in new string[] { "1004", "1012", "1006", "1014", "1026", "1017" })
            {
                var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲"), typeof(System.UInt16));
                var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲_LAST"), typeof(System.UInt16));
                if (R5 != 5 && R5空闲_LAST == 1)
                {
                    RedisHelper.Add($"S{item}Read.R5空闲_LAST", "0", out string msg);
                    //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "0", $"S{item}ReadQueue");
                }
            }
        }
        public void ThreadDdown(Tag tag)
        {
            Console.WriteLine($"ThreadDdown 08 10 ==================> 1026");
            TaskRepository taskRepository = new TaskRepository();
            foreach (var Bssx in new string[] { "1008", "1016" })
            {
                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.R托盘码"), typeof(System.String));
                Console.WriteLine($"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}");
                if (RtaskState == 3 && RtaskState_LAST == 0)
                {
                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                    string msg = "";
                    if (task != null)
                    {
                        Console.WriteLine($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        LogHelper.Info($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        continue;
                    }
                    var item = "1026";
                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲"), typeof(System.UInt16));
                    var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲_LAST"), typeof(System.UInt16));
                    if (R5 == 5 && R5空闲_LAST == 0)
                    {
                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                        msg = "";
                        if (task != null)
                        {
                            Console.WriteLine($"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                            LogHelper.Info($"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                            continue;
                        }
                        var b = TaskProcess.CreateTask("", Bssx, item, "满转1026", 5, new List<string> { R托盘码 }, "RGV");
                        if (b)
                        {
                            RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
                            RedisHelper.Add($"S{item}Read.R5空闲_LAST", "1", out string msg2);
                            //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
                            //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "1", $"S{item}ReadQueue");
                            break;
                        }
                    }
                    else if (R5 != 5 && R5空闲_LAST == 1)
                    {
                        RedisHelper.Add($"S{item}Read.R5空闲_LAST", "0", out string msg2);
                    }
                }
                else if (RtaskState != 3 && RtaskState_LAST == 1)
                {
                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
                    //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "0", $"S{Bssx}ReadQueue");
                }
                System.Threading.Thread.Sleep(2000);
            }
        }
        public void Thread0210Down(Tag tag)
        {
            Console.WriteLine($"Thread0210Down ==================>");
            TaskRepository taskRepository = new TaskRepository();
            foreach (var Bssx in new string[] { "1002", "1010" })
            {
                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{Bssx}Read.R托盘码"), typeof(System.String));
                Console.WriteLine($"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}");
                if (RtaskState == 3 && RtaskState_LAST == 0)
                {
                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                    string msg = "";
                    if (task != null)
                    {
                        Console.WriteLine($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        LogHelper.Info($"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                        continue;
                    }
                    var item = "1017";
                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲"), typeof(System.UInt16));
                    var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"S{item}Read.R5空闲_LAST"), typeof(System.UInt16));
                    if (R5 == 5 && R5空闲_LAST == 0)
                    {
                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "完成" && x.S_B_STATE != "取消");
                        msg = "";
                        if (task != null)
                        {
                            Console.WriteLine($"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                            LogHelper.Info($"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务");
                            continue;
                        }
                        var b = TaskProcess.CreateTask("", Bssx, item, "满转1017", 5, new List<string> { R托盘码 }, "RGV");
                        if (b)
                        {
                            RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
                            RedisHelper.Add($"S{item}Read.R5空闲_LAST", "1", out string msg1);
                            //Conn.默认Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
                            //Conn.默认Redis.SetValue($"S{item}Read.R5空闲_LAST", "1", $"S{item}ReadQueue");
                            break;
                        }
                    }
                    else if (R5 != 5 && R5空闲_LAST == 1)
                    {
                        RedisHelper.Add($"S{item}Read.R5空闲_LAST", "0", out string msg1);
                    }
                }
                else if (RtaskState != 3 && RtaskState_LAST == 1)
                {
                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
                }
                System.Threading.Thread.Sleep(2000);
            }
        }
        public void Thread下料位检测(Tag tag)
        {
            Console.WriteLine($"Thread下料位检测    =====>");
            foreach (var ssx in new string[] { "1003", "1005", "1011", "1013" })
            {
                var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"FNK1003051113.RArrive{ssx}"), typeof(System.UInt16));
                var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($"FNK1003051113.RArrive{ssx}_LAST"), typeof(System.UInt16));
                if (RArrive == 1 && RArriveLast == 0)
                {
                    if (ssx == "1005" && tag.SF下料位.WRelease1005 == 0)
                    {
                        tag.FNK1.D2215 = 1;
                        //tag.SF下料位.RArrive1005_LAST = 1;
                        RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "1", out string msg);
                        //tag.SF下料位.WRelease1005 = 0;
                        //tag.SF下料位.WSafe0305 = 0;
                    }
                    else if (ssx == "1003" && tag.SF下料位.WRelease1003 == 0)
                    {
                        tag.FNK1.D2210 = 1;
                        //tag.SF下料位.RArrive1003_LAST = 1;
                        RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "1", out string msg);
                        //tag.SF下料位.WRelease1003 = 0;
                        //tag.SF下料位.WSafe0305 = 0;
                    }
                    else if (ssx == "1013" && tag.SF下料位.WRelease1013 == 0)
                    {
                        tag.FNK2.D2215 = 1;
                        //tag.SF下料位.RArrive1013_LAST = 1;
                        RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "1", out string msg);
                        //tag.SF下料位.WRelease1013 = 0;
                        //tag.SF下料位.WSafe1113 = 0;
                    }
                    else if (ssx == "1011" && tag.SF下料位.WRelease1011 == 0)
                    {
                        tag.FNK2.D2210 = 1;
                        //tag.SF下料位.RArrive1011_LAST = 1;
                        RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "1", out string msg);
                        //tag.SF下料位.WRelease1011 = 0;
                        //tag.SF下料位.WSafe1113 = 0;
                    }
                }
                else if (RArrive == 0 && RArriveLast == 1)
                {
                    RedisHelper.Add($"FNK1003051113.RArrive{ssx}_LAST", "0", out string msg);
                    //Conn.默认Redis.SetValue($"FNK1003051113.RArrive{ssx}_LAST", "0", $"FNK1003051113Queue");
                }
            }
        }
        public void ThreadFNK1Over(Tag tag)
        {
            Console.WriteLine($"ThreadFNK1Over    =====>");
            if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)
            {
                tag.FNK1.D2215 = 0;
                //tag.FNK1.D2212_LAST = 1;
                RedisHelper.Add($"p发那科1下线.D2217_LAST", "1", out string msg);
                tag.SF下料位.WRelease1005 = 1;
                tag.SF下料位.WSafe0305 = 1;
                System.Threading.Thread.Sleep(1000);
                RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "0", out msg);
            }
            if (tag.FNK1.D2216 == 1)
                tag.FNK1.D2215 = 0;
            else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)
                //tag.FNK1.D2217_LAST = 0;
                RedisHelper.Add($"p发那科1下线.D2217_LAST", "0", out string msg);
            if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)
            {
                tag.FNK1.D2210 = 0;
                //tag.FNK1.D2217_LAST = 1;
                RedisHelper.Add($"p发那科1下线.D2212_LAST", "1", out string msg);
                tag.SF下料位.WRelease1003 = 1;
                tag.SF下料位.WSafe0305 = 1;
                System.Threading.Thread.Sleep(1000);
                RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "0", out msg);
            }
            //else if (tag.FNK1.D2211 == 1)
            //    tag.FNK1.D2210 = 0;
            else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)
            {
                //tag.FNK1.D2212_LAST = 0;
                RedisHelper.Add($"p发那科1下线.D2212_LAST", "0", out string msg);
            }
            if (tag.FNK1.D2211 == 1)
                tag.FNK1.D2210 = 0;
        }
        public void ThreadFNK2Over(Tag tag)
        {
            Console.WriteLine($"ThreadFNK2Over    =====>");
            if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)
            {
                tag.FNK2.D2215 = 0;
                //tag.FNK2.D2212_LAST = 1;
                RedisHelper.Add($"p发那科2下线.D2217_LAST", "1", out string msg);
                tag.SF下料位.WRelease1013 = 1;
                tag.SF下料位.WSafe1113 = 1;
                System.Threading.Thread.Sleep(1000);
                RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "0", out msg);
            }
            else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)
                //tag.FNK2.D2217_LAST = 0;
                RedisHelper.Add($"p发那科2下线.D2217_LAST", "0", out string msg);
            if (tag.FNK2.D2216 == 1)
                tag.FNK2.D2215 = 0;
            if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)
            {
                tag.FNK2.D2210 = 0;
                //tag.FNK2.D2217_LAST = 1;
                RedisHelper.Add($"p发那科2下线.D2212_LAST", "1", out string msg);
                tag.SF下料位.WRelease1011 = 1;
                tag.SF下料位.WSafe1113 = 1;
                System.Threading.Thread.Sleep(1000);
                RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "0", out msg);
            }
            else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)
            {
                //tag.FNK2.D2212_LAST = 0;
                RedisHelper.Add($"p发那科2下线.D2212_LAST", "0", out string msg);
            }
            if (tag.FNK2.D2211 == 1)
                tag.FNK2.D2210 = 0;
        }
        public void Thread1019Down(Tag tag)
        {
            Console.WriteLine($"1019任务状态:   =====>");
            Console.WriteLine($"1019任务状态:{tag.SA1019.RtaskState}- barcode:{tag.SA1019.R托盘码}- ç©ºé—²{tag.SA1019.R5空闲}");
        }
        public void Thread1025Up(Tag tag)
        {
            Console.WriteLine($"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š   =====>");
            Console.WriteLine($"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1025.RtaskState}- ç©ºé—²{tag.SA1025.R5空闲}");
        }
        public void Thread1022Up(Tag tag)
        {
            Console.WriteLine($"SA1022    =====>");
            Console.WriteLine($"SA1022 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1022.RtaskState}- ç©ºé—²{tag.SA1022.R5空闲}");
        }
        public void Thread1030Down(Tag tag)
        {
            Console.WriteLine($"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š   =====>");
            Console.WriteLine($"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1030.RtaskState}- ç©ºé—²{tag.SA1030.R5空闲}-->对应终点2001>空闲5:{tag.SA2001.R5空闲}");
        }
        public void Thread2030Down(Tag tag)
        {
            Console.WriteLine($"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š   =====>");
            Console.WriteLine($"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA2030.RtaskState}- ç©ºé—²{tag.SA2030.R5空闲} - barcode:{tag.SA2030.R托盘码}");
        }
    }
}
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/RunTime/Code/×Ô¶¨ÒåÀà.cs
@@ -536,7 +536,7 @@
    internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = "AGV", int cntrCount = 1, int startLayer = 1, int endLayer = 1)
{
    
            LogHelper.Debug($"输送线RGV空托任务 from:{from}>to {to}开始创建>");
            LogHelper.Info($"输送线RGV空托任务 from:{from}>to {to}开始创建>");
     var cntrInfo = string.Join(",", cntrs);
 ILocRepository locc = new LocRepository();
 var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);
@@ -586,7 +586,8 @@
                    locc.Update(endLoc);
                }
                
                LogHelper.Debug($"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功");
                LogHelper.Info($"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功");
                return true;
 }
 catch (Exception ex)
 {
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Scripts/Custom.json
@@ -120,8 +120,8 @@
      "Type": "MethodCode",
      "Level": "Item",
      "Statement": "public void OperateHKTaskStatus(System.Object param1)",
      "EditCode": "HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n            if (string.IsNullOrEmpty(model.taskCode))\r\n                return;\r\n            // æŸ¥è¯¢ä»»åŠ¡ï¼šæ ¹æ®ä»»åŠ¡å·\r\n            //var wcsTask = WCSHelper.GetTask(model.taskCode);\r\n            ITaskRepository MainMissionService = new TaskRepository();\r\n            var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);\r\n            if (wcsTask != null)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(model.method))\r\n                {\r\n                    ILocRepository locrep = new LocRepository();\r\n                    var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                    var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);\r\n\r\n                    List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList();\r\n                    bool bobe = false;\r\n                    switch (model.method)\r\n                    {\r\n                        case \"start\":\r\n                            LogHelper.Info($\"海康车任务状态变更为执行,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            if (wcsTask.S_B_STATE.Trim() == \"已推送\")\r\n                            {\r\n                                wcsTask.S_B_STATE = \"执行中\";\r\n                                wcsTask.T_START_TIME = DateTime.Now;\r\n                                MainMissionService.Update(wcsTask);\r\n                                bobe = true;\r\n                            }\r\n                            break;\r\n                        case \"outbin\":\r\n                            LogHelper.Info($\"海康车任务状态变更为取货完成,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"取货完成\";\r\n\r\n                            startloc.N_CURRENT_NUM = 0;\r\n                            startloc.S_LOCK_STATE = \"无\";\r\n                            startloc.T_MODIFY = DateTime.Now;\r\n                            //ILocContainerRepository locContainerRepository = new LocContainerRepository();\r\n                            ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            MainMissionService.Update(wcsTask);\r\n                            locrep.Update(startloc);\r\n\r\n                            bobe = true;\r\n                            var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC));\r\n                            if (device != null)\r\n                            {\r\n                                if (device.deviceType == 1)\r\n                                {\r\n                                    if (device.deviceName.Contains(\"维希尔抓臂\"))\r\n                                    {  //卸货进行清空,触发扫码\r\n                                       var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n                                       string V = inde ? \"R05\" : \"R06\";\r\n                                       Conn.默认Redis.SetValue(device.deviceName + \".\" + V, \"true\", device.deviceName + \"Queue\");\r\n                                       TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if(device.deviceType == 2){\r\n\t\t\t\t\t\t\t\t\tvar inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n\t\t\t\t\t\t\t\t\t string V = inde? \"D1224\" : \"D1225\";\r\n\t\t\t\t\t\t\t\t\t Conn.默认Redis.SetValue(device.deviceName + \".\" + V, \"0\", device.deviceName + \"Queue\");\r\n                                }\r\n                            }\r\n                            //LocationHelper.UnLockLoc(wcsTask.S_START_LOC);\r\n                            break;\r\n                        case \"end\":\r\n                            LogHelper.Info($\"海康车任务状态变更为完成,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"完成\";\r\n                            wcsTask.T_END_TIME = DateTime.Now;\r\n\r\n                            bobe = true;\r\n                            //ILocContainerRepository locContainerRepository2 = new LocContainerRepository();\r\n                            //List<LocContainerEntity> llls = new List<LocContainerEntity>();\r\n                            //foreach (var c in cntrs)\r\n                            //{\r\n                            //    var action = new LocContainerEntity()\r\n                            //    {\r\n                            //        S_ID = Guid.NewGuid().ToString(),\r\n                            //        S_STATE = \"编辑\",\r\n                            //        T_CREATE = DateTime.Now,\r\n                            //        T_MODIFY = DateTime.Now,\r\n\r\n                            //        S_LOC_CODE = endLoc.S_LOC_CODE,\r\n                            //        S_CNTR_CODE = c,\r\n                            //        S_TYPE = \"\",\r\n                            //    };\r\n                            //    llls.Add(action);\r\n                            //}\r\n\r\n                            endLoc.S_LOCK_STATE = \"无\";\r\n                            endLoc.N_CURRENT_NUM = 1;\r\n                            endLoc.T_MODIFY = DateTime.Now;\r\n                            MainMissionService.Update(wcsTask);\r\n                            if(Settings.deviceInfos.Find(x=>x.deviceType==2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC)))!=null)\r\n                                locrep.Update(endLoc);\r\n                            //locContainerRepository2.Insert(llls);\r\n\r\n                            var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC));\r\n                            if (device2 != null)\r\n                            {\r\n                                if (device2.deviceType == 1)\r\n                                {\r\n                                    if (device2.deviceName.Contains(\"维希尔抓臂\"))\r\n                                    {\r\n                                        //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? \"R10\" : \"R11\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        //卸货再写托盘取走。 ç„¶åŽè§¦å‘扫码进行校验。 \r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        //string V = inde ? \"R05\" : \"R06\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        string V2 = inde ? \"R10_LAST\" : \"R11_LAST\";\r\n                                        Conn.默认Redis.SetValue(device2.deviceName + \".\" + V2, \"true\", device2.deviceName + \"Queue\");\r\n                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if (device2.deviceType == 2)\r\n                                    if (device2.deviceName.Contains(\"Js捷顺\"))\r\n                                    {\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        string V = inde? \"D1224\" : \"D1225\";\r\n                                        Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"1\", device2.deviceName + \"Queue\");\r\n\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 3,\r\n                                            cntrCode = cntrs.FirstOrDefault()\r\n                                        }));\r\n                                        //if (device2.deviceName.Contains(\"1\"))\r\n                                        //{\r\n                                        //    if (inde) tag.Js1.D1224 = 1;\r\n                                        //    else tag.Js1.D1225 = 1;\r\n                                        //}else\r\n                                        //{\r\n                                        //    if (inde) tag.Js2.D1224 = 1;\r\n                                        //    else tag.Js2.D1225 = 1;\r\n                                        //}\r\n                                    }\r\n                            }\r\n\r\n                            //LocationMethod.JudgeLocation(wcsTask);\r\n                            break;\r\n                        case \"cancel\":\r\n                            LogHelper.Info($\"海康车任务状态变更为取消,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"取消\";\r\n                            //startloc.S_LOCK_STATE = \"无\";\r\n                            //endLoc.S_LOCK_STATE = \"无\";\r\n                            MainMissionService.Update(wcsTask);\r\n                            TaskActRepository taskActRepository = new TaskActRepository();\r\n                            var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO);\r\n                            if (tare.Any())\r\n                            {\r\n                                if(tare.Find(x=>x.S_ACTION_CODE==\"outbin\")==null)\r\n                                {\r\n                                    startloc.S_LOCK_STATE = \"无\";\r\n                                    endLoc.S_LOCK_STATE = \"无\";\r\n                                    locrep.Update(startloc);\r\n                                    locrep.Update(endLoc);\r\n                                }else if (tare.Find(x => x.S_ACTION_CODE == \"end\") == null)\r\n                                {\r\n                                    endLoc.S_LOCK_STATE = \"无\";\r\n                                    locrep.Update(endLoc);\r\n                                }\r\n                            }\r\n\r\n                            //locrep.Update(startloc);\r\n                            //locrep.Update(endLoc);\r\n                            //TaskProcess.OperateStatus(wcsTask, 7);\r\n                            //WCSHelper.Fail(wcsTask);\r\n                            break;\r\n                        case \"apply\":\r\n                            // åˆ¤æ–­è¯¥ä»»åŠ¡çš„æŽ¥é©³ä½æ˜¯å¦æœ‰å…¶ä»–å…¥åº“æˆ–å‡ºåº“ä»»åŠ¡ï¼Œå¦‚æžœæœ‰ï¼Œåˆ™åœ¨ç­‰ä½ç­‰å¾…ï¼Œå¦‚æžœæ²¡æœ‰ï¼Œåˆ™å…¥\r\n                            TaskisOk(wcsTask);\r\n                            break;\r\n                    }\r\n\r\n                    if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO))\r\n                    {\r\n                        var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO);\r\n                        if (mestask!=null&&bobe)\r\n                        {\r\n                            if ( model.method != \"end\")\r\n                            {\r\n                            \tif (mestask.S_START_LOC == wcsTask.S_START_LOC&&mestask.S_B_STATE == \"MES\")\r\n\t                                Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                                {\r\n\t                                    reqCode = wcsTask.S_SRC_NO,\r\n\t                                    model.method\r\n\t                                }));\r\n                            }\r\n                            else\r\n                            {\r\n                                if (mestask.S_END_LOC != wcsTask.S_END_LOC)\r\n                                {\r\n                                    LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå®Œæˆï¼Œé‡ç½®è¿›è¡ŒäºŒé˜¶æ®µã€‚\");\r\n                                    mestask.N_PRIORITY = -88;\r\n                                    MainMissionService.Update(mestask);\r\n                                }\r\n                                else if(mestask.S_B_STATE == \"MES\")\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        reqCode = wcsTask.S_SRC_NO,\r\n                                        model.method\r\n                                    }));\r\n                                }\r\n                            }\r\n\r\n                        }else if(mestask!=null && model.method== \"cancel\")\r\n                        {\r\n                        \t if(mestask.S_B_STATE == \"MES\")\r\n\t                           Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                            {\r\n\t                                reqCode = wcsTask.S_SRC_NO,\r\n\t                                model.method\r\n\t                            })); \r\n                            LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå–消,重置点,线程处理。\");\r\n                            mestask.N_PRIORITY = -1;\r\n                            mestask.S_B_STATE = \"MES_取消\";\r\n                            MainMissionService.Update(mestask);\r\n                        }\r\n                    }\r\n                    TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data,wcsTask.S_START_LOC,wcsTask.S_END_LOC);\r\n                    //调用第三方接口(如果有)TaskProcess.ReportStatus\r\n                }\r\n                else\r\n                {\r\n                    // æš‚时设定为0\r\n                    wcsTask.S_B_STATE = \"上报状态空\";\r\n                    //安全请求等\r\n                    //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                LogHelper.Info($\"当前任务号任务不存在{model.taskCode}\", \"agv杭叉交互日志\");\r\n            }",
      "Code": "public void OperateHKTaskStatus(System.Object param1)\r\n{HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n            if (string.IsNullOrEmpty(model.taskCode))\r\n                return;\r\n            // æŸ¥è¯¢ä»»åŠ¡ï¼šæ ¹æ®ä»»åŠ¡å·\r\n            //var wcsTask = WCSHelper.GetTask(model.taskCode);\r\n            ITaskRepository MainMissionService = new TaskRepository();\r\n            var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);\r\n            if (wcsTask != null)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(model.method))\r\n                {\r\n                    ILocRepository locrep = new LocRepository();\r\n                    var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                    var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);\r\n\r\n                    List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList();\r\n                    bool bobe = false;\r\n                    switch (model.method)\r\n                    {\r\n                        case \"start\":\r\n                            LogHelper.Info($\"海康车任务状态变更为执行,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            if (wcsTask.S_B_STATE.Trim() == \"已推送\")\r\n                            {\r\n                                wcsTask.S_B_STATE = \"执行中\";\r\n                                wcsTask.T_START_TIME = DateTime.Now;\r\n                                MainMissionService.Update(wcsTask);\r\n                                bobe = true;\r\n                            }\r\n                            break;\r\n                        case \"outbin\":\r\n                            LogHelper.Info($\"海康车任务状态变更为取货完成,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"取货完成\";\r\n\r\n                            startloc.N_CURRENT_NUM = 0;\r\n                            startloc.S_LOCK_STATE = \"无\";\r\n                            startloc.T_MODIFY = DateTime.Now;\r\n                            //ILocContainerRepository locContainerRepository = new LocContainerRepository();\r\n                            ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            MainMissionService.Update(wcsTask);\r\n                            locrep.Update(startloc);\r\n\r\n                            bobe = true;\r\n                            var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC));\r\n                            if (device != null)\r\n                            {\r\n                                if (device.deviceType == 1)\r\n                                {\r\n                                    if (device.deviceName.Contains(\"维希尔抓臂\"))\r\n                                    {  //卸货进行清空,触发扫码\r\n                                       var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n                                       string V = inde ? \"R05\" : \"R06\";\r\n                                       Conn.默认Redis.SetValue(device.deviceName + \".\" + V, \"true\", device.deviceName + \"Queue\");\r\n                                       TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if(device.deviceType == 2){\r\n\t\t\t\t\t\t\t\t\tvar inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n\t\t\t\t\t\t\t\t\t string V = inde? \"D1224\" : \"D1225\";\r\n\t\t\t\t\t\t\t\t\t Conn.默认Redis.SetValue(device.deviceName + \".\" + V, \"0\", device.deviceName + \"Queue\");\r\n                                }\r\n                            }\r\n                            //LocationHelper.UnLockLoc(wcsTask.S_START_LOC);\r\n                            break;\r\n                        case \"end\":\r\n                            LogHelper.Info($\"海康车任务状态变更为完成,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"完成\";\r\n                            wcsTask.T_END_TIME = DateTime.Now;\r\n\r\n                            bobe = true;\r\n                            //ILocContainerRepository locContainerRepository2 = new LocContainerRepository();\r\n                            //List<LocContainerEntity> llls = new List<LocContainerEntity>();\r\n                            //foreach (var c in cntrs)\r\n                            //{\r\n                            //    var action = new LocContainerEntity()\r\n                            //    {\r\n                            //        S_ID = Guid.NewGuid().ToString(),\r\n                            //        S_STATE = \"编辑\",\r\n                            //        T_CREATE = DateTime.Now,\r\n                            //        T_MODIFY = DateTime.Now,\r\n\r\n                            //        S_LOC_CODE = endLoc.S_LOC_CODE,\r\n                            //        S_CNTR_CODE = c,\r\n                            //        S_TYPE = \"\",\r\n                            //    };\r\n                            //    llls.Add(action);\r\n                            //}\r\n\r\n                            endLoc.S_LOCK_STATE = \"无\";\r\n                            endLoc.N_CURRENT_NUM = 1;\r\n                            endLoc.T_MODIFY = DateTime.Now;\r\n                            MainMissionService.Update(wcsTask);\r\n                            if(Settings.deviceInfos.Find(x=>x.deviceType==2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC)))!=null)\r\n                                locrep.Update(endLoc);\r\n                            //locContainerRepository2.Insert(llls);\r\n\r\n                            var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC));\r\n                            if (device2 != null)\r\n                            {\r\n                                if (device2.deviceType == 1)\r\n                                {\r\n                                    if (device2.deviceName.Contains(\"维希尔抓臂\"))\r\n                                    {\r\n                                        //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? \"R10\" : \"R11\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        //卸货再写托盘取走。 ç„¶åŽè§¦å‘扫码进行校验。 \r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        //string V = inde ? \"R05\" : \"R06\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        string V2 = inde ? \"R10_LAST\" : \"R11_LAST\";\r\n                                        Conn.默认Redis.SetValue(device2.deviceName + \".\" + V2, \"true\", device2.deviceName + \"Queue\");\r\n                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if (device2.deviceType == 2)\r\n                                    if (device2.deviceName.Contains(\"Js捷顺\"))\r\n                                    {\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        string V = inde? \"D1224\" : \"D1225\";\r\n                                        Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"1\", device2.deviceName + \"Queue\");\r\n\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 3,\r\n                                            cntrCode = cntrs.FirstOrDefault()\r\n                                        }));\r\n                                        //if (device2.deviceName.Contains(\"1\"))\r\n                                        //{\r\n                                        //    if (inde) tag.Js1.D1224 = 1;\r\n                                        //    else tag.Js1.D1225 = 1;\r\n                                        //}else\r\n                                        //{\r\n                                        //    if (inde) tag.Js2.D1224 = 1;\r\n                                        //    else tag.Js2.D1225 = 1;\r\n                                        //}\r\n                                    }\r\n                            }\r\n\r\n                            //LocationMethod.JudgeLocation(wcsTask);\r\n                            break;\r\n                        case \"cancel\":\r\n                            LogHelper.Info($\"海康车任务状态变更为取消,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"取消\";\r\n                            //startloc.S_LOCK_STATE = \"无\";\r\n                            //endLoc.S_LOCK_STATE = \"无\";\r\n                            MainMissionService.Update(wcsTask);\r\n                            TaskActRepository taskActRepository = new TaskActRepository();\r\n                            var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO);\r\n                            if (tare.Any())\r\n                            {\r\n                                if(tare.Find(x=>x.S_ACTION_CODE==\"outbin\")==null)\r\n                                {\r\n                                    startloc.S_LOCK_STATE = \"无\";\r\n                                    endLoc.S_LOCK_STATE = \"无\";\r\n                                    locrep.Update(startloc);\r\n                                    locrep.Update(endLoc);\r\n                                }else if (tare.Find(x => x.S_ACTION_CODE == \"end\") == null)\r\n                                {\r\n                                    endLoc.S_LOCK_STATE = \"无\";\r\n                                    locrep.Update(endLoc);\r\n                                }\r\n                            }\r\n\r\n                            //locrep.Update(startloc);\r\n                            //locrep.Update(endLoc);\r\n                            //TaskProcess.OperateStatus(wcsTask, 7);\r\n                            //WCSHelper.Fail(wcsTask);\r\n                            break;\r\n                        case \"apply\":\r\n                            // åˆ¤æ–­è¯¥ä»»åŠ¡çš„æŽ¥é©³ä½æ˜¯å¦æœ‰å…¶ä»–å…¥åº“æˆ–å‡ºåº“ä»»åŠ¡ï¼Œå¦‚æžœæœ‰ï¼Œåˆ™åœ¨ç­‰ä½ç­‰å¾…ï¼Œå¦‚æžœæ²¡æœ‰ï¼Œåˆ™å…¥\r\n                            TaskisOk(wcsTask);\r\n                            break;\r\n                    }\r\n\r\n                    if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO))\r\n                    {\r\n                        var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO);\r\n                        if (mestask!=null&&bobe)\r\n                        {\r\n                            if ( model.method != \"end\")\r\n                            {\r\n                            \tif (mestask.S_START_LOC == wcsTask.S_START_LOC&&mestask.S_B_STATE == \"MES\")\r\n\t                                Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                                {\r\n\t                                    reqCode = wcsTask.S_SRC_NO,\r\n\t                                    model.method\r\n\t                                }));\r\n                            }\r\n                            else\r\n                            {\r\n                                if (mestask.S_END_LOC != wcsTask.S_END_LOC)\r\n                                {\r\n                                    LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå®Œæˆï¼Œé‡ç½®è¿›è¡ŒäºŒé˜¶æ®µã€‚\");\r\n                                    mestask.N_PRIORITY = -88;\r\n                                    MainMissionService.Update(mestask);\r\n                                }\r\n                                else if(mestask.S_B_STATE == \"MES\")\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        reqCode = wcsTask.S_SRC_NO,\r\n                                        model.method\r\n                                    }));\r\n                                }\r\n                            }\r\n\r\n                        }else if(mestask!=null && model.method== \"cancel\")\r\n                        {\r\n                        \t if(mestask.S_B_STATE == \"MES\")\r\n\t                           Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                            {\r\n\t                                reqCode = wcsTask.S_SRC_NO,\r\n\t                                model.method\r\n\t                            })); \r\n                            LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå–消,重置点,线程处理。\");\r\n                            mestask.N_PRIORITY = -1;\r\n                            mestask.S_B_STATE = \"MES_取消\";\r\n                            MainMissionService.Update(mestask);\r\n                        }\r\n                    }\r\n                    TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data,wcsTask.S_START_LOC,wcsTask.S_END_LOC);\r\n                    //调用第三方接口(如果有)TaskProcess.ReportStatus\r\n                }\r\n                else\r\n                {\r\n                    // æš‚时设定为0\r\n                    wcsTask.S_B_STATE = \"上报状态空\";\r\n                    //安全请求等\r\n                    //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                LogHelper.Info($\"当前任务号任务不存在{model.taskCode}\", \"agv杭叉交互日志\");\r\n            }\r\n}",
      "EditCode": "HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n            if (string.IsNullOrEmpty(model.taskCode))\r\n                return;\r\n            // æŸ¥è¯¢ä»»åŠ¡ï¼šæ ¹æ®ä»»åŠ¡å·\r\n            //var wcsTask = WCSHelper.GetTask(model.taskCode);\r\n            ITaskRepository MainMissionService = new TaskRepository();\r\n            var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);\r\n            if (wcsTask != null)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(model.method))\r\n                {\r\n                    ILocRepository locrep = new LocRepository();\r\n                    var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                    var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);\r\n\r\n                    List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList();\r\n                    bool bobe = false;\r\n                    switch (model.method)\r\n                    {\r\n                        case \"start\":\r\n                            LogHelper.Info($\"海康车任务状态变更为执行,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            if (wcsTask.S_B_STATE.Trim() == \"已推送\")\r\n                            {\r\n                                wcsTask.S_B_STATE = \"执行中\";\r\n                                wcsTask.T_START_TIME = DateTime.Now;\r\n                                MainMissionService.Update(wcsTask);\r\n                                bobe = true;\r\n                            }\r\n                            break;\r\n                        case \"outbin\":\r\n                            LogHelper.Info($\"海康车任务状态变更为取货完成,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"取货完成\";\r\n\r\n                            startloc.N_CURRENT_NUM = 0;\r\n                            startloc.S_LOCK_STATE = \"无\";\r\n                            startloc.T_MODIFY = DateTime.Now;\r\n                            //ILocContainerRepository locContainerRepository = new LocContainerRepository();\r\n                            ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            MainMissionService.Update(wcsTask);\r\n                            locrep.Update(startloc);\r\n\r\n                            bobe = true;\r\n                            var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC));\r\n                            if (device != null)\r\n                            {\r\n                                if (device.deviceType == 1)\r\n                                {\r\n                                    if (device.deviceName.Contains(\"维希尔抓臂\"))\r\n                                    {  //卸货进行清空,触发扫码\r\n                                       var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n                                       string V = inde ? \"R05\" : \"R06\";\r\n                                       Conn.默认Redis.SetValue(device.deviceName + \".\" + V, \"true\", device.deviceName + \"Queue\");\r\n                                       \r\n                                       TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if(device.deviceType == 2){\r\n\t\t\t\t\t\t\t\t\tvar inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n\t\t\t\t\t\t\t\t\t string V = inde? \"D1224\" : \"D1225\";\r\n\t\t\t\t\t\t\t\t\t Conn.默认Redis.SetValue(device.deviceName + \".\" + V, \"0\", device.deviceName + \"Queue\");\r\n                                }\r\n                            }\r\n                            //LocationHelper.UnLockLoc(wcsTask.S_START_LOC);\r\n                            break;\r\n                        case \"end\":\r\n                            LogHelper.Info($\"海康车任务状态变更为完成,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"完成\";\r\n                            wcsTask.T_END_TIME = DateTime.Now;\r\n\r\n                            bobe = true;\r\n                            //ILocContainerRepository locContainerRepository2 = new LocContainerRepository();\r\n                            //List<LocContainerEntity> llls = new List<LocContainerEntity>();\r\n                            //foreach (var c in cntrs)\r\n                            //{\r\n                            //    var action = new LocContainerEntity()\r\n                            //    {\r\n                            //        S_ID = Guid.NewGuid().ToString(),\r\n                            //        S_STATE = \"编辑\",\r\n                            //        T_CREATE = DateTime.Now,\r\n                            //        T_MODIFY = DateTime.Now,\r\n\r\n                            //        S_LOC_CODE = endLoc.S_LOC_CODE,\r\n                            //        S_CNTR_CODE = c,\r\n                            //        S_TYPE = \"\",\r\n                            //    };\r\n                            //    llls.Add(action);\r\n                            //}\r\n\r\n                            endLoc.S_LOCK_STATE = \"无\";\r\n                            endLoc.N_CURRENT_NUM = 1;\r\n                            endLoc.T_MODIFY = DateTime.Now;\r\n                            MainMissionService.Update(wcsTask);\r\n                            if(Settings.deviceInfos.Find(x=>x.deviceType==2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC)))!=null)\r\n                                locrep.Update(endLoc);\r\n                            //locContainerRepository2.Insert(llls);\r\n\r\n                            var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC));\r\n                            if (device2 != null)\r\n                            {\r\n                                if (device2.deviceType == 1)\r\n                                {\r\n                                    if (device2.deviceName.Contains(\"维希尔抓臂\"))\r\n                                    {\r\n                                        //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? \"R10\" : \"R11\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        //卸货再写托盘取走。 ç„¶åŽè§¦å‘扫码进行校验。 \r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        //string V = inde ? \"R05\" : \"R06\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        string V2 = inde ? \"R10_LAST\" : \"R11_LAST\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V2, \"true\", device2.deviceName + \"Queue\");\r\n                                        \r\n                                        RedisHelper.Add(device2.deviceName + \".\" + V2, \"true\", out string msg1);\r\n                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if (device2.deviceType == 2)\r\n                                    if (device2.deviceName.Contains(\"Js捷顺\"))\r\n                                    {\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        string V = inde? \"D1224\" : \"D1225\";\r\n                                        Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"1\", device2.deviceName + \"Queue\");\r\n\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 3,\r\n                                            cntrCode = cntrs.FirstOrDefault()\r\n                                        }));\r\n                                        //if (device2.deviceName.Contains(\"1\"))\r\n                                        //{\r\n                                        //    if (inde) tag.Js1.D1224 = 1;\r\n                                        //    else tag.Js1.D1225 = 1;\r\n                                        //}else\r\n                                        //{\r\n                                        //    if (inde) tag.Js2.D1224 = 1;\r\n                                        //    else tag.Js2.D1225 = 1;\r\n                                        //}\r\n                                    }\r\n                            }\r\n\r\n                            //LocationMethod.JudgeLocation(wcsTask);\r\n                            break;\r\n                        case \"cancel\":\r\n                            LogHelper.Info($\"海康车任务状态变更为取消,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"取消\";\r\n                            //startloc.S_LOCK_STATE = \"无\";\r\n                            //endLoc.S_LOCK_STATE = \"无\";\r\n                            MainMissionService.Update(wcsTask);\r\n                            TaskActRepository taskActRepository = new TaskActRepository();\r\n                            var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO);\r\n                            if (tare.Any())\r\n                            {\r\n                                if(tare.Find(x=>x.S_ACTION_CODE==\"outbin\")==null)\r\n                                {\r\n                                    startloc.S_LOCK_STATE = \"无\";\r\n                                    endLoc.S_LOCK_STATE = \"无\";\r\n                                    locrep.Update(startloc);\r\n                                    locrep.Update(endLoc);\r\n                                }else if (tare.Find(x => x.S_ACTION_CODE == \"end\") == null)\r\n                                {\r\n                                    endLoc.S_LOCK_STATE = \"无\";\r\n                                    locrep.Update(endLoc);\r\n                                }\r\n                            }\r\n\r\n                            //locrep.Update(startloc);\r\n                            //locrep.Update(endLoc);\r\n                            //TaskProcess.OperateStatus(wcsTask, 7);\r\n                            //WCSHelper.Fail(wcsTask);\r\n                            break;\r\n                        case \"apply\":\r\n                            // åˆ¤æ–­è¯¥ä»»åŠ¡çš„æŽ¥é©³ä½æ˜¯å¦æœ‰å…¶ä»–å…¥åº“æˆ–å‡ºåº“ä»»åŠ¡ï¼Œå¦‚æžœæœ‰ï¼Œåˆ™åœ¨ç­‰ä½ç­‰å¾…ï¼Œå¦‚æžœæ²¡æœ‰ï¼Œåˆ™å…¥\r\n                            TaskisOk(wcsTask);\r\n                            break;\r\n                    }\r\n\r\n                    if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO))\r\n                    {\r\n                        var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO);\r\n                        if (mestask!=null&&bobe)\r\n                        {\r\n                            if ( model.method != \"end\")\r\n                            {\r\n                            \tif (mestask.S_START_LOC == wcsTask.S_START_LOC&&mestask.S_B_STATE == \"MES\")\r\n\t                                Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                                {\r\n\t                                    reqCode = wcsTask.S_SRC_NO,\r\n\t                                    model.method\r\n\t                                }));\r\n                            }\r\n                            else\r\n                            {\r\n                                if (mestask.S_END_LOC != wcsTask.S_END_LOC)\r\n                                {\r\n                                    LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå®Œæˆï¼Œé‡ç½®è¿›è¡ŒäºŒé˜¶æ®µã€‚\");\r\n                                    mestask.N_PRIORITY = -88;\r\n                                    MainMissionService.Update(mestask);\r\n                                }\r\n                                else if(mestask.S_B_STATE == \"MES\")\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        reqCode = wcsTask.S_SRC_NO,\r\n                                        model.method\r\n                                    }));\r\n                                }\r\n                            }\r\n\r\n                        }else if(mestask!=null && model.method== \"cancel\")\r\n                        {\r\n                        \t if(mestask.S_B_STATE == \"MES\")\r\n\t                           Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                            {\r\n\t                                reqCode = wcsTask.S_SRC_NO,\r\n\t                                model.method\r\n\t                            })); \r\n                            LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå–消,重置点,线程处理。\");\r\n                            mestask.N_PRIORITY = -1;\r\n                            mestask.S_B_STATE = \"MES_取消\";\r\n                            MainMissionService.Update(mestask);\r\n                        }\r\n                    }\r\n                    TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data,wcsTask.S_START_LOC,wcsTask.S_END_LOC);\r\n                    //调用第三方接口(如果有)TaskProcess.ReportStatus\r\n                }\r\n                else\r\n                {\r\n                    // æš‚时设定为0\r\n                    wcsTask.S_B_STATE = \"上报状态空\";\r\n                    //安全请求等\r\n                    //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                LogHelper.Info($\"当前任务号任务不存在{model.taskCode}\", \"agv杭叉交互日志\");\r\n            }",
      "Code": "public void OperateHKTaskStatus(System.Object param1)\r\n{HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n            if (string.IsNullOrEmpty(model.taskCode))\r\n                return;\r\n            // æŸ¥è¯¢ä»»åŠ¡ï¼šæ ¹æ®ä»»åŠ¡å·\r\n            //var wcsTask = WCSHelper.GetTask(model.taskCode);\r\n            ITaskRepository MainMissionService = new TaskRepository();\r\n            var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);\r\n            if (wcsTask != null)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(model.method))\r\n                {\r\n                    ILocRepository locrep = new LocRepository();\r\n                    var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                    var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);\r\n\r\n                    List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList();\r\n                    bool bobe = false;\r\n                    switch (model.method)\r\n                    {\r\n                        case \"start\":\r\n                            LogHelper.Info($\"海康车任务状态变更为执行,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            if (wcsTask.S_B_STATE.Trim() == \"已推送\")\r\n                            {\r\n                                wcsTask.S_B_STATE = \"执行中\";\r\n                                wcsTask.T_START_TIME = DateTime.Now;\r\n                                MainMissionService.Update(wcsTask);\r\n                                bobe = true;\r\n                            }\r\n                            break;\r\n                        case \"outbin\":\r\n                            LogHelper.Info($\"海康车任务状态变更为取货完成,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"取货完成\";\r\n\r\n                            startloc.N_CURRENT_NUM = 0;\r\n                            startloc.S_LOCK_STATE = \"无\";\r\n                            startloc.T_MODIFY = DateTime.Now;\r\n                            //ILocContainerRepository locContainerRepository = new LocContainerRepository();\r\n                            ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            MainMissionService.Update(wcsTask);\r\n                            locrep.Update(startloc);\r\n\r\n                            bobe = true;\r\n                            var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC));\r\n                            if (device != null)\r\n                            {\r\n                                if (device.deviceType == 1)\r\n                                {\r\n                                    if (device.deviceName.Contains(\"维希尔抓臂\"))\r\n                                    {  //卸货进行清空,触发扫码\r\n                                       var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n                                       string V = inde ? \"R05\" : \"R06\";\r\n                                       Conn.默认Redis.SetValue(device.deviceName + \".\" + V, \"true\", device.deviceName + \"Queue\");\r\n                                       \r\n                                       TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if(device.deviceType == 2){\r\n\t\t\t\t\t\t\t\t\tvar inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n\t\t\t\t\t\t\t\t\t string V = inde? \"D1224\" : \"D1225\";\r\n\t\t\t\t\t\t\t\t\t Conn.默认Redis.SetValue(device.deviceName + \".\" + V, \"0\", device.deviceName + \"Queue\");\r\n                                }\r\n                            }\r\n                            //LocationHelper.UnLockLoc(wcsTask.S_START_LOC);\r\n                            break;\r\n                        case \"end\":\r\n                            LogHelper.Info($\"海康车任务状态变更为完成,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"完成\";\r\n                            wcsTask.T_END_TIME = DateTime.Now;\r\n\r\n                            bobe = true;\r\n                            //ILocContainerRepository locContainerRepository2 = new LocContainerRepository();\r\n                            //List<LocContainerEntity> llls = new List<LocContainerEntity>();\r\n                            //foreach (var c in cntrs)\r\n                            //{\r\n                            //    var action = new LocContainerEntity()\r\n                            //    {\r\n                            //        S_ID = Guid.NewGuid().ToString(),\r\n                            //        S_STATE = \"编辑\",\r\n                            //        T_CREATE = DateTime.Now,\r\n                            //        T_MODIFY = DateTime.Now,\r\n\r\n                            //        S_LOC_CODE = endLoc.S_LOC_CODE,\r\n                            //        S_CNTR_CODE = c,\r\n                            //        S_TYPE = \"\",\r\n                            //    };\r\n                            //    llls.Add(action);\r\n                            //}\r\n\r\n                            endLoc.S_LOCK_STATE = \"无\";\r\n                            endLoc.N_CURRENT_NUM = 1;\r\n                            endLoc.T_MODIFY = DateTime.Now;\r\n                            MainMissionService.Update(wcsTask);\r\n                            if(Settings.deviceInfos.Find(x=>x.deviceType==2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC)))!=null)\r\n                                locrep.Update(endLoc);\r\n                            //locContainerRepository2.Insert(llls);\r\n\r\n                            var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC));\r\n                            if (device2 != null)\r\n                            {\r\n                                if (device2.deviceType == 1)\r\n                                {\r\n                                    if (device2.deviceName.Contains(\"维希尔抓臂\"))\r\n                                    {\r\n                                        //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? \"R10\" : \"R11\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        //卸货再写托盘取走。 ç„¶åŽè§¦å‘扫码进行校验。 \r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        //string V = inde ? \"R05\" : \"R06\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        string V2 = inde ? \"R10_LAST\" : \"R11_LAST\";\r\n                                        //Conn.默认Redis.SetValue(device2.deviceName + \".\" + V2, \"true\", device2.deviceName + \"Queue\");\r\n                                        \r\n                                        RedisHelper.Add(device2.deviceName + \".\" + V2, \"true\", out string msg1);\r\n                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if (device2.deviceType == 2)\r\n                                    if (device2.deviceName.Contains(\"Js捷顺\"))\r\n                                    {\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        string V = inde? \"D1224\" : \"D1225\";\r\n                                        Conn.默认Redis.SetValue(device2.deviceName + \".\" + V, \"1\", device2.deviceName + \"Queue\");\r\n\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 3,\r\n                                            cntrCode = cntrs.FirstOrDefault()\r\n                                        }));\r\n                                        //if (device2.deviceName.Contains(\"1\"))\r\n                                        //{\r\n                                        //    if (inde) tag.Js1.D1224 = 1;\r\n                                        //    else tag.Js1.D1225 = 1;\r\n                                        //}else\r\n                                        //{\r\n                                        //    if (inde) tag.Js2.D1224 = 1;\r\n                                        //    else tag.Js2.D1225 = 1;\r\n                                        //}\r\n                                    }\r\n                            }\r\n\r\n                            //LocationMethod.JudgeLocation(wcsTask);\r\n                            break;\r\n                        case \"cancel\":\r\n                            LogHelper.Info($\"海康车任务状态变更为取消,任务号为:{model.taskCode}\", \"agv杭叉交互日志\");\r\n                            wcsTask.S_B_STATE = \"取消\";\r\n                            //startloc.S_LOCK_STATE = \"无\";\r\n                            //endLoc.S_LOCK_STATE = \"无\";\r\n                            MainMissionService.Update(wcsTask);\r\n                            TaskActRepository taskActRepository = new TaskActRepository();\r\n                            var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO);\r\n                            if (tare.Any())\r\n                            {\r\n                                if(tare.Find(x=>x.S_ACTION_CODE==\"outbin\")==null)\r\n                                {\r\n                                    startloc.S_LOCK_STATE = \"无\";\r\n                                    endLoc.S_LOCK_STATE = \"无\";\r\n                                    locrep.Update(startloc);\r\n                                    locrep.Update(endLoc);\r\n                                }else if (tare.Find(x => x.S_ACTION_CODE == \"end\") == null)\r\n                                {\r\n                                    endLoc.S_LOCK_STATE = \"无\";\r\n                                    locrep.Update(endLoc);\r\n                                }\r\n                            }\r\n\r\n                            //locrep.Update(startloc);\r\n                            //locrep.Update(endLoc);\r\n                            //TaskProcess.OperateStatus(wcsTask, 7);\r\n                            //WCSHelper.Fail(wcsTask);\r\n                            break;\r\n                        case \"apply\":\r\n                            // åˆ¤æ–­è¯¥ä»»åŠ¡çš„æŽ¥é©³ä½æ˜¯å¦æœ‰å…¶ä»–å…¥åº“æˆ–å‡ºåº“ä»»åŠ¡ï¼Œå¦‚æžœæœ‰ï¼Œåˆ™åœ¨ç­‰ä½ç­‰å¾…ï¼Œå¦‚æžœæ²¡æœ‰ï¼Œåˆ™å…¥\r\n                            TaskisOk(wcsTask);\r\n                            break;\r\n                    }\r\n\r\n                    if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO))\r\n                    {\r\n                        var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO);\r\n                        if (mestask!=null&&bobe)\r\n                        {\r\n                            if ( model.method != \"end\")\r\n                            {\r\n                            \tif (mestask.S_START_LOC == wcsTask.S_START_LOC&&mestask.S_B_STATE == \"MES\")\r\n\t                                Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                                {\r\n\t                                    reqCode = wcsTask.S_SRC_NO,\r\n\t                                    model.method\r\n\t                                }));\r\n                            }\r\n                            else\r\n                            {\r\n                                if (mestask.S_END_LOC != wcsTask.S_END_LOC)\r\n                                {\r\n                                    LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå®Œæˆï¼Œé‡ç½®è¿›è¡ŒäºŒé˜¶æ®µã€‚\");\r\n                                    mestask.N_PRIORITY = -88;\r\n                                    MainMissionService.Update(mestask);\r\n                                }\r\n                                else if(mestask.S_B_STATE == \"MES\")\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        reqCode = wcsTask.S_SRC_NO,\r\n                                        model.method\r\n                                    }));\r\n                                }\r\n                            }\r\n\r\n                        }else if(mestask!=null && model.method== \"cancel\")\r\n                        {\r\n                        \t if(mestask.S_B_STATE == \"MES\")\r\n\t                           Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                            {\r\n\t                                reqCode = wcsTask.S_SRC_NO,\r\n\t                                model.method\r\n\t                            })); \r\n                            LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} ä¸€é˜¶æ®µå–消,重置点,线程处理。\");\r\n                            mestask.N_PRIORITY = -1;\r\n                            mestask.S_B_STATE = \"MES_取消\";\r\n                            MainMissionService.Update(mestask);\r\n                        }\r\n                    }\r\n                    TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data,wcsTask.S_START_LOC,wcsTask.S_END_LOC);\r\n                    //调用第三方接口(如果有)TaskProcess.ReportStatus\r\n                }\r\n                else\r\n                {\r\n                    // æš‚时设定为0\r\n                    wcsTask.S_B_STATE = \"上报状态空\";\r\n                    //安全请求等\r\n                    //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                LogHelper.Info($\"当前任务号任务不存在{model.taskCode}\", \"agv杭叉交互日志\");\r\n            }\r\n}",
      "CusMethod": {
        "Name": "OperateHKTaskStatus",
        "Params": [
@@ -593,8 +593,8 @@
      "Type": "ClassCode",
      "Level": "Item",
      "Statement": "public class TaskProcess",
      "EditCode": "internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\t\r\n            LogHelper.Debug($\"输送线RGV空托任务 from:{from}>to {to}开始创建>\");\r\n     var cntrInfo = string.Join(\",\", cntrs);\r\n ILocRepository locc = new LocRepository();\r\n var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);\r\n var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);\r\n \r\n            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;\r\n            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;\r\n            string t = \"F01\";\r\n            if (s && !e) t = \"A002\";\r\n            if (!s && e) t = \"A003\";\r\n            if (s && e) t = \"A004\";\r\n try\r\n {\r\n\r\n     TaskEntity wmsTask = new TaskEntity()\r\n     {\r\n     \tS_ID = Guid.NewGuid().ToString(),\r\n\t\tS_STATE = \"编辑\",\r\n\t\tT_CREATE = DateTime.Now,\r\n\t\tT_MODIFY = DateTime.Now,\r\n\r\n         S_TASK_NO = GenerateTaskNo(),\r\n         S_START_LAREA = fromLoc.S_AREA_CODE,\r\n         S_END_LAREA = endLoc.S_AREA_CODE,\r\n         S_DEPART_NAME = \"\",\r\n         S_START_LOC = from,\r\n         S_END_LOC = to,\r\n         S_TYPE = taskType,\r\n         S_SRC_NO = no,//\r\n         N_PRIORITY = pri,\r\n         S_WORK_MODE = workMode,\r\n         S_B_STATE = \"未执行\",\r\n         S_CNTRS = cntrInfo,\r\n         N_START_LAYER = startLayer,\r\n         N_END_LAYER = endLayer,\r\n         N_CNTR_COUNT = cntrCount,\r\n                    S_INDEX=t,\r\n     };\r\n     ITaskRepository taskserice = new TaskRepository();\r\n     taskserice.Insert(wmsTask);\r\n     \r\n                if (workMode == \"AGV\")\r\n                {\r\n                    fromLoc.S_LOCK_STATE = \"出库锁\";\r\n                    endLoc.S_LOCK_STATE = \"入库锁\";\r\n                    locc.Update(fromLoc);\r\n                    locc.Update(endLoc);\r\n                }\r\n                \r\n                LogHelper.Debug($\"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功\");\r\n }\r\n catch (Exception ex)\r\n {\r\n     LogHelper.Error(\"CreateTask\" + ex.Message, ex);\r\n     return false;\r\n }\r\n}\r\n\r\n\r\n     internal static void AddActionRecord(string no, string state, string forkliftNo, string extData,string strloc,string endloc)\r\n        {\r\n            var action = new TaskActEntity()\r\n            {\r\n                S_ID = Guid.NewGuid().ToString(),\r\n                S_STATE = \"编辑\",\r\n                T_CREATE = DateTime.Now,\r\n                T_MODIFY = DateTime.Now,\r\n                S_START_LOC= strloc,\r\n                S_END_LOC= endloc,\r\n                S_ACTION_CODE = state,\r\n                S_TASK_NO = no,\r\n                S_EQ_NO = forkliftNo,\r\n                S_EQ_TYPE = \"agv\",\r\n                S_DATA = extData,\r\n                N_CREATEMETHOD = 0\r\n            };\r\n            TaskActRepository taskserice = new TaskActRepository();\r\n            taskserice.Insert(action);\r\n        }\r\n\r\n        public static System.String GenerateTaskNo()\r\n        {\r\n            var id = SYSHelper.GetSerialNumber(\"任务号\", \"TN\", \"1\");\r\n            var date = DateTime.Now.ToString(\"yyMMdd\");\r\n            return $\"TN{date}{id.ToString().PadLeft(4, '0')}\";\r\n        }",
      "Code": "public class TaskProcess\r\n{internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\t\r\n            LogHelper.Debug($\"输送线RGV空托任务 from:{from}>to {to}开始创建>\");\r\n     var cntrInfo = string.Join(\",\", cntrs);\r\n ILocRepository locc = new LocRepository();\r\n var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);\r\n var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);\r\n \r\n            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;\r\n            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;\r\n            string t = \"F01\";\r\n            if (s && !e) t = \"A002\";\r\n            if (!s && e) t = \"A003\";\r\n            if (s && e) t = \"A004\";\r\n try\r\n {\r\n\r\n     TaskEntity wmsTask = new TaskEntity()\r\n     {\r\n     \tS_ID = Guid.NewGuid().ToString(),\r\n\t\tS_STATE = \"编辑\",\r\n\t\tT_CREATE = DateTime.Now,\r\n\t\tT_MODIFY = DateTime.Now,\r\n\r\n         S_TASK_NO = GenerateTaskNo(),\r\n         S_START_LAREA = fromLoc.S_AREA_CODE,\r\n         S_END_LAREA = endLoc.S_AREA_CODE,\r\n         S_DEPART_NAME = \"\",\r\n         S_START_LOC = from,\r\n         S_END_LOC = to,\r\n         S_TYPE = taskType,\r\n         S_SRC_NO = no,//\r\n         N_PRIORITY = pri,\r\n         S_WORK_MODE = workMode,\r\n         S_B_STATE = \"未执行\",\r\n         S_CNTRS = cntrInfo,\r\n         N_START_LAYER = startLayer,\r\n         N_END_LAYER = endLayer,\r\n         N_CNTR_COUNT = cntrCount,\r\n                    S_INDEX=t,\r\n     };\r\n     ITaskRepository taskserice = new TaskRepository();\r\n     taskserice.Insert(wmsTask);\r\n     \r\n                if (workMode == \"AGV\")\r\n                {\r\n                    fromLoc.S_LOCK_STATE = \"出库锁\";\r\n                    endLoc.S_LOCK_STATE = \"入库锁\";\r\n                    locc.Update(fromLoc);\r\n                    locc.Update(endLoc);\r\n                }\r\n                \r\n                LogHelper.Debug($\"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功\");\r\n }\r\n catch (Exception ex)\r\n {\r\n     LogHelper.Error(\"CreateTask\" + ex.Message, ex);\r\n     return false;\r\n }\r\n}\r\n\r\n\r\n     internal static void AddActionRecord(string no, string state, string forkliftNo, string extData,string strloc,string endloc)\r\n        {\r\n            var action = new TaskActEntity()\r\n            {\r\n                S_ID = Guid.NewGuid().ToString(),\r\n                S_STATE = \"编辑\",\r\n                T_CREATE = DateTime.Now,\r\n                T_MODIFY = DateTime.Now,\r\n                S_START_LOC= strloc,\r\n                S_END_LOC= endloc,\r\n                S_ACTION_CODE = state,\r\n                S_TASK_NO = no,\r\n                S_EQ_NO = forkliftNo,\r\n                S_EQ_TYPE = \"agv\",\r\n                S_DATA = extData,\r\n                N_CREATEMETHOD = 0\r\n            };\r\n            TaskActRepository taskserice = new TaskActRepository();\r\n            taskserice.Insert(action);\r\n        }\r\n\r\n        public static System.String GenerateTaskNo()\r\n        {\r\n            var id = SYSHelper.GetSerialNumber(\"任务号\", \"TN\", \"1\");\r\n            var date = DateTime.Now.ToString(\"yyMMdd\");\r\n            return $\"TN{date}{id.ToString().PadLeft(4, '0')}\";\r\n        }\r\n}",
      "EditCode": "internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\t\r\n            LogHelper.Info($\"输送线RGV空托任务 from:{from}>to {to}开始创建>\");\r\n     var cntrInfo = string.Join(\",\", cntrs);\r\n ILocRepository locc = new LocRepository();\r\n var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);\r\n var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);\r\n \r\n            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;\r\n            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;\r\n            string t = \"F01\";\r\n            if (s && !e) t = \"A002\";\r\n            if (!s && e) t = \"A003\";\r\n            if (s && e) t = \"A004\";\r\n try\r\n {\r\n\r\n     TaskEntity wmsTask = new TaskEntity()\r\n     {\r\n     \tS_ID = Guid.NewGuid().ToString(),\r\n\t\tS_STATE = \"编辑\",\r\n\t\tT_CREATE = DateTime.Now,\r\n\t\tT_MODIFY = DateTime.Now,\r\n\r\n         S_TASK_NO = GenerateTaskNo(),\r\n         S_START_LAREA = fromLoc.S_AREA_CODE,\r\n         S_END_LAREA = endLoc.S_AREA_CODE,\r\n         S_DEPART_NAME = \"\",\r\n         S_START_LOC = from,\r\n         S_END_LOC = to,\r\n         S_TYPE = taskType,\r\n         S_SRC_NO = no,//\r\n         N_PRIORITY = pri,\r\n         S_WORK_MODE = workMode,\r\n         S_B_STATE = \"未执行\",\r\n         S_CNTRS = cntrInfo,\r\n         N_START_LAYER = startLayer,\r\n         N_END_LAYER = endLayer,\r\n         N_CNTR_COUNT = cntrCount,\r\n                    S_INDEX=t,\r\n     };\r\n     ITaskRepository taskserice = new TaskRepository();\r\n     taskserice.Insert(wmsTask);\r\n     \r\n                if (workMode == \"AGV\")\r\n                {\r\n                    fromLoc.S_LOCK_STATE = \"出库锁\";\r\n                    endLoc.S_LOCK_STATE = \"入库锁\";\r\n                    locc.Update(fromLoc);\r\n                    locc.Update(endLoc);\r\n                }\r\n                \r\n                LogHelper.Info($\"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功\");\r\n                return true;\r\n }\r\n catch (Exception ex)\r\n {\r\n     LogHelper.Error(\"CreateTask\" + ex.Message, ex);\r\n     return false;\r\n }\r\n}\r\n\r\n\r\n     internal static void AddActionRecord(string no, string state, string forkliftNo, string extData,string strloc,string endloc)\r\n        {\r\n            var action = new TaskActEntity()\r\n            {\r\n                S_ID = Guid.NewGuid().ToString(),\r\n                S_STATE = \"编辑\",\r\n                T_CREATE = DateTime.Now,\r\n                T_MODIFY = DateTime.Now,\r\n                S_START_LOC= strloc,\r\n                S_END_LOC= endloc,\r\n                S_ACTION_CODE = state,\r\n                S_TASK_NO = no,\r\n                S_EQ_NO = forkliftNo,\r\n                S_EQ_TYPE = \"agv\",\r\n                S_DATA = extData,\r\n                N_CREATEMETHOD = 0\r\n            };\r\n            TaskActRepository taskserice = new TaskActRepository();\r\n            taskserice.Insert(action);\r\n        }\r\n\r\n        public static System.String GenerateTaskNo()\r\n        {\r\n            var id = SYSHelper.GetSerialNumber(\"任务号\", \"TN\", \"1\");\r\n            var date = DateTime.Now.ToString(\"yyMMdd\");\r\n            return $\"TN{date}{id.ToString().PadLeft(4, '0')}\";\r\n        }",
      "Code": "public class TaskProcess\r\n{internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\t\r\n            LogHelper.Info($\"输送线RGV空托任务 from:{from}>to {to}开始创建>\");\r\n     var cntrInfo = string.Join(\",\", cntrs);\r\n ILocRepository locc = new LocRepository();\r\n var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);\r\n var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);\r\n \r\n            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;\r\n            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;\r\n            string t = \"F01\";\r\n            if (s && !e) t = \"A002\";\r\n            if (!s && e) t = \"A003\";\r\n            if (s && e) t = \"A004\";\r\n try\r\n {\r\n\r\n     TaskEntity wmsTask = new TaskEntity()\r\n     {\r\n     \tS_ID = Guid.NewGuid().ToString(),\r\n\t\tS_STATE = \"编辑\",\r\n\t\tT_CREATE = DateTime.Now,\r\n\t\tT_MODIFY = DateTime.Now,\r\n\r\n         S_TASK_NO = GenerateTaskNo(),\r\n         S_START_LAREA = fromLoc.S_AREA_CODE,\r\n         S_END_LAREA = endLoc.S_AREA_CODE,\r\n         S_DEPART_NAME = \"\",\r\n         S_START_LOC = from,\r\n         S_END_LOC = to,\r\n         S_TYPE = taskType,\r\n         S_SRC_NO = no,//\r\n         N_PRIORITY = pri,\r\n         S_WORK_MODE = workMode,\r\n         S_B_STATE = \"未执行\",\r\n         S_CNTRS = cntrInfo,\r\n         N_START_LAYER = startLayer,\r\n         N_END_LAYER = endLayer,\r\n         N_CNTR_COUNT = cntrCount,\r\n                    S_INDEX=t,\r\n     };\r\n     ITaskRepository taskserice = new TaskRepository();\r\n     taskserice.Insert(wmsTask);\r\n     \r\n                if (workMode == \"AGV\")\r\n                {\r\n                    fromLoc.S_LOCK_STATE = \"出库锁\";\r\n                    endLoc.S_LOCK_STATE = \"入库锁\";\r\n                    locc.Update(fromLoc);\r\n                    locc.Update(endLoc);\r\n                }\r\n                \r\n                LogHelper.Info($\"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功\");\r\n                return true;\r\n }\r\n catch (Exception ex)\r\n {\r\n     LogHelper.Error(\"CreateTask\" + ex.Message, ex);\r\n     return false;\r\n }\r\n}\r\n\r\n\r\n     internal static void AddActionRecord(string no, string state, string forkliftNo, string extData,string strloc,string endloc)\r\n        {\r\n            var action = new TaskActEntity()\r\n            {\r\n                S_ID = Guid.NewGuid().ToString(),\r\n                S_STATE = \"编辑\",\r\n                T_CREATE = DateTime.Now,\r\n                T_MODIFY = DateTime.Now,\r\n                S_START_LOC= strloc,\r\n                S_END_LOC= endloc,\r\n                S_ACTION_CODE = state,\r\n                S_TASK_NO = no,\r\n                S_EQ_NO = forkliftNo,\r\n                S_EQ_TYPE = \"agv\",\r\n                S_DATA = extData,\r\n                N_CREATEMETHOD = 0\r\n            };\r\n            TaskActRepository taskserice = new TaskActRepository();\r\n            taskserice.Insert(action);\r\n        }\r\n\r\n        public static System.String GenerateTaskNo()\r\n        {\r\n            var id = SYSHelper.GetSerialNumber(\"任务号\", \"TN\", \"1\");\r\n            var date = DateTime.Now.ToString(\"yyMMdd\");\r\n            return $\"TN{date}{id.ToString().PadLeft(4, '0')}\";\r\n        }\r\n}",
      "CusMethod": {
        "Name": "",
        "Params": [],
@@ -668,9 +668,30 @@
        "InheritClass": "",
        "Inherits": []
      }
    },
    {
      "ID": "20250623083459471",
      "Name": "AutoThread",
      "Desc": "",
      "ParentID": "",
      "Type": "VsCode",
      "Level": "Item",
      "Statement": "",
      "EditCode": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Concurrent;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing GZ.Modular.Redis;\r\nusing GZ.DB.Entity.OIDATABASE;\r\nusing GZ.DB.IRepository.OIDATABASE;\r\nusing GZ.DB.Repository.OIDATABASE;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement;\r\nusing System.Windows.Interop;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;\r\n\r\nnamespace GZ.Projects.AuxAllWCS\r\n{\r\n    public partial class AutoThread\r\n    {\r\n\r\n        private static AutoThread _instance;\r\n\r\n        // ç§æœ‰æž„造函数防止外部实例化\r\n        private AutoThread() { }\r\n\r\n        public static AutoThread Instance\r\n        {\r\n            get\r\n            {\r\n                if (_instance == null)\r\n                {\r\n                    _instance = new AutoThread();\r\n                }\r\n                return _instance;\r\n            }\r\n        }\r\n\r\n        // çº¿ç¨‹å®‰å…¨çš„委托缓存\r\n        private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();\r\n\r\n        // æ–¹æ³•执行器\r\n        public static object InvokeMethod(object instance, string methodName, params object[] args)\r\n        {\r\n            var cacheKey = $\"{instance.GetType().FullName}_{methodName}\";\r\n\r\n            if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))\r\n            {\r\n                // èŽ·å–æ–¹æ³•ä¿¡æ¯\r\n                var methodInfo = instance.GetType().GetMethod(\r\n                    methodName,\r\n                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n                if (methodInfo == null)\r\n                    throw new MissingMethodException($\"Method {methodName} not found\");\r\n\r\n                // åˆ›å»ºå§”托并缓存\r\n                methodDelegate = Delegate.CreateDelegate(\r\n                    GetDelegateType(methodInfo),\r\n                    instance,\r\n                    methodInfo);\r\n\r\n                _methodCache.TryAdd(cacheKey, methodDelegate);\r\n            }\r\n\r\n            // æ‰§è¡Œå§”托\r\n            return methodDelegate.DynamicInvoke(args);\r\n        }\r\n\r\n        // æ ¹æ®æ–¹æ³•签名生成对应的委托类型\r\n        private static Type GetDelegateType(MethodInfo methodInfo)\r\n        {\r\n            var parameterTypes = methodInfo.GetParameters()\r\n                .Select(p => p.ParameterType)\r\n                .ToList();\r\n\r\n            if (methodInfo.ReturnType == typeof(void))\r\n            {\r\n                return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());\r\n            }\r\n            else\r\n            {\r\n                parameterTypes.Add(methodInfo.ReturnType);\r\n                return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// é…ç½®åˆå§‹åŒ–。\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        /// <param name=\"action\"></param>\r\n        public void ThreadSettingInit(Tag tag, Action action)\r\n        {\r\n            Console.WriteLine(\"初始化配置 çº¿ç¨‹ run \" + tag.Global.SettingsOver);\r\n            if (tag.Global.SettingsOver == 0)\r\n            {\r\n                action?.Invoke();\r\n                tag.Global.SettingsOver = 1;\r\n            }\r\n            else if (Settings.deviceInfos.Count == 0)\r\n            {\r\n                tag.Global.SettingsOver = 0;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// æ·é¡º1 ä¿¡å·å¤„理\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void ThreadJS1(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadJS1 æ·é¡º1 ä¿¡å·å¤„理 =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js捷顺1\");\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)\r\n                {\r\n                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                    {\r\n                        requestType = 4,\r\n                        endBit = VERX.location[0]\r\n                    }));\r\n                    LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                    if (str.Contains(\"true\"))\r\n                    {\r\n                        //tag.Js1.D1212_LAST = 1;\r\n                        RedisHelper.Add($\"Js捷顺1.D1212_LAST\", \"1\", out string msg);\r\n                    }\r\n                }\r\n                if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)\r\n                {\r\n                    //tag.Js1.D1212_LAST = 0; \r\n                    RedisHelper.Add($\"Js捷顺1.D1212_LAST\", \"0\", out string msg);\r\n                }\r\n                if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n                {\r\n                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                    {\r\n                        requestType = 4,\r\n                        endBit = VERX.location[1]\r\n                    }));\r\n                    LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                    if (str.Contains(\"true\"))\r\n                    {\r\n                        //tag.Js1.D1213_LAST = 1;\r\n                        RedisHelper.Add($\"Js捷顺1.D1213_LAST\", \"1\", out string msg);\r\n                    }\r\n                }\r\n                if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)\r\n                {\r\n                    //tag.Js1.D1213_LAST = 0;\r\n                    RedisHelper.Add($\"Js捷顺1.D1213_LAST\", \"0\", out string msg);\r\n                }\r\n            }\r\n        }\r\n        /// <summary>\r\n        /// æ·é¡º2 ä¿¡å·å¤„理\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void ThreadJS2(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadJS2 æ·é¡º2 ä¿¡å·å¤„理 =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js捷顺2\");\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)\r\n                {\r\n                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                    {\r\n                        requestType = 4,\r\n                        endBit = VERX.location[0]\r\n                    }));\r\n                    LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                    if (str.Contains(\"true\"))\r\n                    {\r\n                        //tag.Js2.D1212_LAST = 1;\r\n\r\n                        RedisHelper.Add($\"Js捷顺1.D1212_LAST\", \"1\", out string msg);\r\n                    }\r\n                }\r\n                if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)\r\n                {\r\n                    //tag.Js2.D1212_LAST = 0;\r\n\r\n                    RedisHelper.Add($\"Js捷顺1.D1212_LAST\", \"0\", out string msg);\r\n                }\r\n                if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)\r\n                {\r\n                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                    {\r\n                        requestType = 4,\r\n                        endBit = VERX.location[1]\r\n                    }));\r\n                    LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                    if (str.Contains(\"true\"))\r\n                    {\r\n                        //tag.Js2.D1213_LAST = 1;\r\n\r\n                        RedisHelper.Add($\"Js捷顺1.D1213_LAST\", \"1\", out string msg);\r\n                    }\r\n                }\r\n                if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)\r\n                {\r\n                    //tag.Js2.D1213_LAST = 0;\r\n\r\n                    RedisHelper.Add($\"Js捷顺1.D1213_LAST\", \"0\", out string msg);\r\n                }\r\n            }\r\n        }\r\n        /// <summary>\r\n        /// ç»´å¸Œå°”1 å·¦\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void Threadwxr1L(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Threadwxr1L ç»´å¸Œå°”1 å·¦ =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)\r\n                {\r\n                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                    {\r\n                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                        {\r\n                            requestType = 1,\r\n                            cntrCode = traycode,\r\n                            startBit = VERX.location[0],\r\n                            endBit = \"\"\r\n                        }));\r\n                        LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                        if (str.Contains(\"true\"))\r\n                        {\r\n                            tag.wxr1.R44_LAST = true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    //TaskRepository ts = new TaskRepository();\r\n                    if (tag.wxr1.R10_LAST) //托盘放置信号。。\r\n                    {\r\n                        if (tag.wxr1.R10)\r\n                        {\r\n                            tag.wxr1.R10_LAST = false;\r\n                        }\r\n                        else\r\n                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                        {\r\n                            //上报校验。\r\n                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                            {\r\n                                sceneType = 1,\r\n                                cntrCode = traycode,\r\n                            }));\r\n                            if (str.Contains(\"true\"))\r\n                            {\r\n                                //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                tag.wxr1.R10 = true;\r\n                                tag.wxr1.R44_LAST = false;\r\n                            }\r\n                            else\r\n                            {\r\n                                //报警。\r\n                            }\r\n                        }\r\n                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// ç»´å¸Œå°”1 å³\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void Threadwxr1R(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Threadwxr1R ç»´å¸Œå°”1 å³ =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)\r\n                {\r\n                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                    {\r\n                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                        {\r\n                            requestType = 1,\r\n                            cntrCode = traycode,\r\n                            startBit = VERX.location[1],\r\n                            endBit = \"\"\r\n                        }));\r\n                        LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                        if (str.Contains(\"true\"))\r\n                        {\r\n                            tag.wxr1.R46_LAST = true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (tag.wxr1.R11_LAST) //托盘放置信号。。\r\n                    {\r\n                        if (tag.wxr1.R11)\r\n                        {\r\n                            tag.wxr1.R11_LAST = false;\r\n                        }\r\n                        else\r\n                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                        {\r\n                            //上报校验。\r\n                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                            {\r\n                                sceneType = 1,\r\n                                cntrCode = traycode,\r\n                            }));\r\n                            if (str.Contains(\"true\"))\r\n                            {\r\n                                //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                tag.wxr1.R11 = true;\r\n                                tag.wxr1.R46_LAST = false;\r\n                            }\r\n                            else\r\n                            {\r\n                                //报警。\r\n                            }\r\n                        }\r\n                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// ç»´å¸Œå°”2 å·¦\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void Threadwxr2L(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Threadwxr2L ç»´å¸Œå°”2 å·¦ =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)\r\n                {\r\n                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                    {\r\n                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                        {\r\n                            requestType = 1,\r\n                            cntrCode = traycode,\r\n                            startBit = VERX.location[0],\r\n                            endBit = \"\"\r\n                        }));\r\n                        LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                        if (str.Contains(\"true\"))\r\n                        {\r\n                            tag.wxr2.R44_LAST = true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (tag.wxr2.R10_LAST) //托盘放置信号。。\r\n                    {\r\n                        if (tag.wxr2.R10)\r\n                        {\r\n                            tag.wxr2.R10_LAST = false;\r\n                        }\r\n                        else\r\n                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                        {\r\n                            //上报校验。\r\n                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                            {\r\n                                sceneType = 1,\r\n                                cntrCode = traycode,\r\n                            }));\r\n                            if (str.Contains(\"true\"))\r\n                            {\r\n                                //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                tag.wxr2.R10 = true;\r\n                                tag.wxr2.R44_LAST = false;\r\n                            }\r\n                            else\r\n                            {\r\n                                //报警。\r\n                            }\r\n                        }\r\n                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// ç»´å¸Œå°”2 å³\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void Threadwxr2R(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Threadwxr2R ç»´å¸Œå°”2 å³ =================> \");\r\n\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)\r\n                {\r\n                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                    {\r\n                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                        {\r\n                            requestType = 1,\r\n                            cntrCode = traycode,\r\n                            startBit = VERX.location[1],\r\n                            endBit = \"\"\r\n                        }));\r\n                        LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                        if (str.Contains(\"true\"))\r\n                        {\r\n                            tag.wxr2.R46_LAST = true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (tag.wxr2.R11_LAST) //托盘放置信号。。\r\n                    {\r\n                        if (tag.wxr2.R11)\r\n                        {\r\n                            tag.wxr2.R11_LAST = false;\r\n                        }\r\n                        else\r\n                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                        {\r\n                            //上报校验。\r\n                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                            {\r\n                                sceneType = 1,\r\n                                cntrCode = traycode,\r\n                            }));\r\n                            if (str.Contains(\"true\"))\r\n                            {\r\n                                //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                tag.wxr2.R11 = true;\r\n                                tag.wxr2.R46_LAST = false;\r\n                            }\r\n                            else\r\n                            {\r\n                                //报警。\r\n                            }\r\n                        }\r\n                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)\r\n        {\r\n            Console.WriteLine($\"ThreadTaskRun ä»»åŠ¡ä¸‹å‘ =================> \");\r\n            LogHelper.Info(\"ThreadTaskRun ä»»åŠ¡ä¸‹å‘\");\r\n\r\n            ITaskRepository taskservice = new TaskRepository();\r\n            try\r\n            {\r\n                LogHelper.Info(\"任务下发  ARG ä»»åŠ¡ è¿›å…¥\");\r\n                #region AGV任务下发。\r\n\r\n                var tklist = taskservice.FindList(x => x.S_B_STATE == \"未执行\" && x.S_WORK_MODE == \"AGV\");\r\n                if (tklist.Any())\r\n                    foreach (var tk in tklist.GroupBy(item =>\r\n                    {\r\n                        var ticks = item.T_CREATE.Ticks;\r\n                        return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n                    }).OrderBy(x => x.Key))\r\n                    {\r\n                        var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();\r\n                        foreach (var t in ts)\r\n                        {\r\n                            var b = false;\r\n                            b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);\r\n\r\n                            if (b)\r\n                            {\r\n                                t.S_B_STATE = \"已推送\";\r\n                                taskservice.Update(t);\r\n                            }\r\n                        }\r\n                        break;\r\n                    }\r\n                //foreach (var tk in tklist.GroupBy(item =>\r\n                //{\r\n                //    var ticks = item.T_CREATE.Ticks;\r\n                //    return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n                //}).OrderBy(x => x.Key))\r\n                //if (tklist.Any())\r\n                //{\r\n\r\n                #endregion\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                LogHelper.Info(ex.Message + ex.StackTrace);\r\n            }\r\n            try\r\n            {\r\n                #region Rgv\r\n\r\n                LogHelper.Info($\"查看RGV ç”µé‡ï¼šã€{tag.RGV.R当前电量}】 å……电状态:【{tag.RGV.R充电状态}】 æ•…障代码:【{tag.RGV.RgvrunError}】\");\r\n\r\n                if (tag.RGV.taskend == 125)\r\n                {\r\n                    System.Threading.Thread.Sleep(3000);\r\n                    return;\r\n                }\r\n                LogHelper.Info(\"任务下发  Rgv ä»»åŠ¡ è¿›å…¥\");\r\n\r\n                var task1Isrun = false;\r\n                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)\r\n                {\r\n                    task1Isrun = true;\r\n                    //if (tag.RGV.bit1taskOver_LAST == 1)\r\n                    //    RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                }\r\n                var task2Isrun = false;\r\n                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)\r\n                {\r\n                    task2Isrun = true;\r\n                    //if (tag.RGV.bit2taskOver_LAST == 1)\r\n                    //    RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                }\r\n                if (task1Isrun || task2Isrun)\r\n                {\r\n                    string mes = \"\";\r\n                    if (task1Isrun)\r\n                        mes += tag.RGV.ReadTask1No + \"执行中...\";\r\n                    if (task2Isrun)\r\n                        mes += tag.RGV.ReadTask2No + \"执行中...\";\r\n                    LogHelper.Info($\"{mes} ä¸èƒ½ä¸‹å‘新任务。\");\r\n                    System.Threading.Thread.Sleep(3000);\r\n                    return; \r\n                }\r\n                var thisOver = 0;\r\n                TaskEntity task1 = null;\r\n                TaskEntity task2 = null;\r\n\r\n                LogHelper.Info($\"查看RGV 1工位任务》\");\r\n                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)\r\n                {\r\n                    var taskno = tag.RGV.ReadTask1No;\r\n                    LogHelper.Info($\"RGV 1工位任务{tag.RGV.ReadTask1No}\");\r\n                    string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n                    task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n                    LogHelper.Info($\"RGV 1工位任务{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST:{tag.RGV.bit1taskOver_LAST}\");\r\n                    if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)\r\n                    {\r\n                        if (task1.S_B_STATE != \"完成\")\r\n                        {\r\n                            thisOver = 1;\r\n                            if (task1.S_B_STATE == \"取货完成\")\r\n                            {\r\n                                task1.S_B_STATE = \"完成\";\r\n                                tag.RGV.ReadTask1No = 0;\r\n                            }\r\n                            else\r\n                            {\r\n                                task1.S_B_STATE = \"取货完成\";\r\n                            }\r\n                            tag.RGV.bit1taskOver = 0;\r\n                            LogHelper.Info($\"RGV 1工位任务{task1.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task1.S_B_STATE}\");\r\n                            //tag.RGV.bit1taskOver_LAST = 1;\r\n                            RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"1\", out string msg);\r\n                            LogHelper.Info($\"RGV 1工位任务写处理\");\r\n                            taskservice.Update(task1);\r\n                            LogHelper.Info($\"RGV 1工位任务更新。\");\r\n                        }\r\n                        else\r\n                        {\r\n                            LogHelper.Info(\"RGV1工位任务已经完成。\");\r\n                        }\r\n                    }\r\n                }\r\n                else if (tag.RGV.ReadTask1No == 0)\r\n                {\r\n                    LogHelper.Info($\"RGV 1工位没有任务》\");\r\n                }\r\n\r\n                LogHelper.Info($\"查看RGV 2工位任务》\");\r\n                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)\r\n                {\r\n                    var taskno = tag.RGV.ReadTask2No;\r\n                    LogHelper.Info($\"RGV 2工位任务{tag.RGV.ReadTask2No}\");\r\n                    string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n                    task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n                    LogHelper.Info($\"RGV2工位任务{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST:{tag.RGV.bit2taskOver_LAST}\");\r\n                    if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)\r\n                    {\r\n                        if (task2.S_B_STATE != \"完成\")\r\n                        {\r\n                            thisOver = 2;\r\n                            if (task2.S_B_STATE == \"取货完成\")\r\n                            {\r\n                                task2.S_B_STATE = \"完成\";\r\n                                tag.RGV.ReadTask2No = 0;\r\n                            }\r\n                            else\r\n                            {\r\n                                task2.S_B_STATE = \"取货完成\";\r\n                            }\r\n                            tag.RGV.bit2taskOver = 0;\r\n                            LogHelper.Info($\"RGV 2工位任务{task2.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task2.S_B_STATE}\");\r\n                            RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"1\", out string msg);\r\n                            LogHelper.Info($\"RGV 2工位任务写处理\");\r\n                            taskservice.Update(task2);\r\n                            LogHelper.Info($\"RGV 2工位任务更新。\");\r\n                        }\r\n                        else\r\n                        {\r\n                            LogHelper.Info(\"RGV2工位任务已经完成。\");\r\n                        }\r\n                    }\r\n                }\r\n                else if (tag.RGV.ReadTask2No == 0)\r\n                {\r\n                    LogHelper.Info($\"RGV 2工位没有任务》\");\r\n                }\r\n\r\n\r\n\r\n                //if (thisOver > 0)\r\n                //{\r\n                //    var v2 = RedisHelper.Get<WriteGroupEntity>(\"RGVQueue\", out string rev);\r\n                //    if (v2 != null)\r\n                //    {\r\n                //        LogHelper.Info($\"RGVQueue è¯»åˆ°ç»“æžœ-{JsonConvert.SerializeObject(v2)}  \\n ä¸‹å‘前进行清除。\");\r\n                //        var b = RedisHelper.Remove(\"RGVQueue\", out rev);\r\n                //    }\r\n                //}\r\n\r\n                ///1 æœ‰è´§  å°±2 å–。  1 æ²¡è´§ å°±2 å¸è´§ï¼Œ éƒ½æœ‰è´§  å°±1卸货。 éƒ½æ²¡è´§ å°±1卸\r\n                var tklist = taskservice.FindList(x => x.S_B_STATE == \"未执行\" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\n                if (task1 != null && task1.S_B_STATE != \"完成\") //1有任务\r\n                {\r\n                    if (task2 != null && task2.S_B_STATE != \"完成\")// 1 æœ‰ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚ \r\n                    {\r\n                        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 ä¹Ÿæœ‰ä»»åŠ¡{task2.S_TASK_NO}。 å¼€å§‹å·¥ä½1 å¸è´§ã€‚\");\r\n                        tag.RGV.workMod = 1;\r\n                        tag.RGV.taskmod = 2;\r\n                        tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n                        tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n                        System.Threading.Thread.Sleep(750);\r\n                        //RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                        //tag.RGV.taskend = 125;\r\n                        //Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\");\r\n\r\n                        LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST å†™ 0\");\r\n                        RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                        LogHelper.Info($\"{task1.S_TASK_NO}> end å†™ 125\");\r\n                        Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                    }\r\n                    else //1有任务  2 æ²¡ä»»åŠ¡ã€‚  \r\n                    {\r\n\r\n                        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务。\");\r\n\r\n                        var leftSide = new List<string> { \"1023\", \"1020\" };\r\n                        var RightSide = new List<string> { \"1002\", \"1008\", \"1010\", \"1016\" };\r\n                        bool creT2 = false;\r\n\r\n                        // 2号 ä¼˜å…ˆç»™ 1020  1008  1016\r\n                        var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n                        if (t2 != null)\r\n                        {\r\n                            LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾1020  1008  1016取货任务{t2.S_TASK_NO}。\");\r\n                            tag.RGV.workMod = 2;\r\n                            tag.RGV.taskmod = 1;\r\n                            tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                            tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                            t2.S_B_STATE = \"已推送\";\r\n                            taskservice.Update(t2);\r\n                            creT2 = true;\r\n                            System.Threading.Thread.Sleep(750);\r\n                            LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0\");\r\n                            RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                            LogHelper.Info($\"{t2.S_TASK_NO}> end å†™ 125\");\r\n                            Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        }\r\n                        ////2 å¦‚果有同侧取货任务。就取。没有\r\n                        //else if (leftSide.Contains(task1.S_START_LOC))\r\n                        //{\r\n                        //    leftSide.Remove(task1.S_START_LOC);\r\n                        //    var lsde = leftSide.FirstOrDefault();\r\n                        //    t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != \"1017\");\r\n                        //    if (t2 != null) //同侧取货任务。\r\n                        //    {\r\n                        //        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务{t2.S_TASK_NO}。\");\r\n                        //        tag.RGV.workMod = 2;\r\n                        //        tag.RGV.taskmod = 1;\r\n                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                        //        t2.S_B_STATE = \"已推送\";\r\n                        //        taskservice.Update(t2);\r\n                        //        creT2 = true;\r\n                        //        System.Threading.Thread.Sleep(750);\r\n                        //        LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0\");\r\n                        //        RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                        //        LogHelper.Info($\"{t2.S_TASK_NO}> end å†™ 125\");\r\n                        //        Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        //    }\r\n                        //}\r\n                        //else if (RightSide.Contains(task1.S_START_LOC))\r\n                        //{\r\n                        //    RightSide.Remove(task1.S_START_LOC);\r\n                        //    t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != \"1017\");\r\n                        //    if (t2 != null) //同侧取货任务。\r\n                        //    {\r\n                        //        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§ 1002,1010 å–货任务{t2.S_TASK_NO}。\");\r\n                        //        tag.RGV.workMod = 2;\r\n                        //        tag.RGV.taskmod = 1;\r\n                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                        //        t2.S_B_STATE = \"已推送\";\r\n                        //        taskservice.Update(t2);\r\n                        //        creT2 = true;\r\n                        //        System.Threading.Thread.Sleep(750);\r\n                        //        LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 125\");\r\n                        //        RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                        //        LogHelper.Info($\"{t2.S_TASK_NO}> end å†™ 125\");\r\n                        //        Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        //    }\r\n                        //}\r\n                        else //1 ç›´æŽ¥å¸è´§ã€‚ \r\n                        //if (!creT2)\r\n                        {\r\n                            LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ²¡æœ‰åŒä¾§å–货任务 1工位卸货。\");\r\n                            tag.RGV.workMod = 1;\r\n                            tag.RGV.taskmod = 2;\r\n                            tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n                            tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n                            System.Threading.Thread.Sleep(750);\r\n                            LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST å†™ 0\");\r\n                            RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                            LogHelper.Info($\"{task1.S_TASK_NO}> taskend å†™ 0\");\r\n                            Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (task2 != null && task2.S_B_STATE != \"完成\")// 1 æ²¡ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚ \r\n                    {\r\n                        LogHelper.Info($\"查看RGV 1工位没任务,工位2 æœ‰ä»»åŠ¡{task2.S_TASK_NO}。工位2卸货。。\");\r\n                        //2 å¸è´§ã€‚\r\n                        tag.RGV.workMod = 2;\r\n                        tag.RGV.taskmod = 2;\r\n                        tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));\r\n                        tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);\r\n                        System.Threading.Thread.Sleep(750);\r\n                        LogHelper.Info($\"{task2.S_TASK_NO}> bit2taskOver_LAST å†™ 0\");\r\n                        RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                        //tag.RGV.taskend = 125;\r\n                        LogHelper.Info($\"{task2.S_TASK_NO}> taskend å†™125\");\r\n                        Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                    }\r\n                    else if (tklist.Any()) //1mei ä»»åŠ¡  2 æ²¡ä»»åŠ¡ã€‚\r\n                    {\r\n                        LogHelper.Info($\"查看RGV 1工位没任务,工位2 ä¹Ÿæ²¡ä»»åŠ¡ã€‚ä¼˜å…ˆ1工位终点1017任务。。\");\r\n                        //、下 1017任务 ç»™1号工位。\r\n                        //var lss = tklist.Take(2).ToList();\r\n                        var e1017first = tklist.Find(x => x.S_START_LOC == \"1002\" || x.S_START_LOC == \"1010\" || x.S_START_LOC == \"1023\");\r\n                        //if (e1017first != null)\r\n                        //{\r\n                        //    e1017first = tklist.FirstOrDefault();\r\n                        //}\r\n                        if (e1017first != null)\r\n                        {\r\n                            LogHelper.Info($\"查看RGV1 ä»»åŠ¡å·¥ä½2 æ²¡ä»»åŠ¡ã€‚ 1002  1010  1023取货任务{e1017first.S_TASK_NO}。\");\r\n                            tag.RGV.workMod = 1;\r\n                            tag.RGV.taskmod = 1;\r\n                            uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}> è½¬æ¢åŽä»»åŠ¡å·{tno} å¼€å§‹å†™å…¥ã€‚\");\r\n                            tag.RGV.taskno1 = tno;\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}>开始写入 task1do>>{e1017first.S_START_LOC}。\");\r\n                            tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}> æ›´æ–°ä»»åŠ¡ã€‚\");\r\n                            e1017first.S_B_STATE = \"已推送\";\r\n                            taskservice.Update(e1017first);\r\n                            System.Threading.Thread.Sleep(750);\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}> bit1taskOver_LAST å†™0\");\r\n                            RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend å†™125\");\r\n                            //tag.RGV.taskend=125\r\n                            Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        }\r\n                        else\r\n                        {\r\n                            var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n                            if (tklist != null)\r\n                            {\r\n                                LogHelper.Info($\"查看RGV1 æ²¡ä»»åŠ¡å·¥ä½2 æ²¡ä»»åŠ¡ã€‚ æ‰¾1020  1008  1016取货任务{t2.S_TASK_NO}。\");\r\n                                tag.RGV.workMod = 2;\r\n                                tag.RGV.taskmod = 1;\r\n                                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                                t2.S_B_STATE = \"已推送\";\r\n                                taskservice.Update(t2);\r\n                                System.Threading.Thread.Sleep(750);\r\n                                LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0\");\r\n                                RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                                LogHelper.Info($\"{t2.S_TASK_NO}> end å†™ 125\");\r\n                                Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                LogHelper.Info($\"rgv å¤„理完成。taskend 125\");\r\n                #endregion\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                LogHelper.Info(ex.Message + ex.StackTrace);\r\n            }\r\n        }\r\n\r\n\r\n        public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)\r\n        {\r\n            Console.WriteLine($\"ThreadGrats å…‰æ …处理 =================> \");\r\n            var taskCOdes = new List<string> { \"Sarrive\", \"Srelease\", \"Earrive\", \"Erelease\" };\r\n            TaskActRepository taskActRepository = new TaskActRepository();\r\n            TaskRepository taskRepository = new TaskRepository();\r\n            var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);\r\n            foreach (var item in requires)\r\n            {\r\n                var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);\r\n                if (tin == -1)\r\n                {\r\n                    item.N_CREATEMETHOD = -1;\r\n                    taskActRepository.Update(item);\r\n                    continue;\r\n                }\r\n                //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);\r\n                string loc = \"\";\r\n                if (tin < 2)\r\n                {\r\n                    loc = item.S_START_LOC;\r\n                }\r\n                else\r\n                {\r\n                    loc = item.S_END_LOC;\r\n                }\r\n                if (loc == null) continue; else loc = loc.Trim();\r\n                bool goin = tin % 2 == 0;\r\n                bool continuuuuu = false;\r\n                var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));\r\n                if (dev != null)\r\n                {\r\n                    var V = dev.location.ToList().FindIndex(x => x == loc) == 0;\r\n                    //车走了  å¼€å…‰æ …\r\n                    if (!goin)\r\n                    {\r\n                        if (dev.deviceType == 1)\r\n                        {\r\n                            LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚\" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\"));\r\n                            Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\");\r\n\r\n                        }\r\n                        else if (dev.deviceType == 2)\r\n                        {\r\n                            LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚\" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\"));\r\n                            Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\");\r\n                        }\r\n\r\n                        item.N_CREATEMETHOD = 1;\r\n                        taskActRepository.Update(item);\r\n                    }\r\n                    //车要进入交互。\r\n                    else\r\n                    {\r\n                        if (dev.deviceType == 1)\r\n                        {\r\n                            var tf = Conn.默认Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//读关闭状态\r\n                            if (tf?.ToLower() == \"true\")\r\n                            {\r\n                                LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼\");\r\n                                continuuuuu = true;\r\n                            }\r\n                            else\r\n                            {\r\n                                LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚\" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n                            }\r\n\r\n                        }\r\n                        else if (dev.deviceType == 2)\r\n                        {\r\n                            var tf = Conn.默认Redis.GetValue(dev.deviceName + \".D1202\");\r\n                            int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                            if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)\r\n                            {\r\n                                LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼\");\r\n                                continuuuuu = true;\r\n                            }\r\n                            else\r\n                            {\r\n                                LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚\" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), dev.deviceName + \"Queue\"));\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), \"1\", dev.deviceName + \"Queue\");\r\n                            }\r\n                        }\r\n\r\n                    }\r\n\r\n                }\r\n                if (continuuuuu)\r\n                {\r\n                    LogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} è½¦è¾†å‘送继续任务!\");\r\n                    continueTask?.Invoke(new HaiKangOrderInfo\r\n                    {\r\n                        reqCode = item.S_ID.Replace(\"-\", \"\"),\r\n                        taskCode = item.S_TASK_NO\r\n                    });\r\n                    item.N_CREATEMETHOD = 1;\r\n                    taskActRepository.Update(item);\r\n                }\r\n            }\r\n            System.Threading.Thread.Sleep(3000);\r\n            //重置信号\r\n            foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))\r\n            {\r\n                var tf = Conn.默认Redis.GetValue(dev.deviceName + \".D1202\");\r\n                int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                if (TcpServer.GetBitdata(numm, 0) == 0)\r\n                {\r\n                    Conn.默认Redis.SetValue(dev.deviceName + \".D1220\", \"0\", dev.deviceName + \"Queue\");\r\n                    Conn.默认Redis.SetValue(dev.deviceName + \".D1222\", \"0\", dev.deviceName + \"Queue\");\r\n                }\r\n                else if (TcpServer.GetBitdata(numm, 1) == 0)\r\n                {\r\n                    Conn.默认Redis.SetValue(dev.deviceName + \".D1221\", \"0\", dev.deviceName + \"Queue\");\r\n                    Conn.默认Redis.SetValue(dev.deviceName + \".D1223\", \"0\", dev.deviceName + \"Queue\");\r\n                }\r\n            }\r\n\r\n        }\r\n        /// <summary>\r\n        /// 1020  1023空框下线\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void ThreadEdown(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadEdown 20 23 = ç©ºä¸‹æ£€æµ‹ =================> \");\r\n            TaskRepository taskRepository = new TaskRepository();\r\n            foreach (var Bssx in new string[] { \"1020\", \"1023\" })\r\n            {\r\n                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n                Console.WriteLine($\"{Bssx} ç©ºä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}  \");\r\n                if (RtaskState == 3 && RtaskState_LAST == 0)\r\n                {\r\n                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                    string msg = \"\";\r\n                    if (task != null)\r\n                    {\r\n                        Console.WriteLine($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        LogHelper.Info($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        continue;\r\n                    }\r\n                    try\r\n                    {\r\n                        var listtep = new List<string>();\r\n                        if (Bssx == \"1020\")\r\n                        {\r\n                            if (tag.SF下料位.RArrive1003 == 1)\r\n                            {\r\n                                listtep = new List<string> { \"1012\", \"1004\" };\r\n                            }\r\n                            else\r\n                            {\r\n                                listtep = new List<string> { \"1004\", \"1012\" };\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            if (tag.SF下料位.RArrive1005 == 1)\r\n                            {\r\n                                listtep = new List<string> { \"1014\", \"1006\" };\r\n                            }\r\n                            else\r\n                            {\r\n                                listtep = new List<string> { \"1006\", \"1014\" };\r\n                            }\r\n                        }\r\n\r\n                        foreach (var item in listtep)//(Bssx == \"1020\" ? new string[] { \"1004\", \"1012\" } : new string[] { \"1006\", \"1014\" }))\r\n                        {\r\n                            var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                            var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                            if (R5 == 5 && R5空闲_LAST == 0 && task == null)\r\n                            {\r\n                                task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                                msg = \"\";\r\n                                if (task != null)\r\n                                {\r\n                                    Console.WriteLine($\" {item}有正在 [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                                    LogHelper.Info($\" {item}有正在 [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                                    continue;\r\n                                }\r\n\r\n                                var b = TaskProcess.CreateTask(\"\", Bssx, item, \"空上RGV\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n                                if (b)\r\n                                {\r\n                                    LogHelper.Debug($\"输送线RGV空托任务 from:{Bssx}>to {item}开始创建成功\");\r\n                                    RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n                                    //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                                    RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out msg);\r\n                                    //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                                    break;\r\n                                }\r\n                            }\r\n                            else if (R5 != 5 && R5空闲_LAST == 1)\r\n                            {\r\n                                RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out msg);\r\n                                //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n                            }\r\n                        }\r\n                        System.Threading.Thread.Sleep(1000);\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        LogHelper.Error(ex.Message, ex);\r\n                        Console.WriteLine(ex.Message + ex.StackTrace);\r\n                    }\r\n                }\r\n                else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n                }\r\n                System.Threading.Thread.Sleep(2000);\r\n            }\r\n\r\n            foreach (var item in new string[] { \"1004\", \"1012\", \"1006\", \"1014\", \"1026\", \"1017\" })\r\n            {\r\n                var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                if (R5 != 5 && R5空闲_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n                }\r\n            }\r\n        }\r\n\r\n        public void ThreadDdown(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadDdown 08 10 ==================> 1026\");\r\n            TaskRepository taskRepository = new TaskRepository();\r\n            foreach (var Bssx in new string[] { \"1008\", \"1016\" })\r\n            {\r\n                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n                Console.WriteLine($\"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n                if (RtaskState == 3 && RtaskState_LAST == 0)\r\n                {\r\n                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                    string msg = \"\";\r\n                    if (task != null)\r\n                    {\r\n                        Console.WriteLine($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        LogHelper.Info($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        continue;\r\n                    }\r\n\r\n                    var item = \"1026\";\r\n                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                    var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                    if (R5 == 5 && R5空闲_LAST == 0)\r\n                    {\r\n                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                        msg = \"\";\r\n                        if (task != null)\r\n                        {\r\n                            Console.WriteLine($\"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                            LogHelper.Info($\"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                            continue;\r\n                        }\r\n                        var b = TaskProcess.CreateTask(\"\", Bssx, item, \"满转1026\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n                        if (b)\r\n                        {\r\n                            RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n                            RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg2);\r\n                            //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                            //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                            break;\r\n                        }\r\n                    }\r\n                    else if (R5 != 5 && R5空闲_LAST == 1)\r\n                    {\r\n                        RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg2);\r\n                    }\r\n                }\r\n                else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n                }\r\n                System.Threading.Thread.Sleep(2000);\r\n            }\r\n        }\r\n\r\n        public void Thread0210Down(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Thread0210Down ==================>\");\r\n            TaskRepository taskRepository = new TaskRepository();\r\n            foreach (var Bssx in new string[] { \"1002\", \"1010\" })\r\n            {\r\n                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n                Console.WriteLine($\"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n                if (RtaskState == 3 && RtaskState_LAST == 0)\r\n                {\r\n                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                    string msg = \"\";\r\n                    if (task != null)\r\n                    {\r\n                        Console.WriteLine($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        LogHelper.Info($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        continue;\r\n                    }\r\n                    var item = \"1017\";\r\n                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                    var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                    if (R5 == 5 && R5空闲_LAST == 0)\r\n                    {\r\n                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                        msg = \"\";\r\n                        if (task != null)\r\n                        {\r\n                            Console.WriteLine($\"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                            LogHelper.Info($\"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                            continue;\r\n                        }\r\n                        var b = TaskProcess.CreateTask(\"\", Bssx, item, \"满转1017\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n                        if (b)\r\n                        {\r\n                            RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n                            RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg1);\r\n                            //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                            //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                            break;\r\n                        }\r\n                    }\r\n                    else if (R5 != 5 && R5空闲_LAST == 1)\r\n                    {\r\n                        RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg1);\r\n                    }\r\n                }\r\n                else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n                }\r\n                System.Threading.Thread.Sleep(2000);\r\n            }\r\n        }\r\n\r\n\r\n        public void Thread下料位检测(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Thread下料位检测    =====>\");\r\n            foreach (var ssx in new string[] { \"1003\", \"1005\", \"1011\", \"1013\" })\r\n            {\r\n                var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"FNK1003051113.RArrive{ssx}\"), typeof(System.UInt16));\r\n                var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"FNK1003051113.RArrive{ssx}_LAST\"), typeof(System.UInt16));\r\n                if (RArrive == 1 && RArriveLast == 0)\r\n                {\r\n                    if (ssx == \"1005\" && tag.SF下料位.WRelease1005 == 0)\r\n                    {\r\n                        tag.FNK1.D2215 = 1;\r\n                        //tag.SF下料位.RArrive1005_LAST = 1;\r\n                        RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"1\", out string msg);\r\n\r\n                        //tag.SF下料位.WRelease1005 = 0;\r\n                        //tag.SF下料位.WSafe0305 = 0;\r\n                    }\r\n                    else if (ssx == \"1003\" && tag.SF下料位.WRelease1003 == 0)\r\n                    {\r\n                        tag.FNK1.D2210 = 1;\r\n                        //tag.SF下料位.RArrive1003_LAST = 1;\r\n\r\n                        RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"1\", out string msg);\r\n\r\n                        //tag.SF下料位.WRelease1003 = 0;\r\n                        //tag.SF下料位.WSafe0305 = 0;\r\n                    }\r\n                    else if (ssx == \"1013\" && tag.SF下料位.WRelease1013 == 0)\r\n                    {\r\n                        tag.FNK2.D2215 = 1;\r\n                        //tag.SF下料位.RArrive1013_LAST = 1;\r\n                        RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"1\", out string msg);\r\n\r\n                        //tag.SF下料位.WRelease1013 = 0;\r\n                        //tag.SF下料位.WSafe1113 = 0;\r\n                    }\r\n                    else if (ssx == \"1011\" && tag.SF下料位.WRelease1011 == 0)\r\n                    {\r\n                        tag.FNK2.D2210 = 1;\r\n                        //tag.SF下料位.RArrive1011_LAST = 1;\r\n                        RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"1\", out string msg);\r\n\r\n                        //tag.SF下料位.WRelease1011 = 0;\r\n                        //tag.SF下料位.WSafe1113 = 0;\r\n                    }\r\n                }\r\n                else if (RArrive == 0 && RArriveLast == 1)\r\n                {\r\n                    RedisHelper.Add($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", $\"FNK1003051113Queue\");\r\n                }\r\n            }\r\n        }\r\n\r\n        public void ThreadFNK1Over(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadFNK1Over    =====>\");\r\n            if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n            {\r\n                tag.FNK1.D2215 = 0;\r\n                //tag.FNK1.D2212_LAST = 1;\r\n                RedisHelper.Add($\"p发那科1下线.D2217_LAST\", \"1\", out string msg);\r\n\r\n                tag.SF下料位.WRelease1005 = 1;\r\n                tag.SF下料位.WSafe0305 = 1;\r\n                System.Threading.Thread.Sleep(1000);\r\n                RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"0\", out msg);\r\n            }\r\n            if (tag.FNK1.D2216 == 1)\r\n                tag.FNK1.D2215 = 0;\r\n            else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n                //tag.FNK1.D2217_LAST = 0;\r\n                RedisHelper.Add($\"p发那科1下线.D2217_LAST\", \"0\", out string msg);\r\n\r\n            if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n            {\r\n                tag.FNK1.D2210 = 0;\r\n                //tag.FNK1.D2217_LAST = 1;\r\n                RedisHelper.Add($\"p发那科1下线.D2212_LAST\", \"1\", out string msg);\r\n                tag.SF下料位.WRelease1003 = 1;\r\n                tag.SF下料位.WSafe0305 = 1;\r\n                System.Threading.Thread.Sleep(1000);\r\n                RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"0\", out msg);\r\n            }\r\n            //else if (tag.FNK1.D2211 == 1)\r\n            //    tag.FNK1.D2210 = 0;\r\n            else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n            {\r\n                //tag.FNK1.D2212_LAST = 0;\r\n                RedisHelper.Add($\"p发那科1下线.D2212_LAST\", \"0\", out string msg);\r\n            }\r\n            if (tag.FNK1.D2211 == 1)\r\n                tag.FNK1.D2210 = 0;\r\n\r\n        }\r\n        public void ThreadFNK2Over(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadFNK2Over    =====>\");\r\n            if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n            {\r\n                tag.FNK2.D2215 = 0;\r\n                //tag.FNK2.D2212_LAST = 1;\r\n                RedisHelper.Add($\"p发那科2下线.D2217_LAST\", \"1\", out string msg);\r\n\r\n                tag.SF下料位.WRelease1013 = 1;\r\n                tag.SF下料位.WSafe1113 = 1;\r\n                System.Threading.Thread.Sleep(1000);\r\n                RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"0\", out msg);\r\n            }\r\n            else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n                //tag.FNK2.D2217_LAST = 0;\r\n                RedisHelper.Add($\"p发那科2下线.D2217_LAST\", \"0\", out string msg);\r\n\r\n            if (tag.FNK2.D2216 == 1)\r\n                tag.FNK2.D2215 = 0;\r\n\r\n            if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n            {\r\n                tag.FNK2.D2210 = 0;\r\n                //tag.FNK2.D2217_LAST = 1;\r\n                RedisHelper.Add($\"p发那科2下线.D2212_LAST\", \"1\", out string msg);\r\n\r\n                tag.SF下料位.WRelease1011 = 1;\r\n                tag.SF下料位.WSafe1113 = 1;\r\n                System.Threading.Thread.Sleep(1000);\r\n                RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"0\", out msg);\r\n            }\r\n            else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)\r\n            {\r\n                //tag.FNK2.D2212_LAST = 0;\r\n                RedisHelper.Add($\"p发那科2下线.D2212_LAST\", \"0\", out string msg);\r\n            }\r\n            if (tag.FNK2.D2211 == 1)\r\n                tag.FNK2.D2210 = 0;\r\n\r\n        }\r\n\r\n        public void Thread1019Down(Tag tag)\r\n        {\r\n            Console.WriteLine($\"1019任务状态:   =====>\");\r\n            Console.WriteLine($\"1019任务状态:{tag.SA1019.RtaskState}- barcode:{tag.SA1019.R托盘码}- ç©ºé—²{tag.SA1019.R5空闲}\");\r\n        }\r\n        public void Thread1025Up(Tag tag)\r\n        {\r\n            Console.WriteLine($\"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š   =====>\");\r\n            Console.WriteLine($\"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1025.RtaskState}- ç©ºé—²{tag.SA1025.R5空闲}\");\r\n        }\r\n        public void Thread1022Up(Tag tag)\r\n        {\r\n            Console.WriteLine($\"SA1022    =====>\");\r\n            Console.WriteLine($\"SA1022 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1022.RtaskState}- ç©ºé—²{tag.SA1022.R5空闲}\");\r\n        }\r\n        public void Thread1030Down(Tag tag)\r\n        {\r\n            Console.WriteLine($\"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š   =====>\");\r\n            Console.WriteLine($\"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1030.RtaskState}- ç©ºé—²{tag.SA1030.R5空闲}-->对应终点2001>空闲5:{tag.SA2001.R5空闲}\");\r\n        }\r\n        public void Thread2030Down(Tag tag)\r\n        {\r\n            Console.WriteLine($\"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š   =====>\");\r\n            Console.WriteLine($\"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA2030.RtaskState}- ç©ºé—²{tag.SA2030.R5空闲} - barcode:{tag.SA2030.R托盘码}\");\r\n        }\r\n\r\n\r\n    }\r\n}\r\n",
      "Code": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Concurrent;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing GZ.Modular.Redis;\r\nusing GZ.DB.Entity.OIDATABASE;\r\nusing GZ.DB.IRepository.OIDATABASE;\r\nusing GZ.DB.Repository.OIDATABASE;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement;\r\nusing System.Windows.Interop;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;\r\n\r\nnamespace GZ.Projects.AuxAllWCS\r\n{\r\n    public partial class AutoThread\r\n    {\r\n\r\n        private static AutoThread _instance;\r\n\r\n        // ç§æœ‰æž„造函数防止外部实例化\r\n        private AutoThread() { }\r\n\r\n        public static AutoThread Instance\r\n        {\r\n            get\r\n            {\r\n                if (_instance == null)\r\n                {\r\n                    _instance = new AutoThread();\r\n                }\r\n                return _instance;\r\n            }\r\n        }\r\n\r\n        // çº¿ç¨‹å®‰å…¨çš„委托缓存\r\n        private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();\r\n\r\n        // æ–¹æ³•执行器\r\n        public static object InvokeMethod(object instance, string methodName, params object[] args)\r\n        {\r\n            var cacheKey = $\"{instance.GetType().FullName}_{methodName}\";\r\n\r\n            if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))\r\n            {\r\n                // èŽ·å–æ–¹æ³•ä¿¡æ¯\r\n                var methodInfo = instance.GetType().GetMethod(\r\n                    methodName,\r\n                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n                if (methodInfo == null)\r\n                    throw new MissingMethodException($\"Method {methodName} not found\");\r\n\r\n                // åˆ›å»ºå§”托并缓存\r\n                methodDelegate = Delegate.CreateDelegate(\r\n                    GetDelegateType(methodInfo),\r\n                    instance,\r\n                    methodInfo);\r\n\r\n                _methodCache.TryAdd(cacheKey, methodDelegate);\r\n            }\r\n\r\n            // æ‰§è¡Œå§”托\r\n            return methodDelegate.DynamicInvoke(args);\r\n        }\r\n\r\n        // æ ¹æ®æ–¹æ³•签名生成对应的委托类型\r\n        private static Type GetDelegateType(MethodInfo methodInfo)\r\n        {\r\n            var parameterTypes = methodInfo.GetParameters()\r\n                .Select(p => p.ParameterType)\r\n                .ToList();\r\n\r\n            if (methodInfo.ReturnType == typeof(void))\r\n            {\r\n                return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());\r\n            }\r\n            else\r\n            {\r\n                parameterTypes.Add(methodInfo.ReturnType);\r\n                return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// é…ç½®åˆå§‹åŒ–。\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        /// <param name=\"action\"></param>\r\n        public void ThreadSettingInit(Tag tag, Action action)\r\n        {\r\n            Console.WriteLine(\"初始化配置 çº¿ç¨‹ run \" + tag.Global.SettingsOver);\r\n            if (tag.Global.SettingsOver == 0)\r\n            {\r\n                action?.Invoke();\r\n                tag.Global.SettingsOver = 1;\r\n            }\r\n            else if (Settings.deviceInfos.Count == 0)\r\n            {\r\n                tag.Global.SettingsOver = 0;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// æ·é¡º1 ä¿¡å·å¤„理\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void ThreadJS1(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadJS1 æ·é¡º1 ä¿¡å·å¤„理 =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js捷顺1\");\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)\r\n                {\r\n                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                    {\r\n                        requestType = 4,\r\n                        endBit = VERX.location[0]\r\n                    }));\r\n                    LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                    if (str.Contains(\"true\"))\r\n                    {\r\n                        //tag.Js1.D1212_LAST = 1;\r\n                        RedisHelper.Add($\"Js捷顺1.D1212_LAST\", \"1\", out string msg);\r\n                    }\r\n                }\r\n                if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)\r\n                {\r\n                    //tag.Js1.D1212_LAST = 0; \r\n                    RedisHelper.Add($\"Js捷顺1.D1212_LAST\", \"0\", out string msg);\r\n                }\r\n                if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n                {\r\n                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                    {\r\n                        requestType = 4,\r\n                        endBit = VERX.location[1]\r\n                    }));\r\n                    LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                    if (str.Contains(\"true\"))\r\n                    {\r\n                        //tag.Js1.D1213_LAST = 1;\r\n                        RedisHelper.Add($\"Js捷顺1.D1213_LAST\", \"1\", out string msg);\r\n                    }\r\n                }\r\n                if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)\r\n                {\r\n                    //tag.Js1.D1213_LAST = 0;\r\n                    RedisHelper.Add($\"Js捷顺1.D1213_LAST\", \"0\", out string msg);\r\n                }\r\n            }\r\n        }\r\n        /// <summary>\r\n        /// æ·é¡º2 ä¿¡å·å¤„理\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void ThreadJS2(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadJS2 æ·é¡º2 ä¿¡å·å¤„理 =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js捷顺2\");\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)\r\n                {\r\n                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                    {\r\n                        requestType = 4,\r\n                        endBit = VERX.location[0]\r\n                    }));\r\n                    LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                    if (str.Contains(\"true\"))\r\n                    {\r\n                        //tag.Js2.D1212_LAST = 1;\r\n\r\n                        RedisHelper.Add($\"Js捷顺1.D1212_LAST\", \"1\", out string msg);\r\n                    }\r\n                }\r\n                if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)\r\n                {\r\n                    //tag.Js2.D1212_LAST = 0;\r\n\r\n                    RedisHelper.Add($\"Js捷顺1.D1212_LAST\", \"0\", out string msg);\r\n                }\r\n                if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)\r\n                {\r\n                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                    {\r\n                        requestType = 4,\r\n                        endBit = VERX.location[1]\r\n                    }));\r\n                    LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                    if (str.Contains(\"true\"))\r\n                    {\r\n                        //tag.Js2.D1213_LAST = 1;\r\n\r\n                        RedisHelper.Add($\"Js捷顺1.D1213_LAST\", \"1\", out string msg);\r\n                    }\r\n                }\r\n                if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)\r\n                {\r\n                    //tag.Js2.D1213_LAST = 0;\r\n\r\n                    RedisHelper.Add($\"Js捷顺1.D1213_LAST\", \"0\", out string msg);\r\n                }\r\n            }\r\n        }\r\n        /// <summary>\r\n        /// ç»´å¸Œå°”1 å·¦\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void Threadwxr1L(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Threadwxr1L ç»´å¸Œå°”1 å·¦ =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)\r\n                {\r\n                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                    {\r\n                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                        {\r\n                            requestType = 1,\r\n                            cntrCode = traycode,\r\n                            startBit = VERX.location[0],\r\n                            endBit = \"\"\r\n                        }));\r\n                        LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                        if (str.Contains(\"true\"))\r\n                        {\r\n                            tag.wxr1.R44_LAST = true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    //TaskRepository ts = new TaskRepository();\r\n                    if (tag.wxr1.R10_LAST) //托盘放置信号。。\r\n                    {\r\n                        if (tag.wxr1.R10)\r\n                        {\r\n                            tag.wxr1.R10_LAST = false;\r\n                        }\r\n                        else\r\n                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                        {\r\n                            //上报校验。\r\n                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                            {\r\n                                sceneType = 1,\r\n                                cntrCode = traycode,\r\n                            }));\r\n                            if (str.Contains(\"true\"))\r\n                            {\r\n                                //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                tag.wxr1.R10 = true;\r\n                                tag.wxr1.R44_LAST = false;\r\n                            }\r\n                            else\r\n                            {\r\n                                //报警。\r\n                            }\r\n                        }\r\n                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// ç»´å¸Œå°”1 å³\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void Threadwxr1R(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Threadwxr1R ç»´å¸Œå°”1 å³ =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)\r\n                {\r\n                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                    {\r\n                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                        {\r\n                            requestType = 1,\r\n                            cntrCode = traycode,\r\n                            startBit = VERX.location[1],\r\n                            endBit = \"\"\r\n                        }));\r\n                        LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                        if (str.Contains(\"true\"))\r\n                        {\r\n                            tag.wxr1.R46_LAST = true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (tag.wxr1.R11_LAST) //托盘放置信号。。\r\n                    {\r\n                        if (tag.wxr1.R11)\r\n                        {\r\n                            tag.wxr1.R11_LAST = false;\r\n                        }\r\n                        else\r\n                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                        {\r\n                            //上报校验。\r\n                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                            {\r\n                                sceneType = 1,\r\n                                cntrCode = traycode,\r\n                            }));\r\n                            if (str.Contains(\"true\"))\r\n                            {\r\n                                //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                tag.wxr1.R11 = true;\r\n                                tag.wxr1.R46_LAST = false;\r\n                            }\r\n                            else\r\n                            {\r\n                                //报警。\r\n                            }\r\n                        }\r\n                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// ç»´å¸Œå°”2 å·¦\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void Threadwxr2L(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Threadwxr2L ç»´å¸Œå°”2 å·¦ =================> \");\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)\r\n                {\r\n                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                    {\r\n                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                        {\r\n                            requestType = 1,\r\n                            cntrCode = traycode,\r\n                            startBit = VERX.location[0],\r\n                            endBit = \"\"\r\n                        }));\r\n                        LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                        if (str.Contains(\"true\"))\r\n                        {\r\n                            tag.wxr2.R44_LAST = true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (tag.wxr2.R10_LAST) //托盘放置信号。。\r\n                    {\r\n                        if (tag.wxr2.R10)\r\n                        {\r\n                            tag.wxr2.R10_LAST = false;\r\n                        }\r\n                        else\r\n                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                        {\r\n                            //上报校验。\r\n                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                            {\r\n                                sceneType = 1,\r\n                                cntrCode = traycode,\r\n                            }));\r\n                            if (str.Contains(\"true\"))\r\n                            {\r\n                                //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                tag.wxr2.R10 = true;\r\n                                tag.wxr2.R44_LAST = false;\r\n                            }\r\n                            else\r\n                            {\r\n                                //报警。\r\n                            }\r\n                        }\r\n                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// ç»´å¸Œå°”2 å³\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void Threadwxr2R(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Threadwxr2R ç»´å¸Œå°”2 å³ =================> \");\r\n\r\n            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n            if (VERX != null)\r\n            {\r\n                if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)\r\n                {\r\n                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                    {\r\n                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                        {\r\n                            requestType = 1,\r\n                            cntrCode = traycode,\r\n                            startBit = VERX.location[1],\r\n                            endBit = \"\"\r\n                        }));\r\n                        LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                        if (str.Contains(\"true\"))\r\n                        {\r\n                            tag.wxr2.R46_LAST = true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (tag.wxr2.R11_LAST) //托盘放置信号。。\r\n                    {\r\n                        if (tag.wxr2.R11)\r\n                        {\r\n                            tag.wxr2.R11_LAST = false;\r\n                        }\r\n                        else\r\n                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                        {\r\n                            //上报校验。\r\n                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                            {\r\n                                sceneType = 1,\r\n                                cntrCode = traycode,\r\n                            }));\r\n                            if (str.Contains(\"true\"))\r\n                            {\r\n                                //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                tag.wxr2.R11 = true;\r\n                                tag.wxr2.R46_LAST = false;\r\n                            }\r\n                            else\r\n                            {\r\n                                //报警。\r\n                            }\r\n                        }\r\n                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)\r\n        {\r\n            Console.WriteLine($\"ThreadTaskRun ä»»åŠ¡ä¸‹å‘ =================> \");\r\n            LogHelper.Info(\"ThreadTaskRun ä»»åŠ¡ä¸‹å‘\");\r\n\r\n            ITaskRepository taskservice = new TaskRepository();\r\n            try\r\n            {\r\n                LogHelper.Info(\"任务下发  ARG ä»»åŠ¡ è¿›å…¥\");\r\n                #region AGV任务下发。\r\n\r\n                var tklist = taskservice.FindList(x => x.S_B_STATE == \"未执行\" && x.S_WORK_MODE == \"AGV\");\r\n                if (tklist.Any())\r\n                    foreach (var tk in tklist.GroupBy(item =>\r\n                    {\r\n                        var ticks = item.T_CREATE.Ticks;\r\n                        return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n                    }).OrderBy(x => x.Key))\r\n                    {\r\n                        var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();\r\n                        foreach (var t in ts)\r\n                        {\r\n                            var b = false;\r\n                            b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);\r\n\r\n                            if (b)\r\n                            {\r\n                                t.S_B_STATE = \"已推送\";\r\n                                taskservice.Update(t);\r\n                            }\r\n                        }\r\n                        break;\r\n                    }\r\n                //foreach (var tk in tklist.GroupBy(item =>\r\n                //{\r\n                //    var ticks = item.T_CREATE.Ticks;\r\n                //    return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n                //}).OrderBy(x => x.Key))\r\n                //if (tklist.Any())\r\n                //{\r\n\r\n                #endregion\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                LogHelper.Info(ex.Message + ex.StackTrace);\r\n            }\r\n            try\r\n            {\r\n                #region Rgv\r\n\r\n                LogHelper.Info($\"查看RGV ç”µé‡ï¼šã€{tag.RGV.R当前电量}】 å……电状态:【{tag.RGV.R充电状态}】 æ•…障代码:【{tag.RGV.RgvrunError}】\");\r\n\r\n                if (tag.RGV.taskend == 125)\r\n                {\r\n                    System.Threading.Thread.Sleep(3000);\r\n                    return;\r\n                }\r\n                LogHelper.Info(\"任务下发  Rgv ä»»åŠ¡ è¿›å…¥\");\r\n\r\n                var task1Isrun = false;\r\n                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)\r\n                {\r\n                    task1Isrun = true;\r\n                    //if (tag.RGV.bit1taskOver_LAST == 1)\r\n                    //    RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                }\r\n                var task2Isrun = false;\r\n                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)\r\n                {\r\n                    task2Isrun = true;\r\n                    //if (tag.RGV.bit2taskOver_LAST == 1)\r\n                    //    RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                }\r\n                if (task1Isrun || task2Isrun)\r\n                {\r\n                    string mes = \"\";\r\n                    if (task1Isrun)\r\n                        mes += tag.RGV.ReadTask1No + \"执行中...\";\r\n                    if (task2Isrun)\r\n                        mes += tag.RGV.ReadTask2No + \"执行中...\";\r\n                    LogHelper.Info($\"{mes} ä¸èƒ½ä¸‹å‘新任务。\");\r\n                    System.Threading.Thread.Sleep(3000);\r\n                    return; \r\n                }\r\n                var thisOver = 0;\r\n                TaskEntity task1 = null;\r\n                TaskEntity task2 = null;\r\n\r\n                LogHelper.Info($\"查看RGV 1工位任务》\");\r\n                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)\r\n                {\r\n                    var taskno = tag.RGV.ReadTask1No;\r\n                    LogHelper.Info($\"RGV 1工位任务{tag.RGV.ReadTask1No}\");\r\n                    string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n                    task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n                    LogHelper.Info($\"RGV 1工位任务{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST:{tag.RGV.bit1taskOver_LAST}\");\r\n                    if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)\r\n                    {\r\n                        if (task1.S_B_STATE != \"完成\")\r\n                        {\r\n                            thisOver = 1;\r\n                            if (task1.S_B_STATE == \"取货完成\")\r\n                            {\r\n                                task1.S_B_STATE = \"完成\";\r\n                                tag.RGV.ReadTask1No = 0;\r\n                            }\r\n                            else\r\n                            {\r\n                                task1.S_B_STATE = \"取货完成\";\r\n                            }\r\n                            tag.RGV.bit1taskOver = 0;\r\n                            LogHelper.Info($\"RGV 1工位任务{task1.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task1.S_B_STATE}\");\r\n                            //tag.RGV.bit1taskOver_LAST = 1;\r\n                            RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"1\", out string msg);\r\n                            LogHelper.Info($\"RGV 1工位任务写处理\");\r\n                            taskservice.Update(task1);\r\n                            LogHelper.Info($\"RGV 1工位任务更新。\");\r\n                        }\r\n                        else\r\n                        {\r\n                            LogHelper.Info(\"RGV1工位任务已经完成。\");\r\n                        }\r\n                    }\r\n                }\r\n                else if (tag.RGV.ReadTask1No == 0)\r\n                {\r\n                    LogHelper.Info($\"RGV 1工位没有任务》\");\r\n                }\r\n\r\n                LogHelper.Info($\"查看RGV 2工位任务》\");\r\n                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)\r\n                {\r\n                    var taskno = tag.RGV.ReadTask2No;\r\n                    LogHelper.Info($\"RGV 2工位任务{tag.RGV.ReadTask2No}\");\r\n                    string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n                    task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n                    LogHelper.Info($\"RGV2工位任务{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST:{tag.RGV.bit2taskOver_LAST}\");\r\n                    if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)\r\n                    {\r\n                        if (task2.S_B_STATE != \"完成\")\r\n                        {\r\n                            thisOver = 2;\r\n                            if (task2.S_B_STATE == \"取货完成\")\r\n                            {\r\n                                task2.S_B_STATE = \"完成\";\r\n                                tag.RGV.ReadTask2No = 0;\r\n                            }\r\n                            else\r\n                            {\r\n                                task2.S_B_STATE = \"取货完成\";\r\n                            }\r\n                            tag.RGV.bit2taskOver = 0;\r\n                            LogHelper.Info($\"RGV 2工位任务{task2.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task2.S_B_STATE}\");\r\n                            RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"1\", out string msg);\r\n                            LogHelper.Info($\"RGV 2工位任务写处理\");\r\n                            taskservice.Update(task2);\r\n                            LogHelper.Info($\"RGV 2工位任务更新。\");\r\n                        }\r\n                        else\r\n                        {\r\n                            LogHelper.Info(\"RGV2工位任务已经完成。\");\r\n                        }\r\n                    }\r\n                }\r\n                else if (tag.RGV.ReadTask2No == 0)\r\n                {\r\n                    LogHelper.Info($\"RGV 2工位没有任务》\");\r\n                }\r\n\r\n\r\n\r\n                //if (thisOver > 0)\r\n                //{\r\n                //    var v2 = RedisHelper.Get<WriteGroupEntity>(\"RGVQueue\", out string rev);\r\n                //    if (v2 != null)\r\n                //    {\r\n                //        LogHelper.Info($\"RGVQueue è¯»åˆ°ç»“æžœ-{JsonConvert.SerializeObject(v2)}  \\n ä¸‹å‘前进行清除。\");\r\n                //        var b = RedisHelper.Remove(\"RGVQueue\", out rev);\r\n                //    }\r\n                //}\r\n\r\n                ///1 æœ‰è´§  å°±2 å–。  1 æ²¡è´§ å°±2 å¸è´§ï¼Œ éƒ½æœ‰è´§  å°±1卸货。 éƒ½æ²¡è´§ å°±1卸\r\n                var tklist = taskservice.FindList(x => x.S_B_STATE == \"未执行\" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\n                if (task1 != null && task1.S_B_STATE != \"完成\") //1有任务\r\n                {\r\n                    if (task2 != null && task2.S_B_STATE != \"完成\")// 1 æœ‰ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚ \r\n                    {\r\n                        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 ä¹Ÿæœ‰ä»»åŠ¡{task2.S_TASK_NO}。 å¼€å§‹å·¥ä½1 å¸è´§ã€‚\");\r\n                        tag.RGV.workMod = 1;\r\n                        tag.RGV.taskmod = 2;\r\n                        tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n                        tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n                        System.Threading.Thread.Sleep(750);\r\n                        //RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                        //tag.RGV.taskend = 125;\r\n                        //Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\");\r\n\r\n                        LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST å†™ 0\");\r\n                        RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                        LogHelper.Info($\"{task1.S_TASK_NO}> end å†™ 125\");\r\n                        Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                    }\r\n                    else //1有任务  2 æ²¡ä»»åŠ¡ã€‚  \r\n                    {\r\n\r\n                        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务。\");\r\n\r\n                        var leftSide = new List<string> { \"1023\", \"1020\" };\r\n                        var RightSide = new List<string> { \"1002\", \"1008\", \"1010\", \"1016\" };\r\n                        bool creT2 = false;\r\n\r\n                        // 2号 ä¼˜å…ˆç»™ 1020  1008  1016\r\n                        var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n                        if (t2 != null)\r\n                        {\r\n                            LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾1020  1008  1016取货任务{t2.S_TASK_NO}。\");\r\n                            tag.RGV.workMod = 2;\r\n                            tag.RGV.taskmod = 1;\r\n                            tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                            tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                            t2.S_B_STATE = \"已推送\";\r\n                            taskservice.Update(t2);\r\n                            creT2 = true;\r\n                            System.Threading.Thread.Sleep(750);\r\n                            LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0\");\r\n                            RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                            LogHelper.Info($\"{t2.S_TASK_NO}> end å†™ 125\");\r\n                            Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        }\r\n                        ////2 å¦‚果有同侧取货任务。就取。没有\r\n                        //else if (leftSide.Contains(task1.S_START_LOC))\r\n                        //{\r\n                        //    leftSide.Remove(task1.S_START_LOC);\r\n                        //    var lsde = leftSide.FirstOrDefault();\r\n                        //    t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != \"1017\");\r\n                        //    if (t2 != null) //同侧取货任务。\r\n                        //    {\r\n                        //        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务{t2.S_TASK_NO}。\");\r\n                        //        tag.RGV.workMod = 2;\r\n                        //        tag.RGV.taskmod = 1;\r\n                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                        //        t2.S_B_STATE = \"已推送\";\r\n                        //        taskservice.Update(t2);\r\n                        //        creT2 = true;\r\n                        //        System.Threading.Thread.Sleep(750);\r\n                        //        LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0\");\r\n                        //        RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                        //        LogHelper.Info($\"{t2.S_TASK_NO}> end å†™ 125\");\r\n                        //        Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        //    }\r\n                        //}\r\n                        //else if (RightSide.Contains(task1.S_START_LOC))\r\n                        //{\r\n                        //    RightSide.Remove(task1.S_START_LOC);\r\n                        //    t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != \"1017\");\r\n                        //    if (t2 != null) //同侧取货任务。\r\n                        //    {\r\n                        //        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§ 1002,1010 å–货任务{t2.S_TASK_NO}。\");\r\n                        //        tag.RGV.workMod = 2;\r\n                        //        tag.RGV.taskmod = 1;\r\n                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                        //        t2.S_B_STATE = \"已推送\";\r\n                        //        taskservice.Update(t2);\r\n                        //        creT2 = true;\r\n                        //        System.Threading.Thread.Sleep(750);\r\n                        //        LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 125\");\r\n                        //        RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                        //        LogHelper.Info($\"{t2.S_TASK_NO}> end å†™ 125\");\r\n                        //        Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        //    }\r\n                        //}\r\n                        else //1 ç›´æŽ¥å¸è´§ã€‚ \r\n                        //if (!creT2)\r\n                        {\r\n                            LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ²¡æœ‰åŒä¾§å–货任务 1工位卸货。\");\r\n                            tag.RGV.workMod = 1;\r\n                            tag.RGV.taskmod = 2;\r\n                            tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n                            tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n                            System.Threading.Thread.Sleep(750);\r\n                            LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST å†™ 0\");\r\n                            RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                            LogHelper.Info($\"{task1.S_TASK_NO}> taskend å†™ 0\");\r\n                            Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (task2 != null && task2.S_B_STATE != \"完成\")// 1 æ²¡ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚ \r\n                    {\r\n                        LogHelper.Info($\"查看RGV 1工位没任务,工位2 æœ‰ä»»åŠ¡{task2.S_TASK_NO}。工位2卸货。。\");\r\n                        //2 å¸è´§ã€‚\r\n                        tag.RGV.workMod = 2;\r\n                        tag.RGV.taskmod = 2;\r\n                        tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));\r\n                        tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);\r\n                        System.Threading.Thread.Sleep(750);\r\n                        LogHelper.Info($\"{task2.S_TASK_NO}> bit2taskOver_LAST å†™ 0\");\r\n                        RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                        //tag.RGV.taskend = 125;\r\n                        LogHelper.Info($\"{task2.S_TASK_NO}> taskend å†™125\");\r\n                        Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                    }\r\n                    else if (tklist.Any()) //1mei ä»»åŠ¡  2 æ²¡ä»»åŠ¡ã€‚\r\n                    {\r\n                        LogHelper.Info($\"查看RGV 1工位没任务,工位2 ä¹Ÿæ²¡ä»»åŠ¡ã€‚ä¼˜å…ˆ1工位终点1017任务。。\");\r\n                        //、下 1017任务 ç»™1号工位。\r\n                        //var lss = tklist.Take(2).ToList();\r\n                        var e1017first = tklist.Find(x => x.S_START_LOC == \"1002\" || x.S_START_LOC == \"1010\" || x.S_START_LOC == \"1023\");\r\n                        //if (e1017first != null)\r\n                        //{\r\n                        //    e1017first = tklist.FirstOrDefault();\r\n                        //}\r\n                        if (e1017first != null)\r\n                        {\r\n                            LogHelper.Info($\"查看RGV1 ä»»åŠ¡å·¥ä½2 æ²¡ä»»åŠ¡ã€‚ 1002  1010  1023取货任务{e1017first.S_TASK_NO}。\");\r\n                            tag.RGV.workMod = 1;\r\n                            tag.RGV.taskmod = 1;\r\n                            uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}> è½¬æ¢åŽä»»åŠ¡å·{tno} å¼€å§‹å†™å…¥ã€‚\");\r\n                            tag.RGV.taskno1 = tno;\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}>开始写入 task1do>>{e1017first.S_START_LOC}。\");\r\n                            tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}> æ›´æ–°ä»»åŠ¡ã€‚\");\r\n                            e1017first.S_B_STATE = \"已推送\";\r\n                            taskservice.Update(e1017first);\r\n                            System.Threading.Thread.Sleep(750);\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}> bit1taskOver_LAST å†™0\");\r\n                            RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n                            LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend å†™125\");\r\n                            //tag.RGV.taskend=125\r\n                            Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                        }\r\n                        else\r\n                        {\r\n                            var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n                            if (tklist != null)\r\n                            {\r\n                                LogHelper.Info($\"查看RGV1 æ²¡ä»»åŠ¡å·¥ä½2 æ²¡ä»»åŠ¡ã€‚ æ‰¾1020  1008  1016取货任务{t2.S_TASK_NO}。\");\r\n                                tag.RGV.workMod = 2;\r\n                                tag.RGV.taskmod = 1;\r\n                                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                                t2.S_B_STATE = \"已推送\";\r\n                                taskservice.Update(t2);\r\n                                System.Threading.Thread.Sleep(750);\r\n                                LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST å†™ 0\");\r\n                                RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n                                LogHelper.Info($\"{t2.S_TASK_NO}> end å†™ 125\");\r\n                                Conn.默认Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                LogHelper.Info($\"rgv å¤„理完成。taskend 125\");\r\n                #endregion\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                LogHelper.Info(ex.Message + ex.StackTrace);\r\n            }\r\n        }\r\n\r\n\r\n        public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)\r\n        {\r\n            Console.WriteLine($\"ThreadGrats å…‰æ …处理 =================> \");\r\n            var taskCOdes = new List<string> { \"Sarrive\", \"Srelease\", \"Earrive\", \"Erelease\" };\r\n            TaskActRepository taskActRepository = new TaskActRepository();\r\n            TaskRepository taskRepository = new TaskRepository();\r\n            var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);\r\n            foreach (var item in requires)\r\n            {\r\n                var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);\r\n                if (tin == -1)\r\n                {\r\n                    item.N_CREATEMETHOD = -1;\r\n                    taskActRepository.Update(item);\r\n                    continue;\r\n                }\r\n                //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);\r\n                string loc = \"\";\r\n                if (tin < 2)\r\n                {\r\n                    loc = item.S_START_LOC;\r\n                }\r\n                else\r\n                {\r\n                    loc = item.S_END_LOC;\r\n                }\r\n                if (loc == null) continue; else loc = loc.Trim();\r\n                bool goin = tin % 2 == 0;\r\n                bool continuuuuu = false;\r\n                var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));\r\n                if (dev != null)\r\n                {\r\n                    var V = dev.location.ToList().FindIndex(x => x == loc) == 0;\r\n                    //车走了  å¼€å…‰æ …\r\n                    if (!goin)\r\n                    {\r\n                        if (dev.deviceType == 1)\r\n                        {\r\n                            LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚\" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\"));\r\n                            Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\");\r\n\r\n                        }\r\n                        else if (dev.deviceType == 2)\r\n                        {\r\n                            LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚\" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\"));\r\n                            Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\");\r\n                        }\r\n\r\n                        item.N_CREATEMETHOD = 1;\r\n                        taskActRepository.Update(item);\r\n                    }\r\n                    //车要进入交互。\r\n                    else\r\n                    {\r\n                        if (dev.deviceType == 1)\r\n                        {\r\n                            var tf = Conn.默认Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//读关闭状态\r\n                            if (tf?.ToLower() == \"true\")\r\n                            {\r\n                                LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼\");\r\n                                continuuuuu = true;\r\n                            }\r\n                            else\r\n                            {\r\n                                LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚\" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n                            }\r\n\r\n                        }\r\n                        else if (dev.deviceType == 2)\r\n                        {\r\n                            var tf = Conn.默认Redis.GetValue(dev.deviceName + \".D1202\");\r\n                            int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                            if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)\r\n                            {\r\n                                LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼\");\r\n                                continuuuuu = true;\r\n                            }\r\n                            else\r\n                            {\r\n                                LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin ? \"关闭\" : \"开启\")} ç”³è¯·ã€‚\" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), dev.deviceName + \"Queue\"));\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), \"1\", dev.deviceName + \"Queue\");\r\n                            }\r\n                        }\r\n\r\n                    }\r\n\r\n                }\r\n                if (continuuuuu)\r\n                {\r\n                    LogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} è½¦è¾†å‘送继续任务!\");\r\n                    continueTask?.Invoke(new HaiKangOrderInfo\r\n                    {\r\n                        reqCode = item.S_ID.Replace(\"-\", \"\"),\r\n                        taskCode = item.S_TASK_NO\r\n                    });\r\n                    item.N_CREATEMETHOD = 1;\r\n                    taskActRepository.Update(item);\r\n                }\r\n            }\r\n            System.Threading.Thread.Sleep(3000);\r\n            //重置信号\r\n            foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))\r\n            {\r\n                var tf = Conn.默认Redis.GetValue(dev.deviceName + \".D1202\");\r\n                int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                if (TcpServer.GetBitdata(numm, 0) == 0)\r\n                {\r\n                    Conn.默认Redis.SetValue(dev.deviceName + \".D1220\", \"0\", dev.deviceName + \"Queue\");\r\n                    Conn.默认Redis.SetValue(dev.deviceName + \".D1222\", \"0\", dev.deviceName + \"Queue\");\r\n                }\r\n                else if (TcpServer.GetBitdata(numm, 1) == 0)\r\n                {\r\n                    Conn.默认Redis.SetValue(dev.deviceName + \".D1221\", \"0\", dev.deviceName + \"Queue\");\r\n                    Conn.默认Redis.SetValue(dev.deviceName + \".D1223\", \"0\", dev.deviceName + \"Queue\");\r\n                }\r\n            }\r\n\r\n        }\r\n        /// <summary>\r\n        /// 1020  1023空框下线\r\n        /// </summary>\r\n        /// <param name=\"tag\"></param>\r\n        public void ThreadEdown(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadEdown 20 23 = ç©ºä¸‹æ£€æµ‹ =================> \");\r\n            TaskRepository taskRepository = new TaskRepository();\r\n            foreach (var Bssx in new string[] { \"1020\", \"1023\" })\r\n            {\r\n                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n                Console.WriteLine($\"{Bssx} ç©ºä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}  \");\r\n                if (RtaskState == 3 && RtaskState_LAST == 0)\r\n                {\r\n                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                    string msg = \"\";\r\n                    if (task != null)\r\n                    {\r\n                        Console.WriteLine($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        LogHelper.Info($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        continue;\r\n                    }\r\n                    try\r\n                    {\r\n                        var listtep = new List<string>();\r\n                        if (Bssx == \"1020\")\r\n                        {\r\n                            if (tag.SF下料位.RArrive1003 == 1)\r\n                            {\r\n                                listtep = new List<string> { \"1012\", \"1004\" };\r\n                            }\r\n                            else\r\n                            {\r\n                                listtep = new List<string> { \"1004\", \"1012\" };\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            if (tag.SF下料位.RArrive1005 == 1)\r\n                            {\r\n                                listtep = new List<string> { \"1014\", \"1006\" };\r\n                            }\r\n                            else\r\n                            {\r\n                                listtep = new List<string> { \"1006\", \"1014\" };\r\n                            }\r\n                        }\r\n\r\n                        foreach (var item in listtep)//(Bssx == \"1020\" ? new string[] { \"1004\", \"1012\" } : new string[] { \"1006\", \"1014\" }))\r\n                        {\r\n                            var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                            var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                            if (R5 == 5 && R5空闲_LAST == 0 && task == null)\r\n                            {\r\n                                task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                                msg = \"\";\r\n                                if (task != null)\r\n                                {\r\n                                    Console.WriteLine($\" {item}有正在 [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                                    LogHelper.Info($\" {item}有正在 [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                                    continue;\r\n                                }\r\n\r\n                                var b = TaskProcess.CreateTask(\"\", Bssx, item, \"空上RGV\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n                                if (b)\r\n                                {\r\n                                    LogHelper.Debug($\"输送线RGV空托任务 from:{Bssx}>to {item}开始创建成功\");\r\n                                    RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n                                    //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                                    RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out msg);\r\n                                    //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                                    break;\r\n                                }\r\n                            }\r\n                            else if (R5 != 5 && R5空闲_LAST == 1)\r\n                            {\r\n                                RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out msg);\r\n                                //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n                            }\r\n                        }\r\n                        System.Threading.Thread.Sleep(1000);\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        LogHelper.Error(ex.Message, ex);\r\n                        Console.WriteLine(ex.Message + ex.StackTrace);\r\n                    }\r\n                }\r\n                else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n                }\r\n                System.Threading.Thread.Sleep(2000);\r\n            }\r\n\r\n            foreach (var item in new string[] { \"1004\", \"1012\", \"1006\", \"1014\", \"1026\", \"1017\" })\r\n            {\r\n                var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                if (R5 != 5 && R5空闲_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n                }\r\n            }\r\n        }\r\n\r\n        public void ThreadDdown(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadDdown 08 10 ==================> 1026\");\r\n            TaskRepository taskRepository = new TaskRepository();\r\n            foreach (var Bssx in new string[] { \"1008\", \"1016\" })\r\n            {\r\n                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n                Console.WriteLine($\"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n                if (RtaskState == 3 && RtaskState_LAST == 0)\r\n                {\r\n                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                    string msg = \"\";\r\n                    if (task != null)\r\n                    {\r\n                        Console.WriteLine($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        LogHelper.Info($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        continue;\r\n                    }\r\n\r\n                    var item = \"1026\";\r\n                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                    var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                    if (R5 == 5 && R5空闲_LAST == 0)\r\n                    {\r\n                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                        msg = \"\";\r\n                        if (task != null)\r\n                        {\r\n                            Console.WriteLine($\"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                            LogHelper.Info($\"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                            continue;\r\n                        }\r\n                        var b = TaskProcess.CreateTask(\"\", Bssx, item, \"满转1026\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n                        if (b)\r\n                        {\r\n                            RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n                            RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg2);\r\n                            //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                            //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                            break;\r\n                        }\r\n                    }\r\n                    else if (R5 != 5 && R5空闲_LAST == 1)\r\n                    {\r\n                        RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg2);\r\n                    }\r\n                }\r\n                else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n                }\r\n                System.Threading.Thread.Sleep(2000);\r\n            }\r\n        }\r\n\r\n        public void Thread0210Down(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Thread0210Down ==================>\");\r\n            TaskRepository taskRepository = new TaskRepository();\r\n            foreach (var Bssx in new string[] { \"1002\", \"1010\" })\r\n            {\r\n                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n                var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n                Console.WriteLine($\"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n                if (RtaskState == 3 && RtaskState_LAST == 0)\r\n                {\r\n                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                    string msg = \"\";\r\n                    if (task != null)\r\n                    {\r\n                        Console.WriteLine($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        LogHelper.Info($\"{Bssx} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                        continue;\r\n                    }\r\n                    var item = \"1017\";\r\n                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                    var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                    if (R5 == 5 && R5空闲_LAST == 0)\r\n                    {\r\n                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"完成\" && x.S_B_STATE != \"取消\");\r\n                        msg = \"\";\r\n                        if (task != null)\r\n                        {\r\n                            Console.WriteLine($\"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                            LogHelper.Info($\"{item} æœ‰æ­£åœ¨ [{task.S_B_STATE}] ä¸­çš„{task.S_TASK_NO}任务\");\r\n                            continue;\r\n                        }\r\n                        var b = TaskProcess.CreateTask(\"\", Bssx, item, \"满转1017\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n                        if (b)\r\n                        {\r\n                            RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n                            RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg1);\r\n                            //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                            //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                            break;\r\n                        }\r\n                    }\r\n                    else if (R5 != 5 && R5空闲_LAST == 1)\r\n                    {\r\n                        RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg1);\r\n                    }\r\n                }\r\n                else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n                }\r\n                System.Threading.Thread.Sleep(2000);\r\n            }\r\n        }\r\n\r\n\r\n        public void Thread下料位检测(Tag tag)\r\n        {\r\n            Console.WriteLine($\"Thread下料位检测    =====>\");\r\n            foreach (var ssx in new string[] { \"1003\", \"1005\", \"1011\", \"1013\" })\r\n            {\r\n                var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"FNK1003051113.RArrive{ssx}\"), typeof(System.UInt16));\r\n                var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"FNK1003051113.RArrive{ssx}_LAST\"), typeof(System.UInt16));\r\n                if (RArrive == 1 && RArriveLast == 0)\r\n                {\r\n                    if (ssx == \"1005\" && tag.SF下料位.WRelease1005 == 0)\r\n                    {\r\n                        tag.FNK1.D2215 = 1;\r\n                        //tag.SF下料位.RArrive1005_LAST = 1;\r\n                        RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"1\", out string msg);\r\n\r\n                        //tag.SF下料位.WRelease1005 = 0;\r\n                        //tag.SF下料位.WSafe0305 = 0;\r\n                    }\r\n                    else if (ssx == \"1003\" && tag.SF下料位.WRelease1003 == 0)\r\n                    {\r\n                        tag.FNK1.D2210 = 1;\r\n                        //tag.SF下料位.RArrive1003_LAST = 1;\r\n\r\n                        RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"1\", out string msg);\r\n\r\n                        //tag.SF下料位.WRelease1003 = 0;\r\n                        //tag.SF下料位.WSafe0305 = 0;\r\n                    }\r\n                    else if (ssx == \"1013\" && tag.SF下料位.WRelease1013 == 0)\r\n                    {\r\n                        tag.FNK2.D2215 = 1;\r\n                        //tag.SF下料位.RArrive1013_LAST = 1;\r\n                        RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"1\", out string msg);\r\n\r\n                        //tag.SF下料位.WRelease1013 = 0;\r\n                        //tag.SF下料位.WSafe1113 = 0;\r\n                    }\r\n                    else if (ssx == \"1011\" && tag.SF下料位.WRelease1011 == 0)\r\n                    {\r\n                        tag.FNK2.D2210 = 1;\r\n                        //tag.SF下料位.RArrive1011_LAST = 1;\r\n                        RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"1\", out string msg);\r\n\r\n                        //tag.SF下料位.WRelease1011 = 0;\r\n                        //tag.SF下料位.WSafe1113 = 0;\r\n                    }\r\n                }\r\n                else if (RArrive == 0 && RArriveLast == 1)\r\n                {\r\n                    RedisHelper.Add($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", $\"FNK1003051113Queue\");\r\n                }\r\n            }\r\n        }\r\n\r\n        public void ThreadFNK1Over(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadFNK1Over    =====>\");\r\n            if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n            {\r\n                tag.FNK1.D2215 = 0;\r\n                //tag.FNK1.D2212_LAST = 1;\r\n                RedisHelper.Add($\"p发那科1下线.D2217_LAST\", \"1\", out string msg);\r\n\r\n                tag.SF下料位.WRelease1005 = 1;\r\n                tag.SF下料位.WSafe0305 = 1;\r\n                System.Threading.Thread.Sleep(1000);\r\n                RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"0\", out msg);\r\n            }\r\n            if (tag.FNK1.D2216 == 1)\r\n                tag.FNK1.D2215 = 0;\r\n            else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n                //tag.FNK1.D2217_LAST = 0;\r\n                RedisHelper.Add($\"p发那科1下线.D2217_LAST\", \"0\", out string msg);\r\n\r\n            if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n            {\r\n                tag.FNK1.D2210 = 0;\r\n                //tag.FNK1.D2217_LAST = 1;\r\n                RedisHelper.Add($\"p发那科1下线.D2212_LAST\", \"1\", out string msg);\r\n                tag.SF下料位.WRelease1003 = 1;\r\n                tag.SF下料位.WSafe0305 = 1;\r\n                System.Threading.Thread.Sleep(1000);\r\n                RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"0\", out msg);\r\n            }\r\n            //else if (tag.FNK1.D2211 == 1)\r\n            //    tag.FNK1.D2210 = 0;\r\n            else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n            {\r\n                //tag.FNK1.D2212_LAST = 0;\r\n                RedisHelper.Add($\"p发那科1下线.D2212_LAST\", \"0\", out string msg);\r\n            }\r\n            if (tag.FNK1.D2211 == 1)\r\n                tag.FNK1.D2210 = 0;\r\n\r\n        }\r\n        public void ThreadFNK2Over(Tag tag)\r\n        {\r\n            Console.WriteLine($\"ThreadFNK2Over    =====>\");\r\n            if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n            {\r\n                tag.FNK2.D2215 = 0;\r\n                //tag.FNK2.D2212_LAST = 1;\r\n                RedisHelper.Add($\"p发那科2下线.D2217_LAST\", \"1\", out string msg);\r\n\r\n                tag.SF下料位.WRelease1013 = 1;\r\n                tag.SF下料位.WSafe1113 = 1;\r\n                System.Threading.Thread.Sleep(1000);\r\n                RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"0\", out msg);\r\n            }\r\n            else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n                //tag.FNK2.D2217_LAST = 0;\r\n                RedisHelper.Add($\"p发那科2下线.D2217_LAST\", \"0\", out string msg);\r\n\r\n            if (tag.FNK2.D2216 == 1)\r\n                tag.FNK2.D2215 = 0;\r\n\r\n            if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n            {\r\n                tag.FNK2.D2210 = 0;\r\n                //tag.FNK2.D2217_LAST = 1;\r\n                RedisHelper.Add($\"p发那科2下线.D2212_LAST\", \"1\", out string msg);\r\n\r\n                tag.SF下料位.WRelease1011 = 1;\r\n                tag.SF下料位.WSafe1113 = 1;\r\n                System.Threading.Thread.Sleep(1000);\r\n                RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"0\", out msg);\r\n            }\r\n            else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)\r\n            {\r\n                //tag.FNK2.D2212_LAST = 0;\r\n                RedisHelper.Add($\"p发那科2下线.D2212_LAST\", \"0\", out string msg);\r\n            }\r\n            if (tag.FNK2.D2211 == 1)\r\n                tag.FNK2.D2210 = 0;\r\n\r\n        }\r\n\r\n        public void Thread1019Down(Tag tag)\r\n        {\r\n            Console.WriteLine($\"1019任务状态:   =====>\");\r\n            Console.WriteLine($\"1019任务状态:{tag.SA1019.RtaskState}- barcode:{tag.SA1019.R托盘码}- ç©ºé—²{tag.SA1019.R5空闲}\");\r\n        }\r\n        public void Thread1025Up(Tag tag)\r\n        {\r\n            Console.WriteLine($\"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š   =====>\");\r\n            Console.WriteLine($\"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1025.RtaskState}- ç©ºé—²{tag.SA1025.R5空闲}\");\r\n        }\r\n        public void Thread1022Up(Tag tag)\r\n        {\r\n            Console.WriteLine($\"SA1022    =====>\");\r\n            Console.WriteLine($\"SA1022 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1022.RtaskState}- ç©ºé—²{tag.SA1022.R5空闲}\");\r\n        }\r\n        public void Thread1030Down(Tag tag)\r\n        {\r\n            Console.WriteLine($\"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š   =====>\");\r\n            Console.WriteLine($\"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1030.RtaskState}- ç©ºé—²{tag.SA1030.R5空闲}-->对应终点2001>空闲5:{tag.SA2001.R5空闲}\");\r\n        }\r\n        public void Thread2030Down(Tag tag)\r\n        {\r\n            Console.WriteLine($\"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š   =====>\");\r\n            Console.WriteLine($\"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA2030.RtaskState}- ç©ºé—²{tag.SA2030.R5空闲} - barcode:{tag.SA2030.R托盘码}\");\r\n        }\r\n\r\n\r\n    }\r\n}\r\n",
      "CusMethod": {
        "Name": "",
        "Params": [],
        "ReturnType": ""
      },
      "CusClass": {
        "Name": "",
        "InheritClass": "",
        "Inherits": []
      }
    }
  ],
  "CreationTime": "2025-02-26 15:31:23",
  "LastWriteTime": "2025-06-18 23:06:58",
  "LastWriteTime": "2025-06-23 09:06:09",
  "HasSaved": true
}
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Scripts/Script.json
@@ -14,8 +14,8 @@
          "ID": "20250323111613779",
          "Name": "初始化配置",
          "Desc": "",
          "Content": " if (Tag.Global.SettingsOver == 0)\r\n                        {\r\n                            SettingInit();\r\n                            Tag.Global.SettingsOver = 1;\r\n                        }\r\n                        else if(Settings.deviceInfos.Count == 0)\r\n                        {\r\n                            Tag.Global.SettingsOver = 0;\r\n                        }\r\n",
          "ContentCopy": " if (Tag.Global.SettingsOver == 0)\r\n                        {\r\n                            SettingInit();\r\n                            Tag.Global.SettingsOver = 1;\r\n                        }\r\n                        else if(Settings.deviceInfos.Count == 0)\r\n                        {\r\n                            Tag.Global.SettingsOver = 0;\r\n                        }\r\n",
          "Content": "\r\n                        Action myDelegate = () => SettingInit();\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadSettingInit\", new object[] { tag, myDelegate });",
          "ContentCopy": "\r\n                        Action myDelegate = () => SettingInit();\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadSettingInit\", new object[] { tag, myDelegate });",
          "ParentID": "20250226153120175",
          "Children": [],
          "Type": "Program",
@@ -53,8 +53,8 @@
          "ID": "20250323151832119",
          "Name": "Program4",
          "Desc": "",
          "Content": "//Conn.默认Redis.SetValue(\"西门子2.Param3\",\"300\",\"西门子2Queue\");\r\n//return;\r\nif(false){\r\n                    List<string> locs = new List<string>() { \"vxr1l\", \"vx1r\", \"vxr1c1\", \"vxr1c2\", \"vxr2l\", \"vxr2r\", \"vxr2c1\", \"vxr2c2\" };\r\n                    List<string> sites = new List<string>() { \"196365BB283162\", \"193841BB283149\", \"198756BB287300\", \"198767BB286133\", \"206987BB282931\", \"204460BB282975\", \"209405BB287057\", \"209377BB285899\" };\r\n\r\n                    LocRepository locservice = new LocRepository();\r\n                    for (int i = 0; i < locs.Count; i++)\r\n                    {\r\n                        string loccode = locs[i];\r\n                        string sitesss = sites[i];\r\n                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);\r\n                        if (loc == null)\r\n                        {\r\n                            locservice.Insert(new LocEntity\r\n                            {\r\n                                S_ID = Guid.NewGuid().ToString(),\r\n                                S_STATE = \"编辑\",\r\n                                T_CREATE = DateTime.Now,\r\n                                T_MODIFY = DateTime.Now,\r\n                                S_DEEP = \"vxr\",\r\n\r\n                                S_LOC_CODE = loccode,\r\n                                S_AGV_SITE = sitesss,\r\n\r\n                                S_LOCK_STATE = \"无\",\r\n                                N_ROW = 1,\r\n                                N_COL = 1,\r\n                                N_AGV_CODE = 0,\r\n                                N_AGV_SITE_LAYER = 0,\r\n                                N_CAPACITY = 1,\r\n                                N_CURRENT_NUM = 0,\r\n                                S_TYPE = \"\",\r\n\r\n                            });\r\n                        }\r\n                    }\r\n                   // TaskProcess.CreateTask(\"\", locs[6], locs[7], \"test\", 9, new List<string> { \"test\" }, 1, 1, 1);\r\n                   }\r\n",
          "ContentCopy": "//Conn.默认Redis.SetValue(\"西门子2.Param3\",\"300\",\"西门子2Queue\");\r\n//return;\r\nif(false){\r\n                    List<string> locs = new List<string>() { \"vxr1l\", \"vx1r\", \"vxr1c1\", \"vxr1c2\", \"vxr2l\", \"vxr2r\", \"vxr2c1\", \"vxr2c2\" };\r\n                    List<string> sites = new List<string>() { \"196365BB283162\", \"193841BB283149\", \"198756BB287300\", \"198767BB286133\", \"206987BB282931\", \"204460BB282975\", \"209405BB287057\", \"209377BB285899\" };\r\n\r\n                    LocRepository locservice = new LocRepository();\r\n                    for (int i = 0; i < locs.Count; i++)\r\n                    {\r\n                        string loccode = locs[i];\r\n                        string sitesss = sites[i];\r\n                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);\r\n                        if (loc == null)\r\n                        {\r\n                            locservice.Insert(new LocEntity\r\n                            {\r\n                                S_ID = Guid.NewGuid().ToString(),\r\n                                S_STATE = \"编辑\",\r\n                                T_CREATE = DateTime.Now,\r\n                                T_MODIFY = DateTime.Now,\r\n                                S_DEEP = \"vxr\",\r\n\r\n                                S_LOC_CODE = loccode,\r\n                                S_AGV_SITE = sitesss,\r\n\r\n                                S_LOCK_STATE = \"无\",\r\n                                N_ROW = 1,\r\n                                N_COL = 1,\r\n                                N_AGV_CODE = 0,\r\n                                N_AGV_SITE_LAYER = 0,\r\n                                N_CAPACITY = 1,\r\n                                N_CURRENT_NUM = 0,\r\n                                S_TYPE = \"\",\r\n\r\n                            });\r\n                        }\r\n                    }\r\n                   // TaskProcess.CreateTask(\"\", locs[6], locs[7], \"test\", 9, new List<string> { \"test\" }, 1, 1, 1);\r\n                   }\r\n",
          "Content": "////Conn.默认Redis.SetValue(\"西门子2.Param3\",\"300\",\"西门子2Queue\");\r\n////return;\r\n//if(false){\r\n//                    List<string> locs = new List<string>() { \"vxr1l\", \"vx1r\", \"vxr1c1\", \"vxr1c2\", \"vxr2l\", \"vxr2r\", \"vxr2c1\", \"vxr2c2\" };\r\n//                    List<string> sites = new List<string>() { \"196365BB283162\", \"193841BB283149\", \"198756BB287300\", \"198767BB286133\", \"206987BB282931\", \"204460BB282975\", \"209405BB287057\", \"209377BB285899\" };\r\n\r\n//                    LocRepository locservice = new LocRepository();\r\n//                    for (int i = 0; i < locs.Count; i++)\r\n//                    {\r\n//                        string loccode = locs[i];\r\n//                        string sitesss = sites[i];\r\n//                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);\r\n//                        if (loc == null)\r\n//                        {\r\n//                            locservice.Insert(new LocEntity\r\n//                            {\r\n//                                S_ID = Guid.NewGuid().ToString(),\r\n//                                S_STATE = \"编辑\",\r\n//                                T_CREATE = DateTime.Now,\r\n//                                T_MODIFY = DateTime.Now,\r\n//                                S_DEEP = \"vxr\",\r\n\r\n//                                S_LOC_CODE = loccode,\r\n//                                S_AGV_SITE = sitesss,\r\n\r\n//                                S_LOCK_STATE = \"无\",\r\n//                                N_ROW = 1,\r\n//                                N_COL = 1,\r\n//                                N_AGV_CODE = 0,\r\n//                                N_AGV_SITE_LAYER = 0,\r\n//                                N_CAPACITY = 1,\r\n//                                N_CURRENT_NUM = 0,\r\n//                                S_TYPE = \"\",\r\n\r\n//                            });\r\n//                        }\r\n//                    }\r\n//                   // TaskProcess.CreateTask(\"\", locs[6], locs[7], \"test\", 9, new List<string> { \"test\" }, 1, 1, 1);\r\n//                   }\r\n",
          "ContentCopy": "////Conn.默认Redis.SetValue(\"西门子2.Param3\",\"300\",\"西门子2Queue\");\r\n////return;\r\n//if(false){\r\n//                    List<string> locs = new List<string>() { \"vxr1l\", \"vx1r\", \"vxr1c1\", \"vxr1c2\", \"vxr2l\", \"vxr2r\", \"vxr2c1\", \"vxr2c2\" };\r\n//                    List<string> sites = new List<string>() { \"196365BB283162\", \"193841BB283149\", \"198756BB287300\", \"198767BB286133\", \"206987BB282931\", \"204460BB282975\", \"209405BB287057\", \"209377BB285899\" };\r\n\r\n//                    LocRepository locservice = new LocRepository();\r\n//                    for (int i = 0; i < locs.Count; i++)\r\n//                    {\r\n//                        string loccode = locs[i];\r\n//                        string sitesss = sites[i];\r\n//                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);\r\n//                        if (loc == null)\r\n//                        {\r\n//                            locservice.Insert(new LocEntity\r\n//                            {\r\n//                                S_ID = Guid.NewGuid().ToString(),\r\n//                                S_STATE = \"编辑\",\r\n//                                T_CREATE = DateTime.Now,\r\n//                                T_MODIFY = DateTime.Now,\r\n//                                S_DEEP = \"vxr\",\r\n\r\n//                                S_LOC_CODE = loccode,\r\n//                                S_AGV_SITE = sitesss,\r\n\r\n//                                S_LOCK_STATE = \"无\",\r\n//                                N_ROW = 1,\r\n//                                N_COL = 1,\r\n//                                N_AGV_CODE = 0,\r\n//                                N_AGV_SITE_LAYER = 0,\r\n//                                N_CAPACITY = 1,\r\n//                                N_CURRENT_NUM = 0,\r\n//                                S_TYPE = \"\",\r\n\r\n//                            });\r\n//                        }\r\n//                    }\r\n//                   // TaskProcess.CreateTask(\"\", locs[6], locs[7], \"test\", 9, new List<string> { \"test\" }, 1, 1, 1);\r\n//                   }\r\n",
          "ParentID": "20250226153120175",
          "Children": [],
          "Type": "Program",
@@ -100,8 +100,8 @@
              "ID": "20250325083325390",
              "Name": "捷瞬抓臂1",
              "Desc": "",
              "Content": "var VERX = Settings.deviceInfos?.Find(x =>x.deviceType==2&& x.deviceName == \"Js捷顺1\");\r\n\r\n if (VERX != null)\r\n                        {\r\n                            if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)\r\n                            {\r\n                                var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                {\r\n                                    requestType = 4,\r\n                                    endBit = VERX.location[0]\r\n                                }));\r\n                                LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                                if (str.Contains(\"true\"))\r\n                                {\r\n                                    tag.Js1.D1212_LAST = 1;\r\n                                }\r\n                            }\r\n                            if(tag.Js1.D1212_LAST == 1 &&TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js1.D1212_LAST = 0;\r\n                            }\r\n\t\t\t\t\t\t\tif (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\trequestType = 4,\r\n\t\t\t\t\t\t\t\t\tendBit = VERX.location[1]\r\n\t\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t\t\t\tLogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n\t\t\t\t\t\t\t\tif (str.Contains(\"true\"))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.Js1.D1213_LAST = 1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}if(tag.Js1.D1213_LAST == 1 &&TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js1.D1213_LAST = 0;\r\n                            }\r\n                        }",
              "ContentCopy": "var VERX = Settings.deviceInfos?.Find(x =>x.deviceType==2&& x.deviceName == \"Js捷顺1\");\r\n\r\n if (VERX != null)\r\n                        {\r\n                            if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)\r\n                            {\r\n                                var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                {\r\n                                    requestType = 4,\r\n                                    endBit = VERX.location[0]\r\n                                }));\r\n                                LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                                if (str.Contains(\"true\"))\r\n                                {\r\n                                    tag.Js1.D1212_LAST = 1;\r\n                                }\r\n                            }\r\n                            if(tag.Js1.D1212_LAST == 1 &&TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js1.D1212_LAST = 0;\r\n                            }\r\n\t\t\t\t\t\t\tif (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\trequestType = 4,\r\n\t\t\t\t\t\t\t\t\tendBit = VERX.location[1]\r\n\t\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t\t\t\tLogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n\t\t\t\t\t\t\t\tif (str.Contains(\"true\"))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.Js1.D1213_LAST = 1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}if(tag.Js1.D1213_LAST == 1 &&TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js1.D1213_LAST = 0;\r\n                            }\r\n                        }",
              "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadJS1\", new object[] { tag });",
              "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadJS1\", new object[] { tag });",
              "ParentID": "20250325083047245",
              "Children": [],
              "Type": "Program",
@@ -139,8 +139,8 @@
              "ID": "20250325083326611",
              "Name": "捷瞬抓臂2",
              "Desc": "",
              "Content": "//jsz2捷瞬抓臂2\r\n\r\n                       var VERX = Settings.deviceInfos?.Find(x =>x.deviceType==2&& x.deviceName == \"Js捷顺2\");\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)\r\n                            {\r\n                                var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                {\r\n                                    requestType = 4,\r\n                                    endBit = VERX.location[0]\r\n                                }));\r\n                                LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                                if (str.Contains(\"true\"))\r\n                                {\r\n                                    tag.Js2.D1212_LAST = 1;\r\n                                }\r\n                            } if(tag.Js2.D1212_LAST == 1 &&TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js2.D1212_LAST = 0;\r\n                            }\r\n                            if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)\r\n                            {\r\n                                var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                {\r\n                                    requestType = 4,\r\n                                    endBit = VERX.location[1]\r\n                                }));\r\n                                LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                                if (str.Contains(\"true\"))\r\n                                {\r\n                                    tag.Js2.D1213_LAST = 1;\r\n                                }\r\n                            }if(tag.Js2.D1213_LAST == 1 &&TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js2.D1213_LAST = 0;\r\n                            }\r\n                        }",
              "ContentCopy": "//jsz2捷瞬抓臂2\r\n\r\n                       var VERX = Settings.deviceInfos?.Find(x =>x.deviceType==2&& x.deviceName == \"Js捷顺2\");\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)\r\n                            {\r\n                                var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                {\r\n                                    requestType = 4,\r\n                                    endBit = VERX.location[0]\r\n                                }));\r\n                                LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                                if (str.Contains(\"true\"))\r\n                                {\r\n                                    tag.Js2.D1212_LAST = 1;\r\n                                }\r\n                            } if(tag.Js2.D1212_LAST == 1 &&TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js2.D1212_LAST = 0;\r\n                            }\r\n                            if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)\r\n                            {\r\n                                var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                {\r\n                                    requestType = 4,\r\n                                    endBit = VERX.location[1]\r\n                                }));\r\n                                LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                                if (str.Contains(\"true\"))\r\n                                {\r\n                                    tag.Js2.D1213_LAST = 1;\r\n                                }\r\n                            }if(tag.Js2.D1213_LAST == 1 &&TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js2.D1213_LAST = 0;\r\n                            }\r\n                        }",
              "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadJS2\", new object[] { tag });",
              "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadJS2\", new object[] { tag });",
              "ParentID": "20250325083047245",
              "Children": [],
              "Type": "Program",
@@ -225,8 +225,8 @@
                  "ID": "20250325083149366",
                  "Name": "维希尔抓臂1L",
                  "Desc": "",
                  "Content": "\r\nvar VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)\r\n                            {\r\n                                if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        requestType = 1,\r\n                                        cntrCode = traycode,\r\n                                        startBit = VERX.location[0],\r\n                                        endBit = \"\"\r\n                                    }));\r\n                                    LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                                    if (str.Contains(\"true\"))\r\n                                    {\r\n                                        tag.wxr1.R44_LAST = true; \r\n                                    }\r\n                                }\r\n                                else\r\n                                {\r\n                                    TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                               //TaskRepository ts = new TaskRepository();\r\n                                if (tag.wxr1.R10_LAST) //托盘放置信号。。\r\n                                {\r\n                                \tif (tag.wxr1.R10)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.wxr1.R10_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} else\r\n                                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0],out string traycode))\r\n                                    {\r\n                                        //上报校验。\r\n                                        ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 1,\r\n                                            cntrCode = traycode,\r\n                                        }));\r\n                                        if (str.Contains(\"true\"))\r\n                                        {\r\n                                            //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                            tag.wxr1.R10 = true;\r\n                                            tag.wxr1.R44_LAST = false;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            //报警。\r\n                                        }\r\n                                    }\r\n                                    else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                                }\r\n                            }\r\n                        }",
                  "ContentCopy": "\r\nvar VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)\r\n                            {\r\n                                if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        requestType = 1,\r\n                                        cntrCode = traycode,\r\n                                        startBit = VERX.location[0],\r\n                                        endBit = \"\"\r\n                                    }));\r\n                                    LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                                    if (str.Contains(\"true\"))\r\n                                    {\r\n                                        tag.wxr1.R44_LAST = true; \r\n                                    }\r\n                                }\r\n                                else\r\n                                {\r\n                                    TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                               //TaskRepository ts = new TaskRepository();\r\n                                if (tag.wxr1.R10_LAST) //托盘放置信号。。\r\n                                {\r\n                                \tif (tag.wxr1.R10)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.wxr1.R10_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} else\r\n                                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0],out string traycode))\r\n                                    {\r\n                                        //上报校验。\r\n                                        ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 1,\r\n                                            cntrCode = traycode,\r\n                                        }));\r\n                                        if (str.Contains(\"true\"))\r\n                                        {\r\n                                            //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                            tag.wxr1.R10 = true;\r\n                                            tag.wxr1.R44_LAST = false;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            //报警。\r\n                                        }\r\n                                    }\r\n                                    else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                                }\r\n                            }\r\n                        }",
                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr1L\", new object[] { tag });",
                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr1L\", new object[] { tag });",
                  "ParentID": "20250610002001052",
                  "Children": [],
                  "Type": "Program",
@@ -264,8 +264,8 @@
                  "ID": "20250610002047005",
                  "Name": "维希尔抓臂1R",
                  "Desc": "",
                  "Content": "var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)\r\n                            {\r\n                                if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        requestType = 1,\r\n                                        cntrCode = traycode,\r\n                                        startBit = VERX.location[1],\r\n                                        endBit = \"\"\r\n                                    }));\r\n                                    LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                                    if (str.Contains(\"true\"))\r\n                                    {\r\n                                        tag.wxr1.R46_LAST = true; \r\n                                    }\r\n                                }\r\n                                else\r\n                                {\r\n                                    TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                                if (tag.wxr1.R11_LAST) //托盘放置信号。。\r\n                                {\r\n                                \tif (tag.wxr1.R11)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.wxr1.R11_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} else\r\n                                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1],out string traycode))\r\n                                    {\r\n                                        //上报校验。\r\n                                        ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 1,\r\n                                            cntrCode = traycode,\r\n                                        }));\r\n                                        if (str.Contains(\"true\"))\r\n                                        {\r\n                                            //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                            tag.wxr1.R11 = true;\r\n                                            tag.wxr1.R46_LAST = false;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            //报警。\r\n                                        }\r\n                                    }\r\n                                    else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                                }\r\n                            }\r\n                        }",
                  "ContentCopy": "var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)\r\n                            {\r\n                                if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        requestType = 1,\r\n                                        cntrCode = traycode,\r\n                                        startBit = VERX.location[1],\r\n                                        endBit = \"\"\r\n                                    }));\r\n                                    LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                                    if (str.Contains(\"true\"))\r\n                                    {\r\n                                        tag.wxr1.R46_LAST = true; \r\n                                    }\r\n                                }\r\n                                else\r\n                                {\r\n                                    TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                                if (tag.wxr1.R11_LAST) //托盘放置信号。。\r\n                                {\r\n                                \tif (tag.wxr1.R11)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.wxr1.R11_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} else\r\n                                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1],out string traycode))\r\n                                    {\r\n                                        //上报校验。\r\n                                        ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 1,\r\n                                            cntrCode = traycode,\r\n                                        }));\r\n                                        if (str.Contains(\"true\"))\r\n                                        {\r\n                                            //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                            tag.wxr1.R11 = true;\r\n                                            tag.wxr1.R46_LAST = false;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            //报警。\r\n                                        }\r\n                                    }\r\n                                    else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                                }\r\n                            }\r\n                        }",
                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr1R\", new object[] { tag });",
                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr1R\", new object[] { tag });",
                  "ParentID": "20250610002001052",
                  "Children": [],
                  "Type": "Program",
@@ -339,8 +339,8 @@
                  "ID": "20250325083315503",
                  "Name": "维希尔抓臂2L",
                  "Desc": "",
                  "Content": "\r\nvar VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)\r\n                            {\r\n                                if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        requestType = 1,\r\n                                        cntrCode = traycode,\r\n                                        startBit = VERX.location[0],\r\n                                        endBit = \"\"\r\n                                    }));\r\n                                    LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                                    if (str.Contains(\"true\"))\r\n                                    {\r\n                                        tag.wxr2.R44_LAST = true; \r\n                                    }\r\n                                }\r\n                                else\r\n                                {\r\n                                    TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                                if (tag.wxr2.R10_LAST) //托盘放置信号。。\r\n                                {\r\n                                \tif (tag.wxr2.R10)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttag.wxr2.R10_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} else\r\n                                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0],out string traycode))\r\n                                    {\r\n                                        //上报校验。\r\n                                        ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 1,\r\n                                            cntrCode = traycode,\r\n                                        }));\r\n                                        if (str.Contains(\"true\"))\r\n                                        {\r\n                                            //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                            tag.wxr2.R10 = true;\r\n                                            tag.wxr2.R44_LAST = false;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            //报警。\r\n                                        }\r\n                                    }\r\n                                    else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                                }\r\n                            }\r\n                        }",
                  "ContentCopy": "\r\nvar VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)\r\n                            {\r\n                                if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        requestType = 1,\r\n                                        cntrCode = traycode,\r\n                                        startBit = VERX.location[0],\r\n                                        endBit = \"\"\r\n                                    }));\r\n                                    LogHelper.Info($\"{VERX.location[0]}申请mes任务结果{str}\");\r\n                                    if (str.Contains(\"true\"))\r\n                                    {\r\n                                        tag.wxr2.R44_LAST = true; \r\n                                    }\r\n                                }\r\n                                else\r\n                                {\r\n                                    TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                                if (tag.wxr2.R10_LAST) //托盘放置信号。。\r\n                                {\r\n                                \tif (tag.wxr2.R10)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttag.wxr2.R10_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} else\r\n                                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0],out string traycode))\r\n                                    {\r\n                                        //上报校验。\r\n                                        ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 1,\r\n                                            cntrCode = traycode,\r\n                                        }));\r\n                                        if (str.Contains(\"true\"))\r\n                                        {\r\n                                            //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                            tag.wxr2.R10 = true;\r\n                                            tag.wxr2.R44_LAST = false;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            //报警。\r\n                                        }\r\n                                    }\r\n                                    else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                                }\r\n                            }\r\n                        }",
                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr2L\", new object[] { tag });",
                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr2L\", new object[] { tag });",
                  "ParentID": "20250610002414741",
                  "Children": [],
                  "Type": "Program",
@@ -378,8 +378,8 @@
                  "ID": "20250610002647095",
                  "Name": "维希尔抓臂2R",
                  "Desc": "",
                  "Content": "var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)\r\n                            {\r\n                                if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        requestType = 1,\r\n                                        cntrCode = traycode,\r\n                                        startBit = VERX.location[1],\r\n                                        endBit = \"\"\r\n                                    }));\r\n                                    LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                                    if (str.Contains(\"true\"))\r\n                                    {\r\n                                        tag.wxr2.R46_LAST = true; \r\n                                    }\r\n                                }\r\n                                else\r\n                                {\r\n                                    TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                               if (tag.wxr2.R11_LAST) //托盘放置信号。。\r\n                                {\r\n                                \tif (tag.wxr2.R11)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttag.wxr2.R11_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} else\r\n                                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1],out string traycode))\r\n                                    {\r\n                                        //上报校验。\r\n                                        ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 1,\r\n                                            cntrCode = traycode,\r\n                                        }));\r\n                                        if (str.Contains(\"true\"))\r\n                                        {\r\n                                            //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                            tag.wxr2.R11 = true;\r\n                                            tag.wxr2.R46_LAST = false;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            //报警。\r\n                                        }\r\n                                    }\r\n                                    else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                                }\r\n                            }\r\n                        }",
                  "ContentCopy": "var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n                        if (VERX != null)\r\n                        {\r\n                            if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)\r\n                            {\r\n                                if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        requestType = 1,\r\n                                        cntrCode = traycode,\r\n                                        startBit = VERX.location[1],\r\n                                        endBit = \"\"\r\n                                    }));\r\n                                    LogHelper.Info($\"{VERX.location[1]}申请mes任务结果{str}\");\r\n                                    if (str.Contains(\"true\"))\r\n                                    {\r\n                                        tag.wxr2.R46_LAST = true; \r\n                                    }\r\n                                }\r\n                                else\r\n                                {\r\n                                    TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                               if (tag.wxr2.R11_LAST) //托盘放置信号。。\r\n                                {\r\n                                \tif (tag.wxr2.R11)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttag.wxr2.R11_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} else\r\n                                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1],out string traycode))\r\n                                    {\r\n                                        //上报校验。\r\n                                        ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 1,\r\n                                            cntrCode = traycode,\r\n                                        }));\r\n                                        if (str.Contains(\"true\"))\r\n                                        {\r\n                                            //Conn.默认Redis.SetValue(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\r\n                                            tag.wxr2.R11 = true;\r\n                                            tag.wxr2.R46_LAST = false;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            //报警。\r\n                                        }\r\n                                    }\r\n                                    else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n                                }\r\n                            }\r\n                        }",
                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr2R\", new object[] { tag });",
                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr2R\", new object[] { tag });",
                  "ParentID": "20250610002414741",
                  "Children": [],
                  "Type": "Program",
@@ -473,8 +473,8 @@
          "ID": "20250325085542733",
          "Name": "任务下发",
          "Desc": "",
          "Content": "ITaskRepository taskservice = new TaskRepository();\r\nvar tklist = taskservice.FindList(x => x.S_B_STATE == \"未执行\" && x.S_WORK_MODE == \"AGV\");\r\nif(tklist.Any())\r\nforeach (var tk in tklist.GroupBy(item =>\r\n{\r\n    var ticks = item.T_CREATE.Ticks;\r\n    return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n}).OrderBy(x => x.Key))\r\n{\r\n    var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();\r\n    foreach (var t in ts)\r\n    {\r\n        var b = false;\r\n        b = RunTask(t);\r\n\r\n        if (b)\r\n        {\r\n            t.S_B_STATE = \"已推送\";\r\n            taskservice.Update(t);\r\n        }\r\n    }\r\n    break;\r\n}\r\n#region Rgv\r\n\r\nvar task1Isrun = false;\r\nif (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)\r\n{\r\n    task1Isrun = true;\r\n    if (tag.RGV.bit1taskOver_LAST == 1)\r\n        RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n}\r\nvar task2Isrun = false;\r\nif (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)\r\n{\r\n    task2Isrun = true;\r\n    if (tag.RGV.bit2taskOver_LAST == 1)\r\n        RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n}\r\nif (task1Isrun || task2Isrun)\r\n{\r\n    string mes = \"\";\r\n    if (task1Isrun)\r\n        mes += tag.RGV.ReadTask1No + \"执行中...\";\r\n    if (task2Isrun)\r\n        mes += tag.RGV.ReadTask2No + \"执行中...\";\r\n    LogHelper.Info($\"{mes} ä¸èƒ½ä¸‹å‘新任务。\");\r\n    throw new Exception($\"{mes} ä¸èƒ½ä¸‹å‘新任务。\");\r\n    //continue;\r\n}\r\nvar thisOver = 0;\r\n\r\nTaskEntity task1 = null;\r\nTaskEntity task2 = null;\r\n\r\nLogHelper.Info($\"查看RGV 1工位任务》\");\r\nif (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)\r\n{\r\n    var taskno = tag.RGV.ReadTask1No;\r\n    LogHelper.Info($\"RGV 1工位任务{tag.RGV.ReadTask1No}\");\r\n    string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n    task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n    LogHelper.Info($\"RGV 1工位任务{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST:{tag.RGV.bit1taskOver_LAST}\");\r\n    if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)\r\n    {\r\n        if (task1.S_B_STATE != \"完成\")\r\n        {\r\n            if (task1.S_B_STATE == \"取货完成\")\r\n            {\r\n                task1.S_B_STATE = \"完成\";\r\n            }\r\n            else\r\n            {\r\n                task1.S_B_STATE = \"取货完成\";\r\n            }\r\n            LogHelper.Info($\"RGV 1工位任务{task1.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task1.S_B_STATE}\");\r\n            //tag.RGV.bit1taskOver_LAST = 1;\r\n            RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"1\", out string msg);\r\n            LogHelper.Info($\"RGV 1工位任务写处理\");\r\n            taskservice.Update(task1);\r\n            LogHelper.Info($\"RGV 1工位任务更新。\");\r\n        }\r\n    }\r\n}\r\nelse if (tag.RGV.ReadTask1No == 0)\r\n{\r\n    LogHelper.Info($\"RGV 1工位没有任务》\");\r\n}\r\n\r\nLogHelper.Info($\"查看RGV 2工位任务》\");\r\nif (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)\r\n{\r\n    var taskno = tag.RGV.ReadTask2No;\r\n    LogHelper.Info($\"RGV 2工位任务{tag.RGV.ReadTask2No}\");\r\n    string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n    task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n    LogHelper.Info($\"RGV2工位任务{JsonConvert.SerializeObject(task2)}.bit1taskOver_LAST:{tag.RGV.bit2taskOver_LAST}\");\r\n    if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)\r\n    {\r\n        if (task2.S_B_STATE != \"完成\")\r\n        {\r\n            if (task2.S_B_STATE == \"取货完成\")\r\n            {\r\n                task2.S_B_STATE = \"完成\";\r\n            }\r\n            else\r\n            {\r\n                task2.S_B_STATE = \"取货完成\";\r\n            }\r\n            LogHelper.Info($\"RGV 2工位任务{task2.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task2.S_B_STATE}\");\r\n            RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"1\", out string msg);\r\n            LogHelper.Info($\"RGV 2工位任务写处理\");\r\n            taskservice.Update(task2);\r\n            LogHelper.Info($\"RGV 2工位任务更新。\");\r\n        }\r\n    }\r\n}\r\nelse if (tag.RGV.ReadTask2No == 0)\r\n{\r\n    LogHelper.Info($\"RGV 2工位没有任务》\");\r\n}\r\n\r\n\r\n///1 æœ‰è´§  å°±2 å–。  1 æ²¡è´§ å°±2 å¸è´§ï¼Œ éƒ½æœ‰è´§  å°±1卸货。 éƒ½æ²¡è´§ å°±1卸\r\ntklist = taskservice.FindList(x => x.S_B_STATE == \"未执行\" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\nif (task1 != null && task1.S_B_STATE != \"完成\") //1有任务\r\n{\r\n    if (task2 != null && task2.S_B_STATE != \"完成\")// 1 æœ‰ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚ \r\n    {\r\n        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 ä¹Ÿæœ‰ä»»åŠ¡{task2.S_TASK_NO}。 å¼€å§‹å·¥ä½1 å¸è´§ã€‚\");\r\n        tag.RGV.workMod = 1;\r\n        tag.RGV.taskmod = 2;\r\n        tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n        tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n    }\r\n    else //1有任务  2 æ²¡ä»»åŠ¡ã€‚\r\n    {\r\n        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务。\");\r\n        //1 å¦‚果有同侧取货任务。就取。没有\r\n        var leftSide = new List<string> { \"1023\", \"1020\" };\r\n        var RightSide = new List<string> { \"1002\", \"1008\", \"1010\", \"1016\" };\r\n        bool creT2 = false;\r\n        if (leftSide.Contains(task1.S_START_LOC))\r\n        {\r\n            leftSide.Remove(task1.S_START_LOC);\r\n            var lsde = leftSide.FirstOrDefault();\r\n            var t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != \"1017\");\r\n            if (t2 != null) //同侧取货任务。\r\n            {\r\n                LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务{t2.S_TASK_NO}。\");\r\n                tag.RGV.workMod = 2;\r\n                tag.RGV.taskmod = 1;\r\n                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                t2.S_B_STATE = \"已推送\";\r\n                taskservice.Update(t2);\r\n                creT2 = true;\r\n            }\r\n        }\r\n        else if (RightSide.Contains(task1.S_START_LOC))\r\n        {\r\n            RightSide.Remove(task1.S_START_LOC);\r\n            var t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != \"1017\");\r\n            if (t2 != null) //同侧取货任务。\r\n            {\r\n                LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务{t2.S_TASK_NO}。\");\r\n                tag.RGV.workMod = 2;\r\n                tag.RGV.taskmod = 1;\r\n                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                t2.S_B_STATE = \"已推送\";\r\n                taskservice.Update(t2);\r\n                creT2 = true;\r\n            }\r\n        }\r\n        //else //1 ç›´æŽ¥å¸è´§ã€‚ \r\n        if (!creT2)\r\n        {\r\n            LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ²¡æœ‰åŒä¾§å–货任务 1工位卸货。\");\r\n            tag.RGV.workMod = 1;\r\n            tag.RGV.taskmod = 2;\r\n            tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n            tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n        }\r\n    }\r\n}\r\nelse\r\n{\r\n    if (task2 != null && task2.S_B_STATE != \"完成\")// 1 æ²¡ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚ \r\n    {\r\n        LogHelper.Info($\"查看RGV 1工位没任务,工位2 æœ‰ä»»åŠ¡{task2.S_TASK_NO}。工位2卸货。。\");\r\n        //2 å¸è´§ã€‚\r\n        tag.RGV.workMod = 2;\r\n        tag.RGV.taskmod = 2;\r\n        tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));\r\n        tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n    }\r\n    else //1mei ä»»åŠ¡  2 æ²¡ä»»åŠ¡ã€‚\r\n    {\r\n        LogHelper.Info($\"查看RGV 1工位没任务,工位2 ä¹Ÿæ²¡ä»»åŠ¡ã€‚ä¼˜å…ˆ1工位终点1017任务。。\");\r\n        //、下 1017任务 ç»™1号工位。\r\n        var lss = tklist.Take(2).ToList();\r\n        var e1017first = lss.Find(x => x.S_END_LOC == \"1017\");\r\n        if (e1017first == null)\r\n        {\r\n            e1017first = lss.FirstOrDefault();\r\n        }\r\n        if (e1017first != null)\r\n        {\r\n            LogHelper.Info($\"查看RGV 1工位没任务,工位2 ä¹Ÿæ²¡ä»»åŠ¡ã€‚1工位下任务{e1017first.S_TASK_NO}> ç»ˆç‚¹{e1017first.S_END_LOC}。\");\r\n            try\r\n            {\r\n                tag.RGV.workMod = 1;\r\n                tag.RGV.taskmod = 1;\r\n                uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));\r\n                LogHelper.Info($\"{e1017first.S_TASK_NO}> è½¬æ¢åŽä»»åŠ¡å·{tno} å¼€å§‹å†™å…¥ã€‚\");\r\n                tag.RGV.taskno1 = tno;\r\n                LogHelper.Info($\"{e1017first.S_TASK_NO}>开始写入 task1do>>{e1017first.S_START_LOC}。\");\r\n                tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                LogHelper.Error(ex.Message, ex);\r\n                throw ex;\r\n            }\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 125\");\r\n            e1017first.S_B_STATE = \"已推送\";\r\n            taskservice.Update(e1017first);\r\n        }\r\n    }\r\n}\r\n\r\n#endregion",
          "ContentCopy": "ITaskRepository taskservice = new TaskRepository();\r\nvar tklist = taskservice.FindList(x => x.S_B_STATE == \"未执行\" && x.S_WORK_MODE == \"AGV\");\r\nif(tklist.Any())\r\nforeach (var tk in tklist.GroupBy(item =>\r\n{\r\n    var ticks = item.T_CREATE.Ticks;\r\n    return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n}).OrderBy(x => x.Key))\r\n{\r\n    var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();\r\n    foreach (var t in ts)\r\n    {\r\n        var b = false;\r\n        b = RunTask(t);\r\n\r\n        if (b)\r\n        {\r\n            t.S_B_STATE = \"已推送\";\r\n            taskservice.Update(t);\r\n        }\r\n    }\r\n    break;\r\n}\r\n#region Rgv\r\n\r\nvar task1Isrun = false;\r\nif (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)\r\n{\r\n    task1Isrun = true;\r\n    if (tag.RGV.bit1taskOver_LAST == 1)\r\n        RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n}\r\nvar task2Isrun = false;\r\nif (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)\r\n{\r\n    task2Isrun = true;\r\n    if (tag.RGV.bit2taskOver_LAST == 1)\r\n        RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n}\r\nif (task1Isrun || task2Isrun)\r\n{\r\n    string mes = \"\";\r\n    if (task1Isrun)\r\n        mes += tag.RGV.ReadTask1No + \"执行中...\";\r\n    if (task2Isrun)\r\n        mes += tag.RGV.ReadTask2No + \"执行中...\";\r\n    LogHelper.Info($\"{mes} ä¸èƒ½ä¸‹å‘新任务。\");\r\n    throw new Exception($\"{mes} ä¸èƒ½ä¸‹å‘新任务。\");\r\n    //continue;\r\n}\r\nvar thisOver = 0;\r\n\r\nTaskEntity task1 = null;\r\nTaskEntity task2 = null;\r\n\r\nLogHelper.Info($\"查看RGV 1工位任务》\");\r\nif (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)\r\n{\r\n    var taskno = tag.RGV.ReadTask1No;\r\n    LogHelper.Info($\"RGV 1工位任务{tag.RGV.ReadTask1No}\");\r\n    string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n    task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n    LogHelper.Info($\"RGV 1工位任务{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST:{tag.RGV.bit1taskOver_LAST}\");\r\n    if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)\r\n    {\r\n        if (task1.S_B_STATE != \"完成\")\r\n        {\r\n            if (task1.S_B_STATE == \"取货完成\")\r\n            {\r\n                task1.S_B_STATE = \"完成\";\r\n            }\r\n            else\r\n            {\r\n                task1.S_B_STATE = \"取货完成\";\r\n            }\r\n            LogHelper.Info($\"RGV 1工位任务{task1.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task1.S_B_STATE}\");\r\n            //tag.RGV.bit1taskOver_LAST = 1;\r\n            RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"1\", out string msg);\r\n            LogHelper.Info($\"RGV 1工位任务写处理\");\r\n            taskservice.Update(task1);\r\n            LogHelper.Info($\"RGV 1工位任务更新。\");\r\n        }\r\n    }\r\n}\r\nelse if (tag.RGV.ReadTask1No == 0)\r\n{\r\n    LogHelper.Info($\"RGV 1工位没有任务》\");\r\n}\r\n\r\nLogHelper.Info($\"查看RGV 2工位任务》\");\r\nif (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)\r\n{\r\n    var taskno = tag.RGV.ReadTask2No;\r\n    LogHelper.Info($\"RGV 2工位任务{tag.RGV.ReadTask2No}\");\r\n    string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n    task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n    LogHelper.Info($\"RGV2工位任务{JsonConvert.SerializeObject(task2)}.bit1taskOver_LAST:{tag.RGV.bit2taskOver_LAST}\");\r\n    if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)\r\n    {\r\n        if (task2.S_B_STATE != \"完成\")\r\n        {\r\n            if (task2.S_B_STATE == \"取货完成\")\r\n            {\r\n                task2.S_B_STATE = \"完成\";\r\n            }\r\n            else\r\n            {\r\n                task2.S_B_STATE = \"取货完成\";\r\n            }\r\n            LogHelper.Info($\"RGV 2工位任务{task2.S_TASK_NO} çŠ¶æ€åˆ‡æ¢ä¸º{task2.S_B_STATE}\");\r\n            RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"1\", out string msg);\r\n            LogHelper.Info($\"RGV 2工位任务写处理\");\r\n            taskservice.Update(task2);\r\n            LogHelper.Info($\"RGV 2工位任务更新。\");\r\n        }\r\n    }\r\n}\r\nelse if (tag.RGV.ReadTask2No == 0)\r\n{\r\n    LogHelper.Info($\"RGV 2工位没有任务》\");\r\n}\r\n\r\n\r\n///1 æœ‰è´§  å°±2 å–。  1 æ²¡è´§ å°±2 å¸è´§ï¼Œ éƒ½æœ‰è´§  å°±1卸货。 éƒ½æ²¡è´§ å°±1卸\r\ntklist = taskservice.FindList(x => x.S_B_STATE == \"未执行\" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\nif (task1 != null && task1.S_B_STATE != \"完成\") //1有任务\r\n{\r\n    if (task2 != null && task2.S_B_STATE != \"完成\")// 1 æœ‰ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚ \r\n    {\r\n        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 ä¹Ÿæœ‰ä»»åŠ¡{task2.S_TASK_NO}。 å¼€å§‹å·¥ä½1 å¸è´§ã€‚\");\r\n        tag.RGV.workMod = 1;\r\n        tag.RGV.taskmod = 2;\r\n        tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n        tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n    }\r\n    else //1有任务  2 æ²¡ä»»åŠ¡ã€‚\r\n    {\r\n        LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务。\");\r\n        //1 å¦‚果有同侧取货任务。就取。没有\r\n        var leftSide = new List<string> { \"1023\", \"1020\" };\r\n        var RightSide = new List<string> { \"1002\", \"1008\", \"1010\", \"1016\" };\r\n        bool creT2 = false;\r\n        if (leftSide.Contains(task1.S_START_LOC))\r\n        {\r\n            leftSide.Remove(task1.S_START_LOC);\r\n            var lsde = leftSide.FirstOrDefault();\r\n            var t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != \"1017\");\r\n            if (t2 != null) //同侧取货任务。\r\n            {\r\n                LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务{t2.S_TASK_NO}。\");\r\n                tag.RGV.workMod = 2;\r\n                tag.RGV.taskmod = 1;\r\n                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                t2.S_B_STATE = \"已推送\";\r\n                taskservice.Update(t2);\r\n                creT2 = true;\r\n            }\r\n        }\r\n        else if (RightSide.Contains(task1.S_START_LOC))\r\n        {\r\n            RightSide.Remove(task1.S_START_LOC);\r\n            var t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != \"1017\");\r\n            if (t2 != null) //同侧取货任务。\r\n            {\r\n                LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ‰¾åŒä¾§å–货任务{t2.S_TASK_NO}。\");\r\n                tag.RGV.workMod = 2;\r\n                tag.RGV.taskmod = 1;\r\n                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                t2.S_B_STATE = \"已推送\";\r\n                taskservice.Update(t2);\r\n                creT2 = true;\r\n            }\r\n        }\r\n        //else //1 ç›´æŽ¥å¸è´§ã€‚ \r\n        if (!creT2)\r\n        {\r\n            LogHelper.Info($\"查看RGV1 æœ‰ä»»åŠ¡{task1.S_TASK_NO},工位2 æ²¡ä»»åŠ¡ã€‚ æ²¡æœ‰åŒä¾§å–货任务 1工位卸货。\");\r\n            tag.RGV.workMod = 1;\r\n            tag.RGV.taskmod = 2;\r\n            tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n            tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n        }\r\n    }\r\n}\r\nelse\r\n{\r\n    if (task2 != null && task2.S_B_STATE != \"完成\")// 1 æ²¡ä»»åŠ¡  2 æœ‰ä»»åŠ¡ã€‚ \r\n    {\r\n        LogHelper.Info($\"查看RGV 1工位没任务,工位2 æœ‰ä»»åŠ¡{task2.S_TASK_NO}。工位2卸货。。\");\r\n        //2 å¸è´§ã€‚\r\n        tag.RGV.workMod = 2;\r\n        tag.RGV.taskmod = 2;\r\n        tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));\r\n        tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n    }\r\n    else //1mei ä»»åŠ¡  2 æ²¡ä»»åŠ¡ã€‚\r\n    {\r\n        LogHelper.Info($\"查看RGV 1工位没任务,工位2 ä¹Ÿæ²¡ä»»åŠ¡ã€‚ä¼˜å…ˆ1工位终点1017任务。。\");\r\n        //、下 1017任务 ç»™1号工位。\r\n        var lss = tklist.Take(2).ToList();\r\n        var e1017first = lss.Find(x => x.S_END_LOC == \"1017\");\r\n        if (e1017first == null)\r\n        {\r\n            e1017first = lss.FirstOrDefault();\r\n        }\r\n        if (e1017first != null)\r\n        {\r\n            LogHelper.Info($\"查看RGV 1工位没任务,工位2 ä¹Ÿæ²¡ä»»åŠ¡ã€‚1工位下任务{e1017first.S_TASK_NO}> ç»ˆç‚¹{e1017first.S_END_LOC}。\");\r\n            try\r\n            {\r\n                tag.RGV.workMod = 1;\r\n                tag.RGV.taskmod = 1;\r\n                uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));\r\n                LogHelper.Info($\"{e1017first.S_TASK_NO}> è½¬æ¢åŽä»»åŠ¡å·{tno} å¼€å§‹å†™å…¥ã€‚\");\r\n                tag.RGV.taskno1 = tno;\r\n                LogHelper.Info($\"{e1017first.S_TASK_NO}>开始写入 task1do>>{e1017first.S_START_LOC}。\");\r\n                tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                LogHelper.Error(ex.Message, ex);\r\n                throw ex;\r\n            }\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 125\");\r\n            e1017first.S_B_STATE = \"已推送\";\r\n            taskservice.Update(e1017first);\r\n        }\r\n    }\r\n}\r\n\r\n#endregion",
          "Content": "\r\n                        Func<TaskEntity, bool> myDelegate = (t) => RunTask(t);\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadTaskRun\", new object[] { tag, myDelegate });",
          "ContentCopy": "\r\n                        Func<TaskEntity, bool> myDelegate = (t) => RunTask(t);\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadTaskRun\", new object[] { tag, myDelegate });",
          "ParentID": "20250226153120175",
          "Children": [],
          "Type": "Program",
@@ -626,8 +626,8 @@
          "ID": "20250611223832523",
          "Name": "光栅处理",
          "Desc": "",
          "Content": "// - å…‰æ …交互处理。。\r\n                        var taskCOdes = new List<string> { \"Sarrive\", \"Srelease\", \"Earrive\", \"Erelease\" };\r\n                        TaskActRepository taskActRepository = new TaskActRepository();\r\n                        TaskRepository taskRepository = new TaskRepository();\r\n                        var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);\r\n                        foreach (var item in requires)\r\n                        {\r\n                            var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);\r\n                            if (tin == -1)\r\n                            {\r\n                                item.N_CREATEMETHOD = -1;\r\n                                taskActRepository.Update(item);\r\n                                continue;\r\n                            }\r\n                            //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);\r\n                            string loc = \"\";\r\n                            if (tin < 2)\r\n                            {\r\n                                loc = item.S_START_LOC;\r\n                            }\r\n                            else\r\n                            {\r\n                                loc = item.S_END_LOC;\r\n                            } \r\n\t\t\t\t\t\t\tif (loc == null) continue; else loc = loc.Trim();\r\n                            bool goin = tin % 2 == 0;\r\n                            bool continuuuuu =false;\r\n                            var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));\r\n                            if (dev != null)\r\n                            {\r\n                                var V = dev.location.ToList().FindIndex(x => x == loc) == 0;\r\n\t\t\t\t\t\t\t\t//车走了  å¼€å…‰æ …\r\n                                if (!goin)\r\n                                {\r\n                                    if (dev.deviceType == 1)\r\n                                    {\r\n                                        LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚\"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\"));\r\n                                        Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\");\r\n\r\n                                    }\r\n                                    else if (dev.deviceType == 2)\r\n                                    {\r\n                                        LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚\"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\"));\r\n                                        Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\");\r\n                                    }\r\n                                    \r\n\t                                item.N_CREATEMETHOD = 1;\r\n\t                                taskActRepository.Update(item);\r\n\t\t\t\t\t\t\t\t}\r\n                                //车要进入交互。\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n                                    if (dev.deviceType == 1)\r\n                                    {\r\n\t\t\t\t\t\t\t\t\t\tvar tf = Conn.默认Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//读关闭状态\r\n\t\t\t\t\t\t\t\t\t\tif (tf?.ToLower() == \"true\")\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼\");\r\n\t\t\t\t\t\t\t\t\t\t\tcontinuuuuu = true;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚\"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n\t\t\t\t\t\t\t\t\t\t\tConn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n                                    }\r\n                                    else if (dev.deviceType == 2)\r\n                                    {\r\n                                        var tf = Conn.默认Redis.GetValue(dev.deviceName + \".D1202\");\r\n\t\t\t\t\t\t\t\t\t\tint numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                                        if (TcpServer.GetBitdata(numm,(V?0:1))==1)\r\n                                        {\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼\");\r\n                                            continuuuuu = true;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚\"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), dev.deviceName + \"Queue\"));\r\n                                            Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), \"1\", dev.deviceName + \"Queue\");\r\n                                        }\r\n                                    }\r\n\r\n                                }\r\n\r\n                            }\r\n                            if (continuuuuu)\r\n                            {\r\n\t\t\t\t\t\t\t\tLogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} è½¦è¾†å‘送继续任务!\");\r\n                                continueTask(new HaiKangOrderInfo\r\n                                {\r\n                                    reqCode = item.S_ID.Replace(\"-\", \"\"),\r\n                                    taskCode = item.S_TASK_NO\r\n                                });\r\n                                item.N_CREATEMETHOD = 1;\r\n                                taskActRepository.Update(item);\r\n                            }\r\n                        }\r\n                        System.Threading.Thread.Sleep(3000);\r\n                        //重置信号\r\n                        foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))\r\n                        {\r\n                            var tf = Conn.默认Redis.GetValue(dev.deviceName + \".D1202\");\r\n                            int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                            if (TcpServer.GetBitdata(numm, 0) == 0)\r\n                            {\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".D1220\", \"0\", dev.deviceName + \"Queue\");\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".D1222\", \"0\", dev.deviceName + \"Queue\");\r\n                            }\r\n                            else if (TcpServer.GetBitdata(numm, 1) == 0)\r\n                            {\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".D1221\", \"0\", dev.deviceName + \"Queue\");\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".D1223\", \"0\", dev.deviceName + \"Queue\");\r\n                            }\r\n                        }\r\n                        \r\n                        // å‘那科下料光栅。",
          "ContentCopy": "// - å…‰æ …交互处理。。\r\n                        var taskCOdes = new List<string> { \"Sarrive\", \"Srelease\", \"Earrive\", \"Erelease\" };\r\n                        TaskActRepository taskActRepository = new TaskActRepository();\r\n                        TaskRepository taskRepository = new TaskRepository();\r\n                        var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);\r\n                        foreach (var item in requires)\r\n                        {\r\n                            var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);\r\n                            if (tin == -1)\r\n                            {\r\n                                item.N_CREATEMETHOD = -1;\r\n                                taskActRepository.Update(item);\r\n                                continue;\r\n                            }\r\n                            //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);\r\n                            string loc = \"\";\r\n                            if (tin < 2)\r\n                            {\r\n                                loc = item.S_START_LOC;\r\n                            }\r\n                            else\r\n                            {\r\n                                loc = item.S_END_LOC;\r\n                            } \r\n\t\t\t\t\t\t\tif (loc == null) continue; else loc = loc.Trim();\r\n                            bool goin = tin % 2 == 0;\r\n                            bool continuuuuu =false;\r\n                            var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));\r\n                            if (dev != null)\r\n                            {\r\n                                var V = dev.location.ToList().FindIndex(x => x == loc) == 0;\r\n\t\t\t\t\t\t\t\t//车走了  å¼€å…‰æ …\r\n                                if (!goin)\r\n                                {\r\n                                    if (dev.deviceType == 1)\r\n                                    {\r\n                                        LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚\"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\"));\r\n                                        Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\");\r\n\r\n                                    }\r\n                                    else if (dev.deviceType == 2)\r\n                                    {\r\n                                        LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚\"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\"));\r\n                                        Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\");\r\n                                    }\r\n                                    \r\n\t                                item.N_CREATEMETHOD = 1;\r\n\t                                taskActRepository.Update(item);\r\n\t\t\t\t\t\t\t\t}\r\n                                //车要进入交互。\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n                                    if (dev.deviceType == 1)\r\n                                    {\r\n\t\t\t\t\t\t\t\t\t\tvar tf = Conn.默认Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//读关闭状态\r\n\t\t\t\t\t\t\t\t\t\tif (tf?.ToLower() == \"true\")\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼\");\r\n\t\t\t\t\t\t\t\t\t\t\tcontinuuuuu = true;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚\"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n\t\t\t\t\t\t\t\t\t\t\tConn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n                                    }\r\n                                    else if (dev.deviceType == 2)\r\n                                    {\r\n                                        var tf = Conn.默认Redis.GetValue(dev.deviceName + \".D1202\");\r\n\t\t\t\t\t\t\t\t\t\tint numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                                        if (TcpServer.GetBitdata(numm,(V?0:1))==1)\r\n                                        {\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚ å·²ç»å…³é—­ï¼\");\r\n                                            continuuuuu = true;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            LogHelper.Info($\"{dev.deviceName}{(V ? \"å·¦\" : \"右\")} å…‰æ …{(goin?\"关闭\":\"开启\")} ç”³è¯·ã€‚\"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), dev.deviceName + \"Queue\"));\r\n                                            Conn.默认Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), \"1\", dev.deviceName + \"Queue\");\r\n                                        }\r\n                                    }\r\n\r\n                                }\r\n\r\n                            }\r\n                            if (continuuuuu)\r\n                            {\r\n\t\t\t\t\t\t\t\tLogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} è½¦è¾†å‘送继续任务!\");\r\n                                continueTask(new HaiKangOrderInfo\r\n                                {\r\n                                    reqCode = item.S_ID.Replace(\"-\", \"\"),\r\n                                    taskCode = item.S_TASK_NO\r\n                                });\r\n                                item.N_CREATEMETHOD = 1;\r\n                                taskActRepository.Update(item);\r\n                            }\r\n                        }\r\n                        System.Threading.Thread.Sleep(3000);\r\n                        //重置信号\r\n                        foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))\r\n                        {\r\n                            var tf = Conn.默认Redis.GetValue(dev.deviceName + \".D1202\");\r\n                            int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                            if (TcpServer.GetBitdata(numm, 0) == 0)\r\n                            {\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".D1220\", \"0\", dev.deviceName + \"Queue\");\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".D1222\", \"0\", dev.deviceName + \"Queue\");\r\n                            }\r\n                            else if (TcpServer.GetBitdata(numm, 1) == 0)\r\n                            {\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".D1221\", \"0\", dev.deviceName + \"Queue\");\r\n                                Conn.默认Redis.SetValue(dev.deviceName + \".D1223\", \"0\", dev.deviceName + \"Queue\");\r\n                            }\r\n                        }\r\n                        \r\n                        // å‘那科下料光栅。",
          "Content": "// - å…‰æ …交互处理。。\r\n                        Action<HaiKangOrderInfo> myDelegate = (t) => continueTask(t);\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadGrats\", new object[] { tag, myDelegate });\r\n                        \r\n                        // å‘那科下料光栅。",
          "ContentCopy": "// - å…‰æ …交互处理。。\r\n                        Action<HaiKangOrderInfo> myDelegate = (t) => continueTask(t);\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadGrats\", new object[] { tag, myDelegate });\r\n                        \r\n                        // å‘那科下料光栅。",
          "ParentID": "20250226153120175",
          "Children": [],
          "Type": "Program",
@@ -673,8 +673,8 @@
              "ID": "20250616094224396",
              "Name": "1020空框下线",
              "Desc": "",
              "Content": "foreach (var Bssx in new string[] { \"1020\", \"1023\" })\r\n{\r\n    var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n    var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n    var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n    Console.WriteLine($\"{Bssx} ç©ºä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n    if (RtaskState == 3 && RtaskState_LAST == 0)\r\n    {\r\n        try\r\n        {\r\n            foreach (var item in new string[] { \"1004\", \"1006\", \"1012\", \"1014\" })\r\n            {\r\n                var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                if (R5 == 5 && R5空闲_LAST == 0)\r\n                {\r\n                    var b = TaskProcess.CreateTask(\"\", Bssx, item, \"空上RGV\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n                    if (b)\r\n                    {\r\n                        LogHelper.Debug($\"输送线RGV空托任务 from:{Bssx}>to {item}开始创建成功\");\r\n                        RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out string msg);\r\n                        //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                        RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg1);\r\n                        //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                        break;\r\n                    }\r\n                }\r\n                else if (R5 != 5 && R5空闲_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n                }\r\n            }\r\n            System.Threading.Thread.Sleep(1000);\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            LogHelper.Error(ex.Message, ex);\r\n            Console.WriteLine(ex.Message + ex.StackTrace);\r\n        }\r\n    }\r\n    else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n    {\r\n        RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n        //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n    }\r\n    System.Threading.Thread.Sleep(2000);\r\n}",
              "ContentCopy": "foreach (var Bssx in new string[] { \"1020\", \"1023\" })\r\n{\r\n    var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n    var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n    var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n    Console.WriteLine($\"{Bssx} ç©ºä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n    if (RtaskState == 3 && RtaskState_LAST == 0)\r\n    {\r\n        try\r\n        {\r\n            foreach (var item in new string[] { \"1004\", \"1006\", \"1012\", \"1014\" })\r\n            {\r\n                var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n                var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n                if (R5 == 5 && R5空闲_LAST == 0)\r\n                {\r\n                    var b = TaskProcess.CreateTask(\"\", Bssx, item, \"空上RGV\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n                    if (b)\r\n                    {\r\n                        LogHelper.Debug($\"输送线RGV空托任务 from:{Bssx}>to {item}开始创建成功\");\r\n                        RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out string msg);\r\n                        //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                        RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg1);\r\n                        //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                        break;\r\n                    }\r\n                }\r\n                else if (R5 != 5 && R5空闲_LAST == 1)\r\n                {\r\n                    RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg);\r\n                    //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n                }\r\n            }\r\n            System.Threading.Thread.Sleep(1000);\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            LogHelper.Error(ex.Message, ex);\r\n            Console.WriteLine(ex.Message + ex.StackTrace);\r\n        }\r\n    }\r\n    else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n    {\r\n        RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n        //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n    }\r\n    System.Threading.Thread.Sleep(2000);\r\n}",
              "Content": "\r\n                        //1020  1023 ç©ºæ¡†ä¸‹çº¿\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadEdown\", new object[] { tag });",
              "ContentCopy": "\r\n                        //1020  1023 ç©ºæ¡†ä¸‹çº¿\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadEdown\", new object[] { tag });",
              "ParentID": "20250614173821058",
              "Children": [],
              "Type": "Program",
@@ -751,8 +751,8 @@
              "ID": "20250616094632985",
              "Name": "定子满下线",
              "Desc": "",
              "Content": "foreach (var Bssx in new string[] { \"1008\", \"1016\" })\r\n{\r\n    var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n    var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n    var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n    Console.WriteLine($\"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n    if (RtaskState == 3 && RtaskState_LAST == 0)\r\n    {\r\n        var item = \"1026\";\r\n        var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n        var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n        if (R5 == 5 && R5空闲_LAST == 0)\r\n        {\r\n            var b = TaskProcess.CreateTask(\"\", Bssx, item, \"满转1026\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n            if (b)\r\n            {\r\n                RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out string msg);\r\n                RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg2);\r\n                //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                break;\r\n            }\r\n        }\r\n        else if (R5 != 5 && R5空闲_LAST == 1)\r\n        {\r\n            RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg2);\r\n        }\r\n    }\r\n    else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n    {\r\n        RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n        //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n    }\r\n    System.Threading.Thread.Sleep(2000);\r\n}",
              "ContentCopy": "foreach (var Bssx in new string[] { \"1008\", \"1016\" })\r\n{\r\n    var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n    var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n    var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n    Console.WriteLine($\"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n    if (RtaskState == 3 && RtaskState_LAST == 0)\r\n    {\r\n        var item = \"1026\";\r\n        var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n        var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n        if (R5 == 5 && R5空闲_LAST == 0)\r\n        {\r\n            var b = TaskProcess.CreateTask(\"\", Bssx, item, \"满转1026\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n            if (b)\r\n            {\r\n                RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out string msg);\r\n                RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg2);\r\n                //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                break;\r\n            }\r\n        }\r\n        else if (R5 != 5 && R5空闲_LAST == 1)\r\n        {\r\n            RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg2);\r\n        }\r\n    }\r\n    else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n    {\r\n        RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n        //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n    }\r\n    System.Threading.Thread.Sleep(2000);\r\n}",
              "Content": "\r\n                        //定子满下线  1008  1016   ->  1026\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadDdown\", new object[] { tag });",
              "ContentCopy": "\r\n                        //定子满下线  1008  1016   ->  1026\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadDdown\", new object[] { tag });",
              "ParentID": "20250614173821058",
              "Children": [],
              "Type": "Program",
@@ -790,8 +790,8 @@
              "ID": "20250616094511322",
              "Name": "转子满下线",
              "Desc": "",
              "Content": "//转子满下线  1002  1010   - RGV2工位不可到 1017 ä¸å¯ä¸‹å‘2工位任务。\r\nforeach (var Bssx in new string[] { \"1002\", \"1010\" })\r\n{\r\n    var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n    var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n    var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n    Console.WriteLine($\"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n    if (RtaskState == 3 && RtaskState_LAST == 0)\r\n    {\r\n        var item = \"1017\";\r\n        var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n        var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n        if (R5 == 5 && R5空闲_LAST == 0)\r\n        {\r\n            var b = TaskProcess.CreateTask(\"\", Bssx, item, \"满转1017\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n            if (b)\r\n            {\r\n                RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out string msg);\r\n                RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg1);\r\n                //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                break;\r\n            }\r\n        }\r\n        else if (R5 != 5 && R5空闲_LAST == 1)\r\n        {\r\n            RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg1);\r\n        }\r\n    }\r\n    else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n    {\r\n        RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n    }\r\n    System.Threading.Thread.Sleep(2000);\r\n}",
              "ContentCopy": "//转子满下线  1002  1010   - RGV2工位不可到 1017 ä¸å¯ä¸‹å‘2工位任务。\r\nforeach (var Bssx in new string[] { \"1002\", \"1010\" })\r\n{\r\n    var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n    var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n    var R托盘码 = (System.String)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{Bssx}Read.R托盘码\"), typeof(System.String));\r\n    Console.WriteLine($\"{Bssx} æ»¡ä¸‹æ£€æµ‹ï¼šä»»åŠ¡ç”³è¯·ï¼š{RtaskState}- æ˜¯å¦å·²å¤„理:{RtaskState_LAST}- æ‰˜ç›˜ç ï¼š{R托盘码}\");\r\n    if (RtaskState == 3 && RtaskState_LAST == 0)\r\n    {\r\n        var item = \"1017\";\r\n        var R5 = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲\"), typeof(System.UInt16));\r\n        var R5空闲_LAST = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"S{item}Read.R5空闲_LAST\"), typeof(System.UInt16));\r\n        if (R5 == 5 && R5空闲_LAST == 0)\r\n        {\r\n            var b = TaskProcess.CreateTask(\"\", Bssx, item, \"满转1017\", 5, new List<string> { R托盘码 }, \"RGV\");\r\n            if (b)\r\n            {\r\n                RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out string msg);\r\n                RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"1\", out string msg1);\r\n                //Conn.默认Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n                //Conn.默认Redis.SetValue($\"S{item}Read.R5空闲_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n                break;\r\n            }\r\n        }\r\n        else if (R5 != 5 && R5空闲_LAST == 1)\r\n        {\r\n            RedisHelper.Add($\"S{item}Read.R5空闲_LAST\", \"0\", out string msg1);\r\n        }\r\n    }\r\n    else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n    {\r\n        RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n    }\r\n    System.Threading.Thread.Sleep(2000);\r\n}",
              "Content": "\r\n                        //转子满下线  1002  1010   - RGV2工位不可到 1017 ä¸å¯ä¸‹å‘2工位任务。\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread0210Down\", new object[] { tag });",
              "ContentCopy": "\r\n                        //转子满下线  1002  1010   - RGV2工位不可到 1017 ä¸å¯ä¸‹å‘2工位任务。\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread0210Down\", new object[] { tag });",
              "ParentID": "20250614173821058",
              "Children": [],
              "Type": "Program",
@@ -829,8 +829,8 @@
              "ID": "20250616095605911",
              "Name": "下料位检测",
              "Desc": "",
              "Content": "//下料位检测。  1003  åˆ°ä½æ—¶ å†™ æ ‡è¯†ä¿¡å· å¹¶ ç»™æœºæ¢°æ‰‹ä¿¡å·ã€‚  \r\nforeach (var ssx in new string[] { \"1003\", \"1005\", \"1011\", \"1013\" })\r\n{\r\n    var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"FNK1003051113.RArrive{ssx}\"), typeof(System.UInt16));\r\n    var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"FNK1003051113.RArrive{ssx}_LAST\"), typeof(System.UInt16));\r\n    if (RArrive == 1 && RArriveLast == 0)\r\n    {\r\n        if (ssx == \"1005\")\r\n        {\r\n            tag.FNK1.D2210 = 1;\r\n            tag.SF下料位.RArrive1005_LAST = 1;\r\n\r\n            tag.SF下料位.WRelease1005 = 0;\r\n            tag.SF下料位.WSafe0305 = 0;\r\n        }\r\n        else if (ssx == \"1003\")\r\n        {\r\n            tag.FNK2.D2215 = 1;\r\n            tag.SF下料位.RArrive1003_LAST = 1;\r\n\r\n            tag.SF下料位.WRelease1003 = 0;\r\n            tag.SF下料位.WSafe0305 = 0;\r\n        }\r\n        else if (ssx == \"1013\")\r\n        {\r\n            tag.FNK2.D2210 = 1;\r\n            tag.SF下料位.RArrive1013_LAST = 1;\r\n\r\n            tag.SF下料位.WRelease1013 = 0;\r\n            tag.SF下料位.WSafe1113 = 0;\r\n        }\r\n        else if (ssx == \"1011\")\r\n        {\r\n            tag.FNK2.D2215 = 1;\r\n            tag.SF下料位.RArrive1011_LAST = 1;\r\n\r\n            tag.SF下料位.WRelease1011 = 0;\r\n            tag.SF下料位.WSafe1113 = 0;\r\n        }\r\n    }\r\n    else if (RArrive == 0 && RArriveLast == 1)\r\n    {\r\n                                RedisHelper.Add($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", out string msg);\r\n    }\r\n}",
              "ContentCopy": "//下料位检测。  1003  åˆ°ä½æ—¶ å†™ æ ‡è¯†ä¿¡å· å¹¶ ç»™æœºæ¢°æ‰‹ä¿¡å·ã€‚  \r\nforeach (var ssx in new string[] { \"1003\", \"1005\", \"1011\", \"1013\" })\r\n{\r\n    var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"FNK1003051113.RArrive{ssx}\"), typeof(System.UInt16));\r\n    var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.默认Redis.GetValue($\"FNK1003051113.RArrive{ssx}_LAST\"), typeof(System.UInt16));\r\n    if (RArrive == 1 && RArriveLast == 0)\r\n    {\r\n        if (ssx == \"1005\")\r\n        {\r\n            tag.FNK1.D2210 = 1;\r\n            tag.SF下料位.RArrive1005_LAST = 1;\r\n\r\n            tag.SF下料位.WRelease1005 = 0;\r\n            tag.SF下料位.WSafe0305 = 0;\r\n        }\r\n        else if (ssx == \"1003\")\r\n        {\r\n            tag.FNK2.D2215 = 1;\r\n            tag.SF下料位.RArrive1003_LAST = 1;\r\n\r\n            tag.SF下料位.WRelease1003 = 0;\r\n            tag.SF下料位.WSafe0305 = 0;\r\n        }\r\n        else if (ssx == \"1013\")\r\n        {\r\n            tag.FNK2.D2210 = 1;\r\n            tag.SF下料位.RArrive1013_LAST = 1;\r\n\r\n            tag.SF下料位.WRelease1013 = 0;\r\n            tag.SF下料位.WSafe1113 = 0;\r\n        }\r\n        else if (ssx == \"1011\")\r\n        {\r\n            tag.FNK2.D2215 = 1;\r\n            tag.SF下料位.RArrive1011_LAST = 1;\r\n\r\n            tag.SF下料位.WRelease1011 = 0;\r\n            tag.SF下料位.WSafe1113 = 0;\r\n        }\r\n    }\r\n    else if (RArrive == 0 && RArriveLast == 1)\r\n    {\r\n                                RedisHelper.Add($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", out string msg);\r\n    }\r\n}",
              "Content": "\r\n                        //下料位检测。  1003  åˆ°ä½æ—¶ å†™ æ ‡è¯†ä¿¡å· å¹¶ ç»™æœºæ¢°æ‰‹ä¿¡å·ã€‚  \r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread下料位检测\", new object[] { tag });",
              "ContentCopy": "\r\n                        //下料位检测。  1003  åˆ°ä½æ—¶ å†™ æ ‡è¯†ä¿¡å· å¹¶ ç»™æœºæ¢°æ‰‹ä¿¡å·ã€‚  \r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread下料位检测\", new object[] { tag });",
              "ParentID": "20250614173821058",
              "Children": [],
              "Type": "Program",
@@ -868,8 +868,8 @@
              "ID": "20250616095709155",
              "Name": "1号FNK机械手完成",
              "Desc": "",
              "Content": "if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n{\r\n    tag.FNK1.D2210 = 0;\r\n    tag.FNK1.D2212_LAST = 1;\r\n\r\n    tag.SF下料位.WRelease1005 = 1;\r\n    tag.SF下料位.WSafe0305 = 1;\r\n}\r\nelse if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n{\r\n    tag.FNK1.D2212_LAST = 0;\r\n}\r\nif (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n{\r\n    tag.FNK1.D2215 = 0;\r\n    tag.FNK1.D2217_LAST = 1;\r\n\r\n    tag.SF下料位.WRelease1003 = 1;\r\n    tag.SF下料位.WSafe0305 = 1;\r\n}\r\nelse if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n    tag.FNK1.D2217_LAST = 0;\r\n",
              "ContentCopy": "if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n{\r\n    tag.FNK1.D2210 = 0;\r\n    tag.FNK1.D2212_LAST = 1;\r\n\r\n    tag.SF下料位.WRelease1005 = 1;\r\n    tag.SF下料位.WSafe0305 = 1;\r\n}\r\nelse if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n{\r\n    tag.FNK1.D2212_LAST = 0;\r\n}\r\nif (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n{\r\n    tag.FNK1.D2215 = 0;\r\n    tag.FNK1.D2217_LAST = 1;\r\n\r\n    tag.SF下料位.WRelease1003 = 1;\r\n    tag.SF下料位.WSafe0305 = 1;\r\n}\r\nelse if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n    tag.FNK1.D2217_LAST = 0;\r\n",
              "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadFNK1Over\", new object[] { tag });",
              "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadFNK1Over\", new object[] { tag });",
              "ParentID": "20250614173821058",
              "Children": [],
              "Type": "Program",
@@ -907,8 +907,8 @@
              "ID": "20250616095733680",
              "Name": "2号FNK机械手完成",
              "Desc": "",
              "Content": " if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n {\r\n     tag.FNK2.D2210 = 0;\r\n     tag.FNK2.D2212_LAST = 1;\r\n\r\n     tag.SF下料位.WRelease1013 = 1;\r\n     tag.SF下料位.WSafe1113 = 1;\r\n }\r\n else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)\r\n {\r\n     tag.FNK2.D2212_LAST = 0;\r\n }\r\n if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n {\r\n     tag.FNK2.D2215 = 0;\r\n     tag.FNK2.D2217_LAST = 1;\r\n\r\n     tag.SF下料位.WRelease1011 = 1;\r\n     tag.SF下料位.WSafe1113 = 1;\r\n }\r\n else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n     tag.FNK2.D2217_LAST = 0;",
              "ContentCopy": " if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n {\r\n     tag.FNK2.D2210 = 0;\r\n     tag.FNK2.D2212_LAST = 1;\r\n\r\n     tag.SF下料位.WRelease1013 = 1;\r\n     tag.SF下料位.WSafe1113 = 1;\r\n }\r\n else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)\r\n {\r\n     tag.FNK2.D2212_LAST = 0;\r\n }\r\n if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n {\r\n     tag.FNK2.D2215 = 0;\r\n     tag.FNK2.D2217_LAST = 1;\r\n\r\n     tag.SF下料位.WRelease1011 = 1;\r\n     tag.SF下料位.WSafe1113 = 1;\r\n }\r\n else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n     tag.FNK2.D2217_LAST = 0;",
              "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadFNK2Over\", new object[] { tag });",
              "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadFNK2Over\", new object[] { tag });",
              "ParentID": "20250614173821058",
              "Children": [],
              "Type": "Program",
@@ -954,8 +954,8 @@
                  "ID": "20250617085708084",
                  "Name": "Program1",
                  "Desc": "",
                  "Content": "\r\n Console.WriteLine($\"1019任务状态:{tag.SA1019.RtaskState}- barcode:{tag.SA1019.R托盘码}- ç©ºé—²{tag.SA1019.R5空闲}\");",
                  "ContentCopy": "\r\n Console.WriteLine($\"1019任务状态:{tag.SA1019.RtaskState}- barcode:{tag.SA1019.R托盘码}- ç©ºé—²{tag.SA1019.R5空闲}\");",
                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1019Down\", new object[] { tag });",
                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1019Down\", new object[] { tag });",
                  "ParentID": "20250617081923670",
                  "Children": [],
                  "Type": "Program",
@@ -1029,8 +1029,8 @@
                  "ID": "20250617085712101",
                  "Name": "Program1",
                  "Desc": "",
                  "Content": "\r\n                        Console.WriteLine($\"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1025.RtaskState}- ç©ºé—²{tag.SA1025.R5空闲}\");",
                  "ContentCopy": "\r\n                        Console.WriteLine($\"SA1025 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1025.RtaskState}- ç©ºé—²{tag.SA1025.R5空闲}\");",
                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1025Up\", new object[] { tag });",
                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1025Up\", new object[] { tag });",
                  "ParentID": "20250617081926036",
                  "Children": [],
                  "Type": "Program",
@@ -1104,8 +1104,8 @@
                  "ID": "20250617085750712",
                  "Name": "Program1",
                  "Desc": "",
                  "Content": "\r\n                        Console.WriteLine($\"SA1022 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1022.RtaskState}- ç©ºé—²{tag.SA1022.R5空闲}\");",
                  "ContentCopy": "\r\n                        Console.WriteLine($\"SA1022 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1022.RtaskState}- ç©ºé—²{tag.SA1022.R5空闲}\");",
                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1022Up\", new object[] { tag });",
                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1022Up\", new object[] { tag });",
                  "ParentID": "20250617081930010",
                  "Children": [],
                  "Type": "Program",
@@ -1179,8 +1179,8 @@
                  "ID": "20250617085800942",
                  "Name": "Program1",
                  "Desc": "",
                  "Content": "\r\n                        Console.WriteLine($\"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1030.RtaskState}- ç©ºé—²{tag.SA1030.R5空闲}-->对应终点2001>空闲5:{tag.SA2001.R5空闲}\");",
                  "ContentCopy": "\r\n                        Console.WriteLine($\"SA1030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA1030.RtaskState}- ç©ºé—²{tag.SA1030.R5空闲}-->对应终点2001>空闲5:{tag.SA2001.R5空闲}\");",
                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1030Down\", new object[] { tag });",
                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1030Down\", new object[] { tag });",
                  "ParentID": "20250617081932131",
                  "Children": [],
                  "Type": "Program",
@@ -1254,8 +1254,8 @@
                  "ID": "20250617085809982",
                  "Name": "Program1",
                  "Desc": "",
                  "Content": "\r\n                        Console.WriteLine($\"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA2030.RtaskState}- ç©ºé—²{tag.SA2030.R5空闲} - barcode:{tag.SA2030.R托盘码}\");",
                  "ContentCopy": "\r\n                        Console.WriteLine($\"SA2030 ä»»åŠ¡çŠ¶æ€ï¼š{tag.SA2030.RtaskState}- ç©ºé—²{tag.SA2030.R5空闲} - barcode:{tag.SA2030.R托盘码}\");",
                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread2030Down\", new object[] { tag });",
                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread2030Down\", new object[] { tag });",
                  "ParentID": "20250617081938161",
                  "Children": [],
                  "Type": "Program",
@@ -1410,6 +1410,6 @@
    }
  ],
  "CreationTime": "2025-02-26 15:31:20",
  "LastWriteTime": "2025-06-18 23:06:58",
  "LastWriteTime": "2025-06-23 08:38:47",
  "HasSaved": true
}