签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
现场采集一组电压值,数组:Array[0..100]一共100个电压;然后每个电压值需要用当前值去和30s之前去比较;
1s钟采集一次, 当前采集的值和30s之前的值对比。超过阈值报警
请教大虾。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1640226&b_id=50&s_id=0&num=5
先搞清楚1个电压信号的比较逻辑,再来谈100个电压信号的问题。建一个0..30的数组。每秒钟采样一下,新数据替换数组中最早的那一条(可以做一个静态变量跟踪最新数据的位置),然后比较这一条数据与最早的。
程序放到1s的中断中执行:
alarm:=0;
for i:=1 to 29 do
mydata[i]:=mydata[i+1];
end_for;
//前30s不管,30秒后判断
if mydata[1]>0 and abs(pv-mydata[1])>=deta then//mydata[1]>0说明数组已经满了,时间达到30s了
alarm:=1;
end_if;
mydata[30]:=pv;//当前值保存到数组中
100个电压的只是定义一个udt,数据类型为30个元素的数组,然后再定义一个db,db中的元素是数组,数组的数据类型是你定义的udt。然后把上面的程序嵌套到一个for循环中。
Array[0..100]是101个值
一组数据,真正有用的就那么几个:
经常使用excel的人,对数据敏感,会将一组大数据作个预处理,也就是记住关键的几个数据,最大值、最小值、极差、数组计数、均值,每个周期去比较这些具有代表性的数据,效率高很多的。
@楼中楼,这种情况,不要发评论,你评论了,怎么回复你?
abs(pv-mydata[1])>=deta,就是判断当前值和数组中的第一个数组的差值的绝对值是否大于等于deta,deta是你设定的一个允许范围。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录