master
2 years ago
parent 4d23f57e7c
commit 13343b38e0

@ -1,4 +1,5 @@
using System; using Newtonsoft.Json;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
@ -11,8 +12,6 @@ namespace Khd.Core.Domain.Dto.agv
[Table("wcs_agv_status")] [Table("wcs_agv_status")]
public class WcsAgvStatus public class WcsAgvStatus
{ {
[Column("id")]
public int Id { get; set; }
[Column("battery")] [Column("battery")]
public string Battery { get; set; } public string Battery { get; set; }
[Column("exclType")] [Column("exclType")]
@ -22,7 +21,33 @@ namespace Khd.Core.Domain.Dto.agv
[Column("online")] [Column("online")]
public string Online { get; set; } public string Online { get; set; }
[Column("path")] [Column("path")]
public string Path { get; set; } public string? Path2
{
get
{
if (path != null&&path.Length>0)
{
string json = JsonConvert.SerializeObject(path);
return json;
}
else
{
return "";
}
}
set
{
if (value != null && value.Length > 0)
{
path = JsonConvert.DeserializeObject<string[]>(value);
}
else
{
path = null;
}
}
}
public string[] path;
[Column("podCode")] [Column("podCode")]
public string PodCode { get; set; } public string PodCode { get; set; }
[Column("podDir")] [Column("podDir")]
@ -45,6 +70,6 @@ namespace Khd.Core.Domain.Dto.agv
[Column("stop")] [Column("stop")]
public string Stop { get; set; } public string Stop { get; set; }
[Column("timestamp")] [Column("timestamp")]
public DateTime Timestamp { get; set; } public DateTime? DateNow { get; set; }
} }
} }

@ -1,11 +1,12 @@
using System.Collections.Generic; using Khd.Core.Domain.Dto.agv;
using System.Collections.Generic;
namespace Khd.Core.Domain.Dto.webapi namespace Khd.Core.Domain.Dto.webapi
{ {
public class AgvStatusDto public class AgvStatusDto
{ {
public string code { get; set; } public string code { get; set; }
public List<cardStatus> data { get; set; } public List<WcsAgvStatus> data { get; set; }
} }
public class cardStatus public class cardStatus

@ -56,7 +56,7 @@ namespace Khd.Core.Domain.Models
/// 物料ID /// 物料ID
/// </summary> /// </summary>
[Column("material_id")] [Column("material_id")]
public long materialId { get; set; } public long? materialId { get; set; }
/// <summary> /// <summary>
/// 采购订单号,入库扫描条码时获取唯一条码 /// 采购订单号,入库扫描条码时获取唯一条码

@ -1,4 +1,5 @@
using Khd.Core.Domain.Auth; using Khd.Core.Domain.Auth;
using Khd.Core.Domain.Dto.agv;
using Khd.Core.Domain.Models; using Khd.Core.Domain.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -12,6 +13,7 @@ namespace Khd.Core.EntityFramework
public DbSet<SysUser> SysUser { get; set; } public DbSet<SysUser> SysUser { get; set; }
public DbSet<SysRole> SysRole { get; set; } public DbSet<SysRole> SysRole { get; set; }
public DbSet<SysMenu> SysMenu { get; set; } public DbSet<SysMenu> SysMenu { get; set; }
public DbSet<WcsAgvStatus> WcsAgvStatus { get; set; }
public DbSet<MesBaseMaterialInfo> MesBaseMaterialInfo { get; set; } public DbSet<MesBaseMaterialInfo> MesBaseMaterialInfo { get; set; }
public DbSet<WmsRawReturn> WmsRawReturn { get; set; } public DbSet<WmsRawReturn> WmsRawReturn { get; set; }

@ -1,6 +1,7 @@
using Khd.Core.EntityFramework; using Khd.Core.EntityFramework;
using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs; using Khd.Core.Wcs.Wcs;
using Masuit.Tools;
using Masuit.Tools.Logging; using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
@ -45,6 +46,7 @@ namespace Khd.Core.Wcs
//设置默认去向=>1为 Int16位 //设置默认去向=>1为 Int16位
WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1"); WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1");
StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList(); StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();
StaticData.basePlcs = dbContext.BasePlc.ToList();
StaticData.BaseEquip = dbContext.BaseEquip.ToList(); StaticData.BaseEquip = dbContext.BaseEquip.ToList();
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList(); StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();
@ -56,7 +58,7 @@ namespace Khd.Core.Wcs
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot); plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
try try
{ {
//plc.Open(); plc.Open();
Console.WriteLine(DateTime.Now + ":连接到PLC" + plcConfig.IP); Console.WriteLine(DateTime.Now + ":连接到PLC" + plcConfig.IP);
} }
catch catch
@ -68,9 +70,9 @@ namespace Khd.Core.Wcs
} }
SystemTimer systemTimer = new SystemTimer(_host); SystemTimer systemTimer = new SystemTimer(_host);
systemTimer.Start(); systemTimer.Start();
//创建任务 ////创建任务
CreateTaskByRecord createTaskByRecord = new(_host); //CreateTaskByRecord createTaskByRecord = new(_host);
createTaskByRecord.StartPoint(); //createTaskByRecord.StartPoint();
////一楼提升机以及接驳位 ////一楼提升机以及接驳位
//FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]); //FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]);
@ -78,51 +80,46 @@ namespace Khd.Core.Wcs
////二层接驳位 ////二层接驳位
//var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First(); //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 secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value);
//secondFloorPoint.StartPoint(); //secondFloorPoint.StartPoint();
////二层AGV ////二层AGV
//var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First(); //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 secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value);
//secondFloorAGV.StartPoint(); //secondFloorAGV.StartPoint();
////二楼线体 ////二楼线体
//var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 3).First(); //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 secondFloorLine = new(_host, StaticData.PlcDic[0], SecondFloorLineEquip.floorNo.Value);
//secondFloorLine.StartPoint(); //secondFloorLine.StartPoint();
////三层接驳位 ////三层接驳位
//var ThirdBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 1).First(); //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 thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value);
//thirdFloorPoint.StartPoint(); //thirdFloorPoint.StartPoint();
//三层AGV ////三层AGV
var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); //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 thirdFloorAGV = new(_host, StaticData.PlcDic[0], ThirdFloorAgvEquip.floorNo.Value);
thirdFloorAGV.StartPoint(); //thirdFloorAGV.StartPoint();
////五层接驳位 ////五层接驳位
//var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); //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); //FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value);
//fifthFloorPoint.StartPoint(); //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 ////五层CTU
//var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); //var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
//FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value, FiveFloorCTUEquip.equipNo); //FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value);
//fiveFloorCTU.StartPoint(); //fiveFloorCTU.StartPoint();
////五层AGV ////五层AGV
//var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First(); //var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First();
//FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[2], FifthFloorAgvEquip.floorNo.Value, FifthFloorAgvEquip.equipNo); //FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[2], FifthFloorAgvEquip.floorNo.Value);
//fifthFloorAGV.StartPoint(); //fifthFloorAGV.StartPoint();
//var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid==28).First(); //var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid == 28).First();
//FiveFloorBearAgv fiveFloorBearAgv = new(_host, StaticData.PlcDic[1], FifthFloorBearAgvEquip.floorNo.Value, FifthFloorBearAgvEquip.equipNo); //FiveFloorBearAgv fiveFloorBearAgv = new(_host, StaticData.PlcDic[1], FifthFloorBearAgvEquip.floorNo.Value);
//fiveFloorBearAgv.StartPoint(); //fiveFloorBearAgv.StartPoint();
} }
catch (Exception ex) catch (Exception ex)

