private void ReceiveConsecutiveFrame(DataLayerEvent _event) { if (BufferMultiFrameReceive.ExpectedSN != NetworkLayerDataBuffer.GetSN_DLSign(_event.listData)) { return; } if (BufferMultiFrameReceive.ListNetLayerByteData.Count > BufferMultiFrameReceive.Offset) { BufferMultiFrameReceive.ExpectedSN = (byte)((BufferMultiFrameReceive.ExpectedSN + 1) % 0x10); int nReceiveLength = System.Math.Min(7, BufferMultiFrameReceive.ListNetLayerByteData.Count - BufferMultiFrameReceive.Offset); for (int i = 0; i != nReceiveLength; ++i) { if (BufferMultiFrameReceive.Offset + i <= BufferMultiFrameReceive.ListNetLayerByteData.Count) { BufferMultiFrameReceive.ListNetLayerByteData[(int)(BufferMultiFrameReceive.Offset + i)] = _event.listData[(int)(i + 1)]; } } BufferMultiFrameReceive.Offset += nReceiveLength; --BufferMultiFrameReceive.RemainFrameCount; if (BufferMultiFrameReceive.Offset > BufferMultiFrameReceive.ListNetLayerByteData.Count) { BufferMultiFrameReceive.ClearMessage(); } else { if (BufferMultiFrameReceive.RemainFrameCount <= 0) { ActionRecvFun(BufferMultiFrameReceive); } } } }
public static void NetworkLayerSendMultiFrame(object obj) { string strSendBytes = DataFormatConvert.ListToStr(BufferMultiFrameSend.ListNetLayerByteData); int nSendTimes = 0; try { while (true) { if (BufferMultiFrameSend.Offset < BufferMultiFrameSend.ListNetLayerByteData.Count && BufferMultiFrameSend.RemainFrameCount > 0 && (MainWindow.m_OperateType == OperateType.WriteAllMasterPara || //ParaManageWnd.IsUpdateAllPara || MainWindow.m_OperateType == OperateType.WriteAllMasterAdjustPara || MainWindow.m_OperateType == OperateType.WriteMasterControlPara)) // (BufferMultiFrameSend.RemainFrameCount != 0) { if (BufferMultiFrameSend.Offset > 0) // 非首帧 { DataLinkLayer.ActionDllSendFuc(BufferMultiFrameSend.SendConsecutiveFrame()); } else { DataLinkLayer.ActionDllSendFuc(BufferMultiFrameSend.SendFirstFrame()); } BufferMultiFrameSend.RemainFrameCount--; } else { if (MainWindow.m_OperateType != OperateType.WriteAllMasterPara) //(!ParaManageWnd.IsUpdateAllPara) // 关闭参数管理窗口,停止设置参数 清空发送数据 { BufferMultiFrameSend.ClearMessage(); } break; } Thread.Sleep(200); } } catch (Exception ex) { } }