研发埠

标题: SIMATIC S7-300 400 为什么循环中断被跳过? [打印本页]

作者: 魏冲    时间: 2013-6-6 15:55
标题: SIMATIC S7-300 400 为什么循环中断被跳过?

作者: 姬晓军    时间: 2013-6-6 16:02
中断程序的长度如果在处理某个循环中断时,又来了一个相同的循环中断,此时操作系统会调用OB80,存储这个没有执行的循环中断并且在下一个合适的时候执行此循环中断(如果没有下载时间错误处理组织块(OB80),则CPU会切换到停机STOP状态)。所以如果中断程序持续的时间与调用间隔一样长-由于中断程序不断变化-偶尔情况下循环中断OB执行的时间会大于调用间隔时间。当中断程序(由随后应该执行的循环中断触发)由于处理时间过长而覆盖了随后的两个循环中断时,就存在丢失一个循环中断的危险。由于操作系统只存储一个循环中断,所以在这种情况下就会丢失一个中断。优先级和相位偏移参数设置不当由于当前正在处理另外的循环中断,而这时又调用一个循环中断,该循环中断就会被跳过。使用优先级以及相位偏移可以调整程序处理时间。· 避免在一个优先级内分配多个循环中断处理;· 不要将优先级0分配给要使用的循环中断OB。如果存在其它OB,则不会执行这个循环中断;· 在调用间隔内设置循环中断的相位偏移(互为公倍数关系)禁止循环中断检查是否在循环程序中使用SFC 39“DIS_IRT”禁止了不希望出现的循环中断。在这种情况下,操作系统既不会调用循环中断OB,也不会触发非编程循环中断OB定义的响应过程。即使使用SFC 40“EN_IRT”解除了对循环中断的禁止,也不会立即执行此循环中断。禁止循环中断的事件会影响所有的优先级。此处可以参见这两个SFC的在线帮助。延迟循环中断检查是否在循环程序中使用SFC 41“DIS_AIRT”延迟了不希望出现的循环中断或者中断驱动的程序,结果造成这些中断或者程序丢失。使用SFC 41“DIS_AIRT”,可以延迟处理优先级高于当前OB的循环中断OB。可以在OB中多次调用SFC 41。操作系统会计算调用SFC 41的次数,处理延迟一直有效,除非使用SFC 42“EN_AIRT”取消使用SFC 41设置的中断延迟,或者直到处理完当前OB为止。此处可以参见这两个SFC的在线帮助。




欢迎光临 研发埠 (http://bbs.yanfabu.com/) Powered by Discuz! X3.2