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可以在调用指令时,直接赋值,这样比较好)