master
2 years ago
parent 7b713adc42
commit fc061d945d

@ -28,5 +28,12 @@ namespace Khd.Core.Api.Controllers
return _application.AgvCallback(agvCallbackDto);
}
[HttpPost("MesToAgvComplete")]
public AgvCompeletedResponse MesToAgvComplete(AgvCompeleted agvCompeletedRequest)
{
LogManager.Info($"RecieveRcsController接口信息{agvCompeletedRequest.ToJsonString()}");
return _application.MesToAgvComplete(agvCompeletedRequest);
}
}
}

@ -23,5 +23,6 @@ namespace Khd.Core.Application.Interface
string OutWare(long taskId);
AgvCompeletedResponse MesToAgvComplete(AgvCompeleted agvCompeletedRequest);
}
}

@ -47,47 +47,64 @@ namespace Khd.Core.Application
ReponseagvCallbackDto reponseagvCallbackDto = new ReponseagvCallbackDto();
try
{
//处理逻辑
var wcscmd = _dbContext.WcsCmd
.Where(t=>t.taskCode==agvCallbackDto.taskCode)
.Where(t => t.taskId == Convert.ToInt64(agvCallbackDto.reqCode)).FirstOrDefault();
.FirstOrDefault();
if (wcscmd != null)
{
//start 开始 end结束 continue继续
//待取货
if (agvCallbackDto.method.ToLower() == "start")
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcscmd.taskId);
if(wcsTask != null)
{
wcscmd.cmdStatus = 2;
wcscmd.sendFlag = 1;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.SaveChanges();
}
//已取货待放货
if (agvCallbackDto.method.ToLower() == "continue")
{
wcscmd.cmdStatus = 3;
wcscmd.sendFlag = 1;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.SaveChanges();
//start 开始 end结束 continue继续
//待取货
if (agvCallbackDto.method.ToLower() == "start")
{
wcscmd.cmdStatus = 2;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 2;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsTask.Update(wcsTask);
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//已取货待放货
if (agvCallbackDto.method.ToLower() == "continue")
{
wcscmd.cmdStatus = 3;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 3;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.Update(wcsTask);
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
var list = _dbContext.WcsTask.Where(t => t.objid == wcscmd.taskId).Update(a => new WcsTask() { currPointNo = wcscmd.equipmentNo });
//_dbContext.WcsTask.Where(t => t.objid == wcscmd.taskId).Update(t=>t.taskStatus==3);
}
//放货完成
if (agvCallbackDto.method.ToLower() == "end")
{
wcscmd.cmdStatus = 5;
wcscmd.sendFlag = 1;
wcsTask.taskStatus= 5;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.Update(wcsTask);
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
}
//放货完成
if (agvCallbackDto.method.ToLower() == "end")
{
wcscmd.cmdStatus = 5;
wcscmd.sendFlag = 1;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.SaveChanges();
}
}
reponseagvCallbackDto.code = "S";
reponseagvCallbackDto.message = "成功";
else
{
reponseagvCallbackDto.code = "1";
reponseagvCallbackDto.message = "未找到当前任务";
}
}
catch (Exception ex)
{
reponseagvCallbackDto.code = "E";
reponseagvCallbackDto.code = "1";
reponseagvCallbackDto.message = ex.Message;
}
//返回请求
@ -111,5 +128,49 @@ namespace Khd.Core.Application
{
return "";
}
public AgvCompeletedResponse MesToAgvComplete(AgvCompeleted agvCompeletedRequest)
{
AgvCompeletedResponse agvCompeletedResponse = new AgvCompeletedResponse();
try
{
string stationId = agvCompeletedRequest.stationId;
BaseEquip baseEquip = _dbContext.BaseEquip.FirstOrDefault(t=>t.equipNo==stationId);
if (baseEquip != null)
{
var wcsCmd = _dbContext.WcsCmd.Where(t => t.nextPointId == baseEquip.objid).FirstOrDefault();
if (wcsCmd != null)
{
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcsCmd.taskId);
if (wcsTask != null)
{
agvCompeletedResponse.code = "0";
agvCompeletedResponse.message = "成功";
wcsCmd.cmdStatus = 6;
wcsTask.taskStatus = 6;
_dbContext.WcsCmd.Update(wcsCmd);
_dbContext.WcsTask.Update(wcsTask);
_dbContext.SaveChanges();
}
}
else
{
agvCompeletedResponse.code = "1";
agvCompeletedResponse.message = "未找到当前任务";
}
}
else
{
agvCompeletedResponse.code = "1";
agvCompeletedResponse.message = "未找到当前设备";
}
}
catch (Exception ex)
{
agvCompeletedResponse.code = "1";
agvCompeletedResponse.message = ex.Message;
}
return agvCompeletedResponse;
}
}
}

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Domain.Dto.webapi
{
public class AgvCompeleted
{
public string stationId { get; set; }
public string stationState { get; set; }
public string method { get; set; }
}
public class AgvCompeletedResponse
{
public string code { get; set; }
public string message { get; set; }
}
}

@ -11,8 +11,8 @@
/// 请求时间截 格式: “yyyy-MM-dd HH:mm:ss”。
/// </summary>
public string reqTime { get; set; }
public string cooX { get; set; }
public string cooY { get; set; }
public decimal cooX { get; set; }
public decimal cooY { get; set; }
public string currentPositionCode { get; set; }
public string data { get; set; }
public string mapCode { get; set; }
@ -31,6 +31,27 @@
public string roadWayCode { get; set; }
public string seq { get; set; }
public string eqpCode { get; set; }
public string action { get; set; }
public string areaCode { get; set; }
public string berthCode { get; set; }
public string callCode { get; set; }
public string clientCode { get; set; }
public string currentCallCode { get; set; }
public string dstBinCode { get; set; }
public string indBind { get; set; }
public string layer { get; set; }
public string mapShortName { get; set; }
public string orgCode { get; set; }
public string podNum { get; set; }
public string podTyp { get; set; }
public string relatedArea { get; set; }
public string subTaskNum { get; set; }
public string tokenCode { get; set; }
public string username { get; set; }
public string whCode { get; set; }
}
public class ReponseagvCallbackDto
{

@ -18,7 +18,7 @@ namespace Khd.Core.Domain.Models
public class BaseEquip
{
[Column("agv_position_code")]
public string agvPositionCode;
public string agvPositionCode { get; set; }
[Key]
[Column("objid")]

@ -151,6 +151,7 @@ namespace Khd.Core.Domain.Models
/// </summary>
[Column("send_flag")]
public int? sendFlag { get; set; }
}
}

