找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
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,我没加条件,你可以根据实际情况加条件调用。
L P#14400.0
>=D
JCN STP
L P#0.0
T MD 100
STP: NOP 1
OPN "DB3"
L "AI" //AI,可改为MD110
T DBD [MD 100]
L 0.000000e+000
T "SUM" //和,MD120
LAR1 P#0.0
L 3600
STP1: T LW 0
L DBD [AR1,P#0.0]
L "SUM"
+R
T "SUM"
+AR1 P#4.0
L LW 0
LOOP STP1
L "SUM"
L 3.600000e+003
/R
T "AVG" //平均MD124
求平均值则直接把数组求和后除以3600.0即可。
补充:其他人看清楚,他要的不是fifo功能,而是循环存储功能.
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!