예제 #1
0
        private static void CreateMeterAdvancedTemplate(AFElementTemplate meterBasicTemplate)
        {
            AFDatabase        database = meterBasicTemplate.Database;
            AFElementTemplate meterAdvancedTemplate = database.ElementTemplates["MeterAdvanced"];

            if (meterAdvancedTemplate == null)
            {
                database.ElementTemplates.Add("MeterAdvanced");
            }

            AFCategory       tsDataA     = database.AttributeCategories["Time-Series Data"];
            AFEnumerationSet mStatusEnum = database.EnumerationSets["Meter Status"];

            meterAdvancedTemplate.BaseTemplate = meterBasicTemplate;

            AFAttributeTemplate statusAttrTemp = meterAdvancedTemplate.AttributeTemplates["Status"];

            if (statusAttrTemp == null)
            {
                meterAdvancedTemplate.AttributeTemplates.Add("Status");
            }
            statusAttrTemp.TypeQualifier = mStatusEnum;
            if (!statusAttrTemp.Categories.Contains(tsDataA))
            {
                statusAttrTemp.Categories.Add(tsDataA);
            }
            statusAttrTemp.DataReferencePlugIn = database.PISystem.DataReferencePlugIns["PI Point"];
            statusAttrTemp.ConfigString        = @"\\%@\Configuration|PIDataArchiveName%\%Element%.%Attribute%";
        }
예제 #2
0
        public void Run()
        {
            PIServers piServers = new PIServers();
            PIServer  piServer  = piServers["<PISERVER>"];

            IList <PIPoint> points = PIPoint.FindPIPoints(piServer, new[] { "sample_floatpoint", "sample_digitalpoint" });

            PIPoint floatingPIPoint = points[0];
            PIPoint digitalPIPoint  = points[1];

            AFEnumerationSet digSet = piServer.StateSets["Modes"];

            IList <AFValue> valuesToWrite = new List <AFValue>();

            for (int i = 0; i < 10; i++)
            {
                AFTime time = new AFTime(new DateTime(2015, 1, 1, i, 0, 0, DateTimeKind.Local));

                AFValue afValueFloat = new AFValue(i, time);
                // Associate the AFValue to a PI Point so we know where to write to.
                afValueFloat.PIPoint = floatingPIPoint;

                AFEnumerationValue digSetValue    = i % 2 == 0 ? digSet["Auto"] : digSet["Manual"];
                AFValue            afValueDigital = new AFValue(digSetValue, time);
                afValueDigital.PIPoint = digitalPIPoint;

                valuesToWrite.Add(afValueFloat);
                valuesToWrite.Add(afValueDigital);
            }

            // Perform a bulk write. Use a single local call to PI Buffer Subsystem if possible.
            // Otherwise, make a single call to the PI Data Archive.
            // We use no compression just so we can check all the values are written.
            piServer.UpdateValues(valuesToWrite, AFUpdateOption.InsertNoCompression, AFBufferOption.BufferIfPossible);
        }
예제 #3
0
        private static void CreateEnumerationSets(AFDatabase database)
        {
            if (database == null)
            {
                return;
            }

            if (!database.EnumerationSets.Contains("Building Type"))
            {
                AFEnumerationSet bTypeEnum = database.EnumerationSets.Add("Building Type");
                bTypeEnum.Add("Residential", 0);
                bTypeEnum.Add("Business", 1);
            }

            if (!database.EnumerationSets.Contains("Meter Status"))
            {
                AFEnumerationSet mStatusEnum = database.EnumerationSets.Add("Meter Status");
                mStatusEnum.Add("Good", 0);
                mStatusEnum.Add("Bad", 1);
            }
            if (database.IsDirty)
            {
                database.CheckIn();
            }
        }
예제 #4
0
        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();
        }
예제 #5
0
 static void storeEnumerationSet(AFEnumerationSet enumSet, DataTable dt)
 {
     addNameAndDescription(dt, enumSet, enumSet);
     foreach (var row in enumSet)
     {
         addNameAndDescription(dt, row, row);
     }
 }
