@ -3,6 +3,7 @@ using Khd.Core.Application.Interface;
using Khd.Core.Domain.Models ;
using Khd.Core.EntityFramework ;
using Khd.Core.Plc ;
using Khd.Core.Plc.S7 ;
using Khd.Core.Wcs.Global ;
using Masuit.Tools.Logging ;
using Microsoft.Extensions.DependencyInjection ;
@ -17,9 +18,9 @@ namespace Khd.Core.Wcs.Wcs
public class FirstFloor
{
private readonly IHost _host ;
private readonly Plc . S7 . Plc _plc ;
private long F01 = 1 ;
private long T01 = 6 ;
private Plc . S7 . Plc _plc ;
private readonly long F01 = 1 ;
private readonly long T01 = 6 ;
/// <summary>
/// 一楼RFID 读
/// </summary>
@ -29,10 +30,6 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
private readonly BasePlcpoint linesignal01 ;
/// <summary>
/// 去向 写
/// </summary>
private readonly BasePlcpoint wcsrun01 ;
/// <summary>
/// 提升机流水号 读
/// </summary>
private readonly BasePlcpoint serialno06 ;
@ -67,9 +64,6 @@ namespace Khd.Core.Wcs.Wcs
this . RFID001 = StaticData . BasePlcpointList . First ( t = > t . equipmentNo . Contains ( "FirstFloorLine" ) & & t . plcpointNo . Contains ( "RFID001" ) ) ;
//到位信号 读
this . linesignal01 = StaticData . BasePlcpointList . First ( t = > t . equipmentNo . Contains ( "FirstFloorLine" ) & & t . plcpointNo . Contains ( "linesignal01" ) ) ;
//去向 写
this . wcsrun01 = StaticData . BasePlcpointList . First ( t = > t . equipmentNo . Contains ( "FirstFloorLine" ) & & t . plcpointNo . Contains ( "wcsrun01" ) ) ;
//一楼提升机流水号 读
this . serialno06 = StaticData . BasePlcpointList . First ( t = > t . equipmentNo . Contains ( "Hoister" ) & & t . plcpointNo . Contains ( "serialno06" ) ) ;
@ -91,14 +85,18 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
public void StartPoint ( )
{
Thread firstFloorLine = new Thread ( FirstFloorLine ) ;
firstFloorLine . IsBackground = true ;
Thread firstFloorLine = new ( FirstFloorLine )
{
IsBackground = true
} ;
firstFloorLine . Start ( ) ;
Console . WriteLine ( DateTime . Now + ":一楼接驳位线程启动成功" ) ;
LogManager . Info ( "一楼接驳位线程启动成功" ) ;
Thread firstFloorHoister = new Thread ( FirstFloorHoister ) ;
firstFloorHoister . IsBackground = true ;
Thread firstFloorHoister = new ( FirstFloorHoister )
{
IsBackground = true
} ;
firstFloorHoister . Start ( ) ;
Console . WriteLine ( DateTime . Now + ":一楼提升机线程启动成功" ) ;
LogManager . Info ( "一楼提升机线程启动成功" ) ;
@ -116,9 +114,8 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
var RFID001Value = this . _plc . Read ( this . RFID001 . plcpointAddress ) ; //一楼RFID 读
var RFID001Value = this . _plc . Read RFID ( this . RFID001 . plcpointAddress ) ; //一楼RFID 读
var linesignal01Value = this . _plc . Read ( this . linesignal01 . plcpointAddress ) ; //到位信号 读
var wcsrun01Value = this . _plc . Read ( this . wcsrun01 . plcpointAddress ) ; //去向 写
//正常读到plc值
if ( linesignal01Value ! = null & & RFID001Value ! = null )
@ -126,15 +123,14 @@ namespace Khd.Core.Wcs.Wcs
//正常托盘到位
if ( Convert . ToInt32 ( linesignal01Value ) = = 1 )
{
//判断task表里没有该rfid的未完成的入库信息, 未下发去向
var task = dbContext . WcsTask . Where ( t = > t . containerNo = = RFID001Value . ToString ( ) & & t . taskStatus < 1 ) . FirstOrDefault ( ) ;
var task = dbContext . WcsTask . Where ( t = > t . containerNo = = RFID001Value & & t . taskStatus < 1 ) . FirstOrDefault ( ) ;
if ( task = = null )
{
//入库
//根据托盘号获取物料码
var material = dbContext . MesBasePalletInfo . Where ( t = > t . palletInfoCode = = RFID001Value .ToString ( ) ). FirstOrDefault ( ) ;
var material = dbContext . MesBasePalletInfo . Where ( t = > t . palletInfoCode = = RFID001Value ). FirstOrDefault ( ) ;
if ( material ! = null )
{
var warehouseId = dbContext . WmsWarehouseMaterial . Where ( t = > t . storageType = = "1" & & t . storageId = = material . materialId ) . FirstOrDefault ( ) ? . warehouseId ;
@ -151,11 +147,11 @@ namespace Khd.Core.Wcs.Wcs
var newTask = new WcsTask ( )
{
objid = StaticData . SnowId . NextId ( ) ,
serialNo = 1235 ,
serialNo = SystemData . GetSerialNo ( dbContext ) ,
equipmentNo = "F01" ,
taskType = Convert . ToInt32 ( dic . dicValue ) ,
taskStatus = 0 ,
containerNo = RFID001Value .ToString ( ) ,
containerNo = RFID001Value ,
materialNo = material . materialCode ,
materialId = material . materialId ,
qty = Convert . ToInt32 ( material . bindAmount ) ,
@ -179,35 +175,58 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if ( Itpyes . Contains ( task . taskType ) )
else if ( Itpyes . Contains ( task . taskType ) ) //按照正常任务下发
{
task . currPointId = F01 ;
task . currPointNo = "F01" ;
task . nextPointId = T01 ;
task . nextPointNo = "T01" ;
task . taskStatus = 0 ;
task . updateBy = "一楼接驳位线程" ;
task . updateTime = DateTime . Now ;
task . remark = "一楼创建入库任务" ;
dbContext . WcsTask . Update ( task ) ;
dbContext . SaveChanges ( ) ;
if ( task . nextPointId ! = T01 )
{
task . currPointId = F01 ;
task . currPointNo = "F01" ;
task . nextPointId = T01 ;
task . nextPointNo = "T01" ;
task . taskStatus = 0 ;
task . updateBy = "一楼接驳位线程" ;
task . updateTime = DateTime . Now ;
task . remark = "一楼创建入库任务" ;
dbContext . WcsTask . Update ( task ) ;
dbContext . SaveChanges ( ) ;
}
}
//出库
else
{
//清空托盘绑定
//var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).FirstOrDefault();
//if (material != null)
//{
// dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).Delete();
// dbContext.SaveChanges();
//}
var material = dbContext . MesBasePalletInfo . Where ( t = > t . palletInfoCode = = RFID001Value ) . FirstOrDefault ( ) ;
if ( material ! = null )
{
material . bindAmount = 0 ;
material . materialBarcode = null ;
material . materialCode = null ;
material . materialId = null ;
material . materialName = null ;
material . updateBy = "SYS" ;
material . updateTime = DateTime . Now ;
dbContext . Update ( material ) ;
//dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).Delete();
dbContext . SaveChanges ( ) ;
}
}
}
}
}
catch ( Exception ex )
{
if ( ex is PlcException )
{
try
{
this . _plc = new Plc . S7 . Plc ( this . _plc . CPU , this . _plc . IP , this . _plc . Port , this . _plc . Rack , this . _plc . Slot ) ;
this . _plc . Open ( ) ;
}
catch
{
}
}
LogManager . Error ( ex ) ;
}
Thread . Sleep ( 1000 ) ;
@ -228,7 +247,7 @@ namespace Khd.Core.Wcs.Wcs
var serialno06Value = this . _plc . Read ( this . serialno06 . plcpointAddress ) ; //提升机流水号 读
var equipstate06Value = this . _plc . Read ( this . equipstate06 . plcpointAddress ) ; //提升机状态 读
var hoisterTrayIn06Value = this . _plc . Read ( this . hoistertrayin06 . plcpointAddress ) ; //提升机货物到位状态 读
var currentfloor06Value = this . _plc . Read ( this . currentfloor06 . plcpointAddress ) ; //提升机当前楼层 写
var currentfloor06Value = this . _plc . Read ( this . currentfloor06 . plcpointAddress ) ; //提升机当前楼层 读
var targetfloor06Value = this . _plc . Read ( this . targetfloor06 . plcpointAddress ) ; //提升机目的楼层 写
var reserialno06 = this . _plc . Read ( this . reserialno06 . plcpointAddress ) ; //反馈流水号
@ -241,7 +260,7 @@ namespace Khd.Core.Wcs.Wcs
var wcsTask = dbContext . WcsTask . Where ( t = > t . nextPointId = = T01 ) . OrderBy ( t = > t . createTime ) . FirstOrDefault ( ) ;
if ( wcsTask ! = null )
{
if ( wcsTask . taskStatus = = 0 ) //创建
if ( wcsTask . taskStatus = = 0 & & Convert . ToInt32 ( hoisterTrayIn06Value ) = = 0 ) //创建 状态,并且里面没有货物
{
if ( Convert . ToInt32 ( currentfloor06Value ) = = wcsTask . fromFloorNo )
{
@ -250,7 +269,8 @@ namespace Khd.Core.Wcs.Wcs
wcsTask . updateTime = DateTime . Now ;
wcsTask . remark = "提升机任务执行中" ;
BasePlcpoint basePlcpoint = StaticData . BasePlcpointList . First ( t = > t . floorNo = = wcsTask . fromFloorNo & & t . plcpointNo . Contains ( "wcsrun" ) ) ;
this . _plc . WriteToPoint ( basePlcpoint . plcpointAddress , "1" , basePlcpoint . plcpointLength ) ;
this . _plc . WriteToPoint ( basePlcpoint . plcpointAddress , "1" , basePlcpoint . plcpointLength . ToString ( ) ) ;
this . _plc . WriteToPoint ( this . serialno06 . plcpointAddress , wcsTask . serialNo . ToString ( ) , this . serialno06 . plcpointLength . ToString ( ) ) ;
dbContext . Update ( wcsTask ) ;
dbContext . SaveChanges ( ) ;
}
@ -260,12 +280,13 @@ namespace Khd.Core.Wcs.Wcs
wcsTask . updateBy = "提升机线程" ;
wcsTask . updateTime = DateTime . Now ;
wcsTask . remark = "提升机任务执行中" ;
this . _plc . WriteToPoint ( this . targetfloor06 . plcpointAddress , wcsTask . fromFloorNo . ToString ( ) , this . targetfloor06 . plcpointLength ) ; //目的地楼层
this . _plc . WriteToPoint ( this . targetfloor06 . plcpointAddress , wcsTask . fromFloorNo . ToString ( ) , this . targetfloor06 . plcpointLength . ToString ( ) ) ; //目的地楼层
this . _plc . WriteToPoint ( this . serialno06 . plcpointAddress , wcsTask . serialNo . ToString ( ) , this . serialno06 . plcpointLength . ToString ( ) ) ;
dbContext . Update ( wcsTask ) ;
dbContext . SaveChanges ( ) ;
}
}
if ( wcsTask . taskStatus = = 1 )
if ( wcsTask . taskStatus = = 1 & & Convert . ToInt32 ( reserialno06 ) = = wcsTask . serialNo )
{
if ( Convert . ToInt32 ( currentfloor06Value ) = = wcsTask . fromFloorNo ) //提升机当前楼层为初始地楼层
{
@ -274,12 +295,12 @@ namespace Khd.Core.Wcs.Wcs
wcsTask . updateTime = DateTime . Now ;
wcsTask . remark = "提升机任务执行中" ;
BasePlcpoint basePlcpoint = StaticData . BasePlcpointList . First ( t = > t . floorNo = = wcsTask . fromFloorNo & & t . plcpointNo . Contains ( "wcsrun" ) ) ;
this . _plc . WriteToPoint ( basePlcpoint . plcpointAddress , "1" , basePlcpoint . plcpointLength );
this . _plc . WriteToPoint ( basePlcpoint . plcpointAddress , "1" , basePlcpoint . plcpointLength .ToString ( ) );
dbContext . Update ( wcsTask ) ;
dbContext . SaveChanges ( ) ;
}
}
if ( wcsTask . taskStatus = = 2 )
if ( wcsTask . taskStatus = = 2 & & Convert . ToInt32 ( reserialno06 ) = = wcsTask . serialNo )
{
if ( Convert . ToInt32 ( hoisterTrayIn06Value ) = = 1 ) //托盘已经进提升机
{
@ -287,19 +308,19 @@ namespace Khd.Core.Wcs.Wcs
wcsTask . updateBy = "提升机线程" ;
wcsTask . updateTime = DateTime . Now ;
wcsTask . remark = "提升机任务执行完成" ;
this . _plc . WriteToPoint ( this . targetfloor06 . plcpointAddress , wcsTask . floorNo . ToString ( ) , this . targetfloor06 . plcpointLength ) ; //目的地楼层
this . _plc . WriteToPoint ( this . targetfloor06 . plcpointAddress , wcsTask . floorNo . ToString ( ) , this . targetfloor06 . plcpointLength . ToString ( ) ) ; //目的地楼层
dbContext . Update ( wcsTask ) ;
dbContext . SaveChanges ( ) ;
}
}
if ( wcsTask . taskStatus = = 3 & & Convert . ToInt32 ( currentfloor06Value ) = = wcsTask . floorNo ) //任务状态为3, 且当前楼层为任务的目的楼层
if ( wcsTask . taskStatus = = 3 & & Convert . ToInt32 ( currentfloor06Value ) = = wcsTask . floorNo & & Convert . ToInt32 ( reserialno06 ) = = wcsTask . serialNo ) //任务状态为3, 且当前楼层为任务的目的楼层
{
wcsTask . taskStatus = 4 ;
wcsTask . updateBy = "提升机线程" ;
wcsTask . updateTime = DateTime . Now ;
wcsTask . remark = "提升机任务执行完成" ;
BasePlcpoint basePlcpoint = StaticData . BasePlcpointList . First ( t = > t . floorNo = = wcsTask . fromFloorNo & & t . plcpointNo . Contains ( "wcsrun" ) ) ;
this . _plc . WriteToPoint ( basePlcpoint . plcpointAddress , "2" , basePlcpoint . plcpointLength ); //去向为2, 表示提升机已到达目的地, 让货出去
this . _plc . WriteToPoint ( basePlcpoint . plcpointAddress , "2" , basePlcpoint . plcpointLength .ToString ( ) ); //去向为2, 表示提升机已到达目的地, 让货出去
dbContext . Update ( wcsTask ) ;
dbContext . SaveChanges ( ) ;
}
@ -309,6 +330,18 @@ namespace Khd.Core.Wcs.Wcs
}
catch ( Exception ex )
{
if ( ex is PlcException )
{
try
{
this . _plc = new Plc . S7 . Plc ( this . _plc . CPU , this . _plc . IP , this . _plc . Port , this . _plc . Rack , this . _plc . Slot ) ;
this . _plc . Open ( ) ;
}
catch
{
}
}
LogManager . Error ( ex ) ;
}
Thread . Sleep ( 1000 ) ;