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}环穿下发失败");
}
}
}
}