1
czw
2025-06-19 b447a2b0dafdaf7e460ca4a73727c81fe820a1ff
1
1个文件已添加
6个文件已修改
285 ■■■■ 已修改文件
2025年6月12日/AuxAllWCS/Build/Project/AuxAllWCS.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Build/Project/代码/VS自定义类/AutoThread.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Build/Project/代码/ViewModel.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Build/Project/代码/界面事件.cs 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Build/Project/代码/自定义类.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Dlls/GZ.Device.PLC.dll 补丁 | 查看 | 原始文档 | blame | 历史
2025年6月12日/AuxAllWCS/Dlls/GZ.Modular.Redis.dll 补丁 | 查看 | 原始文档 | blame | 历史
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/AuxAllWCS.csproj
@@ -198,6 +198,7 @@
      <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>
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/VS×Ô¶¨ÒåÀà/AutoThread.cs
New file
@@ -0,0 +1,102 @@
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;
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());
            }
        }
        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;
            }
        }
    }
}
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/ViewModel.cs
@@ -95,10 +95,12 @@
                {
                    Settings.HostToAgvServerUrl = keyValue.Value.ToString();
                }
                if (keyValue.Name == "deviceInfo") {
                            if (keyValue.Name == "deviceInfo")
                            {
                      Settings.deviceInfos = JsonConvert.DeserializeObject<List<deviceInfo>>(keyValue.Value.ToString());
                }
                if (keyValue.Name == "HKbaseUrl") {
                            if (keyValue.Name == "HKbaseUrl")
                            {
                      Settings.HKbaseUrl = keyValue.Value.ToString();
                }
                            if (keyValue.Name == "MESbaseUrl")
@@ -180,7 +182,8 @@
                                       TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);
                                    }
                                }
                                else if(device.deviceType == 2){
                                else if (device.deviceType == 2)
                                {
                                    var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;
                                     string V = inde? "D1224" : "D1225";
                                     Conn.默认Redis.SetValue(device.deviceName + "." + V, "0", device.deviceName + "Queue");
@@ -282,7 +285,8 @@
                                    endLoc.S_LOCK_STATE = "无";
                                    locrep.Update(startloc);
                                    locrep.Update(endLoc);
                                }else if (tare.Find(x => x.S_ACTION_CODE == "end") == null)
                                }
                                else if (tare.Find(x => x.S_ACTION_CODE == "end") == null)
                                {
                                    endLoc.S_LOCK_STATE = "无";
                                    locrep.Update(endLoc);
@@ -332,7 +336,8 @@
                                }
                            }
                        }else if(mestask!=null && model.method== "cancel")
                        }
                        else if (mestask != null && model.method == "cancel")
                        {
                             if(mestask.S_B_STATE == "MES")
                               Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/201", JsonConvert.SerializeObject(new
@@ -366,7 +371,8 @@
public GZ.DB.Entity.OIDATABASE.TaskEntity Begin(GZ.DB.Entity.OIDATABASE.TaskEntity task)
{
        #region    [自定义指令][20250324170811305][Begin]
 if (task.S_B_STATE.Trim() == "已推送") {
            if (task.S_B_STATE.Trim() == "已推送")
            {
     task.S_B_STATE = "执行中";
     task.T_START_TIME = DateTime.Now;
 }
@@ -376,7 +382,8 @@
public GZ.DB.Entity.OIDATABASE.TaskEntity End(GZ.DB.Entity.OIDATABASE.TaskEntity task)
{
        #region    [自定义指令][20250324170922920][End]
 if (task != null) {
            if (task != null)
            {
     task.S_B_STATE = "完成";
     task.T_END_TIME = DateTime.Now;
 }
@@ -501,19 +508,24 @@
            msg = $"[haikang-CreateOrder] request={request} response={response}";
            
            LogHelper.Info(msg);
            if (response != "") {
                try {
            if (response != "")
            {
                try
                {
                    var dataResult = JsonConvert.DeserializeObject<HKResult>(response);
                    if (dataResult.code == "0") {
                    if (dataResult.code == "0")
                    {
                        result = true;
                    }
                }
                catch (Exception ex) {
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    LogHelper.Info(msg,"海康");
                }
            }
            else {
            else
            {
                msg = "[haikang-CreateOrder]创建订单失败";
                Console.WriteLine(msg);
            }
@@ -659,13 +671,16 @@
var response = Settings.apiHelper.Post(Settings.HKbaseUrl + "rcms/services/rest/hikRpcService/continueTask", request);
msg = $"[haikang-CancelOrder] request={request};response={response}";
Console.WriteLine(msg);
if (response != "") {
            if (response != "")
            {
    var dataResult = JsonConvert.DeserializeObject<HKResult>(response);
    if (dataResult.code == "0") {
                if (dataResult.code == "0")
                {
        result = true;
    }
}
else {
            else
            {
    msg = "[haikang-CancelOrder]取消订单失败";
    Console.WriteLine(msg);
}
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/½çÃæÊ¼þ.cs
@@ -29,6 +29,7 @@
using GZ.DB.IRepository.OIDATABASE;
using GZ.DB.Entity.OIDATABASE;
using GZ.Modular.Redis;
using System.Security.Cryptography;
namespace GZ.Projects.AuxAllWCS
{
    /// <summary>
@@ -78,15 +79,26 @@
                    try
                    {
                        #region    [脚本][20250323111613779][业务逻辑.初始化配置]
                        if (Tag.Global.SettingsOver == 0)
                        {
                            SettingInit();
                            Tag.Global.SettingsOver = 1;
                        }
                        else if (Settings.deviceInfos.Count == 0)
                        {
                            Tag.Global.SettingsOver = 0;
                        }
                        //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;
                        //}
                        #endregion [脚本][20250323111613779][业务逻辑.初始化配置]
                    }
@@ -691,6 +703,32 @@
                }
                ExitJudgeStack.TryPop(out int exitJudgeVal);
            });
            System.Threading.Tasks.Task.Factory.StartNew(() =>
            {
                System.Threading.Thread.CurrentThread.IsBackground = true;
                ExitJudgeStack.Push(0);
                //一直执行,直到满足结束条件
                while (true)
                {
                    if (IsExitApp) { break; }
                    try
                    {
                        #region    [脚本][20250610002647095][业务逻辑.第三标段.维系尔2号.维希尔抓臂2R]
                        LogHelper.Info($"测试线程运行状态日志》》》》》");
                        #endregion [脚本][20250610002647095][业务逻辑.第三标段.维系尔2号.维希尔抓臂2R]
                    }
                    catch (Exception ex)
                    {
                        Conn.默认日志.Error(ex.ToString());
                    }
                    finally
                    {
                        System.Threading.Thread.Sleep(3000);
                    }
                }
                ExitJudgeStack.TryPop(out int exitJudgeVal);
            });
            /// <summary>
            /// ç¨‹åºç‰‡æ®µ:任务下发
            /// æè¿°:
@@ -702,11 +740,19 @@
                //一直执行,直到满足结束条件
                while (true)
                {
                    if (IsExitApp) { break; }
                    //if (IsExitApp) { break; }
                    LogHelper.Info("任务下发  while è¿›å…¥");
                    try
                    {
                        LogHelper.Info("任务下发  try 1 è¿›å…¥");
                        #region    [脚本][20250325085542733][业务逻辑.任务下发]
                        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 =>
@@ -737,8 +783,15 @@
                        //if (tklist.Any())
                        //{
                            #endregion
                        }
                        catch (Exception ex)
                        {
                            LogHelper.Info(ex.Message + ex.StackTrace);
                        }
                        try
                        {
                            LogHelper.Info("任务下发  Rgv ä»»åŠ¡ è¿›å…¥");
                            #region Rgv
                            LogHelper.Info($"查看RGV ç”µé‡ï¼šã€{tag.RGV.R当前电量}】 å……电状态:【{tag.RGV.R充电状态}】 æ•…障代码:【{tag.RGV.RgvrunError}】");
@@ -862,7 +915,7 @@
                            }
                            ///1 æœ‰è´§  å°±2 å–。  1 æ²¡è´§ å°±2 å¸è´§ï¼Œ éƒ½æœ‰è´§  å°±1卸货。 éƒ½æ²¡è´§ å°±1卸
                            tklist = taskservice.FindList(x => x.S_B_STATE == "未执行" && x.S_WORK_MODE == "RGV").OrderBy(x => x.T_CREATE).ToList();
                            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 æœ‰ä»»åŠ¡ã€‚ 
@@ -873,8 +926,14 @@
                                    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);
                                    tag.RGV.taskend = 125;
                                    LogHelper.Info($"{task1.S_TASK_NO}> end å†™ 125");
                                    Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                                }
                                else //1有任务  2 æ²¡ä»»åŠ¡ã€‚
                                {
@@ -899,8 +958,10 @@
                                            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);
                                            tag.RGV.taskend = 125;
                                            LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                                            Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                                        }
                                    }
                                    else if (RightSide.Contains(task1.S_START_LOC))
@@ -918,8 +979,10 @@
                                            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);
                                            tag.RGV.taskend = 125;
                                            LogHelper.Info($"{t2.S_TASK_NO}> end å†™ 125");
                                            Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                                        }
                                    }
                                    //else //1 ç›´æŽ¥å¸è´§ã€‚ 
@@ -931,8 +994,10 @@
                                        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);
                                        tag.RGV.taskend = 125;
                                        LogHelper.Info($"{task1.S_TASK_NO}> taskend å†™ 0");
                                        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                                    }
                                }
                            }
