master
2 years ago
parent 623f23d711
commit 3d2762b61a

@ -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);
}
/// <summary>
/// 接收agv接收任务通知接口
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost("agvContinue")]
public ReponseagvCallbackDto agvContinue(agvCallbackDto agvCallbackDto)
{
LogManager.Info($"RecieveRcsController接口信息{agvCallbackDto.ToJsonString()}");
agvCallbackDto.method = "continue";
return _application.AgvCallback(agvCallbackDto);
}
}
}

@ -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": {

@ -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;

@ -55,7 +55,15 @@ namespace Khd.Core.Domain.Dto.webapi
/// <summary>
/// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空
/// </summary>
public string podDir { get; set; }
public string podDir { get; set; }
/// <summary>
/// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空
/// </summary>
public string podTyp { get; set; }
/// <summary>
/// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空
/// </summary>
public string podCode { get; set; }
/// <summary>
/// 物料批次或货架上的物料唯一编码,
/// </summary>
@ -95,11 +103,11 @@ namespace Khd.Core.Domain.Dto.webapi
/// <summary>
/// 货架编号,不指定货架可以为空
/// </summary>
public string podCode { get; set; }
public string positionCode { get; set; }
/// <summary>
/// 货架类型, 传空时表示随机找个货架
/// </summary>
public string podTyp { get; set; }
public string type { get; set; }
}
@ -110,7 +118,7 @@ namespace Khd.Core.Domain.Dto.webapi
/// </summary>
public string code { get; set; }
/// <summary>
/// 返回消息
/// 返回消息,成功或其他
/// </summary>
public string message { get; set; }
/// <summary>

@ -14,7 +14,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Models
{
[Table("base_dictionary")]
[Table("wcs_base_dictionary")]
public class BaseDictionary
{

@ -14,7 +14,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Models
{
[Table("base_equip")]
[Table("wcs_base_equip")]
public class BaseEquip
{

@ -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
/// 点位长度
/// </summary>
[Column("plcpoint_length")]
public int? plcpointLength { get; set; }
public string plcpointLength { get; set; }
/// <summary>
/// 点位地址

@ -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")]

@ -17,6 +17,11 @@ namespace Khd.Core.Domain.Models
[Table("wcs_cmd")]
public class WcsCmd
{
/// <summary>
/// 任务代码
/// </summary>
[Column("task_code")]
public string taskCode;
[Key]
[Column("objid")]

@ -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")]

@ -22,6 +22,11 @@ namespace Khd.Core.Domain.Models
[Column("location_id")]
public long locationId { get; set; }
/// <summary>
/// 料箱号
/// </summary>
[Column("container_code")]
public string containerCode { get; set; }
/// <summary>
/// 仓库ID关联wms_base_warehouse的warehouse_id
/// </summary>
@ -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; }
/// <summary>
/// 库位编码
/// </summary>

@ -10,89 +10,60 @@ namespace Khd.Core.EntityFramework
}
public DbSet<BaseDictionary> BaseDictionary { get; set; }
public DbSet<BaseEquip> BaseEquip { get; set; }
public DbSet<BasePlcpoint> BasePlcpoint { get; set; }
public DbSet<MesBasePalletInfo> MesBasePalletInfo { get; set; }
public DbSet<WcsCmd> WcsCmd { get; set; }
public DbSet<WcsCmdLog> WcsCmdLog { get; set; }
public DbSet<WcsStock> WcsStock { get; set; }
public DbSet<WcsTask> WcsTask { get; set; }
public DbSet<WcsTaskLog> WcsTaskLog { get; set; }
public DbSet<WcsWarehouseOrder> WcsWarehouseOrder { get; set; }
public DbSet<WcsWarehouseOrderDetaile> WcsWarehouseOrderDetaile { get; set; }
public DbSet<WmsBaseLocation> WmsBaseLocation { get; set; }
public DbSet<WmsBaseWarehouse> WmsBaseWarehouse { get; set; }
public DbSet<WmsProductInstock> WmsProductInstock { get; set; }
public DbSet<WmsProductInstockDetail> WmsProductInstockDetail { get; set; }
public DbSet<WmsProductOutstock> WmsProductOutstock { get; set; }
public DbSet<WmsProductOutstockDetail> WmsProductOutstockDetail { get; set; }
public DbSet<WmsProductStock> WmsProductStock { get; set; }
public DbSet<WmsProductStockSaleorder> WmsProductStockSaleorder { get; set; }
public DbSet<WmsRawInstock> WmsRawInstock { get; set; }
public DbSet<WmsRawInstockDetail> WmsRawInstockDetail { get; set; }
public DbSet<WmsRawOutstock> WmsRawOutstock { get; set; }
public DbSet<WmsRawOutstockDetail> WmsRawOutstockDetail { get; set; }
public DbSet<WmsRawStock> WmsRawStock { get; set; }
public DbSet<WmsRawStockOccupy> WmsRawStockOccupy { get; set; }
public DbSet<WmsWarehouseMaterial> WmsWarehouseMaterial { get; set; }
public DbSet<WcsOutstockLock> WcsOutstockLock { get; set; }
public DbSet<MesBaseBarcodeInfo> MesBaseBarcodeInfo { get; set; }
public DbSet<PlcPoint> PlcPoint { get; set; }
}
}

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Plc
{
/// <summary>
/// Plc帮助类
/// </summary>
public static class StaticPlcHelper
{
/// <summary>
/// 进行高低位转换后写入Plc地址
/// </summary>
/// <param name="plc"> plc </param>
/// <param name="address"> 写入地址 </param>
/// <param name="valueString"> 值 </param>
/// <param name="len"> 长度 </param>
public static void WriteToPoint(this Plc.S7.Plc plc,string address,string valueString,string len)
{
var value = GetValue(len, valueString);
plc.Write(address, value);
}
/// <summary>
/// 电气写入点位高低位转换
/// </summary>
/// <param name="len">点位地址位长度</param>
/// <param name="value">写入数值</param>
/// <returns></returns>
private static object GetValue(string len, string value)
{
if (len == "2")
{
return Convert.ToInt16(value);
}
if (len == "4")
{
return Convert.ToInt32(value);
}
return 0;
}
}
}

@ -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<DefaultDbContext>();
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)
{

@ -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
{
/// <summary>
/// AGV任务逻辑
/// </summary>
public class AgvTaskLogic
{
private readonly Dictionary<string, PlcPoint> _plcPoints;
private readonly Plc.S7.Plc _plc;
private readonly int _floorNo;
private readonly BaseEquip _baseEquip;
private readonly IHost _host;
private readonly BaseEquip _lineEquip;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="FloorNo"> 楼层号 </param>
/// <param name="baseEquip"> 基站设备 </param>
/// <param name="lineEquip"> 线路设备 </param>
/// <param name="host"> IHost </param>
/// <param name="plc"> Plc </param>
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];
}
/// <summary>
/// 启动AGV任务逻辑
/// </summary>
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任务逻辑启动成功");
}
/// <summary>
/// 执行AGV任务逻辑
/// </summary>
private void ExecuteTaskLogic()
{
while (true)
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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<Position>
{
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<Position>
{
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);
}
}
/// <summary>
/// 继续执行AGV任务逻辑
/// </summary>
private void ContinueTaskLogic()
{
while (true)
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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);
}
}
}
/// <summary>
/// 发送任务
/// </summary>
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<ReponseagvCallbackDto>(result);
}
/// <summary>
/// 继续执行任务
/// </summary>
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<ReponseagvcontinueTaskDto>(result);
}
}
}

@ -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
{
/// <summary>
/// 接驳位逻辑
/// </summary>
public class DockingPositionLogic
{
private readonly int _floorNo;
private readonly Dictionary<string, PlcPoint> _dockingPosition;
private readonly Plc.S7.Plc _plc;
private readonly IHost _host;
private readonly BaseEquip _currentEquip;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="floorNo"> 楼层号 </param>
/// <param name="currentEquip"> 当前设备 </param>
/// <param name="host"> IHost </param>
/// <param name="plc"> Plc </param>
public DockingPositionLogic(int floorNo, BaseEquip currentEquip, IHost host, Plc.S7.Plc plc)
{
_floorNo = floorNo;
_host = host;
_plc = plc;
_currentEquip = currentEquip;
_dockingPosition = StaticData.PlcPoints[floorNo];
}
/// <summary>
/// 启动线程
/// </summary>
public void Start()
{
var ExecuteLogicThread = new Thread(ExecuteLogic);
ExecuteLogicThread.IsBackground = true;
ExecuteLogicThread.Start();
Console.WriteLine($"{DateTime.Now}:{this._floorNo}楼接驳位线程启动成功");
LogManager.Info($"{this._floorNo}楼接驳位线程启动成功");
}
/// <summary>
/// 执行任务
/// </summary>
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<DefaultDbContext>();
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);
}
}
}
}

@ -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
{
/// <summary>
/// 提升机逻辑
/// </summary>
public class ElevatorLogic
{
private readonly Plc.S7.Plc _plc;
private readonly int _floorNo;
private readonly Dictionary<string, PlcPoint> ElevatorPoints;
private readonly IHost _host;
private readonly BaseEquip _baseEquip;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="FloorNo"> 楼层号 </param>
/// <param name="baseEquip"> 基础设备 </param>
/// <param name="host"> IHost </param>
/// <param name="plc"> Plc </param>
public ElevatorLogic(int FloorNo, BaseEquip baseEquip, IHost host, Plc.S7.Plc plc)
{
_plc = plc;
_floorNo = FloorNo;
_host = host;
_baseEquip = baseEquip;
ElevatorPoints = StaticData.PlcPoints[_floorNo];
}
/// <summary>
/// 启动提升机逻辑
/// </summary>
public void Start()
{
Thread executeThread = new(ExecuteLogic)
{
IsBackground = true
};
executeThread.Start();
Console.WriteLine($"{DateTime.Now}:提升机逻辑启动");
LogManager.Info("提升机逻辑启动");
}
/// <summary>
/// 执行逻辑
/// </summary>
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<DefaultDbContext>();
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);
}
}
}
}

