master
2 years ago
parent d8cb081c2e
commit 36caed8d94

@ -26,14 +26,25 @@ namespace Khd.Core.Api.Controllers
public ReponseagvCallbackDto agvCallback(agvCallbackDto agvCallbackDto)
{
LogManager.Info($"RecieveRcsController接口信息{agvCallbackDto.ToJsonString()}");
if (agvCallbackDto.method == "start")
{
Thread.Sleep(1000);
}
Thread.Sleep(500);
return _application.AgvCallback(agvCallbackDto);
}
/// <summary>
/// 接收agv接收任务通知接口
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost("agvCallback2")]
public ReponseagvCallbackDto agvCallback2(agvCallbackDto agvCallbackDto)
{
LogManager.Info($"RecieveRcsController接口信息{agvCallbackDto.ToJsonString()}");
Thread.Sleep(500);
return _application.AgvCallback2(agvCallbackDto);
}
/// <summary>
/// 背负式Agv通知任务完成
/// </summary>

@ -11,10 +11,10 @@
//},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
//"DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
//"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True",
//"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True",
//"DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
"DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
},
"JwtSecurityOption": {
"SigningKey": "3c41f60c-1d12-11ec-890d-00163e1b8678",

@ -29,5 +29,6 @@ namespace Khd.Core.Application.Interface
AgvCompeletedResponse TaskContinue(TaskContinue taskContinue);
AgvCompeletedResponse TaskReturn(TaskReturn taskReturn);
ReponseagvCallbackDto AgvCallback2(agvCallbackDto agvCallbackDto);
}
}

@ -2,6 +2,7 @@
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
@ -57,6 +58,8 @@ namespace Khd.Core.Application
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcscmd.taskId);
if (wcsTask != null)
{
Console.WriteLine(agvCallbackDto.method.ToLower() + "," + wcscmd.objid + "," + wcscmd.taskCode);
LogManager.Info(agvCallbackDto.method.ToLower() + "," + wcscmd.objid + "," + wcscmd.taskCode);
//start 开始 end结束 continue继续
//待取货
if (agvCallbackDto.method.ToLower() == "start")
@ -77,25 +80,24 @@ namespace Khd.Core.Application
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 4;
wcsTask.taskStatus = 4;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmd.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmd { cmdStatus = 4 });
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 4 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTask { taskStatus = 4 });
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//已取货待放货
if (agvCallbackDto.method.ToLower() == "continue")
{
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 3;
wcsTask.taskStatus = 3;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmd.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmd { cmdStatus = 3 });
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 3 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTask { taskStatus = 3 });
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
@ -141,6 +143,7 @@ namespace Khd.Core.Application
}
catch (Exception ex)
{
LogManager.Error(ex);
reponseagvCallbackDto.code = "1";
reponseagvCallbackDto.message = ex.Message;
}
@ -180,14 +183,15 @@ namespace Khd.Core.Application
BaseEquip baseEquip = _dbContext.BaseEquip.FirstOrDefault(t => t.equipNo == agvCompeletedRequest.endStationCode);
if (baseEquip != null)
{
var wcsCmd = _dbContext.WcsCmd.Where(t => t.nextPointId == baseEquip.objid).FirstOrDefault();
var wcsCmd = _dbContext.WcsCmd.Where(t => t.nextPointId == baseEquip.objid).Where(t => t.cmdStatus == 5).FirstOrDefault();
if (wcsCmd != null)
{
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcsCmd.taskId);
if (wcsTask != null)
{
agvCompeletedResponse.code = "0";
agvCompeletedResponse.message = "成功";
if (wcsTask.taskType != 48)
{
wcsCmd.cmdStatus = 7;
wcsTask.taskStatus = 7;
_dbContext.WcsCmd.Update(wcsCmd);
@ -195,6 +199,22 @@ namespace Khd.Core.Application
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.SaveChanges();
agvCompeletedResponse.code = "0";
agvCompeletedResponse.message = "成功";
}
else
{
wcsCmd.cmdStatus = 4;
wcsTask.taskStatus = 4;
_dbContext.WcsCmd.Update(wcsCmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.SaveChanges();
agvCompeletedResponse.code = "0";
agvCompeletedResponse.message = "成功";
}
}
}
else
@ -211,6 +231,7 @@ namespace Khd.Core.Application
}
catch (Exception ex)
{
LogManager.Error(ex);
agvCompeletedResponse.code = "1";
agvCompeletedResponse.message = ex.Message;
}
@ -249,6 +270,7 @@ namespace Khd.Core.Application
}
catch (Exception ex)
{
LogManager.Error(ex);
compeletedResponse.code = "1";
compeletedResponse.message = ex.Message;
}
@ -286,10 +308,116 @@ namespace Khd.Core.Application
}
catch (Exception ex)
{
LogManager.Error(ex);
compeletedResponse.code = "1";
compeletedResponse.message = ex.Message;
}
return compeletedResponse;
}
public ReponseagvCallbackDto AgvCallback2(agvCallbackDto agvCallbackDto)
{
ReponseagvCallbackDto reponseagvCallbackDto = new ReponseagvCallbackDto();
try
{
_dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var wcscmd = _dbContext.WcsCmd
.Where(t => t.taskCode == agvCallbackDto.taskCode)
.FirstOrDefault();
if (wcscmd != null)
{
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcscmd.taskId);
if (wcsTask != null)
{
//start 开始 end结束 continue继续
//待取货
if (agvCallbackDto.method.ToLower() == "start")
{
wcscmd.cmdStatus = 2;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 2;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 2 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
if (agvCallbackDto.method.ToLower() == "con")
{
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 4;
wcsTask.taskStatus = 4;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 4 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//已取货待放货
if (agvCallbackDto.method.ToLower() == "continue")
{
if (wcscmd.cmdStatus > 3)
{
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 5;
wcsTask.taskStatus = 5;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 5 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
else
{
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 3;
wcsTask.taskStatus = 3;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 3 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
}
//放货完成
if (agvCallbackDto.method.ToLower() == "end")
{
wcscmd.cmdStatus = 7;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 7;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7});
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
}
}
else
{
reponseagvCallbackDto.code = "1";
reponseagvCallbackDto.message = "未找到当前任务";
}
}
catch (Exception ex)
{
LogManager.Error(ex);
reponseagvCallbackDto.code = "1";
reponseagvCallbackDto.message = ex.Message;
}
//返回请求
reponseagvCallbackDto.reqCode = reponseagvCallbackDto.reqCode;
return reponseagvCallbackDto;
}
}
}

@ -16,12 +16,16 @@ namespace Khd.Core.Domain.Dto.webapi
public class TaskContinue
{
public string BarCodeInfo { get; set; }
public string palletInfoCode { get; set; }
public long? materialId { get; set; }
public string endStationCode { get; set; }
}
public class TaskReturn
{
public string BarCodeInfo { get; set; }
public string palletInfoCode { get; set; }
public long? materialId { get; set; }
public string endStationCode { get; set; }
}

