예제 #1
0
        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);
                    }
                }
            }
        }
예제 #2
0
        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)
            {
            }
        }