using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs { /// /// 二楼码垛输送线调度 /// public class SecondFloorPoint { List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private readonly Plc.S7.Plc _plc; int FloorNo { get; set; } string EquipNo = ""; public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo) { this._host = host; this._plc = plc; FloorNo = floor; EquipNo = equipNo; //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(); var rfidPoint = StaticData.BasePlcpointList.First(t => t.id == 52); var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53); var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54); while (true) { try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); var agvGetValue = this._plc.Read(agvGetPoint.plcpointAddress); var agvPutValue = this._plc.Read(agvPutPoint.plcpointAddress); var rfidValue = this._plc.ReadRFID(rfidPoint.plcpointAddress); if (agvGetValue != null && agvPutValue != null && rfidValue != null) { if(Convert.ToBoolean(agvPutValue)) { } if (Convert.ToBoolean(agvGetValue) && !string.IsNullOrEmpty(rfidValue)) { } } } catch (Exception ex) { LogManager.Error(ex); } finally { Thread.Sleep(1000); } } } } }