@ -18,7 +18,7 @@ namespace Khd.Core.Domain.Models
public class WcsTask
{
[Column("from_floor_no")]
public int? fromFloorNo;
public int? fromFloorNo { get; set; }
[Key]
[Column("objid")]

@ -45,7 +45,7 @@ namespace Khd.Core.Wcs
WcsChuLiWanCheng = StaticPlcHelper.GetValue("2", "1");
//设置默认去向=>1为 Int16位
WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1");
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();
StaticData.BaseEquip = dbContext.BaseEquip.ToList();
foreach (var plcConfig in StaticData.PlcConfigs)
@ -54,7 +54,7 @@ namespace Khd.Core.Wcs
{
Plc.S7.Plc plc;
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
//plc.Open();
plc.Open();
StaticData.PlcDic.TryAdd(plcConfig.Code, plc);
}
}
@ -101,15 +101,19 @@ namespace Khd.Core.Wcs
//FiveFloorLine fiveFloorLine = new(_host, StaticData.PlcDic[0], FiveFloorLineEquip.floorNo.Value, FiveFloorLineEquip.equipNo);
//fiveFloorLine.StartPoint();
//五层CTU
var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[0], FiveFloorCTUEquip.floorNo.Value, FiveFloorCTUEquip.equipNo);
fiveFloorCTU.StartPoint();
////五层CTU
//var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
//FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[0], FiveFloorCTUEquip.floorNo.Value, FiveFloorCTUEquip.equipNo);
//fiveFloorCTU.StartPoint();
////五层AGV
//var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First();
//FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[0], FifthFloorAgvEquip.floorNo.Value, FifthFloorAgvEquip.equipNo);
//fifthFloorAGV.StartPoint();
var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 11).First();
FiveFloorBearAgv fiveFloorBearAgv = new(_host, StaticData.PlcDic[0], FifthFloorBearAgvEquip.floorNo.Value, FifthFloorBearAgvEquip.equipNo);
fiveFloorBearAgv.StartPoint();
}
catch (Exception ex)
{

@ -85,6 +85,6 @@ internal class Program
.ConfigureServices((_, services) =>
{
services.AddDbContext<DefaultDbContext>(options =>
options.UseMySql(ConnectionStrings.ConnectionString, new MySqlServerVersion(new Version(8, 0, 31))));
options.UseMySql(ConnectionStrings.ConnectionString, new MySqlServerVersion(new Version(8, 0, 31))), ServiceLifetime.Transient);
});
}

