111 lines
3.9 KiB
C#
111 lines
3.9 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 执行任务调度
|
||
/// </summary>
|
||
[DisallowConcurrentExecution]
|
||
public class Excute
|
||
{
|
||
static int count1;
|
||
|
||
static int count2;
|
||
|
||
/// <summary>
|
||
/// 执行任务
|
||
/// </summary>
|
||
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}环穿下发失败");
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|