/// <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); } } } }
/// <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); } }
/// <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; } }
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); } }
/// <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; } } }
/// <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); } } } } } }