@ -61,91 +61,229 @@ namespace Khd.Core.Wcs.Wcs
public void StartPoint()
{
var FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
var createRawInWareTaskThread = new Thread(CreateRawInWareTaskLogic);
createRawInWareTaskThread.Start();
var createProductTaskThread=new Thread(CreateProductTaskLogic);
createProductTaskThread.Start();
var createRawTaskThread=new Thread(CreateRawTaskLogic);
createRawTaskThread.Start();
Console.WriteLine(DateTime.Now + ":出库任务监听启动成功");
LogManager.Info("出库任务监听启动成功");
}
public void MonitorInLocatorPoint()
/// <summary>
/// 背板安装区到半成品入库
/// </summary>
private void CreateRawInWareTaskLogic()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
while (true)
{
try
{
//原料&辅料出库
CreateRawTask();
//成品&半成品出库
CreateProductTask();
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + ex.StackTrace);
LogManager.Error(ex);
}
finally
{
Thread.Sleep(2000);
}
}
}
/// <summary>
/// 成品出库
/// </summary>
public void CreateProductTask()
private void CreateProductTaskLogic()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var proStock = dbContext.WmsProductStock.Where(t => t.activeFlag == "0").ToList();
var proOutStock = dbContext.WmsProductOutstock.Where(t => t.executeStatus == "0").ToList();
//获取最早入库时间
foreach (var item in proOutStock)
while (true)
{
//自动获取id
var objid = StaticData.SnowId.NextId();
//锁定库存
WcsOutstockLock stockLock = new()
try
{
objid = objid,
materialId = item.productId,
qty = item.applyQty,
warehouseId = item.warehouseId,
wmsOrderId = item.productOutstockId,
wmsOrderDetailId = item.productOutstockId,
createBy = "sys",
createTime = DateTime.Now
};
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var proStock = dbContext.WmsProductStock.Where(t => t.activeFlag == "0").ToList();
var proOutStock = dbContext.WmsProductOutstock.Where(t => t.operationType == "3").Where(t => t.executeStatus == "0").ToList();
//获取最早入库时间
foreach (var item in proOutStock)
{
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.ud1 == "O" && t.dicField == item.productType).FirstOrDefault();
//获取最早入库时间
var firstDate = proStock.Where(t => t.productId == item.productId && t.warehouseId == item.warehouseId).OrderBy(t => t.createDate).FirstOrDefault();
if (firstDate != null && dic != null)
var wmsproStocks = proStock
.Where(t => t.productId == item.productId && t.warehouseId == item.warehouseId)
.Select(t => t.palletInfoCode)
.ToList();
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsproStocks.Contains(t.containerCode))
.ToList();
decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty);
if (needNumber <= 0)
{
item.executeStatus = "2";
dbContext.Update(item);
dbContext.SaveChanges();
continue;
}
var bill = from a in wmsBaseLocations
from b in proStock
where a.containerCode == b.palletInfoCode
select new { a, b };
//如果第一列满足需求,则按第一列排序,否则按最后一列排序
if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber)
{
bill = bill.OrderBy(t => t.a.locColumn).ToList();
}
else
{
bill = bill.OrderByDescending(t => t.a.locColumn).ToList();
}
//做数量限制
BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 28);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 5);
foreach (var b in bill)
{
item.executeStatus = "1";
WmsBaseLocation location = b.a;
WmsProductStock stock = b.b;
WcsTask wcsTask;
int qty = 0;
if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出
{
item.outstockQty += stock.totalAmount - stock.occupyAmount - stock.frozenAmount;
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
stock.occupyAmount += qty;
stock.updateDate = DateTime.Now;
}
else
{
item.outstockQty += needNumber;
stock.occupyAmount += needNumber;
qty = Convert.ToInt32(needNumber);
stock.updateDate = DateTime.Now;
}
wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
orderId = item.saleOrderId,
taskType = 38,
containerNo = location.containerCode,
createBy = "WCS",
createTime = DateTime.Now,
taskStatus = 0,
materialId = item.productId,
currPointId = location.locationId,
currPointNo = location.locationCode,
startPointId = location.locationId,
startPointNo = location.locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = lineEquip.objid,
endPointNo = lineEquip.equipNo,
equipmentNo = ctuEquip.equipNo,
useFlag = 1,
qty = qty
};
location.outstockFlag = "1";
location.locationStatus = "6";
location.updateBy = "SYS";
location.updateTime = DateTime.Now;
WcsOutstockLock stockLock = new()
{
objid = StaticData.SnowId.NextId(),
boxNo = stock.palletInfoCode,
boxStatus = 0,
createTime = DateTime.Now,
createBy = "SYS",
floorNum = 5,
materialId = item.productId,
qty = qty,
warehouseId = item.warehouseId,
wmsOrderId = item.saleOrderId,
wmsOrderDetailId = item.productOutstockId,
orderType = 2,
taskId = wcsTask.objid,
useFlag = 1,
};
dbContext.Add(stockLock);
dbContext.Update(location);
dbContext.Add(wcsTask);
dbContext.Update(stock);
dbContext.SaveChanges();
if (qty >= needNumber)
{
break;
}
}
dbContext.Update(item);
dbContext.SaveChanges();
}
////自动获取id
//var objid = StaticData.SnowId.NextId();
////锁定库存
//WcsOutstockLock stockLock = new()
//{
// objid = objid,
// materialId = item.productId,
// qty = item.applyQty,
// warehouseId = item.warehouseId,
// wmsOrderId = item.productOutstockId,
// wmsOrderDetailId = item.productOutstockId,
// createBy = "sys",
// createTime = DateTime.Now
//};
//var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.ud1 == "O" && t.dicField == item.productType).FirstOrDefault();
////获取最早入库时间
//var firstDate = proStock.Where(t => t.productId == item.productId && t.warehouseId == item.warehouseId).OrderBy(t => t.createDate).FirstOrDefault();
//if (firstDate != null && dic != null)
//{
// //创建出库任务
// WcsTask newTask = new()
// {
// objid = objid,
// taskType = Convert.ToInt32(dic.dicValue),
// containerNo = "",
// taskStatus = 0,
// materialId = item.warehouseId,
// qty = 1,
// startPointId = item.warehouseId,
// startPointNo = "",
// currPointId = item.warehouseId,
// currPointNo = "",
// endPointId = item.warehouseId,
// endPointNo = "",
// };
// dbContext.Add(newTask);
// dbContext.SaveChanges();
// //回写wms记录表
// dbContext.WmsProductOutstock.Where(t => t.productOutstockId == item.productOutstockId).Update(t => new WmsProductOutstock()
// {
// executeStatus = "1",
// updateDate = DateTime.Now
// });
//}
}
catch (Exception ex)
{
//创建出库任务
WcsTask newTask = new()
{
objid = objid,
taskType = Convert.ToInt32(dic.dicValue),
containerNo = "",
taskStatus = 0,
materialId = item.warehouseId,
qty = 1,
startPointId = item.warehouseId,
startPointNo = "",
currPointId = item.warehouseId,
currPointNo = "",
endPointId = item.warehouseId,
endPointNo = "",
};
dbContext.Add(newTask);
dbContext.SaveChanges();
//回写wms记录表
dbContext.WmsProductOutstock.Where(t => t.productOutstockId == item.productOutstockId).Update(t => new WmsProductOutstock()
{
executeStatus = "1",
updateDate = DateTime.Now
});
Console.WriteLine(ex.Message + ex.StackTrace);
LogManager.Error(ex);
}
}
}
@ -154,184 +292,479 @@ namespace Khd.Core.Wcs.Wcs
/// <summary>
/// 原材料出库
/// </summary>
public void CreateRawTask()
private void CreateRawTaskLogic()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
//原材料库存
var rawStock = dbContext.WmsRawStock.Where(t => t.activeFlag == "1").ToList();
//原材料出库记录
var rawOutStock = dbContext.WmsRawOutstock
.Where(t => t.executeStatus != "2").ToList();
foreach (var item in rawOutStock)
while (true)
{
//自动获取id
if (item.warehouseId == 512)//CTU出库
try
{
var wmsRawStocks = rawStock
.Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId)
.Select(t => t.palletInfoCode)
.ToList();
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsRawStocks.Contains(t.containerCode))
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//原材料库存
var rawStock = dbContext.WmsRawStock.Where(t => t.activeFlag == "1").ToList();
//原材料出库记录
var rawOutStock = dbContext.WmsRawOutstock
.Where(t => t.operationType == "3")
.Where(t => t.executeStatus != "2")
.Where(t => t.auditStatus == "1")
.ToList();
decimal needNumber = item.outstockAmount - item.realOutstockAmount;
if (needNumber <= 0)
foreach (var item in rawOutStock)
{
item.executeStatus = "2";
dbContext.Update(item);
dbContext.SaveChanges();
continue;
var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == item.endStationCode);
if (endEquip != null && endEquip.floorNo == 5)
{
if (endEquip.equipType == 8)//CTU出库
{
var wmsRawStocks = rawStock
.Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId)
.Select(t => t.palletInfoCode)
.ToList();
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsRawStocks.Contains(t.containerCode))
.ToList();
decimal needNumber = item.outstockAmount - item.realOutstockAmount;
if (needNumber <= 0)
{
item.executeStatus = "2";
dbContext.Update(item);
dbContext.SaveChanges();
continue;
}
var bill = from a in wmsBaseLocations
from b in rawStock
where a.containerCode == b.palletInfoCode
select new { a, b };
//如果第一列满足需求,则按第一列排序,否则按最后一列排序
if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber)
{
bill = bill.OrderBy(t => t.a.locColumn).ToList();
}
else
{
bill = bill.OrderByDescending(t => t.a.locColumn).ToList();
}
//做数量限制
bill = bill.Take(5 - dbContext.WcsCmd.Where(t => t.cmdStatus < 3 && t.nextPointId == 20).Count());
BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 11);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 20);
foreach (var b in bill)
{
item.executeStatus = "1";
WmsBaseLocation location = b.a;
WmsRawStock stock = b.b;
WcsTask wcsTask;
int qty = 0;
if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出
{
item.realOutstockAmount += stock.totalAmount - stock.occupyAmount - stock.frozenAmount;
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
stock.occupyAmount += qty;
stock.updateDate = DateTime.Now;
}
else
{
item.realOutstockAmount += needNumber;
stock.occupyAmount += needNumber;
qty = Convert.ToInt32(needNumber);
stock.updateDate = DateTime.Now;
}
wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
orderId = item.rawOutstockId,
taskType = 38,
containerNo = location.containerCode,
createBy = "WCS",
createTime = DateTime.Now,
taskStatus = 0,
materialId = item.materialId,
currPointId = location.locationId,
currPointNo = location.locationCode,
startPointId = location.locationId,
startPointNo = location.locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = lineEquip.objid,
endPointNo = lineEquip.equipNo,
equipmentNo = ctuEquip.equipNo,
useFlag = 1,
qty = qty
};
location.outstockFlag = "1";
location.locationStatus = "6";
location.updateBy = "SYS";
location.updateTime = DateTime.Now;
WcsOutstockLock stockLock = new()
{
objid = StaticData.SnowId.NextId(),
boxNo = stock.palletInfoCode,
boxStatus = 0,
createTime = DateTime.Now,
createBy = "SYS",
floorNum = 5,
materialId = item.materialId,
qty = qty,
warehouseId = item.warehouseId,
wmsOrderId = item.orderId,
wmsOrderDetailId = item.rawOutstockId,
orderType = 2,
taskId = wcsTask.objid,
useFlag = 1,
};
dbContext.Add(stockLock);
dbContext.Update(location);
dbContext.Add(wcsTask);
dbContext.Update(stock);
dbContext.SaveChanges();
if (qty >= needNumber)
{
break;
}
}
dbContext.Update(item);
dbContext.SaveChanges();
}//CTU出库
else if (endEquip.equipType == 10)
{
var wmsRawStocks = rawStock
.Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId)
.Select(t => t.palletInfoCode)
.ToList();
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsRawStocks.Contains(t.containerCode))
.ToList();
decimal needNumber = item.outstockAmount - item.realOutstockAmount;
if (needNumber <= 0)
{
item.executeStatus = "2";
dbContext.Update(item);
dbContext.SaveChanges();
continue;
}
var bill = from a in wmsBaseLocations
from b in rawStock
where a.containerCode == b.palletInfoCode
select new { a, b };
//如果第一列满足需求,则按第一列排序,否则按最后一列排序
if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber)
{
bill = bill.OrderBy(t => t.a.locColumn).ToList();
}
else
{
bill = bill.OrderByDescending(t => t.a.locColumn).ToList();
}
//做数量限制
bill = bill.Take(5 - dbContext.WcsCmd.Where(t => t.cmdStatus < 3 && t.nextPointId == 20).Count());
BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 11);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 20);
foreach (var b in bill)
{
item.executeStatus = "1";
WmsBaseLocation location = b.a;
WmsRawStock stock = b.b;
WcsTask wcsTask;
int qty = 0;
if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出
{
item.realOutstockAmount += stock.totalAmount - stock.occupyAmount - stock.frozenAmount;
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
stock.occupyAmount += qty;
stock.updateDate = DateTime.Now;
}
else
{
item.realOutstockAmount += needNumber;
stock.occupyAmount += needNumber;
qty = Convert.ToInt32(needNumber);
stock.updateDate = DateTime.Now;
}
wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
orderId = item.rawOutstockId,
taskType = 38,
containerNo = location.containerCode,
createBy = "WCS",
createTime = DateTime.Now,
taskStatus = 0,
materialId = item.materialId,
currPointId = location.locationId,
currPointNo = location.locationCode,
startPointId = location.locationId,
startPointNo = location.locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = lineEquip.objid,
endPointNo = lineEquip.equipNo,
equipmentNo = ctuEquip.equipNo,
useFlag = 1,
qty = qty
};
location.outstockFlag = "1";
location.locationStatus = "6";
location.updateBy = "SYS";
location.updateTime = DateTime.Now;
WcsOutstockLock stockLock = new()
{
objid = StaticData.SnowId.NextId(),
boxNo = stock.palletInfoCode,
boxStatus = 0,
createTime = DateTime.Now,
createBy = "SYS",
floorNum = 5,
materialId = item.materialId,
qty = qty,
warehouseId = item.warehouseId,
wmsOrderId = item.orderId,
wmsOrderDetailId = item.rawOutstockId,
orderType = 2,
taskId = wcsTask.objid,
useFlag = 1,
};
dbContext.Add(stockLock);
dbContext.Update(location);
dbContext.Add(wcsTask);
dbContext.Update(stock);
dbContext.SaveChanges();
if (qty >= needNumber)
{
break;
}
}
BaseEquip startStationEquip = StaticData.BaseEquip.First(t => t.objid == 21);
BaseEquip bearAgvEquip = StaticData.BaseEquip.First(t => t.objid == 10);
BaseEquip endStationEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode);
WcsTask bearAgvTask = new()
{
objid = StaticData.SnowId.NextId(),
orderId = item.orderId,
taskType = 32,
containerNo = "",
startPointId = startStationEquip.objid,
startPointNo = startStationEquip.equipNo,
currPointId = startStationEquip.objid,
currPointNo = startStationEquip.equipNo,
nextPointId = bearAgvEquip.objid,
nextPointNo = bearAgvEquip.equipNo,
endPointId = endStationEquip.objid,
endPointNo = endStationEquip.equipNo,
serialNo = SystemData.GetSerialNo(dbContext),
taskStatus = 0,
createTime = DateTime.Now,
createBy = "WCS",
materialId = item.materialId,
qty = 1,
useFlag = 0,
equipmentNo = startStationEquip.equipNo,
remark = "组装出库",
floorNo = 5,
masterId = item.materialId,
fromFloorNo = 5,
materialNo = item.materialBatch,
};
dbContext.Add(bearAgvTask);
dbContext.Update(item);
dbContext.SaveChanges();
}//CTU出库到装配区
else if (endEquip.equipType == 12 || endEquip.equipType == 13)//原材料到柜体验收区
{
var wmsRawStocks = rawStock
.Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId)
.Select(t => t.palletInfoCode)
.ToList();
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsRawStocks.Contains(t.containerCode))
.ToList();
decimal needNumber = item.outstockAmount - item.realOutstockAmount;
if (needNumber <= 0)
{
item.executeStatus = "2";
dbContext.Update(item);
dbContext.SaveChanges();
continue;
}
var bill = from a in wmsBaseLocations
from b in rawStock
where a.containerCode == b.palletInfoCode
select new { a, b };
//如果第一列满足需求,则按第一列排序,否则按最后一列排序
if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber)
{
bill = bill.OrderBy(t => t.a.locColumn).ToList();
}
else
{
bill = bill.OrderByDescending(t => t.a.locColumn).ToList();
}
BaseEquip bearAgvEquip = StaticData.BaseEquip.First(t => t.objid == 10);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode);
foreach (var b in bill)
{
item.executeStatus = "1";
WmsBaseLocation location = b.a;
WmsRawStock stock = b.b;
WcsTask wcsTask;
int qty = 0;
if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出
{
item.realOutstockAmount += stock.totalAmount - stock.occupyAmount - stock.frozenAmount;
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
stock.occupyAmount += qty;
stock.updateDate = DateTime.Now;
}
else
{
item.realOutstockAmount += needNumber;
stock.occupyAmount += needNumber;
qty = Convert.ToInt32(needNumber);
stock.updateDate = DateTime.Now;
}
wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
orderId = item.rawOutstockId,
taskType = endEquip.equipType == 12 ? 27 : 33,//如果是12那么就是原材料到柜体验收区,如果是13那么就是原材料到背板安装区
containerNo = location.containerCode,
createBy = "WCS",
createTime = DateTime.Now,
taskStatus = 0,
materialId = item.materialId,
currPointId = location.locationId,
currPointNo = location.locationCode,
startPointId = location.locationId,
startPointNo = location.locationCode,
nextPointId = bearAgvEquip.objid,
nextPointNo = bearAgvEquip.equipNo,
endPointId = lineEquip.objid,
endPointNo = lineEquip.equipNo,
equipmentNo = bearAgvEquip.equipNo,
useFlag = 1,
qty = qty
};
location.outstockFlag = "1";
location.locationStatus = "6";
location.updateBy = "SYS";
location.updateTime = DateTime.Now;
dbContext.Update(location);
dbContext.Add(wcsTask);
dbContext.Update(stock);
dbContext.SaveChanges();
if (qty >= needNumber)
{
break;
}
}
dbContext.Update(item);
dbContext.SaveChanges();
}
}
//var objid = StaticData.SnowId.NextId();
//long orderID = 0;
////插入锁定库存
//WcsOutstockLock stockLock = new()
//{
// objid = objid,
// materialId = item.productId,
// qty = 1,
// warehouseId = item.warehouseId,
// wmsOrderId = item.rawOutstockId,
// wmsOrderDetailId = item.rawOutstockId,
// createBy = "sys",
// createTime = DateTime.Now
//};
//dbContext.Add(stockLock);
//if (item.warehouseId == 5)//五楼辅料出库
//{
// //辅料出库时,需创建订单表数据
// orderID = StaticData.SnowId.NextId();
// WcsWarehouseOrder order = new()
// {
// objid = orderID,
// wmsOrderId = item.rawOutstockId,
// orderType = Convert.ToInt32(item.taskType),
// qty = 1,
// createBy = "",
// createTime = DateTime.Now
// };
// dbContext.Add(order);
//}
//var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.ud1 == "O").FirstOrDefault();
//if (dic != null)
//{
// WcsTask rawTask = new()
// {
// objid = StaticData.SnowId.NextId(),
// orderId = item.rawOutstockId,
// masterId = orderID,
// taskType = Convert.ToInt32(dic.dicValue),
// containerNo = "",
// taskStatus = 0,
// materialId = item.materialId,
// qty = 1,
// startPointId = item.warehouseId,
// startPointNo = "",
// currPointId = item.warehouseId,
// currPointNo = "",
// endPointId = item.warehouseId,
// endPointNo = ""
// };
// dbContext.Add(rawTask);
// //获取最早入库时间
// var firstDate = rawStock.Where(t => t.materialId == item.productId && t.warehouseId == item.warehouseId).OrderBy(t => t.createDate).FirstOrDefault();
// //回写wms出库记录表
// dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.rawOutstockId).Update(t => new WmsProductOutstock()
// {
// executeStatus = "1",
// updateDate = DateTime.Now
// });
//}
}
var bill = from a in wmsBaseLocations
from b in rawStock
where a.containerCode == b.palletInfoCode
select new { a, b };
//如果第一列满足需求,则按第一列排序,否则按最后一列排序
if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber)
{
bill = bill.OrderBy(t => t.a.locColumn).ToList();
}
else
{
bill = bill.OrderByDescending(t => t.a.locColumn).ToList();
}
//做数量限制
bill = bill.Take(5 - dbContext.WcsCmd.Where(t => t.cmdStatus < 3 && t.nextPointId == 20).Count());
BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 11);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 20);
foreach (var b in bill)
{
item.executeStatus = "1";
WmsBaseLocation location = b.a;
WmsRawStock stock = b.b;
WcsTask wcsTask;
int qty = 0;
if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出
{
item.realOutstockAmount += stock.totalAmount - stock.occupyAmount - stock.frozenAmount;
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
stock.occupyAmount += qty;
stock.updateDate = DateTime.Now;
}
else
{
item.realOutstockAmount += needNumber;
stock.occupyAmount += needNumber;
qty = Convert.ToInt32(needNumber);
stock.updateDate = DateTime.Now;
}
wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
orderId = item.rawOutstockId,
taskType = 38,
containerNo = location.containerCode,
createBy = "WCS",
createTime = DateTime.Now,
taskStatus = 0,
materialId = item.materialId,
currPointId = location.locationId,
currPointNo = location.locationCode,
startPointId = location.locationId,
startPointNo = location.locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = lineEquip.objid,
endPointNo = lineEquip.equipNo,
equipmentNo = ctuEquip.equipNo,
useFlag = 1,
qty = qty
};
dbContext.Add(wcsTask);
dbContext.Update(stock);
dbContext.SaveChanges();
if (qty == needNumber)
{
break;
}
}
dbContext.Update(item);
dbContext.SaveChanges();
}
else
catch
{
}
//var objid = StaticData.SnowId.NextId();
//long orderID = 0;
////插入锁定库存
//WcsOutstockLock stockLock = new()
//{
// objid = objid,
// materialId = item.productId,
// qty = 1,
// warehouseId = item.warehouseId,
// wmsOrderId = item.rawOutstockId,
// wmsOrderDetailId = item.rawOutstockId,
// createBy = "sys",
// createTime = DateTime.Now
//};
//dbContext.Add(stockLock);
//if (item.warehouseId == 5)//五楼辅料出库
//{
// //辅料出库时,需创建订单表数据
// orderID = StaticData.SnowId.NextId();
// WcsWarehouseOrder order = new()
// {
// objid = orderID,
// wmsOrderId = item.rawOutstockId,
// orderType = Convert.ToInt32(item.taskType),
// qty = 1,
// createBy = "",
// createTime = DateTime.Now
// };
// dbContext.Add(order);
//}
//var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.ud1 == "O").FirstOrDefault();
//if (dic != null)
//{
// WcsTask rawTask = new()
// {
// objid = StaticData.SnowId.NextId(),
// orderId = item.rawOutstockId,
// masterId = orderID,
// taskType = Convert.ToInt32(dic.dicValue),
// containerNo = "",
// taskStatus = 0,
// materialId = item.materialId,
// qty = 1,
// startPointId = item.warehouseId,
// startPointNo = "",
// currPointId = item.warehouseId,
// currPointNo = "",
// endPointId = item.warehouseId,
// endPointNo = ""
// };
// dbContext.Add(rawTask);
// //获取最早入库时间
// var firstDate = rawStock.Where(t => t.materialId == item.productId && t.warehouseId == item.warehouseId).OrderBy(t => t.createDate).FirstOrDefault();
// //回写wms出库记录表
// dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.rawOutstockId).Update(t => new WmsProductOutstock()
// {
// executeStatus = "1",
// updateDate = DateTime.Now
// });
//}
}
}
}
}