예제 #6
0
        private AFEnumerationSet CreateEnumerationSet(AFDatabase db)
        {
            AFEnumerationSet enumSet = db.EnumerationSets.Add(Constants.AF_ENUMERATION_SET_NAME);

            enumSet.Add("Very Good", 4);
            enumSet.Add("Good", 3);
            enumSet.Add("Bad", 2);
            enumSet.Add("Very Bad", 1);
            return(enumSet);
        }
예제 #7
0
        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);
        }
예제 #8
0
        private static AFElementTemplate CreateMeterBasicTemplate(AFDatabase database)
        {
            AFElementTemplate meterBasicTemplate = database.ElementTemplates["MeterBasic"];

            if (meterBasicTemplate != null)
            {
                return(meterBasicTemplate);
            }

            UOM              uom       = database.PISystem.UOMDatabase.UOMs["kilowatt hour"];
            AFCategory       mEnergyE  = database.ElementCategories["Measures Energy"];
            AFCategory       bInfoA    = database.AttributeCategories["Building Info"];
            AFCategory       locationA = database.AttributeCategories["Location"];
            AFCategory       tsDataA   = database.AttributeCategories["Time-Series Data"];
            AFEnumerationSet bTypeNum  = database.EnumerationSets["Building Type"];
            AFPlugIn         PIPoint   = database.PISystem.DataReferencePlugIns["PI Point"];

            meterBasicTemplate = database.ElementTemplates.Add("MeterBasic");
            meterBasicTemplate.Categories.Add(mEnergyE);

            AFAttributeTemplate substationAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Substation");

            substationAttrTemp.Type = typeof(string);

            AFAttributeTemplate usageLimitAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Usage Limit");

            usageLimitAttrTemp.Type       = typeof(string);
            usageLimitAttrTemp.DefaultUOM = uom;

            AFAttributeTemplate buildingAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Building");

            buildingAttrTemp.Type = typeof(string);
            buildingAttrTemp.Categories.Add(bInfoA);

            AFAttributeTemplate bTypeAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Building Type");

            bTypeAttrTemp.TypeQualifier = bTypeNum;
            bTypeAttrTemp.Categories.Add(bInfoA);

            AFAttributeTemplate cityAttrTemp = meterBasicTemplate.AttributeTemplates.Add("City");

            cityAttrTemp.Type = typeof(string);
            cityAttrTemp.Categories.Add(locationA);

            AFAttributeTemplate energyUsageAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Energy Usage");

            energyUsageAttrTemp.Type = typeof(Single);
            energyUsageAttrTemp.Categories.Add(tsDataA);
            energyUsageAttrTemp.DefaultUOM          = uom;
            energyUsageAttrTemp.DataReferencePlugIn = PIPoint;
            energyUsageAttrTemp.ConfigString        = @"\\%@\Configuration|PIDataArchiveName%\%Element%.%Attribute%;UOM=kWh";

            return(meterBasicTemplate);
        }
        public void DeleteTest()
        {
            instance.Delete(webId);
            AFDatabase db = StandardPISystem.Databases[Constants.AF_DATABASE_NAME];

            db.Refresh();
            AFEnumerationSet enumSet = AFObject.FindObject(Constants.AF_ENUMERATION_SET_PATH) as AFEnumerationSet;

            Assert.IsNull(enumSet);

            DeleteSampleDatabaseForTests();
            CreateSampleDatabaseForTests();
        }
        public void CreateValueTest()
        {
            PIEnumerationValue enumerationValue = new PIEnumerationValue()
            {
                Name  = "Ultra Good",
                Value = 5
            };

            instance.CreateValue(webId, enumerationValue);
            AFDatabase db = StandardPISystem.Databases[Constants.AF_DATABASE_NAME];

            db.Refresh();
            AFEnumerationSet enumSet = AFObject.FindObject(Constants.AF_ENUMERATION_SET_PATH) as AFEnumerationSet;

            Assert.IsTrue(enumSet.Count == 5);
        }
