电工学习网

 找回密码
 立即注册
查看: 3243|回复: 0
打印 上一主题 下一主题

浅谈中断子程序在程序中使用的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2019-7-24 17:16:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
       作为一个热线工程师,平时在热线工作中经常碰到有关子程序和中断子程序调用的问题,这些问题单靠客户描述有时没有程序很难解释和复现,有次就接到一个客户问题,是有关格雷码转换库在S7-200中使用中不工作的问题,客户反映在S7-200SMART上测试正常,同样的程序转换成S7-200的程序下载到S7-200CPU中就无法正常执行,仔细了解后得知,客户是在定时中断中调用了格雷码转换库,S7-200SMART转换正常,S7-200中正常工作,第一次碰到该问题,实在是无法解释,我就按照客户的思路重建了程序如下:
浅谈中断子程序在程序中使用的问题
图1 主程序 启用100ms定时中断
浅谈中断子程序在程序中使用的问题
图2 中断子程序 调用格雷码库

        首先,下载到S7-200 SMART中,监控数据如下:
浅谈中断子程序在程序中使用的问题
图3  S7-200SMART状态图表
        由S7-200SMART状态图表可以看到VB0=2#00100010,可以正常转换成格雷码VB1=2#11000011,程序运行正常。
        然后把同样的程序下载到S7-200中,监控数据如下:
浅谈中断子程序在程序中使用的问题
      由S7-200状态图表可以看到VB0=2#00100010,无法正常转换成格雷码VB0=0,即程序在S7-200中无法执行。
        复现了客户的问题现象,就要开始寻找原因,在S7-200中的plc信息中查看,无意中看到了如下图的信息:
浅谈中断子程序在程序中使用的问题
图5 S7-200 PLC信息

        报错信息为:已超过最大用户子程序嵌套层数,而程序中只有一个中断事件调用了子程序,其他并没有调用,那么问题就应该出现在中断事件中调用的子程序上,于是仔细翻看了系统手册,找到了针对子程序和中断子程序的描述如下:
        S7-200手册中子程序调用规定: 在主程序中,可以嵌套调用子程序(在子程序中调用子程序), 最多嵌套8层。在中断程序中,不能嵌套调用子程序。
        S7-200SMART手册中规定:      从主程序调用时子例程的嵌套深度是 8 级,从中断例程调用时嵌套深度 是  4 级。
       由此问题很明显,S7-200中断子程序中不能嵌套调用子程序,而格雷码库至少嵌套了2层子程序调用,故在S7-200中会报错,无法执行。
        通过以上问题,我明白了看是再不可思议的问题一定有其产生的根源,只有明白其工作原理,才能在工控道路上有所突破。

                                                                                                             -------来自 西门子技术支持工程师

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-5-9 00:09

Powered by © 2011-2022 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表