@ -54,6 +54,11 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
private readonly BasePlcpoint reserialno06;
/// <summary>
/// 是否可以写去向
/// </summary>
private readonly BasePlcpoint canwritewcsrun06;
public FirstFloor(IHost host, Plc.S7.Plc plc)
{
@ -78,6 +83,7 @@ namespace Khd.Core.Wcs.Wcs
//一楼提升机到位信号 读
this.reserialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("reserialno06"));
this.canwritewcsrun06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("canwritewcsrun06"));
}
/// <summary>
@ -114,9 +120,9 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var RFID001Value = this._plc.ReadRFID(this.RFID001.plcpointAddress); //一楼RFID 读
var linesignal01Value = this._plc.Read(this.linesignal01.plcpointAddress); //到位信号 读
//正常读到plc值
if (linesignal01Value != null && RFID001Value != null)
{
@ -238,66 +244,83 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
private void FirstFloorHoister()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
while (true)
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var serialno06Value = this._plc.Read(this.serialno06.plcpointAddress); //提升机流水号 读
var equipstate06Value = this._plc.Read(this.equipstate06.plcpointAddress); //提升机状态 读
var hoisterTrayIn06Value = this._plc.Read(this.hoistertrayin06.plcpointAddress); //提升机货物到位状态 读
var currentfloor06Value = this._plc.Read(this.currentfloor06.plcpointAddress); //提升机当前楼层 读
var targetfloor06Value = this._plc.Read(this.targetfloor06.plcpointAddress); //提升机目的楼层 写
var reserialno06 = this._plc.Read(this.reserialno06.plcpointAddress); //反馈流水号
var canwritewcsrun06value = this._plc.Read(this.canwritewcsrun06.plcpointAddress);
//正常读到plc值
if (targetfloor06Value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null)
if (targetfloor06Value != null && canwritewcsrun06value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null)
{
//提升机空闲
if (Convert.ToInt32(equipstate06Value) == 0)
{
var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).FirstOrDefault();
if (wcsTask != null)
var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime);
foreach (var wcsTask in wcsTasks)
{
if (wcsTask.taskStatus == 0 && Convert.ToInt32(hoisterTrayIn06Value) == 0)//创建状态,并且里面没有货物
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress))
{
wcsTask.taskStatus = 2;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行中";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.SaveChanges();
}
else
{
wcsTask.taskStatus = 1;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行中";
this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.SaveChanges();
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)
{
if (Convert.ToInt32(canwritewcsrun06value) == 0)
{
wcsTask.taskStatus = 2;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行中";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.SaveChanges();
}
}
else
{
wcsTask.taskStatus = 1;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行中";
this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.SaveChanges();
}
}
}
if (wcsTask.taskStatus == 1 && Convert.ToInt32(reserialno06) == wcsTask.serialNo)
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress))
{
wcsTask.taskStatus = 2;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行中";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.SaveChanges();
if (Convert.ToInt32(canwritewcsrun06value) == 0)
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层
{
wcsTask.taskStatus = 2;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行中";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.SaveChanges();
}
}
}
}
if (wcsTask.taskStatus == 2 && Convert.ToInt32(reserialno06) == wcsTask.serialNo)
@ -315,15 +338,19 @@ namespace Khd.Core.Wcs.Wcs
}
if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3且当前楼层为任务的目的楼层
{
wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行完成";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2表示提升机已到达目的地让货出去
dbContext.Update(wcsTask);
dbContext.SaveChanges();
if (Convert.ToInt32(canwritewcsrun06value) == 0)
{
wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行完成";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2表示提升机已到达目的地让货出去
dbContext.Update(wcsTask);
dbContext.SaveChanges();
}
}
break;
}
}
}
@ -344,7 +371,7 @@ namespace Khd.Core.Wcs.Wcs
}
LogManager.Error(ex);
}
Thread.Sleep(1000);
Thread.Sleep(5000);
}
}
}

