模拟量输入通道通过转换实数,计划每秒取一个数值,来计算每小时的平均值,需要连续不断的数据,比如到3601个数据时自动覆盖第一个数据。
钻石用户推荐最佳答案
1、
功能和样例:缓存测量值的“FIFO”
https://support.industry.siemens.com/cs/document/8685494
根据FIFO原则在环形缓冲器临时存储接收到的数据并传给用户接口https://support.industry.siemens.com/cs/document/16825843
如何计算读入的任意数量的数值的当前平均值?
http://support.automation.siemens.com/CN/view/zh/28027081
2、自己写程序,是在TIA环境下写的,如图
2.1 程序的变量定义,其中累积值、计数值、数组下标要在上电初始化组织块 OB100 中初始化成 0,这部分程序没有帖出
2.2 FC1 的接口定义以及程序,程序代码如下,可直接复制:
"数据块_1".CURRENT_INDEX := "数据块_1".CURRENT_INDEX + 1;
IF "数据块_1".CURRENT_INDEX > 3600 THEN
"数据块_1".CURRENT_INDEX := 1;
END_IF;
"数据块_1".COUNT := "数据块_1".COUNT + 1;
IF "数据块_1".COUNT > 3600 THEN
"数据块_1".COUNT := 3600;
"数据块_1".SUM_REAL := "数据块_1".SUM_REAL - "数据块_1".DB_VAR["数据块_1".CURRENT_INDEX];
"数据块_1".SUM_REAL := "数据块_1".SUM_REAL + #REAL_IN;
ELSE
"数据块_1".SUM_REAL := "数据块_1".SUM_REAL + #REAL_IN;
END_IF;
"数据块_1".DB_VAR["数据块_1".CURRENT_INDEX] := #REAL_IN;
#AVERRAGE_OUT := "数据块_1".SUM_REAL / "数据块_1".COUNT;
2.3、OB1中的调用FC1,我没加条件,你可以根据实际情况加条件调用。
图片说明:
提问者对于答案的评价:
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc285040.html