| | |
| | | using WIDESEA_Services.Services; |
| | | using WIDESEA_WCS.WCSClient; |
| | | |
| | | namespace WIDESEA_WCS.SchedulerExecute.AGV |
| | | namespace WIDESEA_WCS.JobsPart.AGV |
| | | { |
| | | public partial class AGVSchedulerExecute |
| | | public partial class AGVServer |
| | | { |
| | | private static int _readUpdateAGVTaskSignalsotask = 0; |
| | | public static void UpdateAgvTask(PLCClient plcClient) |
| | | private static int _readUpdateAGVTaskSignalso = 0; |
| | | public void UpdateAgvTask(PLCClient plcClient) |
| | | { |
| | | if (Interlocked.Exchange(ref _readUpdateAGVTaskSignalsotask, 1) == 0) |
| | | if (Interlocked.Exchange(ref _readUpdateAGVTaskSignalso, 1) == 0) |
| | | { |
| | | try |
| | | { |
| | | if (plcClient == null) |
| | | { |
| | | return; |
| | | } |
| | | VOLContext context = new VOLContext(); |
| | | Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(context); |
| | | Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context); |
| | |
| | | if (1 == taskFbInteractive && taskFbInteractiveW == 0) |
| | | { |
| | | string taskId = plcClient.ReadValue(TaskDBName.taskIDFb.ToString()).ToString();//任务ID |
| | | |
| | | if (taskId.Contains("\b")) { taskId = taskId.Remove(0, 1); } |
| | | int taskState = int.Parse(plcClient.ReadValue(TaskDBName.taskStatusFb.ToString()).ToString());//1起点执行中,2起点已完成,3终点执行中,4终点已完成 |
| | | WriteLog.GetLog().Write($"{plcClient.PLCName}开始:" + taskId + "任务状态:"+ taskState + "{DateTime.Now}", "AGV更新任务状态测试"); |
| | | if (0 == taskState)//无含义 |
| | | return; |
| | | WriteLog.GetLog().Write($"{plcClient.PLCName}任务号" + taskId + "任务状态" + taskState + $" {DateTime.Now}", "AGV更新任务状态"); |
| | |
| | | } |
| | | |
| | | #region 编写对应项目的业务逻辑 |
| | | |
| | | Task task = Task.Run(() => |
| | | { |
| | | if (null == agvTask) |
| | |
| | | //throw new Exception("起点执行失败未找到任务,ID:" + taskId); |
| | | } |
| | | agvTask.agv_taskstate = AGVTaskStateEnum.Executing.ToString(); |
| | | agvTask.agv_realesstime = DateTime.Now; |
| | | int isOk = agvtaskRepository.Update(agvTask, true); |
| | | if (isOk == 0) |
| | | { |
| | |
| | | { |
| | | if (agvTask != null) |
| | | { |
| | | |
| | | Task.Run(() => |
| | | { |
| | | WriteLog.GetLog().Write($"任务号:{agvTask.agv_tasknum},起点地址:{agvTask.agv_fromaddress},终点地址:{agvTask.agv_toaddress} 时间: {DateTime.Now}", "AGV任务反馈2"); |
| | | if (agvTask.agv_taskstate == AGVTaskStateEnum.Complete.ToString()) |
| | | { |
| | |
| | | } |
| | | |
| | | #region 编写对应项目的业务逻辑 |
| | | Task.Run(() => |
| | | { |
| | | if (null == agvTask) |
| | | { |
| | | plcClient.WriteValue(TaskDBName.taskFbInteractiveW.ToString(), 1); |
| | |
| | | } |
| | | else if (3 == taskState)//任务终点执行中 |
| | | { |
| | | |
| | | if (agvTask != null) |
| | | { |
| | | WriteLog.GetLog().Write($"任务号:{agvTask.agv_tasknum},起点地址:{agvTask.agv_fromaddress},终点地址:{agvTask.agv_toaddress} 时间: {DateTime.Now}", "AGV任务反馈3"); |
| | | #region 编写对应项目的业务逻辑 |
| | | Task.Run(() => |
| | | { |
| | | WriteLog.GetLog().Write($"任务号:{agvTask.agv_tasknum},起点地址:{agvTask.agv_fromaddress},终点地址:{agvTask.agv_toaddress} 时间: {DateTime.Now}", "AGV任务反馈3"); |
| | | |
| | | if (agvTask.agv_taskstate == AGVTaskStateEnum.Executing1.ToString()) |
| | | { |
| | | plcClient.WriteValue(TaskDBName.taskFbInteractiveW.ToString(), 1); |
| | |
| | | } |
| | | } |
| | | }); |
| | | |
| | | |
| | | #endregion |
| | | |
| | | plcClient.WriteValue(TaskDBName.taskFbInteractiveW.ToString(), 1); |
| | |
| | | { |
| | | WriteLog.GetLog().Write($"任务号:{agvTask.agv_tasknum},起点地址:{agvTask.agv_fromaddress},终点地址:{agvTask.agv_toaddress} 时间: {DateTime.Now}", "AGV任务反馈4"); |
| | | #region 编写对应项目的业务逻辑 |
| | | |
| | | Task.Run(() => |
| | | { |
| | | |
| | | agvTask.agv_taskstate = AGVTaskStateEnum.Complete1.ToString(); |
| | | int isOk = agvtaskRepository.Update(agvTask, true); |
| | | if (isOk == 0) |
| | |
| | | WriteLog.GetLog().Write("WCS写入AGV任务号" + taskId + DateTime.Now + "任务异常状态确认1", "AGV更新任务状态"); |
| | | agvtaskRepository.Delete(agvTask, true); |
| | | } |
| | | WriteLog.GetLog().Write($"{plcClient.PLCName}结束:" + taskId + "{DateTime.Now}", "AGV更新任务状态测试"); |
| | | } |
| | | if (taskFbInteractive == 0 && taskFbInteractiveW == 1) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | } |
| | | finally |
| | | { |
| | | Interlocked.Exchange(ref _readUpdateAGVTaskSignalsotask, 0); |
| | | Interlocked.Exchange(ref _readUpdateAGVTaskSignalso, 0); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |