From 786c5ca17012ff3a01faf466b751bdbe70629b97 Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期一, 25 八月 2025 15:25:46 +0800
Subject: [PATCH] 1
---
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs | 247 +++++++++++++++++++++++--------------------------
1 files changed, 115 insertions(+), 132 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 ffe6c58..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,7 +1,15 @@
锘縰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;
@@ -13,162 +21,137 @@
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)
{
--
Gitblit v1.9.3