master
1 year ago
parent 07285c2746
commit d8cb081c2e

@ -1,19 +1,20 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
},
"AppSettings": {
"SiteCode": "999"
}
},
//"Logging": {
// "LogLevel": {
// "Default": "Information",
// "Microsoft": "Warning",
// "Microsoft.Hosting.Lifetime": "Information"
// },
// "AppSettings": {
// "SiteCode": "999"
// }
//},
"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=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",

@ -65,7 +65,9 @@ namespace Khd.Core.Application
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 = "成功";
@ -76,7 +78,9 @@ namespace Khd.Core.Application
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 = "成功";
@ -88,7 +92,9 @@ namespace Khd.Core.Application
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 = "成功";
@ -96,14 +102,34 @@ namespace Khd.Core.Application
//放货完成
if (agvCallbackDto.method.ToLower() == "end")
{
wcscmd.cmdStatus = 5;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 5;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsTask.Update(wcsTask);
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
if (wcsTask.nextPointId !=10)
{
wcscmd.cmdStatus = 5;
wcscmd.sendFlag = 1;
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.cmdStatus = 6;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 6;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 6 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
}
}
}
@ -151,8 +177,7 @@ namespace Khd.Core.Application
try
{
_dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
string stationId = agvCompeletedRequest.stationNo;
BaseEquip baseEquip = _dbContext.BaseEquip.FirstOrDefault(t => t.equipNo == stationId);
BaseEquip baseEquip = _dbContext.BaseEquip.FirstOrDefault(t => t.equipNo == agvCompeletedRequest.endStationCode);
if (baseEquip != null)
{
var wcsCmd = _dbContext.WcsCmd.Where(t => t.nextPointId == baseEquip.objid).FirstOrDefault();
@ -163,10 +188,12 @@ namespace Khd.Core.Application
{
agvCompeletedResponse.code = "0";
agvCompeletedResponse.message = "成功";
wcsCmd.cmdStatus = 6;
wcsTask.taskStatus = 6;
wcsCmd.cmdStatus = 7;
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();
}
}
@ -201,14 +228,15 @@ namespace Khd.Core.Application
try
{
_dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
WcsTask wcsTask = _dbContext.WcsTask
.Where(t => t.materialId == taskContinue.materialId)
var wcsTask = _dbContext.WcsTask
.Where(t => t.taskType == 47)
.Where(t=>t.masterId==taskContinue.materialId)
.FirstOrDefault();
if (wcsTask != null)
{
wcsTask.useFlag = 1;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(a => new WcsTaskLog { useFlag = 1 });
_dbContext.SaveChanges();
compeletedResponse.code = "0";
compeletedResponse.message = "成功";
@ -239,13 +267,13 @@ namespace Khd.Core.Application
_dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
WcsTask wcsTask = _dbContext.WcsTask
.Where(t => t.taskType == 28)
.Where(t=>t.startPointNo==taskReturn.PointNo)
.Where(t => t.materialId == taskReturn.materialId)
.Where(t=>t.endPointNo==taskReturn.endStationCode)
.FirstOrDefault();
if (wcsTask != null)
{
wcsTask.useFlag = 1;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTask.Where(t=>t.objid==wcsTask.objid).Update(a=>new WcsTask { useFlag = 1 });
_dbContext.SaveChanges();
compeletedResponse.code = "0";
compeletedResponse.message = "成功";

@ -9,7 +9,7 @@ namespace Khd.Core.Domain.Dto.webapi
public class AgvCompeleted
{
public string stationId { get; set; }
public string stationNo { get; set; }
public string endStationCode { get; set; }
public string stationState { get; set; }
public string method { get; set; }
}
@ -17,13 +17,13 @@ namespace Khd.Core.Domain.Dto.webapi
public class TaskContinue
{
public long? materialId { get; set; }
public string PointNo { get; set; }
public string endStationCode { get; set; }
}
public class TaskReturn
{
public long? materialId { get; set; }
public string PointNo { get; set; }
public string endStationCode { get; set; }
}
public class AgvCompeletedResponse

@ -261,5 +261,6 @@ namespace Khd.Core.Plc.S7
return package.ToArray();
}
}
}

@ -52,6 +52,7 @@ namespace Khd.Core.Plc
return Encoding.UTF8.GetString(result).Replace("\0", "").Replace("$", "").Trim();
}
/// <summary>
/// 电气写入点位高低位转换
/// </summary>

