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