Skip to content
Snippets Groups Projects
Commit b6536fdc authored by Jonas Gesenhues's avatar Jonas Gesenhues
Browse files

-Fixed bug of creating export data table

-changed channel valueRef and value collections from IEnumerable to IList to ensure same corresponding orders
parent 025d7c0b
Branches
Tags
No related merge requests found
......@@ -22,7 +22,7 @@ namespace ModeliChart.Basics
fileStorage = new FileSamplesTable(valueRefs);
}
public void AddSamples(double time, IEnumerable<uint> valueRefs, IEnumerable<double> values)
public void AddSamples(double time, IList<uint> valueRefs, IList<double> values)
{
buffer.AddSamples(time, valueRefs, values);
fileStorage.AddSamples(time, valueRefs, values);
......
......@@ -21,7 +21,7 @@ namespace ModeliChart.Basics
this.createStorage = createStorage;
}
public void AddValues(string modelInstanceName, double time, IEnumerable<uint> valueRefs, IEnumerable<double> values)
public void AddValues(string modelInstanceName, double time, IList<uint> valueRefs, IList<double> values)
{
// Create new storage if needed
if (!storages.ContainsKey(modelInstanceName))
......
......@@ -25,6 +25,7 @@ namespace ModeliChart.Basics
// Efficient access via dictionaries
private readonly Dictionary<uint, int> posByValueRef;
private readonly int bufferSize;
double time_lastWrite;
/// <summary>
/// The valueRefs must be known in advance, since calculations depend on a fixed number of channels.
......@@ -130,18 +131,19 @@ namespace ModeliChart.Basics
/// <param name="time"></param>
/// <param name="valueRefs"></param>
/// <param name="values"></param>
public void AddSamples(double time, IEnumerable<uint> valueRefs, IEnumerable<double> values)
public void AddSamples(double time, IList<uint> valueRefs, IList<double> values)
{
// Buffer = Timestamp + values
var buffer = new double[bufferSize];
var zipped = from valueRef in valueRefs
where posByValueRef.ContainsKey(valueRef)
from value in values
join value in values on valueRefs.IndexOf(valueRef) equals values.IndexOf(value)
select (valueRef, value);
foreach (var (valueRef, value) in zipped)
{
SetBufferValue(buffer, valueRef, value);
}
time_lastWrite = time;
SetBufferTIme(buffer, time);
// Append to the writer buffer
writeCache.Add(buffer);
......@@ -184,6 +186,10 @@ namespace ModeliChart.Basics
Buffer.BlockCopy(buffer, 0, doubleBuffer, 0, buffer.Length);
var time = GetBufferTime(doubleBuffer);
// Only add data that is requested
if (endTime==0)
{
endTime = time_lastWrite;
}
if (time >= startTime && time <= endTime)
{
// Add new row to table
......@@ -191,7 +197,8 @@ namespace ModeliChart.Basics
row[timeColumn] = time;
foreach (var channel in channels)
{
row[channel.Name] = GetBufferValue(doubleBuffer, channel.ValueRef);
double val = GetBufferValue(doubleBuffer, channel.ValueRef);
row[channel.Name] = val;
}
table.Rows.Add(row);
}
......
......@@ -7,7 +7,7 @@ namespace ModeliChart.Basics
{
public string ModelInstanceName { get; set; }
public double Time { get; set; }
public IEnumerable<uint> ValueRefs { get; set; }
public IEnumerable<double> Values { get; set; }
public IList<uint> ValueRefs { get; set; }
public IList<double> Values { get; set; }
}
}
......@@ -19,7 +19,7 @@ namespace ModeliChart.Basics
/// <param name="time"></param>
/// <param name="valueRefs"></param>
/// <param name="values"></param>
void AddValues(string modelInstanceName, double time, IEnumerable<uint> valueRefs, IEnumerable<double> values);
void AddValues(string modelInstanceName, double time, IList<uint> valueRefs, IList<double> values);
/// <summary>
/// Retrieves the values of one channel which are stored in memory.
......
......@@ -16,7 +16,7 @@ namespace ModeliChart.Basics
/// <param name="time"></param>
/// <param name="valueRefs">Ordered IEnumerable of the channels value-references.</param>
/// <param name="values">Ordered IEnumerable of the values that belong to the valueRefs.</param>
void AddSamples(double time, IEnumerable<uint> valueRefs, IEnumerable<double> values);
void AddSamples(double time, IList<uint> valueRefs, IList<double> values);
/// <summary>
/// Get the buffered samples or one specific channel.
......
......@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ModeliChart.FmuTools</RootNamespace>
<AssemblyName>FmuTools</AssemblyName>
<TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
......
......@@ -31,7 +31,7 @@ namespace ModeliChart.LocalMode
private readonly Dictionary<uint, int> realVrPos = new Dictionary<uint, int>();
private readonly Dictionary<uint, int> boolVrPos = new Dictionary<uint, int>();
// Order: Int-Real-Bool !!!
private readonly IEnumerable<uint> concatenatedVrs;
private readonly IList<uint> concatenatedVrs;
public string Name { get; private set; }
......@@ -51,7 +51,7 @@ namespace ModeliChart.LocalMode
intVrs = FmuChannels.GetIntVrs(model.Channels).Distinct().ToArray();
realVrs = FmuChannels.GetRealVrs(model.Channels).Distinct().ToArray();
boolVrs = FmuChannels.GetBoolVrs(model.Channels).Distinct().ToArray();
concatenatedVrs = intVrs.Concat(realVrs).Concat(boolVrs);
concatenatedVrs = intVrs.Concat(realVrs).Concat(boolVrs).ToList();
intValues = new int[intVrs.Length];
realValues = new double[realVrs.Length];
boolValues = new bool[boolVrs.Length];
......@@ -203,7 +203,7 @@ namespace ModeliChart.LocalMode
}
}
internal (IEnumerable<uint> ValueRefs, IEnumerable<double> Values) GetCurrentValues()
internal (IList<uint> ValueRefs, IList<double> Values) GetCurrentValues()
{
// Update local values from fmu
fmu.GetInteger(intVrs, intValues);
......@@ -214,7 +214,7 @@ namespace ModeliChart.LocalMode
.Select(i => Convert.ToDouble(i))
.Concat(realValues)
.Concat(boolValues.Select(b => Convert.ToDouble(b)));
return (concatenatedVrs, values);
return (concatenatedVrs, values.ToList());
}
public void Dispose()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment