| 作者 | 主题 |
|---|---|
|
一颗小葱 侠客 经验值:732 发帖数:273 精华帖:0 |
楼主
主题: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楼
主题:回复:FB的问题,老师请进
S7-300/400的所有T定时器应该都是独立的晶振,其启动和停止都依赖于CPU给出的指令。
而且T定时器是异步刷新的,其计时不受PLC的扫描周期影响,可能会出现在同一个扫描周期内,定时器状态改变的情况。也就是扫描开始时,定时器为0;扫描到一半,定时器变成1了。 以你的例子,你在FB1里启动了T0,其后FB1不被调用了,因此是T0并没有收到停止的指令,所以一直在计时。如果你取消跳转,继续调用FB1,那么RLO为0时,你就可以看到T0停止计时了。 因此涉及到T定时器的使用时,最好不要跳转,保证每个周期都执行定时器指令。 |
|
jianghehupo 侠士 经验值:1134 发帖数:131 精华帖:3 |
6楼
主题:回复:FB的问题,老师请进
仿真完毕,不能停止timer。
在fb1中看好像是停止了,但实际上是因为停止了调用FB1,fb1的数据不刷新了; 假如把5s的定时时间设长点,设成50s,m0.0置零10s钟后再置1,会发现定时器的定时时间已经减了10。 说明定时器并没有停止,要停止的话,I0.0要置0.
能学多久,就能活多久。
|
|
划痕 侠圣 经验值:4794 发帖数:2009 精华帖:22 |
8楼
主题:回复: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.
|