@ -24,7 +24,7 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint LineSignal;
int FloorNo { get; set; }
private readonly string EquipNo = "";
int agvID = 10;
int agvID = 28;
public FiveFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{
this._host = host;
@ -68,7 +68,10 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == agvID).OrderBy(t => t.createTime).ToList();
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var taskList = dbContext.WcsTask
.Where(t => t.useFlag == 1)
.Where(t => t.nextPointId == agvID).OrderBy(t => t.createTime).ToList();
if (taskList.Count == 0)
{
LogManager.Info(FloorNo + "楼AGV无任务");
@ -77,13 +80,8 @@ namespace Khd.Core.Wcs.Wcs
{
if (item.taskStatus == 0)//下发任务
{
if (taskType.Contains(item.taskType))//入库任务
if (item.taskType == 37)//入库任务
{
if (Convert.ToInt32(this._plc.Read(LineSignal.plcpointAddress)) == 1)
{
Console.WriteLine($"{DateTime.Now}:5楼接驳位上有货无法下发Agv出库任务");
continue;
}
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
WcsCmd wcsCmd = new()
@ -109,12 +107,12 @@ namespace Khd.Core.Wcs.Wcs
new ()
{
positionCode=wcsCmd.currPointNo,
type="1"
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
type="2"
type="00"
}
},
ctnrTyp = "2",
@ -136,7 +134,7 @@ namespace Khd.Core.Wcs.Wcs
}
}
else//出库任务
else if (item.taskType == 38)//出库任务
{
if (Convert.ToInt32(this._plc.Read(LineSignal.plcpointAddress)) == 1)
{
@ -168,19 +166,19 @@ namespace Khd.Core.Wcs.Wcs
new ()
{
positionCode=wcsCmd.currPointNo,
type="1"
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
type="2"
type="00"
}
},
taskTyp = "",
ctnrTyp = "2"
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
string result = HttpHelper.SendPostMessage("172.16.12.24", 8182, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
@ -198,7 +196,7 @@ namespace Khd.Core.Wcs.Wcs
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.objid == item.objid);
if (wcsCmd != null)
{
if (wcsCmd.cmdStatus == 2)
if (wcsCmd.cmdStatus == 3)
{
var agvTask = new RequestAGVTaskDto
{
@ -210,7 +208,7 @@ namespace Khd.Core.Wcs.Wcs
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 3;
wcsCmd.cmdStatus = 4;
dbContext.Update(wcsCmd);
dbContext.SaveChanges();
}
@ -236,20 +234,47 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.startPointId && t.warehouseFloor == 5);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
dbContext.Update(wmsBaseLocation);
if (item.taskType == 38)//出库
{
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = "";
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "SYS";
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5);
BaseEquip eletorEquip = StaticData.BaseEquip.First(t => t.equipType == 2);
item.nextPointId = floorLineEquip.objid;
item.nextPointNo = floorLineEquip.equipNo;
item.fromFloorNo = 5;
item.floorNo = 1;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.SaveChanges();
dbContext.Update(wmsBaseLocation);
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5);
BaseEquip eletorEquip = StaticData.BaseEquip.First(t => t.equipType == 2);
item.nextPointId = floorLineEquip.objid;
item.nextPointNo = floorLineEquip.equipNo;
item.fromFloorNo = 5;
item.floorNo = 1;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.SaveChanges();
}
else if (item.taskType == 37)//入库
{
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.instockFlag = "0";
dbContext.Update(wmsBaseLocation);
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5);
BaseEquip eletorEquip = StaticData.BaseEquip.First(t => t.equipType == 2);
item.nextPointId = floorLineEquip.objid;
item.nextPointNo = floorLineEquip.equipNo;
item.fromFloorNo = 5;
item.floorNo = 1;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.SaveChanges();
}
}
}
}

