| | |
| | | using System.Diagnostics; |
| | | using System.Text; |
| | | using Microsoft.Data.SqlClient; |
| | | using WIDESEAWCS_Common.AGVEnum; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | |
| | | private static bool isTrue1 = false; |
| | | private static string name1 = ""; |
| | | |
| | | public static void SendAGVTask1(AGV agv, ITaskRepository _taskRepository) |
| | | public static void SendAGVTask1(ITaskRepository _taskRepository) |
| | | { |
| | | //TODO: Implement sending task to AGV |
| | | try |
| | | { |
| | | if (agv == 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; |
| | | // è¿æ¥å符串 - æ ¹æ®ä½ çæå¡å¨ä¿¡æ¯ä¿®æ¹ |
| | | 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)"; |
| | | |
| | | 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) |
| | | try |
| | | { |
| | | if (TaskInteractiveW != 0 || resetTaskInteractiveW != 0 || TaskInteractive != 0) |
| | | using (SqlConnection connection = new SqlConnection(connectionString)) |
| | | { |
| | | agv.Communicator.Write(resetTaskW, 1); |
| | | Task.Delay(2000).Wait(); |
| | | resetTaskInteractiveW = agv.Communicator.Read<int>(resetTaskW); |
| | | if (resetTaskInteractiveW == 1) |
| | | connection.Open(); |
| | | |
| | | using (SqlCommand command = new SqlCommand(insertSql, connection)) |
| | | { |
| | | agv.Communicator.Write(resetTaskW, 0); |
| | | agv.Communicator.Write(taskInteractiveW, 0); |
| | | Task.Delay(2000).Wait(); |
| | | } |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | isTrue1 = false; |
| | | name1 = ""; |
| | | } |
| | | } |
| | | if (resetTaskInteractiver == 1) |
| | | { |
| | | agv.Communicator.Write(taskInteractiveW, 0); |
| | | for (int i = 0; i < 5; i++) |
| | | { |
| | | Thread.Sleep(300); |
| | | var agvnumber = Convert.ToInt32(agv.Communicator.Read<int>(taskInteractiveW)); |
| | | if (agvnumber != 0) |
| | | { |
| | | agv.Communicator.Write(taskInteractiveW, 0); |
| | | } |
| | | else |
| | | { |
| | | break; |
| | | // æ·»å 忰鲿¢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} è¡æ°æ®"); |
| | | } |
| | | } |
| | | } |
| | | if (0 == TaskInteractive && TaskInteractiveW == 0) |
| | | catch (Exception ex) |
| | | { |
| | | 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) |
| | | { |
| | | //åå
¥ä»»å¡ä¿¡æ¯ |
| | | 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("ç»AGVåå
¥ä»»å¡å¤±è´¥," + agvTask.agv_tasknum + DateTime.Now, "SendAGVTask"); |
| | | throw new Exception(string.Format("ç»AGVåå
¥ä»»å¡å¤±è´¥,ä»»å¡å·{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("ç»AGVåå
¥ä»»å¡ç¡®è®¤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("ç»AGVåå
¥ä»»å¡å¼å¸¸ç¡®è®¤0失败,ä»»å¡å·{0}", agvTask.TaskNum)); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | isTrue1 = true; |
| | | name1 = agv.DeviceName; |
| | | throw new Exception(string.Format("ç»AGVåå
¥ä»»å¡ç¡®è®¤1失败,ä»»å¡å·{0}", agvTask.TaskNum)); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | isTrue1 = true; |
| | | name1 = agv.DeviceName; |
| | | throw new Exception(string.Format("ç»AGVåå
¥ä»»å¡å¤±è´¥,ä»»å¡å·{0}" + rel, agvTask.TaskNum)); |
| | | } |
| | | } |
| | | Console.WriteLine($"åçé误: {ex.Message}"); |
| | | } |
| | | } |
| | | 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) |