Пример #1
0
        /// <summary>
        /// 智能控制方案
        /// </summary>
        /// <param name="intePara"></param>
        /// <param name="ecData"></param>
        private void _inteControl(IntePara intePara, IList <int> ecData)
        {
            if (intePara.RangeParaList == null)
            {
                return;
            }
            var count      = intePara.RangeParaList.Count;               //风扇数量
            var fanNo      = intePara.FanNo;                             //风扇号
            var minFanDuty = _checkFanDuty(intePara.MinFanDuty, 100, 2); //最小转速

            for (var i = 0; i < count; i++)
            {
                var rp      = intePara.RangeParaList[i]; //当前遍历标签
                var fanDuty = 0;                         //目标转速
                switch (intePara.ControlType)
                {
                case 1:
                    fanDuty = _checkFanDuty(rp.FanDuty, 100, 2);
                    break;

                case 2:
                    fanDuty = _checkFanDuty(rp.AddPercentage + ecData[0], 100, 2);
                    break;
                }
                var inferiorLimit = rp.InferiorLimit;//当前标签温度下限
                if (i == 0)
                {
                    //若小于最小温度,设置风扇转速为最小值
                    if (ecData[0] < inferiorLimit)
                    {
                        SetFanduty(intePara.FanNo, _parseFanDuty(minFanDuty), false);
                    }
                    else if (_checkLogicalAnd(ecData[0], inferiorLimit, intePara.RangeParaList[i + 1].InferiorLimit))
                    {
                        _compareFanDuty(fanNo, minFanDuty, fanDuty);
                    }
                }
                else if (i != count - 1)
                {
                    if (_checkLogicalAnd(ecData[0], inferiorLimit, intePara.RangeParaList[i + 1].InferiorLimit))
                    {
                        _compareFanDuty(fanNo, minFanDuty, fanDuty);
                    }
                }
                else if (i == count - 1)
                {
                    if (ecData[0] >= inferiorLimit)
                    {
                        _compareFanDuty(fanNo, minFanDuty, fanDuty);
                    }
                }
            }
        }
Пример #2
0
 /// <summary>
 /// 智能调节风扇转速
 /// </summary>
 /// <param name="filePath"></param>
 /// <param name="fanNo"></param>
 /// <returns></returns>
 private static bool _inteFandutyControl(string filePath, int fanNo)
 {
     try
     {
         IntePara intePara = _readXmlFile(filePath, fanNo);
         _setInteFanduty(intePara);
         return(true);
     }
     catch
     {
         return(false);
     }
 }
Пример #3
0
        /// <summary>
        /// 智能调节风扇转速
        /// </summary>
        /// <param name="intePara"></param>
        private void _setInteFanduty(IntePara intePara)
        {
            var ecData = GetTempFanDuty(intePara.FanNo);

            switch (intePara.ControlType)
            {
            case 1:
                _inteControl(intePara, ecData);
                break;

            case 2:
                _inteControl(intePara, ecData);
                break;
            }
        }
Пример #4
0
        public static IntePara ReadXmlFile(string filePath, int fanNo)
        {
            //声明XMLDocument对象
            var doc = new XmlDocument();

            try
            {
                //数据存储结构体
                var inte = new IntePara {
                    FanNo = fanNo
                };
                //范围数据存储结构体列表
                var rangeParaList = new List <RangePara>();
                //加载XML文件
                doc.Load(filePath);
                //获取XML根结点
                var root = doc.SelectSingleNode("ECView");
                //获取根结点属性--智能控速模式号
                var rootXe = (XmlElement)root;
                inte.ControlType = Convert.ToInt32(rootXe?.GetAttribute("Type"));
                //获取下层结点
                var fanList = root?.ChildNodes;
                if (fanList != null)
                {
                    foreach (XmlNode fan in fanList)
                    {
                        //获取下层结点属性--风扇最小转速
                        var fanXe = (XmlElement)fan;
                        inte.MinFanDuty = Convert.ToInt32(fanXe.GetAttribute("MinFanduty"));
                        //获取范围数据
                        var rangeList = fan.ChildNodes;
                        foreach (XmlNode rangeXn in rangeList)
                        {
                            var rangePara = new RangePara();
                            var rangeXe   = (XmlElement)rangeXn;
                            //获取范围号
                            rangePara.RangeNo = Convert.ToInt32(rangeXe.GetAttribute("Num"));
                            //获取范围下限
                            rangePara.InferiorLimit = Convert.ToInt32(rangeXe.GetAttribute("InferiorLimit"));
                            switch (inte.ControlType)
                            {
                            case 1:
                                //控速模式1下直接定义风扇转速
                                rangePara.FanDuty = Convert.ToInt32(rangeXe.GetAttribute("Fanduty"));
                                break;

                            case 2:
                                //控速模式2下为温度+自定义增幅百分比
                                rangePara.AddPercentage = Convert.ToInt32(rangeXe.GetAttribute("AddPercentage"));
                                break;
                            }
                            rangeParaList.Add(rangePara);
                        }
                    }
                }
                inte.RangeParaList = rangeParaList;
                return(inte);
            }
            catch (Exception e)
            {
                Console.WriteLine(@"解析XML出错,原因:" + e.Message);
                return(null);
            }
        }