@ -29,13 +29,6 @@
<ProjectReference Include="..\Khd.Core.Thrift\Khd.Core.Thrift.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="S7.Net">
<HintPath>..\..\dll\S7.Net.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@ -46,4 +39,8 @@
<Folder Include="PLCHelper\" />
</ItemGroup>
<ItemGroup>
<Using Include="Khd.Core.Plc" />
</ItemGroup>
</Project>

@ -36,11 +36,13 @@ namespace Khd.Core.Wcs
/// </summary>
public void Start()
{
try
{ //加载配置项
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
//加载配置项
//设置程序启动时清空点位的数据=>0为 Int16位
QingKongDianWei = StaticPlcHelper.GetValue("2", "0");
//设置默认处理完成=>1为 Int16位
@ -51,6 +53,7 @@ namespace Khd.Core.Wcs
StaticData.BaseEquip = dbContext.BaseEquip.ToList();
StaticData.basePlcs = dbContext.BasePlc.ToList();
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();
foreach (var plcConfig in StaticData.PlcConfigs)
{
if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))
@ -59,7 +62,7 @@ namespace Khd.Core.Wcs
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
try
{
plc.Open();
//plc.Open();
Console.WriteLine(DateTime.Now + ":连接到PLC" + plcConfig.IP);
}
catch
@ -69,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();
@ -124,9 +127,9 @@ namespace Khd.Core.Wcs
//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[0], FifthFloorBearAgvEquip.floorNo.Value, FifthFloorBearAgvEquip.equipNo);
//fiveFloorBearAgv.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();
}
catch (Exception ex)
{

@ -62,8 +62,8 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
public void StartPoint()
{
//var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic);
//createBearAgvReturnThread.Start();
var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic);
createBearAgvReturnThread.Start();
//var createRawInWareTaskThread = new Thread(CreateRawInWareTaskLogic);
//createRawInWareTaskThread.Start();
@ -348,12 +348,11 @@ namespace Khd.Core.Wcs.Wcs
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var wmsRawReturns = dbContext.WmsRawReturn.Where(t => t.executeStatus == "0")
var wmsRawReturn = dbContext.WmsRawReturn
.Where(t => t.auditStatus == "1")
.ToList();
if (wmsRawReturns != null && wmsRawReturns.Count > 0)
.FirstOrDefault();
if (wmsRawReturn != null)
{
WmsRawReturn wmsRawReturn = wmsRawReturns.First();
if (wmsRawReturn.executeStatus == "0")
{
//任务未开始Status=0
@ -389,6 +388,8 @@ namespace Khd.Core.Wcs.Wcs
};
wmsRawReturn.executeStatus = "1";
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.Update(wmsRawReturn);
dbContext.SaveChanges();
}
@ -1108,13 +1109,5 @@ namespace Khd.Core.Wcs.Wcs
}
//五楼原材料出库,完成
//五楼原材料出库到组装区,完成
//五楼成品出库完成
//五楼原材料返库待完成
//五楼背板安装--半成品基本完成,待完善
//五楼原材料--背板安装待完成
//五楼原材料--柜体验收待完成
}
}

