//using CentralControl.BaseData; //using CommonFunc; //using System; //using System.Collections.Generic; //using System.Linq; //using System.Text; //using System.Threading; //using XGL.Thrift; //namespace CentralControl.App_Code //{ // public class LogicLine1006 // { // // Thread UpMaterialThread; // PlcHelper plcHelper; // string LineNo { get; set; } // NodeSetting ScanPoint { get; set; } // public LogicLine1006(PlcHelper plc,string LineNo) // { // NodeSetting linenode1 = StaticData.NodeSettingList.FirstOrDefault(t => t.LineCatchArea != null && t.LineCatchArea.LineNo == LineNo && t.LineCatchArea.AreaType == 1); // if(linenode1!=null) // { // this.ScanPoint = linenode1; // }else // { // Logger logger = new Logger(); // logger.Log("创建线体,未找到扫描点位"); // } // plcHelper = plc; // } // ///// // ///// 启动上件扫描监听 // ///// // //public void StartUpMateril(string lineNo) // //{ // // StaticData.OffLineLockObjDic.Add(lineNo,new object()); // // List uplinemateriallist = StaticData.UpMaterialAreaList.Where(t => t.LineNo == lineNo).ToList(); // // StaticData.InLineMaterialsDic.Add(lineNo, uplinemateriallist); // // UpMaterialThread = new Thread(new ParameterizedThreadStart(StaticData.UpmaterialMethod)); // // UpMaterialThread.Start(lineNo); // //} // /// // /// 启动小车扫描监听队列 // /// // public void StartScanThriftLogic(int point) // { // this.LineNo = this.LineNo; // XGL.Thrift.ThriftServiceImp business = new XGL.Thrift.ThriftServiceImp(); // business.DischargeCarEvent += SendCar; // XGL.Thrift.ThriftCommon thriftCommon = new XGL.Thrift.ThriftCommon(); // thriftCommon.Start(business, point); // } // public string SendCar(List carlist) // { // Logger logger = new Logger(); // try // { // List mlist = StaticData.InLineScanCarDic[this.LineNo]; // foreach (string carno in carlist) // { // logger.Log("挂件信息 ["+ LineNo + "]:" + carno); // string[] carinfo = carno.Split('*'); // UpLineScanCarList uplinmater = new UpLineScanCarList(); // uplinmater.CarNo = carinfo[0]; // uplinmater.MaterialNo = carinfo[1]; // uplinmater.Number = Convert.ToInt32(carinfo[2]); // uplinmater.LineNo = this.LineNo; // mlist.Add(uplinmater); // DBService.AddUpLineScancar(uplinmater); // } // if(this.ScanPoint!=null) // { // while (true) // { // UpLineScanCarList carInfo = mlist[0]; // if (!string.IsNullOrEmpty(carInfo.MaterialNo) && carInfo.MaterialInfo != null) // { // //小车是否到位 // object carstate = plcHelper.Read(ScanPoint.PlcSetting5); // //小车是否离开 // object carrun = plcHelper.Read(ScanPoint.PlcSetting1); // ///读取小车号 // object carno = plcHelper.Read(ScanPoint.PlcSetting2); // ///上位机写入岔道信息 // object wcsstate = plcHelper.Read(ScanPoint.PlcSetting3); // ///回写plc状态处理完成,plc会清理数据 // object wcsend = plcHelper.Read(ScanPoint.PlcSetting4); // if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(wcsend) == 0 && Convert.ToInt32(wcsstate) == 0 && Convert.ToInt32(carstate) == 1) // { // logger.Log("[" + carno + "]小车到了 [" + this.LineNo + "]号上件点"); // //中一系统 在点位配置维护的时候, 一个节点的子级 不需要维护多个,只需要把特定线路的点维护,然后根据线体去找到库位口位置 // ScanPoint.CarNo = carno.ToString(); // int locatorid = 0; // ///获取预设 物料分配的库位 // LineCatchArea area = StaticData.LineCatchAreaList.Where(t => t.MaterialNo == carInfo.MaterialNo).FirstOrDefault(); // //当前物料之后已经存在库内,如果存在,返回位置 // if (area != null) // { // //增加判断 满减存储区是否有位置, 没有的话,就暂时不发车 // //判断库区内小车数量 // var locatorNum = StaticData.CarRealList.Where(t => t.LocatorNodeId == area.Id).Count(); // if (locatorNum < area.MaxNumber) // { // //未满 // locatorid = area.Id; // } // else // { // //满了 // } // } // //如果单个的库位满了, 或者没有设定单库,进入混合库区 // if (locatorid == 0) // { // //增加判断 满减存储区是否有位置, 没有的话,就暂时不发车 // var mixtureArea = StaticData.LineCatchAreaList.Where(t => t.AreaStorageType == 0); // foreach (var locator in mixtureArea) // { // //判断库区内小车数量 // var locatorNum = StaticData.CarRealList.Where(t => t.LocatorNodeId == area.Id).Count(); // if (locatorNum < locator.MaxNumber) // { // area = locator; // //未满 // locatorid =Convert.ToInt32( locator.AreaNo); // break; // } // } // } // //判断小车号是否存在 ,使用内存记录 // // CarRealInfo car = DBService.GetCarModel(carno.ToString()); // CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault(); // if (car == null) // { // //小车不存在了, 就插入初始化数据 // car = new CarRealInfo(); // car.CarNo = carno.ToString(); // //car.CurrNodeId = nodeFirst.Id; // //car.CurrNodeSetting = nodeFirst; // //car.LocatorNodeId = nodeFirst.Id; // //car.LocatorNodeSetting = nodeFirst; // //car.MaterialBarNo = Product.ProductBarNo; // //car.MaterialInfo = Product.MaterialInfo; // car.MaterialNo = carInfo.MaterialNo; // car.OptDt = DateTime.Now; // //car.OrderPlanId = orderplanId; // //car.OrderPlan = currPlan; // car.IsOver = 0; // DBService.AddCarRealRecord(car); // } // else // { // //小车存在了, 就修改初始化数据 // car.CarNo = carno.ToString(); // car.CurrNodeId =this.ScanPoint.Id; // car.CurrNodeSetting = this.ScanPoint; // NodeSetting nextnode = StaticData.NodeSettingList.FirstOrDefault(t=>t.NodeNo==""); // car.LocatorNodeId = nodeFirst.Id; // car.LocatorNodeSetting = nodeFirst; // //car.MaterialBarNo = Product.ProductBarNo; // //car.MaterialInfo = Product.MaterialInfo; // car.MaterialNo = carInfo.MaterialNo; // //car.OrderPlanId = orderplanId; // //car.OrderPlan = currPlan; // car.OptDt = DateTime.Now; // car.IsOver = 0; // DBService.ModifyRealCarinfoRecord(car); // } // Productinfo producthistory = new Productinfo(); // producthistory.CreateTime = DateTime.Now; // producthistory.IsDeleted = 0; // producthistory.MaterialNo = carInfo.MaterialNo; // // producthistory.ProductBarno = Product.ProductBarNo; // ///记录产品信息 // DBService.AddProductInfo(producthistory); // //删除上件工件队列 // DBService.DeleteUpLineMaterial(carInfo.Id); // //添加小车记录表 // DBService.AddCarHistoryRecord(car); // //记录小车已经离开. // // DBService.UpdateCarOverState(car.Id, 1); // //同步内存表小车数据 // StaticData.CarRealList.Add(car); // ///回写plc状态,起点的分支线路为1 // plcHelper.Write(StaticData.getPlcInfoByCode("incaradapter_w" + this.LineNo), 1); // ///回写plc状态处理完成,plc会清理数据 // plcHelper.Write(StaticData.getPlcInfoByCode("incarclear_w" + this.LineNo), 1); // }//小车移动中指定点位后,并且到位了 // else if (Convert.ToInt32(lineNo) == 0 && Convert.ToInt32(carstate) == 0 && Convert.ToInt32(carrun) == 1) // { // //CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault(); // //if (car != null) // //{ // logger.Log(" 小车离开了 [" + lineNo + "]号上件点"); // ///回写plc状态,,plc会清理数据 // plcHelper.Write(StaticData.getPlcInfoByCode("incaradapter_w" + lineNo), 0); // ///回写plc状态处理完成,plc会清理数据 // plcHelper.Write(StaticData.getPlcInfoByCode("incarclear_w" + lineNo), 0); // ///回写plc状态处理完成,plc会清理数据 // // plcHelper.Write(getPlcInfoByCode("inlineoutwcs_" + lineno), 1); // /////回写plc状态处理完成,plc会清理数据 // //plcHelper.Write(getPlcInfoByCode("inlinestate_" + lineno), 1); // //} // //else // //{ // // logger.Log("线体[" + lineno + "]小车信息[" + carno + "]从内存记录中没有找到"); // //} // } // } // else // { // logger.Log("[" + this.LineNo + "] 带上件门体,上件完毕"); // break; // } // Thread.Sleep(1000); // } // } // } // catch(Exception ex) // { // logger.Error("发车操作异常:"+ex.Message+ex.StackTrace); // } // return ""; // } // /// // /// 前端点击放行,放行小车队列 // /// // /// // /// // public void StartCarCanR(string lineNo, int carnumber) // { // Logger logger = new Logger(); // while (carnumber <= 0) // { // try // { // List mlist = StaticData.InLineScanCarDic[lineNo]; // if (mlist.Count > 0) // { // UpLineScanCarList carInfo = mlist[0]; // if (!string.IsNullOrEmpty(carInfo.MaterialNo) && carInfo.MaterialInfo != null) // { // //小车是否到位 // object carstate = plcHelper.Read(StaticData.getPlcInfoByCode("incarstate_p" + lineNo)); // //小车是否离开 // object carrun = plcHelper.Read(StaticData.getPlcInfoByCode("incarover_p" + lineNo)); // ///读取小车号 // object carno = plcHelper.Read(StaticData.getPlcInfoByCode("incarno_p" + lineNo)); // ///上位机写入岔道信息 // object wcsstate = plcHelper.Read(StaticData.getPlcInfoByCode("incaradapter_w" + lineNo)); // ///回写plc状态处理完成,plc会清理数据 // object wcsend = plcHelper.Read(StaticData.getPlcInfoByCode("incarclear_w" + lineNo)); // if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(wcsend) == 0 && Convert.ToInt32(wcsstate) == 0 && Convert.ToInt32(carstate) == 1) // { // logger.Log("[" + carno + "]小车到了 [" + lineNo + "]号上件点"); // //中一系统 在点位配置维护的时候, 一个节点的子级 不需要维护多个,只需要把特定线路的点维护,然后根据线体去找到库位口位置 // //获取当前上件区线的第一个点信息,前置点位信息 // NodeSetting nodeFirst = StaticData.NodeSettingList.Where(t => t.NodeType == 1 && t.LineCatchArea.LineNo == lineNo).FirstOrDefault(); // int locatorid = 0; // //增加判断 满减存储区是否有位置, 没有的话,就暂时不发车 // LineCatchArea area = StaticData.LineCatchAreaList.Where(t => t.MaterialNo == carInfo.MaterialNo).FirstOrDefault(); // if (area != null) // { // //判断库区内小车数量 // var locatorNum = StaticData.CarRealList.Where(t => t.LocatorNodeId == area.Id).Count(); // if (locatorNum < area.MaxNumber) // { // //未满 // locatorid = area.Id; // } // else // { // //满了 // } // } // //如果单个的库位满了, 或者没有设定单库,进入混合库区 // if (locatorid == 0) // { // //增加判断 满减存储区是否有位置, 没有的话,就暂时不发车 // var mixtureArea = StaticData.LineCatchAreaList.Where(t => t.AreaStorageType == 0); // foreach (var locator in mixtureArea) // { // //判断库区内小车数量 // var locatorNum = StaticData.CarRealList.Where(t => t.LocatorNodeId == area.Id).Count(); // if (locatorNum < locator.MaxNumber) // { // area = locator; // //未满 // locatorid = locator.Id; // break; // } // } // } // //判断小车号是否存在 ,使用内存记录 // // CarRealInfo car = DBService.GetCarModel(carno.ToString()); // CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault(); // if (car == null) // { // //小车不存在了, 就插入初始化数据 // car = new CarRealInfo(); // car.CarNo = carno.ToString(); // car.CurrNodeId = nodeFirst.Id; // car.CurrNodeSetting = nodeFirst; // car.LocatorNodeId = nodeFirst.Id; // car.LocatorNodeSetting = nodeFirst; // //car.MaterialBarNo = Product.ProductBarNo; // //car.MaterialInfo = Product.MaterialInfo; // car.MaterialNo = carInfo.MaterialNo; // car.OptDt = DateTime.Now; // //car.OrderPlanId = orderplanId; // //car.OrderPlan = currPlan; // car.IsOver = 0; // DBService.AddCarRealRecord(car); // } // else // { // //小车存在了, 就修改初始化数据 // car.CarNo = carno.ToString(); // car.CurrNodeId = nodeFirst.Id; // car.CurrNodeSetting = nodeFirst; // car.LocatorNodeId = nodeFirst.Id; // car.LocatorNodeSetting = nodeFirst; // //car.MaterialBarNo = Product.ProductBarNo; // //car.MaterialInfo = Product.MaterialInfo; // car.MaterialNo = carInfo.MaterialNo; // //car.OrderPlanId = orderplanId; // //car.OrderPlan = currPlan; // car.OptDt = DateTime.Now; // car.IsOver = 0; // DBService.ModifyRealCarinfoRecord(car); // } // Productinfo producthistory = new Productinfo(); // producthistory.CreateTime = DateTime.Now; // producthistory.IsDeleted = 0; // producthistory.MaterialNo = carInfo.MaterialNo; // // producthistory.ProductBarno = Product.ProductBarNo; // ///记录产品信息 // DBService.AddProductInfo(producthistory); // //删除上件工件队列 // DBService.DeleteUpLineMaterial(carInfo.Id); // //添加小车记录表 // DBService.AddCarHistoryRecord(car); // //记录小车已经离开. // // DBService.UpdateCarOverState(car.Id, 1); // //同步内存表小车数据 // StaticData.CarRealList.Add(car); // ///回写plc状态,起点的分支线路为1 // plcHelper.Write(StaticData.getPlcInfoByCode("incaradapter_w" + lineNo), 1); // ///回写plc状态处理完成,plc会清理数据 // plcHelper.Write(StaticData.getPlcInfoByCode("incarclear_w" + lineNo), 1); // }//小车移动中指定点位后,并且到位了 // else if (Convert.ToInt32(lineNo) == 0 && Convert.ToInt32(carstate) == 0 && Convert.ToInt32(carrun) == 1) // { // //CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault(); // //if (car != null) // //{ // logger.Log(" 小车离开了 [" + lineNo + "]号上件点"); // ///回写plc状态,,plc会清理数据 // plcHelper.Write(StaticData.getPlcInfoByCode("incaradapter_w" + lineNo), 0); // ///回写plc状态处理完成,plc会清理数据 // plcHelper.Write(StaticData.getPlcInfoByCode("incarclear_w" + lineNo), 0); // ///回写plc状态处理完成,plc会清理数据 // // plcHelper.Write(getPlcInfoByCode("inlineoutwcs_" + lineno), 1); // /////回写plc状态处理完成,plc会清理数据 // //plcHelper.Write(getPlcInfoByCode("inlinestate_" + lineno), 1); // //} // //else // //{ // // logger.Log("线体[" + lineno + "]小车信息[" + carno + "]从内存记录中没有找到"); // //} // } // } // else // { // logger.Log("[" + lineNo + "]小车到位,但是工件队列是空的"); // } // } // } // catch (Exception ex) // { // } // } // } // } //}