Пример #5
0
        /// <summary>
        /// 读取XML文件
        /// </summary>
        /// <param name="filePath"></param>
        private static IntePara _readXmlFile(string filePath, int fanNo)
        {
            //声明XMLDocument对象
            XmlDocument doc = new XmlDocument();

            try
            {
                //数据存储结构体
                IntePara inte = new IntePara();
                inte.FanNo = fanNo;
                //范围数据存储结构体列表
                List <RangePara> rangeParaList = new List <RangePara>();
                //加载XML文件
                doc.Load(filePath);
                //获取XML根结点
                XmlNode root = doc.SelectSingleNode("ECView");
                //获取根结点属性--智能控速模式号
                XmlElement rootXe = (XmlElement)root;
                inte.ControlType = Convert.ToInt32(rootXe.GetAttribute("Type"));
                //获取下层结点
                XmlNodeList fanList = root.ChildNodes;
                foreach (XmlNode fan in fanList)
                {
                    //获取下层结点属性--风扇最小转速
                    XmlElement fanXe = (XmlElement)fan;
                    inte.MinFanDuty = Convert.ToInt32(fanXe.GetAttribute("MinFanduty"));
                    //获取范围数据
                    XmlNodeList rangeList = fan.ChildNodes;
                    foreach (XmlNode rangeXn in rangeList)
                    {
                        RangePara  rangePara = new RangePara();
                        XmlElement rangeXe   = (XmlElement)rangeXn;
                        //获取范围号
                        rangePara.RangeNo = Convert.ToInt32(rangeXe.GetAttribute("Num"));
                        //获取范围下限
                        rangePara.InferiorLimit = Convert.ToInt32(rangeXe.GetAttribute("InferiorLimit"));
                        if (inte.ControlType == 1)
                        {
                            //控速模式1下直接定义风扇转速
                            rangePara.FanDuty = Convert.ToInt32(rangeXe.GetAttribute("Fanduty"));
                        }
                        else if (inte.ControlType == 2)
                        {
                            //控速模式2下为温度+自定义增幅百分比
                            rangePara.AddPercentage = Convert.ToInt32(rangeXe.GetAttribute("AddPercentage"));
                        }
                        rangeParaList.Add(rangePara);
                    }
                }
                inte.RangeParaList = rangeParaList;
                return(inte);
            }
            catch (Exception e)
            {
                Console.WriteLine("解析XML出错,原因:" + e.Message);
                return(null);
            }
            finally
            {
                if (doc != null)
                {
                    //释放资源
                    doc = null;
                }
            }
        }