@ -181,11 +181,11 @@ namespace Khd.Core.Wcs.Wcs
materialId = material.materialId,
qty = Convert.ToInt32(material.bindAmount),
startPointId = F01,
startPointNo = "F01",
startPointNo = "TSJ_01",
currPointId = F01,
currPointNo = "F01",
currPointNo = "TSJ_01",
nextPointId = T01,
nextPointNo = "T01",
nextPointNo = "TSJ_01",
endPointId = warehouseId,
fromFloorNo = 1,
floorNo = TargetFloor.warehouseFloor,
@ -208,9 +208,9 @@ namespace Khd.Core.Wcs.Wcs
if (task.nextPointId != T01)
{
task.currPointId = F01;
task.currPointNo = "F01";
task.currPointNo = "TSJ_01";
task.nextPointId = T01;
task.nextPointNo = "T01";
task.nextPointNo = "TSJ_01";
task.taskStatus = 0;
task.updateBy = "一楼接驳位线程";
task.updateTime = DateTime.Now;

@ -4,10 +4,13 @@ using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System.Diagnostics;
using Thrift.Protocol;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -75,10 +78,6 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.useFlag == 1)
.Where(t => t.nextPointId == agvID).OrderBy(t => t.createTime).ToList();
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
if (taskList.Count == 0)
{
LogManager.Info(FloorNo + "楼AGV无任务");
}
foreach (var item in taskList)
{
if (taskList.Where(t => t.taskStatus > 0).Where(t => t.objid != item.objid).Any())
@ -132,6 +131,7 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -202,6 +202,7 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -262,6 +263,7 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -320,6 +322,7 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -378,6 +381,7 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -437,6 +441,7 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -495,6 +500,7 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -553,6 +559,7 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -574,6 +581,7 @@ namespace Khd.Core.Wcs.Wcs
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
if (wcsCmd.cmdStatus == 3)
{
var agvTask = new RequestAGVTaskDto
@ -586,6 +594,7 @@ namespace Khd.Core.Wcs.Wcs
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发继续任务成功" + message);
wcsCmd.cmdStatus = 4;
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.Update(wcsCmd);
@ -596,6 +605,9 @@ namespace Khd.Core.Wcs.Wcs
}
else if (wcsCmd.cmdStatus == 5)
{
LogManager.Info("五楼叉车线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
LogManager.Info("五楼Agv完成任务成功" + wcsCmd.ToJsonString());
if (item.taskType == 49)
{
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
@ -619,6 +631,10 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsProductStock);
}
}
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.Update(fromBaseLocation);
dbContext.Update(toBaseLocation);
dbContext.SaveChanges();
@ -664,8 +680,8 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 38)//出库
{
var wmsProductOutstockDetails = dbContext.WmsProductOutstockDetail.Where(t => t.productOutstockId == item.orderId );
var wmsProductOutstockDetail = wmsProductOutstockDetails.FirstOrDefault(t=> t.executeStatus == "1" && t.locationCode == item.currPointNo);
var wmsProductOutstockDetails = dbContext.WmsProductOutstockDetail.Where(t => t.productOutstockId == item.orderId);
var wmsProductOutstockDetail = wmsProductOutstockDetails.FirstOrDefault(t => t.executeStatus == "1" && t.locationCode == item.currPointNo);
var wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == item.orderId);
if (wmsProductOutstockDetail != null && wmsProductOutstock != null)
{
@ -687,20 +703,25 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsBaseLocation);
dbContext.WmsProductStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5);
item.nextPointId = floorLineEquip.objid;
item.nextPointNo = floorLineEquip.equipNo;
item.fromFloorNo = 5;
item.floorNo = 1;
item.taskStatus = 6;
WcsTask newTask = CoreMapper.Map<WcsTask>(item);
newTask.createTime=DateTime.Now;
newTask.nextPointId = floorLineEquip.objid;
newTask.nextPointNo = floorLineEquip.equipNo;
newTask.fromFloorNo = 5;
newTask.floorNo = 1;
newTask.taskStatus = 6;
newTask.objid=StaticData.SnowId.NextId();
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);
dbContext.Update(item);
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.Remove(item);
dbContext.WcsCmd.Remove(wcsCmd);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6, nextPointId = floorLineEquip.objid, nextPointNo = floorLineEquip.equipNo, fromFloorNo = 5, floorNo = 1 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.SaveChanges();
}
}
else if (item.taskType == 33)//原材料到背板安装
{
@ -712,11 +733,11 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation.updateBy = "WCS";
dbContext.Update(wmsBaseLocation);
dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
dbContext.WcsCmd.Remove(wcsCmd);
dbContext.WcsTask.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.SaveChanges();
}
else if (item.taskType == 34)//半成品入库
{
@ -768,8 +789,8 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(startEquip);
dbContext.Add(wmsProductStock);
dbContext.Update(wmsBaseLocation);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
dbContext.WcsCmd.Remove(wcsCmd);
dbContext.WcsTask.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.SaveChanges();
@ -779,7 +800,6 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 46)//该任务结束后立刻生成一个新的返库任务但是是否使用标志未0等待mes通知
{
WcsTask newTask = CoreMapper.Map<WcsTask>(item);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.instockFlag = "1";
@ -795,24 +815,26 @@ namespace Khd.Core.Wcs.Wcs
wmsRawStock.updateBy = "WCS";
dbContext.Update(wmsRawStock);
dbContext.Update(wmsBaseLocation);
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
item.objid = StaticData.SnowId.NextId();
item.currPointId = item.endPointId;
item.currPointNo = item.endPointNo;
item.endPointId = item.startPointId;
item.endPointNo = item.startPointNo;
item.startPointId = item.currPointId;
item.startPointNo = item.currPointNo;
item.taskType = 28;
item.taskStatus = 0;
item.useFlag = 0;
dbContext.Add(item);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(item);
WcsTask newTask = CoreMapper.Map<WcsTask>(item);
newTask.objid = StaticData.SnowId.NextId();
newTask.currPointId = item.endPointId;
newTask.currPointNo = item.endPointNo;
newTask.endPointId = item.startPointId;
newTask.endPointNo = item.startPointNo;
newTask.startPointId = item.currPointId;
newTask.createTime = DateTime.Now;
newTask.startPointNo = item.currPointNo;
newTask.taskType = 28;
newTask.taskStatus = 0;
newTask.useFlag = 0;
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
}
}
@ -837,13 +859,12 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(startEquip);
dbContext.Update(wmsRawStock);
dbContext.Update(wmsBaseLocation);
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
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.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.SaveChanges();
}
}
else if (item.taskType == 47)
{
@ -883,11 +904,11 @@ namespace Khd.Core.Wcs.Wcs
};
dbContext.Add(wmsRawStock);
dbContext.Add(wmsBaseLocation);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
}
}
}

