예제 #1
0
 private OrderDataStateManage GetStateManage(string stateItemCode)
 {
     if (!orderDataStateManages.ContainsKey(stateItemCode))
     {
         lock (orderDataStateManages)
         {
             if (!orderDataStateManages.ContainsKey(stateItemCode))
             {
                 orderDataStateManages[stateItemCode] = new OrderDataStateManage(stateItemCode, this.Context.ProcessDispatcher);
             }
         }
     }
     return(orderDataStateManages[stateItemCode]);
 }
예제 #2
0
        protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher)
        {
            /*
             * stateItem.Name : 消息来源
             * stateItem.ItemName :
             *      对应 (0)Init                   : 初始化(下载新数据时的初始化!)
             *           (1)StateItemCode_OrderDataMoveNext : 来自PLC数据单元,请求写订单,PLC将用当前经过件烟流水号,请求写订单数据!
             *           (2)StateItemCode_OrderDataMoveTo   : 来自PLC数据单元,请求较正数据,PLC将用当前经过件烟流水号,请求较正数据!
             *
             * stateItem.State :来自PLC数据块的流水号。
             */
            try
            {
                using (PersistentManager pm = new PersistentManager())
                {
                    if (stateItem.ItemName == "Init")
                    {
                        foreach (string stateCode in (new OrderDataStateManage()).GetStateItemCodeList())
                        {
                            GetStateManage(stateCode);
                        }

                        foreach (OrderDataStateManage orderDataStateManageItem in orderDataStateManages.Values)
                        {
                            orderDataStateManageItem.MoveTo(1);
                        }
                        return;
                    }

                    if (stateItem.ItemName == "Start")
                    {
                        isStockOut = true;
                        return;
                    }
                    if (stateItem.ItemName == "Stop")
                    {
                        isStockOut = false;
                        return;
                    }

                    if (!isStockOut)
                    {
                        return;
                    }

                    string stateItemCode = stateItem.ItemName.Split('_')[0];
                    string action        = stateItem.ItemName.Split('_')[1];
                    OrderDataStateManage orderDataStateManage = GetStateManage(stateItemCode);
                    int index = 0;

                    switch (action)
                    {
                    case "OrderDataMoveNext":
                        index = Convert.ToInt32(THOK.MCP.ObjectUtil.GetObject(stateItem.State));
                        if (index != 0 && orderDataStateManage.Check(index))
                        {
                            if (!orderDataStateManage.WriteToPlc())
                            {
                                Logger.Info(string.Format("{0} 号订单请求,订单数据写入失败流水号:[{1}]", stateItemCode, index));
                            }
                        }
                        break;

                    case "OrderDataMoveTo":
                        index = Convert.ToInt32(THOK.MCP.ObjectUtil.GetObject(stateItem.State));
                        if (index != 0)
                        {
                            orderDataStateManage.MoveTo(index);
                        }
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error("OrderDataStateProcess.StateChanged() 处理失败!原因:" + e.Message);
            }
        }