//Create the Average Tag if it does not exist if (!OP.TagExists("FIC101.Average")) OP.CreateAndSaveTag("FIC101.Average", "m3hr", DataType.Real, Interpolation.Linear, "Main Feed Flow Meter (Average)"); //Calculate the average value and insert the results into the Average Tag var AverageValue = (OP.Tag("FIC101A.Value").Value.ToDouble() + OP.Tag("FIC101B.Value").Value.ToDouble() + OP.Tag("FIC101C.Value").Value.ToDouble()) / 3; if (OP.InsertSample("FIC101.Average", AverageValue)) { OP.Log("Successfully inserted average value = " + AverageValue); }
//Create the Tag if it doesn't exist if (!OP.TagExists("FIC101.MovingAverage")) OP.CreateAndSaveTag("FIC101.MovingAverage", "m3hr", DataType.Real, Interpolation.Linear, "Main Feed Flow Meter (60seconds MovingAverage)"); //Obtain 60 samples in the last minute ListSamples = OP.Tag("FIC101.Value").Samples("Now-60s","Now",1000); //Total up the samples double TotalValue = 0; foreach (Sample S in Samples) { TotalValue = TotalValue + S.Value.ToDouble(); } //Calculate the moving average and insert the sample double MovingAverage = TotalValue / Samples.Count.ToDouble(); if (OP.InsertSample("FIC101.MovingAverage",MovingAverage)) { OP.Log("Successfully inserted FIC101 Moving Average Value = " + MovingAverage); }
double ValueFIC = 2000; double ValueTIC = 250; double ValueWIC = 100; double ValuePIC = 50; double ValueLIC = 60; DateTime TimeStamp; Random Random = new Random(); //Create the Tags OP.CreateAndSaveTag("FIC101.Value", "m3hr", DataType.Real, Interpolation.Linear, "Main Feed Flow Meter"); OP.CreateAndSaveTag("TIC102.Value", "DegC", DataType.Real, Interpolation.Linear, "Main Feed Temperature"); OP.CreateAndSaveTag("WIC103.Value", "ton/hr", DataType.Real, Interpolation.Linear, "Main Feed Weightometer"); OP.CreateAndSaveTag("PIC104.Value", "kPa", DataType.Real, Interpolation.Linear, "Main Feed Pressure"); OP.CreateAndSaveTag("LIC105.Value", "m", DataType.Real, Interpolation.Linear, "Main Feed Drum Level"); //Read exsiting Parameters if (!OP.ParameterExists("TimeStamp")) { TimeStamp = DateTime.UtcNow.AddDays(-30); OP.SetParameter("TimeStamp", TimeStamp); } else TimeStamp = OP.GetParameter("TimeStamp").ToDateTime(); if (OP.ParameterExists("FIC101_LastValue")) ValueFIC = OP.GetParameter("FIC101_LastValue").ToDouble(); else OP.SetParameter("FIC101_LastValue", ValueFIC); if (OP.ParameterExists("TIC102_LastValue")) ValueTIC = OP.GetParameter("TIC102_LastValue").ToDouble(); else OP.SetParameter("TIC102_LastValue", ValueTIC); if (OP.ParameterExists("WIC103_LastValue")) ValueWIC = OP.GetParameter("WIC103_LastValue").ToDouble(); else OP.SetParameter("WIC103_LastValue", ValueWIC); if (OP.ParameterExists("PIC104_LastValue")) ValuePIC = OP.GetParameter("PIC104_LastValue").ToDouble(); else OP.SetParameter("PIC104_LastValue", ValuePIC); if (OP.ParameterExists("LIC105_LastValue")) ValueLIC = OP.GetParameter("LIC105_LastValue").ToDouble(); else OP.SetParameter("LIC105_LastValue", ValueLIC); //Loop until all data inserted while (true) { ValueFIC = ValueFIC + (Random.NextDouble() * 2) - 1; ValueTIC = ValueTIC + (Random.NextDouble() * 2) - 1; ValueWIC = ValueWIC + (Random.NextDouble() * 2) - 1; ValuePIC = ValuePIC +(Random.NextDouble() * 2) - 1; ValueLIC = ValueLIC + (Random.NextDouble() * 2) - 1; TimeStamp = TimeStamp.AddSeconds(1); OP.InsertSample("FIC101.Value", ValueFIC, TimeStamp); OP.InsertSample("TIC102.Value", ValueTIC, TimeStamp); OP.InsertSample("WIC103.Value", ValueWIC, TimeStamp); OP.InsertSample("PIC104.Value", ValuePIC, TimeStamp); OP.InsertSample("LIC105.Value", ValueLIC, TimeStamp); OP.Log("Generating Data for " + TimeStamp); if (TimeStamp >= DateTime.UtcNow) break; } //Save Parameters for the next run OP.SetParameter("TimeStamp", TimeStamp); OP.SetParameter("FIC101_LastValue", ValueFIC); OP.SetParameter("TIC102_LastValue", ValueTIC); OP.SetParameter("WIC103_LastValue", ValueWIC); OP.SetParameter("PIC104_LastValue", ValuePIC); OP.SetParameter("LIC105_LastValue", ValueLIC);