@ -0,0 +1,204 @@
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
{
internal class FiveFloorBearAgv
{
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host;
private readonly Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal;
int FloorNo { get; set; }
private readonly string EquipNo = "";
int agvID = 10;
public FiveFloorBearAgv(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{
this._host = host;
this._plc = plc;
FloorNo = floor;
EquipNo = equipNo;
this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位
this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID"));
this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun"));
this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
//this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
}
/// <summary>
/// 启动上件扫描监听
/// </summary>
public void StartPoint()
{
Thread FlowPointThread = new(MonitorInLocatorPoint);
FlowPointThread.Start();
Console.WriteLine(DateTime.Now + ":五楼AGV上件扫描监听启动成功");
LogManager.Info("五楼AGV上件扫描监听启动成功");
}
public void MonitorInLocatorPoint()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<int?> taskType = new() { 1, 3, 5, 7 };
while (true)
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var taskList = dbContext.WcsTask
.Where(t => t.useFlag == 1)
.Where(t => t.nextPointId == agvID)
.OrderBy(t => t.createTime).ToList();
if (taskList.Count == 0)
{
LogManager.Info(FloorNo + "楼AGV无任务");
}
foreach (var item in taskList)
{
if (item.taskStatus == 0)//下发任务
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
BaseDictionary baseDictionary = dbContext.BaseDictionary.First(t=>t.objid==item.taskType);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.startPointId,
currPointNo = startEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
type="00"
}
},
taskTyp=baseDictionary.dicValue,
ctnrTyp = "2",
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage("172.16.12.24", 8182, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.code == "0")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("下发小车任务失败" + result);
}
}
else
{
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
if (wcsCmd.cmdStatus == 3)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage("172.16.12.24", 8182, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => t.cmdStatus == 4);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => t.taskStatus == 4);
dbContext.SaveChanges();
}
}
else if (wcsCmd.cmdStatus == 5)
{
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t=>t.cmdStatus==6);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => t.taskStatus == 6);
dbContext.SaveChanges();
}
else if (wcsCmd.cmdStatus == 7)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage("172.16.12.24", 8182, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
dbContext.SaveChanges();
}
}
}
}
}
//foreach (var item in taskList)
//{
// SendAndUpdateTask(item);
//}
}
catch (Exception ex)
{
LogManager.Error(ex);
}
finally
{
Thread.Sleep(1000);
}
}
}
}
}

