如何用数据块中的值做指针
刘玉蓉
发布于2014-10-21 17:18
135
0
标签:
准备做60次取样值的平均值,现在有一个数据块DB160, 从DBW0到DBW118是数组放60个历史值,DBD120放总和,DBW124放均值,DBX126放0-59的循环数(由60取模而来),每当块调用一次 读取DBX126,找出对应的历史值由总数减去历史值,然后加上新从外部取样读取的值成为新总数放入原总数位置,新读取值放入原历史值位置成为历史值,循环值加一. 我是次用语句表,小白了 ,看了半天S7-400寻址写出来的还全是红字(特别是怎么用循环值找历史值),请帮忙写一个范例,好是有注释。
佳答案
为了合理并编程方便, 修改一下:
DBD120放总和;
DBD124放平均数(这样编程方便);
DBW128放循环参数。
1、在FC1中编制下述程序,对有关单元进行初始化:
OPN DB160
L L#0//32位整数常数
T DBD120//初始累加和单元
T DBD124//初始累加和单元
L 0
T DBW128//初始平均单元
2、 在FC2中编制 :
OPN DB160//打开数据块
L P#0.0 //初始指针
LAR1
L 60 // 60字的循环计数为初值
M001: T DBW128 //计数值 送入DW126
L DBW [AR1,P#0.0] //按指针指示的地址读数据
ITD //整数(16 位)转成双整数(32 位)
L DBD120
+D //作为双整数(32 位),将累加器1 和累加器2 的内容相加
T DBD120//l进行累加
+AR1 P#2.0 //读指针指向下一数据地址
L DBW128 //取循环计数值
LOOP M001 //循环计数值如为0则结束循环;如不为0减1后则转向标号为M001的语句,继续循环。
L DBD120
L L#60// 32位常数60
/D // 求平均数
T DBD124//存平均数
3、根据实际要求来安排FC1、FC2的调用顺序。注意FC1一般只调用一次。