From 6cc35000a6e138cfad96e7b02f8aeddcdb4ba6bf Mon Sep 17 00:00:00 2001 From: wankeda <Administrator@DESKTOP-HAU3ST3> Date: 星期二, 24 六月 2025 09:57:25 +0800 Subject: [PATCH] 代码提交 --- 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs | 292 +++++++++++++++++++++++++++------------------------------ 1 files changed, 138 insertions(+), 154 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs" index 4ce458e..44c3ffc 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs" @@ -1,174 +1,157 @@ 锘縰sing System.Diagnostics; using System.Text; +using Microsoft.Data.SqlClient; +using Newtonsoft.Json; +using WIDESEA_Core.Enums; using WIDESEAWCS_Common.AGVEnum; using WIDESEAWCS_Common.TaskEnum; +using WIDESEAWCS_Core; +using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_Core.Tool; +using WIDESEAWCS_DTO.TaskInfo; +using WIDESEAWCS_ISystemRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; -namespace WIDESEAWCS_Tasks.AGVJob +namespace WIDESEAWCS_Tasks { public class SendTaskAGV { private static int _readSendAGVTaskSignalso = 0; private static bool isTrue1 = false; private static string name1 = ""; - - public static void SendAGVTask1(AGV agv, ITaskRepository _taskRepository) + public static string url = AppSettings.Configuration["AGVTaskGeneration"]; + public static void SendAGVTask1(ITaskRepository _taskRepository, IDt_StationinfoRepository _stationinfoRepository) { - //TODO: Implement sending task to AGV + WebResponseContent content = new WebResponseContent(); try { - if (agv == null) + Dt_Task task = _taskRepository.QueryData(x => x.TaskState == (int)TaskInStatusEnum.InNew).OrderBy(r => r.CreateDate).FirstOrDefault(); //.ThenByDescending(r => r.Grade) + if (task != null) { - return; - } - - var taskInteractiveR = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.taskInteractiveR.ToString()).FirstOrDefault().DeviceProAddress; - var taskInteractiveW = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.taskInteractiveW.ToString()).FirstOrDefault().DeviceProAddress; - var resetTaskW = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.resetTaskInteractiveW.ToString()).FirstOrDefault().DeviceProAddress; - var resetTaskInteractiveR = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.resetTaskInteractiveR.ToString()).FirstOrDefault().DeviceProAddress; - var taskID = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.taskID.ToString()).FirstOrDefault().DeviceProAddress; - - int TaskInteractive = agv.Communicator.Read<int>(taskInteractiveR);//1鏀跺埌 - int TaskInteractiveW = agv.Communicator.Read<int>(taskInteractiveW);//0鍒濆/1涓嬪彂/2鍙栨秷/3鏇存敼 - int resetTaskInteractiveW = agv.Communicator.Read<int>(resetTaskW); - int resetTaskInteractiver = agv.Communicator.Read<int>(resetTaskInteractiveR); - if (isTrue1 && name1 == agv.DeviceName) - { - if (TaskInteractiveW != 0 || resetTaskInteractiveW != 0 || TaskInteractive != 0) + TaskGenerationDto taskGenerationDto = new TaskGenerationDto(); { - agv.Communicator.Write(resetTaskW, 1); - Task.Delay(2000).Wait(); - resetTaskInteractiveW = agv.Communicator.Read<int>(resetTaskW); - if (resetTaskInteractiveW == 1) - { - agv.Communicator.Write(resetTaskW, 0); - agv.Communicator.Write(taskInteractiveW, 0); - Task.Delay(2000).Wait(); - } - return; + taskGenerationDto.taskid = task.TaskNum.ToString(); + taskGenerationDto.taskType = task.TaskType.ToString(); + taskGenerationDto.floor = task.Floor.ToString(); + taskGenerationDto.param1 = task.SourceAddress.ToString(); + taskGenerationDto.param2 = task.TargetAddress.ToString(); + taskGenerationDto.param3 = ""; + taskGenerationDto.param4 = ""; + taskGenerationDto.param5 = ""; + taskGenerationDto.param6 = ""; + taskGenerationDto.param7 = ""; + taskGenerationDto.param8 = ""; + taskGenerationDto.param9 = ""; + } + var ResultData = HttpHelper.Post(url, taskGenerationDto.ToJson(), headers: new Dictionary<string, string>()); + var res = JsonConvert.DeserializeObject<WebResponseContent>(ResultData); + if (res.code == 200) + { + WriteLog.Info("浠诲姟涓嬪彂鎴愬姛").Write($"浠诲姟鍙穥task.TaskNum}", "浠诲姟涓嬪彂鎴愬姛"); + int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); + task.TaskState = nextStatus; + task.Dispatchertime = DateTime.Now; + _taskRepository.UpdateData(task); } else { - isTrue1 = false; - name1 = ""; + WriteLog.Info("浠诲姟涓嬪彂澶辫触").Write($"浠诲姟鍙穥task.TaskNum}锛屼俊鎭瘂res.Message}", "浠诲姟涓嬪彂澶辫触"); + //_unitOfWorkManage.RollbackTran(); + content = WebResponseContent.Instance.Error($"{res.Message}"); } } - if (resetTaskInteractiver == 1) + Thread.Sleep(100); + Dt_Task dt_Task = _taskRepository.QueryData(x => x.TaskState == (int)TaskInStatusEnum.AGV_Queue).OrderBy(r => r.CreateDate).FirstOrDefault(); + if (dt_Task != null) { - agv.Communicator.Write(taskInteractiveW, 0); - for (int i = 0; i < 5; i++) + var station = _stationinfoRepository.QueryFirst(x => x.StationCode == dt_Task.SourceAddress); + // 鏌ユ壘涓や釜鍙敤鐨勭┖缂撳瓨鏋� + var freeStations = _stationinfoRepository + .QueryData(x => x.Location_state == LocationStatusEnum.Free.ObjToInt() && x.Enable && x.Remark == station.Remark && x.Area == station.Area)// && x.Stationtype == station.Stationtype + .Take(2) // 鍙彇鍓嶄袱涓� + .ToList(); + + int floor = 0; + if (station.Area.Contains("A鍖�")) { - Thread.Sleep(300); - var agvnumber = Convert.ToInt32(agv.Communicator.Read<int>(taskInteractiveW)); - if (agvnumber != 0) - { - agv.Communicator.Write(taskInteractiveW, 0); - } - else - { - break; - } + floor = 32; } - } - if (0 == TaskInteractive && TaskInteractiveW == 0) - { - Dt_Task agvTask = _taskRepository.QueryData(r => r.TaskState == (int)TaskInStatusEnum.InNew && r.Roadway == agv.DeviceName && r.TaskType == (int)TaskOutboundTypeEnum.Outbound).OrderBy(r => r.CreateDate).OrderByDescending(r => r.Grade).FirstOrDefault(); - if (null != agvTask) + else { - //鍐欏叆浠诲姟淇℃伅 - string rel = TaskWrite(agv, agvTask, AGVJobEnum.newTaskEnum); - Thread.Sleep(1000); - string taskId = agv.Communicator.Read<string>(taskID).ToString(); - if (taskId != agvTask.TaskNum.ToString()) - { - isTrue1 = true; - name1 = agv.DeviceName; - //WriteLog.Info("SendAGVTask").Write("缁橝GV鍐欏叆浠诲姟澶辫触," + agvTask.agv_tasknum + DateTime.Now, "SendAGVTask"); - throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟澶辫触,浠诲姟鍙穥0}", agvTask.TaskNum)); - } - if (string.IsNullOrEmpty(rel)) - { - //鍐欏叆浠诲姟纭1 - agv.Communicator.Write(taskInteractiveW, 1); - Thread.Sleep(1000); - //璇诲彇AGV淇″彿 - int ReadTask_1_OK = agv.Communicator.Read<int>(taskInteractiveR); - if (ReadTask_1_OK == 1) - { - //鍐欏叆WCS纭淇″彿0 - agv.Communicator.Write(taskInteractiveW, 0); - Thread.Sleep(2000); - //璇诲彇AGV淇″彿鏄惁涓�0 - int ReadTask_0_OK = agv.Communicator.Read<int>(taskInteractiveR); - if (ReadTask_0_OK == 0) - { - int nextStatus = agvTask.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); - agvTask.TaskState = nextStatus; - agvTask.Dispatchertime = DateTime.Now; - _taskRepository.UpdateData(agvTask); - // 涓婁紶AGV杩愯鏁版嵁 by xiaoyang - //SendMESTask.SendMesTask(agvTask, 0); - } - else - { - isTrue1 = true; - name1 = agv.DeviceName; - throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟纭0澶辫触,浠诲姟鍙穥0}", agvTask.TaskNum)); - } - } - else if (ReadTask_1_OK == 11) - { - agv.Communicator.Write(taskInteractiveW, 0); - Thread.Sleep(2000); - int ReadTask_0_Error = agv.Communicator.Read<int>(taskInteractiveR); - if (ReadTask_0_Error == 0) - { - int nextStatus = agvTask.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); - agvTask.TaskState = nextStatus; - agvTask.Dispatchertime = DateTime.Now; - _taskRepository.UpdateData(agvTask); - } - else - { - isTrue1 = true; - name1 = agv.DeviceName; - throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟寮傚父纭0澶辫触,浠诲姟鍙穥0}", agvTask.TaskNum)); - } - } - else - { - isTrue1 = true; - name1 = agv.DeviceName; - throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟纭1澶辫触,浠诲姟鍙穥0}", agvTask.TaskNum)); - } - } - else - { - isTrue1 = true; - name1 = agv.DeviceName; - throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟澶辫触,浠诲姟鍙穥0}" + rel, agvTask.TaskNum)); - } + floor = 128; } + if (freeStations.Count < 2) + { + throw new Exception("鏈壘鍒颁袱涓彲鐢ㄧ殑绌虹紦瀛樻灦"); + } + // 妫�鏌ヨ繖涓や釜缂撳瓨鏋舵槸鍚﹁浠诲姟鍗犵敤 + var stationCodes = freeStations.Select(s => s.StationCode).ToList(); + freeStations[0].Location_state = LocationStatusEnum.Lock.ObjToInt(); + _stationinfoRepository.UpdateData(freeStations[0]); + freeStations[1].Location_state = LocationStatusEnum.Lock.ObjToInt(); + _stationinfoRepository.UpdateData(freeStations[1]); + //stationCodes. + var tasks = _taskRepository.QueryData(x => stationCodes.Contains(x.SourceAddress) || stationCodes.Contains(x.TargetAddress)).ToList(); + if (tasks.Any()) + { + throw new Exception("缂撳瓨鏋跺凡鏈変换鍔�"); + } + dt_Task.TargetAddress = string.Join("||", freeStations.Select(s => s.StationCode)); + dt_Task.NextAddress = string.Join("||", freeStations.Select(s => s.StationCode)); + dt_Task.TaskState = (int)TaskInStatusEnum.InNew; + dt_Task.TaskType = floor; + _taskRepository.UpdateData(dt_Task); } } catch (Exception ex) { - StackTrace sta = new StackTrace(ex, true); - StackTrace st = new StackTrace(new StackFrame(true)); - StackFrame sf = sta.GetFrame(0); - //WriteLog.Info("SendAGVTask").Write(ex.Message + "琛屽彿" + sf.GetFileLineNumber(), "SendAGVTask"); + } - finally - { - // WriteLog.Info("SendAGVTask").Write(agv.PLCName+"\t"+DateTime.Now, "SendAGVTask"); - Interlocked.Exchange(ref _readSendAGVTaskSignalso, 0); - } + } public static void SendAGVTask(AGV agv, ITaskRepository _taskRepository) { + + // 杩炴帴瀛楃涓� - 鏍规嵁浣犵殑鏈嶅姟鍣ㄤ俊鎭慨鏀� + string connectionString = "Data Source=.;Initial Catalog=WIDESEAWCS_GanFengLiYeNew;User ID=sa;Password=sa123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; + List<Dt_Task> dt_Tasks = _taskRepository.QueryData(x => x.TaskState == (int)TaskInStatusEnum.InNew); + foreach (Dt_Task task in dt_Tasks) + { + // 瑕佹彃鍏ョ殑SQL璇彞 + string insertSql = "INSERT INTO Dt_Stationinfo (StationCode, Location_state,Area,Enable,LastUpdateTime,Remark) VALUES (@StationCode, @Location_state,@Area,@Enable,@LastUpdateTime,@Remark)"; + + try + { + using (SqlConnection connection = new SqlConnection(connectionString)) + { + connection.Open(); + + using (SqlCommand command = new SqlCommand(insertSql, connection)) + { + // 娣诲姞鍙傛暟闃叉SQL娉ㄥ叆 + command.Parameters.AddWithValue("StationCode", task.TaskNum); + command.Parameters.AddWithValue("Location_state", task.TaskNum); + command.Parameters.AddWithValue("Area", task.Roadway); + command.Parameters.AddWithValue("Enable", task.TaskNum); + command.Parameters.AddWithValue("LastUpdateTime", DateTime.Now); + command.Parameters.AddWithValue("Remark", task.Roadway); + command.Parameters.AddWithValue("Creater", "WCS"); + command.Parameters.AddWithValue("CreateDate", DateTime.Now); + + int rowsAffected = command.ExecuteNonQuery(); + Console.WriteLine($"鎴愬姛鎻掑叆 {rowsAffected} 琛屾暟鎹�"); + } + } + } + catch (Exception ex) + { + Console.WriteLine($"鍙戠敓閿欒: {ex.Message}"); + } + } + // 妫�鏌GV鏄惁涓虹┖ if (agv == null) { @@ -191,24 +174,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鍜岄噸缃氦浜扺涓嶄负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 +203,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(); // 鐢═ask.Delay浠f浛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 +234,8 @@ // 妫�鏌ヤ换鍔D鏄惁鍐欏叆姝g‘ 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($"缁橝GV鍐欏叆浠诲姟澶辫触,浠诲姟鍙穥agvTask.TaskNum}"); } @@ -260,19 +244,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 +276,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 +326,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 +361,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); } -- Gitblit v1.9.3