liaohp
级别: 略有小成
精华主题: 0
发帖数量: 113 个
工控威望: 200 点
下载积分: 607 分
在线时间: 113(小时)
注册时间: 2011-09-28
最后登录: 2023-03-30
查看liaohp的 主题 / 回贴
楼主  发表于: 2021-10-19 22:20
描述:主程序
图片:
描述:子程序
图片:
应用背景:采集到的模拟量 总是变化很大,我想做一个相当于滤波的程序,原理就是把 数据data_in  累加比如1000次,然后 再求平均值,但是我怀疑在  for next循环 执行过程中,外部的数据改变了,可能不会对for next内部 生效,又或者 基于PLC的原理,会不会在执行for next内部程序的时候,根本就不会去 处理 for next外部的其他程序。所以想请教各位。
suegu2
级别: 家园常客
精华主题: 0
发帖数量: 318 个
工控威望: 583 点
下载积分: 6627 分
在线时间: 271(小时)
注册时间: 2012-09-22
最后登录: 2024-04-26
查看suegu2的 主题 / 回贴
1楼  发表于: 2021-10-20 08:39
我觉得可以用定时中断来处理
cvlsam
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员

精华主题: 3 篇
发帖数量: 6738 个
工控威望: 37093 点
下载积分: 8340 分
在线时间: 9383(小时)
注册时间: 2006-09-13
最后登录: 2024-04-27
查看cvlsam的 主题 / 回贴
2楼  发表于: 2021-10-20 08:56
引用
引用楼主liaohp于2021-10-19 22:20发表的 关于for循环内部 数据如果发生改变 的执行结果 讨教 :
应用背景:采集到的模拟量 总是变化很大,我想做一个相当于滤波的程序,原理就是把 数据data_in  累加比如1000次,然后 再求平均值,但是我怀疑在  for next循环 执行过程中,外部的数据改变了,可能不会对for next内部 生效,又或者 基于PLC的原理,会不会在执行for next内部程序的时候,根本就不会去 处理 for next外部的其他程序。所以想请教各位。



FOR循环在当前周期内执行完毕,因此,你需要首先采集好1000次数据,然后通过FOR循环进行处理.

Good Luck~
wenliang
擡頭白雲悠悠,前竟一片黯愁……
级别: 家园常客
精华主题: 0
发帖数量: 695 个
工控威望: 883 点
下载积分: 42959 分
在线时间: 530(小时)
注册时间: 2014-04-04
最后登录: 2024-04-22
查看wenliang的 主题 / 回贴
3楼  发表于: 2021-10-20 09:13
大师 威武
zjw424260912
级别: 探索解密
精华主题: 0
发帖数量: 95 个
工控威望: 125 点
下载积分: 731 分
在线时间: 65(小时)
注册时间: 2019-05-16
最后登录: 2024-04-11
查看zjw424260912的 主题 / 回贴
4楼  发表于: 2021-10-20 09:33
你这个是汇川的H5U?   
小侯
小侯
级别: 工控侠客
精华主题: 0
发帖数量: 470 个
工控威望: 2600 点
下载积分: 6408 分
在线时间: 488(小时)
注册时间: 2008-10-17
最后登录: 2024-04-26
查看小侯的 主题 / 回贴
5楼  发表于: 2021-10-20 09:56
一般迴圈都是連續執行
比如1~100連加總和等
如果是採樣平均應該是以變數將每次執行時的採樣對象以變址的方式另存暫存
然後將暫存1~暫存100的數值以迴圈方式進行總和平均
或是看使用的PLC是否有數值平均的指令
像三菱的MEAN指令
我看到你了
级别: 家园常客
精华主题: 0
发帖数量: 375 个
工控威望: 619 点
下载积分: 490 分
在线时间: 156(小时)
注册时间: 2018-05-02
最后登录: 2023-09-22
查看我看到你了的 主题 / 回贴
6楼  发表于: 2021-10-20 11:29
数据调动如果大,你就算取平均值对整体还是有影响的。不如data_in前做一个上下限的数据过滤,超太多的数据直接不要
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1590 分
在线时间: 408(小时)
注册时间: 2017-10-10
最后登录: 2024-04-24
查看枫落云端的 主题 / 回贴
7楼  发表于: 2021-10-20 11:45
一般PLC的扫描周期在10ms内吧(不排除步数大的程序超过10ms,毕竟少数,就先不讨论),你能确定10ms内模拟量波动值非常大?还是说模拟量模块的采集周期比PLC的10ms扫描周期小得多,按1000份算,至少0.01ms也就是10μs的采样频率,模拟量模块有这么快的速度吗?就算有这么快,模拟量到PLC是否也能这个快给你接收1000份采样值。
如果以上都没有,那么10ms内累计的这个采样值的就会都是一个数值,你再怎么累计1000份再平均都是没有用的。
liaohp
级别: 略有小成
精华主题: 0
发帖数量: 113 个
工控威望: 200 点
下载积分: 607 分
在线时间: 113(小时)
注册时间: 2011-09-28
最后登录: 2023-03-30
查看liaohp的 主题 / 回贴
8楼  发表于: 2021-10-22 10:23
引用
引用第4楼zjw424260912于2021-10-20 09:33发表的  :
你这个是汇川的H5U?   

是的
liaohp
级别: 略有小成
精华主题: 0
发帖数量: 113 个
工控威望: 200 点
下载积分: 607 分
在线时间: 113(小时)
注册时间: 2011-09-28
最后登录: 2023-03-30
查看liaohp的 主题 / 回贴
9楼  发表于: 2021-10-22 10:35
引用
引用第7楼枫落云端于2021-10-20 11:45发表的  :
一般PLC的扫描周期在10ms内吧(不排除步数大的程序超过10ms,毕竟少数,就先不讨论),你能确定10ms内模拟量波动值非常大?还是说模拟量模块的采集周期比PLC的10ms扫描周期小得多,按1000份算,至少0.01ms也就是10μs的采样频率,模拟量模块有这么快的速度吗?就算有这么快,模拟量到PLC是否也能这个快给你接收1000份采样值。
如果以上都没有,那么10ms内累计的这个采样值的就会都是一个数值,你再怎么累计1000份再平均都是没有用的。


不是10ms内波动大,是我肉眼看波动大,想处理平滑点。
模拟量采集周期我设置为50hz,也就是0.02s,20ms,假如PLC扫描周期为10ms,也就是2个周期 才检测到模拟量变化,我现在的做法是每个扫描周期记录数据,然后多个周期求平均值,有些效果
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1590 分
在线时间: 408(小时)
注册时间: 2017-10-10
最后登录: 2024-04-24
查看枫落云端的 主题 / 回贴
10楼  发表于: 2021-10-22 12:46
其实我想说你的程序里算法已经有问题了,程序里逻辑就是一个PLC扫描周期里用FOR循环采集N次,再平均。
跟你实际需求的长时间多次采集求平均已经不同了。