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 Logic2006_2005UpLocator { /// /// 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 Logic2006_2005UpLocator(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(); int locatorNO = 0; /**测试数据**/ //car.LocatorArea = new LineCatchArea(); //car.LocatorArea.AreaNo = "1"; DBService.AddSystemLog(this.ScanPoint.NodeNo, car); if (car.LoadingMaterial.Count <= 0) { } else//上件的有料的车 { if (car.LocatorNodeId == 0 || car.ProLocatorArea == null) { logger.Log("上件点小车,未找到小车去向,重新走逻辑"); lock (StaticData.FindLocatorLock) { //查找设置的库位物料 var areas = StaticData.getCarInputLocator(this.LineNo, car); if (areas != null) { car.LocatorNodeId = areas.Id; car.ProLocatorArea = areas; } } } if (car.LocatorNodeId == 0 || car.ProLocatorArea == null) { logger.Log("上件点小车,依然未找到小车去向,排查问题"); // IsPlcRead = false; } else { locatorNO = Convert.ToInt32(car.ProLocatorArea.AreaNo); if(locatorNO>23) { locatorNO = 2008; } ///回写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) { // IsPlcRead = false; CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault(); if (car != null) { car.LocatorId = car.LocatorNodeId; car.LocatorArea = car.ProLocatorArea; car.LocatorNodeId = 0; car.ProLocatorArea = null; car.CurrNodeId = this.ScanPoint.Id; car.CurrNodeSetting = this.ScanPoint; //添加小车记录表 DBService.AddCarHistoryRecord(car); this.ScanPoint.CarNo = carno.ToString(); // IsPlcRead = true; car.IsProOutLocator = 0; car.IsOutLocator = 0; car.OptDt = DateTime.Now; car.IsOver = 0; DBService.ModifyRealCarinfoRecord(car); 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); } } } }