change-2F入库添加product_instock、小包入口叫空托信号改为( 托盘库叫料信号,并且通讯正常,并且小包入口无料)

master
liuwf 1 year ago
parent 6c558e0159
commit 494fd0d9cd

@ -0,0 +1,136 @@
//-----------------------------------------------------------------------
//<copyright>
// * Copyright (C) 2021 KEHAIDASOFT All Rights Reserved
// * version : 4.0.30319.42000
// * author : khd by t4-2
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Models
{
[Table("mes_product_plan_detail")]
public class MesProductPlanDetail
{
[Key]
[Column("plan_detail_id")]
public long PlanDetailId { get; set; }
/// <summary>
/// 明细编号
/// </summary>
[Column("plan_detail_code")]
[Required]
[StringLength(64)]
public string PlanDetailCode { get; set; }
/// <summary>
/// 生产计划ID
/// </summary>
[Column("plan_id")]
[Required]
public long PlanId { get; set; }
/// <summary>
/// 计划编号, 关联mes_product_plan_info的plan_code
/// </summary>
[Column("plan_code")]
[Required]
[StringLength(64)]
public string PlanCode { get; set; }
/// <summary>
/// 操作人员ID关联sys_user的user_id
/// </summary>
[Column("user_id")]
public long? UserId { get; set; }
/// <summary>
/// 操作人员名称关联sys_user的user_name
/// </summary>
[Column("user_name")]
[StringLength(64)]
public string UserName { get; set; }
/// <summary>
/// 开始时间
/// </summary>
[Column("real_begin_time")]
public DateTime? RealBeginTime { get; set; }
/// <summary>
/// 完成时间
/// </summary>
[Column("real_end_time")]
public DateTime? RealEndTime { get; set; }
/// <summary>
/// 文件ID关联附件信息主键
/// </summary>
[Column("attach_id")]
public int? AttachId { get; set; }
/// <summary>
/// 明细状态1-未开始2-已开始3-已完成9-异常完成(校验物料信息不完整)
/// </summary>
[Column("plan_detail_status")]
[Required]
[StringLength(1)]
public string PlanDetailStatus { get; set; } = "1";
/// <summary>
/// 是否标识1-是0-否
/// </summary>
[Column("is_flag")]
[Required]
[StringLength(1)]
public string IsFlag { get; set; } = "1";
/// <summary>
/// 备注
/// </summary>
[Column("remark")]
[StringLength(500)]
public string Remark { get; set; }
/// <summary>
/// 创建人
/// </summary>
[Column("create_by")]
[StringLength(64)]
public string CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column("create_time")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 更新人
/// </summary>
[Column("update_by")]
[StringLength(64)]
public string UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[Column("update_time")]
public DateTime? UpdateTime { get; set; }
/// <summary>
/// 物料条码
/// </summary>
[Column("material_barcode")]
[StringLength(64)]
public string MaterialBarcode { get; set; }
}
}

@ -27,8 +27,9 @@ namespace Khd.Core.EntityFramework
public DbSet<BasePlcpoint> BasePlcpoint { get; set; }
public DbSet<BasePlc> BasePlc { get; set; }
public DbSet<MesBasePalletInfo> MesBasePalletInfo { get; set; }
public DbSet<MesProductPlanDetail> MesProductPlanDetail { get; set; }
public DbSet<WcsCmd> WcsCmd { get; set; }

@ -1,8 +1,10 @@
using Khd.Core.Domain.Models;
using Jc.SnowId;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Data;
@ -44,6 +46,7 @@ namespace Khd.Core.Wcs
StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表Agv任务模板
StaticData.DmsBaseAlarmRuleList = dbContext.DmsBaseAlarmRule.ToList();
foreach (var plcConfig in StaticData.PlcConfigs)
{
if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))
@ -120,7 +123,12 @@ namespace Khd.Core.Wcs
Console.WriteLine(ex.Message);
logger.Error(ex.Message + "\n" + ex.StackTrace);
}
}
}
}

