Hallo Jens,
für den folgenden Zugang nehmen wir mal an, dass es sich um ein spontanes Archiv handelt (so müssen wir nicht prüfen ob die Werte dem Archivzyklus entsprechen).
Zur Vorbereitung brauchen wir VisualStudio (VS) mit unserem Scada.Addin Package (kann man im Marketplace herunterladen).
Zusätzlich noch ein Projekt mit der Variablen "Var1" in einem spontanten Archiv "ARCHIVE1".
Im VS kann man dann ein neues Projekt (Vorlage Editor Wizard) anlegen und die Namespaces
using System.Linq;
using Scada.AddIn.Contracts.Historian;
einbinden.
Im Code muss man sich dann als erstes das Archivobjekt und die entsprechende Variable holen
IRuntimeArchive myArchive = (from X in context.RuntimeArchiveCollection where X.Name == "ARCHIVE1" select X).First();
IRuntimeArchiveVariable myArchiveVariable = (from X in myArchive.VariableCollection where X.Name == "Var1" select X).First();
Danach kann man einen neuen ArchivFilter für dieses Archiv erzeugen und ihn entprechend konfigurieren
IRuntimeArchiveFilter myArchiveFilter = myArchive.FilterCollection.Create();
myArchiveFilter.StartTime = 1508242320;
myArchiveFilter.EndTime = 1508242320+260000;
und unsere Archivvariable dem Filter hinzufügen:
myArchiveFilter.AddVariable(myArchiveVariable);
Dann muss man die Änderungen übernehmen
myArchiveFilter.ApplyChanges();
Und kann das Archiv mit den entsprechenden Filtereinstellungen abfragen
IRuntimeArchiveFilterVariableCollection myArchiveFilterVariables = myArchiveFilter.Query();
Die Collection myArchiveFilterVariables enthält dann die Archivkanäle für die den Filterkriterien entsprechenden Kanäle.
Daraus kann man sich den Kanal für die gesuchte Variable holen
IRuntimeArchiveFilterVariable myArchiveFilterVariable = (from X in myArchiveFilter.FilterVariableCollection where X.ArchiveVariable.Name == myArchiveVariable.Name select X).First();
Und in diesem Kanal kann man neue Werte hinzufügen
IRuntimeArchiveValue myArchiveValue = myArchiveFilterVariable.ArchiveValueCollection.Create();
if (myArchiveValue != null)
{
myArchiveValue.Value = 5;
myArchiveValue.Time = 1508242320;
myArchiveValue.TimeMilliseconds = 0;
myArchiveValue.HigherState = 01;
myArchiveValue.LowerState = 4325376;
myArchiveValue.SetModified();
}
hier können auch mehrere Werte (z.B wie in deinem Fall von einem CSV geparst) erstellt werden.
Danach werden die Änderungen angewandt
myArchiveFilter.ApplyChanges();
und die Werte so ins Archiv geschrieben.
Danach sollte man noch aufräumen und die Objekte - auch den Filter - entsprechend zerstören.
Ich hänge auch noch einen Beispielcode an. Der besseren Übersicht halber, habe ich auf korrekte Fehlerbehandlund etc. verzichtet.