예제 #11
0
        public void CreateSampleDatabaseForTests()
        {
            DeleteSampleDatabaseForTests();
            CreateSecurityIdentities();
            CreateSecurityMappings();
            CreateUOMClasses();
            AFDatabase db = CreateDatabase();


            AFCategory analysisCategory1  = CreateCategory(db.AnalysisCategories, Constants.AF_ANALYSIS_CATEGORY_NAME, 1);
            AFCategory analysisCategory2  = CreateCategory(db.AnalysisCategories, Constants.AF_ANALYSIS_CATEGORY_NAME, 2);
            AFCategory tableCategory1     = CreateCategory(db.TableCategories, Constants.AF_TABLE_CATEGORY_NAME, 1);
            AFCategory tableCategory2     = CreateCategory(db.TableCategories, Constants.AF_TABLE_CATEGORY_NAME, 2);
            AFCategory attributeCategory1 = CreateCategory(db.AttributeCategories, Constants.AF_ATTRIBUTE_CATEGORY_NAME, 1);
            AFCategory attributeCategory2 = CreateCategory(db.AttributeCategories, Constants.AF_ATTRIBUTE_CATEGORY_NAME, 2);
            AFCategory elementCategory1   = CreateCategory(db.ElementCategories, Constants.AF_ELEMENT_CATEGORY_NAME, 1);
            AFCategory elementCategory2   = CreateCategory(db.ElementCategories, Constants.AF_ELEMENT_CATEGORY_NAME, 2);

            AFTable table = CreateTable(db);

            table.Categories.Add(tableCategory1);
            AFEnumerationSet enumSet = CreateEnumerationSet(db);



            AFElementTemplate elementTemplate = CreateElementTemplate(db);

            CreateElementFromTemplate(db, elementTemplate);
            AFElement el = CreateElementAndAttributes(db, elementCategory1, attributeCategory1);

            CreateElementForStreamSet(db);


            AFAnalysisTemplate analysisTemplate = CreateAnalysisTemplate(db);
            AFAnalysis         an = CreateAnalysis(db, el, analysisCategory1, analysisCategory2);


            AFEventFrame      ef = CreateEventFrame(db, null, elementCategory1);
            AFElementTemplate eventFrameTemplate = CreateEventFrameTemplate(db);
            AFEventFrame      ef2 = CreateEventFrame(db, eventFrameTemplate, elementCategory1);

            db.CheckIn();
        }
        public void Run()
        {
            PISystems piSystems = new PISystems();
            PISystem  piSystem  = piSystems["<AFSERVER>"];

            AFDatabase afDatabase = piSystem.Databases["Basic-AFSDK-Sample"];

            AFElement boilerA = afDatabase.Elements["Region_0"].Elements["BoilerA"];

            AFElementTemplate   elementTemplate         = afDatabase.ElementTemplates["BasicBoilerTemplate"];
            AFAttributeTemplate temperatureAttrTemplate = elementTemplate.AttributeTemplates["Temperature"];
            AFAttributeTemplate modeAttrTemplate        = elementTemplate.AttributeTemplates["Mode"];

            AFElement.LoadAttributes(new[] { boilerA }, new[] { temperatureAttrTemplate, modeAttrTemplate });

            AFEnumerationSet digSet = afDatabase.EnumerationSets["Modes"];

            IList <AFValue> valuesToWrite = new List <AFValue>();

            for (int i = 0; i < 10; i++)
            {
                AFTime time = new AFTime(new DateTime(2015, 1, 1, i, 0, 0, DateTimeKind.Local));

                AFValue afValueFloat = new AFValue(i, time);
                // Associate the AFValue to an attribute so we know where to write to.
                afValueFloat.Attribute = boilerA.Attributes["Temperature"];

                AFEnumerationValue digSetValue    = i % 2 == 0 ? digSet["Auto"] : digSet["Manual"];
                AFValue            afValueDigital = new AFValue(digSetValue, time);
                afValueDigital.Attribute = boilerA.Attributes["Mode"];

                valuesToWrite.Add(afValueFloat);
                valuesToWrite.Add(afValueDigital);
            }

            // Perform a bulk write. Use a single local call to PI Buffer Subsystem if possible.
            // Otherwise, make a single call to the PI Data Archive.
            // We use no compression just so we can check all the values are written.
            // AFListData is the class that provides the bulk write method.
            AFListData.UpdateValues(valuesToWrite, AFUpdateOption.InsertNoCompression, AFBufferOption.BufferIfPossible);
        }
        public void UpdateTest()
        {
            string           path    = Constants.AF_ENUMERATION_SET_PATH;
            PIEnumerationSet enumSet = instance.GetByPath(path, null);

            enumSet.Id          = null;
            enumSet.Description = "New enumeration set description";
            enumSet.Links       = null;
            enumSet.Path        = null;
            enumSet.WebId       = null;
            instance.Update(webId, enumSet);

            StandardPISystem.Refresh();
            AFDatabase db = StandardPISystem.Databases[Constants.AF_DATABASE_NAME];

            db.Refresh();
            AFEnumerationSet afEnumSet = AFObject.FindObject(Constants.AF_ENUMERATION_SET_PATH) as AFEnumerationSet;

            afEnumSet.Database.Refresh();
            afEnumSet.Refresh();

            Assert.IsTrue(afEnumSet.Description == enumSet.Description);
        }
