/// <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); }
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)); } } }