@ -17,7 +17,11 @@ namespace Khd.Core.Domain.Models
[Table("wcs_cmd_log")]
public class WcsCmdLog
{
/// <summary>
/// 任务代码
/// </summary>
[Column("task_code")]
public string taskCode { get; set; }
/// <summary>
/// 主键
/// </summary>

@ -31,7 +31,7 @@
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

@ -51,7 +51,7 @@ namespace Khd.Core.Wcs
WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1");
StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();
StaticData.BaseEquip = dbContext.BaseEquip.ToList();
StaticData.basePlcs = dbContext.BasePlc.ToList();
//StaticData.basePlcs = dbContext.BasePlc.ToList();
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();
foreach (var plcConfig in StaticData.PlcConfigs)
@ -72,8 +72,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();
@ -87,10 +87,10 @@ namespace Khd.Core.Wcs
//SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value, SecondBaseFloorEquip.equipNo);
//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, SecondFloorAgvEquip.equipNo);
//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, SecondFloorAgvEquip.equipNo);
secondFloorAGV.StartPoint();
////二楼线体
//var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 3).First();
@ -117,19 +117,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[1], 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[1], 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[2], 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[1], FifthFloorBearAgvEquip.floorNo.Value, FifthFloorBearAgvEquip.equipNo);
fiveFloorBearAgv.StartPoint();
//var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid==28).First();
//FiveFloorBearAgv fiveFloorBearAgv = new(_host, StaticData.PlcDic[1], FifthFloorBearAgvEquip.floorNo.Value, FifthFloorBearAgvEquip.equipNo);
//fiveFloorBearAgv.StartPoint();
}
catch (Exception ex)
{

@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Diagnostics;
internal class Program
{
@ -17,7 +18,14 @@ internal class Program
AppDomain.CurrentDomain.UnhandledException += GlobalExceptionHandler; //全局异常捕获
try
{
var mutex = new Mutex(true, "服务端", out bool ret);
Process[] processes = Process.GetProcessesByName("Khd.Core.Wcs");
if (processes.Length > 1)
{
Console.Write("系统已经启动,请勿重复启动1");
Console.ReadLine();
return;
}
var mutex = new Mutex(true, "Khd.Core.Wcs", out bool ret);
if (ret)
{
IHost host = CreateHostBuilder(args).Build();

@ -84,6 +84,10 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("出库任务监听启动成功");
}
/// <summary>
/// 半成品入库
/// </summary>
/// <param name="obj"></param>
private void CreateFiveProductInTaskLogic(object? obj)
{
using var scope = _host.Services.CreateScope();
@ -356,8 +360,7 @@ namespace Khd.Core.Wcs.Wcs
if (wmsRawReturn.executeStatus == "0")
{
//任务未开始Status=0
string startStation = wmsRawReturn.endStationCode;
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.equipNo == startStation);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.equipNo == wmsRawReturn.endStationCode);
WcsTask wcsTask = new()
{
objid = StaticData.SnowId.NextId(),
@ -607,7 +610,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.outstockAmount > t.realOutstockAmount)
.Where(t => t.auditStatus == "1")
.ToList();
List<WcsTaskManual> wcsTaskManuals = dbContext.WcsTaskManual.OrderBy(t => t.createBy).ToList();
List<WcsTaskManual> wcsTaskManuals = dbContext.WcsTaskManual.Where(t=>t.nextPointId== 11).OrderBy(t => t.createBy).ToList();
if (wcsTaskManuals.Count > 0)
{
WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First();
@ -1104,6 +1107,7 @@ namespace Khd.Core.Wcs.Wcs
{
}
Thread.Sleep(1000);
}

@ -57,10 +57,7 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
private readonly BasePlcpoint reserialno06;
/// <summary>
/// 是否可以写去向
/// </summary>
private readonly BasePlcpoint canwritewcsrun06;
public FirstFloor(IHost host, Plc.S7.Plc plc)
@ -87,7 +84,6 @@ 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>
@ -108,10 +104,90 @@ namespace Khd.Core.Wcs.Wcs
IsBackground = true
};
firstFloorHoister.Start();
Thread CallEmptyThread = new Thread(CallEmpty)
{
IsBackground = true
};
CallEmptyThread.Start();
Console.WriteLine(DateTime.Now + ":一楼提升机线程启动成功");
LogManager.Info("一楼提升机线程启动成功");
}
private void CallEmpty()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BasePlcpoint oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut");
BasePlcpoint someOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut");
BaseEquip mdjEquip = StaticData.BaseEquip.First(t => t.objid == 40);
while (true)
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var linesignal = this._plc.Read(this.linesignal01.plcpointAddress);
int taskCount = dbContext.WcsTask.Where(t => t.nextPointId == 6 && t.taskStatus > 0 && t.endPointId == 1).Count();
int firstFloorCount = dbContext.WcsTask.Where(t => t.currPointId == 1).Count();
if (Convert.ToInt32(linesignal) == 0 && taskCount == 0 && firstFloorCount == 0)
{
WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 40).FirstOrDefault();
if (wcsTaskManual != null)
{
if (wcsTaskManual.taskType == 58)
{
this._plc.WriteToPoint(oneOutPoint.plcpointAddress, "1", oneOutPoint.plcpointLength.ToString());
WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcsTaskManual);
wcsTask.createTime = DateTime.Now;
wcsTask.createBy = "一楼接驳位线程";
wcsTask.taskStatus = 0;
wcsTask.useFlag = 0;
wcsTask.isEmpty = "1";
wcsTask.remark = "一楼创建入库任务";
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
mdjEquip.emptyCount -= 1;
if (mdjEquip.emptyCount <= 0)
{
mdjEquip.emptyCount = 0;
}
dbContext.Update(mdjEquip);
dbContext.Add(wcsTaskLog);
dbContext.Add(wcsTask);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:空托盘任务下发成功");
Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功");
}
else if (wcsTaskManual.taskType == 61)
{
this._plc.WriteToPoint(someOutPoint.plcpointAddress, "1", someOutPoint.plcpointLength.ToString());
WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcsTaskManual);
wcsTask.createTime = DateTime.Now;
wcsTask.createBy = "一楼接驳位线程";
wcsTask.taskStatus = 0;
wcsTask.useFlag = 1;
wcsTask.isEmpty = mdjEquip.emptyCount.ToString();
wcsTask.remark = "一楼创建入库任务";
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
mdjEquip.emptyCount = 0;
dbContext.Update(mdjEquip);
dbContext.Add(wcsTaskLog);
dbContext.Add(wcsTask);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:空托盘任务下发成功");
Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功");
}
}
}
}
catch
{
}
Thread.Sleep(1000);
}
}
/// <summary>
/// 启动一楼接驳位线程
/// </summary>
@ -292,9 +368,6 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
//var automatic06Value = this._plc.Read(this.automatic.plcpointAddress);//提升机自动状态
//if (automatic06Value != null && Convert.ToInt32(automatic06Value) == 1)
//{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var serialno06Value = this._plc.Read(this.serialno06.plcpointAddress); //提升机流水号 读
@ -303,10 +376,9 @@ namespace Khd.Core.Wcs.Wcs
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 && canwritewcsrun06value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null)
if (targetfloor06Value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null)
{
//提升机空闲
if (Convert.ToInt32(equipstate06Value) == 0)
@ -331,8 +403,6 @@ namespace Khd.Core.Wcs.Wcs
if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress))
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)
{
//if (Convert.ToInt32(canwritewcsrun06value) == 0)
{
wcsTask.taskStatus = 2;
wcsTask.updateBy = "提升机线程";
@ -347,7 +417,6 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(lineEquip);
dbContext.SaveChanges();
}
}
else
{
wcsTask.taskStatus = 1;
@ -368,8 +437,6 @@ namespace Khd.Core.Wcs.Wcs
{
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress))
{
//if (Convert.ToInt32(canwritewcsrun06value) == 0)
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层
{
@ -386,7 +453,6 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
}
if (wcsTask.taskStatus == 2 && Convert.ToInt32(reserialno06) == wcsTask.serialNo)
{
if (Convert.ToInt32(hoisterTrayIn06Value) == 1)//托盘已经进提升机
@ -402,8 +468,6 @@ namespace Khd.Core.Wcs.Wcs
}
}
if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3且当前楼层为任务的目的楼层
{
//if (Convert.ToInt32(canwritewcsrun06value) == 0)
{
wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程";
@ -415,7 +479,6 @@ 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 if (wcsTask.taskStatus == 4)
{
BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
@ -436,7 +499,6 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
//}
}
catch (Exception ex)
{

@ -314,6 +314,7 @@ namespace Khd.Core.Wcs.Wcs
// Thread.Sleep(3000);
// }
//}
private bool CtuWaitLogic()
{
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == CTUID);

@ -9,6 +9,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using System.Runtime.Intrinsics.X86;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -76,6 +77,7 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2);
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == EquipID);
BaseEquip wasteEquip = StaticData.BaseEquip.First(t => t.objid == 38);
while (true)
{
try
@ -85,7 +87,6 @@ namespace Khd.Core.Wcs.Wcs
var taskList = dbContext.WcsTask
.Where(t => t.useFlag == 1)
.Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList();
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
foreach (var item in taskList)
{
if (taskList.Where(t => t.taskStatus > 0).Where(t => t.objid != item.objid).Any())
@ -96,7 +97,7 @@ namespace Khd.Core.Wcs.Wcs
if (item.taskStatus == 0)//下发任务
{
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
if (item.taskType == 50)
if (item.taskType == 51)//输送线-小包入口
{
WcsCmd wcsCmd = new WcsCmd()
{
@ -154,8 +155,9 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
else if (item.taskType == 51)
else if (item.taskType == 56)//废料工位-库位
{
var endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
@ -167,9 +169,69 @@ namespace Khd.Core.Wcs.Wcs
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = lineEquip.agvPositionCode,
currPointNo = wasteEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = outEquip.agvPositionCode,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.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(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
else if (item.taskType == 49)//小包出口-库位
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
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.currPointId,
currPointNo = outEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wmsBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
@ -212,8 +274,9 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("二楼Agv下发任务失败" + item.taskType + message);
}
}
else if (item.taskType == 52)
else if (item.taskType == 57)//周转位-提升机
{
var startPoint = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
@ -225,7 +288,7 @@ namespace Khd.Core.Wcs.Wcs
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = lineEquip.agvPositionCode,
currPointNo = startPoint.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = lineEquip.agvPositionCode,
};
@ -253,8 +316,8 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程继续任务" + item.objid + "," + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程继续任务" + item.startPointNo + "," + item.endPointNo);
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -267,7 +330,303 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
LogManager.Info("二楼Agv下发任务失败" + item.taskType + message);
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
else if (item.taskType == 50)//库位-提升机
{
var startPoint = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WcsCmd wcsCmd = new WcsCmd()
{
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.currPointId,
currPointNo = startPoint.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = lineEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.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(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
else if (item.taskType == 55)//2F移库
{
WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
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.currPointId,
currPointNo = fromWmsBaseLocation.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = toWmsBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
positionCodePath = new List<Position>
{
new()
{
positionCode = wcsCmd.currPointNo,
type = "00"
},
new()
{
positionCode = wcsCmd.nextPointNo,
type = "00"
}
}
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
else if (item.taskType == 53)//提升机-废料工位
{
WcsCmd wcsCmd = new WcsCmd()
{
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.currPointId,
currPointNo = lineEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wasteEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.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(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
else if (item.taskType == 54)//周转位-废料工位
{
var wasteEquipLocation = StaticData.BaseEquip.FirstOrDefault(t => t.objid == item.startPointId);
if (wasteEquipLocation != null)
{
WcsCmd wcsCmd = new WcsCmd()
{
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.currPointId,
currPointNo = wasteEquipLocation.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wasteEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.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(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
}
else if (item.taskType == 58)//提升机到周转位
{
var endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
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.currPointId,
currPointNo = lineEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.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(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
}
@ -278,6 +637,12 @@ namespace Khd.Core.Wcs.Wcs
{
LogManager.Info("二楼AGV线程完成任务" + item.objid);
if (wcsCmd.cmdStatus == 3)
{
if (wcsCmd.currPointId == lineEquip.objid)
{
var lineSignal02 = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02").plcpointAddress);
var rfid = StaticData.PlcDic[0].ReadRFID(StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID002").plcpointAddress);
if (lineSignal02 != null && rfid != null && rfid == item.containerNo && lineSignal02.ToString() == "1")
{
var agvTask = new RequestAGVTaskDto
{
@ -297,42 +662,303 @@ namespace Khd.Core.Wcs.Wcs
dbContext.SaveChanges();
}
}
}
else if (wcsCmd.currPointId == wasteEquip.objid)
{
if (true)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 4;
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
}
}
else if (wcsCmd.currPointId == outEquip.objid)
{
if (true)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 4;
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
}
}
else
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 4;
item.taskStatus = 4;
dbContext.Update(wcsCmd);
dbContext.Update(item);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
}
}
else if (wcsCmd.cmdStatus == 5)
{
if (item.taskType == 50)
if (item.taskType == 53)
{
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.SaveChanges();
if (true)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 6;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.taskId == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.SaveChanges();
}
}
}
else if (item.taskType == 51)
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.containerCode = item.containerNo;
dbContext.Update(wmsBaseLocation);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.taskId == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
}
else if (item.taskType == 52)
if (true)
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.containerCode = null;
dbContext.Update(wmsBaseLocation);
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 6;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.Remove(wcsCmd);
dbContext.SaveChanges();
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.taskId == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.SaveChanges();
}
}
}
}
else if (item.taskStatus == 7)
{
if (item.taskType == 49)
{
WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId);
if (wmsProductInstock != null)
{
WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.FirstOrDefault(t => t.productInstockId == wmsProductInstock.productInstockId);
if (wmsProductInstockDetail != null)
{
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBasePalletInfo != null)
{
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBaseBarcodeInfo != null)
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = item.containerNo;
WmsProductStock wmsProductStock = new WmsProductStock()
{
productId = mesBasePalletInfo.materialId,
activeFlag = "1",
frozenAmount = 0,
createBy = "WCS",
createDate = DateTime.Now,
updateBy = "WCS",
updateDate = DateTime.Now,
instockDate = DateTime.Now,
locationCode = wmsBaseLocation.locationCode,
occupyAmount = 0,
totalAmount = 1,
palletInfoCode = item.containerNo,
planCode = wmsProductInstock.planCode,
planDetailCode = wmsProductInstock.planDetailCode,
productBatch = mesBasePalletInfo.materialBarcode,
saleorderCode = wmsProductInstock.saleorderCode,
productStockId = StaticData.SnowId.NextId(),
saleOrderId = wmsProductInstock.SaleOrderId,
stockType = "3",
qualityStatus = "0",
warehouseFloor = 2,
warehouseId = wmsBaseLocation.warehouseId
};
wmsProductInstockDetail.executeStatus = "2";
wmsProductInstock.endTime = DateTime.Now;
wmsProductInstock.executeStatus = "2";
dbContext.Update(wmsProductInstockDetail);
dbContext.Add(wmsProductStock);
dbContext.Update(wmsBaseLocation);
dbContext.Update(wmsProductInstock);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
}
}
}
}
else if (item.taskType == 50)
{
WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == item.orderId);
if (wmsProductOutstock != null)
{
WmsProductOutstockDetail? wmsProductOutstockDetail = dbContext.WmsProductOutstockDetail.FirstOrDefault(t => t.productOutstockId == wmsProductOutstock.productOutstockId);
if (wmsProductOutstockDetail != null)
{
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.startPointId).First();
WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode);
wmsProductOutstockDetail.executeStatus = "2";
wmsProductOutstock.endTime = DateTime.Now;
wmsProductOutstock.executeStatus = "2";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.containerCode = null;
dbContext.Remove(wmsProductStock);
dbContext.Update(wmsBaseLocation);
dbContext.Update(wmsProductOutstockDetail);
dbContext.Update(wmsProductOutstock);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
}
}
else if (item.taskType == 58)
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
endEquip.equipStatus = 1;
endEquip.emptyCount = Convert.ToInt32(item.isEmpty);
dbContext.Update(endEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 53)
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0;
dbContext.Update(startEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 51)
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0;
dbContext.Update(startEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 54)
{
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 55)
{
WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
fromWmsBaseLocation.locationStatus = "1";
toWmsBaseLocation.locationStatus = "1";
fromWmsBaseLocation.outstockFlag = "0";
toWmsBaseLocation.outstockFlag = "0";
fromWmsBaseLocation.instockFlag = "0";
toWmsBaseLocation.instockFlag = "0";
fromWmsBaseLocation.containerCode = null;
toWmsBaseLocation.containerCode = item.containerNo;
dbContext.Update(fromWmsBaseLocation);
dbContext.Update(toWmsBaseLocation);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 56)
{
wasteEquip.emptyCount = 0;
wasteEquip.equipStatus = 0;
dbContext.Remove(item);
dbContext.Update(wasteEquip);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 57)
{
BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
emptyEquip.emptyCount = 0;
emptyEquip.equipStatus = 0;
item.taskStatus = 8;
dbContext.Update(item);
dbContext.Update(emptyEquip);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.SaveChanges();
}
}
}
@ -341,6 +967,7 @@ namespace Khd.Core.Wcs.Wcs
}
catch (Exception ex)
{
LogManager.Error(ex);
}
finally

@ -18,11 +18,6 @@ namespace Khd.Core.Wcs.Wcs
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;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
int FloorNo { get; set; }
string EquipNo = "";
public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
@ -31,12 +26,6 @@ namespace Khd.Core.Wcs.Wcs
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"));
this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet"));
this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
@ -66,39 +55,26 @@ namespace Khd.Core.Wcs.Wcs
{
using var scope = _host.Services.CreateScope();
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);
while (true)
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//入库任务
var rfid = this._plc.Read(LineRFID.plcpointAddress);
var isSignal = this._plc.Read(LineSignal.plcpointAddress); //到位信号
var isPallet = this._plc.Read(LineIsPallet.plcpointAddress);//是否有托盘
if (rfid != null && isSignal != null && isPallet != null)
var agvGetValue = this._plc.Read(agvGetPoint.plcpointAddress);
var agvPutValue = this._plc.Read(agvPutPoint.plcpointAddress);
var rfidValue = this._plc.ReadRFID(rfidPoint.plcpointAddress);
if (agvGetValue != null && agvPutValue != null && rfidValue != null)
{
//正常读到输送线信息 有到位信号,并且有托盘,获取条码信息
if (Convert.ToInt32(isSignal) > 0 && Convert.ToInt32(isPallet) == 1)
if(Convert.ToBoolean(agvPutValue))
{
//获取条码信息
var palletNo = Convert.ToString(rfid);
//获取入库任务
var wcsTask = GetTask(palletNo, FloorNo, EquipNo);
//判断是否为出库任务
if (wcsTask.taskType == 5)
{
var nextEquip = StaticData.BaseEquip.Where(t => t.floorNo == FloorNo && t.equipType == 4).FirstOrDefault();
//更新任务下一点位为AGV
wcsTask.nextPointId = nextEquip.objid;
wcsTask.nextPointNo = nextEquip.equipNo;
wcsTask.updateTime = DateTime.Now;
wcsTask.updateBy = FloorNo + "楼输送线";
dbContext.Update(wcsTask);
dbContext.SaveChanges();
////入库任务
////下发agv任务
//SendTask(wcsTask);
}
if (Convert.ToBoolean(agvGetValue) && !string.IsNullOrEmpty(rfidValue))
{
}
}
}
@ -112,117 +88,5 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
//获取输送线上的任务
public WcsTask GetTask(string containerNo, int floorNo, string equipNo)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var wcsTask = new WcsTask();
var wareHouseList = StaticData.WmsBaseWarehouse.ToList();
try
{
//获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv
var task = StaticData.WcsTask.Where(t => t.containerNo == containerNo).FirstOrDefault();
if (task == null)
{
var palletInfo = StaticData.MesBasePalletInfo.Where(t => t.palletInfoCode == containerNo).FirstOrDefault();
//查询该条码绑定的物料信息
var material = StaticData.WmsWarehouseMaterial.Where(t => t.storageId == palletInfo.materialId).FirstOrDefault();
var wareHouse = wareHouseList.Where(t => t.warehouseId == material.warehouseId).FirstOrDefault();
var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.agvType == "I" && t.dicField == wareHouse.warehouseInstockType).FirstOrDefault();
var equip = StaticData.BaseEquip.ToList();
var startEquip = equip.Where(t => t.equipNo == equipNo).FirstOrDefault();
var endPoint = wareHouseList.Where(t => t.warehouseFloor == floorNo).FirstOrDefault();
//var currEquip=
if (palletInfo != null)
{
//自动获取id
var objid = StaticData.SnowId.NextId();
WcsTask newTask = new()
{
objid = objid,
taskType = Convert.ToInt32(dic.dicValue),
containerNo = containerNo,
taskStatus = 0,
materialId = material.storageId,
qty = Convert.ToInt32(palletInfo.bindAmount),
startPointId = startEquip.objid,
startPointNo = equipNo,
currPointId = startEquip.objid,
currPointNo = equipNo,
endPointId = endPoint.warehouseId,
endPointNo = endPoint.warehouseCode,
};
dbContext.Add(newTask);
dbContext.SaveChanges();
wcsTask = newTask;
}
else
{
LogManager.Info(floorNo + "楼接驳位,托盘" + containerNo + "未绑定!");
}
}
else
{
wcsTask = StaticData.WcsTask.Where(t => t.currPointNo == equipNo).FirstOrDefault();
}
}
catch (Exception ex)
{
LogManager.Info(floorNo + "楼接驳位异常" + ex.Message);
throw;
}
return wcsTask;
}
/// <summary>
/// 下发任务
/// </summary>
/// <param name="task"></param>
public void SendTask(WcsTask task)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
//入库类型
List<int> taskInType = new List<int> { 1, 3, 5, 7 };
List<int> taskOutType = new List<int> { 2, 4, 6, 8 };
try
{
//获取
if (task == null) return;
if (taskInType.Contains(task.taskType.GetValueOrDefault()))
{
//首先判断是否已下发指令
var cmd = StaticData.WcsCmd.Where(t => t.taskId == task.objid).FirstOrDefault();
//指令表存在说明已下发
if (cmd != null) return;
//获取下发agv指令
string ip = ""; int port = 0; string url = "";
RequestAGVTaskDto agvtask = new RequestAGVTaskDto();
agvtask.reqCode = task.serialNo.ToString();
var json = JsonConvert.SerializeObject(agvtask);
HttpHelper.SendPostMessage(ip, port, url, json);
//未下发给agv下发指令
WcsCmd taskCmd = new WcsCmd()
{
taskId = task.objid,
cmdType = task.taskType,
serialNo = task.serialNo,
equipmentNo = task.equipmentNo,
cmdStatus = 1,
createBy = "",
createTime = DateTime.Now,
};
dbContext.Add(taskCmd);
dbContext.SaveChanges();
}
}
catch (Exception)
{
throw;
}
}
}
}

