master
1 year ago
parent 2f62066c04
commit 0864cd9cfd

@ -19,7 +19,7 @@ namespace Khd.Core.Api.Controllers
}
/// <summary>
/// 接收agv接收任务通知接口
/// 接收agv接收任务通知接口三楼和五楼Agv接口
/// </summary>
/// <param name="agvCallbackDto"></param>
/// <returns></returns>
@ -33,7 +33,7 @@ namespace Khd.Core.Api.Controllers
}
/// <summary>
/// 接收agv接收任务通知接口
/// 接收agv接收任务通知接口二楼Agv接口
/// </summary>
/// <param name="agvCallbackDto"></param>
/// <returns></returns>

@ -29,31 +29,31 @@ namespace Khd.Core.Domain.Models
/// wcs_warehouse_order 主键id
/// </summary>
[Column("master_id")]
public long? masterId { get; set; }
public long? masterId { get; set; }//暂时不用
/// <summary>
/// wms出入库记录表id
/// </summary>
[Column("order_id")]
public long? orderId { get; set; }
public long? orderId { get; set; }//申请单的主键id
/// <summary>
/// 流水号
/// </summary>
[Column("serial_no")]
public long? serialNo { get; set; }
public long? serialNo { get; set; }//提升机专用流水号
/// <summary>
/// 设备编号
/// </summary>
[Column("equipment_no")]
public string equipmentNo { get; set; }
public string equipmentNo { get; set; }//设备编号
/// <summary>
/// 容器号(托盘或者箱号)
/// </summary>
[Column("container_no")]
public string containerNo { get; set; }
public string containerNo { get; set; }//RFID料箱号
/// <summary>
/// 任务类型,字典表
@ -70,11 +70,9 @@ namespace Khd.Core.Domain.Models
/// 38成品区-提升机输送线对接点
/// 46原材料-柜体拆分区
/// 47接驳位-原材料周转区
///
///
/// </summary>
[Column("task_type")]
public int? taskType { get; set; }
public int? taskType { get; set; }//对照数据库wcs_base_dictionary表的主键27开始
/// <summary>
/// 任务状态,字典表

@ -29,7 +29,7 @@ namespace Khd.Core.Library.Mapper
config.NewConfig<string, string>().MapWith(dest => dest.Trim());
// config.ForType<string, Guid>().Map(member: guid => guid, source: @string => string.IsNullOrEmpty(@string) ? Guid.Empty : new Guid(@string));
// config.ForType<Guid, String>().Map(member: @string => @string, source: guid => ("wode"));
config.Default.IgnoreNullValues(true);//忽略null
config.Default.IgnoreNullValues(true);//忽略null原本的类字段的值是null映射出来是"",int? null
config.Default.NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);//忽略大小写
var destination = source.Adapt<TDestination>(config);
return destination;

@ -45,15 +45,16 @@ namespace Khd.Core.Plc
return null;
}
string res = Encoding.UTF8.GetString(result).Replace("\0", "").Replace("$", "").Replace("\\u", "").Trim();
if (res.Contains("JYHB"))
{
return res[res.IndexOf('J')..];
}
else if(res.Contains('C'))
else if (res.Contains('C'))
{
return res[res.IndexOf('C')..];
}else
}
else
{
return "";
}