@ -3,6 +3,7 @@ using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
@ -129,6 +130,8 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.code == "0")
{
LogManager.Info("五楼背负式AGV线程下发任务" + agvTask.ToJsonString());
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程下发任务" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -151,7 +154,7 @@ namespace Khd.Core.Wcs.Wcs
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
if (wcsCmd.cmdStatus == 3)
if (wcsCmd.cmdStatus == 4)
{
var agvTask = new RequestAGVTaskDto
{
@ -163,23 +166,19 @@ namespace Khd.Core.Wcs.Wcs
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 4 });
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 });
LogManager.Info("五楼背负式AGV线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.objid);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 5 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 5 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 5 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 5 });
dbContext.SaveChanges();
}
}
else if (wcsCmd.cmdStatus == 5)
{
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
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.SaveChanges();
}
else if (wcsCmd.cmdStatus == 7)
{
LogManager.Info("五楼背负式AGV线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.objid);
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
@ -190,10 +189,6 @@ namespace Khd.Core.Wcs.Wcs
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
if (item.taskType == 48)
{
dbContext.WmsRawReturn.Where(t => t.rawReturnId == item.orderId).Update(t => new WmsRawReturn { executeStatus = "2" });
@ -202,7 +197,12 @@ namespace Khd.Core.Wcs.Wcs
{
}
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 10 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 10 });
}
}
}