@ -227,6 +227,48 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
private void BackReturnTaskLogic()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.taskType == 28).FirstOrDefault();
if(wcsTask != null)
{
WmsRawInstock? wmsRawInstock = dbContext.WmsRawInstock.Where(t => t.instockType == "2" && t.warehouseId == 511 && t.executeStatus == "0").FirstOrDefault();
if (wmsRawInstock != null)
{
wcsTask.useFlag = 1;
wcsTask.createTime = DateTime.Now;
wmsRawInstock.executeStatus = "1";
wmsRawInstock.beginTime = DateTime.Now;
WmsRawInstockDetail wmsRawInstockDetail = new WmsRawInstockDetail()
{
rawInstockDetailId = StaticData.SnowId.NextId(),
rawInstockId=wmsRawInstock.rawInstockId,
instockWay = "2",
activeFlag="1",
stackAmount = 1,
createBy = "WCS",
createDate = DateTime.Now,
materialId = wmsRawInstock.materialId,
instockAmount = 1,
executeStatus="0",
};
dbContext.Update(wmsRawInstock);
dbContext.Update(wcsTask);
dbContext.SaveChanges();
}
}
}
catch
{
}
}
/// <summary> /// <summary>
/// 半成品入库 /// 半成品入库
/// </summary> /// </summary>
@ -691,17 +733,17 @@ namespace Khd.Core.Wcs.Wcs
}; };
if (location.locDeep == 1) if (location.locDeep == 1)
{ {
int? column = 0; int? row = 0;
if (location.locColumn % 2 == 1) if (location.locRow % 2 == 1)
{ {
column = location.locColumn + 1; row = location.locRow + 1;
} }
else else
{ {
column = location.locColumn - 1; row = location.locRow - 1;
} }
WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locColumn == column) WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row)
.Where(t => t.locRow == location.locRow) .Where(t => t.locColumn == location.locColumn)
.Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault();
if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode)) if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode))
{ {
@ -921,17 +963,17 @@ namespace Khd.Core.Wcs.Wcs
}; };
if (location.locDeep == 1) if (location.locDeep == 1)
{ {
int? column = 0; int? row = 0;
if (location.locColumn % 2 == 1) if (location.locRow % 2 == 1)
{ {
column = location.locColumn + 1; row = location.locRow + 1;
} }
else else
{ {
column = location.locColumn - 1; row = location.locRow - 1;
} }
WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locColumn == column) WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row)
.Where(t => t.locRow == location.locRow) .Where(t => t.locColumn == location.locColumn)
.Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault();
if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode)) if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode))
{ {
@ -1470,17 +1512,17 @@ namespace Khd.Core.Wcs.Wcs
{ {
if (location.locDeep == 1) if (location.locDeep == 1)
{ {
int? column = 0; int? row = 0;
if (location.locColumn % 2 == 1) if (location.locRow % 2 == 1)
{ {
column = location.locColumn + 1; row = location.locRow + 1;
} }
else else
{ {
column = location.locColumn - 1; row = location.locRow - 1;
} }
WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locColumn == column) WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row)
.Where(t => t.locRow == location.locRow) .Where(t => t.locColumn == location.locColumn)
.Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault();
if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode)) if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode))
{ {

@ -17,36 +17,17 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public class FiveFloorAGV public class FiveFloorAGV
{ {
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host; private readonly IHost _host;
private readonly Plc.S7.Plc _plc; private readonly Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal; private readonly BasePlcpoint LineSignal;
int FloorNo { get; set; } int FloorNo { get; set; }
private readonly string EquipNo = "";
int agvID = 28; int agvID = 28;
public FiveFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo) public FiveFloorAGV(IHost host, Plc.S7.Plc plc, int floor)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
EquipNo = equipNo; this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal05");
this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位
this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID"));
this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun"));
this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
//this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听
@ -84,66 +65,7 @@ namespace Khd.Core.Wcs.Wcs
if (item.taskStatus == 0)//下发任务 if (item.taskStatus == 0)//下发任务
{ {
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
if (item.taskType == 37)//入库任务 if (item.taskType == 38)//出库任务
{
//WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
//BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
//WcsCmd wcsCmd = new()
//{
// objid = StaticData.SnowId.NextId(),
// cmdStatus = 0,
// taskId = item.objid,
// useFlag = 1,
// cmdType = item.taskType,
// containerNo = item.containerNo,
// createTime = DateTime.Now,
// createBy = FloorNo + "楼AGV",
// currPointId = item.currPointId,
// currPointNo = currentEquip.agvPositionCode,
// nextPointId = item.endPointId,
// nextPointNo = wmsBaseLocation.agvPositionCode,
//};
//var agvTask = new RequestAGVTaskDto
//{
// reqCode = wcsCmd.objid.ToString(),
// positionCodePath = new List<Position>
// {
// new ()
// {
// positionCode=wcsCmd.currPointNo,
// type="00"
// },
// new ()
// {
// positionCode=wcsCmd.nextPointNo,
// type="00"
// }
// },
// taskTyp = baseDictionary.dicValue,
// ctnrTyp = "2",
//};
//string message = JsonConvert.SerializeObject(agvTask);
//string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
//var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
//if (reponseMessage != null && reponseMessage.message == "成功")
//{
// LogManager.Info("五楼Agv下发任务成功" + message);
// wcsCmd.taskCode = reponseMessage.data;
// wcsCmd.cmdStatus = 1;
// item.taskStatus = 1;
// dbContext.Update(item);
// dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
// WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
// dbContext.Add(wcsCmdLog);
// dbContext.Add(wcsCmd);
// dbContext.SaveChanges();
//}
//else
//{
// LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
//}
}
else if (item.taskType == 38)//出库任务
{ {
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 5); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 5);
bool canSend = dbContext.WcsTask.Where(t => t.nextPointId == lineEquip.objid && t.taskStatus > 0).Any(); bool canSend = dbContext.WcsTask.Where(t => t.nextPointId == lineEquip.objid && t.taskStatus > 0).Any();
@ -639,45 +561,6 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(toBaseLocation); dbContext.Update(toBaseLocation);
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
else if (item.taskType == 37)//入库
{
//WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
// .First(t => t.locationId == item.startPointId && t.warehouseFloor == 5);
//wmsBaseLocation.locationStatus = "1";
//wmsBaseLocation.instockFlag = "0";
//wmsBaseLocation.containerCode = item.containerNo;
//wmsBaseLocation.updateTime = DateTime.Now;
//wmsBaseLocation.updateBy = "WCS";
//MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault();
//if (mesBasePalletInfo != null)
//{
// WmsProductStock wmsProductStock = new WmsProductStock()
// {
// productBatch = mesBasePalletInfo.materialBarcode,
// palletInfoCode = mesBasePalletInfo.palletInfoCode,
// activeFlag = "1",
// createBy = "WCS",
// createDate = DateTime.Now,
// frozenAmount = 0,
// instockDate = DateTime.Now,
// locationCode = wmsBaseLocation.locationCode,
// occupyAmount = 0,
// warehouseFloor = 5,
// saleorderCode = mesBasePalletInfo.materialBarcode,
// stockType = "3",
// totalAmount = 1,
// };
// dbContext.Update(wmsBaseLocation);
// dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
// dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
// dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
// dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
// dbContext.SaveChanges();
//}
}
else if (item.taskType == 38)//出库 else if (item.taskType == 38)//出库
{ {
var wmsProductOutstockDetails = dbContext.WmsProductOutstockDetail.Where(t => t.productOutstockId == item.orderId); var wmsProductOutstockDetails = dbContext.WmsProductOutstockDetail.Where(t => t.productOutstockId == item.orderId);
@ -815,6 +698,28 @@ namespace Khd.Core.Wcs.Wcs
wmsRawStock.updateBy = "WCS"; wmsRawStock.updateBy = "WCS";
dbContext.Update(wmsRawStock); dbContext.Update(wmsRawStock);
dbContext.Update(wmsBaseLocation); dbContext.Update(wmsBaseLocation);
if (wmsBaseLocation.locDeep == 1)
{
int? locRow = 0;
if (wmsBaseLocation.locRow % 2 == 1)
{
locRow = wmsBaseLocation.locRow + 1;
}
else
{
locRow = wmsBaseLocation.locRow - 1;
}
WmsBaseLocation? deepWmsLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == locRow)
.Where(t => t.locColumn == wmsBaseLocation.locColumn)
.Where(t => t.warehouseId == wmsBaseLocation.warehouseId)
.FirstOrDefault();
if (deepWmsLocation != null)
{
deepWmsLocation.instockFlag = "1";
deepWmsLocation.locationStatus = "2";
dbContext.Update(deepWmsLocation);
}
}
WcsTask newTask = CoreMapper.Map<WcsTask>(item); WcsTask newTask = CoreMapper.Map<WcsTask>(item);
newTask.objid = StaticData.SnowId.NextId(); newTask.objid = StaticData.SnowId.NextId();
var currPointId = item.currPointId; var currPointId = item.currPointId;
@ -858,6 +763,28 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(startEquip); dbContext.Update(startEquip);
dbContext.Update(wmsRawStock); dbContext.Update(wmsRawStock);
dbContext.Update(wmsBaseLocation); dbContext.Update(wmsBaseLocation);
if (wmsBaseLocation.locDeep == 1)
{
int? locRow = 0;
if (wmsBaseLocation.locRow % 2 == 1)
{
locRow = wmsBaseLocation.locRow + 1;
}
else
{
locRow = wmsBaseLocation.locRow - 1;
}
WmsBaseLocation? deepWmsLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == locRow)
.Where(t => t.locColumn == wmsBaseLocation.locColumn)
.Where(t => t.warehouseId == wmsBaseLocation.warehouseId)
.FirstOrDefault();
if (deepWmsLocation != null)
{
deepWmsLocation.instockFlag = "0";
deepWmsLocation.locationStatus = "1";
dbContext.Update(deepWmsLocation);
}
}
dbContext.Remove(item); dbContext.Remove(item);
dbContext.Remove(wcsCmd); dbContext.Remove(wcsCmd);
dbContext.SaveChanges(); dbContext.SaveChanges();
@ -928,6 +855,5 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
} }
} }

@ -18,36 +18,15 @@ namespace Khd.Core.Wcs.Wcs
public class FiveFloorBearAgv public class FiveFloorBearAgv
{ {
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host; private readonly IHost _host;
private readonly Plc.S7.Plc _plc; private readonly Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal;
int FloorNo { get; set; } int FloorNo { get; set; }
private readonly string EquipNo = "";
int agvID = 10; int agvID = 10;
public FiveFloorBearAgv(IHost host, Plc.S7.Plc plc, int floor, string equipNo) public FiveFloorBearAgv(IHost host, Plc.S7.Plc plc, int floor)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
EquipNo = equipNo;
this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位
this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID"));
this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun"));
this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
//this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听

@ -27,35 +27,19 @@ namespace Khd.Core.Wcs.Wcs
private readonly BasePlcpoint canReceive; private readonly BasePlcpoint canReceive;
private readonly BasePlcpoint ReceiveMaterial; private readonly BasePlcpoint ReceiveMaterial;
private readonly BasePlcpoint CtuLineWaring; private readonly BasePlcpoint CtuLineWaring;
private bool isWait = false;
private bool isSendWait = false;
int FloorNo { get; set; } int FloorNo { get; set; }
string EquipNo = "";
int CTUID = 11; int CTUID = 11;
public FiveFloorCTU(IHost host, Plc.S7.Plc plc, int floor, string equipNo) public FiveFloorCTU(IHost host, Plc.S7.Plc plc, int floor)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
EquipNo = equipNo; this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID5001");
this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 this.isarrive = StaticData.BasePlcpointList.First(t => t.plcpointNo == "isarrive");
this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID5001")); this.isput = StaticData.BasePlcpointList.First(t => t.plcpointNo == "isput");
this.isarrive = this.ScanPoint.First(t => t.plcpointNo.Contains("isarrive")); this.canReceive = StaticData.BasePlcpointList.First(t => t.plcpointNo == "canReceive");
this.isput = this.ScanPoint.First(t => t.plcpointNo.Contains("isput")); this.ReceiveMaterial = StaticData.BasePlcpointList.First(t => t.plcpointNo == "ReceiveMaterial");
this.canReceive = this.ScanPoint.First(t => t.plcpointNo.Contains("canReceive")); this.CtuLineWaring = StaticData.BasePlcpointList.First(t => t.plcpointNo == "CtuLineWaring");
this.ReceiveMaterial = this.ScanPoint.First(t => t.plcpointNo.Contains("ReceiveMaterial"));
this.CtuLineWaring = this.ScanPoint.First(t => t.plcpointNo.Contains("CTULineWaring"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
//this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
} }
/// <summary> /// <summary>
@ -485,7 +469,7 @@ namespace Khd.Core.Wcs.Wcs
wcsOutstockLock.qty = 0; wcsOutstockLock.qty = 0;
wcsOutstockLock.boxStatus = 0; wcsOutstockLock.boxStatus = 0;
dbContext.Update(wcsOutstockLock); dbContext.Update(wcsOutstockLock);
isWait = false; //isWait = false;
} }
} }
dbContext.SaveChanges(); dbContext.SaveChanges();

