| | |
| | | using IStation.CalcModel; |
| | | using IStation.CalcModel; |
| | | using IStation.Model; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | |
| | | namespace IStation.Calc |
| | | { |
| | | internal partial class ErQuCalcBaseHelper |
| | | { |
| | | protected int _maxOpenPumpCount = 4;//æå¤§å¼æ³µæ°é |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static IStation.Calc.ErQuCalcBaseHelper Build() |
| | | public static IStation.Calc.ErQuCalcBaseHelper Build(IStation.CalcModel.AnaRequest anaRequest) |
| | | { |
| | | return new IStation.Calc.ErQuCalcHelper_2_éå½(); |
| | | if (anaRequest.MaxReservoirLevel != null) |
| | | { |
| | | DateTime? limit_time = GetMaxReservoirLevelTime(anaRequest); |
| | | |
| | | if (limit_time == null) |
| | | { |
| | | var calc = new IStation.Calc.ErQuCalcHelper_2_éå½_宿°´ä½_ä»»ææ¶é´(); |
| | | calc.SetMaxReservoirHeight(anaRequest.MaxReservoirLevel.Value); |
| | | return calc; |
| | | } |
| | | else |
| | | { |
| | | var calc = new IStation.Calc.ErQuCalcHelper_2_éå½_宿°´ä½_æå®æ¶é´(); |
| | | calc.SetMaxReservoirHeight(anaRequest.MaxReservoirLevel.Value, limit_time.Value); |
| | | return calc; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return new IStation.Calc.ErQuCalcHelper_2_éå½_宿°´é(); |
| | | } |
| | | } |
| | | |
| | | private static DateTime? GetMaxReservoirLevelTime(IStation.CalcModel.AnaRequest anaRequest) |
| | | { |
| | | if (string.IsNullOrEmpty(anaRequest.MaxReservoirLevelTime)) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | DateTime time; |
| | | if (DateTime.TryParse(anaRequest.MaxReservoirLevelTime, out time)) |
| | | { |
| | | return time; |
| | | } |
| | | |
| | | if (anaRequest.MaxReservoirLevelTime.Contains(":")) |
| | | { |
| | | var sss = anaRequest.MaxReservoirLevelTime.Split(':'); |
| | | if (sss.Count() == 2) |
| | | { |
| | | int hour = 0; |
| | | int miut = 0; |
| | | if (int.TryParse(sss[0], out hour) && int.TryParse(sss[1], out miut)) |
| | | { |
| | | if (hour < anaRequest.StartTime.Hour) |
| | | return new DateTime(anaRequest.EndTime.Year, anaRequest.EndTime.Month, anaRequest.EndTime.Day, hour, miut, 0); |
| | | else |
| | | return new DateTime(anaRequest.StartTime.Year, anaRequest.StartTime.Month, anaRequest.StartTime.Day, hour, miut, 0); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | int hour = 0; |
| | | if (int.TryParse(anaRequest.MaxReservoirLevelTime, out hour)) |
| | | { |
| | | if (hour < anaRequest.StartTime.Hour) |
| | | return new DateTime(anaRequest.EndTime.Year, anaRequest.EndTime.Month, anaRequest.EndTime.Day, hour, 0, 0); |
| | | else |
| | | return new DateTime(anaRequest.StartTime.Year, anaRequest.StartTime.Month, anaRequest.StartTime.Day, hour, 0, 0); |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | public class RunBlock |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | protected ErQuCalcBaseHelper() |
| | | { |
| | | _calStartTime = DateTime.Now; |
| | | _calEndTime = DateTime.Now.AddDays(1); |
| | | var calStartTime = DateTime.Now; |
| | | _calStartTime = new DateTime(calStartTime.Year, calStartTime.Month, calStartTime.Day, calStartTime.Hour, 0, 0); |
| | | _calEndTime = _calStartTime.AddDays(1); |
| | | } |
| | | public void SetCalcTimeRange(DateTime calStartTime, DateTime calEndTime) |
| | | |
| | | public void SetCalcTimeRange(DateTime calStartTime, DateTime calEndTime,int calcSpaceMinute) |
| | | { |
| | | this._calStartTime = calStartTime; |
| | | this._calEndTime = calEndTime; |
| | | if (calcSpaceMinute <= 1) |
| | | { |
| | | calcSpaceMinute = 10; |
| | | } |
| | | this._calcSpaceMinute = calcSpaceMinute; |
| | | this._calStartTime = new DateTime(calStartTime.Year, calStartTime.Month, calStartTime.Day, calStartTime.Hour, ((int)(calStartTime.Minute/ calcSpaceMinute)) * calcSpaceMinute, 0); |
| | | this._calEndTime = new DateTime(calEndTime.Year, calEndTime.Month, calEndTime.Day, calEndTime.Hour, ((int)(calEndTime.Minute / calcSpaceMinute)) * calcSpaceMinute, 0); |
| | | } |
| | | |
| | | // |
| | | public Action<string> OnShowDebugInfo = null; |
| | | |
| | |
| | | protected IStation.CalcModel.eCalcOptType _clacOptType = CalcModel.eCalcOptType.åç; |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | protected double _stationTotalFlow=0;//便°´æ»é(ä¸ä¸å®æå¼ åä½: å¨) |
| | | |
| | | protected double _flowInTotalFlow = 0;//åæ°´æ»é(ä¸ä¸å®æå¼ åä½: å¨) |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | /// <param name="anaRequest"></param> |
| | | public void SetAnaRequest(IStation.CalcModel.AnaRequest anaRequest) |
| | | { |
| | | this._start_levelæ°´åºæ°´ä½ = anaRequest.CurrentWaterBoxLevel; |
| | | this._startOpenCount = anaRequest.StartOpenCount; |
| | | this._start_levelæ°´åºæ°´ä½ = anaRequest.StartReservoirLevel; |
| | | this._clacOptType = anaRequest.CalcOptType; |
| | | |
| | | if (anaRequest.MinLimitWaterBoxLevel != null && |
| | | anaRequest.MaxLimitWaterBoxLevel != null) |
| | | |
| | | if (anaRequest.IsKnownStartOpenPump) |
| | | { |
| | | this._isHaveLevelLimit = true; |
| | | this._min_levelæ°´åºæ°´ä½ = anaRequest.MinLimitWaterBoxLevel.Value; |
| | | this._max_levelæ°´åºæ°´ä½ = anaRequest.MaxLimitWaterBoxLevel.Value; |
| | | if (anaRequest.StartOpenPumpIndexArray == null) |
| | | {//没æèµå¼å°±æ¯è¡¨ç¤ºä¸ç¥é, 妿é½ä¸å¼æº, èµå¼[] |
| | | this._startOpenPumpCount = -1; |
| | | } |
| | | else |
| | | { |
| | | this._startOpenPumpArray = anaRequest.StartOpenPumpIndexArray; |
| | | this._startOpenPumpCount = anaRequest.StartOpenPumpIndexArray.Count; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | this._startOpenPumpCount = -1; |
| | | } |
| | | |
| | | if (anaRequest.TotalFlowIn != null) |
| | | this._flowInTotalFlow = anaRequest.TotalFlowIn.Value; |
| | | |
| | | if (anaRequest.TotalFlowåæ°´æ»é != null) |
| | | this._stationTotalFlow = anaRequest.TotalFlowåæ°´æ»é.Value; |
| | | this.Initialæ°´åºåæ°(anaRequest); |
| | | |
| | | this.Initialæ°´åºåæ°(anaRequest); |
| | | |
| | | this.SetRiverWaterLevels(anaRequest.WaterLevelsé¿æ±); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®¡ç®æä¼ |
| | | /// </summary> |
| | | /// <param name="TargetFlowTotal"></param> |
| | | /// <param name="error_info"></param> |
| | | /// <returns></returns> |
| | | public virtual List<AnaPrj> CalcOptPrjs(out string error_info) |
| | | public virtual AnaPrj CalcOptPrj(out string error_info) |
| | | { |
| | | error_info = null; |
| | | |
| | | #region æ£æ¥æ°æ® |
| | | |
| | | if (this._calStartTime >= this._calEndTime) |
| | | { |
| | | error_info = "æ¶é´èå´ä¸å¯¹"; |
| | | return null; |
| | | } |
| | | |
| | | |
| | | |
| | | if (this._allPumpInfo == null || this._allPumpInfo.Count() != 5) |
| | | { |
| | | error_info = "æ³µå°æ°ä¸æ£ç¡®"; |
| | |
| | | return null; |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #endregion æ£æ¥æ°æ® |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | List<AnaPrj> listPrj; |
| | | System.Diagnostics.Stopwatch sw2 = new System.Diagnostics.Stopwatch(); |
| | | sw2.Start(); |
| | | // List<AnaPrj> listPrj; |
| | | //System.Diagnostics.Stopwatch sw2 = new System.Diagnostics.Stopwatch(); |
| | | //sw2.Start(); |
| | | |
| | | //è¿ä»£æµ®å¨, ä¸è¦æ¯æ¬¡é½ä»0å¼å§, å¯è½å·®å åéæ´ä¼, å颿¤åéä¹è¦è¿ä»£ |
| | | int dd_minute = 0; |
| | | // |
| | | CalcTimeData(dd_minute); |
| | | |
| | | // çæ£å¼å§åæ |
| | | listPrj = CalcOptPrjsCore(); |
| | | sw2.Stop(); |
| | | // çæ£å¼å§åæ |
| | | var optPrj = CalcOptPrjsCore(); |
| | | //sw2.Stop(); |
| | | |
| | | |
| | | var seconds = (int)(sw2.ElapsedMilliseconds / 1000); |
| | | //var seconds = (int)(sw2.ElapsedMilliseconds / 1000); |
| | | //æ
æå 1åé |
| | | //if (this._calcSpaceMinute >= 5) |
| | | //{ |
| | |
| | | // Thread.Sleep(20 * 1000); |
| | | //} |
| | | |
| | | if (listPrj == null || listPrj.Count == 0) |
| | | if (optPrj == null) |
| | | { |
| | | error_info = "æªæ¾å°åéçè°åº¦æ¹æ¡"; |
| | | return null; |
| | | } |
| | | foreach(var prj in listPrj) |
| | | { |
| | | prj.StartTime = this._calStartTime; |
| | | prj.EndTime = this._calEndTime; |
| | | } |
| | | |
| | | optPrj.StartTime = this._calStartTime; |
| | | optPrj.EndTime = this._calEndTime; |
| | | |
| | | OnShowDebugInfo.Invoke(string.Format("计ç®ç¨æ¶: {0} ç§", seconds)); |
| | | // OnShowDebugInfo.Invoke(string.Format("计ç®ç¨æ¶: {0} ç§", seconds)); |
| | | |
| | | return listPrj; |
| | | return optPrj; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | protected virtual List<AnaPrj> CalcOptPrjsCore() |
| | | protected virtual AnaPrj CalcOptPrjsCore() |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | protected ulong _totalCalcCount = 0;//è®¡ç®æ¬¡æ° |
| | | |
| | | protected ulong _totalCacheCount = 0;//ç¼åä½¿ç¨æ¬¡æ° |
| | | |
| | | |
| | | |
| | | //æ¶é´èå´ |
| | | protected DateTime _calStartTime; |
| | | protected DateTime _calEndTime; |
| | | |
| | | protected DateTime _calEndTime; |
| | | |
| | | //æ³µä¿¡æ¯ |
| | | internal List<IStation.CalcModel.PumpCurveInfo> _allPumpInfo = null; |
| | | |
| | | public void SetPumpInfo(List<IStation.CalcModel.PumpInfo> allPumpInfo) |
| | | { |
| | | if (allPumpInfo == null) |
| | | return; |
| | | |
| | | this._allPumpInfo = new List<CalcModel.PumpCurveInfo>(); |
| | | for(int k=0;k<allPumpInfo.Count;k++) |
| | | for (int k = 0; k < allPumpInfo.Count; k++) |
| | | { |
| | | var pump = allPumpInfo[k]; |
| | | |
| | |
| | | |
| | | groupPoints.Add(new GroupPoint() { Q = q, H = h, E = eta, P = p }); |
| | | } |
| | | pumpCurveInfo.GroupPoints = groupPoints; |
| | | pumpCurveInfo.GroupPoints = groupPoints; |
| | | |
| | | _allPumpInfo.Add(pumpCurveInfo); |
| | | } |
| | | } |
| | | |
| | | |
| | | //è®¡ç®æ¶é´è·¨åº¦ |
| | | protected int _calcSpaceMinute = 5; |
| | | public int CalcSpaceMinute { get { return _calcSpaceMinute; } set { _calcSpaceMinute = value; } } |
| | | |
| | | public int CalcSpaceMinute |
| | | { get { return _calcSpaceMinute; } set { _calcSpaceMinute = value; } } |
| | | |
| | | /// <summary> |
| | | /// ä¸é´æå¤åæ¢æ¬¡æ° |
| | | /// </summary> |
| | | protected int _maxPumpSwitchCount = 3; |
| | | public int MaxPumpSwitchCount { get { return _maxPumpSwitchCount; } set { _maxPumpSwitchCount = value; } } |
| | | |
| | | public int MaxPumpSwitchCount |
| | | { get { return _maxPumpSwitchCount; } set { _maxPumpSwitchCount = value; } } |
| | | |
| | | /// <summary> |
| | | /// ä¸è®¸åæ³µæ¶é´ |
| | | /// </summary> |
| | | protected List<IStation.CalcModel.TimeRange> _limitSwitchPumpTimes = null; |
| | | public List<IStation.CalcModel.TimeRange> LimitSwitchPumpTimes { get { return _limitSwitchPumpTimes; } set { _limitSwitchPumpTimes = value; } } |
| | | |
| | | public List<IStation.CalcModel.TimeRange> LimitSwitchPumpTimes |
| | | { |
| | | get { return _limitSwitchPumpTimes; } |
| | | set |
| | | { |
| | | _limitSwitchPumpTimes = value; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä¸è®¸å¼æ³µæ¶é´ |
| | | /// </summary> |
| | | protected List<IStation.CalcModel.TimeRange> _limitOpenPumpTimes = null; |
| | | public List<IStation.CalcModel.TimeRange> LimitOpenPumpTimes { get { return _limitOpenPumpTimes; } set { _limitOpenPumpTimes = value; } } |
| | | |
| | | |
| | | |
| | | public List<IStation.CalcModel.TimeRange> LimitOpenPumpTimes |
| | | { |
| | | get { return _limitOpenPumpTimes; } |
| | | set |
| | | { |
| | | _limitOpenPumpTimes = value; |
| | | } |
| | | } |
| | | |
| | | #region æ³µåºå£åå |
| | | |
| | |
| | | return 0.068 * 100; |
| | | //return _outBoxLevels.First().Level; |
| | | } |
| | | #endregion |
| | | |
| | | #endregion æ³µåºå£åå |
| | | |
| | | /// <summary> |
| | | /// è·åæ¬ç¨(ææ¶ç®åå¤ç) |
| | |
| | | // } |
| | | //} |
| | | |
| | | |
| | | m1 = m1 - dropHeight; |
| | | |
| | | |
| | | return (m2 - m1); |
| | | } |
| | | |
| | | //çµè´¹ |
| | | protected List<ElecPriceMonthSetting> _elecPrice = null; |
| | | public List<ElecPriceMonthSetting> ElecPrice { get => _elecPrice; set => _elecPrice = value; } |
| | | public double CalcMoney(DateTime time,double power) |
| | | { |
| | | protected List<ElecPriceMonthSetting> _elecPrice = null; |
| | | |
| | | public List<ElecPriceMonthSetting> ElecPrice { get => _elecPrice; set => _elecPrice = value; } |
| | | |
| | | public double CalcMoney(DateTime time, double power) |
| | | { |
| | | var month = time.Month; |
| | | var hour = time.Hour; |
| | | var monthSettings = _elecPrice.Find(x => month >= x.StartMonth && month <= x.EndMonth); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// æå°å¼æ³µæ¶é´ |
| | | /// </summary> |
| | | public int MinOpenPumpMinute = 30; |
| | | |
| | | protected int _minTimeCountOpenPump = 0; |
| | | public int MinSwitchPumpMinute = 30; |
| | | protected int _minTimeCountSwitch = 0; |
| | |
| | | /// <summary> |
| | | /// åå§å弿ºå°æ° |
| | | /// </summary> |
| | | protected int _startOpenCount = -1; |
| | | public int StartOpenCount { get => _startOpenCount; set => _startOpenCount = value; } |
| | | protected int _startOpenPumpCount = -1; |
| | | |
| | | protected List<int> _startOpenPumpArray = null; |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | protected bool isDispDebug = false; |
| | | |
| | | public bool IsDispDebug { get => isDispDebug; set => isDispDebug = value; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | /// <param name="prj"></param> |
| | | /// <returns></returns> |
| | |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | } |