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
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