@@ -947,8 +1012,11 @@
                                    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;
                                    //tag.RGV.taskend = 125;
                                    LogHelper.Info($"{task2.S_TASK_NO}> taskend å†™125");
                                    Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                                }
                                else //1mei ä»»åŠ¡  2 æ²¡ä»»åŠ¡ã€‚
                                {
@@ -970,22 +1038,25 @@
                                        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}> taskend 125");
                                        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);
                                        tag.RGV.taskend = 125;
                                    }
                                }
                            }
                                        LogHelper.Info($"{e1017first.S_TASK_NO}> taskend å†™125");
                                        //tag.RGV.taskend=125
                                        Conn.默认Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
                                    }
                                }
                            }
                            LogHelper.Info($"rgv å¤„理完成。taskend 125");
                            #endregion
                        }
                        catch (Exception ex)
                        {
                            LogHelper.Error(ex.Message, ex);
                            //throw ex;
                            LogHelper.Info(ex.Message + ex.StackTrace);
                        }
                        #endregion [脚本][20250325085542733][业务逻辑.任务下发]
                    }
@@ -1260,6 +1331,17 @@
                            }
                            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");
                            }
                        }
                        #endregion [脚本][20250616094224396][业务逻辑.流程2热处理炉进出.1020空框下线]
                    }
                    catch (Exception ex)
@@ -1462,7 +1544,7 @@
                                }
                                else if (ssx == "1003")
                                {
                                    tag.FNK2.D2210 = 1;
                                    tag.FNK1.D2210 = 1;
                                    //tag.SF下料位.RArrive1003_LAST = 1;
                                    RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "1", out string msg);
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/×Ô¶¨ÒåÀà.cs
@@ -28,6 +28,7 @@
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
@@ -656,6 +657,12 @@
    {
        #region    [自定义类][20250417094750211][Utils]
        public void ThreadSettingInit()
        {
            Console.WriteLine("Utils ThreadSettingInit ");
        }
        #endregion [自定义类][20250417094750211][Utils]
    }
    public class ToWMSMES
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Dlls/GZ.Device.PLC.dll
Binary files differ
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Dlls/GZ.Modular.Redis.dll
Binary files differ