@ -1,5 +1,4 @@
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.EntityFramework;
using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs;
using Masuit.Tools.Logging;
@ -35,21 +34,13 @@ namespace Khd.Core.Wcs
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
using var dbContextTransaction = dbContext.Database.BeginTransaction();
try
{
//加载配置项
//设置程序启动时清空点位的数据=>0为 Int16位
QingKongDianWei = StaticPlcHelper.GetValue("2", "0");
//设置默认处理完成=>1为 Int16位
WcsChuLiWanCheng = StaticPlcHelper.GetValue("2", "1");
//设置默认去向=>1为 Int16位
WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1");
StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();
StaticData.basePlcs = dbContext.BasePlc.ToList();
StaticData.BaseEquip = dbContext.BaseEquip.ToList();
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();
StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();//设备交互用
StaticData.basePlcs = dbContext.BasePlc.ToList();//陈工Agv和设备信息推送
StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表Agv任务模板
foreach (var plcConfig in StaticData.PlcConfigs)
{
if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))
@ -68,8 +59,8 @@ namespace Khd.Core.Wcs
StaticData.PlcDic.TryAdd(plcConfig.Code, plc);
}
}
//SystemTimer systemTimer = new SystemTimer(_host);
//systemTimer.Start();
SystemTimer systemTimer = new SystemTimer(_host);
systemTimer.Start();
//创建任务
CreateTaskByRecord createTaskByRecord = new(_host);
createTaskByRecord.StartPoint();
@ -78,40 +69,40 @@ namespace Khd.Core.Wcs
FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]);
firstFloor.StartPoint();
////二层接驳位
//var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First();
//SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value);
//secondFloorPoint.StartPoint();
//二层接驳位
var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First();
SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value);
secondFloorPoint.StartPoint();
////二层AGV
//var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First();
//SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value);
//secondFloorAGV.StartPoint();
//二层AGV
var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First();
SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value);
secondFloorAGV.StartPoint();
////二楼线体
//var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 17).First();
//SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[2], SecondFloorLineEquip.floorNo.Value);
//secondFloorLine.StartPoint();
//二楼线体
var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 17).First();
SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[2], SecondFloorLineEquip.floorNo.Value);
secondFloorLine.StartPoint();
////三层接驳位
//var ThirdBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 1).First();
//ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value);
//thirdFloorPoint.StartPoint();
//三层接驳位
var ThirdBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 1).First();
ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value);
thirdFloorPoint.StartPoint();
////三层AGV
//var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
//ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value);
//thirdFloorAGV.StartPoint();
//三层AGV
var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value);
thirdFloorAGV.StartPoint();
//五层接驳位
var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First();
FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value);
fifthFloorPoint.StartPoint();
////五层CTU
//var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
//FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value);
//fiveFloorCTU.StartPoint();
//五层CTU
var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value);
fiveFloorCTU.StartPoint();
//五层AGV
var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First();
@ -125,7 +116,6 @@ namespace Khd.Core.Wcs
}
catch (Exception ex)
{
dbContextTransaction.Rollback();
Console.WriteLine(ex.Message);
LogManager.Error(ex);
}

