using System;
|
using System.Linq;
|
using HH.WCS.Mobox3.Template.Controller.Service;
|
using HH.WCS.Mobox3.Template.Entity;
|
using HH.WCS.Mobox3.Template.Entity.Dto;
|
using HH.WCS.Mobox3.Template.Util.EquipmentCommunication;
|
using HH.WCS.Mobox3.Template.Util.Helper;
|
|
namespace HH.WCS.Mobox3.Template.Procss
|
{
|
/// <summary>
|
/// 线体任务
|
/// </summary>
|
public static class ThreadTask
|
{
|
#region 读取各个线体信息
|
|
/// <summary>
|
/// 读取各个线体信息 - 主方法
|
/// </summary>
|
public static void ReadLines()
|
{
|
var conveyorlinesInfoDtos = Settings.ConveyorlinesInfos.Where(p => p.enable == 1).ToList();
|
|
foreach (var conveyorlinesInfoDto in conveyorlinesInfoDtos)
|
{
|
OperationLines(conveyorlinesInfoDto);
|
}
|
}
|
|
/// <summary>
|
/// 操作线体信息
|
/// </summary>
|
/// <param name="conveyorlinesInfoDto"></param>
|
private static void OperationLines(ConveyorlinesInfoDto conveyorlinesInfoDto)
|
{
|
if (conveyorlinesInfoDto.purpose == "入库口")
|
{
|
// 如果是入库口,说明任务提前创建了,不需要额外操作
|
}
|
else if (conveyorlinesInfoDto.purpose == "扫码称重")
|
{
|
// 读取条形码
|
var barCode = S7Helper.ReadPipelinePlcForString(434, conveyorlinesInfoDto, 2001);
|
// 清除空格
|
barCode = barCode.Replace("\0","");
|
// 读取申请任务信号
|
var request = S7Helper.ReadPipelinePlcForInt(452, conveyorlinesInfoDto, 2001, "Int");
|
|
// 有条形码且申请成功
|
if (!string.IsNullOrEmpty(barCode) && request == 1)
|
{
|
// 获取该托盘的任务号(入库任务且状态为0)
|
var task = AdoSqlHelper<Task>.QueryFirst(p =>
|
p.N_TYPE == 1 && p.S_CNTR_CODE == barCode);
|
|
if (task != null)
|
{
|
var lineTask = new LineTaskDto
|
{
|
Task_No = Convert.ToInt32(task.S_CODE.Substring(8)),
|
Pallet_No = task.S_CNTR_CODE,
|
Source_Station = 1001,
|
Destination_Station = 1002,
|
};
|
|
// 满足条件,往输送线写数据
|
if (S7Helper.SendTaskPipelinePlc(conveyorlinesInfoDto, lineTask, conveyorlinesInfoDto.writeAddr,
|
2000))
|
{
|
task.N_B_STATE = 1;
|
task.S_B_STATE = "已推送";
|
task.T_START_TIME = DateTime.Now;
|
|
AdoSqlHelper<Task>.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_START_TIME });
|
}
|
}
|
else
|
{
|
// 任务不存在,调用创建接口
|
// FourWayCarService.CallWMSOperationCreate();
|
}
|
}
|
}
|
else if (conveyorlinesInfoDto.purpose == "提升机前线体")
|
{
|
// 读取条形码
|
var barCode = S7Helper.ReadPipelinePlcForString(434, conveyorlinesInfoDto, 2001);
|
// 清除空格
|
barCode = barCode.Replace("\0","");
|
|
// 获取该托盘的任务号(入库任务且状态为0)
|
var task = AdoSqlHelper<Task>.QueryFirst(p => p.S_CNTR_CODE == barCode);
|
|
if (task != null)
|
{
|
// 入库
|
if (task.N_TYPE == 1)
|
{
|
// 判断当前终点在几层
|
Location location = AdoSqlHelper<Location>.QueryFirst(p => p.S_CODE == task.S_END_LOC);
|
|
var fourWayCarCreateDto = new FourWayCarCreateDto()
|
{
|
order_name = task.S_OP_CODE,
|
src = conveyorlinesInfoDto.location,
|
dst = location.S_AGV_SITE,
|
para1 = task.S_CNTR_CODE
|
};
|
|
// 推送小车任务
|
if (FourWayCarService.CreateOrder(fourWayCarCreateDto))
|
{
|
task.N_B_STATE = 2;
|
task.S_B_STATE = "执行中";
|
AdoSqlHelper<Task>.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE });
|
}
|
}
|
// 出库
|
else if (task.N_TYPE == 2)
|
{
|
var lineTask = new LineTaskDto
|
{
|
Task_No = Convert.ToInt32(task.S_CODE.Substring(8)),
|
Pallet_No = task.S_CNTR_CODE,
|
Source_Station = 1001,
|
Destination_Station = 1002,
|
};
|
|
// 满足条件,往输送线写数据
|
if (S7Helper.SendTaskPipelinePlc(conveyorlinesInfoDto, lineTask, conveyorlinesInfoDto.writeAddr,
|
2000))
|
{
|
task.N_B_STATE = 3;
|
task.S_B_STATE = "完成";
|
task.T_END_TIME = DateTime.Now;
|
|
AdoSqlHelper<Task>.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_START_TIME });
|
|
// 调用wms完成接口
|
}
|
}
|
}
|
}
|
else if (conveyorlinesInfoDto.purpose == "出库口")
|
{
|
// 读取条形码
|
var barCode = S7Helper.ReadPipelinePlcForString(434, conveyorlinesInfoDto, 2001);
|
// 清除空格
|
barCode = barCode.Replace("\0","");
|
|
// 获取该托盘的任务号(入库任务且状态为0)
|
var task = AdoSqlHelper<Task>.QueryFirst(p => p.S_CNTR_CODE == barCode);
|
|
if (task != null)
|
{
|
task.N_B_STATE = 3;
|
task.S_B_STATE = "完成";
|
task.T_END_TIME = DateTime.Now;
|
AdoSqlHelper<Task>.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME });
|
}
|
}
|
}
|
|
#endregion
|
}
|
}
|