@ -69,6 +69,8 @@ namespace Khd.Core.Wcs.Wcs
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
@ -77,6 +79,7 @@ namespace Khd.Core.Wcs.Wcs
//入库任务
var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress);
var isSignal = this._plc.Read(LineSignal.plcpointAddress);
StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);
if (rfid != null && isSignal != null)
{
//正常读到输送线信息 有到位信号,并且有托盘,获取条码信息
@ -89,9 +92,11 @@ namespace Khd.Core.Wcs.Wcs
.FirstOrDefault(t => t.containerNo == palletNo && t.nextPointId == baseEquip.objid);
if (wcsTask != null)
{
if (wcsTask.taskStatus == 5)//入,提升机任务是完成状态
if (wcsTask.taskStatus == 5)//入托盘入口,提升机任务是完成状态
{
dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Delete();
if (wcsTask.taskType != 99)
{
dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
@ -113,6 +118,56 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo);
}
else
{
}
}
else if (wcsTask.taskStatus == 6)
{
WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == wcsTask.orderId);
if (wmsProductOutstock != null)
{
BaseEquip? endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsProductOutstock.endStationCode);
if (endEquip != null)
{
dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.serialNo = SystemData.GetSerialNo(dbContext);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId = tsjEquip.objid;
newTask.nextPointNo = tsjEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
newTask.endPointId = endEquip.objid;
newTask.endPointNo = endEquip.equipNo;
newTask.containerNo = palletNo;
newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo;
newTask.taskType = 6;
newTask.useFlag = 1;
newTask.fromFloorNo = 2;
newTask.floorNo = endEquip.floorNo;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务出库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务出库成功,托盘号:" + palletNo);
}
else
{
LogManager.Info("二楼接驳位出库任务出库失败,找不到终点站点");
Console.WriteLine(DateTime.Now + ":二楼接驳位出库任务出库失败,找不到终点站点");
}
}
else
{
LogManager.Info("二楼接驳位出库任务出库失败,找不到订单信息");
Console.WriteLine(DateTime.Now + ":二楼接驳位出库任务出库失败,找不到订单信息");
}
}
}
}
}

