using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library.Mapper; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs { /// /// 二楼接驳位调度 /// public class SecondFloorLine { List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private 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; } string EquipNo = ""; int EquipID = 2; public SecondFloorLine(IHost host, Plc.S7.Plc plc, int floor, string equipNo) { this._host = host; this._plc = plc; 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 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); } } /// /// 启动上件扫描监听 /// public void StartPoint() { Thread FlowPointThread = new Thread(MonitorInLocatorPoint); FlowPointThread.Start(); Console.WriteLine(DateTime.Now + ":二楼接驳位扫描线程启动"); LogManager.Info("二楼接驳位扫描线程启动"); } public void MonitorInLocatorPoint() { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36); BaseEquip outEquip = StaticData.BaseEquip.First(t=>t.objid==37); BaseEquip lineEquip = StaticData.BaseEquip.First(t=>t.objid==2); BaseEquip agvEquip = StaticData.BaseEquip.First(t=>t.objid==8); while (true) { try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); //入库任务 var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress); var isSignal = this._plc.Read(LineSignal.plcpointAddress); if (rfid != null && isSignal != null) { //正常读到输送线信息 有到位信号,并且有托盘,获取条码信息 if (Convert.ToInt32(isSignal) == 1) { //获取条码信息 var palletNo = Convert.ToString(rfid); BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == FloorNo); var wcsTask = dbContext.WcsTask.OrderBy(t => t.createTime) .FirstOrDefault(t => t.containerNo == palletNo && t.nextPointId == baseEquip.objid); if (wcsTask != null) { if (wcsTask.taskStatus == 5)//入库,提升机任务是完成状态 { dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Delete(); WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); newTask.nextPointId=agvEquip.objid; newTask.nextPointNo=agvEquip.equipNo; newTask.createTime = DateTime.Now; newTask.updateTime = DateTime.Now; newTask.endPointId=inEquip.objid; newTask.endPointNo=inEquip.equipNo; newTask.containerNo=palletNo; newTask.currPointId=lineEquip.objid; newTask.currPointNo=lineEquip.equipNo; newTask.taskType=2; newTask.useFlag=1; dbContext.WcsTask.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); } } } } } catch (Exception ex) { 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); } finally { Thread.Sleep(1000); } } } } }