Пример #6
0
 /// <summary>
 /// 智能调节风扇转速
 /// </summary>
 /// <param name="intePara"></param>
 private static void _setInteFanduty(IntePara intePara)
 {
     int[] ecData = GetTempFanDuty(intePara.FanNo);
     if (intePara.ControlType == 1)
     {
         for (int i = 0; i < intePara.RangeParaList.Count; i++)
         {
             if (i == 0)
             {
                 //若小于最小温度,设置风扇转速为最小值
                 if (ecData[0] < intePara.RangeParaList[i].InferiorLimit)
                 {
                     SetFanduty(intePara.FanNo, (int)(intePara.MinFanDuty * 2.55m), false);
                 }
                 else if (ecData[0] >= intePara.RangeParaList[i].InferiorLimit && ecData[0] < intePara.RangeParaList[i + 1].InferiorLimit)
                 {
                     if (intePara.RangeParaList[i].FanDuty < intePara.MinFanDuty)
                     {
                         SetFanduty(intePara.FanNo, (int)(intePara.MinFanDuty * 2.55m), false);
                     }
                     else
                     {
                         SetFanduty(intePara.FanNo, (int)(intePara.RangeParaList[i].FanDuty * 2.55m), false);
                     }
                 }
                 else
                 {
                     continue;
                 }
             }
             else if (i != intePara.RangeParaList.Count - 1)
             {
                 if (ecData[0] >= intePara.RangeParaList[i].InferiorLimit && ecData[0] < intePara.RangeParaList[i + 1].InferiorLimit)
                 {
                     if (intePara.RangeParaList[i].FanDuty < intePara.MinFanDuty)
                     {
                         SetFanduty(intePara.FanNo, (int)(intePara.MinFanDuty * 2.55m), false);
                     }
                     else
                     {
                         SetFanduty(intePara.FanNo, (int)(intePara.RangeParaList[i].FanDuty * 2.55m), false);
                     }
                 }
                 else
                 {
                     continue;
                 }
             }
             else if (i == intePara.RangeParaList.Count - 1)
             {
                 if (ecData[0] >= intePara.RangeParaList[i].InferiorLimit)
                 {
                     if (intePara.RangeParaList[i].FanDuty < intePara.MinFanDuty)
                     {
                         SetFanduty(intePara.FanNo, (int)(intePara.MinFanDuty * 2.55m), false);
                     }
                     else
                     {
                         SetFanduty(intePara.FanNo, (int)(intePara.RangeParaList[i].FanDuty * 2.55m), false);
                     }
                 }
             }
         }
     }
     else if (intePara.ControlType == 2)
     {
         for (int i = 0; i < intePara.RangeParaList.Count; i++)
         {
             if (i == 0)
             {
                 //若小于最小温度,设置风扇转速为最小值
                 if (ecData[0] < intePara.RangeParaList[i].InferiorLimit)
                 {
                     SetFanduty(intePara.FanNo, (int)(intePara.MinFanDuty * 2.55m), false);
                 }
                 else if (ecData[0] > intePara.RangeParaList[i].InferiorLimit && ecData[0] < intePara.RangeParaList[i + 1].InferiorLimit)
                 {
                     if ((intePara.RangeParaList[i].AddPercentage + ecData[0]) < intePara.MinFanDuty)
                     {
                         SetFanduty(intePara.FanNo, (int)(intePara.MinFanDuty * 2.55m), false);
                     }
                     else
                     {
                         SetFanduty(intePara.FanNo, (int)((intePara.RangeParaList[i].AddPercentage + ecData[0]) * 2.55m), false);
                     }
                 }
                 else
                 {
                     continue;
                 }
             }
             else if (i != intePara.RangeParaList.Count - 1)
             {
                 if (ecData[0] > intePara.RangeParaList[i].InferiorLimit && ecData[0] < intePara.RangeParaList[i + 1].InferiorLimit)
                 {
                     if ((intePara.RangeParaList[i].AddPercentage + ecData[0]) < intePara.MinFanDuty)
                     {
                         SetFanduty(intePara.FanNo, (int)(intePara.MinFanDuty * 2.55m), false);
                     }
                     else
                     {
                         SetFanduty(intePara.FanNo, (int)((intePara.RangeParaList[i].AddPercentage + ecData[0]) * 2.55m), false);
                     }
                 }
                 else
                 {
                     continue;
                 }
             }
             else if (i == intePara.RangeParaList.Count - 1)
             {
                 if (ecData[0] >= intePara.RangeParaList[i].InferiorLimit)
                 {
                     if ((intePara.RangeParaList[i].AddPercentage + ecData[0]) < intePara.MinFanDuty)
                     {
                         SetFanduty(intePara.FanNo, (int)(intePara.MinFanDuty * 2.55m), false);
                     }
                     else
                     {
                         SetFanduty(intePara.FanNo, (int)((intePara.RangeParaList[i].AddPercentage + ecData[0]) * 2.55m), false);
                     }
                 }
             }
         }
     }
 }