hzhao

有关AF analytics的最佳实践 - Part2

Blog Post created by hzhao Employee on Sep 2, 2016

接上一篇有关AF analytics的最佳实践 - Part1

 

如何实现含有过滤条件的平均值(Average)、总值(Total)和汇总(Rollup)计算

关于这个内容有一篇KB文章 KB01120

下面这个例子中我们想要计算流量大于0(FlowRate > 0)时的流量的平均值(事件加权以及事件加权),仅靠TagAvg()和TagMean()函数不能实现这个功能。

m1.jpg

m2.jpgm3.jpg

要获得正确的时间加权平均,我们需要创建另外一个属性,比如叫做Filtered Flowrate,然后使用Formula 数据引用类型如下图所示:

m4.jpg

时间加权平均值的计算:使用TimeGT()函数来计算Flowrate属性在过去一天中大于0的时间。这个结果的单位是秒(s),因此我们还需要把它转化成为天(d),即PumpRunningInDays变量,接着TagTot()函数来计算Filtered Flowrate属性过去一天的总值。将两者得到的结果相除就得到Filtered Time weighted Average了。

m5.jpg

m6.jpg

事件加权平均值的计算:我们需要创建一个新的属性,在FlowRate > 0时,显示原来的值,当flowRate = 0时,显示NoOutput()

m7.jpg

接着对FilteredFlow这个属性使用TagMean()函数即可计算经过过滤以后的事件平均

m9.jpg

 

汇总计算:

同理,通过创建Filtered Production这样的属性可以对production属性的值进行过滤,并将这个值用在Rollup的计算中,即可得到过滤后的rollup的值

n1.jpg

n2.jpg

n3.jpg

n4.jpg

 

高级回填选项:

写入PI的时间戳可以是触发事件的未来时间

o1.jpg

 

如何在表达式中使用时间

这个例子中我们想要计算Volume1中的变化率,以及变化的持续时间

p1.jpg

其中st和et记录了Volume1属性的开始时间和结束时间,DateTime变量是两者之间的时间差,格式是dd:hh:mm:ss。这个结果用在ROC的计算中,并得到一个结果。DateTime变量已经被转换为秒(s),这样ROC的单位是(bbl/sec)。但当您想把这个结果映射到属性是会有下面这个错误

p2.jpg

但是,Raw Delta Time的数据类型是DateTime,没办法定义UOMs。

这里的trick是可以使用Float()函数,使用Float()可以将Delta Time变量改为double。接着可以使用Convert()函数给DeltaTimeInHours变量添加单位,然后进行rate of change(ROC)的计算。

p3.jpg

 

根据需求计算(结果不写入PI点)

AF Client (AFSDK)2.7开始,AF中多了一种新的数据引用类型,Analysis,该引用会记录表达式,但只有在客户端query的时候才会计算结果

q1.jpg

对于这种数据引用类型有如下一些内容需要考虑:

  • 计算是在AF客户端进行的
  • 计算频率是不是过于频繁?
  • 这个按需求计算是不是依赖于别的其他的按需求计算?
  • 在一个数据请求中有多少这样的计算?
  • 数据请求的间隔是多少?

以上这些因素都是影响性能的,所以这种数据引用类型应该被谨慎地使用

 

被限制使用的函数——这些函数可以被使用,但不支持summary data calls:

  • EventCount()
  • PctGood()
  • Range()
  • StDev()
  • TagAvg()
  • TagMax()
  • TagMean()
  • TagMin()
  • TagTot()

在下面这个例子中,我们计算Flow属性的5分钟平均值,并将结果映射到属性average flow。这个结果没有被映射到一个PI点,但我们仍然可以在一段时间内计算他们的值。请见下图:

 

 

q2.jpg

q3.jpg

q4.jpg

但如果您想将这个属性用于另外一个表达式的时候会得到下面这个报错,因为这个结果不能再被用于新的summary call函数中

q5.jpg

如果我们创建一个变量AvgFlowHist将计算结果映射到一个PI点中,AvgFlowHist可以被用于计算tagtot

q8.jpg

 

下列函数是不能在按需求计算中使用的,因为这些函数计算时比较消耗资源:

  • DeltaValue()
  • FindEq()
  • FindGE()
  • FindGT()
  • FindLE()
  • FindLT()
  • FindNE()
  • HasValueChanged()
  • NumOfChanges()
  • TimeEq()
  • TimeGE()
  • TimeGT()
  • TimeLE()
  • TimeLT()
  • TimeNE()
  • NoOutput()

q9.jpg

Outcomes