@ -29,9 +29,9 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
public void StartPoint()
{
////背负式Agv返库任务
//var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic);
//createBearAgvReturnThread.Start();
//背负式Agv返库任务
var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic);
createBearAgvReturnThread.Start();
//五楼半成品入库任务
var createFiveProductInTaskThread = new Thread(CreateFiveProductInTaskLogic);
createFiveProductInTaskThread.Start();
@ -44,18 +44,18 @@ namespace Khd.Core.Wcs.Wcs
//五楼柜体拆分返库任务
var createRawInThread = new Thread(CreateRawInTaskLogic);
createRawInThread.Start();
////三楼去翻转机任务
//var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic);
//createThirdOutTaskThread.Start();
////二楼成品出库任务
//var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic);
//CreateSecondProductTaskThread.Start();
////三楼托盘收集架满5个或10个时出库合盘任务
//var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic);
//createEmptyTrayThread.Start();
////二楼废品区人工调度任务
//var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic);
//createThirdWasterTaskThread.Start();
//三楼去翻转机任务
var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic);
createThirdOutTaskThread.Start();
//二楼成品出库任务
var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic);
CreateSecondProductTaskThread.Start();
//三楼托盘收集架满5个或10个时出库合盘任务
var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic);
createEmptyTrayThread.Start();
//二楼废品区人工调度任务
var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic);
createThirdWasterTaskThread.Start();
Console.WriteLine(DateTime.Now + ":出库任务监听启动成功");
LogManager.Info("出库任务监听启动成功");
@ -1481,7 +1481,7 @@ namespace Khd.Core.Wcs.Wcs
int qty = 0;
if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出
{
needNumber-= stock.totalAmount - stock.frozenAmount;
needNumber -= stock.totalAmount - stock.frozenAmount;
RealOutNumber += stock.totalAmount - stock.frozenAmount;
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
stock.updateDate = DateTime.Now;

@ -64,7 +64,6 @@ namespace Khd.Core.Wcs.Wcs
this.RFID001 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("RFID001"));
//到位信号 读
this.linesignal01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("linesignal01"));
//一楼提升机流水号 读
this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("serialno06"));
this.mesClose = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("mesclose"));
@ -87,27 +86,19 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
public void StartPoint()
{
Thread firstFloorLine = new(FirstFloorLine)
Thread firstFloorLine = new(FirstFloorLine)//一楼接驳位线程
{
IsBackground = true
};
firstFloorLine.Start();
Console.WriteLine(DateTime.Now + ":一楼接驳位线程启动成功");
LogManager.Info("一楼接驳位线程启动成功");
Thread firstFloorHoister = new(FirstFloorHoister)
Thread firstFloorHoister = new(FirstFloorHoister)//提升机
{
IsBackground = true
};
firstFloorHoister.Start();
//Thread CallEmptyThread = new Thread(CallEmpty)
//{
// IsBackground = true
//};
//CallEmptyThread.Start();
Thread equipStatusThread = new Thread(EquipStatusLogic)
Thread equipStatusThread = new Thread(EquipStatusLogic)//设备状态1-5楼接驳位能不能送货提升机和小车任务
{
IsBackground = true
};
@ -134,28 +125,28 @@ namespace Khd.Core.Wcs.Wcs
if (Convert.ToInt32(lineSignal) == 1)
{
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
if (baseEquip.equipStatus != 1)
if (baseEquip.equipStatus != 1)//不是忙碌状态,改为忙碌状态
{
baseEquip.equipStatus = 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
}
else
{
bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any();
if (!hasTask)
{
baseEquip.equipStatus = 0;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
}
}
//else
//{
// bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any();
// if (!hasTask)
// {
// baseEquip.equipStatus = 0;
// dbContext.Update(baseEquip);
// dbContext.SaveChanges();
// }
//}
}
else
{
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any();
bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any();
bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any();//小车任务
bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any();//提升机任务,有没有正在执行的往这个接驳位送的
if (!hasCmd || !hasTask)
{
baseEquip.containerNo = null;
@ -163,7 +154,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(baseEquip);
dbContext.SaveChanges();
}
else
else//接驳位改为忙碌状态
{
baseEquip.containerNo = null;
baseEquip.equipStatus = 1;
@ -305,7 +296,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());//上次查出1不加这行数据库实际2查出1
var RFID001Value = StaticData.PlcDic[0].ReadRFID(this.RFID001.plcpointAddress); //一楼RFID 读
var linesignal01Value = StaticData.PlcDic[0].Read(this.linesignal01.plcpointAddress); //到位信号 读
//正常读到plc值
@ -400,7 +391,7 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
if (string.IsNullOrEmpty(task.containerNo))
if (string.IsNullOrEmpty(task.containerNo))//人工调出
{
if (task.useFlag == 1)
{
@ -514,7 +505,7 @@ namespace Khd.Core.Wcs.Wcs
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1))
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//当前楼层和起始楼层一致
{
wcsTask.taskStatus = 2;
wcsTask.updateBy = "提升机线程";
@ -531,7 +522,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(lineEquip);
dbContext.SaveChanges();
}
else
else//当前楼层和起始楼层不一致
{
wcsTask.taskStatus = 1;
wcsTask.updateBy = "提升机线程";
@ -589,20 +580,20 @@ namespace Khd.Core.Wcs.Wcs
}
if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3且当前楼层为任务的目的楼层
{
if (wcsTask.floorNo == 1)
if (wcsTask.floorNo == 1)//目的楼层是1
{
if (ReadEmptyLocation())
if (ReadEmptyLocation())//托盘库是否有任务没有任务返回true
{
var linesignal = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress);
if (linesignal != null && Convert.ToInt32(linesignal) == 0)
if (linesignal != null && Convert.ToInt32(linesignal) == 0)//接驳位外侧没有东西
{
BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress);
if (clearPoint != null && Convert.ToBoolean(clearValue) == true)
if (clearPoint != null && Convert.ToBoolean(clearValue) == true)//是否有报警
{
Console.WriteLine(DateTime.Now + ":提升机下发报警消除指令");
LogManager.Info("提升机下发报警消除指令");
StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString());
StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString());//清除报警
}
wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程";
@ -616,11 +607,11 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" });
dbContext.SaveChanges();
}
else
else//接驳位外侧有东西
{
BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress);
if (clearPoint != null && Convert.ToBoolean(clearValue)==false)
if (clearPoint != null && Convert.ToBoolean(clearValue) == false)
{
StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, true, clearPoint.plcpointLength.ToString());
}
@ -651,16 +642,16 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.equipmentNo == $"clear0{wcsTask.floorNo}");
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
}
}
}
else if (wcsTask.taskStatus == 4)
else if (wcsTask.taskStatus == 4)//提升机任务结束
{
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun"));
var wcsRun = StaticData.PlcDic[0].Read(basePlcpoint.plcpointAddress);
if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)
if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)//判断当前接驳位的任务状态wcsrrun如果是1代表入库2是出库0是空闲
{
BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
wcsTask.nextPointId = floorEquip.objid;
@ -683,7 +674,7 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else
else//同步楼层,屏蔽状态
{
if (currentfloor06Value != null && targetfloor06Value != null)
{

@ -9,7 +9,6 @@ using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System.Transactions;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs

@ -417,12 +417,12 @@ namespace Khd.Core.Wcs.Wcs
new()
{
positionCode = wcsCmd.currPointNo,
type = "05"
type = "05"//05库位
},
new()
{
positionCode = wcsCmd.nextPointNo,
type = "00"
type = "00"//设备
},
},
ctnrTyp = "1",
@ -479,12 +479,12 @@ namespace Khd.Core.Wcs.Wcs
new()
{
positionCode = wcsCmd.currPointNo,
type = "05"
type = "05"//设备
},
new()
{
positionCode = wcsCmd.nextPointNo,
type = "05"
type = "05"//库位
},
},
ctnrTyp = "1",

@ -873,7 +873,7 @@ namespace Khd.Core.Wcs.Wcs
{
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode);
wmsProductOutstock.outstockQty ++;
wmsProductOutstock.outstockQty++;
if (wmsProductOutstock.applyQty <= wmsProductOutstock.outstockQty)
{
wmsProductOutstock.endTime = DateTime.Now;

@ -40,12 +40,12 @@ namespace Khd.Core.Wcs.Wcs
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36);
BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2);
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);
BaseEquip tsjEquip = StaticData.BaseEquip.First(t => t.objid == 6);
var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);
BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36);//小包入口
BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37);//小包出口
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2);//二楼接驳位
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);//二楼叉车
BaseEquip tsjEquip = StaticData.BaseEquip.First(t => t.objid == 6);//提升机
var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);//二楼小包入口点位
while (true)
{
try
@ -54,8 +54,7 @@ namespace Khd.Core.Wcs.Wcs
//入库任务
var rfid = StaticData.PlcDic[0].ReadRFID(LineRFID.plcpointAddress);
var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress);
//var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);
var agvPutValue = "";
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);
if (rfid != null && isSignal != null)
{
@ -64,30 +63,29 @@ namespace Khd.Core.Wcs.Wcs
{
//获取条码信息
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == 2);
var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 2).OrderBy(t => t.createTime)
.FirstOrDefault();
var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 2).OrderBy(t => t.createTime).FirstOrDefault();
if (wcsTask != null)
{
if (wcsTask.taskStatus == 5 && (wcsTask.nextPointId == 6 || wcsTask.nextPointId == 2))//入托盘入口,提升机任务是完成状态
{
if (wcsTask.taskType != 99)
if (wcsTask.taskType != 99)//不是人工任务
{
if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0)//小包入口要料
{
dbContext.WcsTask.Remove(wcsTask);
dbContext.WcsTask.Remove(wcsTask);//删除原本的任务
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId = agvEquip.objid;
newTask.nextPointId = agvEquip.objid;//小车执行该任务
newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
newTask.containerNo = rfid;
newTask.currPointId = lineEquip.objid;
newTask.containerNo = rfid;//容器号
newTask.currPointId = lineEquip.objid;//起始地为二楼接驳位
newTask.currPointNo = lineEquip.equipNo;
newTask.endPointId = inEquip.objid;
newTask.endPointId = inEquip.objid;//终点为小包入口
newTask.endPointNo = inEquip.equipNo;
newTask.taskType = 51;//到小包入口
newTask.taskType = 51;//提升机到小包入口的任务类型
newTask.useFlag = 1;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
@ -98,23 +96,23 @@ namespace Khd.Core.Wcs.Wcs
}
else if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1)
{
BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);//二楼周转位
if (endEquip != null)
{
dbContext.WcsTask.Remove(wcsTask);
dbContext.WcsTask.Remove(wcsTask);//删除原本的任务
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId = agvEquip.objid;
newTask.nextPointId = agvEquip.objid;//小车执行该任务
newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
newTask.containerNo = rfid;
newTask.currPointId = lineEquip.objid;
newTask.containerNo = rfid;//容器号
newTask.currPointId = lineEquip.objid;//起始地为二楼接驳位
newTask.currPointNo = lineEquip.equipNo;
newTask.endPointId = endEquip.objid;
newTask.endPointId = endEquip.objid;//终点为周转位
newTask.endPointNo = endEquip.equipNo;
newTask.taskType = 58;//到周转位
newTask.taskType = 58;//提升机到周转位的任务类型
newTask.useFlag = 1;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
@ -127,7 +125,7 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
if (wcsTask.endPointId == 36)
if (wcsTask.endPointId == 36)//目的地是小包入口
{
if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1)//小包入口要料
{
@ -182,10 +180,10 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if (wcsTask.endPointId == 38)
else if (wcsTask.endPointId == 38)//目的地是废料区
{
var endEquip = dbContext.BaseEquip.First(t => t.objid == 38);
if (endEquip.emptyCount == 0)
var endEquip = dbContext.BaseEquip.First(t => t.objid == 38);//废料区
if (endEquip.emptyCount == 0)//废料区没有托盘
{
dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
@ -209,7 +207,7 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);//周转位
if (endEquip != null)
{
dbContext.WcsTask.Remove(wcsTask);

@ -29,25 +29,19 @@ namespace Khd.Core.Wcs.Wcs
{
IsBackground = true
};
messageSynchronousThread.Start();
messageSynchronousThread.Start();//陈工设备信息推送
//var baseEquipThread = new Thread(BaseEquipLogic)
//{
// IsBackground = true
//};
//baseEquipThread.Start();
//var PlcHeartBeat30Thread = new Thread(PlcHeartBeat30Logic)
//{
// IsBackground = true
//};
//PlcHeartBeat30Thread.Start();
var PlcHeartBeat30Thread = new Thread(PlcHeartBeat30Logic)
{
IsBackground = true
};
PlcHeartBeat30Thread.Start();//脉冲
var PlcHeartBeat31Thread = new Thread(PlcHeartBeat31Logic)
{
IsBackground = true
};
PlcHeartBeat31Thread.Start();
PlcHeartBeat31Thread.Start();//脉冲
Console.WriteLine($"{DateTime.Now}: SystemTimer started");
}
@ -192,7 +186,6 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
HositerLogic();
CtuLineLogic();
ThirdAgvLogic();

@ -747,7 +747,7 @@ namespace Khd.Core.Wcs.Wcs
{
rawStockId = StaticData.SnowId.NextId(),
activeFlag = "1",
saleOrderId = mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId,
saleOrderId = mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId,
stockType = "1",
supplierId = mesBaseBarcodeInfo.manufacturerId,
qualityStatus = "1",

@ -13,15 +13,15 @@
"Rack": 0,
"Slot": 1,
"Code": 0
},
//{
// "IP": "192.168.2.31",
// "Port": 102, //102
// "CpuType": 40,
// "Rack": 0,
// "Slot": 1,
// "Code": 1
//},
},//
{
"IP": "192.168.2.31",
"Port": 102, //102
"CpuType": 40,
"Rack": 0,
"Slot": 1,
"Code": 1
},//U线
{
"IP": "192.168.2.220",
"Port": 102, //102
@ -29,7 +29,7 @@
"Rack": 0,
"Slot": 1,
"Code": 2
}
}//
],
"PLCSetting": {
"Mode": "0",

@ -2902,7 +2902,7 @@ namespace Khd.Core.Wpf.Form
private void SelectOutBtn_Click(object sender, RoutedEventArgs e)
{
SelectOutRawForm selectOutRawForm=new SelectOutRawForm(this._host);
SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host);
selectOutRawForm.ShowDialog();
}
}

Loading…
Cancel
Save