using HslCommunication;
|
using Quartz;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_ITaskInfoRepository;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_Tasks.ConveyorLineJob;
|
using WIDESEAWCS_Tasks.ElevatorJob;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
public class CommonAGVJob : JobBase, IJob
|
{
|
private readonly ITaskRepository _taskRepository;
|
private readonly ITaskService _taskService;
|
public CommonAGVJob(ITaskRepository taskRepository,ITaskService taskService)
|
{
|
_taskRepository = taskRepository;
|
_taskService = taskService;
|
}
|
|
public Task Execute(IJobExecutionContext context)
|
{
|
#region AGV跨楼层任务
|
var AcrossFloorTask = _taskRepository.QueryFirst(x => x.TaskState == (int)TaskAcrossFloorStatusEnum.CarryNew);
|
if (AcrossFloorTask != null)
|
{
|
var task = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskAcrossFloorStatusEnum.CarryNew && x.TaskState < (int)TaskAcrossFloorStatusEnum.SecondCarryFinish);
|
if(task == null)
|
{
|
CommonElevator? elevator = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ1") as CommonElevator;
|
if (elevator != null)
|
{
|
if (elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.Model) == 1)
|
{
|
if (AcrossFloorTask.Floor == "1F")
|
{
|
elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(1));
|
elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(1));
|
elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(2));
|
Thread.Sleep(1000);
|
elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
|
|
_taskService.SendAgvTask("AAA", AcrossFloorTask.TaskNum);
|
AcrossFloorTask.TaskState = (int)TaskAcrossFloorStatusEnum.FirstCarry;
|
_taskRepository.UpdateData(AcrossFloorTask);
|
}
|
else
|
{
|
elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(1));
|
elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(2));
|
elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(1));
|
Thread.Sleep(1000);
|
elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
|
|
_taskService.SendAgvTask("DDD", AcrossFloorTask.TaskNum);
|
AcrossFloorTask.TaskState = (int)TaskAcrossFloorStatusEnum.FirstCarry;
|
_taskRepository.UpdateData(AcrossFloorTask);
|
}
|
}
|
}
|
}
|
}
|
#endregion
|
|
#region AGV同层搬运任务
|
var Carry = _taskRepository.QueryFirst(x => x.TaskState == (int)TaskAGVCarryStatusEnum.CarryNew);
|
|
if (Carry != null)
|
{
|
if (Carry.Floor == "1F")
|
{
|
_taskService.SendAgvTask("forkAutoTemplate1", Carry.TaskNum);
|
Carry.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryExecuting;
|
_taskRepository.UpdateData(Carry);
|
}
|
else
|
{
|
_taskService.SendAgvTask("cattleCarry1", Carry.TaskNum);
|
Carry.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryExecuting;
|
_taskRepository.UpdateData(Carry);
|
}
|
}
|
#endregion
|
|
#region 1楼AGV入库任务
|
var InTask = _taskRepository.QueryFirst(x => x.TaskState == (int)TaskInStatusEnum.InNew);
|
if (InTask != null)
|
{
|
var OutTask = _taskRepository.QueryFirst(x => x.TaskState >= (int)TaskOutStatusEnum.OutNew && x.TaskState <(int)TaskOutStatusEnum.AGV_OutExecuting);
|
var Task = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskInStatusEnum.InNew && x.TaskState < (int)TaskInStatusEnum.SC_InExecuting);
|
if (OutTask == null && Task == null)
|
{
|
CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1001") as CommonConveyorLine;
|
if (conveyorLine != null)
|
{
|
short InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, "LK001");
|
var structs = BitConverter.GetBytes(InteractiveSignal).Reverse().ToArray().ToBoolArray();
|
if (structs[0])
|
{
|
conveyorLine.Communicator.WriteNoRead("DB100.0", 9999);
|
|
_taskService.SendAgvTask("LIFANG", InTask.TaskNum);
|
|
_taskService.UpdateTaskStatusToNext(InTask.TaskNum);
|
}
|
}
|
}
|
}
|
|
#endregion
|
|
return Task.CompletedTask;
|
}
|
}
|
}
|