@ -14,36 +14,21 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public class FiveFloorPoint public class FiveFloorPoint
{ {
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host; private readonly IHost _host;
private Plc.S7.Plc _plc; private Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal; private readonly BasePlcpoint LineSignal;
int FloorNo { get; set; } int FloorNo { get; set; }
string EquipNo = ""; string EquipNo = "";
public FiveFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo) public FiveFloorPoint(IHost host, Plc.S7.Plc plc, int floor)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
EquipNo = equipNo; this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID005");
this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal05");
this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID005"));
this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun"));
this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal"));
try
{
//默认启动,清理plc的上位机写入点位值
//this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听

@ -18,15 +18,13 @@ namespace Khd.Core.Wcs.Wcs
private readonly IHost _host; private readonly IHost _host;
private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineSignal; private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint WcsRun;
public FourthFloorPoint(int floor, Plc.S7.Plc plc, IHost host) public FourthFloorPoint(int floor, Plc.S7.Plc plc, IHost host)
{ {
Floor = floor; Floor = floor;
_plc = plc; _plc = plc;
this._host = host; this._host = host;
this.LineRFID = StaticData.BasePlcpointList.First(t => t.floorNo == 4 && t.plcpointNo.Contains("RFID")); this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo== "RFID004");
this.LineSignal = StaticData.BasePlcpointList.First(t => t.floorNo == 4 && t.plcpointNo.Contains("signal")); this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo.Contains("linesignal04"));
this.WcsRun = StaticData.BasePlcpointList.First(t => t.floorNo == 4 && t.plcpointNo.Contains("wcsrun"));
} }
public void StartPoint() public void StartPoint()