@ -6,14 +6,14 @@
//"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
},
"PlcConfigs": [
//{
// "IP": "192.168.2.30",
// "Port": 102, //102
// "CpuType": 40,
// "Rack": 0,
// "Slot": 1,
// "Code": 0
//},
{
"IP": "192.168.2.30",
"Port": 102, //102
"CpuType": 40,
"Rack": 0,
"Slot": 1,
"Code": 0
},
{
"IP": "192.168.2.31",
"Port": 102, //102
@ -22,14 +22,14 @@
"Slot": 1,
"Code": 1
},
//{
// "IP": "192.168.2.220",
// "Port": 102, //102
// "CpuType": 40,
// "Rack": 0,
// "Slot": 1,
// "Code": 2
//}
{
"IP": "192.168.2.220",
"Port": 102, //102
"CpuType": 40,
"Rack": 0,
"Slot": 1,
"Code": 2
}
],
"PLCSetting": {
"Mode": "0",

@ -25,6 +25,7 @@
</ResourceDictionary.MergedDictionaries>
<local:TypeDataConverter x:Key="taskTypeConverter"/>
<local:EquipConverter x:Key="EquipConverter"/>
<local:AgvTaskStatusConverter x:Key="AgvTaskStatusConverter"/>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Width" Value="120"></Setter>
<Setter Property="Template">
@ -169,6 +170,7 @@
<Setter Property="TextAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Height" Value="auto"/>
</Style>
<Style x:Key="DefaultButton" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="White" />
@ -562,8 +564,8 @@
Header="任务类型"
IsReadOnly="True" />
<DataGridTextColumn
Width="200*"
Binding="{Binding taskStatus}"
Width="300*"
Binding="{Binding ., Converter={StaticResource AgvTaskStatusConverter}}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
@ -1396,7 +1398,7 @@
<Grid Height="1100" Width="1700">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="1041"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Border Background="#213269" BorderBrush="Silver" BorderThickness="2" CornerRadius="10" Margin="0,5,0,0">
@ -1410,18 +1412,21 @@
</Border>
<DataGrid Grid.Row="1" AlternationCount="2"
AutoGenerateColumns="False"
MinRowHeight="50"
Background="#172557"
CanUserAddRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
Focusable="False"
Height="auto"
HeadersVisibility="Column"
IsReadOnly="True"
LoadingRow="dgData_LoadingRow"
RowHeaderWidth="0"
SelectionMode="Single" FontSize="16"
Visibility="Visible" x:Name="PersonCallMaterial">
Visibility="Visible"
x:Name="PersonCallMaterial">
<DataGrid.Columns>
<DataGridTemplateColumn Width="130*" Header="选择">
<DataGridTemplateColumn.CellTemplate>
@ -1475,19 +1480,30 @@
<DataGridTextColumn
Width="180*"
Binding="{Binding materialName}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
CanUserSort="False"
FontSize="20"
Header="物料名称"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
<!--<DataGridTextColumn
Width="250*"
Binding="{Binding materialSpec}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="物料规格"
IsReadOnly="True" />
IsReadOnly="True" />-->
<DataGridTemplateColumn
Width="350*"
CanUserSort="False"
Header="物料规格"
IsReadOnly="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding materialSpec}" Height="auto" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="180*"
Binding="{Binding palletInfoCode}"
@ -1496,37 +1512,52 @@
FontSize="20"
Header="料箱号"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding instockDate}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="入库时间"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
<!--<DataGridTextColumn
Width="130*"
Binding="{Binding totalAmount}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="总数"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
IsReadOnly="True" />-->
<DataGridTemplateColumn
Width="130*"
CanUserSort="False"
Header="总数"
IsReadOnly="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding totalAmount}" Height="auto" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--<DataGridTextColumn
Width="130*"
Binding="{Binding frozenAmount}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="冻结数量"
IsReadOnly="True" />
IsReadOnly="True" />-->
<DataGridTemplateColumn
Width="130*"
CanUserSort="False"
Header="冻结数量"
IsReadOnly="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding frozenAmount}" Height="auto" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="50" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Margin" Value="5"/>
<Setter Property="Height" Value="auto"/>
</Style>
</DataGrid.CellStyle>
@ -1534,7 +1565,7 @@
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="50" />
<Setter Property="Height" Value="auto"/>
</Style>
</DataGrid.RowStyle>
<DataGrid.RowHeaderStyle>
@ -1623,9 +1654,15 @@
<TextBlock Text="扫描料箱号:" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Text="扫描条码号:" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Text="入库数量:" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<hc:TextBox x:Name="txtInBox" hc:InfoElement.ShowClearButton="True" FontSize="50" LostFocus="txtInBox_TextChanged" Width="500" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="2"/>
<hc:TextBox x:Name="txtInBarCode" hc:InfoElement.ShowClearButton="True" FontSize="50" LostFocus="txtInBarCode_TextChanged" Width="500" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="2"/>
<hc:TextBox x:Name="txtInScan" FontSize="50" IsReadOnly="True" Width="500" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="2" />
<hc:TextBox x:Name="txtInBox" hc:InfoElement.ShowClearButton="True" FontSize="50" LostFocus="txtInBox_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="3"/>
<Button Click="barClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="0,0,130,0" Grid.Column="5" Grid.Row="2">
<Image Source="..\Resources\cancel.png"/>
</Button>
<Button Click="boxClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="0,0,130,0" Grid.Column="5" Grid.Row="1">
<Image Source="..\Resources\cancel.png"/>
</Button>
<hc:TextBox x:Name="txtInBarCode" hc:InfoElement.ShowClearButton="True" FontSize="50" LostFocus="txtInBarCode_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="3"/>
<hc:TextBox x:Name="txtInScan" FontSize="50" IsReadOnly="True" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="3" />
<Button Content="确认入库" Grid.Row="4" Grid.ColumnSpan="6" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White" Click="InRawBaseLocaltion_Click"/>
<Button Content="一键收料" Grid.Row="5" Grid.ColumnSpan="6" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White" Click="callPlc_Click"/>
<Button Content="执行CTU入库任务" Visibility="Hidden" Click="btnCtuInConfirmBox_Click" Grid.Row="5" Grid.ColumnSpan="6" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White"/>
@ -1764,13 +1801,18 @@
<Button Content="执行CTU出库任务" Visibility="Hidden" Grid.Row="0" Grid.Column="3" Grid.ColumnSpan="2" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White" Click="ExecuteCtuTask_Click"/>
<TextBlock Text="扫描料箱号:" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Text="扫描条码号:" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<Button Click="boxOutClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="0,0,130,0" Grid.Column="5" Grid.Row="1">
<Image Source="..\Resources\cancel.png"/>
</Button>
<Button Click="barOutClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="0,0,130,0" Grid.Column="5" Grid.Row="2">
<Image Source="..\Resources\cancel.png"/>
</Button>
<TextBlock Text="出库数量:" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<hc:TextBox hc:InfoElement.ShowClearButton="True" x:Name="txtOutBox" FontSize="50" LostFocus="txtOutBox_TextChanged" Width="500" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="2"/>
<hc:TextBox hc:InfoElement.ShowClearButton="True" x:Name="txtOutBarCode" FontSize="50" LostFocus="txtOutBarCode_TextChanged" Width="500" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="2"/>
<hc:TextBox x:Name="txtOutScan" IsReadOnly="True" FontSize="50" Width="500" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="2" />
<hc:TextBox hc:InfoElement.ShowClearButton="True" x:Name="txtOutBox" FontSize="50" LostFocus="txtOutBox_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="3"/>
<hc:TextBox hc:InfoElement.ShowClearButton="True" x:Name="txtOutBarCode" FontSize="50" LostFocus="txtOutBarCode_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="3"/>
<hc:TextBox x:Name="txtOutScan" IsReadOnly="True" FontSize="50" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="3" />
<Button Content="确认出库" Grid.Row="4" Grid.ColumnSpan="6" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White" Click="OutRawBaseLocaltion_Click"/>
<Button Content="背负式小车捡料完成" Grid.Row="5" Grid.ColumnSpan="6" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White" Click="btnBearConfirmBox_Click"/>
</Grid>
<!--<Border Background="#213269" BorderBrush="Silver" BorderThickness="2" CornerRadius="10" Width="900" Height="500" Margin="0,5,0,0">
<StackPanel Margin="0,10,10,10">
@ -1870,6 +1912,28 @@
</StackPanel>
</StackPanel>
</TabItem>
<TabItem Header="一楼堆垛机" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="125" Margin="5">
<Grid Height="1060" Width="1729">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="堆垛机内托盘数量:" FontSize="75" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="0" Grid.ColumnSpan="2"/>
<TextBlock x:Name="DDJEmptyCount" FontSize="75" VerticalAlignment="Center" HorizontalAlignment="Left" Grid.Column="2" Grid.ColumnSpan="2"/>
<Button x:Name="OneIn" Background="#346DFF" Foreground="White" Content="入一个空托盘" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="200" FontSize="75" Click="OneIn_Click"/>
<Button Background="#346DFF" Foreground="White" Content="修改" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" Width="300" Height="200" FontSize="75" Click="UpdateEmpty_Click"/>
<Button x:Name="SomeIn" Background="#346DFF" Foreground="White" Content="入一螺空托盘" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="200" FontSize="75" Click="SomeIn_Click"/>
<Button x:Name="OneOut" Background="#346DFF" Foreground="White" Content="出一个空托盘" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="200" FontSize="75" Click="OneOut_Click"/>
<Button x:Name="SomeOut" Background="#346DFF" Foreground="White" Content="出一螺空托盘" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="200" FontSize="75" Click="SomeOut_Click"/>
</Grid>
</TabItem>
<TabItem Header="PLC信息" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="125" Margin="5">
<StackPanel x:Name="splPlcMessage" Height="1060" Width="1729" Background="#213269" Canvas.Left="175" Canvas.Top="110" Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Width="1750">
@ -2021,7 +2085,7 @@
FontSize="30"
Width="170"
Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Button Content="打键盘" Background="#346DFF" Foreground="White" Width="150" Height="75" FontSize="25" Click="Button_Click"/>
<Button Content="打键盘" Background="#346DFF" Foreground="White" Width="150" Height="75" FontSize="25" Click="Button_Click"/>
</StackPanel>
</StackPanel>
</Grid>

@ -35,6 +35,7 @@ using System.Security.Cryptography.Xml;
using Newtonsoft.Json;
using Khd.Core.Domain.Dto.webapi;
using System.Text;
using AngleSharp.Common;
namespace Khd.Core.Wpf.Form
{
@ -61,7 +62,7 @@ namespace Khd.Core.Wpf.Form
List<long?> CallSelectedItem = new List<long?>();
public List<MesBaseBarcodeInfo> barcodeLsit = new List<MesBaseBarcodeInfo>();
private int pageCount = 15;
private object updateLock = new object();
private void ScanMessage()
{
@ -85,9 +86,9 @@ namespace Khd.Core.Wpf.Form
}
}
}
catch
catch (Exception ex)
{
LogManager.Error(ex);
}
Thread.Sleep(500);
}
@ -114,6 +115,9 @@ namespace Khd.Core.Wpf.Form
dispatcherTimer.Tick += new EventHandler(ShowTime); //委托刷新时间方法
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1000);
dispatcherTimer.Start();
Thread ddjThread = new Thread(ddjTimer);
ddjThread.Start();
//LogManager.Info($"--------------------------当前时间 :{DateTime.Now} >>> 客户端启动;");
//设置显示任务栏
if (WindowState == WindowState.Normal)
@ -121,6 +125,8 @@ namespace Khd.Core.Wpf.Form
MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
WindowState = WindowState.Maximized;
}
Task.Run(() =>
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
SystemData.BasePlcpoints = dbContext.BasePlcpoint.ToList();
@ -128,35 +134,32 @@ namespace Khd.Core.Wpf.Form
SystemData.BaseEquip = dbContext.BaseEquip.ToList();
SystemData.BaseWareHouse = dbContext.WmsBaseWarehouse.ToList();
SystemData.MesBaseMaterialInfo = dbContext.MesBaseMaterialInfo.Take(100).ToList();
//MaterialName.ItemsSource = SystemData.MesBaseMaterialInfo;
Dispatcher.Invoke(() =>
{
WarehourseId.ItemsSource = SystemData.BaseWareHouse.Where(t => t.warehouseFloor != 1 && t.warehouseFloor != 4).ToList();
Task.Run(() =>
{
while (true)
{
});
});
//MaterialName.ItemsSource = SystemData.MesBaseMaterialInfo;
try
{
serialPortModel = new SerialPortModel();
serialPortModel.PortName = "COM7";
serialPortModel.PortName = "COM1";
serialPortModel.BaudRate = 9600;
serialPortModel.DataBits = 8;
serialPortModel.Parity = Parity.None;
serialPortModel.StopBits = StopBits.One;
serialPortHelper = new SerialPortHelper();
serialPortHelper.OpenMyConn(serialPortModel);
Thread scanThread = new Thread(ScanMessage);
scanThread.IsBackground = true;
scanThread.Start();
break;
}
catch
catch (Exception ex)
{
MessageBox.Show("条码枪连接失败" + ex.Message);
}
Thread.Sleep(10000);
}
});
foreach (var plcConfig in SystemData.PlcConfigs)
{
@ -245,6 +248,53 @@ namespace Khd.Core.Wpf.Form
}
}
private void ddjTimer(object? obj)
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
while (true)
{
try
{
lock (updateLock)
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
Dispatcher.Invoke(() =>
{
this.DDJEmptyCount.Text = baseEquip.emptyCount.ToString();
if (baseEquip.emptyCount == 0)
{
this.OneIn.IsEnabled = true;
this.SomeIn.IsEnabled = true;
this.OneOut.IsEnabled = false;
this.SomeOut.IsEnabled = false;
}
else if (baseEquip.emptyCount > 0 && baseEquip.emptyCount < 10)
{
this.OneIn.IsEnabled = true;
this.SomeIn.IsEnabled = false;
this.OneOut.IsEnabled = true;
this.SomeOut.IsEnabled = true;
}
else if (baseEquip.emptyCount >= 10)
{
this.OneIn.IsEnabled = false;
this.SomeIn.IsEnabled = false;
this.OneOut.IsEnabled = true;
this.SomeOut.IsEnabled = true;
}
});
}
}
catch
{
}
Thread.Sleep(5000);
}
}
private void ShowTime(object? sender, EventArgs e)
{
try
@ -1030,7 +1080,7 @@ namespace Khd.Core.Wpf.Form
}
}
}
dbContext.WcsTask.Where(t => ids.Contains(t.objid)).Update(t => new WcsTask { useFlag = 1, taskStatus = 0 });
dbContext.WcsTask.Where(t => ids.Contains(t.objid)).Update(t => new WcsTask { useFlag = 1 });
GetTask();
}
}
@ -1251,15 +1301,16 @@ namespace Khd.Core.Wpf.Form
txtInScan.Text = string.Empty;
return;
}
//20240708142603RB014
var newRawStock = new WmsRawStock()
{
materialId = material.materialId,
supplierId = material.manufacturerId,
instockBatch = material.batchCode,
instockBatch = txtInBarCode.Text,
locationCode = container.locationCode,
stockType = "1",
palletInfoCode = container.containerCode,
totalAmount = material.batchFlag == "1" ? 1 : material.amount,
totalAmount = material.batchFlag == "1" ? material.amount : 1,
activeFlag = "1",
occupyAmount = 0,
completeFlag = "1",
@ -1285,9 +1336,10 @@ namespace Khd.Core.Wpf.Form
MessageBox.Show("请先扫描容器号和条码!");
}
}
catch
catch (Exception ex)
{
LogManager.Error(ex);
MessageBox.Show("入库失败");
}
}
/// <summary>
@ -1356,14 +1408,14 @@ namespace Khd.Core.Wpf.Form
}
else
{
txtInScan.Text = (mesBaseMaterialInfo.BatchFlag == 1 ? mesBaseMaterialInfo.BatchAmount : 1).ToString();
txtInScan.Text = (material.batchFlag == "1" ? material.amount : 1).ToString();
if (mesBaseMaterialInfo.BatchFlag == 0)
{
txtInScan.IsReadOnly = true;
}
else
{
txtInScan.IsReadOnly = false;
txtInScan.IsReadOnly = true;
}
}
}
@ -1433,7 +1485,7 @@ namespace Khd.Core.Wpf.Form
}
else
{
var mesBaseMaterialInfo = dbContext.MesBaseMaterialInfo.FirstOrDefault(t => t.MaterialId == wmsRawStock.materialId);
var mesBaseMaterialInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.materialId == wmsRawStock.materialId);
if (mesBaseMaterialInfo == null)
{
MessageBox.Show("未查询到该条码绑定的物料信息!");
@ -1443,14 +1495,14 @@ namespace Khd.Core.Wpf.Form
}
else
{
txtOutScan.Text = (mesBaseMaterialInfo.BatchFlag == 1 ? (wmsRawStock.totalAmount - wmsRawStock.frozenAmount) : 1).ToString();
if (mesBaseMaterialInfo.BatchFlag == 0)
txtOutScan.Text = (mesBaseMaterialInfo.batchFlag == "1" ? (wmsRawStock.totalAmount - wmsRawStock.frozenAmount) : 1).ToString();
if (mesBaseMaterialInfo.batchFlag == "1")
{
txtOutScan.IsReadOnly = true;
txtOutScan.IsReadOnly = false;
}
else
{
txtOutScan.IsReadOnly = false;
txtOutScan.IsReadOnly = true;
}
}
}
@ -1596,8 +1648,23 @@ namespace Khd.Core.Wpf.Form
.Where(t => t.warehouseId == 512)
.WhereIf(materialIds.Count > 0, t => materialIds.Contains(t.materialId))
.ToList();
//var groupWmsRawStock = wmsRawStocks.GroupBy(t => new { t.materialId, t.palletInfoCode }).Select(t => new { Key = t.Key, Value = t.Sum(x => x.totalAmount) });
var palletInfoCodes = wmsRawStocks.Select(t => t.palletInfoCode).ToList();
var groupWmsRawStock = wmsRawStocks.GroupBy(t => new { t.materialId, t.palletInfoCode }).Select(t =>
new
{
materialId = t.Key.materialId,
palletInfoCode = t.Key.palletInfoCode,
totalAmount = t.Sum(x => x.totalAmount),
frozenAmount = t.Sum(x => x.frozenAmount),
});
//.GroupBy(t => t.palletInfoCode)
//.Select(t => new
//{
// palletInfoCode = t.Key,
// totalAmount = string.Join("\n", t.Select(x => x.totalAmount)),
// frozenAmount = string.Join("\n", t.Select(x => x.frozenAmount)),
// materialId = string.Join("\n", t.Select(x => x.materialId)),
//}).ToList();
var palletInfoCodes = wmsRawStocks.Select(t => t.palletInfoCode).Distinct().ToList();
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.ContainerStatus == "1")
.Where(t => t.warehouseId == 512)
@ -1607,27 +1674,41 @@ namespace Khd.Core.Wpf.Form
materialInfos = dbContext.MesBaseMaterialInfo.ToList();
}
var bill = from a in wmsBaseLocations
from b in wmsRawStocks
from b in groupWmsRawStock
from c in materialInfos
where a.containerCode == b.palletInfoCode && b.materialId == c.MaterialId
select new
{
baseLocationId = a.locationId,
wmsRawStocksId = b.rawStockId,
//wmsRawStocksId = b.rawStockId,
locationCode = a.locationCode,
materialId = b.materialId,
materialName = c.MaterialName,
materialSpec = c.MaterialSpec,
palletInfoCode = b.palletInfoCode,
instockDate = b.instockDate,
//instockDate = b.instockDate,
totalAmount = b.totalAmount,
frozenAmount = b.frozenAmount,
IsSelected = CallSelectedItem.Contains(a.locationId)
};
PersonCallMaterial.ItemsSource = bill.ToList().Skip((this.Pagination2.PageIndex - 1) * this.pageCount).Take(this.pageCount);
int sum = bill.Count();
var bills = bill.GroupBy(t => new { t.baseLocationId, t.palletInfoCode, t.locationCode, t.IsSelected })
.Select(t => new
{
baseLocationId=t.Key.baseLocationId,
palletInfoCode = t.Key.palletInfoCode,
locationCode = t.Key.locationCode,
IsSelected = t.Key.IsSelected,
totalAmount = string.Join("\n", t.Select(x => x.totalAmount)),
frozenAmount = string.Join("\n", t.Select(x => x.frozenAmount)),
materialId = string.Join("\n", t.Select(x => x.materialId)),
materialName = string.Join("\n", t.Select(x => x.materialName)),
materialSpec = string.Join("\n", t.Select(x => x.materialSpec)),
}).ToList();
bills = bills.OrderBy(t => t.palletInfoCode).ThenBy(t => t.materialId).ToList();
PersonCallMaterial.ItemsSource = bills.Skip((this.Pagination2.PageIndex - 1) * this.pageCount).Take(this.pageCount);
int sum = bills.Count();
Pagination2.MaxPageCount = (sum / pageCount) + (sum % pageCount == 0 ? 0 : 1);
if (bill.Count() == 0)
if (bills.Count() == 0)
{
MessageBox.Show("未查询到数据");
}
@ -1655,7 +1736,7 @@ namespace Khd.Core.Wpf.Form
{
try
{
EmptyCountForm emptyCountForm = new EmptyCountForm();
EmptyCountForm emptyCountForm = new EmptyCountForm(1, 6);
emptyCountForm.ShowDialog();
if (EmptyCountForm.IsSelect)
{
@ -1680,12 +1761,14 @@ namespace Khd.Core.Wpf.Form
wmsBaseLocation.RemoveAll(t => palletInfoCodes.Contains(t.containerCode));
if (wmsBaseLocation.Count > 0 && EmptyCountForm.EmptyTaskCount <= wmsBaseLocation.Count)
{
List<WcsTaskManual> addList = new List<WcsTaskManual>();
for (int i = 0; i < EmptyCountForm.EmptyTaskCount; i++)
{
WmsBaseLocation startBaseLocation = wmsBaseLocation[i];
startBaseLocation.outstockFlag = "1";
startBaseLocation.locationStatus = "6";
WcsTaskManual wcsTask = new WcsTaskManual()
startBaseLocation.ContainerStatus = "2";
addList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 30,
@ -1705,11 +1788,11 @@ namespace Khd.Core.Wpf.Form
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
};
dbContext.Add(wcsTask);
});
dbContext.Update(startBaseLocation);
dbContext.SaveChanges();
}
dbContext.AddRange(addList);
dbContext.SaveChanges();
MessageBox.Show("任务创建成功!");
}
else
@ -1740,11 +1823,6 @@ namespace Khd.Core.Wpf.Form
MessageBox.Show("请选择料箱!");
return;
}
if (CallSelectedItem.Count > 6)
{
MessageBox.Show("一次只能叫托盘6个!");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -1764,9 +1842,10 @@ namespace Khd.Core.Wpf.Form
MessageBoxResult messageBoxResult = MessageBox.Show(stringBuilder.ToString(), "提示", MessageBoxButton.YesNo);
if (messageBoxResult == MessageBoxResult.Yes)
{
List<WcsTaskManual> addList = new List<WcsTaskManual>();
foreach (var item in wmsBaseLocation)
{
var wcsTask = new WcsTaskManual()
addList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 30,
@ -1786,14 +1865,14 @@ namespace Khd.Core.Wpf.Form
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
};
dbContext.Add(wcsTask);
});
item.outstockFlag = "1";
item.ContainerStatus = "2";
item.locationStatus = "6";
dbContext.Update(item);
dbContext.SaveChanges();
}
dbContext.AddRange(addList);
dbContext.SaveChanges();
MessageBox.Show("创建出库任务成功!");
}
CallSelectedItem.Clear();
@ -1847,6 +1926,7 @@ namespace Khd.Core.Wpf.Form
{
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "canReceive");
SystemData.PlcDic[1].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
MessageBox.Show("一键收料发送成功");
}
catch (Exception ex)
{
@ -1862,6 +1942,7 @@ namespace Khd.Core.Wpf.Form
SystemData.PlcDic[item.Key].Open();
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "canReceive");
SystemData.PlcDic[1].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
MessageBox.Show("一键收料发送成功");
break;
}
}
@ -1880,5 +1961,215 @@ namespace Khd.Core.Wpf.Form
{
TextBoxGetFocus();
}
private void barClear_Click(object sender, RoutedEventArgs e)
{
txtInBarCode.Text = string.Empty;
}
private void boxOutClear_Click(object sender, RoutedEventArgs e)
{
txtOutBox.Text = string.Empty;
}
private void boxClear_Click(object sender, RoutedEventArgs e)
{
txtInBox.Text = string.Empty;
}
private void barOutClear_Click(object sender, RoutedEventArgs e)
{
txtOutBarCode.Text = string.Empty;
}
private void OneIn_Click(object sender, RoutedEventArgs e)
{
try
{
BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 1)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneIn");
SystemData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
baseEquip.emptyCount += 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
}
else
{
MessageBox.Show("未检测到托盘");
}
}
catch (Exception ex)
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
}
}
}
LogManager.Error(ex);
}
}
private void OneOut_Click(object sender, RoutedEventArgs e)
{
try
{
BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 0)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneOut");
SystemData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
baseEquip.emptyCount -= 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
}
else
{
MessageBox.Show("检测到外侧有托盘,无法出堆垛机");
}
}
catch (Exception ex)
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
}
}
}
LogManager.Error(ex);
}
}
private void SomeIn_Click(object sender, RoutedEventArgs e)
{
try
{
//BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
//var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
//if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 1)
{
EmptyCountForm emptyCount = new EmptyCountForm(1, 10);
emptyCount.ShowDialog();
if (EmptyCountForm.IsSelect)
{
int emptyTaskCount = EmptyCountForm.EmptyTaskCount;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "someIn");
SystemData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
baseEquip.emptyCount = emptyTaskCount;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
}
}
//else
//{
// MessageBox.Show("未检测到托盘");
//}
}
catch (Exception ex)
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
}
}
}
LogManager.Error(ex);
}
}
private void SomeOut_Click(object sender, RoutedEventArgs e)
{
try
{
BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 0)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "someOut");
SystemData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
baseEquip.emptyCount = 0;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
}
else
{
MessageBox.Show("检测到外侧有托盘,无法出堆垛机");
}
}
catch (Exception ex)
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
}
}
}
LogManager.Error(ex);
}
}
private void UpdateEmpty_Click(object sender, RoutedEventArgs e)
{
try
{
lock (updateLock)
{
EmptyCountForm emptyCountForm = new EmptyCountForm(0, 10);
emptyCountForm.ShowDialog();
if (EmptyCountForm.IsSelect)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
baseEquip.emptyCount = EmptyCountForm.EmptyTaskCount;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("修改成功");
}
}
}
catch
{
}
}
}
}

@ -5,6 +5,7 @@
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
<ApplicationIcon>单据-迅捷PDF转换器.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
@ -20,6 +21,7 @@
<None Remove="Resources\btnBg.png" />
<None Remove="Resources\BtnInsert.png" />
<None Remove="Resources\BtnSelect.png" />
<None Remove="Resources\cancel.png" />
<None Remove="Resources\caozuo.png" />
<None Remove="Resources\caozuo2.png" />
<None Remove="Resources\car.png" />
@ -121,6 +123,10 @@
<None Remove="Resources\上件操作.png" />
</ItemGroup>
<ItemGroup>
<Content Include="单据-迅捷PDF转换器.ico" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\amma.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@ -128,6 +134,9 @@
<Resource Include="Resources\amma3.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource>
<Resource Include="Resources\cancel.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Resource>
<Resource Include="Resources\jiahao.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Resource>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

@ -1,9 +1,12 @@
using System;
using Masuit.Tools.Logging;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
namespace Khd.Core.Wpf.Scan
{
@ -66,19 +69,27 @@ namespace Khd.Core.Wpf.Scan
/// <param name="sender"></param>
/// <param name="e"></param>
private void MyCom_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
//读取串口缓冲区的字节数据,分两次传递结果
byte[] result = new byte[MyCom.BytesToRead];
MyCom.Read(result, 0, MyCom.BytesToRead);
ReceiveData += Encoding.UTF8.GetString(result);
if (ReceiveData.Contains("\r"))
if (ReceiveData.Contains('\r'))
{
message = ReceiveData;
message = ReceiveData.Replace("\r","").Trim();
SystemData.message = message;
ReceiveData = "";
}
SystemData.isUpdate = true;
}
catch(Exception ex)
{
LogManager.Error(ex);
}
}
/// <summary>
/// 关闭串口

