Пример #1
0
        private DaqData ProcessPacket(List <DaqDataPacket> packets, DaqDataPacket packet)
        {
            DaqData result = null;

            if (packet.DataType == DaqDataType.DAQ_DATA)
            {
                packets.Add(packet);
                if (lastGaps != null && packets.Count == PacketCountFor1Sec)
                {
                    result = PopAndProcessAsyncPackets(packets);
                }
            }
            else if (packet.DataType == DaqDataType.GAP_DATA)
            {
                if (lastGaps == null)
                {
                    //연결 후 처음 gap 받은 시점(이전의 DAQ_DATA는 미완성 데이타)
                    packets.Clear();
                }

                var gapAndRpm = packet.ToWords();
                lastGaps = gapAndRpm.Take(8).Select(w => ConvertGap(w)).ToArray();
                lastRpm1 = ConvertRpm(packet.Bytes, 16);
                lastRpm2 = ConvertRpm(packet.Bytes, 20);
            }
            return(result);
        }
Пример #2
0
        public DaqData FetchData()
        {
            List <DaqDataPacket> packets = new List <DaqDataPacket>();
            DaqData result = null;

            while (result == null)
            {
                var packet = DaqDataPacket.RecvDataPacket(this, qs, "fetch");
                result = ProcessPacket(packets, packet);
            }
            return(result);
        }
Пример #3
0
        //모자른 만큼만 추가로 스트림에서 읽음
        public byte[] PullLast(int size)
        {
            var readSize = size - byteQueue.Count;

            if (readSize <= 0)
            {
                return(byteQueue.Take(size).ToArray());
            }

            var block = DaqDataPacket.ReadBlock(stream, readSize);

            foreach (var b in block)
            {
                byteQueue.AddLast(b);
            }
            return(byteQueue.Take(size).ToArray());
        }