@ -13,6 +13,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using Thrift.Protocol;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -68,11 +69,11 @@ namespace Khd.Core.Wcs.Wcs
public void StartPoint()
{
//Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
//FlowPointThread.Start();
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
//Thread FlowCTUInWareThread = new Thread(MonitorInWare);
//FlowCTUInWareThread.Start();
Thread FlowCTUInWareThread = new Thread(MonitorInWare);
FlowCTUInWareThread.Start();
Thread HeartThread = new Thread(HeartLogic);
HeartThread.Start();
@ -90,13 +91,13 @@ namespace Khd.Core.Wcs.Wcs
try
{
flag = !flag;
this._plc.WriteToPoint(heartPoint.plcpointAddress,flag.ToString(),heartPoint.plcpointLength.ToString());
this._plc.WriteToPoint(heartPoint.plcpointAddress, flag.ToString(), heartPoint.plcpointLength.ToString());
}
catch
{
try
{
this._plc = new Plc.S7.Plc(this._plc.CPU,this._plc.IP, this._plc.Port, this._plc.Rack, this._plc.Slot);
this._plc = new Plc.S7.Plc(this._plc.CPU, this._plc.IP, this._plc.Port, this._plc.Rack, this._plc.Slot);
this._plc.Open();
}
catch
@ -219,7 +220,7 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if(Convert.ToInt32(receiveMaterial) == 1 && Convert.ToInt32(isArrive) == 1 && string.IsNullOrEmpty(rfid))
else if (Convert.ToInt32(receiveMaterial) == 1 && Convert.ToInt32(isArrive) == 1 && string.IsNullOrEmpty(rfid))
{
if (!Convert.ToBoolean(waring))
{
@ -420,9 +421,6 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First();
wcsOutstockLock.qty++;
dbContext.Update(wcsOutstockLock);
dbContext.WcsCmd.Add(wcsCmd);
dbContext.SaveChanges();
}
@ -531,6 +529,8 @@ namespace Khd.Core.Wcs.Wcs
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.code == "0")
{
LogManager.Info("五楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":五楼CTU线程继续任务" + item.startPointNo + "," + item.endPointNo);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 4 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
@ -556,6 +556,8 @@ namespace Khd.Core.Wcs.Wcs
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.code == "0")
{
LogManager.Info("五楼CTU线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":五楼CTU线程下发任务" + item.startPointNo + "," + item.endPointNo);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 4 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
@ -570,6 +572,8 @@ namespace Khd.Core.Wcs.Wcs
}
else if (wcsCmd.cmdStatus == 5)
{
LogManager.Info("五楼CTU线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼CTU线程完成任务" + wcsCmd.objid);
if (item.taskType == 30)//出库任务
{
WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.taskCode == item.objid.ToString());
@ -578,23 +582,24 @@ namespace Khd.Core.Wcs.Wcs
wmsRawOutstockDetail.executeStatus = "2";
wmsRawOutstockDetail.updateDate = DateTime.Now;
dbContext.Update(wmsRawOutstockDetail);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
}
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.startPointId && t.warehouseFloor == 5);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.WmsRawOutstockDetail.Where(t => t.locationCode == wmsBaseLocation.locationCode).Update(t => new WmsRawOutstockDetail { executeStatus = "2" });
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.SaveChanges();
int wcsTaskCount = dbContext.WcsTask.Where(t => t.taskType == 30 && t.taskStatus != 6).Count();
if (wcsTaskCount == 0)
{
this._plc.WriteToPoint(this.canReceive.plcpointAddress, "1", this.canReceive.plcpointLength?.ToString());
}
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.WmsRawOutstockDetail.Where(t => t.locationCode == wmsBaseLocation.locationCode).Update(t => new WmsRawOutstockDetail { executeStatus = "2" });
dbContext.Remove(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
int wcsTaskCount = dbContext.WcsTask.Where(t => t.taskType == 30 && t.taskStatus != 6).Count();
if (wcsTaskCount == 0)
{
this._plc.WriteToPoint(this.canReceive.plcpointAddress, "1", this.canReceive.plcpointLength?.ToString());
}
}
else if (item.taskType == 29)//入库任务
@ -606,9 +611,10 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.ContainerStatus = "1";
dbContext.Update(wmsBaseLocation);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
dbContext.WcsTaskLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
lock (SystemData.outStockLock)
{
@ -619,9 +625,9 @@ namespace Khd.Core.Wcs.Wcs
wcsOutstockLock.qty = 0;
wcsOutstockLock.boxStatus = 0;
dbContext.Update(wcsOutstockLock);
dbContext.SaveChanges();
}
}
dbContext.SaveChanges();
}
}
}

