/// <summary>
        /// 解析消息数组至单个消息对象
        /// </summary>
        /// <param name="buf">消息数组</param>
        /// <param name="offset">偏移量引用</param>
        /// <returns>消息对象</returns>
        static public MessageBase MessageCreate(byte[] buf, ref int offset)
        {
            Int16       tMsgId = 0;
            MessageBase messageBase;

            DataConversion.ByteToNum(buf, offset, ref tMsgId, false);
            switch (tMsgId)
            {
            case (Int16)MessageType.DivertReq:
                messageBase = new DivertReq(buf, offset);
                offset     += DivertReq.len;
                break;

            case (Int16)MessageType.DivertRes:
                messageBase = new DivertRes(buf, offset);
                offset     += DivertRes.len;
                break;

            case (Int16)MessageType.HeartBeat:
                messageBase = new HeartBeat(buf, offset);
                offset     += HeartBeat.len;
                break;

            case (Int16)MessageType.NodeAva:
                messageBase = new NodeAva(buf, offset);
                offset     += NodeAva.len;
                break;

            case (Int16)MessageType.CommsErr:
                messageBase = new CommsErr(buf, offset);
                offset     += CommsErr.len;
                break;

            default:
                throw new NotImplementedException();
            }
            return(messageBase);
        }
Beispiel #2
0
        static private void HanderRes(DivertRes divertRes)
        {
            if (divertRes.divertRes == 1)
            {
                return;
            }
            Box box;

            if (divertRes.codeStr.Contains("?") && (divertRes.nodeId == solveNode))
            {
                if (divertRes.divertRes == 0)
                {
                    Log.log.Info("Success removed unknow box from line");
                }
                else
                {
                    Log.log.Info("removed unknow box from conveyor line fail: " + divertRes.GetResult());
                    if (divertRes.divertRes == 32)
                    {
                        ReportError(new ErrorInfo(ErrorInfo.ErrorCode.LaneFull, "?", solveNode, solveLane));
                    }
                    else
                    {
                        ReportError(new ErrorInfo(ErrorInfo.ErrorCode.SortingFault, "?", solveNode, solveLane));
                    }
                }
                return;
            }
            if (CheckStackSeq() == true)
            {
                box = FindBox(workingStack, divertRes.codeStr);
                if (box != null)
                {
                    if (box.status == BoxStatus.Sorting)
                    {
                        if (divertRes.divertRes == 0)
                        {
                            box.status = BoxStatus.Success;
                            Log.log.Info("Box[" + box.barcode + "] sort success");
                            SortingTimeReset();
                            workingStack.CheckStatus();
                            ReportBox(new Chest()
                            {
                                barcode = box.barcode, lane = box.lane, node = box.node, container = workingStack.SeqNum
                            });
                        }
                        else
                        {
                            box.status = BoxStatus.Checked;
                            if (divertRes.divertRes == 32)
                            {
                                Log.log.Error("box[" + box.barcode + "] sort faild,node[" + divertRes.nodeId + "]" + "lane[" + box.lane + "] is full");
                                ReportError(new ErrorInfo(ErrorInfo.ErrorCode.LaneFull, box.barcode, box.node, box.lane));
                                return;
                            }

                            Log.log.Error("Box[" + box.barcode + "] sorting falut: " + divertRes.GetResult());
                            Log.log.Error("ahead[node:" + box.node + "|lane:" + box.lane + "] now[node:" + divertRes.nodeId + "|lane:" + divertRes.laneId + "]");
                            ReportError(new ErrorInfo(ErrorInfo.ErrorCode.SortingFault, box.barcode, box.node, box.lane));
                        }
                    }
                }
            }


            string barcode = outListBox.Find(mBarcode => mBarcode.Equals(divertRes.codeStr));

            if (barcode != null)
            {
                outListBox.Remove(barcode);
                if (divertRes.divertRes == 0)
                {
                    Log.log.Info("Box[" + divertRes.codeStr + "] out of list sort success");
                }
                else
                {
                    Log.log.Error("Box[" + divertRes.codeStr + "] out of list sorting falut: " + divertRes.GetResult());
                    Log.log.Error("ahead[node:" + solveNode + "|lane:" + solveLane + "] now[node:" + divertRes.nodeId + "|lane:" + divertRes.laneId + "]");
                    ReportError(new ErrorInfo(ErrorInfo.ErrorCode.SortingFault, barcode, solveNode, solveLane));
                }
            }
        }