-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathBuildSimpleDatabaseExample.cs
More file actions
105 lines (86 loc) · 4.34 KB
/
BuildSimpleDatabaseExample.cs
File metadata and controls
105 lines (86 loc) · 4.34 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using OSIsoft.AF;
using OSIsoft.AF.Asset;
namespace ExamplesLibrary
{
public class BuildSimpleDatabaseExample : IExample
{
/// <summary>
/// This example creates a sample AF database from basic element and attribute templates.
/// </summary>
/// <prerequisite-examples>
/// none
/// </prerequisite-examples>
public void Run()
{
PISystems piSystems = new PISystems();
PISystem piSystem = piSystems["<AFSERVER>"];
AFDatabase afDatabase = piSystem.Databases.Add("Basic-AFSDK-Sample");
CreateTemplates(afDatabase);
CreateEnumerationSet(afDatabase);
CreateElements(afDatabase);
CreatePIPoints(afDatabase);
}
private void CreateTemplates(AFDatabase afDatabase)
{
AFElementTemplate elemTemplate = afDatabase.ElementTemplates.Add("BasicBoilerTemplate");
AFAttributeTemplate attrTemplate_Temperature = elemTemplate.AttributeTemplates.Add("Temperature");
AFAttributeTemplate attrTemplate_Pressure = elemTemplate.AttributeTemplates.Add("Pressure");
AFAttributeTemplate attrTemplate_Limit = elemTemplate.AttributeTemplates.Add("Limit");
AFAttributeTemplate attrTemplate_Mode = elemTemplate.AttributeTemplates.Add("Mode");
attrTemplate_Temperature.Type = typeof(float);
attrTemplate_Pressure.Type = typeof(float);
attrTemplate_Limit.Type = typeof(string);
AFEnumerationSet modes = afDatabase.EnumerationSets["Modes"];
attrTemplate_Mode.TypeQualifier = modes;
attrTemplate_Temperature.DataReferencePlugIn = AFDataReference.GetPIPointDataReference(afDatabase.PISystem);
attrTemplate_Pressure.DataReferencePlugIn = AFDataReference.GetPIPointDataReference(afDatabase.PISystem);
attrTemplate_Mode.DataReferencePlugIn = AFDataReference.GetPIPointDataReference(afDatabase.PISystem);
attrTemplate_Temperature.ConfigString = @"%Database%.%..\Element%.%Element%.%Attribute%;ptclassname=classic;pointtype=float32;";
attrTemplate_Pressure.ConfigString = @"%Database%.%..\Element%.%Element%.%Attribute%;ptclassname=classic;pointtype=float32;";
attrTemplate_Mode.ConfigString = @"%Database%.%..\Element%.%Element%.%Attribute%;ptclassname=classic;pointtype=digital;digitalset=modes;";
// Do a bulk check in of all changes made so far.
afDatabase.CheckIn();
}
private void CreateEnumerationSet(AFDatabase afDatabase)
{
AFEnumerationSet modes = afDatabase.EnumerationSets.Add("Modes");
modes.Add("Manual", 0);
modes.Add("Auto", 1);
modes.Add("Cascade", 2);
modes.Add("Program", 3);
modes.Add("Prog-Auto", 4);
}
private void CreateElements(AFDatabase afDatabase)
{
AFElementTemplate elemTemplate = afDatabase.ElementTemplates["BasicBoilerTemplate"];
for (int i = 0; i < 5; i++)
{
AFElement element = afDatabase.Elements.Add("Region_" + i);
}
foreach (AFElement element in afDatabase.Elements)
{
AFElement childA = element.Elements.Add("BoilerA", elemTemplate);
AFElement childB = element.Elements.Add("BoilerB", elemTemplate);
childA.Attributes["Limit"].SetValue(new AFValue("10"));
childB.Attributes["Limit"].SetValue(new AFValue("50"));
}
// Do a bulk check in of all changes made so far.
afDatabase.CheckIn();
}
private void CreatePIPoints(AFDatabase afDatabase)
{
AFElementTemplate elemTemplate = afDatabase.ElementTemplates["BasicBoilerTemplate"];
AFNamedCollectionList<AFBaseElement> baseElements = elemTemplate.FindInstantiatedElements(
includeDerived: false,
sortField: AFSortField.Name,
sortOrder: AFSortOrder.Ascending,
maxCount: 1000);
foreach (AFBaseElement baseElement in baseElements)
{
int numModified = AFDataReference.CreateConfig(baseElement, false, null);
Console.WriteLine("Modified or created: {0}", numModified);
}
}
}
}