using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
|
using Quartz;
|
using SixLabors.ImageSharp;
|
using SqlSugar.Extensions;
|
using System;
|
using System.Collections.Generic;
|
using System.Drawing;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.StationEnum;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Communicator;
|
using WIDESEAWCS_DTO.PDA;
|
using WIDESEAWCS_IBasicInfoRepository;
|
using WIDESEAWCS_IBasicInfoService;
|
using WIDESEAWCS_ISystemServices;
|
using WIDESEAWCS_ITaskInfoRepository;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_Tasks.TaskAcquisition;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
/// <summary>
|
/// 任务获取 后底板1 的任务
|
/// </summary>
|
///
|
[DisallowConcurrentExecution]
|
public class TaskAcquisition_Back1_Job : JobBase, IJob
|
{
|
private readonly ITaskRepository _taskRepository;
|
private readonly ITaskService _taskService;
|
private readonly ISys_ConfigService _sys_ConfigService;
|
private readonly IDt_StationManagerRepository _stationManagerRepository;
|
private readonly IDt_MaterialInfoRepository _IDt_MaterialInfoRepository;
|
public TaskAcquisition_Back1_Job(ITaskRepository taskRepository, ITaskService taskService, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository, IDt_MaterialInfoRepository IDt_MaterialInfoRepository)
|
{
|
_taskRepository = taskRepository;
|
_taskService = taskService;
|
_sys_ConfigService = configService;
|
_stationManagerRepository = stationManagerRepository;
|
_IDt_MaterialInfoRepository = IDt_MaterialInfoRepository;
|
}
|
public Task Execute(IJobExecutionContext context)
|
{
|
bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
|
if (flag && value != null)
|
{
|
OtherDevice device = (OtherDevice)value;
|
if (!device.IsConnected)
|
{
|
return Task.CompletedTask;
|
}
|
//string ip = "127.0.0.1";
|
//int port = 502;
|
//string Region = "后底板1";
|
//ModbusTcp modbusTcp = new ModbusTcp(ip, port, Region);
|
//modbusTcp.Connect();
|
Baseconversion baseconversion = new Baseconversion();
|
Dictionary<int, int> Signal = new Dictionary<int, int>() { [10] = 2, [30] = 3, [50] = 4, [70] = 5 };
|
Dictionary<int, int> FeedingPoint = new Dictionary<int, int>() { [10] = 2001, [30] = 2002, [50] = 2003, [70] = 2004 }; // 叫料的点位 终点位置
|
|
try
|
{
|
for (int i = 10; i < 90; i += 20)
|
{
|
byte[] SignalNumber = device.Communicator.Read(Signal[i].ToString(), 1); // 信号 1:叫料 2:拉出空框
|
|
Dt_StationManager dt_StationManager = _stationManagerRepository.QueryFirst(
|
x => x.StationLocation == FeedingPoint[i].ToString()
|
&& x.StationStatus != ((int)StationEnum.Disable).ToString());
|
if (dt_StationManager == null)
|
{
|
// 这里应该要加日志 记录找不到站台的信息
|
Console.WriteLine($"{DateTime.Now} 当前站台【{FeedingPoint[i].ToString()} 未配置或已禁用】");
|
continue;
|
}
|
|
if (SignalNumber[1] == 1)
|
{
|
byte[] PartNumber = device.Communicator.Read(i.ToString(), 20); // 读取零件号
|
|
string Ku1_Value = baseconversion.TenthTurn16(PartNumber);
|
if (Ku1_Value != "" && Ku1_Value != null)
|
{
|
// 等功能测试完,这里要做日志记录
|
|
Console.WriteLine(Ku1_Value);
|
// 找对应的零件号是否已经绑定(组盘) // 这里要改要加区域 加是否已生成任务 还要根据时间排序 先绑定的先发过去
|
Dt_MaterialInfo? dt_MaterialInfo = _IDt_MaterialInfoRepository.QueryData(x => x.MaterialName == Ku1_Value
|
&& x.Region == ((int)StationEnum.Rearbaseplate1).ToString()
|
&& (x.EndPosition == null || x.EndPosition == "")).OrderBy(x => x.CreateDate).FirstOrDefault();
|
|
if (dt_MaterialInfo != null)
|
{
|
Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.PalletCode == dt_MaterialInfo.ContainerCode);
|
if (dt_Task != null) continue; //证明有当前任务
|
|
dt_Task = new Dt_Task();
|
dt_Task.PalletCode = dt_MaterialInfo.ContainerCode;
|
dt_Task.SourceAddress = dt_MaterialInfo.Position; // 当前位置
|
dt_Task.TargetAddress = FeedingPoint[i].ToString(); // 终点位置
|
dt_Task.Grade = 2;
|
dt_Task.TaskState = TaskAGVCarryStatusEnum.AGV_CarryNew.ObjToInt();
|
dt_Task.TaskType = TaskAGVCarryTypeEnum.Carry.ObjToInt();
|
dt_Task.Roadway = (Signal[i] - 1).ToString(); // 库1 叫料那就是1巷道
|
dt_Task.CurrentAddress = dt_MaterialInfo.Position; // 当前位置
|
dt_Task.NextAddress = FeedingPoint[i].ToString(); // 终点位置
|
|
dt_MaterialInfo.EndPosition = FeedingPoint[i].ToString(); // 终点位置
|
|
dt_StationManager.StationStatus = ((int)StationEnum.Thereisatask).ToString();
|
dt_StationManager.StationRemark = dt_MaterialInfo.ContainerCode;
|
_stationManagerRepository.UpdateData(dt_StationManager);
|
|
|
_taskRepository.AddData(dt_Task);
|
_IDt_MaterialInfoRepository.UpdateData(dt_MaterialInfo);
|
}
|
|
// 如果没绑定则不生成任务 如果查找到对应的零件号绑定了 则生成一条任务数据
|
}
|
}
|
|
if (SignalNumber[1] == 2) // 表示拉出空框
|
{
|
Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == FeedingPoint[i].ToString() && x.TaskType == (int)TaskAGVCarryTypeEnum.CarryEmpty);
|
if (dt_Task != null) continue;
|
|
Dt_StationManager RecyclingpointStation = _stationManagerRepository.QueryFirst(x =>
|
x.StationStatus == ((int)StationEnum.Enable).ToString()
|
&& x.StationArea == ((int)StationEnum.Rearbaseplate1).ToString()
|
&& x.Remark == "回收点");
|
|
if (RecyclingpointStation == null)
|
{
|
// 记录错误日志
|
continue;
|
}
|
dt_Task = new Dt_Task();
|
dt_Task.PalletCode = dt_StationManager.StationRemark;
|
dt_Task.SourceAddress = FeedingPoint[i].ToString();
|
dt_Task.TargetAddress = RecyclingpointStation.StationLocation;
|
dt_Task.Grade = 2;
|
dt_Task.TaskState = TaskAGVCarryStatusEnum.AGV_CarryNew.ObjToInt();
|
dt_Task.TaskType = TaskAGVCarryTypeEnum.CarryEmpty.ObjToInt();
|
dt_Task.Roadway = (Signal[i] - 1).ToString(); // 库1 叫料那就是1巷道
|
dt_Task.CurrentAddress = FeedingPoint[i].ToString(); // 当前位置
|
dt_Task.NextAddress = RecyclingpointStation.StationLocation;// 终点位置
|
|
RecyclingpointStation.StationStatus = ((int)StationEnum.Thereisatask).ToString();
|
|
_stationManagerRepository.UpdateData(RecyclingpointStation);
|
_taskRepository.AddData(dt_Task);
|
}
|
|
}
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
}
|
|
// 16进制转成10进制
|
// 2. 16进制 → 转回十进制(你要的功能)
|
//ulong decimalResult = Convert.ToUInt64("123", 16);
|
//Console.WriteLine("16进制转回十进制:" + decimalResult);
|
|
//// 写入
|
//bool flag2 = modbusTcp.Write("30", decimalResult.ToString());
|
|
//modbusTcp.Disconnect();
|
//Console.WriteLine("进入了TaskAcquisition_Back1_Job");
|
return Task.CompletedTask;
|
}
|
}
|
}
|