@ -17,43 +17,18 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public class SecondFloorAGV public class SecondFloorAGV
{ {
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host; private readonly IHost _host;
private readonly Plc.S7.Plc _plc; private readonly Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
int FloorNo { get; set; } int FloorNo { get; set; }
string EquipNo = "";
int EquipID = 8; //2楼AGV int EquipID = 8; //2楼AGV
List<int> taskInType = new List<int> { 1, 3, 5, 7 };
List<int> taskOutType = new List<int> { 2, 4, 6, 8 }; public SecondFloorAGV(IHost host, Plc.S7.Plc plc, int floor)
public SecondFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
EquipNo = equipNo;
this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位
this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID"));
this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun"));
this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal"));
this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet"));
this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno"));
//var IsPallet = this._plc.Read(LineIsPallet.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
//this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听
@ -87,11 +62,6 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList(); .Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList();
foreach (var item in taskList) foreach (var item in taskList)
{ {
if (taskList.Where(t => t.taskStatus > 0).Where(t => t.objid != item.objid).Any())
{
LogManager.Info($"2楼AGV线程有其他任务正在执行跳过当前任务{item.objid}");
continue;
}
if (item.taskStatus == 0)//下发任务 if (item.taskStatus == 0)//下发任务
{ {
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
@ -627,6 +597,66 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
} }
} }
else if(item.taskType == 59)//周转位-小包入口
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = startEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
type="00"
}
},
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
} }
else else
{ {
@ -888,6 +918,11 @@ namespace Khd.Core.Wcs.Wcs
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0; startEquip.equipStatus = 0;
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
endEquip.equipStatus = 1;
endEquip.emptyCount = 1;
endEquip.containerNo = item.containerNo;
dbContext.Update(endEquip);
dbContext.Update(startEquip); dbContext.Update(startEquip);
dbContext.Remove(item); dbContext.Remove(item);
dbContext.Remove(wcsCmd); dbContext.Remove(wcsCmd);
@ -908,6 +943,16 @@ namespace Khd.Core.Wcs.Wcs
} }
else if (item.taskType == 54) else if (item.taskType == 54)
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0;
startEquip.emptyCount = 0;
startEquip.containerNo = null;
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
endEquip.equipStatus = 1;
endEquip.emptyCount = 1;
endEquip.containerNo = item.containerNo;
dbContext.Update(startEquip);
dbContext.Update(endEquip);
dbContext.Remove(item); dbContext.Remove(item);
dbContext.Remove(wcsCmd); dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
@ -956,6 +1001,7 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId); BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
endEquip.emptyCount = 1; endEquip.emptyCount = 1;
endEquip.equipStatus = 2; endEquip.equipStatus = 2;
endEquip.containerNo = item.containerNo;
dbContext.Remove(item); dbContext.Remove(item);
dbContext.Update(wasteEquip); dbContext.Update(wasteEquip);
dbContext.Remove(wcsCmd); dbContext.Remove(wcsCmd);
@ -968,6 +1014,7 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
emptyEquip.emptyCount = 0; emptyEquip.emptyCount = 0;
emptyEquip.equipStatus = 0; emptyEquip.equipStatus = 0;
emptyEquip.containerNo = null;
item.taskStatus = 8; item.taskStatus = 8;
dbContext.Update(item); dbContext.Update(item);
dbContext.Update(emptyEquip); dbContext.Update(emptyEquip);
@ -976,9 +1023,23 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
else if (item.taskType == 59)
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0;
startEquip.emptyCount = 0;
startEquip.containerNo = null;
dbContext.Update(startEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
} }
} }
} }
break;
} }
} }
catch (Exception ex) catch (Exception ex)

