4 using System.Collections.Generic;
8 using System.Threading.Tasks;
53 List<double> Velocity,
54 List<double> Gradient,
55 out List<VehicleResult> VehicleResultsOrg,
56 bool fleetMix =
false,
57 string PHEMDataV =
"V4",
58 string CommentPref =
"c")
63 List<VehicleResult> _VehicleResult =
new List<VehicleResult>();
71 if ((VEH.LastIndexOf(
@"\")) >= 0)
72 _DataPath = VEH.Substring(0, VEH.LastIndexOf(
@"\"));
74 _DataPath = Assembly.GetExecutingAssembly().Location.Substring(0, Assembly.GetExecutingAssembly().Location.LastIndexOf(
@"\")) +
@"\Default Vehicles\" + Helper.
PHEMDataV;
89 VehicleResultsOrg = null;
95 VehicleResultsOrg = null;
105 VehicleResultsOrg = null;
113 if (!DataInput.
GetCEP(_DataPath, Helper))
115 VehicleResultsOrg = null;
121 for (i = 1; i <= Time.Count - 1; i++)
124 acc = (Velocity[i] - Velocity[i - 1]) / (Time[i] - Time[i - 1]);
133 if (Helper.
ErrMsg != null)
135 VehicleResultsOrg = null;
139 VehicleResultsOrg = _VehicleResult;
149 out List<VehicleResult> VehicleResultsOrg,
150 bool fleetMix =
false,
151 string PHEMDataV =
"V4",
152 string CommentPref =
"c")
155 List<VehicleResult> _VehicleResult =
new List<VehicleResult>();
156 VehicleResultsOrg = _VehicleResult;
161 if ((VEH.LastIndexOf(
@"\")) >= 0)
162 _DataPath = VEH.Substring(0, VEH.LastIndexOf(
@"\"));
164 _DataPath = Assembly.GetExecutingAssembly().Location.Substring(0, Assembly.GetExecutingAssembly().Location.LastIndexOf(
@"\")) +
@"\Default Vehicles\" + Helper.
PHEMDataV;
171 Helper.
gClass =
"AggClass_" + VEH;
179 VehicleResultsOrg = null;
183 if (!DataInput.
GetFleetCEP(_DataPath, VEH, Helper))
185 VehicleResultsOrg = null;
195 VehicleResultsOrg = null;
203 if (!DataInput.
GetCEP(_DataPath, Helper))
205 VehicleResultsOrg = null;
217 VehicleResultsOrg = _VehicleResult;
223 public bool ExportData(
string path,
string vehicle, List<VehicleResult> _VehicleResult)
225 if (path == null || vehicle == null || _VehicleResult == null || _VehicleResult.Count == 0)
return false;
228 StringBuilder allLines =
new StringBuilder();
229 string lineEnding =
"\r\n";
231 allLines.AppendLine(
"Vehicletype: ," + vehicle);
232 allLines.AppendLine(
"Time, Speed, Gradient, Accelaration, Engine power raw, P_pos, P_norm_rated, P_norm_drive, FC, FC el., CO2, NOx, CO, HC, PM");
233 allLines.AppendLine(
"[s], [m/s], [%], [m/s^2], [kW], [kW], [-], [-], [g/h], [kWh/h], [g/h], [g/h], [g/h], [g/h], [g/h]");
238 allLines.Append(Result.
Time.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
239 allLines.Append(Result.
Speed.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
240 allLines.Append(Result.
Grad.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
241 allLines.Append(Result.
Accelaration.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
242 allLines.Append(Result.
Power.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
243 allLines.Append(Result.
PPos.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
244 allLines.Append(Result.
PNormRated.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
245 allLines.Append(Result.
PNormDrive.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
246 allLines.Append(Result.
EmissionData.
FC.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
247 allLines.Append(Result.
EmissionData.
FCel.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
248 allLines.Append(Result.
EmissionData.
CO2.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
249 allLines.Append(Result.
EmissionData.
NOx.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
250 allLines.Append(Result.
EmissionData.
CO.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
251 allLines.Append(Result.
EmissionData.
HC.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
252 allLines.Append(Result.
EmissionData.
PM.ToString(
"0.0000", CultureInfo.InvariantCulture) + lineEnding);
256 if (path.IndexOf(
".", 0) < 0)
258 path = path +
".sta";
262 StreamWriter file =
new StreamWriter(path);
263 file.WriteLine(allLines);
275 if (path == null || vehicle == null || cycle == null || _VehicleResult == null)
return false;
276 StringBuilder allLines =
new StringBuilder();
278 if (path.IndexOf(
".", 0) < 0)
280 path = path +
".erg";
283 if (!File.Exists(path))
286 allLines.AppendLine(
"PHEMLight Results");
287 allLines.AppendLine(
"");
288 allLines.AppendLine(
"Vehicle, Cycle, Time, Speed, Gradient, Accelaration, Engine power raw, P_pos, P_norm_rated, P_norm_drive, FC, FC el., CO2, NOx, CO, HC, PM");
289 allLines.AppendLine(
"[-], [-], [s], [km/h], [%], [m/s^2], [kW], [kW], [-], [-], [g/km], [kWh/km], [g/km], [g/km], [g/km], [g/km], [g/km]");
293 allLines.Append(vehicle +
",");
294 allLines.Append(cycle +
",");
295 allLines.Append(_VehicleResult.
Time.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
296 allLines.Append(_VehicleResult.
Speed.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
297 allLines.Append(_VehicleResult.
Grad.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
298 allLines.Append(_VehicleResult.
Accelaration.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
299 allLines.Append(_VehicleResult.
Power.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
300 allLines.Append(_VehicleResult.
PPos.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
301 allLines.Append(_VehicleResult.
PNormRated.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
302 allLines.Append(_VehicleResult.
PNormDrive.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
303 allLines.Append(_VehicleResult.
EmissionData.
FC.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
304 allLines.Append(_VehicleResult.
EmissionData.
FCel.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
305 allLines.Append(_VehicleResult.
EmissionData.
CO2.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
306 allLines.Append(_VehicleResult.
EmissionData.
NOx.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
307 allLines.Append(_VehicleResult.
EmissionData.
CO.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
308 allLines.Append(_VehicleResult.
EmissionData.
HC.ToString(
"0.0000", CultureInfo.InvariantCulture) +
",");
309 allLines.Append(_VehicleResult.
EmissionData.
PM.ToString(
"0.0000", CultureInfo.InvariantCulture));
314 StreamWriter file =
new StreamWriter(path,
true);
315 file.WriteLine(allLines);
329 double sum_speed = 0;
331 double sum_power = 0;
333 double sum_pNormRated = 0;
334 double sum_pNormDrive = 0;
344 if (_VehicleResult == null || _VehicleResult.Count == 0)
return new VehicleResult(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
349 sum_speed += Result.
Speed * 3.6;
350 sum_power += Result.
Power;
351 if (Result.
PPos > 0) { sum_pPos += Result.
PPos; }
352 sum_grad += Result.
Grad;
366 sum_time = _VehicleResult[_VehicleResult.Count - 1].Time - _VehicleResult[0].Time;
367 sum_power /= _VehicleResult.Count;
368 sum_pPos /= _VehicleResult.Count;
369 sum_grad /= _VehicleResult.Count;
370 sum_pNormRated /= _VehicleResult.Count;
371 sum_pNormDrive /= _VehicleResult.Count;
372 sum_acc /= _VehicleResult.Count;
376 sum_fcel /= sum_speed;
377 sum_cO2 /= sum_speed;
378 sum_nOx /= sum_speed;
393 sum_speed /= _VehicleResult.Count;
417 #region CreateVehicleStateData 426 double speed = Math.Max(inputSpeed, 0);
437 double power = currCep.
CalcPower(speed, acc, Gradient);
467 double decelCoast = currCep.
GetDecelCoast(speed, acc, Gradient);
470 if (acc >= decelCoast)
482 currCep.
GetCO2Emission(currCep.
GetEmission(
"FC", power, speed, Helper), currCep.
GetEmission(
"CO", power, speed, Helper), currCep.
GetEmission(
"HC", power, speed, Helper),
Helper),
double GetEmission(const std::string &pollutant, double power, double speed, Helpers *VehicleClass)
bool setclass(const std::string &VEH)
bool GetFleetCEP(string DataPath, string AggClass, Helpers Helper)
bool GetCEP(const std::vector< std::string > &DataPath, Helpers *Helper)
bool ExportData(string path, string vehicle, List< VehicleResult > _VehicleResult)
bool ReadFleetShares(string DataPath, Helpers Helper)
double GetDecelCoast(double speed, double acc, double gradient)
double CalcEngPower(double power)
VehicleResult GenerateSumData(List< VehicleResult > _VehicleResult)
bool ExportSumData(string path, string vehicle, string cycle, VehicleResult _VehicleResult)
static const std::string strBEV
Dictionary< string, CEP > CEPS
EmissionData EmissionData
double CalcPower(double speed, double acc, double gradient)
static VehicleResult CreateVehicleStateData(Helpers Helper, CEP currCep, double time, double inputSpeed, double inputAcc, double Gradient=0)
bool CALC_Single(string VEH, double Time, double Velocity, double acc, double Gradient, out List< VehicleResult > VehicleResultsOrg, bool fleetMix=false, string PHEMDataV="V4", string CommentPref="c")
double GetCO2Emission(double _FC, double _CO, double _HC, Helpers *VehicleClass)
bool CALC_Array(string VEH, List< double > Time, List< double > Velocity, List< double > Gradient, out List< VehicleResult > VehicleResultsOrg, bool fleetMix=false, string PHEMDataV="V4", string CommentPref="c")