diff --git a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs
index 2ca2be2..80cd444 100644
--- a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs
+++ b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs
@@ -19,7 +19,7 @@ namespace Khd.Core.Api.Controllers
}
///
- /// 接收agv接收任务通知接口
+ /// 接收agv接收任务通知接口,三楼和五楼Agv接口
///
///
///
@@ -33,7 +33,7 @@ namespace Khd.Core.Api.Controllers
}
///
- /// 接收agv接收任务通知接口
+ /// 接收agv接收任务通知接口,二楼Agv接口
///
///
///
diff --git a/src/Khd.Core.Domain/Models/WcsTask.cs b/src/Khd.Core.Domain/Models/WcsTask.cs
index 933d412..d531f1d 100644
--- a/src/Khd.Core.Domain/Models/WcsTask.cs
+++ b/src/Khd.Core.Domain/Models/WcsTask.cs
@@ -29,31 +29,31 @@ namespace Khd.Core.Domain.Models
/// wcs_warehouse_order 主键id
///
[Column("master_id")]
- public long? masterId { get; set; }
+ public long? masterId { get; set; }//暂时不用
///
/// wms出入库记录表id
///
[Column("order_id")]
- public long? orderId { get; set; }
+ public long? orderId { get; set; }//申请单的主键id
///
/// 流水号
///
[Column("serial_no")]
- public long? serialNo { get; set; }
+ public long? serialNo { get; set; }//提升机专用流水号
///
/// 设备编号
///
[Column("equipment_no")]
- public string equipmentNo { get; set; }
+ public string equipmentNo { get; set; }//设备编号
///
/// 容器号(托盘或者箱号)
///
[Column("container_no")]
- public string containerNo { get; set; }
+ public string containerNo { get; set; }//RFID,料箱号
///
/// 任务类型,字典表
@@ -70,11 +70,9 @@ namespace Khd.Core.Domain.Models
/// 38成品区-提升机输送线对接点
/// 46原材料-柜体拆分区
/// 47接驳位-原材料周转区
- ///
- ///
///
[Column("task_type")]
- public int? taskType { get; set; }
+ public int? taskType { get; set; }//对照数据库wcs_base_dictionary表的主键27开始
///
/// 任务状态,字典表
diff --git a/src/Khd.Core.Library/Mapper/CoreMapper.cs b/src/Khd.Core.Library/Mapper/CoreMapper.cs
index 6c65e7e..4f8c121 100644
--- a/src/Khd.Core.Library/Mapper/CoreMapper.cs
+++ b/src/Khd.Core.Library/Mapper/CoreMapper.cs
@@ -29,7 +29,7 @@ namespace Khd.Core.Library.Mapper
config.NewConfig().MapWith(dest => dest.Trim());
// config.ForType().Map(member: guid => guid, source: @string => string.IsNullOrEmpty(@string) ? Guid.Empty : new Guid(@string));
// config.ForType().Map(member: @string => @string, source: guid => ("wode"));
- config.Default.IgnoreNullValues(true);//忽略null
+ config.Default.IgnoreNullValues(true);//忽略null,原本的类字段的值是null,映射出来是"",int? null
config.Default.NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);//忽略大小写
var destination = source.Adapt(config);
return destination;
diff --git a/src/Khd.Core.Plc/StaticPlcHelper.cs b/src/Khd.Core.Plc/StaticPlcHelper.cs
index 98f67df..b2733df 100644
--- a/src/Khd.Core.Plc/StaticPlcHelper.cs
+++ b/src/Khd.Core.Plc/StaticPlcHelper.cs
@@ -45,15 +45,16 @@ namespace Khd.Core.Plc
return null;
}
string res = Encoding.UTF8.GetString(result).Replace("\0", "").Replace("$", "").Replace("\\u", "").Trim();
-
+
if (res.Contains("JYHB"))
{
return res[res.IndexOf('J')..];
}
- else if(res.Contains('C'))
+ else if (res.Contains('C'))
{
return res[res.IndexOf('C')..];
- }else
+ }
+ else
{
return "";
}
diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs
index 3114634..602471e 100644
--- a/src/Khd.Core.Wcs/MainCentralControl.cs
+++ b/src/Khd.Core.Wcs/MainCentralControl.cs
@@ -1,5 +1,4 @@
-using Khd.Core.Domain.Models;
-using Khd.Core.EntityFramework;
+using Khd.Core.EntityFramework;
using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs;
using Masuit.Tools.Logging;
@@ -35,21 +34,13 @@ namespace Khd.Core.Wcs
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
- using var dbContextTransaction = dbContext.Database.BeginTransaction();
try
{
- //加载配置项
- //设置程序启动时清空点位的数据=>0为 Int16位
- QingKongDianWei = StaticPlcHelper.GetValue("2", "0");
- //设置默认处理完成=>1为 Int16位
- WcsChuLiWanCheng = StaticPlcHelper.GetValue("2", "1");
- //设置默认去向=>1为 Int16位
- WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1");
- StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();
- StaticData.basePlcs = dbContext.BasePlc.ToList();
- StaticData.BaseEquip = dbContext.BaseEquip.ToList();
- StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();
-
+ StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();//设备交互用
+ StaticData.basePlcs = dbContext.BasePlc.ToList();//陈工Agv和设备信息推送
+ StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息
+ StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表,Agv任务模板
+
foreach (var plcConfig in StaticData.PlcConfigs)
{
if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))
@@ -68,8 +59,8 @@ namespace Khd.Core.Wcs
StaticData.PlcDic.TryAdd(plcConfig.Code, plc);
}
}
- //SystemTimer systemTimer = new SystemTimer(_host);
- //systemTimer.Start();
+ SystemTimer systemTimer = new SystemTimer(_host);
+ systemTimer.Start();
//创建任务
CreateTaskByRecord createTaskByRecord = new(_host);
createTaskByRecord.StartPoint();
@@ -78,40 +69,40 @@ namespace Khd.Core.Wcs
FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]);
firstFloor.StartPoint();
- ////二层接驳位
- //var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First();
- //SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value);
- //secondFloorPoint.StartPoint();
+ //二层接驳位
+ var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First();
+ SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value);
+ secondFloorPoint.StartPoint();
- ////二层AGV
- //var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First();
- //SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value);
- //secondFloorAGV.StartPoint();
+ //二层AGV
+ var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First();
+ SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value);
+ secondFloorAGV.StartPoint();
- ////二楼线体
- //var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 17).First();
- //SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[2], SecondFloorLineEquip.floorNo.Value);
- //secondFloorLine.StartPoint();
+ //二楼线体
+ var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 17).First();
+ SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[2], SecondFloorLineEquip.floorNo.Value);
+ secondFloorLine.StartPoint();
- ////三层接驳位
- //var ThirdBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 1).First();
- //ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value);
- //thirdFloorPoint.StartPoint();
+ //三层接驳位
+ var ThirdBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 1).First();
+ ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value);
+ thirdFloorPoint.StartPoint();
- ////三层AGV
- //var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
- //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value);
- //thirdFloorAGV.StartPoint();
+ //三层AGV
+ var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
+ ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value);
+ thirdFloorAGV.StartPoint();
//五层接驳位
var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First();
FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value);
fifthFloorPoint.StartPoint();
- ////五层CTU
- //var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
- //FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value);
- //fiveFloorCTU.StartPoint();
+ //五层CTU
+ var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
+ FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value);
+ fiveFloorCTU.StartPoint();
//五层AGV
var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First();
@@ -125,7 +116,6 @@ namespace Khd.Core.Wcs
}
catch (Exception ex)
{
- dbContextTransaction.Rollback();
Console.WriteLine(ex.Message);
LogManager.Error(ex);
}
diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs
index 11c7d34..bde643b 100644
--- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs
+++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs
@@ -29,9 +29,9 @@ namespace Khd.Core.Wcs.Wcs
///
public void StartPoint()
{
- ////背负式Agv返库任务
- //var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic);
- //createBearAgvReturnThread.Start();
+ //背负式Agv返库任务
+ var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic);
+ createBearAgvReturnThread.Start();
//五楼半成品入库任务
var createFiveProductInTaskThread = new Thread(CreateFiveProductInTaskLogic);
createFiveProductInTaskThread.Start();
@@ -44,18 +44,18 @@ namespace Khd.Core.Wcs.Wcs
//五楼柜体拆分返库任务
var createRawInThread = new Thread(CreateRawInTaskLogic);
createRawInThread.Start();
- ////三楼去翻转机任务
- //var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic);
- //createThirdOutTaskThread.Start();
- ////二楼成品出库任务
- //var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic);
- //CreateSecondProductTaskThread.Start();
- ////三楼托盘收集架满5个或10个时出库合盘任务
- //var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic);
- //createEmptyTrayThread.Start();
- ////二楼废品区人工调度任务
- //var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic);
- //createThirdWasterTaskThread.Start();
+ //三楼去翻转机任务
+ var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic);
+ createThirdOutTaskThread.Start();
+ //二楼成品出库任务
+ var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic);
+ CreateSecondProductTaskThread.Start();
+ //三楼托盘收集架满5个或10个时出库合盘任务
+ var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic);
+ createEmptyTrayThread.Start();
+ //二楼废品区人工调度任务
+ var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic);
+ createThirdWasterTaskThread.Start();
Console.WriteLine(DateTime.Now + ":出库任务监听启动成功");
LogManager.Info("出库任务监听启动成功");
@@ -1481,7 +1481,7 @@ namespace Khd.Core.Wcs.Wcs
int qty = 0;
if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出
{
- needNumber-= stock.totalAmount - stock.frozenAmount;
+ needNumber -= stock.totalAmount - stock.frozenAmount;
RealOutNumber += stock.totalAmount - stock.frozenAmount;
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
stock.updateDate = DateTime.Now;
diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs
index 8deecdf..fa22d9c 100644
--- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs
+++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs
@@ -64,7 +64,6 @@ namespace Khd.Core.Wcs.Wcs
this.RFID001 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("RFID001"));
//到位信号 读
this.linesignal01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("linesignal01"));
-
//一楼提升机流水号 读
this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("serialno06"));
this.mesClose = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("mesclose"));
@@ -87,27 +86,19 @@ namespace Khd.Core.Wcs.Wcs
///
public void StartPoint()
{
- Thread firstFloorLine = new(FirstFloorLine)
+ Thread firstFloorLine = new(FirstFloorLine)//一楼接驳位线程
{
IsBackground = true
};
firstFloorLine.Start();
- Console.WriteLine(DateTime.Now + ":一楼接驳位线程启动成功");
- LogManager.Info("一楼接驳位线程启动成功");
- Thread firstFloorHoister = new(FirstFloorHoister)
+ Thread firstFloorHoister = new(FirstFloorHoister)//提升机
{
IsBackground = true
};
firstFloorHoister.Start();
- //Thread CallEmptyThread = new Thread(CallEmpty)
- //{
- // IsBackground = true
- //};
- //CallEmptyThread.Start();
-
- Thread equipStatusThread = new Thread(EquipStatusLogic)
+ Thread equipStatusThread = new Thread(EquipStatusLogic)//设备状态,1-5楼接驳位能不能送货,提升机和小车任务
{
IsBackground = true
};
@@ -134,28 +125,28 @@ namespace Khd.Core.Wcs.Wcs
if (Convert.ToInt32(lineSignal) == 1)
{
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
- if (baseEquip.equipStatus != 1)
+ if (baseEquip.equipStatus != 1)//不是忙碌状态,改为忙碌状态
{
baseEquip.equipStatus = 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
}
- else
- {
- bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any();
- if (!hasTask)
- {
- baseEquip.equipStatus = 0;
- dbContext.Update(baseEquip);
- dbContext.SaveChanges();
- }
- }
+ //else
+ //{
+ // bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any();
+ // if (!hasTask)
+ // {
+ // baseEquip.equipStatus = 0;
+ // dbContext.Update(baseEquip);
+ // dbContext.SaveChanges();
+ // }
+ //}
}
else
{
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
- bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any();
- bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any();
+ bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any();//小车任务
+ bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any();//提升机任务,有没有正在执行的往这个接驳位送的
if (!hasCmd || !hasTask)
{
baseEquip.containerNo = null;
@@ -163,7 +154,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(baseEquip);
dbContext.SaveChanges();
}
- else
+ else//接驳位改为忙碌状态
{
baseEquip.containerNo = null;
baseEquip.equipStatus = 1;
@@ -305,7 +296,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
- dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
+ dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());//上次查出1,不加这行,数据库实际2,查出1
var RFID001Value = StaticData.PlcDic[0].ReadRFID(this.RFID001.plcpointAddress); //一楼RFID 读
var linesignal01Value = StaticData.PlcDic[0].Read(this.linesignal01.plcpointAddress); //到位信号 读
//正常读到plc值
@@ -400,7 +391,7 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
- if (string.IsNullOrEmpty(task.containerNo))
+ if (string.IsNullOrEmpty(task.containerNo))//人工调出
{
if (task.useFlag == 1)
{
@@ -514,7 +505,7 @@ namespace Khd.Core.Wcs.Wcs
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1))
{
- if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)
+ if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//当前楼层和起始楼层一致
{
wcsTask.taskStatus = 2;
wcsTask.updateBy = "提升机线程";
@@ -531,7 +522,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(lineEquip);
dbContext.SaveChanges();
}
- else
+ else//当前楼层和起始楼层不一致
{
wcsTask.taskStatus = 1;
wcsTask.updateBy = "提升机线程";
@@ -589,20 +580,20 @@ namespace Khd.Core.Wcs.Wcs
}
if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层
{
- if (wcsTask.floorNo == 1)
+ if (wcsTask.floorNo == 1)//目的楼层是1
{
- if (ReadEmptyLocation())
+ if (ReadEmptyLocation())//托盘库是否有任务,没有任务返回true
{
var linesignal = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress);
- if (linesignal != null && Convert.ToInt32(linesignal) == 0)
+ if (linesignal != null && Convert.ToInt32(linesignal) == 0)//接驳位外侧没有东西
{
BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress);
- if (clearPoint != null && Convert.ToBoolean(clearValue) == true)
+ if (clearPoint != null && Convert.ToBoolean(clearValue) == true)//是否有报警
{
Console.WriteLine(DateTime.Now + ":提升机下发报警消除指令");
LogManager.Info("提升机下发报警消除指令");
- StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString());
+ StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString());//清除报警
}
wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程";
@@ -616,11 +607,11 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" });
dbContext.SaveChanges();
}
- else
+ else//接驳位外侧有东西
{
BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress);
- if (clearPoint != null && Convert.ToBoolean(clearValue)==false)
+ if (clearPoint != null && Convert.ToBoolean(clearValue) == false)
{
StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, true, clearPoint.plcpointLength.ToString());
}
@@ -651,16 +642,16 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
- BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.equipmentNo == $"clear0{wcsTask.floorNo}");
+ BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
}
}
}
- else if (wcsTask.taskStatus == 4)
+ else if (wcsTask.taskStatus == 4)//提升机任务结束
{
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun"));
var wcsRun = StaticData.PlcDic[0].Read(basePlcpoint.plcpointAddress);
- if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)
+ if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)//判断当前接驳位的任务状态,wcsrrun如果是1代表入库,2是出库,0是空闲
{
BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
wcsTask.nextPointId = floorEquip.objid;
@@ -683,7 +674,7 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
- else
+ else//同步楼层,屏蔽状态
{
if (currentfloor06Value != null && targetfloor06Value != null)
{
diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs
index ed25ad7..4520082 100644
--- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs
+++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs
@@ -9,7 +9,6 @@ using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
-using System.Transactions;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs
index 8f2fc28..cb483e5 100644
--- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs
+++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs
@@ -417,12 +417,12 @@ namespace Khd.Core.Wcs.Wcs
new()
{
positionCode = wcsCmd.currPointNo,
- type = "05"
+ type = "05"//05库位
},
new()
{
positionCode = wcsCmd.nextPointNo,
- type = "00"
+ type = "00"//设备
},
},
ctnrTyp = "1",
@@ -479,12 +479,12 @@ namespace Khd.Core.Wcs.Wcs
new()
{
positionCode = wcsCmd.currPointNo,
- type = "05"
+ type = "05"//设备
},
new()
{
positionCode = wcsCmd.nextPointNo,
- type = "05"
+ type = "05"//库位
},
},
ctnrTyp = "1",
diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs
index 0d4a0c4..b7c655e 100644
--- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs
+++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs
@@ -873,7 +873,7 @@ namespace Khd.Core.Wcs.Wcs
{
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode);
- wmsProductOutstock.outstockQty ++;
+ wmsProductOutstock.outstockQty++;
if (wmsProductOutstock.applyQty <= wmsProductOutstock.outstockQty)
{
wmsProductOutstock.endTime = DateTime.Now;
diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs
index 64faf36..c9b2a31 100644
--- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs
+++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs
@@ -40,12 +40,12 @@ namespace Khd.Core.Wcs.Wcs
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
- BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36);
- BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37);
- BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2);
- BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);
- BaseEquip tsjEquip = StaticData.BaseEquip.First(t => t.objid == 6);
- var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);
+ BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36);//小包入口
+ BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37);//小包出口
+ BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2);//二楼接驳位
+ BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);//二楼叉车
+ BaseEquip tsjEquip = StaticData.BaseEquip.First(t => t.objid == 6);//提升机
+ var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);//二楼小包入口点位
while (true)
{
try
@@ -54,8 +54,7 @@ namespace Khd.Core.Wcs.Wcs
//入库任务
var rfid = StaticData.PlcDic[0].ReadRFID(LineRFID.plcpointAddress);
var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress);
- //var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);
- var agvPutValue = "";
+ var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);
if (rfid != null && isSignal != null)
{
@@ -64,30 +63,29 @@ namespace Khd.Core.Wcs.Wcs
{
//获取条码信息
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == 2);
- var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 2).OrderBy(t => t.createTime)
- .FirstOrDefault();
+ var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 2).OrderBy(t => t.createTime).FirstOrDefault();
if (wcsTask != null)
{
if (wcsTask.taskStatus == 5 && (wcsTask.nextPointId == 6 || wcsTask.nextPointId == 2))//入托盘入口,提升机任务是完成状态
{
- if (wcsTask.taskType != 99)
+ if (wcsTask.taskType != 99)//不是人工任务
{
if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0)//小包入口要料
{
- dbContext.WcsTask.Remove(wcsTask);
+ dbContext.WcsTask.Remove(wcsTask);//删除原本的任务
WcsTask newTask = CoreMapper.Map(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
- newTask.nextPointId = agvEquip.objid;
+ newTask.nextPointId = agvEquip.objid;//小车执行该任务
newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
- newTask.containerNo = rfid;
- newTask.currPointId = lineEquip.objid;
+ newTask.containerNo = rfid;//容器号
+ newTask.currPointId = lineEquip.objid;//起始地为二楼接驳位
newTask.currPointNo = lineEquip.equipNo;
- newTask.endPointId = inEquip.objid;
+ newTask.endPointId = inEquip.objid;//终点为小包入口
newTask.endPointNo = inEquip.equipNo;
- newTask.taskType = 51;//到小包入口
+ newTask.taskType = 51;//提升机到小包入口的任务类型
newTask.useFlag = 1;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask);
@@ -98,23 +96,23 @@ namespace Khd.Core.Wcs.Wcs
}
else if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1)
{
- BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
+ BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);//二楼周转位
if (endEquip != null)
{
- dbContext.WcsTask.Remove(wcsTask);
+ dbContext.WcsTask.Remove(wcsTask);//删除原本的任务
WcsTask newTask = CoreMapper.Map(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
- newTask.nextPointId = agvEquip.objid;
+ newTask.nextPointId = agvEquip.objid;//小车执行该任务
newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
- newTask.containerNo = rfid;
- newTask.currPointId = lineEquip.objid;
+ newTask.containerNo = rfid;//容器号
+ newTask.currPointId = lineEquip.objid;//起始地为二楼接驳位
newTask.currPointNo = lineEquip.equipNo;
- newTask.endPointId = endEquip.objid;
+ newTask.endPointId = endEquip.objid;//终点为周转位
newTask.endPointNo = endEquip.equipNo;
- newTask.taskType = 58;//到周转位
+ newTask.taskType = 58;//提升机到周转位的任务类型
newTask.useFlag = 1;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask);
@@ -127,7 +125,7 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
- if (wcsTask.endPointId == 36)
+ if (wcsTask.endPointId == 36)//目的地是小包入口
{
if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1)//小包入口要料
{
@@ -182,10 +180,10 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
- else if (wcsTask.endPointId == 38)
+ else if (wcsTask.endPointId == 38)//目的地是废料区
{
- var endEquip = dbContext.BaseEquip.First(t => t.objid == 38);
- if (endEquip.emptyCount == 0)
+ var endEquip = dbContext.BaseEquip.First(t => t.objid == 38);//废料区
+ if (endEquip.emptyCount == 0)//废料区没有托盘
{
dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map(wcsTask);
@@ -209,7 +207,7 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
- endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
+ endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);//周转位
if (endEquip != null)
{
dbContext.WcsTask.Remove(wcsTask);
diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs
index 7dad077..88f50b2 100644
--- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs
+++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs
@@ -29,25 +29,19 @@ namespace Khd.Core.Wcs.Wcs
{
IsBackground = true
};
- messageSynchronousThread.Start();
+ messageSynchronousThread.Start();//陈工设备信息推送
- //var baseEquipThread = new Thread(BaseEquipLogic)
- //{
- // IsBackground = true
- //};
- //baseEquipThread.Start();
-
- //var PlcHeartBeat30Thread = new Thread(PlcHeartBeat30Logic)
- //{
- // IsBackground = true
- //};
- //PlcHeartBeat30Thread.Start();
+ var PlcHeartBeat30Thread = new Thread(PlcHeartBeat30Logic)
+ {
+ IsBackground = true
+ };
+ PlcHeartBeat30Thread.Start();//脉冲
var PlcHeartBeat31Thread = new Thread(PlcHeartBeat31Logic)
{
IsBackground = true
};
- PlcHeartBeat31Thread.Start();
+ PlcHeartBeat31Thread.Start();//脉冲
Console.WriteLine($"{DateTime.Now}: SystemTimer started");
}
@@ -192,7 +186,6 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
-
HositerLogic();
CtuLineLogic();
ThirdAgvLogic();
diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs
index 858678e..24c1f3e 100644
--- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs
+++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs
@@ -747,7 +747,7 @@ namespace Khd.Core.Wcs.Wcs
{
rawStockId = StaticData.SnowId.NextId(),
activeFlag = "1",
- saleOrderId = mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId,
+ saleOrderId = mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId,
stockType = "1",
supplierId = mesBaseBarcodeInfo.manufacturerId,
qualityStatus = "1",
diff --git a/src/Khd.Core.Wcs/appsettings.json b/src/Khd.Core.Wcs/appsettings.json
index a0f1046..0d972a6 100644
--- a/src/Khd.Core.Wcs/appsettings.json
+++ b/src/Khd.Core.Wcs/appsettings.json
@@ -13,15 +13,15 @@
"Rack": 0,
"Slot": 1,
"Code": 0
- },
- //{
- // "IP": "192.168.2.31",
- // "Port": 102, //102是默认端口
- // "CpuType": 40,
- // "Rack": 0,
- // "Slot": 1,
- // "Code": 1
- //},
+ },//提升机,接驳位
+ {
+ "IP": "192.168.2.31",
+ "Port": 102, //102是默认端口
+ "CpuType": 40,
+ "Rack": 0,
+ "Slot": 1,
+ "Code": 1
+ },//U型线
{
"IP": "192.168.2.220",
"Port": 102, //102是默认端口
@@ -29,7 +29,7 @@
"Rack": 0,
"Slot": 1,
"Code": 2
- }
+ }//二楼三楼设备,陈工提供。
],
"PLCSetting": {
"Mode": "0",
diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs
index b927399..9310438 100644
--- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs
+++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs
@@ -2902,7 +2902,7 @@ namespace Khd.Core.Wpf.Form
private void SelectOutBtn_Click(object sender, RoutedEventArgs e)
{
- SelectOutRawForm selectOutRawForm=new SelectOutRawForm(this._host);
+ SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host);
selectOutRawForm.ShowDialog();
}
}