Mediante il driver iTools® SqlArchiveStore è possibile archiviare i valori letti mediante uno tra i tanti protocolli disponibili nel framework iTools® su un database SqlServer. Questo tipo di driver consente di creare un archivio contenente le informazioni storiche delle “Variable” iTools®.
Di seguito un esempio che mostra la configurazione di un driver in archiviazione mediante SqlServer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
using System; using System.Collections.Generic; using System.Text; namespace TestSqlArchiveStore { using IToolS.Components; using IToolS.Components.Communication; using IToolS.Components.IOServers; using IToolS.Data; using IToolS.Data.Base; class Program { static void Main(string[] args) { ComponentBase.RaiseEventsOnMainThread = false; IOServer ioserver1 = new IOServer() { Name = "Simulation" }; IOServer ioserver2 = new IOServer() { Name = "SqlArchiveStore" }; // Periodo di archivzione in millisecondi, -1 per utilizzare il trigger mediante variabile ioserver2.AdvancedProperties.Add(new AdvancedProperty("TimerPeriod", ((long)(-1)))); // Valore da assegnare alla veriabile di trigger alla ricezione dello stesso, null per non inserire un valore di reset ioserver2.AdvancedProperties.Add(new AdvancedProperty("TriggerResetValue", "0")); // Nome del target a cui collegarsi per gestire il trigger ioserver2.AdvancedProperties.Add(new AdvancedProperty("TriggerName", "TargetTrigger")); // Abilita o meno l'archiviazione della veriabile di trigger ioserver2.AdvancedProperties.Add(new AdvancedProperty("ExcludeTriggerVariable", true)); // Imposta la stringa di connessione al database ioserver2.AdvancedProperties.Add(new AdvancedProperty("ConnectionString", "data source=.\\SQLEXPRESS;initial catalog=ITOOLS;persist security info=True;Integrated Security=SSPI;")); // Nome della tabella di archiviazione ioserver2.AdvancedProperties.Add(new AdvancedProperty("TableName", "SqlStoreServer")); // Schema da utilizzare ioserver2.AdvancedProperties.Add(new AdvancedProperty("SchemaName", "dbo")); // Tempo di vita dell'archivio dell'archivio, i campioni piu' vecchi del tempo impostato vengono eliminati, // null per non eliminare mai i campioni archiviati ioserver2.AdvancedProperties.Add(new AdvancedProperty("ArchiveLifeTime", null)); // Nome delle proprieta' di variabile aggiuntive da archiviare ioserver2.AdvancedProperties.Add(new AdvancedProperty("Properties", new String[]{ "Address" })); // Prefisso da utilizzare per nominare la tabella di archiviazione ioserver2.AdvancedProperties.Add(new AdvancedProperty("TablePrefix", "Archive")); Group group = new Group() { IOServer = ioserver2, GroupName = "group1" }; Variable variable = new Variable() { Address = "10", Area = "HR", VariableName = "variable1" }; Variable triggetVariable = new Variable() { Address = "20", Area = "HR", VariableName = "triggerVariable" }; triggetVariable.Targets.Add(new VariableTarget() { Name = "TargetTrigger", Category = "Trigger", LowerValue = "5000", UpperValue = "15000" }); variable.Changed += delegate(Object sender, ChangedEventArgs e) { Console.WriteLine("Variable: {1} value: {0}", e.NewValue, ((Variable)sender).VariableName); }; triggetVariable.Changed += delegate(Object sender, ChangedEventArgs e) { Console.WriteLine("Variable: {1} value: {0}", e.NewValue, ((Variable)sender).VariableName); }; group.Add(variable); group.Add(triggetVariable); Client client = new Client() { Group = group, IOServer = ioserver1 }; client.Start(); group.StartIOServer(); Console.WriteLine("Press ENTER to exit"); Console.ReadLine(); } } } |
Come si vede da codice riportato sopra gli IOServer utilizzati sono due, uno in simulazione che rappresenta un ipotetico accesso ad un dispositivo di campo ed uno impostato sul driver Sql di archiviazione che utilizza una tabella per contenere le informazioni storiche di ciascuna variabile.
Tra le variabili avanzate presenti nel driver SqlArchiveStore troviamo: