Beispiel #1
0
        private Point GetPowerPointByOriginal(P_V_Point oriPoint)
        {
            double X     = _CvsRect.X + oriPoint.Voltage * (double)_CvsRect.Width / CurvesCurrent;
            double Y     = _CvsRect.Y + (375 - oriPoint.Pmax) * (double)_CvsRect.Height / 375;
            Point  point = new Point();

            point.X = (int)X;
            point.Y = (int)Y;
            return(point);
        }
Beispiel #2
0
        /// <summary>
        /// 根据坐标点画曲线
        /// </summary>
        /// <param name="graph"></param>
        private void DrawCurvas(Graphics graph)
        {
            //Pen pointPen = null;
            Pen curvasPen = null;

            // if (_OriPointList == null) return;
            try
            {
                if (OldoriPointArray.Length == 3)
                {
                    //pointPen = curvasPen = new Pen(Color.Red, 1);
                    //画所有数据点
                    curvasPen = new Pen(Color.Blue, 1);
                    if (_CurvasPointList != null)
                    {
                        graph.DrawLines(curvasPen, _CurvasPointList.ToArray());
                    }

                    // 画功率曲线  Add  by genhong.hu On 2016-06-02
                    curvasPen = new Pen(Color.Red, 1);
                    if (_PowerPointList != null)
                    {
                        graph.DrawLines(curvasPen, _PowerPointList.ToArray());
                    }
                }
                else // HR原厂商写的  标签
                {
                    _PowerPointList  = new List <Point>();
                    _CurvasPointList = new List <Point>();
                    foreach (I_V_Point oriPoint in OldoriPointArray)
                    {
                        _CurvasPointList.Add(GetPointByOriginal(oriPoint));

                        // add by genhong.hu On 2016-06-02 增加功率曲线
                        P_V_Point pmaxpoint = new P_V_Point();
                        pmaxpoint.Pmax    = oriPoint.Current * oriPoint.Voltage;
                        pmaxpoint.Voltage = oriPoint.Voltage;
                        _PowerPointList.Add(GetPowerPointByOriginal(pmaxpoint));
                    }


                    curvasPen = new Pen(Color.Blue, 1);
                    if (_CurvasPointList != null)
                    {
                        graph.DrawLines(curvasPen, _CurvasPointList.ToArray());
                    }

                    // 画功率曲线  Add  by genhong.hu On 2016-06-02
                    curvasPen = new Pen(Color.Red, 1);
                    if (_PowerPointList != null)
                    {
                        graph.DrawLines(curvasPen, _PowerPointList.ToArray());
                    }
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                //if (pointPen != null) pointPen.Dispose();
                if (curvasPen != null)
                {
                    curvasPen.Dispose();
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// 设置真实的数据点,并根据需要计算插值
        /// </summary>
        /// <param name="oriPointArray">真实的数据点</param>
        /// <param name="evalAll">是否需要计算所有数据点</param>
        public void SetOriginalPoints(I_V_Point[] oriPointArray, bool evalAll)
        {
            OldoriPointArray = oriPointArray;

            //#region 2013-06-03 曲线异常Bug修改,如果倒数第二个点靠近最后一个点,则移除
            I_V_Point[] pointArray = null;
            //if (oriPointArray != null)
            //{
            //    int oriLen = oriPointArray.Length;
            //    if (oriPointArray[oriLen - 2].Current < 0.5)
            //    {
            //        pointArray = new I_V_Point[oriLen - 1];
            //        Array.Copy(oriPointArray, pointArray, oriLen - 1);
            //        pointArray[oriLen - 2].Current = oriPointArray[oriLen - 1].Current;
            //        pointArray[oriLen - 2].Voltage = oriPointArray[oriLen - 1].Voltage;
            //    }
            //    else
            //    {
            //        pointArray = oriPointArray;
            //    }
            //}
            //#endregion

            _OriPointList = new List <Point>();

            _CurvasPointList = new List <Point>();
            _PowerPointList  = new List <Point>();// add by genhong.hu On 2016-06-02 增加功率曲线
            if (oriPointArray == null)
            {
                CleanSpine();
                return;
            }
            if (oriPointArray.Length != 3)
            {
                //MessageBox.Show("RFID标签数据异常,无法显示曲线。");
                //return;
                if (oriPointArray != null)
                {
                    int oriLen = oriPointArray.Length;
                    if (oriPointArray[oriLen - 2].Current < 0.5)
                    {
                        pointArray = new I_V_Point[oriLen - 1];
                        Array.Copy(oriPointArray, pointArray, oriLen - 1);
                        pointArray[oriLen - 2].Current = oriPointArray[oriLen - 1].Current;
                        pointArray[oriLen - 2].Voltage = oriPointArray[oriLen - 1].Voltage;
                    }
                    else
                    {
                        pointArray = oriPointArray;
                    }
                }
            }
            else
            {
                #region ======================================================
                int    PointCount = 100;
                double Voc        = oriPointArray[2].Voltage;
                double Isc        = oriPointArray[0].Current;
                double Vpm        = oriPointArray[1].Voltage;
                double Ipm        = oriPointArray[1].Current;
                pointArray = new I_V_Point[PointCount + 3];
                I_V_Point s1 = new I_V_Point();
                s1.Voltage    = 0;
                s1.Current    = Isc;
                pointArray[0] = s1;


                for (int i = 1; i < PointCount + 1; i++)
                {
                    I_V_Point s2 = new I_V_Point();
                    s2.Voltage    = 0 + (Vpm - 0) / (PointCount + 1) * i;
                    s2.Current    = Isc - (Isc - Ipm) / (PointCount + 1) * i;
                    pointArray[i] = s2;
                }



                I_V_Point s4 = new I_V_Point();
                s4.Voltage = Vpm;
                s4.Current = Ipm;
                I_V_Point s5 = new I_V_Point();
                s5.Voltage = Voc;
                s5.Current = 0;

                pointArray[PointCount + 1] = s4;
                pointArray[PointCount + 2] = s5;
                #endregion
            }
            foreach (I_V_Point oriPoint in pointArray)
            {
                _OriPointList.Add(GetPointByOriginal(oriPoint));
            }
            if (evalAll)
            {
                I_V_Point[] points = MySpline.Spline(pointArray);
                if (points == null)
                {
                    MessageBox.Show("RFID标签数据异常,无法显示曲线。");
                    return;
                }
                foreach (I_V_Point oriPoint in points)
                {
                    _CurvasPointList.Add(GetPointByOriginal(oriPoint));

                    // add by genhong.hu On 2016-06-02 增加功率曲线
                    P_V_Point pmaxpoint = new P_V_Point();
                    pmaxpoint.Pmax    = oriPoint.Current * oriPoint.Voltage;
                    pmaxpoint.Voltage = oriPoint.Voltage;
                    _PowerPointList.Add(GetPowerPointByOriginal(pmaxpoint));
                }
                #region   计算
                //  _CurvasPointList = _OriPointList;
                #endregion

                //2014-03-30 曲线画到电流为0
                Point lastPointToZero = new Point();
                lastPointToZero.X = _CurvasPointList[_CurvasPointList.Count - 1].X;
                lastPointToZero.Y = _CvsRect.Top + _CvsRect.Height;
                _CurvasPointList.Add(lastPointToZero);

                _PowerPointList.Add(lastPointToZero);// add by genhong.hu On 2016-06-02 增加功率曲线
            }
            this.Invalidate();
        }