using IStation.Model;
namespace IStation.Test
{
public class StationTotalFlowPressureHelper
{
///
/// 绑定数据
///
public static void Start(int stationIndex = 1)
{
var projectId = 661070185922629;
IStation.SettingsD.Project.ID = projectId;
var monitorDataSourcesId = 663976941449285; // 2024 - 202504
var stationId = 462958406303813;
if (stationIndex > 1)
{
stationIndex = 2;
stationId = 462958422204485;
}
var bll = new BLL.StationSignalRecordPacket();
var ptFilterList = new List();
var packets = bll.Get(monitorDataSourcesId, stationId);
var ptList = new List();
var records = packets.SelectMany(x => x.StationSignalRecords).ToList();
foreach (var x in records)
{
if (x.TotalPressure > 0 && x.TotalFlow > 0)
{
ptList.Add(new CurvePtViewModel(x.TotalFlow, x.TotalPressure));
}
}
ptFilterList = Filter(ptList);
var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "stationcsv");
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(fullPath);
}
string filePath = Path.Combine(fullPath, $"{stationIndex}_flow_pressure.csv");
CsvHelper.ExportToCsv(ptFilterList, filePath);
Console.WriteLine("ok");
Console.ReadKey();
}
public static List Filter(List ptList)
{
var pressures = ptList.Select(p => p.Y).ToList();
// 计算统计量
var (mean, stdDev) = DynamicThresholdProcessorHelper.CalculateStats(pressures);
double skewness = DynamicThresholdProcessorHelper.CalculateSkewness(pressures);
// 动态调整σ倍数
double sigmaMultiplier = DynamicThresholdProcessorHelper.CalculateSigmaMultiplier(skewness);
sigmaMultiplier = 3;//目前默认 标准差
// 计算边界
double lower = mean - sigmaMultiplier * stdDev;
double upper = mean + sigmaMultiplier * stdDev;
return ptList.Where(p => p.Y >= lower && p.Y <= upper).ToList();
}
}
}