@ -42,9 +42,27 @@
</ComboBox.ItemContainerStyle>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="2" HorizontalAlignment="Center">
<StackPanel Orientation="Vertical" Grid.Row="2" HorizontalAlignment="Center" >
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,0,0,30">
<TextBlock Text="空托盘数量:" Foreground="White" FontSize="25" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<ComboBox x:Name="EmptyCount" Width="100" Height="50">
<ComboBoxItem Content="1" Tag="1"/>
<ComboBoxItem Content="2" Tag="2"/>
<ComboBoxItem Content="3" Tag="3"/>
<ComboBoxItem Content="4" Tag="4"/>
<ComboBoxItem Content="5" Tag="5"/>
<ComboBoxItem Content="6" Tag="6"/>
<ComboBoxItem Content="7" Tag="7"/>
<ComboBoxItem Content="8" Tag="8"/>
<ComboBoxItem Content="9" Tag="9"/>
<ComboBoxItem Content="10" Tag="10"/>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button x:Name="AddTaskBtn" Content="下发任务" FontSize="25" Width="160" Height="50" Foreground="White" Background="#2196F3" VerticalAlignment="Center" HorizontalAlignment="Center" Click="AddTaskBtn_Click"/>
<Button x:Name="CancelBtn" Content="取消" FontSize="25" Width="160" Height="50" Foreground="White" Background="#F44336" Click="CancelBtn_Click" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="100,0,0,0"/>
</StackPanel>
</StackPanel>
</Grid>
</Window>

