Всё это правильно. Но, для меня, проблема как реализовать это в коде скрипта. Я электронщик, программиста нет, поэтому приходится самому этим заниматься.
Как я понимаю, если архив записывается с переменной которая опрашивается периодически, то разницы нет среднее или интегральное среднее?
А если архив записывается с переменной которая опрашивается по изменению значения, то надо использовать интегральное среднее?
Сейчас я в цикле foreach подсчитываю сумму значений, количество значений и считаю среднее.
Вопрос в том, как правильно записать вычисление среднего (интегрального среднего) в коде скрипта с точки зрения нормального программиста, а не такого почти дилетанта как я.
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using System.Linq;
public partial class ФБ : ScriptBase
{
bool? M=false;
public override void Execute()
{
if (Найти==true && M==false && Начало.HasValue && Конец.HasValue && Конец>Начало)
{
var elem = HostFB.InputGroup.GetPin("Вход").TreePinHlp;
var k=elem.DataArchiveItem;
DateTime EndTime=Конец.Value.ToUniversalTime();
DateTime StartTime=Начало.Value.ToUniversalTime();
var mas=k.Read(StartTime, EndTime, false);
double? Max=null;
double? Min=null;
double? Avg=null;
double? sum=0;
double? num=0;
DateTime? TimeStampMax=null;
DateTime? TimeStampMin=null;
foreach (var element in mas)
{
if (Max.HasValue==false || Convert.ToDouble(element.Value)>Max.Value)
{
Max=Convert.ToDouble(element.Value);
TimeStampMax=element.Time.ToLocalTime();
}
if (Min.HasValue==false || Convert.ToDouble(element.Value)<Min.Value)
{
Min=Convert.ToDouble(element.Value);
TimeStampMin=element.Time.ToLocalTime();
}
sum=sum + Convert.ToDouble(element.Value);
num=num + 1;
}
Avg=sum / num;
Максимум=Max;
МеткаВремениМаксимум=TimeStampMax;
Минимум=Min;
МеткаВремениМинимум=TimeStampMin;
Среднее=Avg;
}
M=Найти;
}
}




Ответить с цитированием