@ -71,6 +71,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var rfid = this._plc.Read(LineRFID.plcpointAddress);
var isArrive = this._plc.Read(isarrive.plcpointAddress);
if (rfid != null && isArrive != null && Convert.ToInt32(isArrive) == 1)
@ -123,6 +124,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == CTUID).ToList();
if (taskList.Count == 0)
{
@ -132,7 +134,7 @@ namespace Khd.Core.Wcs.Wcs
{
if (item.taskStatus == 0)//CTU会同时生成多个任务生成就下发
{
if (item.taskType % 2 == 0)//出库任务
if (item.taskType == 30)//出库任务
{
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
@ -150,22 +152,24 @@ namespace Khd.Core.Wcs.Wcs
currPointNo = wmsBaseLocation.agvPositionCode,
nextPointId = baseEquip.objid,
nextPointNo = baseEquip.agvPositionCode,
taskCode=null
taskCode = null
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new() {
positionCode=wcsCmd.currPointNo,
type="05"
},
new() {
positionCode=wcsCmd.nextPointNo,
type="05"
},
},
{
new()
{
positionCode = wcsCmd.currPointNo,
type = "05"
},
new()
{
positionCode = wcsCmd.nextPointNo,
type = "05"
},
},
ctnrTyp = "1",
taskTyp = "F504"
};
@ -182,7 +186,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.SaveChanges();
}
}
else//入库任务
else if (item.taskType == 29)//入库任务
{
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
@ -203,18 +207,20 @@ namespace Khd.Core.Wcs.Wcs
};
var agvTask = new RequestAGVTaskDto
{
reqCode = item.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new() {
positionCode=wcsCmd.currPointNo,
type="0"
},
new() {
positionCode=wcsCmd.nextPointNo,
type="0"
},
},
{
new()
{
positionCode = wcsCmd.currPointNo,
type = "0"
},
new()
{
positionCode = wcsCmd.nextPointNo,
type = "0"
},
},
ctnrTyp = "1",
taskTyp = "F503"
};
@ -235,14 +241,14 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.objid == item.objid);
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
if (wcsCmd.cmdStatus == 3)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = item.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
@ -275,9 +281,12 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.startPointId && t.warehouseFloor == 5);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
dbContext.Update(wmsBaseLocation);
if (item.taskType == 29)
{
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
dbContext.Update(wmsBaseLocation);
}
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5);
BaseEquip eletorEquip = StaticData.BaseEquip.First(t => t.equipType == 2);

