关于IEC定时器,我把自己忽悠了!

已锁定

Letham

版主 西门子1847工业学习平台

  • 帖子

    1964
  • 精华

    44
  • 被关注

    343

论坛等级:至圣

注册时间:2006-04-15

白金 白金 如何晋级?

关于IEC定时器,我把自己忽悠了!

24125

25

2017-09-22 14:18:38

star star star star star

IEC定时器和计数器,对比S5定时器和计数器有一些优势


--具有更大的计数、定时范围

--IEC定时器比S5定时器性能更佳,计时更准确。

--IEC定时器/计数器不占用CPU系统资源,只占用工作存储区,所以,只要你的存储够大,可以使用无数IEC定  时器、计数器,

有这么多优点,所以,楼主习惯使用IEC定时器/计数器了(对于使用S5定时器/计数器 还是IEC 还是取决于个人习惯)

简单介绍下我测试IEC定时器的程序吧,

1:一个全局数据块 IECTimerInstance-GlobalDB, 里面类容如下:

1个TON_TIME类型的数组IECTimer

2个Bool类型 IECTimer_IN IECTimer_Q

2个Time类型 IECTimer_ET IECTimer_PT


2:一个FB块 IECTimerTest_Fct及其背景DB块 IECTimerTest_Fct_DB

   FB块参数接口和代码如下

Static:多重背景IEC_Timer_Mutiinstance

in_out接口:IEC_Timer_Parinstance

temp:tmpQ,tmpET;



3:IEC定时器的单背景系统数据块“IEC_Timer_0_DB”


4:OB1中调用如下



S7-1500中 IEC定时器指令使用的数据来源有3种方式 1.单背景数据块;2.FB中的多重背景;3,参数实例。

测试中,楼主 对三种方式都进行了测试,具体喜欢那种还是看个人习惯吧,我比较偏向于参数实例和多重背景。


在测试过程中,我犯了自以为是,想当然的的毛病,结果把自己忽悠了!


1.自己想当然地认为 ,IEC定时器指令就是SFB而已,没有认真看完IEC定时器的使用帮助,结果有了自己意想不到的结果;测试完成后,回想起来 ,才慢慢明白为什么 IN和PT必须赋值了,二ET和Q在调用时可以隐藏了;

既然IEC指令都占用一个数据块中的类容,为什么在调用比如TON时,IN和PT接口 必须赋值了?不是调用SFB/FB 所有接口都可以不赋值吗?


所以 我在FB里以单背景数据块方式调用TON指令时,固执地写了 如下代码,IN和PT使用自己背景数据块类容

然后在IEC_Timer_0_DB里直接对IN进行置位后,定时器就是不运行!后来乖乖使用 IECTimerInstance-GlobalDB 的里的IECTimerInstance-GlobalDB_IN和IECTimerInstance-GlobalDB_PT后,定时器指令TON才正确运行;


2:为什么 定时器运行了ET和Q的值不刷新了,对此在帮助手册里写的很清楚了,当程序用到ET和Q时,这2个值才会刷新。所以这2个是可选项,IN和PT端是必选的。因为我在调用TON指令时,没有用到ET和Q,所以在观察数据块里的数值时,ET一直没有增加;

后来在 程序最后加了 几句代码 把定时器的ET和Q 赋值给临时变量tmpET和tmpQ,再次观察,FB的背景数据块,全局数据块,和TON定时器单背景系统数据块后看到里面的ET和Q有变化了。(当然,ET和Q可以在调用指令时,直接赋值,这样比较好)


看样,TON指令和SFB/FB的使用方式还是有点区别的,楼主太想当然了!




关于IEC定时器,我把自己忽悠了! 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有8577条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。