Example #1
0
        private int[] AverageScreenFilled(int AverageIndex, int AverageChunkSize, int PreviousScreenRemainder, int SumProcessedBytes, PointPairList list, int time)
        {
            int[] FilledProperties = new int[3];

            int SumScreenRemainder=0;
            int SumEndChunk = 0;

            // Ensures averages are plotted if more than AverageChunkSize of array is yet to be averaged
            // Then sums remaining bytes to be carried over into next loop

            while(ScreenBuffer.Length-((AverageIndex-1) * AverageChunkSize - PreviousScreenRemainder) > AverageChunkSize) // Same while loop as above function to average remaining bytes that can make up an 'AverageChunkSize'
            {
                for (int i = (AverageIndex - 1) * AverageChunkSize - PreviousScreenRemainder; i < AverageChunkSize * AverageIndex - PreviousScreenRemainder; i++)
                {
                    SumEndChunk += Convert.ToInt32(ScreenBuffer[i]);
                }

                if (SumVsAv.Checked == false)
                {
                    Average = SumEndChunk / (AverageChunkSize * TimebinFactor[0]);
                }
                else if (SumVsAv.Checked == true)
                {
                    Average = SumEndChunk / TimebinFactor[0];
                }
                x[j] = time;
                y[j] = Average;
                list.Add(time, Average);
                zgc.Invalidate();
                if (list.Count > 30000)
                {
                    list.RemoveAt(0);
                }
                time += 1;//TimebinFactor[0] * AverageChunkSize;
                SumEndChunk = 0;
                AverageIndex++;
            }

                for (int i = (AverageIndex-1) * AverageChunkSize - PreviousScreenRemainder; i < ScreenBuffer.Length; i++) // For loop to sum remaining bytes in ScreenBuffer
                {
                    SumScreenRemainder += Convert.ToInt32(ScreenBuffer[i]);
                }
                PreviousScreenRemainder = ScreenBuffer.Length - ((AverageIndex-1) * AverageChunkSize - PreviousScreenRemainder); // Index to acount for how many 'new' bytes need to be added to the sum of the remainder to make up 'AverageChunkSize'

            SumProcessedBytes = SumScreenRemainder;  // Carries over remainder bytes' sum
            SumScreenRemainder = 0;

            FilledProperties[0] = time;
            FilledProperties[1] = SumProcessedBytes;
            FilledProperties[2] = PreviousScreenRemainder;

            return FilledProperties;
        }
Example #2
0
        // Function to average bytes in ScreenBuffer while it isn't filled (still room for UART_Buffer to be coppied in)
        private int[] AverageScreenUnfilled(int AverageIndex, int AverageChunkSize, int PreviousScreenRemainder, int SumProcessedBytes, PointPairList list, int time)
        {
            // Two values must be return so function returns an array
            int[] Properties = new int[2];
            int SumChunk = SumProcessedBytes;//Running total carried over from end of previous ScreenBuffer
            if (AverageIndex == 1) //Ensures first value of i in for loop is not negative as it would be if set to (AverageIndex2 - 1) * AverageChunkSize2 - PreviousScreenRemainder2 and AverageIndex2=1 (as it is in if loop below
            {
                for (int i = 0; i < AverageIndex * AverageChunkSize - PreviousScreenRemainder; i++) //Sums first values of new buffer
                {
                    SumChunk += Convert.ToInt32(ScreenBuffer[i]);
                }
                if (SumVsAv.Checked == false)
                {
                    Average = SumChunk / (AverageChunkSize*TimebinFactor[0]);
                }
                else if (SumVsAv.Checked == true)
                {
                    Average = SumChunk / TimebinFactor[0];
                }
                list.Add(time, Average);
                zgc.Invalidate();
                time += 1;// TimebinFactor[0] * AverageChunkSize;
                AverageIndex++;
                SumChunk = 0;
                j++;
            }
            while (AverageIndex * AverageChunkSize - PreviousScreenRemainder < COPY_POS) // while loop continues to average blocks of bytes untill there aren't enough 'new' bytes to make up an 'AverageChunkSize',
                                                                                         // at this point requique new UART_Buffer to be coppied into ScreenBuffer
            {
                for (int i = (AverageIndex - 1) * AverageChunkSize - PreviousScreenRemainder; i < AverageIndex * AverageChunkSize - PreviousScreenRemainder; i++) //Sums a chunk from middle of array
                {
                    SumChunk += Convert.ToInt32(ScreenBuffer[i]);
                }
                if (SumVsAv.Checked == false)
                {
                    Average = SumChunk / (AverageChunkSize * TimebinFactor[0]);
                }
                else if (SumVsAv.Checked == true)
                {
                    Average = SumChunk / TimebinFactor[0];
                }

                list.Add(time, Average);
                zgc.Invalidate();// Limmits size of PonitPairList to 30000, removing oldest values when filled
                if (list.Count > 30000)
                {
                    list.RemoveAt(0);
                }
                time += 1;// TimebinFactor[0] * AverageChunkSize;
                AverageIndex++; // Average index hold placed of where to start averaging from.
                SumChunk = 0;
                j++;
            }

            Properties[0] = AverageIndex;  // Setting required variables to elemant in array to be returned.
            Properties[1] = time;
            return Properties;
        }
        //--------------------------实时显示----------------------
        private void AddPoint(ref ZedGraphControl zedgraph, ref PointPairList list, double x, double y)
        {
            try
            {
                //LineItem mycurve = zedgraph.GraphPane.AddCurve("", list, Color.DarkBlue, SymbolType.Circle);
                list.Add(x, y);

                if (list.Count > 120)
                    list.RemoveAt(0);

                if (zedgraph != null)
                {
                    zedgraph.AxisChange();
                    zedgraph.Refresh();
                }

            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.ToString());
                return;
            }
            finally
            {
                GC.Collect();
            }
        }