@ -66,7 +66,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var rfid = this._plc.Read(LineRFID.plcpointAddress);
var isarrive = this._plc.Read(IsArrive.plcpointAddress);
//获取条码信息

@ -69,6 +69,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//入库任务
var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress);
var isSignal = this._plc.Read(LineSignal.plcpointAddress);
@ -134,6 +135,7 @@ namespace Khd.Core.Wcs.Wcs
wcsTask.nextPointNo = AgvEquip.equipNo;
wcsTask.endPointId = wmsBaseLocation.locationId;
wcsTask.endPointNo = wmsBaseLocation.locationCode;
wcsTask.useFlag = 0;//什么情况下需要确认
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);

@ -50,6 +50,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var RFID004Value = this._plc.Read(this.LineRFID.plcpointAddress); //一楼RFID 读
var linesignal04Value = this._plc.Read(this.LineSignal.plcpointAddress); //到位信号 读
var wcsrun04Value = this._plc.Read(this.WcsRun.plcpointAddress); //去向 写

@ -72,6 +72,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv
var taskList = StaticData.WcsTask.Where(t => t.nextPointId == EquipID && t.currPointId != EquipID && (t.taskType == 11 || t.taskType == 5 || t.taskType == 6)).ToList();
if (taskList.Count == 0)

@ -70,6 +70,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//入库任务
var rfid = this._plc.Read(LineRFID.plcpointAddress);
var isSignal = this._plc.Read(LineSignal.plcpointAddress); //到位信号

@ -69,6 +69,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//入库任务
var rfid = this._plc.Read(LineRFID.plcpointAddress);
var isSignal = this._plc.Read(LineSignal.plcpointAddress);

@ -72,6 +72,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == EquipID && t.currPointId != EquipID && (t.taskType == 1 || t.taskType == 2 || t.taskType == 9)).ToList();
if (taskList.Count == 0)

@ -70,6 +70,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//入库任务
var rfid = this._plc.Read(LineRFID.plcpointAddress);
var isSignal = this._plc.Read(LineSignal.plcpointAddress);

@ -22,11 +22,11 @@
"WaitTime": "60000",
"SiteCode": "999"
},
//"Logging": {
// "LogLevel": {
// "Default": "Information",
// "Microsoft": "Warning",
// "Microsoft.Hosting.Lifetime": "Information"
// }
//}
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}

@ -422,12 +422,12 @@ namespace Khd.Core.Wpf.Form
// 映射数据库字段,这里需要根据你的实际需求进行调整
var columnMappings = new Dictionary<string, string>
{
// 添加映射
{columnHeaders[0],"production_sequence"},
{columnHeaders[1],"line_code"},
{columnHeaders[3],"prod_code"},
{columnHeaders[4],"Quantity"},
{columnHeaders[5],"order_code"}
// 添加映射
{columnHeaders[0],"production_sequence"},
{columnHeaders[1],"line_code"},
{columnHeaders[3],"prod_code"},
{columnHeaders[4],"Quantity"},
{columnHeaders[5],"order_code"}
};
int ordernum = 0;
// 获取实际的行数和列数

Loading…
Cancel
Save