@ -14,29 +14,15 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public class SecondFloorPoint public class SecondFloorPoint
{ {
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host; private readonly IHost _host;
private readonly Plc.S7.Plc _plc; private readonly Plc.S7.Plc _plc;
int FloorNo { get; set; } int FloorNo { get; set; }
string EquipNo = ""; public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor)
public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
EquipNo = equipNo;
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
//this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听

@ -13,29 +13,18 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public class SecondFloorLine public class SecondFloorLine
{ {
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host; private readonly IHost _host;
private Plc.S7.Plc _plc; private Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal; private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
int FloorNo { get; set; } int FloorNo { get; set; }
string EquipNo = ""; public SecondFloorLine(IHost host, Plc.S7.Plc plc, int floor)
int EquipID = 2;
public SecondFloorLine(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
EquipNo = equipNo; this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo== "RFID002");
this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo== "linesignal04");
this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID"));
this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun"));
this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal"));
this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet"));
this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try try
@ -220,7 +209,7 @@ namespace Khd.Core.Wcs.Wcs
newTask.containerNo = palletNo; newTask.containerNo = palletNo;
newTask.currPointId = lineEquip.objid; newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo; newTask.currPointNo = lineEquip.equipNo;
newTask.taskType = 54; newTask.taskType = 53;
newTask.useFlag = 1; newTask.useFlag = 1;
dbContext.WcsTask.Add(newTask); dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);

@ -21,7 +21,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
private readonly IHost host; private readonly IHost host;
private Plc.S7.Plc Plc30 = StaticData.PlcDic[0]; private Plc.S7.Plc Plc30 = StaticData.PlcDic[0];
private Plc.S7.Plc Plc31 = StaticData.PlcDic[1]; private Plc.S7.Plc Plc31 = StaticData.PlcDic[0];
private Plc.S7.Plc Plc220 = StaticData.PlcDic[2]; private Plc.S7.Plc Plc220 = StaticData.PlcDic[2];
public SystemTimer(IHost host) public SystemTimer(IHost host)
@ -201,12 +201,13 @@ namespace Khd.Core.Wcs.Wcs
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
HositerLogic(); HositerLogic();
CtuLineLogic(); //CtuLineLogic();
ThirdAgvLogic(dbContext); ThirdAgvLogic(dbContext);
FiveAgvLogic(dbContext); FiveAgvLogic(dbContext);
FiveBearAgvLogic(dbContext); FiveBearAgvLogic(dbContext);
CtuCmdLogic(dbContext); CtuCmdLogic(dbContext);
//SecondAgvLogic(dbContext); SecondAgvLogic(dbContext);
UpdatePlcPointValue(dbContext);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -233,6 +234,23 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
private void UpdatePlcPointValue(DefaultDbContext dbContext)
{
try
{
foreach (var item in StaticData.basePlcs)
{
item.Value = StaticData.PlcDic[2].Read(item.Address)?.ToString();
}
dbContext.UpdateRange(StaticData.basePlcs);
dbContext.SaveChanges();
}
catch
{
}
}
/// <summary> /// <summary>
/// 定时更新三楼AGV信息 /// 定时更新三楼AGV信息
/// </summary> /// </summary>
@ -251,13 +269,16 @@ namespace Khd.Core.Wcs.Wcs
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result); var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result);
if (reponse != null && reponse.code == "0") if (reponse != null && reponse.code == "0")
{ {
cardStatus cardStatus = reponse.data.First(t => t.robotCode == "2032"); var cardStatus = reponse.data.First(t => t.RobotCode == "2032");
cardStatus.DateNow = DateTime.Now;
dbContext.Update(cardStatus);
dbContext.SaveChanges();
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X')); var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y')); var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosY.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
} }
} }
@ -279,13 +300,16 @@ namespace Khd.Core.Wcs.Wcs
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result); var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result);
if (reponse != null && reponse.code == "0") if (reponse != null && reponse.code == "0")
{ {
cardStatus cardStatus = reponse.data.First(t => t.robotCode == "2033"); var cardStatus = reponse.data.First(t => t.RobotCode == "2033");
cardStatus.DateNow = DateTime.Now;
dbContext.Update(cardStatus);
dbContext.SaveChanges();
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X')); var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y')); var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
} }
} }
@ -329,29 +353,40 @@ namespace Khd.Core.Wcs.Wcs
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result); var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result);
if (reponse != null && reponse.code == "0") if (reponse != null && reponse.code == "0")
{ {
cardStatus cardStatus = reponse.data.First(t => t.robotCode == "2034"); var cardStatus = reponse.data.First(t => t.RobotCode == "2034");
cardStatus.DateNow = DateTime.Now;
dbContext.Update(cardStatus);
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X')); var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y')); var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
cardStatus = reponse.data.First(t => t.robotCode == "6011");
basePlcs= StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "6011");
cardStatus.DateNow = DateTime.Now;
quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains('X')); XPlc = basePlcs.First(t => t.Name.Contains('X'));
Ylc = basePlcs.First(t => t.Name.Contains('Y')); Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
dbContext.Update(cardStatus);
cardStatus = reponse.data.First(t => t.robotCode == "8161");
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "8161");
cardStatus.DateNow = DateTime.Now;
quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.battery, quantityPlc.type); this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains("X")); XPlc = basePlcs.First(t => t.Name.Contains("X"));
Ylc = basePlcs.First(t => t.Name.Contains("Y")); Ylc = basePlcs.First(t => t.Name.Contains("Y"));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.posX.ToString(), XPlc.type); this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.posY.ToString(), Ylc.type); this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
dbContext.Update(cardStatus);
dbContext.SaveChanges();
} }
} }

@ -16,43 +16,16 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public class ThirdFloorAGV public class ThirdFloorAGV
{ {
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host; private readonly IHost _host;
private readonly Plc.S7.Plc _plc; private readonly Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
int FloorNo { get; set; } int FloorNo { get; set; }
string EquipNo = ""; public ThirdFloorAGV(IHost host, Plc.S7.Plc plc, int floor)
int EquipID = 9; //3楼AGV
List<int> taskInType = new List<int> { 1, 3, 5, 7 };
List<int> taskOutType = new List<int> { 2, 4, 6, 8 };
public ThirdFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
EquipNo = equipNo;
this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位
this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID"));
this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun"));
this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal"));
this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet"));
this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno"));
//var IsPallet = this._plc.Read(LineIsPallet.plcpointAddress); //var IsPallet = this._plc.Read(LineIsPallet.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
//this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听
@ -77,7 +50,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).OrderBy(t => t.createTime).ToList(); var taskList = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).Where(t => t.useFlag == 1).OrderBy(t => t.createTime).ToList();
foreach (var item in taskList) foreach (var item in taskList)
{ {
if (item.taskStatus == 0) if (item.taskStatus == 0)
@ -142,7 +115,7 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
} }
} }
if (item.taskType == 39) else if (item.taskType == 39)//提升机-库位
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 3); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 3);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
@ -200,9 +173,9 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); LogManager.Info("三楼Agv下发任务失败" + item.taskType + message);
} }
} }
else if (item.taskType == 41) else if (item.taskType == 41)//库位-翻转机
{ {
WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == wmsRawOutstock.rawOutstockId && t.executeStatus == "1"); WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == item.orderId && t.executeStatus == "1");
if (wmsRawOutstockDetail != null) if (wmsRawOutstockDetail != null)
{ {
wmsRawOutstockDetail.executeStatus = "1"; wmsRawOutstockDetail.executeStatus = "1";
@ -265,7 +238,7 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
} }
else if (item.taskType == 40) else if (item.taskType == 40)//周转位-收集架
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
@ -324,7 +297,7 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); LogManager.Info("三楼Agv下发任务失败" + item.taskType + message);
} }
} }
else if (item.taskType == 42) else if (item.taskType == 42)//翻转机-收集架
{ {
//var startEquip = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); //var startEquip = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
@ -384,7 +357,7 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); LogManager.Info("三楼Agv下发任务失败" + item.taskType + message);
} }
} }
else if (item.taskType == 43) else if (item.taskType == 43)//收集架-周转区
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
@ -443,7 +416,7 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); LogManager.Info("三楼Agv下发任务失败" + item.taskType + message);
} }
} }
else if (item.taskType == 44) else if (item.taskType == 44)//周转区-提升机
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3);

@ -14,41 +14,18 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public class ThirdFloorPoint public class ThirdFloorPoint
{ {
List<BasePlcpoint> ScanPoint { get; set; }//点位信息
private readonly IHost _host; private readonly IHost _host;
private readonly Plc.S7.Plc _plc; private readonly Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineWcsrun;
private readonly BasePlcpoint LineSignal; private readonly BasePlcpoint LineSignal;
private readonly BasePlcpoint LineIsPallet;
private readonly BasePlcpoint LineSerialNO;
int FloorNo { get; set; } int FloorNo { get; set; }
int EquipID = 3; public ThirdFloorPoint(IHost host, Plc.S7.Plc plc, int floor)
string EquipNo = "";
public ThirdFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
EquipNo = equipNo; this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo== "RFID002");
this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo== "linesignal02");
this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID"));
this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun"));
this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal"));
this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet"));
this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno"));
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
//this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听

