master
LAPTOP-NLSJV9RB\91647 2 years ago
parent 2049412679
commit fbe597f9fa

@ -11,6 +11,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
{
@ -31,6 +32,7 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread;
int FloorNo { get; set; }
string EquipNo = "";
int agvID = 10;
public FiveFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{
this._host = host;
@ -64,18 +66,19 @@ namespace Khd.Core.Wcs.Wcs
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<int?> taskType = new() { 1,2,3, 7, 8 };
while (true)
{
try
{
var taskList = GetTask(FloorNo, EquipNo);
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == agvID && taskType.Contains(t.taskType) ).ToList() ;
if (taskList.Count == 0)
{
LogManager.Info(FloorNo + "楼AGV无任务");
}
foreach (var item in taskList)
{
SendTask(item);
SendAndUpdateTask(item);
}
}
catch (Exception ex)
@ -114,29 +117,49 @@ namespace Khd.Core.Wcs.Wcs
}
return wcsTask;
}
/// <summary>
/// 下发任务
/// </summary>
/// <param name="task"></param>
public void SendTask(WcsTask task)
public void SendAndUpdateTask(WcsTask task)
{
//获取
if (task == null) return;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
//获取
if (task == null)
{
return;
}
//首先判断是否已下发指令
var cmd = StaticData.WcsCmd.Where(t => t.taskId == task.objid).FirstOrDefault();
//指令表存在说明已下发
if (cmd != null) return;
//获取下发agv指令
WcsToWms wcsToWms = new WcsToWms();
//首先判断是否已下发指令
var cmd = dbContext.WcsCmd.Where(t => t.taskId == task.objid).FirstOrDefault();
var locList = dbContext.WmsBaseLocation.Where(t => t.activeFlag == "1").ToList();
if (locList.Count == 0) return;
//指令表存在说明已下发
if (cmd == null)
{ //获取下发agv指令
string ip = ""; int port = 0; string url = "";
RequestAGVTaskDto agvtask = new RequestAGVTaskDto();
agvtask.reqCode = task.serialNo.ToString();
var json = JsonConvert.SerializeObject(agvtask);
HttpHelper.SendPostMessage(ip, port, url, json);
agvtask.reqCode = task.objid.ToString();
//var json = JsonConvert.SerializeObject(agvtask);
//HttpHelper.SendPostMessage(ip, port, url, json);
agvtask.positionCodePath = new List<Position>();
Position p = new Position();
WmsBaseLocation putPos = new WmsBaseLocation(); //放料点
WmsBaseLocation setPos = new WmsBaseLocation(); //取料点
if (task.taskType == 5) //入库
{
setPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault();
}
else
{
setPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault();
}
putPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault();
p.podCode = setPos?.agvPositionCode;
p.podTyp = "";
agvtask.positionCodePath.Add(p);
p.podCode = putPos?.agvPositionCode;
p.podTyp = "";
//取料点
agvtask.positionCodePath.Add(p);
agvtask.taskTyp = "";
//给agv创建任务
wcsToWms.genAgvSchedulingTask(agvtask);
//未下发给agv下发指令
WcsCmd taskCmd = new WcsCmd()
{
@ -145,11 +168,22 @@ namespace Khd.Core.Wcs.Wcs
serialNo = task.serialNo,
equipmentNo = task.equipmentNo,
cmdStatus = 1,
createBy = FloorNo+"楼AGV",
createBy = FloorNo + "楼AGV",
createTime = DateTime.Now,
};
dbContext.Add(taskCmd);
dbContext.SaveChanges();
//更新任务表
dbContext.WcsTask.Where(t => t.objid == task.objid).Update(t => new WcsTask()
{
currPointId = task.currPointId,
currPointNo = task.currPointNo,
nextPointId = task.nextPointId,
nextPointNo = task.nextPointNo,
updateTime = DateTime.Now,
updateBy = "agv出库",
});
}
}
}
}