@ -275,7 +275,7 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
_logger.Info("楼Agv下发任务失败" + item.taskType + result);
_logger.Info("2楼Agv下发任务失败" + item.taskType + result);
}
}
else if (item.taskType == StaticTaskType.SecondStorageToLift)//库位-提升机
@ -623,10 +623,21 @@ namespace Khd.Core.Wcs.Wcs
{
if (item.taskType == StaticTaskType.SecondLineToSmallPackage)
{
// 托盘库叫料信号
var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//小包入口叫料
if (agvPutValue !=null && Convert.ToInt32(agvPutValue) == 0)
//2F托盘库产线数据通讯情况
var ConnectStatus2FPoint = StaticData.BasePlcpointList.First(t => t.id == 73);
//2F托盘库入口上料光电
var PalletInIsHas2FPoint = StaticData.BasePlcpointList.First(t => t.id == 74);
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//托盘库叫料信号
var ConnectStatus2F = StaticData.PlcDic[2].Read(ConnectStatus2FPoint.plcpointAddress);//2F托盘库产线数据通讯情况
var PalletInIsHas2F = StaticData.PlcDic[2].Read(PalletInIsHas2FPoint.plcpointAddress);//2F托盘库入口上料光电
if (agvPutValue !=null && ConnectStatus2F != null && PalletInIsHas2F !=null&& Convert.ToInt32(agvPutValue) == 1 && Convert.ToInt32(ConnectStatus2F) == 1 && Convert.ToInt32(PalletInIsHas2F) == 0)
{
// 托盘库叫料信号,并且通讯正常,并且小包入口无料 ,才可放托盘
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
@ -654,8 +665,6 @@ namespace Khd.Core.Wcs.Wcs
}
if (item.taskType == StaticTaskType.SecondSmallPackageToStorage)
{
//WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId);
//if (wmsProductInstock != null)
//{
@ -696,6 +705,34 @@ namespace Khd.Core.Wcs.Wcs
warehouseFloor = 2,
warehouseId = wmsBaseLocation.warehouseId
};
#region 插入productStock表
WmsProductInstock wmsProductInstock = new WmsProductInstock();
wmsProductInstock.taskCode = StaticData.SnowId.NextId().ToString();
wmsProductInstock.warehouseId = wmsBaseLocation.warehouseId;
wmsProductInstock.warehouseFloor = 2;
wmsProductInstock.locationCode = wmsBaseLocation.locationCode;
wmsProductInstock.productType = "3";
wmsProductInstock.operationType = "3";
wmsProductInstock.planCode = mesBaseBarcodeInfo.planCode;
wmsProductInstock.planDetailCode = mesBaseBarcodeInfo.planDetailCode;
wmsProductInstock.SaleOrderId = mesBaseBarcodeInfo.saleOrderId;
wmsProductInstock.saleorderCode = mesBaseBarcodeInfo.saleorderCode;
wmsProductInstock.instockType = "1";
wmsProductInstock.productId = mesBaseBarcodeInfo.materialId;
wmsProductInstock.productBatch = mesBaseBarcodeInfo.barcodeInfo;
wmsProductInstock.instockAmount = mesBaseBarcodeInfo.amount;
wmsProductInstock.palletInfoCode = mesBaseBarcodeInfo.palletInfoCode;
wmsProductInstock.auditStatus = "1";
wmsProductInstock.executeStatus = "2";
wmsProductInstock.applyBy = "WCS";
wmsProductInstock.applyDate = DateTime.Now;
wmsProductInstock.updateBy = "WCS";
wmsProductInstock.updateDate = DateTime.Now;
wmsProductInstock.beginTime = DateTime.Now;
wmsProductInstock.endTime = DateTime.Now;
dbContext.Add(wmsProductInstock);
#endregion
//wmsProductInstockDetail.executeStatus = "2";
//wmsProductInstock.endTime = DateTime.Now;
//wmsProductInstock.executeStatus = "2";

@ -45,7 +45,13 @@ namespace Khd.Core.Wcs.Wcs
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var rfidPoint = StaticData.BasePlcpointList.First(t => t.id == 52);
var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53);
// 托盘库叫料信号
var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);
//2F托盘库产线数据通讯情况
var ConnectStatus2FPoint = StaticData.BasePlcpointList.First(t => t.id == 73);
//2F托盘库入口上料光电
var PalletInIsHas2FPoint = StaticData.BasePlcpointList.First(t => t.id == 74);
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 36);
List<string> canNotIn = new List<string>();
@ -54,13 +60,16 @@ namespace Khd.Core.Wcs.Wcs
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//小包入口叫料
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//托盘库叫料信号
var ConnectStatus2F = StaticData.PlcDic[2].Read(ConnectStatus2FPoint.plcpointAddress);//2F托盘库产线数据通讯情况
var PalletInIsHas2F = StaticData.PlcDic[2].Read(PalletInIsHas2FPoint.plcpointAddress);//2F托盘库入口上料光电
var agvGetValue = StaticData.PlcDic[2].Read(agvGetPoint.plcpointAddress);//小包出口的到位
var rfidValue = StaticData.PlcDic[2].ReadRFID(rfidPoint.plcpointAddress,15);//小包出口的RFID
if (agvGetValue != null && agvPutValue != null && rfidValue != null)//读Plc
if (agvGetValue != null && agvPutValue != null && rfidValue != null && ConnectStatus2F!=null && PalletInIsHas2F!=null)//读Plc
{
if (Convert.ToInt32(agvPutValue) == 0)//小包入口叫料
// 托盘库叫料信号,并且通讯正常,并且小包入口无料才可叫料
if (Convert.ToInt32(agvPutValue) == 1 && Convert.ToInt32(ConnectStatus2F) == 1 && Convert.ToInt32(PalletInIsHas2F) == 0)//小包入口叫料
{
bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 8 || t.endPointId == endEquip.objid).Any();//有没有生成任务

Loading…
Cancel
Save