@ -1,4 +1,6 @@
using Khd.Core.Domain.Dto.webapi ;
using AngleSharp.Common ;
using Khd.Core.Domain.Dto.waring ;
using Khd.Core.Domain.Dto.webapi ;
using Khd.Core.Domain.Models ;
using Khd.Core.EntityFramework ;
using Khd.Core.Library ;
@ -74,9 +76,83 @@ namespace Khd.Core.Wcs.Wcs
// IsBackground = true
//};
//AgvAlarmThread.Start();
var locationThread = new Thread ( LocationLogic )
{
Name = "LocationThread" ,
IsBackground = true
} ;
locationThread . Start ( ) ;
Console . WriteLine ( $"{DateTime.Now}: SystemTimer started" ) ;
}
private void LocationLogic ( )
{
using var scope = host . Services . CreateScope ( ) ;
using var dbContext = scope . ServiceProvider . GetRequiredService < DefaultDbContext > ( ) ;
List < BasePlc > basePlcs = dbContext . BasePlc . Where ( t = > t . Station . Contains ( "库位" ) ) . ToList ( ) ;
var list = basePlcs . Select ( t = > new
{
t . Id ,
Station = t . Station . Replace ( "库位" , "" ) ,
t . Address ,
locRow = t . Name . Substring ( t . Name . IndexOf ( '[' ) + 1 , 1 ) ,
locColumn = t . Name . Substring ( t . Name . IndexOf ( ',' ) + 1 ) . Replace ( "]" , "" ) . Replace ( "五楼半成品[" , "" ) ,
} ) . Select ( t = > new
{
t . Id ,
t . Station ,
t . Address ,
t . locRow ,
locColumn = t . locColumn . Substring ( 0 , t . locColumn . IndexOf ( ',' ) = = - 1 ? t . locColumn . Length : t . locColumn . IndexOf ( ',' ) ) ,
layerNum = t . locColumn . IndexOf ( ',' ) = = - 1 ? "1" : t . locColumn . Substring ( t . locColumn . IndexOf ( ',' ) = = - 1 ? 0 : t . locColumn . IndexOf ( ',' ) + 1 )
} ) ;
while ( true )
{
try
{
var locations = dbContext . WmsBaseLocation . OrderBy ( t = > t . locRow ) . OrderBy ( t = > t . locColumn ) . ToList ( ) ;
foreach ( var item in list )
{
WmsBaseLocation ? wmsBaseLocation = locations . Where ( t = > t . locRow . ToString ( ) = = item . locRow )
. Where ( t = > t . locColumn . ToString ( ) = = item . locColumn )
. Where ( t = > t . layerNum . ToString ( ) = = item . layerNum )
. Where ( t = > t . warehouseId . ToString ( ) = = item . Station )
. FirstOrDefault ( ) ;
if ( wmsBaseLocation ! = null & & ! string . IsNullOrEmpty ( wmsBaseLocation . containerCode ) )
{
if ( wmsBaseLocation . warehouseId = = 512 )
{
if ( wmsBaseLocation . ContainerStatus = = "1" )
{
StaticData . PlcDic [ 2 ] . Write ( item . Address , true ) ;
}
else
{
StaticData . PlcDic [ 2 ] . Write ( item . Address , false ) ;
}
}
else
{
StaticData . PlcDic [ 2 ] . Write ( item . Address , true ) ;
}
}
else
{
StaticData . PlcDic [ 2 ] . Write ( item . Address , false ) ;
}
}
}
catch
{
}
Thread . Sleep ( 1000 * 60 * 5 ) ;
}
}
private void AgvAlarmLogic ( )
{
using var scope = host . Services . CreateScope ( ) ;
@ -288,6 +364,7 @@ namespace Khd.Core.Wcs.Wcs
using var dbContext = scope . ServiceProvider . GetRequiredService < DefaultDbContext > ( ) ;
BasePlcpoint HeartBeat30 = StaticData . BasePlcpointList . First ( t = > t . plcpointNo = = "putTray" ) ;
int errorCount = 0 ;
bool isOver = false ;
while ( true )
{
try
@ -296,45 +373,47 @@ namespace Khd.Core.Wcs.Wcs
{
_logger . Error ( $"Plc220短线重连失败超过{errorCount}次" ) ;
dbContext . ChangeTracker . Entries ( ) . ToList ( ) . ForEach ( e = > e . Reload ( ) ) ;
var dmsRecordAlarmTime = dbContext . DmsRecordAlarmTime . Where ( t = > t . CreateBy = = "WCS" & & t . DeviceId = = 15 ) . FirstOrDefault ( ) ;
if ( dmsRecordAlarmTime = = null )
{
var alarmTime = new DmsRecordAlarmTime
{
DeviceId = 15 ,
AlarmBeginTime = DateTime . Now ,
AlarmReason = "Plc220短线重连失败" ,
HandleSuggest = "检查Plc220网络连接" ,
AlarmRuleId = 4 ,
ContinueTime = 10000 ,
CreateBy = "WCS" ,
CreateTime = DateTime . Now ,
} ;
var dmsRecordAlarmInfo = CoreMapper . Map < DmsRecordAlarmInfo > ( alarmTime ) ;
dmsRecordAlarmInfo . AlarmStatus = "0" ;
dmsRecordAlarmInfo . NoticeStatus = "0" ;
dbContext . Add ( dmsRecordAlarmInfo ) ;
dbContext . SaveChanges ( ) ;
}
SystemData . InsertWaringLog ( dbContext , WaringType . 设 备 Plc 通 讯 异 常 , $"Plc220短线重连失败超过{errorCount}次" ) ;
//var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 15).FirstOrDefault();
//if (dmsRecordAlarmTime == null)
//{
// var alarmTime = new DmsRecordAlarmTime
// {
// DeviceId = 15,
// AlarmBeginTime = DateTime.Now,
// AlarmReason = "Plc220短线重连失败",
// HandleSuggest = "检查Plc220网络连接",
// AlarmRuleId = 4,
// ContinueTime = 10000,
// CreateBy = "WCS",
// CreateTime = DateTime.Now,
// };
// var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(alarmTime);
// dmsRecordAlarmInfo.AlarmStatus = "0";
// dmsRecordAlarmInfo.NoticeStatus = "0";
// dbContext.Add(dmsRecordAlarmInfo);
// dbContext.SaveChanges();
//}
}
StaticData . PlcDic [ 2 ] . Read ( HeartBeat30 . plcpointAddress ) ;
if ( errorCount > 0 )
if ( errorCount > 0 & & isOver )
{
dbContext . ChangeTracker . Entries ( ) . ToList ( ) . ForEach ( e = > e . Reload ( ) ) ;
var dmsRecordAlarmTime = dbContext . DmsRecordAlarmTime . Where ( t = > t . CreateBy = = "WCS" & & t . DeviceId = = 15 ) . FirstOrDefault ( ) ;
if ( dmsRecordAlarmTime ! = null )
{
dbContext . DmsRecordAlarmTime . Remove ( dmsRecordAlarmTime ) ;
dbContext . DmsRecordAlarmInfo . Where ( t = > t . AlarmId = = dmsRecordAlarmTime . AlarmId ) . Update ( t = > new DmsRecordAlarmInfo
{
AlarmEndTime = DateTime . Now ,
AlarmStatus = "1" ,
UpdateBy = "WCS" ,
UpdateTime = DateTime . Now
} ) ;
dbContext . SaveChanges ( ) ;
errorCount = 0 ;
}
SystemData . DeleteWaringLog ( dbContext , WaringType . 设 备 Plc 通 讯 异 常 ) ;
//var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 15).FirstOrDefault();
//if (dmsRecordAlarmTime != null)
//{
// dbContext.DmsRecordAlarmTime.Remove(dmsRecordAlarmTime);
// dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId).Update(t => new DmsRecordAlarmInfo
// {
// AlarmEndTime = DateTime.Now,
// AlarmStatus = "1",
// UpdateBy = "WCS",
// UpdateTime = DateTime.Now
// });
// dbContext.SaveChanges();
// errorCount = 0;
//}
}
}
catch
@ -343,10 +422,12 @@ namespace Khd.Core.Wcs.Wcs
{
StaticData . PlcDic [ 2 ] = new Plc . S7 . Plc ( StaticData . PlcDic [ 2 ] . CPU , StaticData . PlcDic [ 2 ] . IP , StaticData . PlcDic [ 2 ] . Port , StaticData . PlcDic [ 2 ] . Rack , StaticData . PlcDic [ 2 ] . Slot ) ;
StaticData . PlcDic [ 2 ] . Open ( ) ;
isOver = true ;
}
catch ( Exception ex2 )
{
errorCount + + ;
isOver = false ;
_logger . Error ( "Plc短线重连失败" + ex2 . Message ) ;
}
}
@ -363,6 +444,7 @@ namespace Khd.Core.Wcs.Wcs
using var dbContext = scope . ServiceProvider . GetRequiredService < DefaultDbContext > ( ) ;
BasePlcpoint HeartBeat30 = StaticData . BasePlcpointList . First ( t = > t . plcpointNo = = "HeartBeat30" ) ;
bool heartBeatCount = false ;
bool isOver = false ;
int errorCount = 0 ;
while ( true )
{
@ -372,47 +454,49 @@ namespace Khd.Core.Wcs.Wcs
{
_logger . Error ( $"Plc30短线重连失败超过{errorCount}次" ) ;
dbContext . ChangeTracker . Entries ( ) . ToList ( ) . ForEach ( e = > e . Reload ( ) ) ;
var dmsRecordAlarmTime = dbContext . DmsRecordAlarmTime . Where ( t = > t . CreateBy = = "WCS" & & t . DeviceId = = 13 ) . FirstOrDefault ( ) ;
if ( dmsRecordAlarmTime = = null )
{
var alarmTime = new DmsRecordAlarmTime
{
DeviceId = 13 ,
AlarmBeginTime = DateTime . Now ,
AlarmReason = "Plc30短线重连失败" ,
HandleSuggest = "检查Plc30网络连接" ,
AlarmRuleId = 4 ,
ContinueTime = 10000 ,
CreateBy = "WCS" ,
CreateTime = DateTime . Now ,
} ;
var dmsRecordAlarmInfo = CoreMapper . Map < DmsRecordAlarmInfo > ( alarmTime ) ;
dmsRecordAlarmInfo . AlarmStatus = "0" ;
dmsRecordAlarmInfo . NoticeStatus = "0" ;
dbContext . Add ( dmsRecordAlarmTime ) ;
dbContext . Add ( dmsRecordAlarmInfo ) ;
dbContext . SaveChanges ( ) ;
}
SystemData . InsertWaringLog ( dbContext , WaringType . 提 升 机 Plc 通 讯 异 常 , $"Plc30短线重连失败超过{errorCount}次" ) ;
//var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 13).FirstOrDefault();
//if (dmsRecordAlarmTime == null)
//{
// var alarmTime = new DmsRecordAlarmTime
// {
// DeviceId = 13,
// AlarmBeginTime = DateTime.Now,
// AlarmReason = "Plc30短线重连失败",
// HandleSuggest = "检查Plc30网络连接",
// AlarmRuleId = 4,
// ContinueTime = 10000,
// CreateBy = "WCS",
// CreateTime = DateTime.Now,
// };
// var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(alarmTime);
// dmsRecordAlarmInfo.AlarmStatus = "0";
// dmsRecordAlarmInfo.NoticeStatus = "0";
// dbContext.Add(dmsRecordAlarmTime);
// dbContext.Add(dmsRecordAlarmInfo);
// dbContext.SaveChanges();
//}
}
heartBeatCount = ! heartBeatCount ;
StaticData . PlcDic [ 0 ] . WriteToPoint ( HeartBeat30 . plcpointAddress , heartBeatCount , HeartBeat30 . plcpointLength ? . ToString ( ) ) ;
if ( errorCount > 0 )
if ( errorCount > 0 & & isOver )
{
dbContext . ChangeTracker . Entries ( ) . ToList ( ) . ForEach ( e = > e . Reload ( ) ) ;
var dmsRecordAlarmTime = dbContext . DmsRecordAlarmTime . Where ( t = > t . CreateBy = = "WCS" & & t . DeviceId = = 13 ) . FirstOrDefault ( ) ;
if ( dmsRecordAlarmTime ! = null )
{
dbContext . DmsRecordAlarmTime . Remove ( dmsRecordAlarmTime ) ;
dbContext . DmsRecordAlarmInfo . Where ( t = > t . AlarmId = = dmsRecordAlarmTime . AlarmId ) . Update ( t = > new DmsRecordAlarmInfo
{
AlarmEndTime = DateTime . Now ,
AlarmStatus = "1" ,
UpdateBy = "WCS" ,
UpdateTime = DateTime . Now
} ) ;
dbContext . SaveChanges ( ) ;
errorCount = 0 ;
}
SystemData . DeleteWaringLog ( dbContext , WaringType . 提 升 机 Plc 通 讯 异 常 ) ;
//var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 13).FirstOrDefault();
//if (dmsRecordAlarmTime != null)
//{
// dbContext.DmsRecordAlarmTime.Remove(dmsRecordAlarmTime);
// dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId).Update(t => new DmsRecordAlarmInfo
// {
// AlarmEndTime = DateTime.Now,
// AlarmStatus = "1",
// UpdateBy = "WCS",
// UpdateTime = DateTime.Now
// });
// dbContext.SaveChanges();
// errorCount = 0;
//}
}
}
catch
@ -421,10 +505,12 @@ namespace Khd.Core.Wcs.Wcs
{
StaticData . PlcDic [ 0 ] = new Plc . S7 . Plc ( StaticData . PlcDic [ 0 ] . CPU , StaticData . PlcDic [ 0 ] . IP , StaticData . PlcDic [ 0 ] . Port , StaticData . PlcDic [ 0 ] . Rack , StaticData . PlcDic [ 0 ] . Slot ) ;
StaticData . PlcDic [ 0 ] . Open ( ) ;
isOver = true ;
}
catch ( Exception ex2 )
{
errorCount + + ;
isOver = false ;
_logger . Error ( "Plc短线重连失败" + ex2 . Message ) ;
}
}
@ -441,6 +527,7 @@ namespace Khd.Core.Wcs.Wcs
using var dbContext = scope . ServiceProvider . GetRequiredService < DefaultDbContext > ( ) ;
BasePlcpoint HeartBeat31 = StaticData . BasePlcpointList . First ( t = > t . plcpointNo = = "CTUHeart" ) ;
bool heartBeatCount = false ;
bool isOver = false ;
int errorCount = 0 ;
while ( true )
{
@ -450,46 +537,48 @@ namespace Khd.Core.Wcs.Wcs
{
_logger . Error ( $"Plc31短线重连失败超过{errorCount}次" ) ;
dbContext . ChangeTracker . Entries ( ) . ToList ( ) . ForEach ( e = > e . Reload ( ) ) ;
var dmsRecordAlarmTime = dbContext . DmsRecordAlarmTime . Where ( t = > t . CreateBy = = "WCS" & & t . DeviceId = = 14 ) . FirstOrDefault ( ) ;
if ( dmsRecordAlarmTime = = null )
{
var alarmTime = new DmsRecordAlarmTime
{
DeviceId = 14 ,
AlarmBeginTime = DateTime . Now ,
AlarmReason = "Plc31短线重连失败" ,
HandleSuggest = "检查Plc31网络连接" ,
AlarmRuleId = 4 ,
ContinueTime = 10000 ,
CreateBy = "WCS" ,
CreateTime = DateTime . Now ,
} ;
var dmsRecordAlarmInfo = CoreMapper . Map < DmsRecordAlarmInfo > ( alarmTime ) ;
dmsRecordAlarmInfo . AlarmStatus = "0" ;
dmsRecordAlarmInfo . NoticeStatus = "0" ;
dbContext . Add ( dmsRecordAlarmInfo ) ;
dbContext . SaveChanges ( ) ;
}
SystemData . InsertWaringLog ( dbContext , WaringType . U 型 线 Plc 通 讯 异 常 , $"Plc31短线重连失败超过{errorCount}次" ) ;
//var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 14).FirstOrDefault();
//if (dmsRecordAlarmTime == null)
//{
// var alarmTime = new DmsRecordAlarmTime
// {
// DeviceId = 14,
// AlarmBeginTime = DateTime.Now,
// AlarmReason = "Plc31短线重连失败",
// HandleSuggest = "检查Plc31网络连接",
// AlarmRuleId = 4,
// ContinueTime = 10000,
// CreateBy = "WCS",
// CreateTime = DateTime.Now,
// };
// var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(alarmTime);
// dmsRecordAlarmInfo.AlarmStatus = "0";
// dmsRecordAlarmInfo.NoticeStatus = "0";
// dbContext.Add(dmsRecordAlarmInfo);
// dbContext.SaveChanges();
//}
}
heartBeatCount = ! heartBeatCount ;
StaticData . PlcDic [ 1 ] . WriteToPoint ( HeartBeat31 . plcpointAddress , heartBeatCount , HeartBeat31 . plcpointLength ? . ToString ( ) ) ;
if ( errorCount > 0 )
if ( errorCount > 0 & & isOver )
{
dbContext . ChangeTracker . Entries ( ) . ToList ( ) . ForEach ( e = > e . Reload ( ) ) ;
var dmsRecordAlarmTime = dbContext . DmsRecordAlarmTime . Where ( t = > t . CreateBy = = "WCS" & & t . DeviceId = = 14 ) . FirstOrDefault ( ) ;
if ( dmsRecordAlarmTime ! = null )
{
dbContext . DmsRecordAlarmTime . Remove ( dmsRecordAlarmTime ) ;
dbContext . DmsRecordAlarmInfo . Where ( t = > t . AlarmId = = dmsRecordAlarmTime . AlarmId ) . Update ( t = > new DmsRecordAlarmInfo
{
AlarmEndTime = DateTime . Now ,
AlarmStatus = "1" ,
UpdateBy = "WCS" ,
UpdateTime = DateTime . Now
} ) ;
dbContext . SaveChanges ( ) ;
errorCount = 0 ;
}
SystemData . DeleteWaringLog ( dbContext , WaringType . U 型 线 Plc 通 讯 异 常 ) ;
//var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 14).FirstOrDefault();
//if (dmsRecordAlarmTime != null)
//{
// dbContext.DmsRecordAlarmTime.Remove(dmsRecordAlarmTime);
// dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId).Update(t => new DmsRecordAlarmInfo
// {
// AlarmEndTime = DateTime.Now,
// AlarmStatus = "1",
// UpdateBy = "WCS",
// UpdateTime = DateTime.Now
// });
// dbContext.SaveChanges();
// errorCount = 0;
//}
}
}
catch ( Exception ex )
@ -500,10 +589,12 @@ namespace Khd.Core.Wcs.Wcs
{
StaticData . PlcDic [ 1 ] = new Plc . S7 . Plc ( StaticData . PlcDic [ 1 ] . CPU , StaticData . PlcDic [ 1 ] . IP , StaticData . PlcDic [ 1 ] . Port , StaticData . PlcDic [ 1 ] . Rack , StaticData . PlcDic [ 1 ] . Slot ) ;
StaticData . PlcDic [ 1 ] . Open ( ) ;
isOver = true ;
}
catch ( Exception ex2 )
{
errorCount + + ;
isOver = false ;
_logger . Error ( "Plc短线重连失败" + ex2 . Message ) ;
}
}
@ -710,7 +801,7 @@ namespace Khd.Core.Wcs.Wcs
/// <summary>
/// 定时更新三楼AGV信息
/// </summary>
p rivate void ThirdAgvLogic ( )
p ublic void ThirdAgvLogic ( )
{
try
{
@ -741,21 +832,20 @@ namespace Khd.Core.Wcs.Wcs
#region 经过走廊区域报警
var Agv3FLED = StaticData . BasePlcpointList . First ( t = > t . id = = 76 ) ;
if ( Agv3FLED ! = null )
if ( Agv3FLED ! = null )
{
if ( int . Parse ( cardStatus . PosX ) > = 53040 & & int . Parse ( cardStatus . PosX ) < = 58090 & & ( int . Parse ( cardStatus . PosY ) > = 53520 & & int . Parse ( cardStatus . PosY ) < = 64590 ) )
{
// Console.WriteLine("=======>3F走廊区域预警");
// Console.WriteLine("=======>3F走廊区域预警");
StaticData . PlcDic [ 0 ] . WriteToPoint ( Agv3FLED . plcpointAddress , true , Agv3FLED . plcpointLength . ToString ( ) ) ;
}
else
{
// Console.WriteLine("3F走廊区域正常");
// Console.WriteLine("3F走廊区域正常");
StaticData . PlcDic [ 0 ] . WriteToPoint ( Agv3FLED . plcpointAddress , false , Agv3FLED . plcpointLength . ToString ( ) ) ;
}
}
# endregion
}
}
@ -813,7 +903,7 @@ namespace Khd.Core.Wcs.Wcs
StaticData . PlcDic [ 0 ] . WriteToPoint ( Agv2FLED . plcpointAddress , false , Agv2FLED . plcpointLength . ToString ( ) ) ;
}
}
# endregion
}