来自西门子技术支持热线的故事:S7-200怎样编写子程序,被多次调用时可实现定时器功能

已锁定

西门子Auto

官方工程师

  • 帖子

    132
  • 精华

    16
  • 被关注

    227

论坛等级:侠圣

注册时间:2007-08-03

普通 普通 如何晋级?

来自西门子技术支持热线的故事:S7-200怎样编写子程序,被多次调用时可实现定时器功能

19972

13

2011-06-14 09:57:45

“子程序调用定时器”映入眼帘,百度里好像也看到过大家讨论的帖子,还蛮激烈……相信有需要的你会同我一样感兴趣,于是信心满满的拨通了电话“您好,这里是西门子技术支持……?”
客户:我在子程序中使用了定时器,当主程序多次调用该子程序时发现程序的逻辑无法正常执行,为什么?
答:在条件调用子程序的主程序中,当停止子程序调用时,如果定时器已经被激活正在计时,那么停止调用该子程序会造成定时器的失控。不管此时定时器前面的激活条件如何,定时器(1ms、10ms 时基的)会一直走到最大值,定时器输出会在达到设定值时接通;定时器(100ms 时基的)会停止计时,逻辑上处于失控状态,当重新使能子程序调用该定时器时,它从之前停止的时间开始计时。
如果用 SM0.0 调用子程序;或者在控制逻辑的时序上做到能够保证定时功能完整执行,定时器会正常运行。使用条件调用含有定时器的子程序时,一定要注意定时器的分辨率和时序逻辑,以免造成程序运行错误;如果多次调用该子程序,可能会发生程序失控,通常这种情况下,定时器一般只按照首次被调用时计时。
客户:这样啊,可是我用Step7编写FC块,也是多次调用定时器就没问题啊?
答:首先确定一点,S7-200和S7-300不论是硬件还是软件上都不同,没有类比性的。PLC定时器实际上就是一个晶振,它的更新依赖于扫描定时器的触点,当触发后就一直在运行,直至计时结束,这对S7-200还是S7-300都是一样的。之所以会有你说的情况,是因为在STEP7定义局部变量时定时器号可以设置成参数,而在MicroWIN中局部变量定义里没有定时器类型,只能用固定编号的定时器。在S7-200中,当多次调用该子程序时,实际上是对同一个定时器重复操作;S7-300调用子程序时,赋不同的定时器编号,当然也就不存在相互影响的问题。

客户:那照你这么说,S7-200的功能不行啊。要是我有多组相同控制要求的阀门控制(时间控制),需要写个定时器的子程序,在主程序中会多次调用该子程序,就肯定会出现问题的。那怎么办,难道要在主程序中重复写同样的逻辑啊?那要是一百组,还写一百遍啊,真不环保!
答:恩,却实不够绿色,而且定时器个数是有限的。不过我们可以曲线救国嘛,通过编写程序来实现定时功能,这样也就不存在定时器被多次调用的问题了。定时器实际上就是读取CPU内部晶振的次数。我们完全可以做个基准时基Time1,每个时基都对AC进行加1。通过AC1-AC0,那么就将时间设定转换为读取计数差值,这时差值与时基的乘积就是设定时间。可以用定时器中断或是SM0.5编写子程序。
……
客户:我实验没做成,总出现些意想不到的问题?
答:恩,能说下编程思路吗?经核实,发现编程中出现以下问题:
1.客户是用SM0.5(0.5秒)来作为时基的,子程序中通过SM0.5的上升沿来触发自加功能。
问题:系统给应用的边沿指令自动分配了寄存器,这个自动分配是针对每个子程序的,而不是子程序的每次调用。当多次调用该子程序,边沿指令使用的其实都是同一个寄存器里的数值,这就有可能会出现问题。你可以在“运行时编辑程序”,这时可以看到每个边沿指令都有一个数字的编号,在S7-200的系统中,边沿指令的个数是有限制的。
解决:可将需要的边沿检测做在主程序中,而把该结果作为子程序的输入参数。或者使用Rising_Falling_edge库函数,实现无限边沿指令。http://support.automation.siemens.com/CN/view/zh/17542200?Datakey=24676421
或采用定时中断的方法,每次进入中断时进行一次自加1的逻辑,这样也不需要使用上升沿。采用中断的优点,除了可以设置ms时基,更重要的是中断事件不受程序的扫描周期的影响,计时更精准。
2.子程序局部变量,把AC设置为IN类型。
问题:每次调用子程序时,这个变量都是系统默认的初始值,无法实现累加功能。
解决:将该局部变量改为IN_OUT类型。该变量保存本次运算结果,当再次被调用时,作为初始值。
客户:好的,明白了,我赶紧去试试!
现今什么都提倡T型发展,工业产品当然也是了,虽然对于针对性有要求,但普遍适用性更重要。S7-200就是一款通用性很强大的产品。虽然直接提供的功能有限,但我们可以利用聪明的大脑,通过编程等方式,获得产品更大的利用空间。
来自西门子技术支持热线的故事:S7-200怎样编写子程序,被多次调用时可实现定时器功能 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54044条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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