@ -31,6 +31,7 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread;
int FloorNo { get; set; }
string EquipNo = "";
int CTUID = 11;
public FiveFloorCTU(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{
this._host = host;
@ -68,14 +69,15 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
var taskList = GetTask(FloorNo, EquipNo);
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == CTUID &&( t.taskType==7 || t.taskType == 8)).GroupBy(t=>t.orderId).ToList();
if (taskList.Count == 0)
{
LogManager.Info(FloorNo + "楼CTU无任务");
}
foreach (var item in taskList)
{
SendTask(item.FirstOrDefault().orderId);
}
}
catch (Exception ex)
@ -89,67 +91,44 @@ namespace Khd.Core.Wcs.Wcs
}
}
public List<WcsTask> GetTask(int floorNo, string equipNo)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<WcsTask> wcsTask = new List<WcsTask>();
var wareHouseList = StaticData.WmsBaseWarehouse.ToList();
var equip = StaticData.BaseEquip.Where(t=>t.floorNo==floorNo && t.equipType==4).FirstOrDefault();
//入库类型
List<int> taskInType = new List<int> { 1, 3, 5, 7 };
List<int> taskOutType = new List<int> { 2, 4, 6, 8 };
try
{
//获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv
var taskList = StaticData.WcsTask.Where(t => t.nextPointId == equip.objid).ToList();
if (taskList.Count() == 0)
{ return null; }
wcsTask = taskList;
}
catch (Exception ex)
{
LogManager.Info(floorNo + "楼CTU异常" + ex.Message);
throw;
}
return wcsTask;
}
/// <summary>
/// 下发任务
/// </summary>
/// <param name="task"></param>
public void SendTask(WcsTask task)
public void SendTask(long? orderId)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var taskList = dbContext.WcsTask.Where(t => t.orderId == orderId).ToList();
//获取
if (task == null)
{
if (taskList.Count == 0)
return;
}
//首先判断是否已下发指令
var cmd = StaticData.WcsCmd.Where(t => t.taskId == task.objid).FirstOrDefault();
//指令表存在说明已下发
if (cmd != null) return;
//获取下发agv指令
string ip = ""; int port = 0; string url = "";
RequestAGVTaskDto agvtask = new RequestAGVTaskDto();
agvtask.reqCode = task.serialNo.ToString();
var json = JsonConvert.SerializeObject(agvtask);
HttpHelper.SendPostMessage(ip, port, url, json);
//首先判断是否已下发指令
var cmd = dbContext.WcsCmd.Where(t => taskList.Select(t => t.objid).ToList().Contains(t.taskId.GetValueOrDefault())).FirstOrDefault();
//指令表存在说明已下发
if (cmd != null) return;
//获取下发agv指令
string ip = ""; int port = 0; string url = "";
RequestAGVTaskDto agvtask = new RequestAGVTaskDto();
agvtask.reqCode = orderId.ToString();
var json = JsonConvert.SerializeObject(agvtask);
HttpHelper.SendPostMessage(ip, port, url, json);
foreach (var item in taskList)
{
//未下发给agv下发指令
WcsCmd taskCmd = new WcsCmd()
{
taskId = task.objid,
cmdType = task.taskType,
serialNo = task.serialNo,
equipmentNo = task.equipmentNo,
taskId = item.objid,
cmdType = item.taskType,
serialNo = item.serialNo,
equipmentNo = item.equipmentNo,
cmdStatus = 1,
createBy = FloorNo+"楼AGV",
createBy = FloorNo + "楼CTU",
createTime = DateTime.Now,
};
dbContext.Add(taskCmd);
dbContext.SaveChanges();
}
}
}
}