예제 #14
0
        private static void CreateTemplates(AFDatabase database)
        {
            if (database == null)
            {
                return;
            }

            UOM uom = database.PISystem.UOMDatabase.UOMs["kilowatt hour"];

            AFCategory mEnergyE = database.ElementCategories["Measures Energy"];
            AFCategory sStatusE = database.ElementCategories["Shows Status"];

            AFCategory bInfoA    = database.AttributeCategories["Building Info"];
            AFCategory locationA = database.AttributeCategories["Location"];
            AFCategory tsDataA   = database.AttributeCategories["Time-Series Data"];

            AFEnumerationSet bTypeNum    = database.EnumerationSets["Building Type"];
            AFEnumerationSet mStatusEnum = database.EnumerationSets["Meter Status"];

            // Create MeterBasic Element Template

            AFElementTemplate meterBasicTemplate;

            if (!database.ElementTemplates.Contains("MeterBasic"))
            {
                meterBasicTemplate = database.ElementTemplates.Add("MeterBasic");
                meterBasicTemplate.Categories.Add(mEnergyE);

                AFAttributeTemplate substationAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Substation");
                substationAttrTemp.Type = typeof(string);

                AFAttributeTemplate usageLimitAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Usage Limit");
                usageLimitAttrTemp.Type       = typeof(string);
                usageLimitAttrTemp.DefaultUOM = uom;

                AFAttributeTemplate buildingAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Building");
                buildingAttrTemp.Type = typeof(string);
                buildingAttrTemp.Categories.Add(bInfoA);

                AFAttributeTemplate bTypeAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Building Type");
                bTypeAttrTemp.TypeQualifier = bTypeNum;
                bTypeAttrTemp.Categories.Add(bInfoA);

                AFAttributeTemplate districtAttrTemp = meterBasicTemplate.AttributeTemplates.Add("District");
                districtAttrTemp.Type = typeof(string);
                districtAttrTemp.Categories.Add(locationA);

                AFAttributeTemplate energyUsageAttrTemp = meterBasicTemplate.AttributeTemplates.Add("Energy Usage");
                energyUsageAttrTemp.Type = typeof(double);
                energyUsageAttrTemp.Categories.Add(tsDataA);
                energyUsageAttrTemp.DefaultUOM          = uom;
                energyUsageAttrTemp.DataReferencePlugIn = database.PISystem.DataReferencePlugIns["PI Point"];
                energyUsageAttrTemp.ConfigString        = @"\\%Server%\%Element%.%Attribute%;UOM=kWh";
            }
            else
            {
                meterBasicTemplate = database.ElementTemplates["MeterBasic"];
            }

            // Create MeterAdvanced Element Template

            if (!database.ElementTemplates.Contains("MeterAdvanced"))
            {
                AFElementTemplate meterAdvancedTemplate = database.ElementTemplates.Add("MeterAdvanced");
                meterAdvancedTemplate.BaseTemplate = meterBasicTemplate;

                AFAttributeTemplate statusAttrTemp = meterAdvancedTemplate.AttributeTemplates.Add("Status");
                statusAttrTemp.TypeQualifier = mStatusEnum;
                statusAttrTemp.Categories.Add(tsDataA);
                statusAttrTemp.DataReferencePlugIn = database.PISystem.DataReferencePlugIns["PI Point"];
                statusAttrTemp.ConfigString        = @"\\%Server%\%Element%.%Attribute%";

                // Create District Element Template

                AFElementTemplate districtTemplate = database.ElementTemplates.Add("District");

                AFAttributeTemplate districtEnergyUsageAttrTemp = districtTemplate.AttributeTemplates.Add("Energy Usage");
                districtEnergyUsageAttrTemp.Type                = typeof(double);
                districtEnergyUsageAttrTemp.DefaultUOM          = uom;
                districtEnergyUsageAttrTemp.DataReferencePlugIn = database.PISystem.DataReferencePlugIns["PI Point"];
                districtEnergyUsageAttrTemp.ConfigString        = @"\\%Server%\%Element%.%Attribute%";
            }

            // Do a checkin at the end instead of one-by-one.

            database.CheckIn();
        }
