技术论坛

 回复:FB的问题,老师请进

返回主题列表
作者 主题
一颗小葱
侠客

经验值:732
发帖数:273
精华帖:0
楼主    2012-09-04 13:55:47
主题:FB的问题,老师请进
各位老师好,今天在公司模拟一个东西的时候,发现了一个问题,然后我又建了个简单的程序测试,PLCSIM模拟依旧。程序如下:FB1程序
A #in1
L S5T#5S
SD T 0
A I 0.2
R T 0
NOP 0
NOP 0
A T 0
= #OUT1
OB1程序

A I 0.0
= L 20.0
BLD 103
A M 0.0
JNB _001
CALL FB 1 , DB1
in1 :=L20.0
OUT1:=Q0.0
_001: NOP 0

这是我用梯形图编写转换成STL的,当M0.0为1且I0.0为1的时候,定时器开始计时,但是当M0.0为0,I0.0为1的时候,定时器依旧在计时。这点不理解,M0.0为0的时候,按说我已经不再调用FB1了,为什么FB1内的定时器依旧在计时呢?以前还真没注意过这个为题。我用的是PLCSIM模拟的,请老师赐教
不会就要学,不懂就要问
emil128
侠圣

经验值:3827
发帖数:271
精华帖:10
1楼    2012-09-04 16:53:19
精华帖  主题:回复:FB的问题,老师请进
S7-300/400的所有T定时器应该都是独立的晶振,其启动和停止都依赖于CPU给出的指令。
而且T定时器是异步刷新的,其计时不受PLC的扫描周期影响,可能会出现在同一个扫描周期内,定时器状态改变的情况。也就是扫描开始时,定时器为0;扫描到一半,定时器变成1了。
以你的例子,你在FB1里启动了T0,其后FB1不被调用了,因此是T0并没有收到停止的指令,所以一直在计时。如果你取消跳转,继续调用FB1,那么RLO为0时,你就可以看到T0停止计时了。
因此涉及到T定时器的使用时,最好不要跳转,保证每个周期都执行定时器指令。
jianghehupo
侠士

经验值:1134
发帖数:131
精华帖:3
6楼    2012-09-05 11:36:45
精华帖  主题:回复:FB的问题,老师请进
仿真完毕,不能停止timer。
在fb1中看好像是停止了,但实际上是因为停止了调用FB1,fb1的数据不刷新了;
假如把5s的定时时间设长点,设成50s,m0.0置零10s钟后再置1,会发现定时器的定时时间已经减了10。
说明定时器并没有停止,要停止的话,I0.0要置0.
能学多久,就能活多久。
划痕
侠圣

经验值:4794
发帖数:2009
精华帖:22
8楼    2012-09-05 23:48:33
精华帖  主题:回复:FB的问题,老师请进
从使用数量和时基的角度对比:
1、从可使用的个数来讲——使用SFB4没有数量的限制(仅受限于CPU内存大小限制);而使用系统提供的TIMER时支持的个数是有限制的(不同类型CPU,支持的TIMER个数也不一样)。
2、从定时时基来讲,TIMER的时基是固定的;而使用SFB4(或其他IEC_T)的没有时基之说,基本原理是用读取CPU的运行时间作差处理来进行定时的,比如调用SFB4,定时时间10S,当条件满足时SFB4中将记录此时CPU运行时间t1,然后没调用执行一次SFB4将查看当前CPU的运行时间t2,当t2-t1>=10s时,定时器的输出将置位。

总结:使用Timer时,既可以在OB1中使用,也可以其它子程序或中断程序中使用,定时是准确的;而SFB4(或IEC_T)推荐在OB1中使用,并且应该每个扫描周期都要能够执行SFB4,若要在周期中断中使用,一定注意此时的定时时间应该为该中断周期的整数倍,否则定时时间误差会比较大。
此处提供一个使用SFB4出现定时误差为1s的程序代码(见附件),供大家测试。也希望大家和网友“jianghehupo”一样将你的测试结果与大家分享——学习经验的同时也传递一份知识!
点击此处查看附件
No discussion, no outcome.
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。