diff --git a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs
index 4b79eb3..cd65964 100644
--- a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs
+++ b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs
@@ -25,10 +25,24 @@ namespace Khd.Core.Api.Controllers
public ReponseagvCallbackDto agvCallback(agvCallbackDto agvCallbackDto)
{
LogManager.Info($"RecieveRcsController接口信息:{agvCallbackDto.ToJsonString()}");
-
+ agvCallbackDto.method = "outbin";
return _application.AgvCallback(agvCallbackDto);
}
+
+ ///
+ /// 接收agv接收任务通知接口
+ ///
+ ///
+ ///
+ [HttpPost("agvContinue")]
+ public ReponseagvCallbackDto agvContinue(agvCallbackDto agvCallbackDto)
+ {
+ LogManager.Info($"RecieveRcsController接口信息:{agvCallbackDto.ToJsonString()}");
+ agvCallbackDto.method = "continue";
+ return _application.AgvCallback(agvCallbackDto);
+
+ }
}
}
\ No newline at end of file
diff --git a/src/Khd.Core.Api/appsettings.json b/src/Khd.Core.Api/appsettings.json
index ee669a9..1114562 100644
--- a/src/Khd.Core.Api/appsettings.json
+++ b/src/Khd.Core.Api/appsettings.json
@@ -11,8 +11,8 @@
},
"AllowedHosts": "*",
"ConnectionStrings": {
- "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": "Data Source=localhost;Initial Catalog=lanju_op_xiaolan_ds;Persist Security Info=True;User ID=sa;Password=root;MultipleActiveResultSets=True;TrustServerCertificate=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": "Data Source=121.36.58.109;Initial Catalog=lanju_op_xiaolan_ds;Persist Security Info=True;User ID=sa;Password=haiwei@123;MultipleActiveResultSets=True;TrustServerCertificate=True"
},
"JwtSecurityOption": {
diff --git a/src/Khd.Core.Application/WcsTaskApplication.cs b/src/Khd.Core.Application/WcsTaskApplication.cs
index 5ddf3a8..e84e88e 100644
--- a/src/Khd.Core.Application/WcsTaskApplication.cs
+++ b/src/Khd.Core.Application/WcsTaskApplication.cs
@@ -52,7 +52,7 @@ namespace Khd.Core.Application
if (wcscmd != null)
{
//待取货
- if (agvCallbackDto.method == "")
+ if (agvCallbackDto.method == "continue")
{
wcscmd.cmdStatus = 2;
wcscmd.sendFlag = 1;
@@ -60,7 +60,7 @@ namespace Khd.Core.Application
_dbContext.SaveChanges();
}
//已取货待放货
- if (agvCallbackDto.method == "")
+ if (agvCallbackDto.method == "compeleted")
{
wcscmd.cmdStatus = 3;
wcscmd.sendFlag = 1;
diff --git a/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs b/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs
index 3075428..5f0e16c 100644
--- a/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs
+++ b/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs
@@ -55,7 +55,15 @@ namespace Khd.Core.Domain.Dto.webapi
///
/// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空
///
- public string podDir { get; set; }
+ public string podDir { get; set; }
+ ///
+ /// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空
+ ///
+ public string podTyp { get; set; }
+ ///
+ /// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空
+ ///
+ public string podCode { get; set; }
///
/// 物料批次或货架上的物料唯一编码,
///
@@ -95,11 +103,11 @@ namespace Khd.Core.Domain.Dto.webapi
///
/// 货架编号,不指定货架可以为空
///
- public string podCode { get; set; }
+ public string positionCode { get; set; }
///
/// 货架类型, 传空时表示随机找个货架
///
- public string podTyp { get; set; }
+ public string type { get; set; }
}
@@ -110,7 +118,7 @@ namespace Khd.Core.Domain.Dto.webapi
///
public string code { get; set; }
///
- /// 返回消息
+ /// 返回消息,成功或其他
///
public string message { get; set; }
///
diff --git a/src/Khd.Core.Domain/Models/BaseDictionary.cs b/src/Khd.Core.Domain/Models/BaseDictionary.cs
index dfc76a8..edd6e11 100644
--- a/src/Khd.Core.Domain/Models/BaseDictionary.cs
+++ b/src/Khd.Core.Domain/Models/BaseDictionary.cs
@@ -14,7 +14,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Models
{
- [Table("base_dictionary")]
+ [Table("wcs_base_dictionary")]
public class BaseDictionary
{
diff --git a/src/Khd.Core.Domain/Models/BaseEquip.cs b/src/Khd.Core.Domain/Models/BaseEquip.cs
index 3a2f440..d42fe05 100644
--- a/src/Khd.Core.Domain/Models/BaseEquip.cs
+++ b/src/Khd.Core.Domain/Models/BaseEquip.cs
@@ -14,7 +14,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Models
{
- [Table("base_equip")]
+ [Table("wcs_base_equip")]
public class BaseEquip
{
diff --git a/src/Khd.Core.Domain/Models/BasePlcpoint.cs b/src/Khd.Core.Domain/Models/BasePlcpoint.cs
index e3f842e..775e402 100644
--- a/src/Khd.Core.Domain/Models/BasePlcpoint.cs
+++ b/src/Khd.Core.Domain/Models/BasePlcpoint.cs
@@ -14,7 +14,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Models
{
- [Table("base_plcpoint")]
+ [Table("wcs_base_plcpoint")]
public class BasePlcpoint
{
@@ -38,7 +38,7 @@ namespace Khd.Core.Domain.Models
/// 点位长度
///
[Column("plcpoint_length")]
- public int? plcpointLength { get; set; }
+ public string plcpointLength { get; set; }
///
/// 点位地址
diff --git a/src/Khd.Core.Domain/Models/PlcPoint.cs b/src/Khd.Core.Domain/Models/PlcPoint.cs
index e4b56b8..43c4104 100644
--- a/src/Khd.Core.Domain/Models/PlcPoint.cs
+++ b/src/Khd.Core.Domain/Models/PlcPoint.cs
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace Khd.Core.Domain.Models
{
- [Table("Plc_Point")]
+ [Table("wcs_Plc_Point")]
public class PlcPoint
{
[Column("id")]
diff --git a/src/Khd.Core.Domain/Models/WcsCmd.cs b/src/Khd.Core.Domain/Models/WcsCmd.cs
index f8b1073..66d30db 100644
--- a/src/Khd.Core.Domain/Models/WcsCmd.cs
+++ b/src/Khd.Core.Domain/Models/WcsCmd.cs
@@ -17,6 +17,11 @@ namespace Khd.Core.Domain.Models
[Table("wcs_cmd")]
public class WcsCmd
{
+ ///
+ /// 任务代码
+ ///
+ [Column("task_code")]
+ public string taskCode;
[Key]
[Column("objid")]
diff --git a/src/Khd.Core.Domain/Models/WcsTask.cs b/src/Khd.Core.Domain/Models/WcsTask.cs
index a3c33f8..aaeaa57 100644
--- a/src/Khd.Core.Domain/Models/WcsTask.cs
+++ b/src/Khd.Core.Domain/Models/WcsTask.cs
@@ -17,6 +17,8 @@ namespace Khd.Core.Domain.Models
[Table("wcs_task")]
public class WcsTask
{
+ [Column("from_floor_no")]
+ public int? fromFloorNo;
[Key]
[Column("objid")]
diff --git a/src/Khd.Core.Domain/Models/WmsBaseLocation.cs b/src/Khd.Core.Domain/Models/WmsBaseLocation.cs
index 52f49f1..d4261a2 100644
--- a/src/Khd.Core.Domain/Models/WmsBaseLocation.cs
+++ b/src/Khd.Core.Domain/Models/WmsBaseLocation.cs
@@ -22,6 +22,11 @@ namespace Khd.Core.Domain.Models
[Column("location_id")]
public long locationId { get; set; }
+ ///
+ /// 料箱号
+ ///
+ [Column("container_code")]
+ public string containerCode { get; set; }
///
/// 仓库ID,关联wms_base_warehouse的warehouse_id
///
@@ -34,6 +39,9 @@ namespace Khd.Core.Domain.Models
[Column("agv_position_code")]
public string agvPositionCode { get; set; }
+ [Column("warehouse_floor")]
+ public int warehouseFloor { get; set; }
+
///
/// 库位编码
///
diff --git a/src/Khd.Core.EntityFramework/DefaultDbContext.cs b/src/Khd.Core.EntityFramework/DefaultDbContext.cs
index 4a2e0da..15e754d 100644
--- a/src/Khd.Core.EntityFramework/DefaultDbContext.cs
+++ b/src/Khd.Core.EntityFramework/DefaultDbContext.cs
@@ -10,89 +10,60 @@ namespace Khd.Core.EntityFramework
}
public DbSet BaseDictionary { get; set; }
-
public DbSet BaseEquip { get; set; }
-
-
-
public DbSet BasePlcpoint { get; set; }
-
-
-
public DbSet MesBasePalletInfo { get; set; }
-
-
-
public DbSet WcsCmd { get; set; }
-
public DbSet WcsCmdLog { get; set; }
-
public DbSet WcsStock { get; set; }
-
public DbSet WcsTask { get; set; }
-
public DbSet WcsTaskLog { get; set; }
-
-
public DbSet WcsWarehouseOrder { get; set; }
-
public DbSet WcsWarehouseOrderDetaile { get; set; }
-
public DbSet WmsBaseLocation { get; set; }
-
public DbSet WmsBaseWarehouse { get; set; }
-
public DbSet WmsProductInstock { get; set; }
-
public DbSet WmsProductInstockDetail { get; set; }
-
public DbSet WmsProductOutstock { get; set; }
-
public DbSet WmsProductOutstockDetail { get; set; }
-
public DbSet WmsProductStock { get; set; }
-
public DbSet WmsProductStockSaleorder { get; set; }
-
public DbSet WmsRawInstock { get; set; }
-
public DbSet WmsRawInstockDetail { get; set; }
-
public DbSet WmsRawOutstock { get; set; }
-
public DbSet WmsRawOutstockDetail { get; set; }
-
public DbSet WmsRawStock { get; set; }
-
public DbSet WmsRawStockOccupy { get; set; }
-
public DbSet WmsWarehouseMaterial { get; set; }
+
public DbSet WcsOutstockLock { get; set; }
+
public DbSet MesBaseBarcodeInfo { get; set; }
+
public DbSet PlcPoint { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Khd.Core.Plc/StaticPlcHelper.cs b/src/Khd.Core.Plc/StaticPlcHelper.cs
new file mode 100644
index 0000000..e65e848
--- /dev/null
+++ b/src/Khd.Core.Plc/StaticPlcHelper.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Khd.Core.Plc
+{
+ ///
+ /// Plc帮助类
+ ///
+ public static class StaticPlcHelper
+ {
+ ///
+ /// 进行高低位转换后,写入Plc地址
+ ///
+ /// plc
+ /// 写入地址
+ /// 值
+ /// 长度
+ public static void WriteToPoint(this Plc.S7.Plc plc,string address,string valueString,string len)
+ {
+ var value = GetValue(len, valueString);
+ plc.Write(address, value);
+ }
+
+ ///
+ /// 电气写入点位高低位转换
+ ///
+ /// 点位地址位长度
+ /// 写入数值
+ ///
+ private static object GetValue(string len, string value)
+ {
+ if (len == "2")
+ {
+ return Convert.ToInt16(value);
+ }
+ if (len == "4")
+ {
+ return Convert.ToInt32(value);
+ }
+ return 0;
+ }
+ }
+}
diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs
index 3b60008..ebce8a2 100644
--- a/src/Khd.Core.Wcs/MainCentralControl.cs
+++ b/src/Khd.Core.Wcs/MainCentralControl.cs
@@ -1,7 +1,7 @@
using Khd.Core.EntityFramework;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
-using Khd.Core.Wcs.MyWcs;
+using Khd.Core.Wcs.Wcs;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
@@ -31,10 +31,20 @@ namespace Khd.Core.Wcs
public void Start()
{
try
- {
+ { //加载配置项
+ foreach (var plcConfig in StaticData.PlcConfigs)
+ {
+ if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))
+ {
+ Plc.S7.Plc plc;
+ plc = new Plc.S7.Plc((CpuType)plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
+ plc.Open();
+ StaticData.PlcDic.TryAdd(plcConfig.Code, plc);
+ }
+ }
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
- StaticData.PlcPoints = dbContext.PlcPoint.GroupBy(t => t.Floor_No).ToDictionary(t => t.Key, t => t.ToDictionary(t => t.PlcPoint_No, t => t));
+
//设置程序启动时清空点位的数据=>0为 Int16位
QingKongDianWei = GetValue("2", "0");
//设置默认处理完成=>1为 Int16位
@@ -43,39 +53,60 @@ namespace Khd.Core.Wcs
WcsMoRenQuXiang = GetValue("2", "1");
StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();
- var baseEquips = dbContext.BaseEquip.ToList();
- //加载配置项
- foreach (var plcConfig in StaticData.PlcConfigs)
- {
- if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))
- {
- var plc = new Plc.S7.Plc((CpuType)plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
- plc.Open();
- StaticData.PlcDic.TryAdd(plcConfig.Code, plc);
- }
- }
- //连接PLC判断
- foreach (var item in baseEquips)
- {
- if (item.floorNo != null)
- {
- if (item.equipType == 1)
- {
- DockingPositionLogic dockingPositionLogic = new(item.floorNo.Value, item, _host, StaticData.PlcDic[0]);
- dockingPositionLogic.Start();
- }
- else if (item.equipType == 2)
- {
- ElevatorLogic elevatorLogic = new(item.floorNo.Value, item, _host, StaticData.PlcDic[0]);
- elevatorLogic.Start();
- }
- else if (item.equipType == 4 || item.equipType == 5)
- {
- AgvTaskLogic agvTaskLogic = new(item.floorNo.Value, item, baseEquips.First(t => t.equipType == 1 && t.floorNo == item.floorNo), _host, StaticData.PlcDic[0]);
- agvTaskLogic.Start();
- }
- }
- }
+ StaticData.BaseEquip = dbContext.BaseEquip.ToList();
+
+ ////创建任务
+ //CreateTaskByRecord createTaskByRecord = new(_host, StaticData.PlcDic[0], "");
+ //createTaskByRecord.StartPoint();
+
+ //一楼提升机以及接驳位
+ 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, 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();
+
+ ////二楼线体
+ //var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 3).First();
+ //SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[0], SecondFloorLineEquip.floorNo.Value, SecondFloorLineEquip.equipNo);
+ //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, ThirdBaseFloorEquip.equipNo);
+ //thirdFloorPoint.StartPoint();
+
+ ////三层AGV
+ //var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
+ //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[0], ThirdFloorAgvEquip.floorNo.Value, ThirdFloorAgvEquip.equipNo);
+ //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, FifthBaseFloorEquip.equipNo);
+ fifthFloorPoint.StartPoint();
+
+ ////五层线体
+ //var FiveFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 4 && t.equipType == 3).First();
+ //FiveFloorLine fiveFloorLine = new(_host, StaticData.PlcDic[0], FiveFloorLineEquip.floorNo.Value, FiveFloorLineEquip.equipNo);
+ //fiveFloorLine.StartPoint();
+
+ ////五层CTU
+ //var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
+ //FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[0], FiveFloorCTUEquip.floorNo.Value, FiveFloorCTUEquip.equipNo);
+ //fiveFloorCTU.StartPoint();
+
+ ////五层AGV
+ //var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First();
+ //FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[0], FifthFloorAgvEquip.floorNo.Value, FifthFloorAgvEquip.equipNo);
+ //fifthFloorAGV.StartPoint();
}
catch (Exception ex)
{
diff --git a/src/Khd.Core.Wcs/MyWcs/AgvTaskLogic.cs b/src/Khd.Core.Wcs/MyWcs/AgvTaskLogic.cs
deleted file mode 100644
index a5d39a9..0000000
--- a/src/Khd.Core.Wcs/MyWcs/AgvTaskLogic.cs
+++ /dev/null
@@ -1,282 +0,0 @@
-using Khd.Core.Domain.Dto.webapi;
-using Khd.Core.Domain.Models;
-using Khd.Core.EntityFramework;
-using Khd.Core.Wcs.Global;
-using Masuit.Tools.Logging;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Khd.Core.Wcs.MyWcs
-{
- ///
- /// AGV任务逻辑
- ///
- public class AgvTaskLogic
- {
- private readonly Dictionary _plcPoints;
- private readonly Plc.S7.Plc _plc;
- private readonly int _floorNo;
- private readonly BaseEquip _baseEquip;
- private readonly IHost _host;
- private readonly BaseEquip _lineEquip;
-
- ///
- /// 构造函数
- ///
- /// 楼层号
- /// 基站设备
- /// 线路设备
- /// IHost
- /// Plc
- public AgvTaskLogic(int FloorNo, BaseEquip baseEquip, BaseEquip lineEquip, IHost host, Plc.S7.Plc plc)
- {
- _plc = plc;
- _floorNo = FloorNo;
- _baseEquip = baseEquip;
- _lineEquip = lineEquip;
- _host = host;
- _plcPoints = StaticData.PlcPoints[FloorNo];
- }
-
- ///
- /// 启动AGV任务逻辑
- ///
- public void Start()
- {
- Thread ExecuteLogicThread = new(ExecuteTaskLogic)
- {
- IsBackground = true
- };
- ExecuteLogicThread.Start();
-
- Thread ContinueLogicThread = new(ContinueTaskLogic)
- {
- IsBackground = true
- };
- ContinueLogicThread.Start();
- Console.WriteLine($"{DateTime.Now}:{this._floorNo}楼Agv任务逻辑启动成功");
- LogManager.Info($"{this._floorNo}楼Agv任务逻辑启动成功");
- }
-
- ///
- /// 执行AGV任务逻辑
- ///
- private void ExecuteTaskLogic()
- {
- while (true)
- {
- try
- {
- using var scope = _host.Services.CreateScope();
- using var dbContext = scope.ServiceProvider.GetRequiredService();
- var wcsTask = dbContext.WcsTask
- .Where(t => t.floorNo == _floorNo)
- .Where(t => t.nextPointId == _baseEquip.objid)
- .OrderBy(t => t.createTime)
- .FirstOrDefault();
- if (wcsTask != null && wcsTask.taskStatus == 0)//未执行的任务
- {
- if (wcsTask.taskType % 2 == 1)//入库
- {
- var wmsBaseLocations = dbContext.WmsBaseLocation
- .Where(t => t.activeFlag == "1")
- .Where(t => t.delFlag == "0")
- .Where(t => t.instockFlag == "0")
- .Where(t => t.locationScrapType == "1")
- .Where(t => t.locationStatus == "1")
- .Where(t => t.outstockFlag == "0")
- .Where(t => t.warehouseId == wcsTask.endPointId).ToList();
- if (wmsBaseLocations.Count > 0)
- {
- var wmsBaseLocation = wmsBaseLocations.First();
- wcsTask.endPointId = wmsBaseLocation.locationId;
- wcsTask.endPointNo = wmsBaseLocation.locationCode;
- var request = new RequestAGVTaskDto()
- {
- reqCode = wcsTask.objid.ToString(),
- taskMode = "2",
- positionCodePath = new List
- {
- new Position
- {
- podCode=_lineEquip.equipNo
- },
- new Position
- {
- podCode=wmsBaseLocation.agvPositionCode
- }
- }
- };
- var reponse = SendTask(request);
- if (reponse != null)
- {
- if (reponse.message == "成功")
- {
- LogManager.Info("AGV任务执行成功,任务ID:" + wcsTask.objid);
- wcsTask.taskStatus = 1;
- wcsTask.updateTime = DateTime.Now;
- wmsBaseLocation.instockFlag = "1";
- wmsBaseLocation.locationStatus = "2";
- dbContext.Update(wmsBaseLocation);
- dbContext.Update(wcsTask);
- dbContext.SaveChanges();
- }
- else
- {
- LogManager.Debug("AGV任务执行失败,任务ID:" + wcsTask.objid + ",失败原因:" + reponse.message);
- }
- }
- }
- }
- else//出库
- {
- var request = new RequestAGVTaskDto()
- {
- reqCode = wcsTask.objid.ToString(),
- taskMode = "2",
- positionCodePath = new List
- {
- new Position
- {
- podCode=wcsTask.startPointNo
- },
- new Position
- {
- podCode=wcsTask.nextPointNo
- }
- }
- };
- var reponse = SendTask(request);
- if (reponse != null)
- {
- if (reponse.message == "成功")
- {
- LogManager.Info("AGV任务执行成功,任务ID:" + wcsTask.objid);
- var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.agvPositionCode == wcsTask.startPointNo).ToList();
- foreach (var item in wmsBaseLocations)
- {
- var wmsBaseWarehouse = dbContext.WmsBaseWarehouse.FirstOrDefault(t => t.warehouseId == item.warehouseId);
- if (wmsBaseWarehouse != null && wmsBaseWarehouse.warehouseFloor == _floorNo)
- {
- item.outstockFlag = "1";
- item.locationStatus = "6";
- dbContext.Update(item);
- break;
- }
- }
- wcsTask.taskStatus = 1;
- wcsTask.updateTime = DateTime.Now;
- dbContext.Update(wcsTask);
- dbContext.SaveChanges();
- }
- else
- {
- LogManager.Debug("AGV任务执行失败,任务ID:" + wcsTask.objid + ",失败原因:" + reponse.message);
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- LogManager.Error(ex);
- }
- Thread.Sleep(1000);
- }
- }
-
- ///
- /// 继续执行AGV任务逻辑
- ///
- private void ContinueTaskLogic()
- {
- while (true)
- {
- try
- {
- using var scope = _host.Services.CreateScope();
- using var dbContext = scope.ServiceProvider.GetRequiredService();
- var wcsTask = dbContext.WcsTask
- .Where(t => t.floorNo == _floorNo)
- .Where(t => t.nextPointId == _baseEquip.objid)
- .Where(t=>t.taskStatus==2)
- .OrderBy(t => t.createTime)
- .FirstOrDefault();
- if (wcsTask != null)
- {
- var request = new RequestAGVTaskDto();
- request.reqCode = wcsTask.objid.ToString();
- var reponse = ContinueTask(request);
- if (reponse != null)
- {
- if (reponse.message == "成功")
- {
- LogManager.Info("AGV任务继续执行成功,任务ID:" + wcsTask.objid);
- wcsTask.taskStatus = 3;
- wcsTask.updateTime = DateTime.Now;
- var wmsBaseLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationId == wcsTask.endPointId);
- if (wmsBaseLocation != null)
- {
- wmsBaseLocation.instockFlag = "0";
- wmsBaseLocation.outstockFlag = "0";
- wmsBaseLocation.locationStatus = "1";
- dbContext.Update(wmsBaseLocation);
- }
- dbContext.Update(wcsTask);
- dbContext.SaveChanges();
- }
- else
- {
- LogManager.Debug("AGV任务继续执行失败,任务ID:" + wcsTask.objid + ",失败原因:" + reponse.message);
- }
- }
- }
- }
- catch(Exception ex)
- {
- LogManager.Error(ex);
- }
- }
- }
-
- ///
- /// 发送任务
- ///
- private ReponseagvCallbackDto? SendTask(RequestAGVTaskDto request)
- {
- if (_baseEquip.serverPort == null)
- {
- throw new Exception("服务器端口不能为空");
- }
- string ip = _baseEquip.serverIp;
- int port = _baseEquip.serverPort.Value;
- string url = "";
- string message = JsonConvert.SerializeObject(request);
- string result = HttpHelper.SendPostMessage(ip, port, url, message);
- return JsonConvert.DeserializeObject(result);
- }
-
- ///
- /// 继续执行任务
- ///
- private ReponseagvcontinueTaskDto? ContinueTask(RequestAGVTaskDto request)
- {
- if (_baseEquip.serverPort == null)
- {
- throw new Exception("服务器端口不能为空");
- }
- string ip = _baseEquip.serverIp;
- int port = _baseEquip.serverPort.Value;
- string url = "";
- string message = JsonConvert.SerializeObject(request);
- string result = HttpHelper.SendPostMessage(ip, port, url, message);
- return JsonConvert.DeserializeObject(result);
- }
- }
-}
diff --git a/src/Khd.Core.Wcs/MyWcs/DockingPositionLogic.cs b/src/Khd.Core.Wcs/MyWcs/DockingPositionLogic.cs
deleted file mode 100644
index b234495..0000000
--- a/src/Khd.Core.Wcs/MyWcs/DockingPositionLogic.cs
+++ /dev/null
@@ -1,194 +0,0 @@
-using Khd.Core.Domain.Models;
-using Khd.Core.EntityFramework;
-using Khd.Core.Wcs.Global;
-using Masuit.Tools.Logging;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Khd.Core.Wcs.MyWcs
-{
- ///
- /// 接驳位逻辑
- ///
- public class DockingPositionLogic
- {
- private readonly int _floorNo;
- private readonly Dictionary _dockingPosition;
- private readonly Plc.S7.Plc _plc;
- private readonly IHost _host;
- private readonly BaseEquip _currentEquip;
-
- ///
- /// 构造函数
- ///
- /// 楼层号
- /// 当前设备
- /// IHost
- /// Plc
- public DockingPositionLogic(int floorNo, BaseEquip currentEquip, IHost host, Plc.S7.Plc plc)
- {
- _floorNo = floorNo;
- _host = host;
- _plc = plc;
- _currentEquip = currentEquip;
- _dockingPosition = StaticData.PlcPoints[floorNo];
- }
-
- ///
- /// 启动线程
- ///
- public void Start()
- {
- var ExecuteLogicThread = new Thread(ExecuteLogic);
- ExecuteLogicThread.IsBackground = true;
- ExecuteLogicThread.Start();
- Console.WriteLine($"{DateTime.Now}:{this._floorNo}楼接驳位线程启动成功");
- LogManager.Info($"{this._floorNo}楼接驳位线程启动成功");
- }
-
- ///
- /// 执行任务
- ///
- public void ExecuteLogic()
- {
- while (true)
- {
- try
- {
- var rfid = _plc.Read(_dockingPosition[$"RFID00{_floorNo}"].PlcPoint_Address);
- var serialNo = _plc.Read(_dockingPosition[$"SerialNo00{_floorNo}"].PlcPoint_Address);
- var isPallet = _plc.Read(_dockingPosition[$"IsPallet00{_floorNo}"].PlcPoint_Address);
- var lineSignal = _plc.Read(_dockingPosition[$"LineSignal00{_floorNo}"].PlcPoint_Address);
- var wcsRun = _plc.Read(_dockingPosition[$"WcsRun00{_floorNo}"].PlcPoint_Address);
- if (rfid != null && serialNo != null && isPallet != null && lineSignal != null && wcsRun != null)
- {
- if (!string.IsNullOrEmpty(rfid.ToString()) && Convert.ToInt32(isPallet) == 1)
- {
- using var scope = _host.Services.CreateScope();
- using var dbContext = scope.ServiceProvider.GetRequiredService();
- var wcsTask = dbContext.WcsTask
- .Where(t => t.floorNo == _floorNo)
- .Where(t => t.containerNo == rfid.ToString())
- .OrderBy(t => t.createTime)
- .FirstOrDefault();
-
- if (wcsTask == null)
- {
- var PalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == rfid.ToString());
- if (PalletInfo != null)
- {
- var WarehouseMaterial = dbContext.WmsWarehouseMaterial.FirstOrDefault(t => t.storageId == PalletInfo.materialId);
- if (WarehouseMaterial != null)
- {
- var BaseWarehouse = dbContext.WmsBaseWarehouse.FirstOrDefault(t => t.warehouseId == WarehouseMaterial.warehouseId);
- if (BaseWarehouse != null)
- {
- if (BaseWarehouse.warehouseFloor == _floorNo)
- {
- var agvEquip = dbContext.BaseEquip.FirstOrDefault(t => t.floorNo == _floorNo && (t.equipType == 4 || t.equipType == 5));
- if (agvEquip != null)
- {
- wcsTask = new WcsTask()
- {
- objid = StaticData.SnowId.NextId(),
- floorNo = _floorNo,
- containerNo = rfid.ToString(),
- createBy = "WCS",
- createTime = DateTime.Now,
- startPointId = _currentEquip.objid,
- startPointNo = _currentEquip.equipNo,
- currPointId = _currentEquip.objid,
- currPointNo = _currentEquip.equipNo,
- taskStatus = 0,
- endPointId = BaseWarehouse.warehouseId,
- endPointNo = BaseWarehouse.warehouseCode,
- equipmentNo = _currentEquip.equipNo,
- masterId = null,
- materialId = PalletInfo.materialId,
- materialNo = PalletInfo.materialCode,
- nextPointId = agvEquip.objid,
- nextPointNo = agvEquip.equipNo,
- taskType = 0,
- useFlag = 1
- };
- }
- }
- else
- {
- var elevatorEquip = dbContext.BaseEquip.FirstOrDefault(t => t.floorNo == 1 && t.equipType == 2);
- if (elevatorEquip != null)
- {
- wcsTask = new WcsTask()
- {
- objid = StaticData.SnowId.NextId(),
- floorNo = _floorNo,
- containerNo = rfid.ToString(),
- createBy = "WCS",
- createTime = DateTime.Now,
- startPointId = _currentEquip.objid,
- startPointNo = _currentEquip.equipNo,
- currPointId = _currentEquip.objid,
- currPointNo = _currentEquip.equipNo,
- taskStatus = 0,
- endPointId = BaseWarehouse.warehouseId,
- endPointNo = BaseWarehouse.warehouseCode,
- equipmentNo = _currentEquip.equipNo,
- masterId = null,
- materialId = PalletInfo.materialId,
- materialNo = PalletInfo.materialCode,
- nextPointId = elevatorEquip.objid,
- nextPointNo = elevatorEquip.equipNo,
- taskType = 0,
- useFlag = 1
- };
- }
- }
- }
- }
- }
- }//没有任务,默认入库
-
- if (wcsTask != null && wcsTask.taskStatus == 0)
- {
- var ElevatorEquip = dbContext.BaseEquip.First(t => t.equipType == 2);
- var AgvEquip = dbContext.BaseEquip.FirstOrDefault(t => t.floorNo == _floorNo && (t.equipType == 4 || t.equipType == 5));
- if (wcsTask.nextPointId == ElevatorEquip.objid)//下一个为提升机
- {
- wcsTask.taskStatus = 1;
- wcsTask.currPointId = _currentEquip.objid;
- wcsTask.currPointNo = _currentEquip.equipNo;
- wcsTask.nextPointId = ElevatorEquip.objid;
- wcsTask.nextPointNo = ElevatorEquip.equipNo;
- dbContext.Update(wcsTask);
- dbContext.SaveChanges();
- _plc.Write(_dockingPosition[$"WcsRun00{_floorNo}"].PlcPoint_Address, 1);
- }
- else if (AgvEquip != null && wcsTask.nextPointId == AgvEquip.objid)//下一个为AGV,即入库
- {
- wcsTask.taskStatus = 0;
- wcsTask.currPointId = _currentEquip.objid;
- wcsTask.currPointNo = _currentEquip.equipNo;
- wcsTask.nextPointId = AgvEquip.objid;
- wcsTask.nextPointNo = AgvEquip.equipNo;
- dbContext.Update(wcsTask);
- dbContext.SaveChanges();
- _plc.Write(_dockingPosition[$"WcsRun00{_floorNo}"].PlcPoint_Address, 2);
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- LogManager.Error(ex);
- }
- Thread.Sleep(1000);
- }
- }
- }
-}
diff --git a/src/Khd.Core.Wcs/MyWcs/ElevatorLogic.cs b/src/Khd.Core.Wcs/MyWcs/ElevatorLogic.cs
deleted file mode 100644
index b4a752b..0000000
--- a/src/Khd.Core.Wcs/MyWcs/ElevatorLogic.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-using Khd.Core.Domain.Models;
-using Khd.Core.EntityFramework;
-using Khd.Core.Wcs.Global;
-using Masuit.Tools.Logging;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Khd.Core.Wcs.MyWcs
-{
- ///
- /// 提升机逻辑
- ///
- public class ElevatorLogic
- {
- private readonly Plc.S7.Plc _plc;
- private readonly int _floorNo;
- private readonly Dictionary ElevatorPoints;
- private readonly IHost _host;
- private readonly BaseEquip _baseEquip;
-
- ///
- /// 构造函数
- ///
- /// 楼层号
- /// 基础设备
- /// IHost
- /// Plc
- public ElevatorLogic(int FloorNo, BaseEquip baseEquip, IHost host, Plc.S7.Plc plc)
- {
- _plc = plc;
- _floorNo = FloorNo;
- _host = host;
- _baseEquip = baseEquip;
- ElevatorPoints = StaticData.PlcPoints[_floorNo];
- }
-
- ///
- /// 启动提升机逻辑
- ///
- public void Start()
- {
- Thread executeThread = new(ExecuteLogic)
- {
- IsBackground = true
- };
- executeThread.Start();
- Console.WriteLine($"{DateTime.Now}:提升机逻辑启动");
- LogManager.Info("提升机逻辑启动");
- }
-
- ///
- /// 执行逻辑
- ///
- public void ExecuteLogic()
- {
- while (true)
- {
- try
- {
- var targetFloor = _plc.Read(ElevatorPoints["ElevatorTargetFloor"].PlcPoint_Address);//目标楼层
- var signal = _plc.Read(ElevatorPoints["ElevatorSignal"].PlcPoint_Address);//到位信号
- var state = _plc.Read(ElevatorPoints["ElevatorState"].PlcPoint_Address);//提升机状态
- var currentFloor = _plc.Read(ElevatorPoints["ElevatorCurrentFloor"].PlcPoint_Address);//提升机当前楼层
- var serialNo = _plc.Read(ElevatorPoints["ElevatorSerialNo"].PlcPoint_Address);//提升机流水号
- var taskState = _plc.Read(ElevatorPoints["ElevatorTaskState"].PlcPoint_Address);//任务状态
- if (targetFloor != null && signal != null && state != null && currentFloor != null && serialNo != null && taskState != null)
- {
- if (Convert.ToInt32(state) == 0 && Convert.ToInt32(taskState) == 2)
- {
- using var scope = _host.Services.CreateScope();
- using var dbContext = scope.ServiceProvider.GetRequiredService();
- for (int i = 1; i <= 5; i++)
- {
- try
- {
- var elevatorSerialNo = _plc.Read(StaticData.PlcPoints[i][$"ElevatorSerialNo00{i}"].PlcPoint_Address);
- var elevatorTake = _plc.Read(StaticData.PlcPoints[i][$"ElevatorTake00{i}"].PlcPoint_Address);
- if (elevatorSerialNo != null && elevatorTake != null && Convert.ToInt32(elevatorTake) == 1 && Convert.ToInt64(elevatorSerialNo) > 0)
- {
- var baseEquip = dbContext.BaseEquip.First(t => t.floorNo == i && t.equipType == 2);
- var wcsTask = dbContext.WcsTask.OrderBy(t => t.createTime).FirstOrDefault(t => t.nextPointId == baseEquip.objid && t.taskStatus == 1);
- if (wcsTask != null)
- {
- var endEquip = dbContext.BaseEquip.First(t => t.objid == wcsTask.endPointId);
- if (endEquip.floorNo != null)
- {
- wcsTask.taskStatus = 2;
- wcsTask.nextPointId = _baseEquip.objid;
- wcsTask.nextPointNo = _baseEquip.equipNo;
- _plc.Write(ElevatorPoints["ElevatorCurrentFloor"].PlcPoint_Address, i);
- _plc.Write(ElevatorPoints["ElevatorTargetFloor"].PlcPoint_Address, endEquip.floorNo);//写入目的地楼层
- dbContext.Update(wcsTask);
- dbContext.SaveChanges();
- LogManager.Info($"提升机下发任务{i}=>{wcsTask.nextPointId}");
- Console.WriteLine($"{DateTime.Now}:提升机下发任务{i}=>{wcsTask.nextPointId}");
- break;
- }
- }
- }
- }
- catch (Exception e)
- {
- LogManager.Error($"{i}楼提升机异常", e);
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- LogManager.Error(ex);
- }
- Thread.Sleep(1000);
- }
- }
- }
-}
diff --git a/src/Khd.Core.Wcs/Program.cs b/src/Khd.Core.Wcs/Program.cs
index c35db02..fcb3fb0 100644
--- a/src/Khd.Core.Wcs/Program.cs
+++ b/src/Khd.Core.Wcs/Program.cs
@@ -12,6 +12,7 @@ internal class Program
private static void Main(string[] args)
{
+ Console.ForegroundColor = ConsoleColor.Yellow;
Init(); //初始化加载配置文件
AppDomain.CurrentDomain.UnhandledException += GlobalExceptionHandler; //全局异常捕获
try
@@ -45,6 +46,7 @@ internal class Program
catch (Exception ex)
{
Console.Write("系统启动异常:" + ex.Message + "\n" + ex.StackTrace);
+ LogManager.Error(ex);
}
}
@@ -78,7 +80,7 @@ internal class Program
StaticData.PlcConfigs = configuration.GetSection("PlcConfigs").Get>();
ConnectionStrings.ConnectionString = configuration["ConnectionStrings:DefaultConnection"];
}
- static IHostBuilder CreateHostBuilder(string[] args) =>
+ private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) =>
{
diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs
index 5201566..34acc02 100644
--- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs
+++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs
@@ -61,6 +61,8 @@ namespace Khd.Core.Wcs.Wcs
var FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now+":出库任务监听启动成功");
+ LogManager.Info("出库任务监听启动成功");
}
public void MonitorInLocatorPoint()
{
@@ -83,6 +85,7 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
+
///
/// 成品出库
///
diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs
index 0e596bc..75739dc 100644
--- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs
+++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs
@@ -2,6 +2,7 @@
using Khd.Core.Application.Interface;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
+using Khd.Core.Plc;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
@@ -26,85 +27,38 @@ namespace Khd.Core.Wcs.Wcs
///
/// 到位信号 读
///
- private readonly BasePlcpoint linesignal01 ;
- ///
- /// 是否有托盘 读
- ///
- private readonly BasePlcpoint ispallet01 ;
+ private readonly BasePlcpoint linesignal01;
///
/// 去向 写
///
- private readonly BasePlcpoint wcsrun01 ;
- ///
- /// 流水号 读
- ///
- private readonly BasePlcpoint serialno01 ;
+ private readonly BasePlcpoint wcsrun01;
///
/// 提升机流水号 读
///
- private readonly BasePlcpoint serialno06 ;
+ private readonly BasePlcpoint serialno06;
///
/// 提升机状态 读
///
- private readonly BasePlcpoint equipstate06 ;
+ private readonly BasePlcpoint equipstate06;
///
/// 提升机任务状态 读
///
- private readonly BasePlcpoint taskstate06 ;
+ private readonly BasePlcpoint hoistertrayin06;
///
/// 提升机当前楼层 写
///
- private readonly BasePlcpoint currentfloor06 ;
+ private readonly BasePlcpoint currentfloor06;
///
/// 提升机目的楼层 写
///
- private readonly BasePlcpoint targetfloor06 ;
+ private readonly BasePlcpoint targetfloor06;
///
- /// 提升机到位信号 读
+ /// 提升机反馈流水号
///
- private readonly BasePlcpoint linesignal06 ;
- ///
- /// 一楼提升机前允许取 读
- ///
- private readonly BasePlcpoint hoisterallowedtake01 ;
- ///
- /// 一楼提升机前反馈流水号 读
- ///
- private readonly BasePlcpoint feedserialno01 ;
- ///
- /// 二楼提升机前允许取 读
- ///
- private readonly BasePlcpoint hoisterallowedtake02 ;
- ///
- /// 二楼提升机前反馈流水号 读
- ///
- private readonly BasePlcpoint feedserialno02 ;
- ///
- /// 三楼提升机前允许取 读
- ///
- private readonly BasePlcpoint hoisterallowedtake03 ;
- ///
- /// 三楼提升机前反馈流水号 读
- ///
- private readonly BasePlcpoint feedserialno03 ;
- ///
- /// 四楼提升机前允许取 读
- ///
- private readonly BasePlcpoint hoisterallowedtake04 ;
- ///
- /// 四楼提升机前反馈流水号 读
- ///
- private readonly BasePlcpoint feedserialno04 ;
- ///
- /// 五楼提升机前允许取 读
- ///
- private readonly BasePlcpoint hoisterallowedtake05 ;
- ///
- /// 五楼提升机前反馈流水号 读
- ///
- private readonly BasePlcpoint feedserialno05 ;
+ private readonly BasePlcpoint reserialno06;
- public FirstFloor(IHost host, Plc.S7.Plc plc, string siteNo)
+
+ public FirstFloor(IHost host, Plc.S7.Plc plc)
{
this._host = host;
this._plc = plc;
@@ -113,53 +67,41 @@ 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.ispallet01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("ispallet01"));
//去向 写
this.wcsrun01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("wcsrun01"));
- //流水号 读
- this.serialno01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("serialno01"));
+
+
//一楼提升机流水号 读
- this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorHoister") && t.plcpointNo.Contains("serialno06"));
+ this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("serialno06"));
//一楼提升机状态 读
- this.equipstate06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorHoister") && t.plcpointNo.Contains("equipstate06"));
+ this.equipstate06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("equipstate06"));
//一楼提升机任务状态 读
- this.taskstate06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorHoister") && t.plcpointNo.Contains("taskstate06"));
+ this.hoistertrayin06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("hoistertrayin06"));
//一楼提升机当前楼层 写
- this.currentfloor06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorHoister") && t.plcpointNo.Contains("currentfloor06"));
+ this.currentfloor06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("currentfloor06"));
//一楼提升机目的楼层 写
- this.targetfloor06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorHoister") && t.plcpointNo.Contains("targetfloor06"));
+ this.targetfloor06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("targetfloor06"));
//一楼提升机到位信号 读
- this.linesignal06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorHoister") && t.plcpointNo.Contains("linesignal06"));
- //一楼提升机前允许取
- this.hoisterallowedtake01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorBeforeHoister") && t.plcpointNo.Contains("hoisterallowedtake01"));
- //一楼提升机前反馈流水号
- this.feedserialno01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorBeforeHoister") && t.plcpointNo.Contains("feedserialno01"));
- this.hoisterallowedtake02 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("SecondFloorBeforeHoister") && t.plcpointNo.Contains("hoisterallowedtake02"));
- this.feedserialno02 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("SecondFloorBeforeHoister") && t.plcpointNo.Contains("feedserialno02"));
- this.hoisterallowedtake03 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("ThirdFloorBeforeHoister") && t.plcpointNo.Contains("hoisterallowedtake03"));
- this.feedserialno03 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("ThirdFloorBeforeHoister") && t.plcpointNo.Contains("feedserialno03"));
- this.hoisterallowedtake04 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FourthlyFloorBeforeHoister") && t.plcpointNo.Contains("hoisterallowedtake04"));
- this.feedserialno04 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FourthlyFloorBeforeHoister") && t.plcpointNo.Contains("feedserialno04"));
- this.hoisterallowedtake05 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FifthFloorBeforeHoister") && t.plcpointNo.Contains("hoisterallowedtake05"));
- this.feedserialno05 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FifthFloorBeforeHoister") && t.plcpointNo.Contains("feedserialno05"));
+ this.reserialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("reserialno06"));
}
///
- /// 启动线程
+ /// 启动上件扫描监听
///
public void StartPoint()
{
Thread firstFloorLine = new Thread(FirstFloorLine);
firstFloorLine.IsBackground = true;
firstFloorLine.Start();
- Console.WriteLine("启动一楼接驳位线程");
+ Console.WriteLine(DateTime.Now + ":一楼接驳位线程启动成功");
+ LogManager.Info("一楼接驳位线程启动成功");
Thread firstFloorHoister = new Thread(FirstFloorHoister);
firstFloorHoister.IsBackground = true;
firstFloorHoister.Start();
- Console.WriteLine("启动一楼提升机线程");
+ Console.WriteLine(DateTime.Now + ":一楼提升机线程启动成功");
+ LogManager.Info("一楼提升机线程启动成功");
}
///
@@ -167,112 +109,100 @@ namespace Khd.Core.Wcs.Wcs
///
private void FirstFloorLine()
{
- List Itpyes = new List() { 1, 3, 5, 7 };
+ List Itpyes = new() { 1, 3, 5, 7 };
+ using var scope = _host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
while (true)
{
try
{
var RFID001Value = this._plc.Read(this.RFID001.plcpointAddress); //一楼RFID 读
var linesignal01Value = this._plc.Read(this.linesignal01.plcpointAddress); //到位信号 读
- var ispallet01Value = this._plc.Read(this.ispallet01.plcpointAddress); //是否有托盘 读
var wcsrun01Value = this._plc.Read(this.wcsrun01.plcpointAddress); //去向 写
- var serialno01Value = this._plc.Read(this.serialno01.plcpointAddress); //流水号 读
- using (var scope = _host.Services.CreateScope())
+ //正常读到plc值
+ if (linesignal01Value != null && RFID001Value != null)
{
- using (var dbContext = scope.ServiceProvider.GetRequiredService())
+ //正常托盘到位
+ if (Convert.ToInt32(linesignal01Value) == 1)
{
- //正常读到plc值
- if (linesignal01Value != null && RFID001Value != null || ispallet01Value != null || serialno01Value != null)
+
+ //判断task表里没有该rfid的未完成的入库信息,未下发去向
+ var task = dbContext.WcsTask.Where(t => t.containerNo == RFID001Value.ToString() && t.taskStatus < 1).FirstOrDefault();
+ if (task == null)
{
- //正常托盘到位
- if (Convert.ToInt32(linesignal01Value) != 0 && Convert.ToInt32(serialno01Value) != 0 && Convert.ToInt32(ispallet01Value) == 1 && Convert.ToInt32(ispallet01Value) != 0)
+ //入库
+
+ //根据托盘号获取物料码
+ var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).FirstOrDefault();
+ if (material != null)
{
-
- //判断task表里没有该rfid的未完成的入库信息,未下发去向
- var task = dbContext.WcsTask.Where(t => t.containerNo == RFID001Value.ToString() && t.taskStatus < 1).FirstOrDefault();
- if (task == null || Itpyes.Contains(task.taskType))
+ var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId;
+ if (warehouseId != null)
{
- //入库
- if (task == null || Itpyes.Contains(task.taskType))
+ var TargetFloor = dbContext.WmsBaseWarehouse.Where(t => t.warehouseId == warehouseId).FirstOrDefault();
+ if (TargetFloor != null)
{
- //根据托盘号获取物料码
- var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).FirstOrDefault();
- if (material != null)
+ //插入task表
+
+ var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.ud1 == "I" && t.dicField == TargetFloor.warehouseInstockType).FirstOrDefault();
+ if (dic != null)
{
- var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId;
- if (warehouseId != null)
+ var newTask = new WcsTask()
{
- var TargetFloor = dbContext.WmsBaseWarehouse.Where(t => t.warehouseId == warehouseId).FirstOrDefault();
- if (TargetFloor != null)
- {
- //插入task表
-
- var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.ud1 == "I" && t.dicField == TargetFloor.warehouseInstockType).FirstOrDefault();
- if (dic != null)
- {
- if (task == null)
- {
- var newTask = new WcsTask()
- {
- objid = StaticData.SnowId.NextId(),
- serialNo = Convert.ToInt32(serialno01Value),
- equipmentNo = "F01",
- taskType = Convert.ToInt32(dic.dicValue),
- taskStatus = 0,
- containerNo = RFID001Value.ToString(),
- materialNo = material.materialCode,
- materialId = material.materialId,
- qty = Convert.ToInt32(material.bindAmount),
- startPointId = F01,
- startPointNo = "F01",
- currPointId = F01,
- currPointNo = "F01",
- nextPointId = T01,
- nextPointNo = "T01",
- endPointId = warehouseId,
- floorNo = TargetFloor.warehouseFloor,
- useFlag = 1,
- createBy = "一楼接驳位",
- createTime = DateTime.Now,
- remark = "一楼创建入库任务"
- };
- dbContext.Add(newTask);
- }
- else
- {
- task.currPointId = F01;
- task.currPointNo = "F01";
- task.nextPointId = T01;
- task.nextPointNo = "T01";
- task.taskStatus = 0;
- task.updateBy = "一楼接驳位线程";
- task.updateTime = DateTime.Now;
- task.remark = "一楼创建入库任务";
- dbContext.WcsTask.Update(task);
- dbContext.SaveChanges();
- }
-
- //下发去向
- this._plc.Write(this.wcsrun01.plcpointAddress, 1);
- }
- }
- }
- }
- }
- //出库
- {
- //清空托盘绑定
- var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).FirstOrDefault();
- if (material != null)
- {
- dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).Delete();
- dbContext.SaveChanges();
+ objid = StaticData.SnowId.NextId(),
+ serialNo = 1235,
+ equipmentNo = "F01",
+ taskType = Convert.ToInt32(dic.dicValue),
+ taskStatus = 0,
+ containerNo = RFID001Value.ToString(),
+ materialNo = material.materialCode,
+ materialId = material.materialId,
+ qty = Convert.ToInt32(material.bindAmount),
+ startPointId = F01,
+ startPointNo = "F01",
+ currPointId = F01,
+ currPointNo = "F01",
+ nextPointId = T01,
+ nextPointNo = "T01",
+ endPointId = warehouseId,
+ fromFloorNo = 1,
+ floorNo = TargetFloor.warehouseFloor,
+ useFlag = 1,
+ createBy = "一楼接驳位",
+ createTime = DateTime.Now,
+ remark = "一楼创建入库任务"
+ };
+ dbContext.Add(newTask);
}
}
}
}
}
+ else if (Itpyes.Contains(task.taskType))
+ {
+ task.currPointId = F01;
+ task.currPointNo = "F01";
+ task.nextPointId = T01;
+ task.nextPointNo = "T01";
+ task.taskStatus = 0;
+ task.updateBy = "一楼接驳位线程";
+ task.updateTime = DateTime.Now;
+ task.remark = "一楼创建入库任务";
+ dbContext.WcsTask.Update(task);
+ dbContext.SaveChanges();
+ }
+ //出库
+ else
+ {
+ //清空托盘绑定
+ //var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).FirstOrDefault();
+ //if (material != null)
+ //{
+ // dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).Delete();
+ // dbContext.SaveChanges();
+ //}
+ }
}
}
}
@@ -289,203 +219,90 @@ namespace Khd.Core.Wcs.Wcs
///
private void FirstFloorHoister()
{
+ using var scope = _host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
while (true)
{
try
{
var serialno06Value = this._plc.Read(this.serialno06.plcpointAddress); //提升机流水号 读
var equipstate06Value = this._plc.Read(this.equipstate06.plcpointAddress); //提升机状态 读
- var taskstate06Value = this._plc.Read(this.taskstate06.plcpointAddress); //提升机任务状态 读
+ var hoisterTrayIn06Value = this._plc.Read(this.hoistertrayin06.plcpointAddress); //提升机货物到位状态 读
var currentfloor06Value = this._plc.Read(this.currentfloor06.plcpointAddress); //提升机当前楼层 写
var targetfloor06Value = this._plc.Read(this.targetfloor06.plcpointAddress); //提升机目的楼层 写
- var linesignal06Value = this._plc.Read(this.linesignal06.plcpointAddress); //提升机到位信号 读
+ var reserialno06 = this._plc.Read(this.reserialno06.plcpointAddress); //反馈流水号
- var hoisterallowedtake01Value = this._plc.Read(this.hoisterallowedtake01.plcpointAddress); //一楼提升机前允许取
- var feedserialno01Value = this._plc.Read(this.feedserialno01.plcpointAddress); //一楼提升机前反馈流水号
- var hoisterallowedtake02Value = this._plc.Read(this.hoisterallowedtake02.plcpointAddress); //二楼提升机前允许取
- var feedserialno02Value = this._plc.Read(this.feedserialno02.plcpointAddress); //二楼提升机前反馈流水号
- var hoisterallowedtake03Value = this._plc.Read(this.hoisterallowedtake03.plcpointAddress); //三楼提升机前允许取
- var feedserialno03Value = this._plc.Read(this.feedserialno03.plcpointAddress); //三楼提升机前反馈流水号
- var hoisterallowedtake04Value = this._plc.Read(this.hoisterallowedtake04.plcpointAddress); //四楼提升机前允许取
- var feedserialno04Value = this._plc.Read(this.feedserialno04.plcpointAddress); //四楼提升机前反馈流水号
- var hoisterallowedtake05Value = this._plc.Read(this.hoisterallowedtake05.plcpointAddress); //五楼提升机前允许取
- var feedserialno05Value = this._plc.Read(this.feedserialno05.plcpointAddress); //五楼提升机前反馈流水号
- using var scope = _host.Services.CreateScope();
- using var dbContext = scope.ServiceProvider.GetRequiredService();
//正常读到plc值
- if (targetfloor06Value != null && serialno06Value != null && equipstate06Value != null && taskstate06Value != null && currentfloor06Value != null && linesignal06Value != null)
+ if (targetfloor06Value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null)
{
//提升机空闲
if (Convert.ToInt32(equipstate06Value) == 0)
{
- var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == T01).Where(t => t.taskStatus > 1).FirstOrDefault();
- if (wcsTask == null)
+ var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).FirstOrDefault();
+ if (wcsTask != null)
{
- //一楼到位
- if (hoisterallowedtake01Value != null && feedserialno01Value != null && Convert.ToInt32(hoisterallowedtake01Value) == 1 && Convert.ToInt32(feedserialno01Value) > 0)
+ if (wcsTask.taskStatus == 0)//创建
{
- var task = dbContext.WcsTask.Where(t => t.serialNo == Convert.ToInt32(feedserialno01Value)).FirstOrDefault();
- if (task != null)
+ if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)
{
- if (task.nextPointId == T01)
- {
- var nextPoint = dbContext.BaseEquip
- .Where(t => t.equipType == 1)
- .Where(t => t.floorNo == task.floorNo).FirstOrDefault();
- if (nextPoint != null)
- {
- //给提升机下发去向
- this._plc.Write(this.currentfloor06.plcpointAddress, 1);
- this._plc.Write(this.targetfloor06.plcpointAddress, task.floorNo);
- //修改task状态
- task.currPointId = T01;
- task.currPointNo = "T01";
- task.nextPointId = nextPoint.objid;
- task.nextPointNo = nextPoint.equipNo;
- task.taskStatus = 1;
- task.updateBy = "提升机线程";
- task.updateTime = DateTime.Now;
- task.remark = "一楼到位提升机线程";
- dbContext.WcsTask.Update(task);
- dbContext.SaveChanges();
- continue;
- }
- }
+ wcsTask.taskStatus = 2;
+ wcsTask.updateBy = "提升机线程";
+ wcsTask.updateTime = DateTime.Now;
+ wcsTask.remark = "提升机任务执行中";
+ BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
+ this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength);
+ dbContext.Update(wcsTask);
+ dbContext.SaveChanges();
+ }
+ else
+ {
+ wcsTask.taskStatus = 1;
+ wcsTask.updateBy = "提升机线程";
+ wcsTask.updateTime = DateTime.Now;
+ wcsTask.remark = "提升机任务执行中";
+ this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(),this.targetfloor06.plcpointLength);//目的地楼层
+ dbContext.Update(wcsTask);
+ dbContext.SaveChanges();
}
}
- //二楼到位
- if (hoisterallowedtake02Value != null && feedserialno02Value != null && Convert.ToInt32(hoisterallowedtake02Value) == 1 && Convert.ToInt32(feedserialno02Value) > 0)
+ if (wcsTask.taskStatus == 1)
{
- var task = dbContext.WcsTask.Where(t => t.serialNo == Convert.ToInt32(feedserialno01Value)).FirstOrDefault();
- if (task != null)
+ if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层
{
- if (task.nextPointId == T01)
- {
- var nextPoint = dbContext.BaseEquip
- .Where(t => t.equipType == 1)
- .Where(t => t.floorNo == task.floorNo).FirstOrDefault();
- if (nextPoint != null)
- {
- //给提升机下发去向
- this._plc.Write(this.currentfloor06.plcpointAddress, 2);
- this._plc.Write(this.targetfloor06.plcpointAddress, task.floorNo);
- //修改task状态
- task.currPointId = T01;
- task.currPointNo = "T01";
- task.nextPointId = nextPoint.objid;
- task.nextPointNo = nextPoint.equipNo;
- task.taskStatus = 1;
- task.updateBy = "提升机线程";
- task.updateTime = DateTime.Now;
- task.remark = "二楼到位提升机线程";
- dbContext.WcsTask.Update(task);
- dbContext.SaveChanges();
- continue;
- }
- }
+ wcsTask.taskStatus = 2;
+ wcsTask.updateBy = "提升机线程";
+ wcsTask.updateTime = DateTime.Now;
+ wcsTask.remark = "提升机任务执行中";
+ BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
+ this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength);
+ dbContext.Update(wcsTask);
+ dbContext.SaveChanges();
}
}
- //三楼到位
- if (hoisterallowedtake03Value != null && feedserialno03Value != null && Convert.ToInt32(hoisterallowedtake03Value) == 1 && Convert.ToInt32(feedserialno03Value) > 0)
+ if (wcsTask.taskStatus == 2)
{
- var task = dbContext.WcsTask.Where(t => t.serialNo == Convert.ToInt32(feedserialno01Value)).FirstOrDefault();
- if (task != null)
+ if (Convert.ToInt32(hoisterTrayIn06Value) == 1)//托盘已经进提升机
{
- if (task.nextPointId == T01)
- {
- var nextPoint = dbContext.BaseEquip
- .Where(t => t.equipType == 1)
- .Where(t => t.floorNo == task.floorNo).FirstOrDefault();
- if (nextPoint != null)
- {
- //给提升机下发去向
- this._plc.Write(this.currentfloor06.plcpointAddress, 3);
- this._plc.Write(this.targetfloor06.plcpointAddress, task.floorNo);
- //修改task状态
- task.currPointId = T01;
- task.currPointNo = "T01";
- task.nextPointId = nextPoint.objid;
- task.nextPointNo = nextPoint.equipNo;
- task.taskStatus = 1;
- task.updateBy = "提升机线程";
- task.updateTime = DateTime.Now;
- task.remark = "三楼到位提升机线程";
- dbContext.WcsTask.Update(task);
- dbContext.SaveChanges();
- continue;
- }
- }
+ wcsTask.taskStatus = 3;
+ wcsTask.updateBy = "提升机线程";
+ wcsTask.updateTime = DateTime.Now;
+ wcsTask.remark = "提升机任务执行完成";
+ this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.floorNo.ToString(),this.targetfloor06.plcpointLength);//目的地楼层
+ dbContext.Update(wcsTask);
+ dbContext.SaveChanges();
}
}
- //四楼到位
- if (hoisterallowedtake04Value != null && feedserialno04Value != null && Convert.ToInt32(hoisterallowedtake04Value) == 1 && Convert.ToInt32(feedserialno04Value) > 0)
+ if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo)//任务状态为3,且当前楼层为任务的目的楼层
{
- var task = dbContext.WcsTask.Where(t => t.serialNo == Convert.ToInt32(feedserialno01Value)).FirstOrDefault();
- if (task != null)
- {
- if (task.nextPointId == T01)
- {
- var nextPoint = dbContext.BaseEquip
- .Where(t => t.equipType == 1)
- .Where(t => t.floorNo == task.floorNo).FirstOrDefault();
- if (nextPoint != null)
- {
- //给提升机下发去向
- this._plc.Write(this.currentfloor06.plcpointAddress, 4);
- this._plc.Write(this.targetfloor06.plcpointAddress, task.floorNo);
- //修改task状态
- task.currPointId = T01;
- task.currPointNo = "T01";
- task.nextPointId = nextPoint.objid;
- task.nextPointNo = nextPoint.equipNo;
- task.taskStatus = 1;
- task.updateBy = "提升机线程";
- task.updateTime = DateTime.Now;
- task.remark = "四楼到位提升机线程";
- dbContext.WcsTask.Update(task);
- dbContext.SaveChanges();
- continue;
- }
- }
- }
+ wcsTask.taskStatus = 4;
+ wcsTask.updateBy = "提升机线程";
+ wcsTask.updateTime = DateTime.Now;
+ wcsTask.remark = "提升机任务执行完成";
+ BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
+ this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength);//去向为2,表示提升机已到达目的地,让货出去
+ dbContext.Update(wcsTask);
+ dbContext.SaveChanges();
}
- //五楼到位
- if (hoisterallowedtake05Value != null && feedserialno05Value != null && Convert.ToInt32(hoisterallowedtake05Value) == 1 && Convert.ToInt32(feedserialno05Value) > 0)
- {
- var task = dbContext.WcsTask.Where(t => t.serialNo == Convert.ToInt32(feedserialno01Value)).FirstOrDefault();
- if (task != null)
- {
- if (task.nextPointId == T01)
- {
- var nextPoint = dbContext.BaseEquip
- .Where(t => t.equipType == 1)
- .Where(t => t.floorNo == task.floorNo).FirstOrDefault();
- if (nextPoint != null)
- {
- //给提升机下发去向
- this._plc.Write(this.currentfloor06.plcpointAddress, 5);
- this._plc.Write(this.targetfloor06.plcpointAddress, task.floorNo);
- //修改task状态
- task.currPointId = T01;
- task.currPointNo = "T01";
- task.nextPointId = nextPoint.objid;
- task.nextPointNo = nextPoint.equipNo;
- task.taskStatus = 1;
- task.updateBy = "提升机线程";
- task.updateTime = DateTime.Now;
- task.remark = "五楼到位提升机线程";
- dbContext.WcsTask.Update(task);
- dbContext.SaveChanges();
- continue;
- }
- }
- }
- }
- }
- else
- {
- Console.WriteLine($"{DateTime.Now}:提升机有任务未反,流水号为{wcsTask.serialNo}······");
- LogManager.Info($"提升机有任务未反,流水号为{wcsTask.serialNo}······");
}
}
}
diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs
index a20e618..b8b93cd 100644
--- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs
+++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs
@@ -5,6 +5,7 @@ using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
+using Newtonsoft.Json;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@@ -22,7 +23,6 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
- private readonly BasePlcpoint LineFeedSeriaNo;
int FloorNo { get; set; }
string EquipNo = "";
int agvID = 10;
@@ -38,12 +38,11 @@ namespace Khd.Core.Wcs.Wcs
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"));
- this.LineFeedSeriaNo = this.ScanPoint.First(t => t.plcpointNo.Contains("feedserialno"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
- this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
+ //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
@@ -59,26 +58,136 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now + ":五楼AGV上件扫描监听启动成功");
+ LogManager.Info("五楼AGV上件扫描监听启动成功");
}
public void MonitorInLocatorPoint()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
- List taskType = new() { 1, 2, 3, 7, 8 };
+ List taskType = new() { 1, 3, 5, 7 };
while (true)
{
try
{
- var taskList = dbContext.WcsTask.Where(t => t.nextPointId == agvID && taskType.Contains(t.taskType)).ToList();
+ var taskList = dbContext.WcsTask.Where(t => t.nextPointId == agvID).OrderBy(t => t.createTime).ToList();
if (taskList.Count == 0)
{
LogManager.Info(FloorNo + "楼AGV无任务");
}
foreach (var item in taskList)
{
- SendAndUpdateTask(item);
+ if (item.taskStatus == 0)//下发任务
+ {
+ BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
+ WcsCmd wcsCmd = new WcsCmd()
+ {
+ objid = item.objid,
+ cmdStatus = 0,
+ taskId = item.orderId,
+ useFlag = 1,
+ cmdType = item.taskType,
+ containerNo = item.containerNo,
+ createTime = DateTime.Now,
+ createBy = FloorNo + "楼AGV",
+ currPointId = baseEquip.objid,
+ currPointNo = baseEquip.equipNo,
+ nextPointId = item.endPointId,
+ nextPointNo = item.endPointNo,
+ };
+ RequestAGVTaskDto agvTask = new RequestAGVTaskDto();
+ agvTask.reqCode = item.objid.ToString();
+ agvTask.positionCodePath = new List
+ {
+ new Position
+ {
+ positionCode=wcsCmd.currPointNo,
+ type="1"
+ },
+ new Position
+ {
+ positionCode=wcsCmd.nextPointNo,
+ type="2"
+ }
+ };
+ string message = JsonConvert.SerializeObject(agvTask);
+ string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
+ var reponseMessage = JsonConvert.DeserializeObject(result);
+ if (reponseMessage != null && reponseMessage.message == "成功")
+ {
+ wcsCmd.taskCode = reponseMessage.data;
+ wcsCmd.cmdStatus = 1;
+ item.taskStatus = 1;
+ dbContext.Update(item);
+ dbContext.Add(wcsCmd);
+ dbContext.SaveChanges();
+ }
+ }
+ else
+ {
+ WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.objid == item.objid);
+ if (wcsCmd != null)
+ {
+ if (wcsCmd.cmdStatus == 2)
+ {
+ RequestAGVTaskDto agvTask = new RequestAGVTaskDto();
+ agvTask.reqCode = item.objid.ToString();
+ agvTask.taskCode = wcsCmd.taskCode;
+ string message = JsonConvert.SerializeObject(agvTask);
+ string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/continueTask", message);
+ ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result);
+ if (reponseMessage != null && reponseMessage.message == "成功")
+ {
+ wcsCmd.cmdStatus = 3;
+ dbContext.Update(wcsCmd);
+ dbContext.SaveChanges();
+ }
+ }
+ else if (wcsCmd.cmdStatus == 4)
+ {
+ //任务完成
+ //如果是入库任务,更新库存信息,并删除任务
+ if (taskType.Contains(item.taskType))
+ {
+ WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
+ .First(t => t.locationId == item.startPointId && t.warehouseFloor == 5);
+ wmsBaseLocation.outstockFlag = "0";
+ wmsBaseLocation.locationStatus = "1";
+ dbContext.Update(wmsBaseLocation);
+
+
+ dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
+ dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
+ dbContext.SaveChanges();
+ }
+ else//如果是出库任务,更新库存信息,下一个任务为提升机
+ {
+ WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
+ .First(t => t.locationId == item.startPointId && t.warehouseFloor == 5);
+ wmsBaseLocation.outstockFlag = "0";
+ wmsBaseLocation.locationStatus = "1";
+ dbContext.Update(wmsBaseLocation);
+
+ BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5);
+ BaseEquip eletorEquip = StaticData.BaseEquip.First(t => t.equipType == 2);
+ item.nextPointId = floorLineEquip.objid;
+ item.nextPointNo = floorLineEquip.equipNo;
+ item.fromFloorNo = 5;
+ item.floorNo = 1;
+ item.taskStatus = 6;
+ dbContext.Update(item);
+ dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
+ dbContext.SaveChanges();
+ }
+ }
+ }
+ }
}
+ //foreach (var item in taskList)
+ //{
+ // SendAndUpdateTask(item);
+ //}
}
catch (Exception ex)
{
@@ -91,6 +200,7 @@ namespace Khd.Core.Wcs.Wcs
}
}
+
public List GetTask(int floorNo, string equipNo)
{
using var scope = _host.Services.CreateScope();
@@ -149,16 +259,20 @@ namespace Khd.Core.Wcs.Wcs
setPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault();
}
putPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault();
- p.podCode = setPos?.agvPositionCode;
- p.podTyp = "";
+ p.positionCode = setPos?.agvPositionCode;
+ p.type = "";
agvtask.positionCodePath.Add(p);
- p.podCode = putPos?.agvPositionCode;
- p.podTyp = "";
+ p.positionCode = putPos?.agvPositionCode;
+ p.type = "";
//取料点
agvtask.positionCodePath.Add(p);
agvtask.taskTyp = "";
//给agv创建任务
- wcsToWms.genAgvSchedulingTask(agvtask);
+ var reponseMessage = wcsToWms.genAgvSchedulingTask(agvtask);
+ if (reponseMessage != null)
+ {
+
+ }
//未下发给agv下发指令
WcsCmd taskCmd = new WcsCmd()
{
diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs
index bc70659..2f8b283 100644
--- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs
+++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs
@@ -6,6 +6,7 @@ using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
+using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
{
@@ -22,7 +23,6 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
- private readonly BasePlcpoint LineFeedSeriaNo;
int FloorNo { get; set; }
string EquipNo = "";
int CTUID = 11;
@@ -38,13 +38,12 @@ namespace Khd.Core.Wcs.Wcs
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"));
- this.LineFeedSeriaNo = this.ScanPoint.First(t => t.plcpointNo.Contains("feedserialno"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
- this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
+ //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
@@ -61,25 +60,131 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now+":五楼CTU上件扫描监听启动");
+ LogManager.Info("五楼CTU上件扫描监听启动");
}
public void MonitorInLocatorPoint()
{
+ List taskType = new() { 1, 3, 5, 7 };
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
while (true)
{
try
{
- var taskList = dbContext.WcsTask.Where(t => t.nextPointId == CTUID && (t.taskType == 7 || t.taskType == 8)).GroupBy(t => t.orderId).ToList();
+ var taskList = dbContext.WcsTask.Where(t => t.nextPointId == CTUID && (t.taskType == 7 || t.taskType == 8)).ToList();
if (taskList.Count == 0)
{
LogManager.Info(FloorNo + "楼CTU无任务");
}
foreach (var item in taskList)
{
+ if (item.taskStatus == 0)//下发任务
+ {
+ BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
+ WcsCmd wcsCmd = new WcsCmd()
+ {
+ objid = item.objid,
+ cmdStatus = 0,
+ taskId = item.orderId,
+ useFlag = 1,
+ cmdType = item.taskType,
+ containerNo = item.containerNo,
+ createTime = DateTime.Now,
+ createBy = FloorNo + "楼AGV",
+ currPointId = baseEquip.objid,
+ currPointNo = baseEquip.equipNo,
+ nextPointId = item.endPointId,
+ nextPointNo = item.endPointNo,
+ };
+ RequestAGVTaskDto agvTask = new RequestAGVTaskDto();
+ agvTask.reqCode = item.objid.ToString();
+ agvTask.positionCodePath = new List
+ {
+ new Position
+ {
+ positionCode=wcsCmd.currPointNo,
+ type="1"
+ },
+ new Position
+ {
+ positionCode=wcsCmd.nextPointNo,
+ type="2"
+ }
+ };
+ string message = JsonConvert.SerializeObject(agvTask);
+ string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
+ var reponseMessage = JsonConvert.DeserializeObject(result);
+ if (reponseMessage != null && reponseMessage.message == "成功")
+ {
+ wcsCmd.taskCode = reponseMessage.data;
+ wcsCmd.cmdStatus = 1;
+ item.taskStatus = 1;
+ dbContext.Update(item);
+ dbContext.Add(wcsCmd);
+ dbContext.SaveChanges();
+ }
+ }
+ else
+ {
+ WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.objid == item.objid);
+ if (wcsCmd != null)
+ {
+ if (wcsCmd.cmdStatus == 2)
+ {
+ RequestAGVTaskDto agvTask = new RequestAGVTaskDto();
+ agvTask.reqCode = item.objid.ToString();
+ agvTask.taskCode = wcsCmd.taskCode;
+ string message = JsonConvert.SerializeObject(agvTask);
+ string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/continueTask", message);
+ ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result);
+ if (reponseMessage != null && reponseMessage.message == "成功")
+ {
+ wcsCmd.cmdStatus = 3;
+ dbContext.Update(wcsCmd);
+ dbContext.SaveChanges();
+ }
+ }
+ else if (wcsCmd.cmdStatus == 4)
+ {
+ //任务完成
+ //如果是入库任务,更新库存信息,并删除任务
+ if (taskType.Contains(item.taskType))
+ {
+ WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
+ .First(t => t.locationId == item.startPointId && t.warehouseFloor == 5);
+ wmsBaseLocation.outstockFlag = "0";
+ wmsBaseLocation.locationStatus = "1";
+ dbContext.Update(wmsBaseLocation);
- SendTask(item.FirstOrDefault().orderId);
+
+ dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
+ dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
+ dbContext.SaveChanges();
+ }
+ else//如果是出库任务,更新库存信息,下一个任务为提升机
+ {
+ WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
+ .First(t => t.locationId == item.startPointId && t.warehouseFloor == 5);
+ wmsBaseLocation.outstockFlag = "0";
+ wmsBaseLocation.locationStatus = "1";
+ dbContext.Update(wmsBaseLocation);
+
+ BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5);
+ BaseEquip eletorEquip = StaticData.BaseEquip.First(t => t.equipType == 2);
+ item.nextPointId = floorLineEquip.objid;
+ item.nextPointNo = floorLineEquip.equipNo;
+ item.fromFloorNo = 5;
+ item.floorNo = 1;
+ item.taskStatus = 6;
+ dbContext.Update(item);
+ dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
+ dbContext.SaveChanges();
+ }
+ }
+ }
+ }
}
}
catch (Exception ex)
diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorLine.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorLine.cs
index a51e3ac..8fd9ca6 100644
--- a/src/Khd.Core.Wcs/Wcs/FiveFloorLine.cs
+++ b/src/Khd.Core.Wcs/Wcs/FiveFloorLine.cs
@@ -54,6 +54,8 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now+":五楼人工分拣输送线启动成功");
+ LogManager.Info("五楼人工分拣输送线启动成功");
}
public void MonitorInLocatorPoint()
diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs
index 454086d..24bc253 100644
--- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs
+++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs
@@ -22,7 +22,6 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
- private readonly BasePlcpoint LineFeedSeriaNo;
int FloorNo { get; set; }
string EquipNo = "";
public FiveFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
@@ -37,12 +36,11 @@ namespace Khd.Core.Wcs.Wcs
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"));
- this.LineFeedSeriaNo = this.ScanPoint.First(t => t.plcpointNo.Contains("feedserialno"));
try
{
//默认启动,清理plc的上位机写入点位值
- this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
+ //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
@@ -59,10 +57,13 @@ namespace Khd.Core.Wcs.Wcs
var FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.IsBackground = true;
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now + ":五楼接驳位调度启动成功");
+ LogManager.Info("五楼接驳位调度启动成功");
}
public void MonitorInLocatorPoint()
{
+ List ITypes = new List { 1, 3, 5, 7 };
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
while (true)
@@ -80,32 +81,61 @@ namespace Khd.Core.Wcs.Wcs
{
//获取条码信息
var palletNo = Convert.ToString(rfid);
- if (!string.IsNullOrEmpty(palletNo))
+ BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == FloorNo);
+ var wcsTask = dbContext.WcsTask.OrderBy(t => t.createTime)
+ .FirstOrDefault(t => t.floorNo == FloorNo && t.containerNo == palletNo);
+ if (wcsTask != null)
{
- //获取入库任务
- var wcsTask = GetTask(palletNo, FloorNo, EquipNo);
- //判断是否为出库任务
- if (wcsTask != null && (wcsTask.taskType == 2 || wcsTask.taskType == 3))
+ if (ITypes.Contains(wcsTask.taskType) && wcsTask.taskStatus == 4)//入库,提升机任务是完成状态
{
- this._plc.Write(LineWcsrun.plcpointAddress, 1);
- //更新任务下一点位为提升机
- wcsTask.nextPointId = 6;
- wcsTask.nextPointNo = "T01";
- wcsTask.floorNo = 0;
+ var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo)
+ .Where(t => t.activeFlag == "1")
+ .Where(t => t.delFlag == "0")
+ .Where(t => t.instockFlag == "0")
+ .Where(t => t.locationScrapType == "1")
+ .Where(t => t.locationStatus == "1")
+ .Where(t => t.outstockFlag == "0")
+ .Where(t=>string.IsNullOrEmpty(t.containerCode))
+ .ToList();
+
+ //深浅库位问题?库位入库优先级等
+
+ var AgvEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 5);//背负Agv
+ if (wmsBaseLocations.Count > 0)
+ {
+ WmsBaseLocation wmsBaseLocation = wmsBaseLocations.First();
+ 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;
+ wmsBaseLocation.instockFlag = "1";
+ wmsBaseLocation.locationStatus = "2";
+ dbContext.Update(wmsBaseLocation);
+ dbContext.Update(wcsTask);
+ dbContext.SaveChanges();
+ }
+ }
+ else//出库
+ {
+ BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机
+ wcsTask.nextPointId = nextEquip.objid;
+ wcsTask.nextPointNo = nextEquip.equipNo;
+ wcsTask.currPointId = baseEquip.objid;
+ wcsTask.currPointNo = baseEquip.equipNo;
+ wcsTask.fromFloorNo = FloorNo;
+ wcsTask.floorNo = 1;//出库到一楼
+ wcsTask.taskStatus = 0;
wcsTask.updateTime = DateTime.Now;
dbContext.Update(wcsTask);
dbContext.SaveChanges();
}
- else if (wcsTask != null)
- {
- //入库任务
- //下发agv任务
- SendTask(wcsTask);
- }
}
}
}
-
}
catch (Exception ex)
{
diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs
index 70e06d4..8f5c7e9 100644
--- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs
+++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs
@@ -22,7 +22,6 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
- private readonly BasePlcpoint LineFeedSeriaNo;
int FloorNo { get; set; }
string EquipNo = "";
int EquipID = 8; //2楼AGV
@@ -40,13 +39,12 @@ namespace Khd.Core.Wcs.Wcs
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"));
- this.LineFeedSeriaNo = this.ScanPoint.First(t => t.plcpointNo.Contains("feedserialno"));
//var IsPallet = this._plc.Read(LineIsPallet.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
- this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
+ //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
@@ -62,6 +60,8 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now + ":二楼AGV上件扫描监听启动成功");
+ LogManager.Info("二楼AGV上件扫描监听启动成功");
}
public void MonitorInLocatorPoint()
@@ -224,11 +224,11 @@ namespace Khd.Core.Wcs.Wcs
setPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault();
}
putPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault();
- p.podCode = setPos?.agvPositionCode;
- p.podTyp = "";
+ p.positionCode = setPos?.agvPositionCode;
+ p.type = "";
agvtask.positionCodePath.Add(p);
- p.podCode = putPos?.agvPositionCode;
- p.podTyp = "";
+ p.positionCode = putPos?.agvPositionCode;
+ p.type = "";
//取料点
agvtask.positionCodePath.Add(p);
agvtask.taskTyp = "";
diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs
index b2fdc12..b97c59a 100644
--- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs
+++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs
@@ -23,7 +23,6 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
- private readonly BasePlcpoint LineFeedSeriaNo;
int FloorNo { get; set; }
string EquipNo = "";
public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
@@ -38,13 +37,12 @@ namespace Khd.Core.Wcs.Wcs
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"));
- this.LineFeedSeriaNo = this.ScanPoint.First(t => t.plcpointNo.Contains("feedserialno"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
- this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
+ //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
@@ -60,6 +58,8 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now + ":二楼码垛输送线调度启动成功");
+ LogManager.Info("二楼码垛输送线调度启动成功");
}
public void MonitorInLocatorPoint()
diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs
index 785fec1..fb68c69 100644
--- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs
+++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs
@@ -21,7 +21,6 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
- private readonly BasePlcpoint LineFeedSeriaNo;
int FloorNo { get; set; }
string EquipNo = "";
int EquipID = 2;
@@ -37,7 +36,6 @@ namespace Khd.Core.Wcs.Wcs
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"));
- this.LineFeedSeriaNo = this.ScanPoint.First(t => t.plcpointNo.Contains("feedserialno"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
@@ -59,6 +57,8 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now + ":二楼接驳位扫描线程启动");
+ LogManager.Info("二楼接驳位扫描线程启动");
}
public void MonitorInLocatorPoint()
@@ -85,19 +85,26 @@ namespace Khd.Core.Wcs.Wcs
//判断是否为出库任务
if (wcsTask != null)
{
- //下发去提升机的去向
- this._plc.Write(LineWcsrun.plcpointAddress, 1);
- //更新任务
- dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTask()
+ var wmsProductOutstock = dbContext.WmsProductOutstock.Where(t => t.saleOrderId == wcsTask.orderId).FirstOrDefault();
+ if (wmsProductOutstock != null)
{
- currPointId = 2,
- currPointNo = "F02",
- //提升机
- nextPointId = 6,
- nextPointNo = "T01",
- updateTime = DateTime.Now,
- updateBy = "二楼接驳位",
- });
+ long? 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 = "二楼接驳位",
+ });
+ }
}
}
}
diff --git a/src/Khd.Core.Wcs/Wcs/SystemData.cs b/src/Khd.Core.Wcs/Wcs/SystemData.cs
new file mode 100644
index 0000000..a3948ed
--- /dev/null
+++ b/src/Khd.Core.Wcs/Wcs/SystemData.cs
@@ -0,0 +1,34 @@
+using Khd.Core.EntityFramework;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Khd.Core.Wcs.Wcs
+{
+ public class SystemData
+ {
+ public static long _serialNo { get; set; } = 1;
+
+ public static object serialLock = new object();
+
+ public static long GetSerialNo(DefaultDbContext dbContext)
+ {
+ lock (serialLock)
+ {
+ List list = dbContext.WcsTask.Select(t => t.serialNo).ToList();
+ while (list.Contains(_serialNo))
+ {
+ _serialNo++;
+ if(_serialNo > 9999)
+ {
+ _serialNo = 1;
+ }
+ }
+ return _serialNo;
+ }
+ }
+
+ }
+}
diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs
index 8374ce6..819fbb7 100644
--- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs
+++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs
@@ -22,7 +22,6 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
- private readonly BasePlcpoint LineFeedSeriaNo;
int FloorNo { get; set; }
string EquipNo = "";
int EquipID = 9; //3楼AGV
@@ -40,13 +39,12 @@ namespace Khd.Core.Wcs.Wcs
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"));
- this.LineFeedSeriaNo = this.ScanPoint.First(t => t.plcpointNo.Contains("feedserialno"));
//var IsPallet = this._plc.Read(LineIsPallet.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
- this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
+ //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
@@ -62,6 +60,8 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now + ":三楼AGV 启动上件扫描监听");
+ LogManager.Info("三楼AGV 启动上件扫描监听");
}
public void MonitorInLocatorPoint()
@@ -73,7 +73,7 @@ namespace Khd.Core.Wcs.Wcs
try
{
//获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv
- var taskList = StaticData.WcsTask.Where(t => t.nextPointId == EquipID && t.currPointId != EquipID && (t.taskType == 1 || t.taskType == 2 || t.taskType == 9)).ToList();
+ var taskList = dbContext.WcsTask.Where(t => t.nextPointId == EquipID && t.currPointId != EquipID && (t.taskType == 1 || t.taskType == 2 || t.taskType == 9)).ToList();
if (taskList.Count == 0)
{
LogManager.Info(FloorNo + "楼AGV无任务");
@@ -225,11 +225,11 @@ namespace Khd.Core.Wcs.Wcs
setPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault();
}
putPos = locList.Where(t => t.locationId == task.nextPointId).FirstOrDefault();
- p.podCode = setPos?.agvPositionCode;
- p.podTyp = "";
+ p.positionCode = setPos?.agvPositionCode;
+ p.type = "";
agvtask.positionCodePath.Add(p);
- p.podCode = putPos?.agvPositionCode;
- p.podTyp = "";
+ p.positionCode = putPos?.agvPositionCode;
+ p.type = "";
//取料点
agvtask.positionCodePath.Add(p);
agvtask.taskTyp = "";
diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs
index bd831e0..90d4265 100644
--- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs
+++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs
@@ -22,7 +22,6 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
- private readonly BasePlcpoint LineFeedSeriaNo;
int FloorNo { get; set; }
int EquipID = 3;
string EquipNo = "";
@@ -38,13 +37,12 @@ namespace Khd.Core.Wcs.Wcs
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"));
- this.LineFeedSeriaNo = this.ScanPoint.First(t => t.plcpointNo.Contains("feedserialno"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
- this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
+ //this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
@@ -60,6 +58,8 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+ Console.WriteLine(DateTime.Now + ":三楼接驳位调度启动成功");
+ LogManager.Info("三楼接驳位调度启动成功");
}
public void MonitorInLocatorPoint()
diff --git a/src/Khd.Core.Wcs/Wcs/WcsToWms.cs b/src/Khd.Core.Wcs/Wcs/WcsToWms.cs
index 1876d7a..0ad3dfe 100644
--- a/src/Khd.Core.Wcs/Wcs/WcsToWms.cs
+++ b/src/Khd.Core.Wcs/Wcs/WcsToWms.cs
@@ -78,22 +78,13 @@ namespace Khd.Core.Wcs.Wcs
///
///
///
- public bool genAgvSchedulingTask(RequestAGVTaskDto requestAGVTaskDto)
+ public ReponseMessage? genAgvSchedulingTask(RequestAGVTaskDto requestAGVTaskDto)
{
//生成任务单
var url = "http://IP:PORT/rcms/services/rest/hikRpcService/genAgvSchedulingTask";
var concontentType = "application/json";
var result = HttpHelper.HttpPost(url, requestAGVTaskDto.ToJsonString(), concontentType, 60, null);
- var model = (ReponseMessage)JsonConvert.DeserializeObject(result.ToString(), typeof(ReponseMessage));
- if (model.code == "0")
- {
- LogManager.Info("调用成功。");
- }
- else
- {
- LogManager.Info("调用失败。");
- }
- return true;
+ return JsonConvert.DeserializeObject(result.ToString());
}
///
/// 继续执行
diff --git a/src/Khd.Core.Wcs/appsettings.json b/src/Khd.Core.Wcs/appsettings.json
index b4b4c8e..91fdeeb 100644
--- a/src/Khd.Core.Wcs/appsettings.json
+++ b/src/Khd.Core.Wcs/appsettings.json
@@ -1,19 +1,15 @@
{
"ConnectionStrings": {
- //雅迪工控机数据库
- //"DefaultConnection": "server=192.168.0.81;port=3306;database=khd_suspension_chain;uid=root;pwd=123456;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True"
- //mysql 本地
- //"DefaultConnection": "server=localhost;port=3306;database=khd_jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True"
- //khd服务器
- "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=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=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.0.1",
- "Port": "102",
- "CpuType": 30,
- "Rack": "0",
- "Slot": "0",
+ "IP": "192.168.2.30",
+ "Port": 102, //102是默认端口
+ "CpuType": 40,
+ "Rack": 0,
+ "Slot": 1,
"Code": 0
}
],