using CentralControl.BaseData; using CommonFunc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using CentralControl.DBDAO; using XGL.Thrift; namespace CentralControl.App_Code { /// /// 入库暂存区逻辑 /// public class Logic2008MiddleLocator { /// /// plc 正在读取 /// bool IsPlcRead { get; set; } Thread InputMaterialThread; PlcHelper plcHelper; string LineNo { get; set; } NodeSetting ScanPoint { get; set; } /// /// 是否运行发车中 /// bool IsRuning { get; set; } //NodeSetting OutLocatorPoint { get; set; } /// /// 1号上件点 空车信号 /// NodeSetting otherLocatorPoint1 { get; set; } /// /// 2号上件点 空车信号 /// NodeSetting otherLocatorPoint2 { get; set; } public Logic2008MiddleLocator(PlcHelper plc, string nodeno) { try { this.ScanPoint = StaticData.NodeSettingList.FirstOrDefault(t => t.NodeNo == nodeno); if (this.ScanPoint != null) { this.LineNo = this.ScanPoint.LineCatchArea != null ? this.ScanPoint.LineCatchArea.LineNo : "1"; } else { Logger logger = new Logger(); logger.Log("创建线体,未找到扫描点位"); } this.LineNo = LineNo; this.plcHelper = plc; ///回写plc状态处理完成,plc会清理数据 object wcsend = this.plcHelper.Read(ScanPoint.PlcSetting5); //if (Convert.ToInt32(wcsend) == 1) //{ //默认启动,清理plc的上位机写入点位值 this.plcHelper.Write(this.ScanPoint.PlcSetting4, 0); this.plcHelper.Write(this.ScanPoint.PlcSetting5, 0); // } } catch (Exception ex) { Console.WriteLine("站点" + nodeno + " 初始化数据异常" + ex.Message); Logger logger = new Logger(); logger.Error("站点" + nodeno + " 初始化数据异常" + ex.Message); } } /// /// 启动上件扫描监听 /// public void StartPoint() { InputMaterialThread = new Thread(MonitorInLocatorPoint); InputMaterialThread.Start(); } /// /// 前端点击放行,放行小车队列 /// /// /// public void MonitorInLocatorPoint() { Logger logger = new Logger(); while (true) { try { ///读取小车号 object carobj = this.plcHelper.Read(this.ScanPoint.PlcSetting1); string carno = Common.getCarNoByPlcPoint(carobj); //小车是否到位 object carstate = this.plcHelper.Read(this.ScanPoint.PlcSetting2); //小车是否离开 object carrun = this.plcHelper.Read(this.ScanPoint.PlcSetting3); ///上位机写入岔道信息 object wcsstate = this.plcHelper.Read(this.ScanPoint.PlcSetting4); ///回写plc状态处理完成,plc会清理数据 object wcsend = this.plcHelper.Read(this.ScanPoint.PlcSetting5); if (carno != null && carstate != null && carrun != null && wcsstate != null && wcsend != null) { if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(wcsend) == 0 && Convert.ToInt32(wcsstate) == 0 && Convert.ToInt32(carstate) == 1 && Convert.ToInt32(carrun) == 0 && IsPlcRead == false) { CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault(); ///入库 进2009 ,其他情况再说 int locatorNO = 2009; /**测试数据**/ //car.LocatorArea = new LineCatchArea(); //car.LocatorArea.AreaNo = "1"; DBService.AddSystemLog(this.ScanPoint.NodeNo, car); ///回写plc状态,起点的分支线路为1 this.plcHelper.Write(this.ScanPoint.PlcSetting4, locatorNO); this.plcHelper.Write(this.ScanPoint.PlcSetting5, 1); logger.Log("node:" + this.ScanPoint.NodeNo + " plc:" + this.ScanPoint.PlcSetting4.PlcNo + " mu:" + locatorNO); ///回写plc状态处理完成,plc会清理数据 DBService.AddSystemLog(this.ScanPoint.NodeNo, car); }//小车移动中指定点位后,并且到位了 else if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(carrun) == 1 && Convert.ToInt32(wcsend) == 1) { logger.Log(" 小车离开了 [" + this.LineNo + "]号上件点"); ///回写plc状态,,plc会清理数据 this.plcHelper.Write(this.ScanPoint.PlcSetting4, 0); ///回写plc状态处理完成,plc会清理数据 this.plcHelper.Write(this.ScanPoint.PlcSetting5, 0); } } } catch (Exception ex) { logger.Error("Logic1002UpLocator异常: " + this.ScanPoint.NodeNo + " :" + ex.Message + ex.StackTrace); } Thread.Sleep(300); } } } }