@ -35,37 +35,6 @@ namespace Khd.Core.Wpf.TaskForm
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
baseEquips = dbContext.BaseEquip.ToList();
foreach (var equip in baseEquips)
{
if (equip.equipType == 15)//0空闲1占用2锁定
{
if (equip.ud1 == "1")
{
startEquips.Add(new EquipMessage
{
Id = equip.objid,
equipName = equip.equipName,
equipNo = equip.equipNo,
equipType = equip.equipType,
equipStatus = equip.equipStatus,
floorNo = equip.floorNo,
IsEnabled = equip.ud3 == "1"
});
}
if (equip.ud2 == "1")
{
endEquips.Add(new EquipMessage
{
Id = equip.objid,
equipName = equip.equipName,
equipNo = equip.equipNo,
equipType = equip.equipType,
equipStatus = equip.equipStatus,
floorNo = equip.floorNo,
IsEnabled = equip.ud3 == "0"
});
}
}
else
{
if (equip.ud1 == "1")
{
@ -80,7 +49,7 @@ namespace Khd.Core.Wpf.TaskForm
IsEnabled = true
});
}
if (equip.ud2 == "1")
if (equip.ud2 == "1" && equip.emptyCount == 0)
{
endEquips.Add(new EquipMessage
{
@ -94,7 +63,6 @@ namespace Khd.Core.Wpf.TaskForm
});
}
}
}
this.StartPoint.ItemsSource = startEquips;
this.EndPoint.ItemsSource = endEquips;
}
@ -105,7 +73,7 @@ namespace Khd.Core.Wpf.TaskForm
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
if (StartPoint.SelectedItem is EquipMessage startEquip && EndPoint.SelectedItem is EquipMessage endEquip)
if (StartPoint.SelectedItem is EquipMessage startEquip && EndPoint.SelectedItem is EquipMessage endEquip && !string.IsNullOrEmpty(EmptyCount.SelectedItem?.ToString()))
{
if (startEquip.equipType == 1)
{
@ -139,6 +107,7 @@ namespace Khd.Core.Wpf.TaskForm
createTime = DateTime.Now,
equipmentNo = startEquip.equipNo,
useFlag = 1,
isEmpty = EmptyCount.SelectedItem.ToString()
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTask);
@ -151,7 +120,7 @@ namespace Khd.Core.Wpf.TaskForm
WcsTask wcsTask = new()
{
objid = FormBoardT._jcSnowId.NextId(),
taskType = 97,
taskType = 99,
startPointId = startEquip.Id,
startPointNo = startEquip.equipNo,
currPointId = startEquip.Id,
@ -167,6 +136,7 @@ namespace Khd.Core.Wpf.TaskForm
createTime = DateTime.Now,
equipmentNo = startEquip.equipNo,
useFlag = 1,
isEmpty = EmptyCount.SelectedItem.ToString()
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTask);

@ -7,7 +7,7 @@
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
Background="#333333"
Title="EmptyCountForm" Height="450" Width="800">
Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>

@ -21,10 +21,15 @@ namespace Khd.Core.Wpf.TaskForm
{
public static int EmptyTaskCount = 0;
public static bool IsSelect = false;
public EmptyCountForm()
public EmptyCountForm(int min,int max)
{
InitializeComponent();
this.EmptyCount.ItemsSource = new List<int>() { 1, 2, 3, 4, 5, 6 };
List<int> ints = new List<int>();
for(int i = min; i<= max; i++)
{
ints.Add(i);
}
this.EmptyCount.ItemsSource = ints;
this.EmptyCount.SelectedIndex = 0;
IsSelect = false;
}

@ -1,18 +1,24 @@
using System;
using Khd.Core.Domain.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
namespace Khd.Core.Wpf.myConverter
{
[ValueConversion(typeof(int), typeof(string))]
public class AgvTaskStatusConverter : IValueConverter
{
Dictionary<int,string> dic=new Dictionary<int, string>()
private readonly Dictionary<long?, Dictionary<int?, string>> dic = new()
{
{2,
new Dictionary<int?,string>(){
{-1,"人工创建" },
{0,"未下发" },
{1,"已下发" },
@ -21,19 +27,77 @@ namespace Khd.Core.Wpf.myConverter
{4,"起始地继续任务" },
{5,"已到目的地" },
{6,"任务结束" },
}
},
{
4,
new Dictionary<int?, string>(){
{-1,"人工创建" },
{0,"未下发" },
{1,"已下发" },
{2,"已开始" },
{3,"已到达起始地" },
{4,"起始地继续任务" },
{5,"已到达目的地" },
{6,"任务结束" }
}
},
{
5,
new Dictionary<int?, string>(){
{-1,"人工创建" },
{0,"未下发" },
{1,"已下发" },
{2,"已开始" },
{3,"已到达起始地" },
{4,"起始地继续任务" },
{5,"已到达目的地" },
{6,"目的地等待完成" },
{7,"目的地捡料完成" },
{8,"任务结束" }
}
},
{
6,
new Dictionary<int?, string>(){
{-1,"人工创建" },
{0,"未下发" },
{1,"已下发" },
{2,"已开始" },
{3,"已到达起始地" },
{4,"起始地继续任务" },
{5,"已到达目的地" },
{6,"任务结束" }
}
}
};
private DataGridRow GetDataGridRow(DependencyObject dependencyObject)
{
if (dependencyObject == null)
return null;
var dataGridRow = dependencyObject as DataGridRow;
if (dataGridRow != null)
return dataGridRow;
return GetDataGridRow(VisualTreeHelper.GetParent(dependencyObject));
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int val = System.Convert.ToInt32(value);
if(dic.TryGetValue(val, out string result))
WcsTask? wcsTask = value as WcsTask;
if (wcsTask != null)
{
return result;
}
else
BaseEquip baseEquip = SystemData.BaseEquip.First(t=>t.objid==wcsTask.nextPointId);
if (dic.TryGetValue(baseEquip.equipType, out var taskStatusDic))
{
return value;
if(taskStatusDic.TryGetValue(wcsTask.taskStatus,out var taskStatus))
{
return taskStatus;
}
}
}
return "未知";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Loading…
Cancel
Save