using Newtonsoft.Json; using Quartz; using Serilog; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WPFWCSDemo.Data; using WPFWCSDemo.Models.Devices.CircleRGVStation; using WPFWCSDemo.Models.Tables; using WPFWCSDemo.StateCode; using WPFWCSDemo.ViewModels; namespace WPFWCSDemo.Schedules.CircleRGV { /// /// 执行任务调度 /// [DisallowConcurrentExecution] public class Excute { static int count1; static int count2; /// /// 执行任务 /// public static void ExecuteTask() { //获取所有输送口请求状态 CircleRGVStationState? circleRGVStationState = CircleRGVsViewModel.GetCircleRGVStaionState(); //地面站对象是否为空 if (circleRGVStationState is null) { count1 += 1; if (count1 >= 15) { Log.Warning($"【WCS<下发任务>获取输送口参数失败】地面站参数对象:null({count1})!"); } return; } //下发任务前判断地面站【允许下发】 if (circleRGVStationState.Read_Permission == 0) { count2 += 1; if (count2 >= 15) { Log.Warning($"【WCS<下发任务>失败】地面站【禁止下发】({count2})!"); Log.Warning($"【WCS<下发任务>失败】地面站参数:({JsonConvert.SerializeObject(circleRGVStationState)})!"); //using SiemensS7Net siemens = new SiemensS7Net(SiemensPLCS.S1500, "192.168.6.100"); //siemens.ConnectServer(); //Log.Warning($"【WCS<下发任务>失败】地面站创建新对象测试读写是否成功:({siemens.ReadInt16("DB611.0").IsSuccess})!"); //Log.Warning($"【WCS<下发任务>失败】地面站创建新对象测试读写是否成功:({siemens.ReadInt16("DB611.0").Message})!"); //Log.Warning($"【WCS<下发任务>失败】地面站创建新对象测试读写值,允许下发:({siemens.ReadInt16("DB611.0").Content},AB供栈请求:{siemens.ReadInt16("DB2100.3.1").Content})!"); } return; } count1 = 0; count2 = 0; using var context = new AppDbContext(); TaskRT? taskRT = context.Tasks .OrderBy(t => t.CreateTime) .FirstOrDefault(t => t.TaskState == TaskStateCode.Task_Ready && t.ScheduleState == ScheduleStateCode.Trans_CircleRGV_Ready); if (taskRT == null) return; CircleRGVStationCommand? circleRGVStationCommand = new CircleRGVStationCommand() { Write_DeviceNumber = 0, Write_TaskType = int.Parse(taskRT.TaskType.ToString()[..1]), Write_TaskNumber = int.Parse(taskRT.TaskId), Write_SourceLocation = int.Parse(taskRT.SourceLocation!), Write_TargetLocation = int.Parse(taskRT.TargetLocation!), Write_SendFinish = 0, }; //circleRGVStationCommand.Write_Checksum = Checksum.GetChecksum(circleRGVStationCommand); bool b = CircleRGVsViewModel.SendRGVStationCommand(circleRGVStationCommand); if (b) { taskRT.TaskState = TaskStateCode.Task_Running; taskRT.ScheduleTime = DateTime.Now; context.SaveChanges(); //Log.Information($"【WCS更新任务状态】任务号:{taskRT.TaskId}环穿下发完成,等待设备执行"); } else { //Log.Warning($"【WCS更新任务状态】任务号:{taskRT.TaskId}环穿下发失败"); } } } }