private RealtimeWindTurbineRecord GenerateRegularRealtimeRecord(bool stopWake) { var currentRecords = ringBuffer.ToList(); double windDirection = currentRecords.Select(x => x.OverallWindDirection).Average() * gen.GetRandomNumber(0.9, 1.1); var windSpeed = currentRecords.Select(x => x.WindSpeedAverage).Average() * gen.GetRandomNumber(0.9, 1.1); double turbineSpeed = windSpeed * gen.GetRandomNumber(0.25, 1.75); if (stopWake) { turbineSpeed = windSpeed * gen.GetRandomNumber(0.97, 1.03); windDirection = gen.GetRandomNumber(40.0, 45.0); } var generatorSpeed = gen.GetGeneratorSpeed(windSpeed); var activePower = gen.GetGeneratorActivePower(windSpeed); var toReturn = new RealtimeWindTurbineRecord { RecordId = Guid.NewGuid(), TurbineId = 15443, TurbineGuid = TurbineGuid, GearboxOilLevel = currentRecords.Select(x => x.GearboxOilLevel).Average() * gen.GetRandomNumber(0.95, 1.05), GearboxOilTemp = currentRecords.Select(x => x.GearboxOilTemp).Average() * gen.GetRandomNumber(0.95, 1.05), GeneratorActivePower = gen.GetGeneratorActivePower(windSpeed), GeneratorSpeed = generatorSpeed, GeneratorTemp = gen.GetGeneratorStatorTemp(generatorSpeed), GeneratorTorque = gen.GetGeneratorTorque(generatorSpeed, activePower), GridFrequency = gen.GetGridFrequency(activePower), GridVoltage = gen.GetVoltage(activePower), HydraulicOilPressure = gen.GetHydraulicOilPressure(), NacelleAngle = gen.GetNacelleAngle(windDirection), PitchAngle = gen.GetPitchAngle(windSpeed), Vibration = gen.GetVibration(windSpeed), WindSpeedAverage = windSpeed, Precipitation = gen.GetRandomBool(20), WindTempAverage = gen.GetRandomNumber(-10.0, 30), OverallWindDirection = windDirection, TurbineWindDirection = windDirection * gen.GetRandomNumber(0.97, 1.03), TurbineSpeedAverage = turbineSpeed, WindSpeedStdDev = gen.CalculateStandardDeviation(ringBuffer.ToList().Select(x => x.WindSpeedAverage).TakeLast(10)), TurbineSpeedStdDev = gen.CalculateStandardDeviation(ringBuffer.ToList().Select(x => x.TurbineSpeedAverage).TakeLast(10)), Timestamp = DateTime.Now }; ringBuffer.PushFront(toReturn); return(toReturn); }