@ -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<List<PlcConfig>>();
ConnectionStrings.ConnectionString = configuration["ConnectionStrings:DefaultConnection"];
}
static IHostBuilder CreateHostBuilder(string[] args) =>
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) =>
{

@ -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
}
}
}
/// <summary>
/// 成品出库
/// </summary>

@ -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
/// <summary>
/// 到位信号 读
/// </summary>
private readonly BasePlcpoint linesignal01 ;
/// <summary>
/// 是否有托盘 读
/// </summary>
private readonly BasePlcpoint ispallet01 ;
private readonly BasePlcpoint linesignal01;
/// <summary>
/// 去向 写
/// </summary>
private readonly BasePlcpoint wcsrun01 ;
/// <summary>
/// 流水号 读
/// </summary>
private readonly BasePlcpoint serialno01 ;
private readonly BasePlcpoint wcsrun01;
/// <summary>
/// 提升机流水号 读
/// </summary>
private readonly BasePlcpoint serialno06 ;
private readonly BasePlcpoint serialno06;
/// <summary>
/// 提升机状态 读
/// </summary>
private readonly BasePlcpoint equipstate06 ;
private readonly BasePlcpoint equipstate06;
/// <summary>
/// 提升机任务状态 读
/// </summary>
private readonly BasePlcpoint taskstate06 ;
private readonly BasePlcpoint hoistertrayin06;
/// <summary>
/// 提升机当前楼层 写
/// </summary>
private readonly BasePlcpoint currentfloor06 ;
private readonly BasePlcpoint currentfloor06;
/// <summary>
/// 提升机目的楼层 写
/// </summary>
private readonly BasePlcpoint targetfloor06 ;
private readonly BasePlcpoint targetfloor06;
/// <summary>
/// 提升机到位信号 读
/// 提升机反馈流水号
/// </summary>
private readonly BasePlcpoint linesignal06 ;
/// <summary>
/// 一楼提升机前允许取 读
/// </summary>
private readonly BasePlcpoint hoisterallowedtake01 ;
/// <summary>
/// 一楼提升机前反馈流水号 读
/// </summary>
private readonly BasePlcpoint feedserialno01 ;
/// <summary>
/// 二楼提升机前允许取 读
/// </summary>
private readonly BasePlcpoint hoisterallowedtake02 ;
/// <summary>
/// 二楼提升机前反馈流水号 读
/// </summary>
private readonly BasePlcpoint feedserialno02 ;
/// <summary>
/// 三楼提升机前允许取 读
/// </summary>
private readonly BasePlcpoint hoisterallowedtake03 ;
/// <summary>
/// 三楼提升机前反馈流水号 读
/// </summary>
private readonly BasePlcpoint feedserialno03 ;
/// <summary>
/// 四楼提升机前允许取 读
/// </summary>
private readonly BasePlcpoint hoisterallowedtake04 ;
/// <summary>
/// 四楼提升机前反馈流水号 读
/// </summary>
private readonly BasePlcpoint feedserialno04 ;
/// <summary>
/// 五楼提升机前允许取 读
/// </summary>
private readonly BasePlcpoint hoisterallowedtake05 ;
/// <summary>
/// 五楼提升机前反馈流水号 读
/// </summary>
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"));
}
/// <summary>
/// 启动线程
/// 启动上件扫描监听
/// </summary>
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("一楼提升机线程启动成功");
}
/// <summary>
@ -167,112 +109,100 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
private void FirstFloorLine()
{
List<int?> Itpyes = new List<int?>() { 1, 3, 5, 7 };
List<int?> Itpyes = new() { 1, 3, 5, 7 };
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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<DefaultDbContext>())
//正常托盘到位
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
/// </summary>
private void FirstFloorHoister()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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<DefaultDbContext>();
//正常读到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}······");
}
}
}

@ -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<DefaultDbContext>();
List<int?> taskType = new() { 1, 2, 3, 7, 8 };
List<int?> 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<Position>
{
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<ReponseMessage>(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<ReponseMessage>(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<WcsTask> 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()
{

@ -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<int?> taskType = new() { 1, 3, 5, 7 };
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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<Position>
{
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<ReponseMessage>(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<ReponseMessage>(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)

@ -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()

@ -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<int?> ITypes = new List<int?> { 1, 3, 5, 7 };
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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)
{

@ -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 = "";

@ -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()

@ -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 = "二楼接驳位",
});
}
}
}
}

@ -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<long?> list = dbContext.WcsTask.Select(t => t.serialNo).ToList();
while (list.Contains(_serialNo))
{
_serialNo++;
if(_serialNo > 9999)
{
_serialNo = 1;
}
}
return _serialNo;
}
}
}
}

@ -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 = "";

@ -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()

@ -78,22 +78,13 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
/// <param name="requestCheck"></param>
/// <returns></returns>
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<ReponseMessage>(result.ToString());
}
/// <summary>
/// 继续执行

@ -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
}
],

Loading…
Cancel
Save