/// <summary> /// 初始化数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Window_Loaded(object sender, RoutedEventArgs e) { #region 加载初始化数据 this.LoadTaskFromDb(); #endregion #region 初始化基本数据 foreach (var i in OPCConfig.OPCServers) { OPCServersLB.Items.Add(i); } OPCServerTB.Text = OPCConfig.OPCServer; OPCNodeNameTB.Text = OPCConfig.OPCNodeName; #endregion #region 初始化OPC数据 OPCGetInStockPositionData = new OPCGetInStockPosition(); OPCGetInStockPositionData.RwFlagChangedEvent += new OPCGetInStockPosition.RwFlagChangedEventHandler(OPCGetInStockPositionData_RwFlagChangedEvent); OPCSetInStockTaskData = new OPCSetInStockTask(); OPCSetInStockTaskData.RwFlagChangedEvent += new OPCSetInStockTask.RwFlagChangedEventHandler(OPCSetInStockTaskData_RwFlagChangedEvent); #endregion #region 初始化定时器 SetOPCInStockTaskTimer = new Timer(); SetOPCInStockTaskTimer.Interval = 100; SetOPCInStockTaskTimer.Enabled = true; SetOPCInStockTaskTimer.Elapsed += SetOPCInStockTaskTimer_Elapsed; SetOPCInStockTaskTimer.Start(); #endregion }
/// <summary> /// 入栈入库任务 /// </summary> /// <returns></returns> private void EnququeInStockTaskQueue(OPCSetInStockTask task) { lock (InStockTaskQueueLocker) { task.State = InStockTaskState.WaitingStcok; InStockTaskQueue.Add(task.InposiBarcode, task); } }
private bool WriteOPCSetInStockTaskData(string barcode) { lock (WriteInStockTaskLocker) { OPCSetInStockTask inStockTask = new OPCSetInStockTask(); if (InStockTaskQueue.Keys.Contains(barcode)) { } return(false); } }
/// <summary> /// 验证可读和读取入库条码信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SetOPCInStockTaskTimer_Elapsed(object sender, ElapsedEventArgs e) { SetOPCInStockTaskTimer.Stop(); // 是否存在任务? 并OPC可写 if (OPCSetInStockTaskData.CanWrite && this.HasWatingInStockTask()) { OPCSetInStockTask task = this.DeququeInStockTaskQueue(); LogUtil.Logger.InfoFormat("【派发任务】条码为{0}, 库位为{1}-{2}-{3}", task.InposiBarcode, task.PositionFloor, task.PositionColumn, task.PositionRow); if (task.SyncWrite(OPCSetInStockTaskOPCGroup)) { task.State = InStockTaskState.InStocking; } } SetOPCInStockTaskTimer.Start(); }