这一篇学习笔记是放假期间自己练习的总结,由于这里审核严格,我在博客园先发表了,现在这里再记录一遍。
以前做过练习,在unity中计算分钟均值和小时均值,做成自定义功能块。今天在家打算按照同样的思路,试着做一下日均值。
第一次打算建立一个三维数组PV_DAY[0..23,0..59,0..59],每秒存放一个数据,编译的时候提示数组太大。
第二次尝试建立24个数组,每个数组存放一个小时内3600个检测值,最终编译的时候提示PLC保存数据内存满,我的这个练习还没有做其他的检测控制功能,说明这样的频率存放数据,计算均值能把CPU弄死机。
最终转变思路,不要1秒采集一个数据,把数据存储频率弄低一点,经过多次尝试,6秒采集一次比较合适。
新建一个导出的功能块类型PV_AVG_DAY,配置内部变量和程序段如下:

AVG_DAY程序段ST编程方式,脚本如下:
Minute1:=BCD_TO_INT(%SW51);
HOUR:=DIV(Minute1,100);
Minute:=mod_int(Minute1,100);
Second1:=BCD_TO_INT(%SW50);
Second:=div(second1,100);
Cur_Minute:=Minute;
Cur_Second:=Second;
SUM:=0.0;
i:=mod(second,6);
if i=0 then
PV_HOUR[HOUR,Minute,Second]:=PV;
end_if;
for
第一次打算建立一个三维数组PV_DAY[0..23,0..59,0..59],每秒存放一个数据,编译的时候提示数组太大。
第二次尝试建立24个数组,每个数组存放一个小时内3600个检测值,最终编译的时候提示PLC保存数据内存满,我的这个练习还没有做其他的检测控制功能,说明这样的频率存放数据,计算均值能把CPU弄死机。
最终转变思路,不要1秒采集一个数据,把数据存储频率弄低一点,经过多次尝试,6秒采集一次比较合适。
新建一个导出的功能块类型PV_AVG_DAY,配置内部变量和程序段如下:
AVG_DAY程序段ST编程方式,脚本如下:
Minute1:=BCD_TO_INT(%SW51);
HOUR:=DIV(Minute1,100);
Minute:=mod_int(Minute1,100);
Second1:=BCD_TO_INT(%SW50);
Second:=div(second1,100);
Cur_Minute:=Minute;
Cur_Second:=Second;
SUM:=0.0;
i:=mod(second,6);
if i=0 then
PV_HOUR[HOUR,Minute,Second]:=PV;
end_if;
for