@ -20,7 +20,7 @@ namespace Khd.Core.Wcs.Wcs
{
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host;
private readonly Plc.S7.Plc _plc;
private Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal;
@ -133,34 +133,34 @@ namespace Khd.Core.Wcs.Wcs
var AgvEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 5);//
if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null)
{
wcsTask.taskStatus = 0;//创建状态
wcsTask.updateTime = DateTime.Now;
wcsTask.currPointId = baseEquip.objid;
wcsTask.currPointNo = baseEquip.equipNo;
wcsTask.nextPointId = AgvEquip.objid;
wcsTask.nextPointNo = AgvEquip.equipNo;
wcsTask.endPointId = wmsBaseLocation.locationId;
wcsTask.endPointNo = wmsBaseLocation.locationCode;
if(wcsTask.fromFloorNo != 1)
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;//创建状态
newTask.updateTime = DateTime.Now;
newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo;
newTask.nextPointId = AgvEquip.objid;
newTask.nextPointNo = AgvEquip.equipNo;
newTask.endPointId = wmsBaseLocation.locationId;
newTask.endPointNo = wmsBaseLocation.locationCode;
newTask.objid = StaticData.SnowId.NextId();
newTask.createTime = DateTime.Now;
if (newTask.fromFloorNo != 1)
{
wcsTask.taskType = 47;
wcsTask.useFlag = 0;
newTask.taskType = 47;
newTask.useFlag = 0;
}
else
{
wcsTask.taskType = 47;//?28?
wcsTask.useFlag = 1;
newTask.taskType = 47;//?28?
newTask.useFlag = 1;
}
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Delete();
wcsTask.objid = StaticData.SnowId.NextId();
wcsTask.createTime = DateTime.Now;
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Remove(wcsTask);
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
@ -204,20 +204,21 @@ namespace Khd.Core.Wcs.Wcs
continue;
}
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机
dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Delete();
wcsTask.objid = StaticData.SnowId.NextId();
wcsTask.serialNo = SystemData.GetSerialNo(dbContext);
wcsTask.nextPointId = nextEquip.objid;
wcsTask.nextPointNo = nextEquip.equipNo;
wcsTask.currPointId = baseEquip.objid;
wcsTask.currPointNo = baseEquip.equipNo;
wcsTask.fromFloorNo = FloorNo;
wcsTask.taskType = 6;//成品出库
wcsTask.floorNo = floor;//出库楼层
wcsTask.taskStatus = 0;
wcsTask.createTime = DateTime.Now;
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId();
newTask.serialNo = SystemData.GetSerialNo(dbContext);
newTask.nextPointId = nextEquip.objid;
newTask.nextPointNo = nextEquip.equipNo;
newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo;
newTask.fromFloorNo = FloorNo;
newTask.taskType = 6;//成品出库
newTask.floorNo = floor;//出库楼层
newTask.taskStatus = 0;
newTask.createTime = DateTime.Now;
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.WcsTaskLog.Add(wcsTaskLog);
dbContext.SaveChanges();
}
@ -227,6 +228,15 @@ namespace Khd.Core.Wcs.Wcs
}
catch (Exception ex)
{
try
{
this._plc = new Plc.S7.Plc(this._plc.CPU, this._plc.IP, this._plc.Port, this._plc.Rack, this._plc.Slot);
this._plc.Open();
}
catch
{
}
LogManager.Error(ex);
}
finally

