签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
IEC定时器和计数器,对比S5定时器和计数器有一些优势:
--具有更大的计数、定时范围
--IEC定时器比S5定时器性能更佳,计时更准确。
--IEC定时器/计数器不占用CPU系统资源,只占用工作存储区,所以,只要你的存储够大,可以使用无数IEC定 时 器、计数器。
有这么多的优势那肯定是必须要用的,只是如何用好才是关键,毕竟实践才是检验好用的标准。
在实际使用中也是发现一些问题:
每次调用一次IEC定时器或计数器都会默认生产一个数据块,使用多了就会发现在系统块中会有一大堆的定时器或计数器的DB块
虽然这样也没啥,但是看着不舒服(有强迫症)。
这就要用到多重背景了,首先要了解什么是多重背景,官方的定义:当函数块 (FB) 调用一个高级函数块时,无需为被调用的块创建单独的背景数据块。被调用的函数块也可将实例数据保存在调用函数块的背景数据块中。这种块调用又称之为多重实例。
使用多重实例具有以下优势:
适用于复杂块的完美结构
背景数据块的数量较少
快速编程本地子程序
看到说明有木有豁然开朗,说做就做
直接建一个TimeDB块,然后把需要用的定时器都往这里放,同时命名好。这样是不是很方便快捷。
或者是这样:
直接建一个定时器的数组,需要多少个就设置多少个。这样就是有个问题:不能给每个定时器命名了。(速度超快,我都这么干,下面会讲到原因)
写完程序开始调试,小编发现这么修改定时器的时间之后定时器不运行了,或者还在继续运行之前设置的时间(1000ms写成1000s),这可不好玩。吓得小编赶紧把程序停止,重新下载在运行,随后赶紧查说明去。
对照一下官方的例子:
看了半天也没发现什么,就是并没有给Q和ET赋值,难道是这原因?
果然,在吧Q给输出到一个变量后居然神奇的可以了,可以了,可以了,重要的事情说三遍。好吧果然是自己粗心大意了,在对照官方的说明:
果然是官方话,看不太懂。。。。。。。
果然还是TO YOUNG
写得很清楚,如果输出为互连,则不更改ET中 的当前值。。。
这个问题算是解决了。
以后写定时器记得给个输出,不要偷懒值给IN和PT
接着调试,问题右来了:图1
图2
各位发现问题了么有,从定时器使用处可以查到哪里使用了定时器.Q的使用点和自身所在的位置,但是,但是通过定时器.Q却不能反向找到在哪使用了定时器。
这就头大了,需要修改时找不到位置,只能通过DB块处找到定时器,在用交叉引用才能找到,这可麻烦了。
想了好几天都没想明白,突然想到之前的问题,定时器要带输出在更改定时器时间时才会更新,问题点会不会在这。
前面我提到过我喜欢直接把定时器定义在数据块的数组中,这是有原因的。在使用中既然不能反向查找到定时器的位置,还不如不给定时器命名(使用数组自带的名字),直接在Q输出的通过建立一个BOOL变量,命名这个变量就好,使用时也直接调用这个变量。
so,搞定问题,用得也很顺手。
拓展一下:
定时的数据格式是:IEC_TIMER 占用个16个字节
计数器的数据格式是:IEC_COUNTER 占用个6个字节
定时器的输入(PT)格式:Time、DWord、DInt(值都是以ms为单位的,使用触摸屏设置定时器值时就知道了)
写完也是一直冒冷汗,果然还是TO YOUNG ,好好学习,天天向上。
写在最后,之前看到万泉河大神说过:好的程序的标准是:不使用M中间量,不使用Timer。
我个人觉得这是一个习惯问题(前提你得使用的是西门子的新plc)。小编自己早期使用三菱的,后面几乎都是S7-1200或者ET200SP,还真几乎不使用M,只要是麻烦。同时查找也麻烦,不知道在哪里使用了,或者说不知道在哪个程序中使用的。小编一般习惯在每个程序中去新建边,这样在那个程序写就使用哪个数据块,好管理。Timer也是如此,并不是说不要用定时器了,把定时器用多重背景数据块建在各自程序块中方便查找,集中管理。
看过万大神后面的文章,这样做的确是很方便移植调用程序,这可是非常赞同的。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1518157&b_id=50&s_id=0&num=7
闲暇之余写的,大家看是是否入眼。欢迎评价
呵呵啦,不能苟同,这样编程与使用T有啥区别呢?
在西门子的1200技术文档里面,也有设个介绍
程序复用相对方便 可以不用将Timer作为inout管脚了
就是个定时计数FB,当FB用就完事了,有啥特别的地方吗,用哪个不是用,S5定时器我觉得也不赖啊,测试时候顺手拖一个就完事
思维不一样想法肯定不一样适合自己就好好用就好
在V15版本更新后IEC定时器的编译逻辑好像发生了变化,在公司的一些标准功能块升级之初造成了不少的麻烦。
TON和TOF定时器在更新背景数据块首次调用后,即使IN的条件未达成,Q输出依然会保持上次输出状态,这样容易导致整个动作逻辑全部混乱。所以在使用此定时器时需要注意使用RESET_TIMER这个指令
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录