master
1 year ago
parent e7ec40a522
commit df44a56389

@ -60,6 +60,7 @@ namespace Khd.Core.Wcs
StaticData.PlcDic.TryAdd(plcConfig.Code, plc);
}
}
//创建定时器
SystemTimer systemTimer = new SystemTimer(_host);
systemTimer.Start();
//创建任务

@ -1,6 +1,7 @@
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
@ -51,66 +52,67 @@ namespace Khd.Core.Wcs.Wcs
var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress);
if (rfid != null && isSignal != null)
{
if (Convert.ToInt32(isSignal) == 1)//托盘到位
{
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
var wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid && t.nextPointId == baseEquip.objid);
if (wcsTask != null)//如果不是null
WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 4).FirstOrDefault();
if(wcsTask!= null)
{
int? floor = 0;
var wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.saleOrderId == wcsTask.orderId);
if (wmsProductOutstock != null)
if (wcsTask.taskStatus == 5)//提升机上来的
{
var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsProductOutstock.endStationCode);
if (endEquip != null)
{
floor = endEquip.floorNo;
}
dbContext.Remove(wcsTask);
dbContext.SaveChanges();
}
else
}
else
{
bool hasTask = dbContext.WcsTask.Where(t => t.currPointId == 4).Any();
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 4);
BaseEquip nextEquip = StaticData.BaseEquip.First(t=>t.objid==6);
if (!hasTask)
{
var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == wcsTask.orderId);
if (wmsRawOutstock != null)
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault();
if (mesBasePalletInfo != null)
{
var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawOutstock.endStationCode);
if (endEquip != null)
var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == mesBasePalletInfo.materialId).FirstOrDefault()?.warehouseId;
if (warehouseId != null)
{
floor = endEquip.floorNo;
var TargetFloor = dbContext.WmsBaseWarehouse.Where(t => t.warehouseId == warehouseId).FirstOrDefault();
if (TargetFloor != null)
{
var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.agvType == "I" && t.dicField == TargetFloor.warehouseInstockType).FirstOrDefault();
if (dic != null)
{
var newTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
serialNo = SystemData.GetSerialNo(dbContext),
taskType = Convert.ToInt32(dic.dicValue),
taskStatus = 0,
containerNo = rfid,
materialBarcode = mesBasePalletInfo.materialBarcode,
materialId = mesBasePalletInfo.materialId,
qty = Convert.ToInt32(mesBasePalletInfo.bindAmount),
currPointId = lineEquip.objid,
currPointNo = lineEquip.equipNo,
nextPointId = nextEquip.objid,
nextPointNo = nextEquip.equipNo,
endPointId = warehouseId,
fromFloorNo = 4,
floorNo = TargetFloor.warehouseFloor,
useFlag = 1,
createBy = "一楼接驳位",
createTime = DateTime.Now,
remark = "一楼创建入库任务"
};
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}
}
}
}
if (floor == 0)
{
Console.WriteLine($"{DateTime.Now}:4楼接驳位未找到目的地楼层");
_logger.Info("4楼接驳位未找到目的地楼层");
Thread.Sleep(1000);
continue;
}
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 = 4;
wcsTask.taskType = 6;//成品出库
wcsTask.floorNo = floor;//出库到一楼
wcsTask.taskStatus = 0;
wcsTask.updateTime = DateTime.Now;
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid)
.Update(t => new WcsTaskLog
{
nextPointId = nextEquip.objid,
nextPointNo = nextEquip.equipNo,
currPointId = baseEquip.objid,
currPointNo = baseEquip.equipNo,
fromFloorNo = 4,
floorNo = floor,
taskStatus = 0,
updateTime = DateTime.Now,
});
dbContext.SaveChanges();
}
}
}

@ -63,9 +63,50 @@ namespace Khd.Core.Wcs.Wcs
IsBackground = true
};
deleteTaskThread.Start();
var deleteLogsThread = new Thread(DeleteLogsLogic)
{
Name = "DeleteLogsThread",
IsBackground = true
};
deleteLogsThread.Start();
Console.WriteLine($"{DateTime.Now}: SystemTimer started");
}
private void DeleteLogsLogic(object? obj)
{
while (true)
{
try
{
//获取当前程序运行目录下的logs文件夹
string logPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");
string[] strings = Directory.GetDirectories(logPath);
foreach (string s in strings)
{
string? dirName = Path.GetFileName(s);
if (dirName != null)
{
if (DateTime.TryParse(dirName, out DateTime dt))
{
if (dt < DateTime.Now.AddDays(-5))
{
Directory.Delete(s, true);
_logger.Info($"日志{dirName}已删除");
}
}
}
}
}
catch
{
}
Thread.Sleep(1000 * 60 * 60 * 23);
}
}
private void DeleteTaskLogic(object? obj)
{
using var scope = host.Services.CreateScope();

@ -2323,11 +2323,9 @@ namespace Khd.Core.Wpf.Form
{
if (item.Value.IP == ex.Message)
{
MessageBox.Show("PLC断开连接正在重连!");
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();
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "canReceive");
SystemData.PlcDic[1].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
MessageBox.Show("一键收料发送成功");
break;
}
}
@ -2399,6 +2397,7 @@ namespace Khd.Core.Wpf.Form
{
if (item.Value.IP == ex.Message)
{
MessageBox.Show("PLC断开连接正在重连!");
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
}
@ -2439,6 +2438,7 @@ namespace Khd.Core.Wpf.Form
{
if (item.Value.IP == ex.Message)
{
MessageBox.Show("PLC断开连接正在重连!");
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
}
@ -2485,6 +2485,7 @@ namespace Khd.Core.Wpf.Form
{
if (item.Value.IP == ex.Message)
{
MessageBox.Show("PLC断开连接正在重连!");
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
}
@ -2526,6 +2527,7 @@ namespace Khd.Core.Wpf.Form
{
if (item.Value.IP == ex.Message)
{
MessageBox.Show("PLC断开连接正在重连!");
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
}

@ -9,6 +9,7 @@ using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@ -73,62 +74,61 @@ namespace Khd.Core.Wpf.TaskForm
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
if (StartPoint.SelectedItem is EquipMessage startEquip && EndPoint.SelectedItem is EquipMessage endEquip && !string.IsNullOrEmpty(EmptyCount.SelectedItem?.ToString()))
if (StartPoint.SelectedItem is EquipMessage startEquip && EndPoint.SelectedItem is EquipMessage endEquip)
{
if (startEquip.equipType == 1)
{
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"RFID00{startEquip.floorNo}");
string? rfid = SystemData.PlcDic[0].ReadRFID(basePlcpoint.plcpointAddress);
if (!string.IsNullOrEmpty(rfid))
BasePlcpoint linesignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"linesignal0{startEquip.floorNo}");
var linesignalValue = SystemData.PlcDic[0].Read(linesignal.plcpointAddress);
if (linesignalValue != null && Convert.ToInt32(linesignalValue) == 1)
{
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == $"RFID00{startEquip.floorNo}");
string? rfid = SystemData.PlcDic[0].ReadRFID(basePlcpoint.plcpointAddress);
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault();
if (mesBasePalletInfo != null)
WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid);
if (task == null)
{
WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid);
if (task == null)
int qty = 1;
if (int.TryParse(EmptyCount.SelectedIndex.ToString(), out int emptyCount))
{
BaseEquip baseEquip = baseEquips.First(t => t.equipType == 2);//提升机
WcsTask wcsTask = new()
{
objid = FormBoardT._jcSnowId.NextId(),
taskType = 99,
currPointId = startEquip.Id,
currPointNo = startEquip.equipNo,
nextPointId = baseEquip.objid,
nextPointNo = baseEquip.equipNo,
endPointId = endEquip.Id,
endPointNo = endEquip.equipNo,
fromFloorNo = startEquip.floorNo,
floorNo = endEquip.floorNo,
materialBarcode = mesBasePalletInfo.materialBarcode,
materialId = mesBasePalletInfo.materialId,
taskStatus = 0,
createBy = "人工",
createTime = DateTime.Now,
equipmentNo = startEquip.equipNo,
useFlag = 0,
qty = Convert.ToInt32(EmptyCount.SelectedIndex)+1,
isEmpty = "1"
};
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
qty = emptyCount + 1;
}
else
BaseEquip baseEquip = baseEquips.First(t => t.equipType == 2);//提升机
WcsTask wcsTask = new()
{
MessageBox.Show("该RFID的任务已经存在");
}
objid = FormBoardT._jcSnowId.NextId(),
taskType = 99,
currPointId = startEquip.Id,
currPointNo = startEquip.equipNo,
nextPointId = baseEquip.objid,
nextPointNo = baseEquip.equipNo,
endPointId = endEquip.Id,
endPointNo = endEquip.equipNo,
fromFloorNo = startEquip.floorNo,
floorNo = endEquip.floorNo,
materialBarcode = mesBasePalletInfo?.materialBarcode,
materialId = mesBasePalletInfo?.materialId,
taskStatus = 0,
createBy = "人工",
createTime = DateTime.Now,
equipmentNo = startEquip.equipNo,
useFlag = 0,
qty = qty,
isEmpty = "1"
};
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
else
{
MessageBox.Show("未找到该托盘信息!");
MessageBox.Show("该RFID的任务已经存在");
}
}
else
{
MessageBox.Show("未读取到RFID");
MessageBox.Show("未检测到起始地楼层的到位信号");
}
}
this.Close();
@ -144,9 +144,12 @@ namespace Khd.Core.Wpf.TaskForm
{
try
{
SystemData.PlcDic[0] = new Plc.S7.Plc(SystemData.PlcDic[0].CPU, SystemData.PlcDic[0].IP, SystemData.PlcDic[0].Port, SystemData.PlcDic[0].Rack, SystemData.PlcDic[0].Slot);
SystemData.PlcDic[0].Open();
AddTaskBtn_Click(AddTaskBtn, null);
MessageBox.Show("PLC断开连接正在重连");
Task.Run(() =>
{
SystemData.PlcDic[0] = new Plc.S7.Plc(SystemData.PlcDic[0].CPU, SystemData.PlcDic[0].IP, SystemData.PlcDic[0].Port, SystemData.PlcDic[0].Rack, SystemData.PlcDic[0].Slot);
SystemData.PlcDic[0].Open();
});
}
catch
{

Loading…
Cancel
Save