@ -1,7 +0,0 @@
namespace Khd.Core.Wcs.Wcs
{
public class WcsToWms
{
}
}

@ -14,14 +14,14 @@
"Slot": 1, "Slot": 1,
"Code": 0 "Code": 0
}, },
{ //{
"IP": "192.168.2.31", // "IP": "192.168.2.31",
"Port": 102, //102 // "Port": 102, //102
"CpuType": 40, // "CpuType": 40,
"Rack": 0, // "Rack": 0,
"Slot": 1, // "Slot": 1,
"Code": 1 // "Code": 1
}, //},
{ {
"IP": "192.168.2.220", "IP": "192.168.2.220",
"Port": 102, //102 "Port": 102, //102

@ -390,7 +390,7 @@
<Grid Width="1880" Height="1080"> <Grid Width="1880" Height="1080">
<TabControl x:Name="TabControl" Background="Transparent" BorderThickness="0" HorizontalAlignment="Center" VerticalContentAlignment="Center" SelectionChanged="TabControl_SelectionChanged" TabStripPlacement="Left" Width="1890" Margin="-10,0,0,0"> <TabControl x:Name="TabControl" Background="Transparent" BorderThickness="0" HorizontalAlignment="Center" VerticalContentAlignment="Center" SelectionChanged="TabControl_SelectionChanged" TabStripPlacement="Left" Width="1890" Margin="-10,0,0,0">
<TabItem Visibility="Collapsed" x:Name="FirstItem"></TabItem> <TabItem Visibility="Collapsed" x:Name="FirstItem"></TabItem>
<TabItem x:Name="TaskManager" Header="任务管理" Style="{StaticResource DefaultItem}" Background="#213269" Foreground="White" FontSize="25" Width="160" Height="100" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" > <TabItem x:Name="TaskManager" Header="任务管理" Style="{StaticResource DefaultItem}" Background="#213269" Foreground="White" FontSize="25" Width="160" Height="100" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="2,0,0,0" >
<StackPanel <StackPanel
x:Name="essentialData" x:Name="essentialData"
Orientation="Vertical" Orientation="Vertical"
@ -1508,6 +1508,14 @@
FontSize="20" FontSize="20"
Header="托盘数量" Header="托盘数量"
IsReadOnly="True" /> IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding containerNo}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="托盘号"
IsReadOnly="True" />
<DataGridTemplateColumn <DataGridTemplateColumn
Width="300" Width="300"
MinWidth="10" MinWidth="10"
@ -1535,7 +1543,7 @@
<Style TargetType="{x:Type DataGridRow}"> <Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="#213269" /> <Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" /> <Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="65"/> <Setter Property="Height" Value="60"/>
</Style> </Style>
</DataGrid.RowStyle> </DataGrid.RowStyle>
<DataGrid.RowHeaderStyle> <DataGrid.RowHeaderStyle>
@ -2096,7 +2104,7 @@
Margin="60,0,0,0" Margin="60,0,0,0"
Source="..\Resources\chanpintiaoma.png" Visibility="Visible"/> Source="..\Resources\chanpintiaoma.png" Visibility="Visible"/>
<TextBlock Text="PLC交互信息" Foreground="White" FontSize="20" Width="150" Height="40" Margin="10,10,80,0"/> <TextBlock Text="PLC交互信息" Foreground="White" FontSize="20" Width="150" Height="40" Margin="10,10,80,0"/>
<Button Content="刷新" FontSize="25" Foreground="White" Height="50" Width="132" Click="btnRefreshPlc_Click"> <!--<Button Content="刷新" FontSize="25" Foreground="White" Height="50" Width="132" Click="btnRefreshPlc_Click">
<Button.Template > <Button.Template >
<ControlTemplate TargetType="{x:Type Button}" > <ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4"> <Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
@ -2105,9 +2113,9 @@
</Border> </Border>
</ControlTemplate> </ControlTemplate>
</Button.Template> </Button.Template>
</Button> </Button>-->
</StackPanel> </StackPanel>
<Border Background="#213269" BorderBrush="Silver" BorderThickness="2" CornerRadius="10" Width="700" Height="500" Margin="0,5,0,0"> <Border Background="#213269" BorderBrush="Silver" BorderThickness="2" CornerRadius="10" Width="700" Height="550" Margin="0,5,0,0">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="1.5*"/> <ColumnDefinition Width="1.5*"/>
@ -2155,7 +2163,7 @@
</Grid> </Grid>
</Border> </Border>
<Border Background="#213269" BorderBrush="Silver" BorderThickness="2" CornerRadius="10" Width="700" Height="300" Margin="0,50,0,0"> <Border Background="#213269" BorderBrush="Silver" BorderThickness="2" CornerRadius="10" Width="700" Height="350" Margin="0,30,0,0">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
@ -2177,6 +2185,113 @@
</Grid> </Grid>
</Border> </Border>
</StackPanel> </StackPanel>
<StackPanel Orientation="Vertical" VerticalAlignment="Center" Margin="100,5,0,0" Width="800">
<Grid Height="1000">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border BorderBrush="White" BorderThickness="2" Grid.Row="1" CornerRadius="10" Margin="5,5,5,5">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="二楼小包出入口" Foreground="White" FontSize="35" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="入口叫料" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Column="0" />
<TextBlock Text="出口到位" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Column="1" />
<TextBlock Text="出口RFID" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Column="2" />
<TextBlock x:Name="AgvPut" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Row="1" Grid.Column="0"/>
<TextBlock x:Name="AgvGet" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Row="1" Grid.Column="1"/>
<TextBlock x:Name="RFID2001" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Row="1" Grid.Column="2"/>
</Grid>
</Grid>
</Border>
<Border BorderBrush="White" Visibility="Collapsed" Grid.Row="1" BorderThickness="2" CornerRadius="10" Margin="5">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="二楼废料区" Foreground="White" FontSize="35" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="到位信号" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Column="0" />
<TextBlock Text="RFID" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Column="2" />
</Grid>
</Grid>
</Border>
<Border BorderBrush="White" Grid.Row="0" BorderThickness="2" CornerRadius="10" Margin="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="1.2*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="提升机" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="40" Grid.ColumnSpan="6"/>
<TextBlock Text="当前楼层" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="1" FontSize="25"/>
<TextBlock Text="目的楼层" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1" Grid.Row="1" FontSize="25"/>
<TextBlock Text="提升机状态" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="2" Grid.Row="1" FontSize="25"/>
<TextBlock Text="MES屏蔽" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="3" Grid.Row="1" FontSize="25"/>
<TextBlock Text="货物到位状态" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="4" Grid.Row="1" FontSize="25"/>
<TextBlock x:Name="currentfloor06" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="2" FontSize="25"/>
<TextBlock x:Name="targetfloor06" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1" Grid.Row="2" FontSize="25"/>
<TextBlock x:Name="equipstate06" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="2" Grid.Row="2" FontSize="25"/>
<TextBlock x:Name="mesclose" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="3" Grid.Row="2" FontSize="25"/>
<TextBlock x:Name="hoistertrayin06" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="4" Grid.Row="2" FontSize="25"/>
</Grid>
</Border>
<Border BorderBrush="White" Grid.Row="2" BorderThickness="2" CornerRadius="10" Margin="5">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="三楼翻转机" Foreground="White" FontSize="35" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="翻转机允许放" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Column="0" />
<TextBlock Text="翻转机空托盘" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30" Grid.Column="1" />
<TextBlock x:Name="putTray" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="2" FontSize="25"/>
<TextBlock x:Name="getTray" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="2" Grid.Row="2" FontSize="25"/>
</Grid>
</Grid>
</Border>
</Grid>
</StackPanel>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</TabItem> </TabItem>
@ -2198,6 +2313,114 @@
RowHeaderWidth="0" RowHeaderWidth="0"
SelectionMode="Single" FontSize="16" HorizontalAlignment="Left" Height="1100" Width="1700" Margin="0,0,0,10" SelectionMode="Single" FontSize="16" HorizontalAlignment="Left" Height="1100" Width="1700" Margin="0,0,0,10"
> >
<DataGrid.Columns>
<DataGridTemplateColumn
Width="100"
MinWidth="10"
Header=" 序号"
IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock
Margin="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Focusable="False"
FontSize="20"
Text="{Binding Header, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}, Mode=FindAncestor}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="180*"
Binding="{Binding RobotCode}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="小车"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding Online}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="状态"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding Battery}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="电量"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding Speed}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="速度"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding Stop}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="是否暂停"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding MapCode}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="楼层"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding DateNow}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="同步时间"
IsReadOnly="True" />
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
</Style>
</DataGrid.RowStyle>
<DataGrid.RowHeaderStyle>
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.RowHeaderStyle>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#172560" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Margin" Value="0,0,0,0" />
<Setter Property="BorderThickness" Value="5" />
<Setter Property="BorderBrush" Value="#172540" />
<Setter Property="FontSize" Value="30" />
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid> </DataGrid>
</TabItem> </TabItem>
<TabItem x:Name="AuthManager" Header="权限控制" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="100" Margin="5" > <TabItem x:Name="AuthManager" Header="权限控制" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="100" Margin="5" >

@ -1,6 +1,7 @@
using HandyControl.Tools.Extension; using HandyControl.Tools.Extension;
using Jc.SnowId; using Jc.SnowId;
using Khd.Core.Domain.Auth; using Khd.Core.Domain.Auth;
using Khd.Core.Domain.Dto.agv;
using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models; using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework; using Khd.Core.EntityFramework;
@ -106,6 +107,23 @@ namespace Khd.Core.Wpf.Form
{ {
try try
{ {
foreach (var plcConfig in SystemData.PlcConfigs)
{
if (!SystemData.PlcDic.Any(t => t.Key == plcConfig.Code))
{
Plc.S7.Plc plc;
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
//try
//{
// plc.Open();
//}
//catch (Exception ex)
//{
// LogManager.Error(ex);
//}
SystemData.PlcDic.TryAdd(plcConfig.Code, plc);
}
};
GetMenu(); GetMenu();
DispatcherTimer dispatcherTimer = new DispatcherTimer(); DispatcherTimer dispatcherTimer = new DispatcherTimer();
@ -113,8 +131,26 @@ namespace Khd.Core.Wpf.Form
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1000); dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1000);
dispatcherTimer.Start(); dispatcherTimer.Start();
Thread ddjThread = new Thread(ddjTimer); Thread AgvStatusThread = new Thread(AgvStatus)
{
IsBackground = true,
};
AgvStatusThread.Start();
Thread ddjThread = new Thread(ddjTimer)
{
IsBackground = true,
};
ddjThread.Start(); ddjThread.Start();
Thread RefreshPlcThread = new Thread(RefreshPlc)
{
IsBackground = true,
};
RefreshPlcThread.Start();
//Thread ddjThread = new Thread(ddjTimer);
//ddjThread.Start();
//LogManager.Info($"--------------------------当前时间 :{DateTime.Now} >>> 客户端启动;"); //LogManager.Info($"--------------------------当前时间 :{DateTime.Now} >>> 客户端启动;");
//设置显示任务栏 //设置显示任务栏
if (WindowState == WindowState.Normal) if (WindowState == WindowState.Normal)
@ -157,26 +193,7 @@ namespace Khd.Core.Wpf.Form
MessageBox.Show("条码枪连接失败" + ex.Message); MessageBox.Show("条码枪连接失败" + ex.Message);
} }
foreach (var plcConfig in SystemData.PlcConfigs)
{
Task.Run(() =>
{
if (!SystemData.PlcDic.Any(t => t.Key == plcConfig.Code))
{
Plc.S7.Plc plc;
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
try
{
plc.Open();
}
catch (Exception ex)
{
LogManager.Error(ex);
}
SystemData.PlcDic.TryAdd(plcConfig.Code, plc);
}
});
};
Task.Run(() => Task.Run(() =>
{ {
using var scope = _host.Services.CreateScope(); using var scope = _host.Services.CreateScope();
@ -244,7 +261,61 @@ namespace Khd.Core.Wpf.Form
} }
} }
private void ddjTimer(object? obj) Dictionary<string, string> agvDic = new Dictionary<string, string>
{
{"6011","五楼潜伏" },
{"2034","五楼叉车" },
{"8161","五楼CTU" },
{"2032","三楼叉车" },
{"2033","二楼叉车" },
};
private void AgvStatus()
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
while (true)
{
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var wcsAgvStatuses = dbContext.WcsAgvStatus.ToList();
var list = wcsAgvStatuses.Select(
t => new
{
Battery = t.Battery,
Speed = t.Speed,
Status = t.Status,
Stop = t.Stop == "1" ? "停止" : "运行",
DateNow = t.DateNow?.ToString("yyyy-MM-dd HH:mm:ss"),
ExclType = t.ExclType,
MapCode = t.MapCode == "EE" ? "五楼" : t.MapCode == "BB" ? "三楼" : "二楼",
Online = t.Online.ToUpper() == "TRUE" ? "在线" : "离线",
robotIp = t.robotIp,
Path2 = t.Path2,
RobotCode = agvDic[t.RobotCode],
PosX = t.PosX,
PosY = t.PosY,
PodDir = t.PodDir,
RobotDir = t.RobotDir,
PodCode = t.PodCode,
}
).ToList();
Dispatcher.Invoke(() =>
{
this.AgvDataGrid.ItemsSource = list;
this.AgvDataGrid.Items.Refresh();
});
}
catch
{
}
Thread.Sleep(3000);
}
}
private void ddjTimer()
{ {
using var scope = _host.Services.CreateScope(); using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -283,7 +354,7 @@ namespace Khd.Core.Wpf.Form
this.OneOut.IsEnabled = true; this.OneOut.IsEnabled = true;
this.SomeOut.IsEnabled = true; this.SomeOut.IsEnabled = true;
} }
this.EmptyEquip.ItemsSource = SystemData.BaseEquip.Where(t => t.equipType == 20 || t.equipType == 21).Select( this.EmptyEquip.ItemsSource = SystemData.BaseEquip.Where(t => t.equipType == 20 || t.equipType == 21 || t.equipType == 19).Select(
t => new BaseEquip t => new BaseEquip
{ {
objid = t.objid, objid = t.objid,
@ -293,6 +364,7 @@ namespace Khd.Core.Wpf.Form
ud3 = t.ud3 == "0" ? "空" : t.ud3 == "1" ? "托盘" : t.ud3 == "2" ? "废料" : "未知", ud3 = t.ud3 == "0" ? "空" : t.ud3 == "1" ? "托盘" : t.ud3 == "2" ? "废料" : "未知",
equipNo = t.equipNo, equipNo = t.equipNo,
floorNo = t.floorNo, floorNo = t.floorNo,
containerNo=t.containerNo
} }
).OrderBy(t => t.equipNo); ).OrderBy(t => t.equipNo);
this.EmptyEquip.Items.Refresh(); this.EmptyEquip.Items.Refresh();
@ -303,7 +375,7 @@ namespace Khd.Core.Wpf.Form
{ {
} }
Thread.Sleep(5000); Thread.Sleep(3000);
} }
} }
@ -1176,97 +1248,74 @@ namespace Khd.Core.Wpf.Form
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
private void btnRefreshPlc_Click(object sender, RoutedEventArgs e) private void RefreshPlc()
{ {
try while (true)
{
for (int i = 1; i <= 5; i++)
{
BasePlcpoint rfid = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"RFID00{i}");
BasePlcpoint linesignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"linesignal0{i}");
BasePlcpoint wcsrun = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"wcsrun0{i}");
var textBlock = FindName(rfid.plcpointNo) as TextBlock;
if (textBlock != null)
{
textBlock.Text = SystemData.PlcDic[0].ReadRFID(rfid.plcpointAddress);
}
textBlock = FindName(linesignal.plcpointNo) as TextBlock;
if (textBlock != null)
{
textBlock.Text = SystemData.PlcDic[0].Read(linesignal.plcpointAddress)?.ToString();
}
textBlock = FindName(wcsrun.plcpointNo) as TextBlock;
if (textBlock != null)
{
textBlock.Text = SystemData.PlcDic[0].Read(wcsrun.plcpointAddress)?.ToString();
}
}
}
catch (Exception ex)
{ {
try try
{ {
if (ex is PlcException) var points = SystemData.BasePlcpoints.OrderBy(t => t.definefield3).ToList();
foreach (var item in points)
{ {
foreach (var item in SystemData.PlcDic) if (!string.IsNullOrEmpty(item.plcpointAddress))
{ {
if (item.Value.IP == ex.Message) TextBlock? textBlock = null;
Dispatcher.Invoke(() =>
{ {
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Slot, item.Value.Rack); textBlock = this.FindName(item.plcpointNo) as TextBlock;
SystemData.PlcDic[item.Key].Open(); });
break; if (textBlock != null)
{
var plc = SystemData.PlcDic.Values.Where(t => t.IP == item.definefield3).FirstOrDefault();
if (plc != null)
{
try
{
string? result = "";
if (item.plcpointNo.Contains("RFID"))
{
result = plc.ReadRFID(item.plcpointAddress)?.ToString();
}
else
{
result = plc.Read(item.plcpointAddress)?.ToString();
}
Dispatcher.Invoke(() =>
{
textBlock.Text = result == null ? "" : result;
});
}
catch (Exception ex)
{
try
{
if (ex is PlcException)
{
foreach (var item2 in SystemData.PlcDic)
{
if (item2.Value.IP == ex.Message)
{
SystemData.PlcDic[item2.Key] = new Plc.S7.Plc(item2.Value.CPU, item2.Value.IP, item2.Value.Port, item2.Value.Slot, item2.Value.Rack);
SystemData.PlcDic[item2.Key].Open();
break;
}
}
}
}
catch
{
points.RemoveAll(t => t.definefield3 == ex.Message);
}
}
}
} }
} }
} }
} }
catch catch
{ {
MessageBox.Show("提升机PLC连接失败!");
} }
} Thread.Sleep(3000);
try
{
BasePlcpoint RFID5001 = SystemData.BasePlcpoints.First(t => t.plcpointNo == "RFID5001");
BasePlcpoint isarrive = SystemData.BasePlcpoints.First(t => t.plcpointNo == "isarrive");
BasePlcpoint isput = SystemData.BasePlcpoints.First(t => t.plcpointNo == "isput");
var CtuTextBlock = FindName(RFID5001.plcpointNo) as TextBlock;
if (CtuTextBlock != null)
{
CtuTextBlock.Text = SystemData.PlcDic[1].ReadRFID(RFID5001.plcpointAddress);
}
CtuTextBlock = FindName(isarrive.plcpointNo) as TextBlock;
if (CtuTextBlock != null)
{
CtuTextBlock.Text = SystemData.PlcDic[1].Read(isarrive.plcpointAddress)?.ToString();
}
CtuTextBlock = FindName(isput.plcpointNo) as TextBlock;
if (CtuTextBlock != null)
{
CtuTextBlock.Text = SystemData.PlcDic[1].Read(isput.plcpointAddress)?.ToString();
}
}
catch (Exception ex)
{
try
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Slot, item.Value.Rack);
SystemData.PlcDic[item.Key].Open();
break;
}
}
}
}
catch
{
MessageBox.Show("U型线PLC连接失败!");
}
} }
} }

@ -3,9 +3,9 @@
//mysql //mysql
//"DefaultConnection": "server=106.12.13.113;port=3306;database=khd_jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True" //"DefaultConnection": "server=106.12.13.113;port=3306;database=khd_jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True"
//khd //khd
"DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" //"DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
//"DefaultConnection": "server=106.12.13.113;port=3336;database=khd_jyhb;uid=khd;pwd=khd@123;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True" //"DefaultConnection": "server=106.12.13.113;port=3336;database=khd_jyhb;uid=khd;pwd=khd@123;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True"
//"DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" "DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
}, },
"PlcConfigs": [ "PlcConfigs": [
{ {
@ -24,14 +24,14 @@
"Slot": 1, "Slot": 1,
"Code": 1 "Code": 1
}, },
//{ {
// "IP": "192.168.2.220", "IP": "192.168.2.220",
// "Port": 102, //102 "Port": 102, //102
// "CpuType": 40, "CpuType": 40,
// "Rack": 0, "Rack": 0,
// "Slot": 1, "Slot": 1,
// "Code": 2 "Code": 2
//} }
], ],
"PLCSetting": { "PLCSetting": {
"Mode": "0", "Mode": "0",

Loading…
Cancel
Save