1
wankeda
2025-04-11 a206dda817a9f9615db1fa52e3ac193af9ac4a92
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs
@@ -191,24 +191,24 @@
            try
            {
                // è¯»å–任务交互和重置交互的状态
                int taskInteractive = agv.Communicator.Read<int>(taskInteractiveR); // 1表示收到
                int taskInteractiveW = agv.Communicator.Read<int>(taskInteractiveW1); // 0初始/1下发/2取消/3更改
                int resetTaskInteractiveW = agv.Communicator.Read<int>(resetTaskW);
                int resetTaskInteractiver = agv.Communicator.Read<int>(resetTaskInteractiveR);
                int taskInteractive = agv.Communicator.Read<Int16>(taskInteractiveR); // 1表示收到
                int taskInteractiveW = agv.Communicator.Read<Int16>(taskInteractiveW1); // 0初始/1下发/2取消/3更改
                int resetTaskInteractiveW = agv.Communicator.Read<Int16>(resetTaskW);
                int resetTaskInteractiver = agv.Communicator.Read<Int16>(resetTaskInteractiveR);
                // å¤„理任务交互W和重置交互W不为0的情况
                if (isTrue1 && name1 == agv.DeviceName)
                {
                    if (taskInteractiveW != 0 || resetTaskInteractiveW != 0 || taskInteractive != 0)
                    {
                        agv.Communicator.Write(resetTaskW, 1);
                        agv.Communicator.Write<UInt16>(resetTaskW, 1);
                        Task.Delay(2000).Wait();
                        resetTaskInteractiveW = agv.Communicator.Read<int>(resetTaskW);
                        resetTaskInteractiveW = agv.Communicator.Read<Int16>(resetTaskW);
                        if (resetTaskInteractiveW == 1)
                        {
                            agv.Communicator.Write(resetTaskW, 0);
                            agv.Communicator.Write(taskInteractiveW1, 0);
                            agv.Communicator.Write<UInt16>(resetTaskW, 0);
                            agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                            Task.Delay(2000).Wait();
                        }
                        return;
@@ -220,14 +220,14 @@
                // å¦‚果重置交互R为1,则重置任务交互W
                if (resetTaskInteractiver == 1)
                {
                    agv.Communicator.Write(taskInteractiveW1, 0);
                    agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                    for (int i = 0; i < 5; i++)
                    {
                        Task.Delay(300).Wait(); // ç”¨Task.Delay代替Thread.Sleep,以避免线程阻塞
                        int agvNumber = agv.Communicator.Read<int>(taskInteractiveW1);
                        int agvNumber = agv.Communicator.Read<Int16>(taskInteractiveW1);
                        if (agvNumber != 0)
                        {
                            agv.Communicator.Write(taskInteractiveW1, 0);
                            agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                        }
                        else
                        {
@@ -251,7 +251,8 @@
                        // æ£€æŸ¥ä»»åŠ¡ID是否写入正确
                        string taskId = agv.Communicator.Read<string>(taskID);
                        if (taskId != agvTask.TaskNum.ToString())
                        string numberPart = taskId.Split('-')[1];
                        if (numberPart != agvTask.TaskNum.ToString())
                        {
                            throw new Exception($"给AGV写入任务失败,任务号{agvTask.TaskNum}");
                        }
@@ -260,19 +261,19 @@
                        if (string.IsNullOrEmpty(rel))
                        {
                            // å†™å…¥ä»»åŠ¡ç¡®è®¤ä¿¡å·1
                            agv.Communicator.Write(taskInteractiveW1, 1);
                            agv.Communicator.Write<UInt16>(taskInteractiveW1, 1);
                            Task.Delay(1000).Wait();
                            // è¯»å–AGV的确认信号
                            int readTask1Ok = agv.Communicator.Read<int>(taskInteractiveR);
                            int readTask1Ok = agv.Communicator.Read<Int16>(taskInteractiveR);
                            if (readTask1Ok == 1)
                            {
                                // å†™å…¥WCS的确认信号0
                                agv.Communicator.Write(taskInteractiveW1, 0);
                                agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                                Task.Delay(2000).Wait();
                                // å†æ¬¡è¯»å–AGV的确认信号
                                int readTask0Ok = agv.Communicator.Read<int>(taskInteractiveR);
                                int readTask0Ok = agv.Communicator.Read<Int16>(taskInteractiveR);
                                if (readTask0Ok == 0)
                                {
                                    // æ›´æ–°ä»»åŠ¡çŠ¶æ€å¹¶ä¿å­˜
@@ -292,7 +293,7 @@
                            else if (readTask1Ok == 11)
                            {
                                // å¤„理任务异常情况
                                agv.Communicator.Write(taskInteractiveW1, 0);
                                agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                                Task.Delay(2000).Wait();
                                int readTask0Error = agv.Communicator.Read<int>(taskInteractiveR);
@@ -342,7 +343,7 @@
        public static string TaskWrite(AGV client, Dt_Task agvTask, AGVJobEnum jobEnum)
        {
            List<byte> sendData = new List<byte>();
            string tmp = agvTask.TaskNum.ToString();
            string tmp = "KH-" + agvTask.TaskNum.ToString();
            List<byte> taskID = Encoding.Default.GetBytes(tmp).ToList();//任务ID
            taskID.Insert(0, 30);
            taskID.Insert(1, Convert.ToByte(tmp.Length));
@@ -377,11 +378,11 @@
            Array.Reverse(taskType);
            sendData.AddRange(taskType);
            List<byte> containerType = Encoding.Default.GetBytes(agvTask.PalletCode).ToList();
            List<byte> containerType = Encoding.Default.GetBytes(agvTask.Barcode).ToList();
            containerType.Insert(0, 30);
            containerType.Insert(1, Convert.ToByte(agvTask.PalletCode.Length));
            containerType.Insert(1, Convert.ToByte(agvTask.Barcode.Length));
            for (int i = 0; i < 30 - agvTask.PalletCode.Length; i++)
            for (int i = 0; i < 30 - agvTask.Barcode.Length; i++)
            {
                containerType.Add(0);
            }