@ -29,6 +29,7 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread;
int FloorNo { get; set; }
string EquipNo = "";
int CTUID = 11;
public FiveFloorLine(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{
this._host = host;
@ -75,71 +76,40 @@ namespace Khd.Core.Wcs.Wcs
var isarrive = this._plc.Read(IsArrive.plcpointAddress);
//获取条码信息
var palletNo = Convert.ToString(rfid);
var wcsTaskList = GetTask( FloorNo, EquipNo);
foreach (var item in wcsTaskList)
{
if (item.taskStatus == 3)
{
if (item.taskType == 7)
{
//更新任务
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask()
{
currPointId = 7,
currPointNo = "F06",
updateTime = DateTime.Now,
updateBy = "五楼回转输送线",
});
}
else
{
var palletInfo = StaticData.MesBasePalletInfo.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault();
//自动获取id
Jc.SnowId.JcSnowId id = new Jc.SnowId.JcSnowId(1, 1);
var objid = id.NextId();
WcsTask newTask = new()
{
objid = objid,
taskType =7,
containerNo = item.containerNo,
taskStatus = 0,
materialId = item.materialId,
qty = Convert.ToInt32(palletInfo.bindAmount),
startPointId =7,
startPointNo = "F06",
currPointId = 7,
currPointNo = "F06",
nextPointId=11,
nextPointNo= "AGV04",
endPointId =16,
endPointNo = "WH0502",
createBy="回转输送线",
createTime = DateTime.Now,
};
dbContext.Add(newTask);
dbContext.SaveChanges();
}
}
}
var taskid = 0;
WcsToWms wcsToWms = new WcsToWms();
continueTaskDto agvtask = new continueTaskDto();
//入库:待取料
if (rfid != null && isarrive != null)
{
//正常读到输送线信息 有到位信号,并且有托盘,获取条码信息
if (Convert.ToInt32(isarrive) ==1)
{
//获取辅料料箱回库任务
dbContext.WcsTask.Where(t => t.containerNo == palletNo&& t.currPointId==7).Update(t => new WcsTask()
var wcsTaskList = dbContext.WcsTask.Where(t => t.taskType == 7 ).ToList();
var cmd= dbContext.WcsCmd.Where(t => t.containerNo== rfid && t.cmdStatus==14).FirstOrDefault();
if (cmd != null)
{
nextPointId = 11,
nextPointNo = "AGV04",
updateTime = DateTime.Now,
updateBy = "五楼回转输送线",
});
agvtask.reqCode = cmd.taskId.ToString();
//给ctu下发继续任务指令
wcsToWms.continueTask(agvtask);
}
}
}
//出库:取料完成待放料
if (IsPut != null)
{
var cmdList = dbContext.WcsCmd.Where(t => t.cmdStatus == 15).ToList();
if (cmdList == null) return;
foreach (var item in cmdList)
{
if (item != null)
{
agvtask.reqCode = item.taskId.ToString();
//给ctu下发继续任务指令
wcsToWms.continueTask(agvtask);
}
}
}
}
catch (Exception ex)
{
@ -151,23 +121,5 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
public List<WcsTask> GetTask(int floorNo, string equipNo)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<WcsTask> wcsTask = new List<WcsTask>();
var wareHouseList = StaticData.WmsBaseWarehouse.ToList();
try
{
wcsTask = StaticData.WcsTask.Where(t => t.taskType == 7 && t.floorNo==5).ToList();
}
catch (Exception ex)
{
LogManager.Info(floorNo + "楼接驳位异常"+ ex.Message);
throw;
}
return wcsTask;
}
}
}

@ -311,26 +311,5 @@ namespace Khd.Core.Wcs.Wcs
updateBy = "agv出库",
});
}
//public List<WcsTask> GetTask(int floorNo, string equipNo)
//{
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
// List<WcsTask> wcsTask = new List<WcsTask>();
// var equip = StaticData.BaseEquip.Where(t => t.floorNo == floorNo && t.equipType == 4).FirstOrDefault();
// try
// {
// //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv
// var taskList = StaticData.WcsTask.Where(t => t.nextPointId == equip.objid && t.currPointId != equip.objid && (t.taskType==1|| t.taskType == 2|| t.taskType == 5 || t.taskType == 6)).ToList();
// if (taskList.Count() == 0)
// { return null; }
// wcsTask = taskList;
// }
// catch (Exception ex)
// {
// LogManager.Info(floorNo + "楼AGV异常" + ex.Message);
// throw;
// }
// return wcsTask;
//}
}
}

Loading…
Cancel
Save