예제 #15
0
        /// <summary>
        /// Create the AF Database, Element Templates, and Attribute Templates.
        /// </summary>
        private void CreateAFTemplates()
        {
            // Check if PI System exists.
            PISystem targetPISystem = new PISystems()[_conf.AFServerName];

            if (targetPISystem == null)
            {
                Console.WriteLine("AF server does not exist");
                Environment.Exit(0);
            }

            // Check if AF Database exists. If so, delete it and recreate it to start anew.
            _afContext          = new AFContext();
            _afContext.Database = targetPISystem.Databases[_conf.AFDatabaseName];
            if (_afContext.Database != null)
            {
                Console.Write(string.Format(@"AF Database {0} already exists. " +
                                            @"Press Y to remove and recreate the database, " +
                                            @"N to quit the program and specify a different database name : ",
                                            _conf.AFDatabaseName));
                while (true)
                {
                    ConsoleKeyInfo result = Console.ReadKey();
                    Console.WriteLine("\n");
                    if ((result.KeyChar == 'Y') || (result.KeyChar == 'y'))
                    {
                        targetPISystem.Databases.Remove(_afContext.Database);
                        break;
                    }
                    else if ((result.KeyChar == 'N') || (result.KeyChar == 'n'))
                    {
                        Environment.Exit(0);
                    }

                    Console.Write("Invalid input, try again (Y/N) : ");
                }
            }

            _afContext.Database = targetPISystem.Databases.Add(_conf.AFDatabaseName);

            // Create the Enumeration Set.
            AFEnumerationSet modes = _afContext.Database.EnumerationSets.Add("Modes");

            modes.Add("Manual", 0);
            modes.Add("Auto", 1);
            modes.Add("Cascade", 2);
            modes.Add("Program", 3);
            modes.Add("Prog-Auto", 4);

            // Create element templates for SubTree and Branch elements.
            AFElementTemplate subTree_ElemTmp = _afContext.Database.ElementTemplates.Add(Constants.SUBTREE);
            AFElementTemplate branch_ElemTmp  = _afContext.Database.ElementTemplates.Add(Constants.BRANCH);

            AFAttributeTemplate subtree_Rollup_AttrTmp = subTree_ElemTmp.AttributeTemplates.Add(Constants.ROLLUP_SUM_ATTRIBUTE);
            AFAttributeTemplate branch_Rollup_AttrTmp  = branch_ElemTmp.AttributeTemplates.Add(Constants.ROLLUP_SUM_ATTRIBUTE);
            AFAttributeTemplate threshold_AttrTmp      = branch_ElemTmp.AttributeTemplates.Add(Constants.THRESHOLD_ATTRIBUTE);

            subtree_Rollup_AttrTmp.Type = typeof(float);
            branch_Rollup_AttrTmp.Type  = typeof(float);
            threshold_AttrTmp.Type      = typeof(int);

            AFPlugIn _piPointDR = AFDataReference.GetPIPointDataReference(targetPISystem);

            subtree_Rollup_AttrTmp.DataReferencePlugIn = _piPointDR;
            branch_Rollup_AttrTmp.DataReferencePlugIn  = _piPointDR;

            string serverPath = @"\\" + _conf.PIServerName + @"\";

            subtree_Rollup_AttrTmp.ConfigString = serverPath +
                                                  @"HighAsset_%Element%_Total";

            branch_Rollup_AttrTmp.ConfigString = serverPath +
                                                 @"HighAsset_%Element%_Total";

            threshold_AttrTmp.SetValue(_conf.ThresholdValue, null);

            // Create element templates for Leaf elements.
            _afContext.BaseLeafTemplate     = _afContext.Database.ElementTemplates.Add(Constants.LEAF);
            _afContext.SinusoidLeafTemplate = _afContext.Database.ElementTemplates.Add(Constants.LEAF_SIN);
            _afContext.RandomLeafTemplate   = _afContext.Database.ElementTemplates.Add(Constants.LEAF_RAND);

            _afContext.SinusoidLeafTemplate.BaseTemplate = _afContext.BaseLeafTemplate;
            _afContext.RandomLeafTemplate.BaseTemplate   = _afContext.BaseLeafTemplate;

            // Add attribute templates for base leaf Element Templates.
            AFAttributeTemplate subtree_AttrTmp = _afContext.BaseLeafTemplate.AttributeTemplates.Add(Constants.SUBTREE);
            AFAttributeTemplate branch_AttrTmp  = _afContext.BaseLeafTemplate.AttributeTemplates.Add(Constants.BRANCH);
            AFAttributeTemplate ID_AttrTmp      = _afContext.BaseLeafTemplate.AttributeTemplates.Add(Constants.LEAF_ID);
            AFAttributeTemplate value_AttrTmp   = _afContext.BaseLeafTemplate.AttributeTemplates.Add("Value");
            AFAttributeTemplate mode_AttrTmp    = _afContext.BaseLeafTemplate.AttributeTemplates.Add("Mode");

            subtree_AttrTmp.Type = typeof(string);
            branch_AttrTmp.Type  = typeof(string);
            ID_AttrTmp.Type      = typeof(string);

            value_AttrTmp.Type = typeof(float);
            value_AttrTmp.DataReferencePlugIn = _piPointDR;

            mode_AttrTmp.DataReferencePlugIn = _piPointDR;
            mode_AttrTmp.TypeQualifier       = modes;
            mode_AttrTmp.SetValue(modes["Manual"], null);
            mode_AttrTmp.ConfigString = serverPath +
                                        @"HighAsset_%Element%_Mode;
                    ptclassname=classic;
                    pointtype=digital;
                    digitalset=modes;
                    pointsource=R;
                    location1=0;
                    location4=3;
                    location5=1";

            // Add attribute templates for sinusoid leaf Element Templates.
            AFAttributeTemplate value_sinusoid_AttrTmp = _afContext.SinusoidLeafTemplate.AttributeTemplates.Add("Value");

            value_sinusoid_AttrTmp.Type = typeof(double);
            value_sinusoid_AttrTmp.DataReferencePlugIn = _piPointDR;
            value_sinusoid_AttrTmp.ConfigString        = serverPath +
                                                         @"HighAsset_%Element%_Sinusoid;
                    ptclassname=classic;
                    pointtype=float32;
                    pointsource=R;
                    location1=0;
                    location4=3;
                    location5=0";

            // Add attribute templates for random leaf Element Templates.
            AFAttributeTemplate value_random_AttrTmp = _afContext.RandomLeafTemplate.AttributeTemplates.Add("Value");

            value_random_AttrTmp.Type = typeof(double);
            value_random_AttrTmp.DataReferencePlugIn = _piPointDR;
            value_random_AttrTmp.ConfigString        = serverPath +
                                                       @"HighAsset_%Element%_Random;
                    ptclassname=classic;
                    pointtype=float32;
                    pointsource=R;
                    location1=0;
                    location4=3;
                    location5=1";

            // Create container element under which all leaf elements will be stored.
            _afContext.Database.Elements.Add("LeafElements");

            // Do a bulk checkin of all changes made so far.
            _afContext.Database.CheckIn(AFCheckedOutMode.ObjectsCheckedOutThisThread);
        }