master
1 year ago
parent c3d671b033
commit ba01bb482d

@ -1,4 +1,5 @@
using Khd.Core.EntityFramework; using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library; using Khd.Core.Library;
using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs; using Khd.Core.Wcs.Wcs;
@ -36,6 +37,8 @@ namespace Khd.Core.Wcs
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
try try
{ {
dbContext.WmsBaseLocation.Update(t => new Dictionary<string, WmsBaseLocation>() { { "1", new WmsBaseLocation { locationStatus="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();//陈工Agv和设备信息推送 StaticData.basePlcs = dbContext.BasePlc.ToList();//陈工Agv和设备信息推送
StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息 StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Wcs
{
public enum TaskTypeEnum:int
{
/// <summary>
/// 五楼原材料拆分
/// </summary>
FIVE_RAW_SPLIT= 46,
/// <summary>
/// 五楼原材料拆分返库
/// </summary>
FIVE_RAW_SPLIT_RETURN= 28,
/// <summary>
/// 五楼原材料入库
/// </summary>
FIVE_RAW_IN=47,
/// <summary>
/// 五楼成品出库
/// </summary>
FIVE_PRODUCK_OUT=38,
/// <summary>
/// 五楼原材料到背板安装
/// </summary>
FIVE_RAW_TO_BACK=33,
/// <summary>
/// 五楼半成品入库
/// </summary>
FIVE_PRODUCK_HALF_IN=34,
/// <summary>
/// 五楼移库
/// </summary>
FIVE_MOVE=66,
}
}

@ -7,7 +7,6 @@ using Khd.Core.Wcs.Global;
using Masuit.Tools; using Masuit.Tools;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs namespace Khd.Core.Wcs.Wcs
{ {

@ -13,7 +13,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
public class SystemTimer public class SystemTimer
{ {
private readonly LoggerUtils _logger = new LoggerUtils(); private readonly LoggerUtils _logger = new ();
private readonly IHost host; private readonly IHost host;
public SystemTimer(IHost host) public SystemTimer(IHost host)
@ -70,8 +70,7 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 定时清除日志文件 /// 定时清除日志文件
/// </summary> /// </summary>
/// <param name="obj"></param> private void DeleteLogsLogic()
private void DeleteLogsLogic(object? obj)
{ {
while (true) while (true)
{ {
@ -108,8 +107,7 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 删除任务 /// 删除任务
/// </summary> /// </summary>
/// <param name="obj"></param> private void DeleteTaskLogic()
private void DeleteTaskLogic(object? obj)
{ {
using var scope = host.Services.CreateScope(); using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -188,7 +186,10 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
private void PlcHearBeat220Logic(object? obj) /// <summary>
/// 定时发送心跳包
/// </summary>
private void PlcHearBeat220Logic()
{ {
BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray"); BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray");
while (true) while (true)
@ -216,8 +217,7 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 定时发送心跳包 /// 定时发送心跳包
/// </summary> /// </summary>
/// <param name="obj"></param> private void PlcHeartBeat30Logic()
private void PlcHeartBeat30Logic(object? obj)
{ {
BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "HeartBeat30"); BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "HeartBeat30");
bool heartBeatCount = false; bool heartBeatCount = false;
@ -247,8 +247,7 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 定时发送心跳包 /// 定时发送心跳包
/// </summary> /// </summary>
/// <param name="obj"></param> private void PlcHeartBeat31Logic()
private void PlcHeartBeat31Logic(object? obj)
{ {
BasePlcpoint HeartBeat31 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "CTUHeart"); BasePlcpoint HeartBeat31 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "CTUHeart");
bool heartBeatCount = false; bool heartBeatCount = false;
@ -285,8 +284,7 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 定时更新基础设备信息 /// 定时更新基础设备信息
/// </summary> /// </summary>
/// <param name="obj"></param> private void BaseEquipLogic()
private void BaseEquipLogic(object? obj)
{ {
using var scope = host.Services.CreateScope(); using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -318,110 +316,28 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 定时同步消息 /// 定时同步消息
/// </summary> /// </summary>
/// <param name="obj"></param> private void MessageSynchronousLogic()
private void MessageSynchronousLogic(object? obj)
{ {
while (true) while (true)
{ {
try FiveAgvStatusLogic();
{ SecondAgvLogic();
try ThirdAgvLogic();
{ SendTrayMessage();
FiveAgvStatusLogic(); HositerLogic();
} CtuLineLogic();
catch FiveAgvLogic();
{ FiveBearAgvLogic();
CtuCmdLogic();
} UpdatePlcPointValue();
try BasePlcPointUpdateLogic();
{ Thread.Sleep(3000);
SecondAgvLogic();
}
catch
{
}
try
{
ThirdAgvLogic();
}
catch
{
}
try
{
SendTrayMessage();
}
catch
{
}
try
{
HositerLogic();
}
catch
{
}
try
{
CtuLineLogic();
}
catch
{
}
try
{
FiveAgvLogic();
}
catch
{
}
try
{
FiveBearAgvLogic();
}
catch
{
}
try
{
CtuCmdLogic();
}
catch
{
}
try
{
UpdatePlcPointValue();
}
catch
{
}
}
catch (Exception ex)
{
if (ex is PlcException)
{
}
else
{
_logger.Error(ex.Message + "\n" + ex.StackTrace);
}
}
Thread.Sleep(1000);
} }
} }
/// <summary>
/// 五楼AGV状态
/// </summary>
private void FiveAgvStatusLogic() private void FiveAgvStatusLogic()
{ {
try try
@ -456,38 +372,87 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
private void SendTrayMessage() /// <summary>
/// 获取Plc的值
/// </summary>
private void BasePlcPointUpdateLogic()
{ {
using var scope = host.Services.CreateScope(); try
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint oneInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneIn");
BasePlcpoint oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut");
BasePlcpoint someOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut");
BasePlcpoint someInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someIn");
BasePlc basePlc = StaticData.basePlcs.First(t => t.Name == "托盘库去向");
BasePlc basePlc2 = StaticData.basePlcs.First(t => t.Name == "托盘库数量");
string? value = "0";
if (StaticData.PlcDic[0].Read(oneInPoint.plcpointAddress)?.ToString() == "1")
{ {
value = "1"; using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<Plc.S7.Plc> plcs = StaticData.PlcDic.Values.ToList();
foreach (var item in StaticData.BasePlcpointList.Where(t => !string.IsNullOrEmpty(t.plcpointAddress)))
{
if (!string.IsNullOrEmpty(item.plcpointAddress))
{
try
{
if (item.plcpointNo.Contains("RFID"))
item.definefield1 = plcs.Where(t => t.IP == item.definefield3).First().ReadRFID(item.plcpointAddress)?.ToString();
else
item.definefield1 = plcs.Where(t => t.IP == item.definefield1).First().Read(item.plcpointAddress)?.ToString();
}
catch
{
}
}
}
dbContext.UpdateRange(StaticData.BasePlcpointList.Where(t => !string.IsNullOrEmpty(t.plcpointAddress)));
dbContext.SaveChanges();
} }
else if (StaticData.PlcDic[0].Read(oneOutPoint.plcpointAddress)?.ToString() == "1") catch
{ {
value = "2";
} }
else if (StaticData.PlcDic[0].Read(someOutPoint.plcpointAddress)?.ToString() == "1")
{
value = "3";
}
else if (StaticData.PlcDic[0].Read(someInPoint.plcpointAddress)?.ToString() == "1")
{
value = "4";
}
StaticData.PlcDic[2].WriteToPoint(basePlc.Address, value, basePlc.type);
StaticData.PlcDic[2].WriteToPoint(basePlc2.Address, baseEquip.emptyCount.ToString(), basePlc2.type);
} }
/// <summary>
/// 托盘库
/// </summary>
private void SendTrayMessage()
{
try
{
using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint oneInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneIn");
BasePlcpoint oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut");
BasePlcpoint someOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut");
BasePlcpoint someInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someIn");
BasePlc basePlc = StaticData.basePlcs.First(t => t.Name == "托盘库去向");
BasePlc basePlc2 = StaticData.basePlcs.First(t => t.Name == "托盘库数量");
string? value = "0";
if (StaticData.PlcDic[0].Read(oneInPoint.plcpointAddress)?.ToString() == "1")
{
value = "1";
}
else if (StaticData.PlcDic[0].Read(oneOutPoint.plcpointAddress)?.ToString() == "1")
{
value = "2";
}
else if (StaticData.PlcDic[0].Read(someOutPoint.plcpointAddress)?.ToString() == "1")
{
value = "3";
}
else if (StaticData.PlcDic[0].Read(someInPoint.plcpointAddress)?.ToString() == "1")
{
value = "4";
}
StaticData.PlcDic[2].WriteToPoint(basePlc.Address, value, basePlc.type);
StaticData.PlcDic[2].WriteToPoint(basePlc2.Address, baseEquip.emptyCount.ToString(), basePlc2.type);
}
catch
{
}
}
/// <summary>
/// 修改Plc点位信息
/// </summary>
private void UpdatePlcPointValue() private void UpdatePlcPointValue()
{ {
try try
@ -510,7 +475,6 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 定时更新三楼AGV信息 /// 定时更新三楼AGV信息
/// </summary> /// </summary>
/// <param name="dbContext"></param>
private void ThirdAgvLogic() private void ThirdAgvLogic()
{ {
try try
@ -550,7 +514,6 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 定时更新二楼AGV信息 /// 定时更新二楼AGV信息
/// </summary> /// </summary>
/// <param name="dbContext"></param>
private void SecondAgvLogic() private void SecondAgvLogic()
{ {
try try
@ -590,163 +553,179 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 定时更新五楼AGV信息 /// 定时更新五楼AGV信息
/// </summary> /// </summary>
/// <param name="dbContext"></param>
private void FiveAgvLogic() private void FiveAgvLogic()
{ {
using var scope = host.Services.CreateScope(); try
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 10);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼AGV").ToList();
List<int?> type = new List<int?>() { 27, 28, 34, 35, 37, 38, 46, 47 };
var wcsCmds = dbContext.WcsCmd.Where(t => type.Contains(t.cmdType)).ToList();
if (wcsCmds.Count > 0)
{ {
WcsCmd wcsCmd = wcsCmds.First(); using var scope = host.Services.CreateScope();
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, wcsCmd.nextPointId.ToString(), endPlc.type); var baseEquip = StaticData.BaseEquip.First(t => t.objid == 28);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点")); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type); var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼AGV").ToList();
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号")); var wcsCmds = dbContext.WcsTask.Where(t => t.nextPointId == 28).ToList();
string cmdType = StaticData.BaseDictionary.First(t => t.objid == wcsCmd.cmdType).ToPlc; if (wcsCmds.Count > 0)
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type); {
var wcsCmd = wcsCmds.First();
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, wcsCmd.nextPointId.ToString(), endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
string cmdType = StaticData.BaseDictionary.First(t => t.objid == wcsCmd.taskType).ToPlc;
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
}
else
{
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, "0", endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, "0", startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
}
var data = new
{
reqCode = StaticData.SnowId.NextId(),
mapCode = "EE"
};
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms-dps/rest/queryAgvStatus", data.ToJsonString());
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result);
if (reponse != null && reponse.code == "0")
{
var cardStatus = reponse.data.First(t => t.RobotCode == "2034");
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "6011");
quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains('X'));
Ylc = basePlcs.First(t => t.Name.Contains('Y'));
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "8161");
quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains("X"));
Ylc = basePlcs.First(t => t.Name.Contains("Y"));
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
}
} }
else catch
{ {
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, "0", endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, "0", startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
}
var data = new
{
reqCode = StaticData.SnowId.NextId(),
mapCode = "EE"
};
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms-dps/rest/queryAgvStatus", data.ToJsonString());
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result);
if (reponse != null && reponse.code == "0")
{
var cardStatus = reponse.data.First(t => t.RobotCode == "2034");
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "6011");
quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains('X'));
Ylc = basePlcs.First(t => t.Name.Contains('Y'));
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "8161");
quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains("X"));
Ylc = basePlcs.First(t => t.Name.Contains("Y"));
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
} }
} }
/// <summary> /// <summary>
/// 定时更新五楼背负式AGV信息 /// 定时更新五楼背负式AGV信息
/// </summary> /// </summary>
/// <param name="dbContext"></param>
private void FiveBearAgvLogic() private void FiveBearAgvLogic()
{ {
using var scope = host.Services.CreateScope(); try
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 10);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList();
var wcsCmds = dbContext.WcsCmd.Where(t => t.cmdType == 32 || t.cmdType == 48).ToList();
if (wcsCmds.Count > 0)
{ {
WcsCmd wcsCmd = wcsCmds.First(); using var scope = host.Services.CreateScope();
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, wcsCmd.nextPointId.ToString(), endPlc.type); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var startPlc = basePlcs.First(t => t.Name.Contains("起始点")); var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList();
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type); var wcsCmds = dbContext.WcsTask.Where(t => t.nextPointId == 10).ToList();
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号")); if (wcsCmds.Count > 0)
string cmdType = StaticData.BaseDictionary.First(t => t.objid == wcsCmd.cmdType).ToPlc; {
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type); var wcsCmd = wcsCmds.First();
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, wcsCmd.nextPointId.ToString(), endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
string cmdType = StaticData.BaseDictionary.First(t => t.objid == wcsCmd.taskType).ToPlc;
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
}
else
{
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, "0", endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, "0", startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
}
} }
else catch
{ {
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, "0", endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, "0", startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
} }
} }
/// <summary> /// <summary>
/// 定时更新五楼CTU信息 /// 定时更新五楼CTU信息
/// </summary> /// </summary>
/// <param name="dbContext"></param>
private void CtuCmdLogic() private void CtuCmdLogic()
{ {
using var scope = host.Services.CreateScope(); try
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 11);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList();
var wcsCmds = dbContext.WcsCmd.Where(t => t.cmdType == 29 || t.cmdType == 30 || t.cmdType == 31).ToList();
if (wcsCmds.Count > 0)
{ {
var wcsCmd = wcsCmds.First(); using var scope = host.Services.CreateScope();
List<long?> startList = new List<long?>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<long?> endList = new List<long?>(); var baseEquip = StaticData.BaseEquip.First(t => t.objid == 11);
if (wcsCmd.cmdType != 30) dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList();
var wcsCmds = dbContext.WcsTask.Where(t => t.nextPointId == 11).ToList();
if (wcsCmds.Count > 0)
{ {
startList.Add(wcsCmd.currPointId); var wcsCmd = wcsCmds.First();
endList.AddRange(wcsCmds.Select(t => t.nextPointId).ToList()); List<long?> startList = new List<long?>();
List<long?> endList = new List<long?>();
if (wcsCmd.taskType != 30)
{
startList.Add(wcsCmd.currPointId);
endList.AddRange(wcsCmds.Select(t => t.nextPointId).ToList());
}
else
{
startList.Add(wcsCmd.nextPointId);
endList.AddRange(wcsCmds.Select(t => t.currPointId).ToList());
}
while (endList.Count < 6)
{
endList.Add(0);
}
var endPlcs = basePlcs.Where(t => t.Name.Contains("目的地")).OrderBy(t => t.Name).ToList();
for (int i = 0; i < endPlcs.Count; i++)
{
StaticData.PlcDic[2].WriteToPoint(endPlcs[i].Address, endList[i].ToString(), endPlcs[i].type);
}
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
string cmdType = StaticData.BaseDictionary.First(t => t.objid == wcsCmd.taskType).ToPlc;
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
} }
else else
{ {
startList.Add(wcsCmd.nextPointId); var endPlcs = basePlcs.Where(t => t.Name.Contains("目的地")).OrderBy(t => t.Name).ToList();
endList.AddRange(wcsCmds.Select(t => t.currPointId).ToList()); for (int i = 0; i < endPlcs.Count; i++)
{
StaticData.PlcDic[2].WriteToPoint(endPlcs[i].Address, "0", endPlcs[i].type);
}
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, "0", startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
} }
while (endList.Count < 6)
{
endList.Add(0);
}
var endPlcs = basePlcs.Where(t => t.Name.Contains("目的地")).OrderBy(t => t.Name).ToList();
for (int i = 0; i < endPlcs.Count; i++)
{
StaticData.PlcDic[2].WriteToPoint(endPlcs[i].Address, endList[i].ToString(), endPlcs[i].type);
}
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
string cmdType = StaticData.BaseDictionary.First(t => t.objid == wcsCmd.cmdType).ToPlc;
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
} }
else catch
{ {
var endPlcs = basePlcs.Where(t => t.Name.Contains("目的地")).OrderBy(t => t.Name).ToList();
for (int i = 0; i < endPlcs.Count; i++)
{
StaticData.PlcDic[2].WriteToPoint(endPlcs[i].Address, "0", endPlcs[i].type);
}
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, "0", startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
} }
} }
@ -755,40 +734,47 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
private void CtuLineLogic() private void CtuLineLogic()
{ {
var basePlcpoints = StaticData.BasePlcpointList.ToList(); try
var basePlcs = StaticData.basePlcs.ToList();
var bill = from a in basePlcpoints
from b in basePlcs
where a.plcpointNo == b.Name && b.Station == "U型线"
select new { a, b };
foreach (var item in bill)
{ {
if (item.a.plcpointNo.Contains("RFID")) var basePlcpoints = StaticData.BasePlcpointList.ToList();
var basePlcs = StaticData.basePlcs.ToList();
var bill = from a in basePlcpoints
from b in basePlcs
where a.plcpointNo == b.Name && b.Station == "U型线"
select new { a, b };
foreach (var item in bill)
{ {
string? rfid = StaticData.PlcDic[1].ReadRFID(item.a.plcpointAddress); if (item.a.plcpointNo.Contains("RFID"))
if (!string.IsNullOrEmpty(rfid))
{ {
rfid = rfid[(rfid.IndexOf("C") + 1)..]; string? rfid = StaticData.PlcDic[1].ReadRFID(item.a.plcpointAddress);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, rfid, item.b.type); if (!string.IsNullOrEmpty(rfid))
{
rfid = rfid[(rfid.IndexOf("C") + 1)..];
StaticData.PlcDic[2].WriteToPoint(item.b.Address, rfid, item.b.type);
}
else
{
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
}
} }
else else
{ {
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type); var value = StaticData.PlcDic[1].Read(item.a.plcpointAddress);
} if (value != null && !string.IsNullOrEmpty(value.ToString()))
} {
else StaticData.PlcDic[2].WriteToPoint(item.b.Address, value.ToString(), item.b.type);
{ }
var value = StaticData.PlcDic[1].Read(item.a.plcpointAddress); else
if (value != null && !string.IsNullOrEmpty(value.ToString())) {
{ StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, value.ToString(), item.b.type); }
}
else
{
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
} }
} }
} }
catch
{
}
} }
/// <summary> /// <summary>
@ -796,41 +782,47 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
private void HositerLogic() private void HositerLogic()
{ {
try
var basePlcpoints = StaticData.BasePlcpointList.ToList();
var basePlcs = StaticData.basePlcs.ToList();
var bill = from a in basePlcpoints
from b in basePlcs
where a.plcpointNo == b.Name && b.Station != "U型线"
select new { a, b };
foreach (var item in bill)
{ {
if (item.a.plcpointNo.Contains("RFID")) var basePlcpoints = StaticData.BasePlcpointList.ToList();
var basePlcs = StaticData.basePlcs.ToList();
var bill = from a in basePlcpoints
from b in basePlcs
where a.plcpointNo == b.Name && b.Station != "U型线"
select new { a, b };
foreach (var item in bill)
{ {
string? rfid = StaticData.PlcDic[0].ReadRFID(item.a.plcpointAddress); if (item.a.plcpointNo.Contains("RFID"))
if (!string.IsNullOrEmpty(rfid))
{ {
rfid = rfid[(rfid.IndexOf("JYHB") + 4)..]; string? rfid = StaticData.PlcDic[0].ReadRFID(item.a.plcpointAddress);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, rfid, item.b.type); if (!string.IsNullOrEmpty(rfid))
{
rfid = rfid[(rfid.IndexOf("JYHB") + 4)..];
StaticData.PlcDic[2].WriteToPoint(item.b.Address, rfid, item.b.type);
}
else
{
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
}
} }
else else
{ {
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type); var value = StaticData.PlcDic[0].Read(item.a.plcpointAddress);
} if (value != null && !string.IsNullOrEmpty(value.ToString()))
} {
else StaticData.PlcDic[2].WriteToPoint(item.b.Address, value.ToString(), item.b.type);
{ }
var value = StaticData.PlcDic[0].Read(item.a.plcpointAddress); else
if (value != null && !string.IsNullOrEmpty(value.ToString())) {
{ StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, value.ToString(), item.b.type); }
}
else
{
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
} }
} }
} }
catch
{
}
} }
} }

@ -1,7 +1,7 @@
{ {
"ConnectionStrings": { "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": "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=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=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"
// "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"
}, },
@ -43,7 +43,7 @@
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {
"Default": "Information", "Default": "Information",
"Microsoft": "Error", "Microsoft": "Information",
"Microsoft.Hosting.Lifetime": "Information" "Microsoft.Hosting.Lifetime": "Information"
} }
} }

Loading…
Cancel
Save