diff --git a/Basics/Classes/BufferedSamplesTable.cs b/Basics/Classes/BufferedSamplesTable.cs index 920a3c5237f8d4cc4f7c4100bd86ebcda3447995..694f82971083a403620651b593462af35d473b4a 100644 --- a/Basics/Classes/BufferedSamplesTable.cs +++ b/Basics/Classes/BufferedSamplesTable.cs @@ -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); diff --git a/Basics/Classes/DataRepository.cs b/Basics/Classes/DataRepository.cs index 55e798750c8d83f1aac34d563a2803719d29b59e..74e852a8159c882ef98075f9f68935d91de8e6c2 100644 --- a/Basics/Classes/DataRepository.cs +++ b/Basics/Classes/DataRepository.cs @@ -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)) diff --git a/Basics/Classes/FileSamplesTable.cs b/Basics/Classes/FileSamplesTable.cs index f24b28d078dfb6258bb07a0bad3e54dccdd8af9d..18292d918ee0a2453239ff0f674810645ea64dc9 100644 --- a/Basics/Classes/FileSamplesTable.cs +++ b/Basics/Classes/FileSamplesTable.cs @@ -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); } diff --git a/Basics/Classes/NewValuesEventArgs.cs b/Basics/Classes/NewValuesEventArgs.cs index 3291f7c9b9dbb5d5843bfcda9841497432b63665..bb9ce52d7dcfdf6a7fadba8e1b183f0cfca50b02 100644 --- a/Basics/Classes/NewValuesEventArgs.cs +++ b/Basics/Classes/NewValuesEventArgs.cs @@ -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; } } } diff --git a/Basics/Interfaces/IDataRepositorry.cs b/Basics/Interfaces/IDataRepositorry.cs index b82485c5f7641bfa01199d07b8899eb132c74215..da6095f5909858cce16e86946fe05842a464c7e3 100644 --- a/Basics/Interfaces/IDataRepositorry.cs +++ b/Basics/Interfaces/IDataRepositorry.cs @@ -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. diff --git a/Basics/Interfaces/ISamplesStorage.cs b/Basics/Interfaces/ISamplesStorage.cs index ce6d82c0ec39865c137b9f5dbd5500024f7912cb..c3515a5c176f6cb1d1573c2b5637b99e9ad63441 100644 --- a/Basics/Interfaces/ISamplesStorage.cs +++ b/Basics/Interfaces/ISamplesStorage.cs @@ -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. diff --git a/FmuTools/FmuTools.csproj b/FmuTools/FmuTools.csproj index 4ac7a25e29a44a95e1eb3880638f32f80e22ab17..2297564292de29f5c30235fe14dfdad9df552fef 100644 --- a/FmuTools/FmuTools.csproj +++ b/FmuTools/FmuTools.csproj @@ -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> diff --git a/LocalMode/FmuInstance.cs b/LocalMode/FmuInstance.cs index ec0c084c2ceaf0723489fb97cfb6e63106dc63a0..3f3ebb0c36a09e23d804a1cdba6cb554cacb5492 100644 --- a/LocalMode/FmuInstance.cs +++ b/LocalMode/FmuInstance.cs @@ -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()