You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
458 lines
24 KiB
C#
458 lines
24 KiB
C#
//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;
|
|
// }
|
|
|
|
// ///// <summary>
|
|
// ///// 启动上件扫描监听
|
|
// ///// </summary>
|
|
// //public void StartUpMateril(string lineNo)
|
|
// //{
|
|
// // StaticData.OffLineLockObjDic.Add(lineNo,new object());
|
|
// // List<UpLineMaterialList> uplinemateriallist = StaticData.UpMaterialAreaList.Where(t => t.LineNo == lineNo).ToList();
|
|
// // StaticData.InLineMaterialsDic.Add(lineNo, uplinemateriallist);
|
|
// // UpMaterialThread = new Thread(new ParameterizedThreadStart(StaticData.UpmaterialMethod));
|
|
// // UpMaterialThread.Start(lineNo);
|
|
// //}
|
|
|
|
|
|
// /// <summary>
|
|
// /// 启动小车扫描监听队列
|
|
// /// </summary>
|
|
// 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<string> carlist)
|
|
// {
|
|
// Logger logger = new Logger();
|
|
// try
|
|
// {
|
|
// List<UpLineScanCarList> 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 "";
|
|
// }
|
|
|
|
|
|
|
|
// /// <summary>
|
|
// /// 前端点击放行,放行小车队列
|
|
// /// </summary>
|
|
// /// <param name="lineNo"></param>
|
|
// /// <param name="materials"></param>
|
|
// public void StartCarCanR(string lineNo, int carnumber)
|
|
// {
|
|
|
|
// Logger logger = new Logger();
|
|
// while (carnumber <= 0)
|
|
// {
|
|
// try
|
|
// {
|
|
// List<UpLineScanCarList> 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)
|
|
// {
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|