/// <summary>
        /// Get the temperature sequence from the database
        /// </summary>
        /// <param name="SequenceName">温度序列名称</param>
        /// <param name="SequenceInstance">获取到的温度序列实例</param>
        /// <returns></returns>
        public bool GetTemperatureSequence(string SequenceName, out CTemperatureSequence SequenceInstance)
        {
            SequenceInstance = new CTemperatureSequence();

            bool ret = false;

            using (MySqlCommand cmd = new MySqlCommand()
            {
                CommandTimeout = COMMAND_TIMEOUT
            })
            {
                try
                {
                    if (Open())
                    {
                        cmd.Connection  = conn;
                        cmd.CommandText = "SELECT `name`, `order`, `temper`, `consume`, `add_time` FROM `temperature_sequence` WHERE `name` = '" + SequenceName + "' AND `using`='E' ORDER BY `order` ASC";
                        MySqlDataReader dr = cmd.ExecuteReader();
                        if (dr.HasRows)
                        {
                            while (dr.Read())
                            {
                                CTemperatureSequenceKeyPoint p = new CTemperatureSequenceKeyPoint(Convert.ToDouble(dr["temper"]), Convert.ToInt16(dr["consume"]));
                                SequenceInstance.Add(p);
                            }
                        }

                        if (SequenceInstance.Count == 0)
                        {
                            SequenceInstance = null;
                        }
                        else
                        {
                            SequenceInstance.SequenceName = SequenceName;
                        }

                        ret = true;
                    }
                    else
                    {
                        ret = false;
                    }
                }
                catch (Exception ex)
                {
                    strLastError = ex.Message;
                    ret          = false;
                }
            }

            Close();
            return(ret);
        }
        private static void OnPresettedSequenceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            StepAreaAndLineChart owner = d as StepAreaAndLineChart;

            /*
             * 重新生成一个CTemperatureSequence对象,这个对象和传入的对象区别是:
             * 重新生成的CTemperatureSequence对象会在尾部多加一个Point,这个Point用来
             * 正确产生Step Series的最后一个横阶梯
             */

            CTemperatureSequence seq;

            if (e.NewValue == null)
            {
                seq = new CTemperatureSequence();
            }
            else
            {
                seq = ((CTemperatureSequence)e.NewValue).Clone() as CTemperatureSequence;
                if (seq.Count > 0)
                {
                    /* 这里在最后加入一个Point用来修正Step Chart的View */
                    CTemperatureSequenceKeyPoint point = seq[seq.Count - 1];
                    seq.Add(new CTemperatureSequenceKeyPoint()
                    {
                        HoldTime          = 0,
                        TargetTemperature = point.TargetTemperature
                    });
                }
            }
            owner._SeriesSequence.DataSource = seq;

            /* 更新实时温度曲线的描点间隔 */
            if (seq != null && seq.Count > 0 && owner.RealtimeTemperatureCollection != null)
            {
                owner.RealtimeTemperatureCollection.TotalTime = owner.PresettedSequence.TotalTime;
            }
        }