在实际项目中会遇到需要定时采样的情况,比如:对心跳计数器的定时采样,以判断通信是否中断;对液体流过体积的定时采样,以判断液体处于流动状态还是静止状态;这些功能,都需要定时采样程序来完成。今天这篇文章,给大家介绍下我用西门子SCL语言实现的一个定时采样程序。
该定时采样程序可以固定的时间间隔对一个整数进行采样,采样的结果会存放到两个整数变量:data1和data2中。data1是奇数次采样的结果,data2是偶数次采样的结果。
程序实现的思路如下:
采样过程分为三种状态:
奇数次采样:状态激活后采样存放到data1中,并修改状态值为【采样空闲】;
偶数次采样:状态激活后采样存放到data2中,并修改状态值为【采样空闲】;
采样空闲期:状态激活后进行空闲计时,当计时时间到了之后,判断之前的采样状态,并切换到另一种状态;
函数块实现:
输入参数三个:
active:激活或取消采样功能,1=激活;
timeInterval:采样间隔时间,默认5s;
sourceData:数据源;
输出参数两个:
data1:奇数次采样的数据;
data2:偶数次采样的数据;
输入/输出参数如下图所示:
函数块使用的静态变量如下图所示:
函数块的代码如下图所示:
这个函数块我在实际项目中测试过,感兴趣的小伙伴可以自己测试下,如果发现有任何问题欢迎留言反馈。
我的微信视频号已经开通,以视频的方式分享一些工控小知识,欢迎扫描下面的二维码查看:
发表评论
您好,请问分为奇数和偶数采样有什么好处呢?
这个程序有点问题,statsamplestatus初始值为0,active为true,则CASE进入else中,TON_TIME工作,定时时间到,则stats ampletimereached为true,下面的statsample1active或statsanmple2active初始值为false,则不能进入CASE的1或2。
请好好看看图片中statSampleStatus的初始值!
实在不好意思,我这里不严谨了。感谢分享与指导!