@ -80,7 +80,7 @@ namespace Khd.Core.Wcs.Wcs
var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.orderId == wcsTask.orderId);
if (wmsRawOutstock != null)
{
BaseEquip endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawOutstock.endStationCode);
var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawOutstock.endStationCode);
if (endEquip != null)
{
floor = endEquip.floorNo;

@ -1,10 +1,14 @@
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -68,14 +72,272 @@ namespace Khd.Core.Wcs.Wcs
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36);
BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2);
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == EquipID);
while (true)
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == EquipID).ToList();
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())
{
LogManager.Info($"2楼AGV线程有其他任务正在执行跳过当前任务{item.objid}");
continue;
}
if (item.taskStatus == 0)//下发任务
{
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
if (item.taskType == 50)
{
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 = inEquip.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 == 51)
{
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 = outEquip.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 == 52)
{
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 = 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线程继续任务" + item.objid + "," + item.startPointNo + "," + item.endPointNo);
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
{
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
LogManager.Info("二楼AGV线程完成任务" + item.objid);
if (wcsCmd.cmdStatus == 3)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(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.cmdStatus == 5)
{
if (item.taskType == 50)
{
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 == 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)
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.containerCode = null;
dbContext.Update(wmsBaseLocation);
item.taskStatus = 6;
dbContext.Update(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 });
}
}
}
}
}
}
catch (Exception ex)
{

@ -1,11 +1,11 @@
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
{
/// <summary>
@ -15,7 +15,7 @@ namespace Khd.Core.Wcs.Wcs
{
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host;
private readonly Plc.S7.Plc _plc;
private Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal;
@ -65,46 +65,53 @@ namespace Khd.Core.Wcs.Wcs
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36);
BaseEquip outEquip = StaticData.BaseEquip.First(t=>t.objid==37);
BaseEquip lineEquip = StaticData.BaseEquip.First(t=>t.objid==2);
BaseEquip agvEquip = StaticData.BaseEquip.First(t=>t.objid==8);
while (true)
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//入库任务
var rfid = this._plc.Read(LineRFID.plcpointAddress);
var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress);
var isSignal = this._plc.Read(LineSignal.plcpointAddress);
var isPallet = this._plc.Read(LineIsPallet.plcpointAddress);
if (rfid != null && isSignal != null && isPallet != null)
if (rfid != null && isSignal != null)
{
//正常读到输送线信息 有到位信号,并且有托盘,获取条码信息
if (Convert.ToInt32(isSignal) > 0 && Convert.ToInt32(isPallet) == 1)
if (Convert.ToInt32(isSignal) == 1)
{
//获取条码信息
var palletNo = Convert.ToString(rfid);
//获取任务
var wcsTask = StaticData.WcsTask.Where(t => t.nextPointId == 2 && t.taskType == 3 && t.containerNo == palletNo).FirstOrDefault();
//判断是否为出库任务
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == FloorNo);
var wcsTask = dbContext.WcsTask.OrderBy(t => t.createTime)
.FirstOrDefault(t => t.containerNo == palletNo && t.nextPointId == baseEquip.objid);
if (wcsTask != null)
{
var wmsProductOutstock = dbContext.WmsProductOutstock.Where(t => t.saleOrderId == wcsTask.orderId).FirstOrDefault();
if (wmsProductOutstock != null)
if (wcsTask.taskStatus == 5)//入库,提升机任务是完成状态
{
string endStationCode = wmsProductOutstock.endStationCode;
//找到目的地楼层
int floorNo=0;
//下发去提升机的去向
this._plc.Write(LineWcsrun.plcpointAddress, 1);
//更新任务
dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTask()
{
currPointId = 2,
currPointNo = "F02",
floorNo = floorNo,
nextPointId = 6,
nextPointNo = "T01",
updateTime = DateTime.Now,
updateBy = "二楼接驳位",
});
dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Delete();
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId=agvEquip.objid;
newTask.nextPointNo=agvEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
newTask.endPointId=inEquip.objid;
newTask.endPointNo=inEquip.equipNo;
newTask.containerNo=palletNo;
newTask.currPointId=lineEquip.objid;
newTask.currPointNo=lineEquip.equipNo;
newTask.taskType=2;
newTask.useFlag=1;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo);
}
}
}
@ -112,6 +119,16 @@ namespace Khd.Core.Wcs.Wcs
}
catch (Exception ex)
{
try
{
this._plc = new Plc.S7.Plc(this._plc.CPU, this._plc.IP, this._plc.Port, this._plc.Rack, this._plc.Slot);
this._plc.Open();
}
catch
{
}
LogManager.Error(ex);
}
finally
@ -120,23 +137,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
{
wcsTask = StaticData.WcsTask.Where(t => t.currPointNo == equipNo).FirstOrDefault();
}
catch (Exception ex)
{
LogManager.Info(floorNo + "楼接驳位异常" + ex.Message);
throw;
}
return wcsTask;
}
}
}

@ -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",

@ -584,7 +584,7 @@
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="起始站点"
IsReadOnly="True" />
IsReadOnly="True"/>
<DataGridTextColumn
Width="300*"
Binding="{Binding endPointNo,Converter={StaticResource EquipConverter}}"

@ -3,8 +3,9 @@
//mysql
//"DefaultConnection": "server=106.12.13.113;port=3306;database=khd_jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True"
//khd
"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=106.12.13.113;port=3336;database=khd_jyhb;uid=khd;pwd=khd@123;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"
},
"PlcConfigs": [
{

Loading…
Cancel
Save