最大值/平均值 _Campbellsci论坛问答

最初发布在:“;平均值“;作用
2010年2月22日上午7:10

我有一个问题。这就是我的CR1000程序的工作原理(简化):

最大值/平均值
_Campbellsci论坛问答

'程序启动/////////////////////
公用MyVar

数据表(MyTable,1,-1)
数据间隔(0,30,最小值,10)
平均值(1,MyVar,IEEE4,错误)
最大值(1、MyVar、IEEE4、False、False)
床头柜

开始进度
扫描(30,秒,0,0)
[测量一些东西并将其放入MyVar]
如果TimeIntoInterval(0.30,min),则调用表MyTable
下一次扫描
结束程序
'程序结束/////////////////////

IF语句本应被省略。我现在已经更正了代码,但我有来自本站早些时候的宝贵数据,希望能恢复。请更详细地告诉我Average和Maximum是如何工作的。

在我擦除IF语句之前的数据已经损坏,我可以看出,但现在看起来很好。以前和现在有什么区别?

“平均值”和“最大值”何时清除并准备好进行新的运行?


我希望有人能帮我。如果是这样的话,我也许可以做一个反向滤波器来获得原始数据。

非常感谢。

*最后更新人:Bo于2010年2月23日凌晨3:57*

新对话如下:

据我所知,在计算(仅限“平均”)、保存和清除累加器/最大化器之前,“平均”和“最大”函数预计为30分钟/30秒=60个值。但由于IF语句的原因,该函数每30分钟只运行一次。这可能导致平均值小60倍或对数据进行过滤,因为平均值可以基于最后60次30分钟的测量来计算。

这一切都取决于这些功能在这些非预期条件下如何工作。这是我的问题?

“平均值”和“最大值”不相同,它们看起来都小了大约60倍,并以一种非平凡的方式进行了过滤。

新对话如下:

平均函数的工作原理是,每次调用表时,值都会被添加到累加器中,计数器也会递增。然后,当调用该表并达到数据间隔时,累加器被计数器除,该值被写入该表。此时,累加器和计数器也被重置为零。maximum函数只需在每次调用表时跟踪最大值即可工作。

听起来你可能还有其他事情要做。我希望你的程序输出相同的平均值和最大值,因为它每个数据间隔只进入表一次。

新对话如下:

";平均函数的工作原理是,每次调用表时,值都会被添加到累加器中,计数器也会递增";

这是一种可能的工作方式,但如果是这样的话,无论表被调用了多少次,结果都将是一个很好的平均值。可能是将计数器预设为假定值,然后将累加器中的任何值除以该固定数。或者可以使用数字滤波器来完成,即作为运行平均值。或者可以分配和处理一个值数组。详细信息在代码中,但我们无法获得。通常情况下,详细信息不重要,也不应该重要,但如果可能的话,OP会在确定问题并修复后尝试恢复信息。

有一次,当在条件表达式中进行脉冲计数时,我们遇到了类似但不同的问题,而不是像应该的那样在每次扫描中运行。通过寻求帮助,我们最终能够了解发生了什么,并能够从错误处理的数据中获得一些信息。

可以理解的是,这些文件没有足够的细节来澄清这些边缘案例,但通过这些案例,我们可能会更好地了解到底发生了什么。

新对话如下:

博写道:

平均值和最大值不相同

基于你发布的代码,这是不可能的。它们一定有其他编程原因不一样。下面的程序与您的示例非常相似。

'CR800系列数据记录器

'声明公共变量
公用电池组电压

'定义数据表
数据表(MyTable,1,-1)
数据间隔(0,15,秒,10)
最大值(1、batt_volt、IEEE4、False、False)
最小值(1,batt_volt,IEEE4,False,False)
平均值(1,电池电压,IEEE4,错误)
示例(1,电池电压,IEEE4)
床头柜

'主程序
开始进度
扫描(1,秒,0,0)
蓄电池(蓄电池电压)
如果TimeIntoInterval(0,15,秒),则调用表MyTable
下一次扫描
结束程序

由于if语句导致在输出时每个表输出周期只执行一次CallTable,因此只有一个测量值进入输出处理指令。在1秒的扫描速率下,该程序丢弃了15个测量值中的14个,其所有输出都是测量值的快照。CallTable位于程序中测量指令的下方,也就是它应该位于的位置,快照是在扫描期间进行的与输出时间相对应的测量。生成的数据文件如下所示:

";TOA5”";台式CR800”";CR800”";1006〃";CR800.Std.09”";CPU:CallTest.CR8”";62637〃";“我的表”;
";时间戳”";记录”";电压最大值“batt_ volt_Max”";电压最小值“batt_ volt_Min”";batt_ volt_Avg”";batt_ volt(电池电压)”;
";TS”";RN”"&”"&”"&”"";
"&”"&”";最大值”";最小值”";平均值”";Smp”;
";2010年02月24日09时36分45秒”;,0,13.58481,13.58481,13.58481,13.58481
";2010年02月24日09时37分”;,1,13.57918,13.57918,13.57918,13.57918
";2010-02-24 09:37:15”;,2,13.58464,13.58464,13.58464,13.58464
";2010年02月24日09时37分30秒”;,3,13.58464,13.58464,13.58464,13.58464
";2010年02月24日09时37分45秒”;,4,13.58458,13.58458,13.58458,13.58458
";2010-02-24 09:38:00“;,5,13.55686,13.55686,13.55686,13.55686

您可以看到,最大值、最小值和平均值与样本输出相同,因为每个样本输出只进行了一次测量。

*最后更新者:ChipsNSalsa于2010年2月24日上午10:25*

新对话如下:

我看错了程序的版本。我对此感到抱歉。现在我已经有了在这个电台上运行过的所有三个版本。我在本线程开始时解释的版本只运行了3个小时,并且给出了与大家一致认为的最大值和平均值相同的值。

这解释了错误的乘数(因为这个真实的旧版本有一个错误的乘数,乘以60)。与前面描述的程序相比,该程序中唯一的其他区别是DataInterval设置为5,而不是30(DataInterval(0.5,Min,10))。

我仍然无法解释不同的最大值/平均值以及数据过滤的内容。这个新的DataInterval值会改变什么吗?这会导致对数据和/或不同的最大值/平均值进行筛选吗?

分享到:

原文链接:,转发请注明来源!
海洋仪器网 仪器使用 最大值/平均值 _Campbellsci论坛问答
「最大值/平均值 _Campbellsci论坛问答」评论列表

发表评论