回复:定时中断必须在第一扫描周期定义么?

JZS2359

  • 帖子

    1140
  • 精华

    1
  • 被关注

    8

论坛等级:侠士

注册时间:2007-06-18

普通 普通 如何晋级?

发布于 2007-07-11 21:44:57

0楼

中断由事件驱动。在启动中断例行程序之前,必须使中断事件与发生该事件时您希望执行的程序段建立联系。使用"中断连接"指令(
ATCH)建立中断事件(由中断事件号码指定)与程序段(由中断例行程序号码指定)之间的联系。将中断事件附加于中断例行程序时,该中断自动被启用。

如果您使用全局禁止中断指令禁止所有的中断,中断事件的每次出现均被排队等候,直至使用全局启用中断指令重新启用中断。
使用"中断分离"指令(DTCH)可中断分离事件与中断例行程序之间的联系,从而禁止单个中断事件。"分离"指令使中断返回未激活或被忽略状态。

了解S7-200如何处理中断例行程序
作为对关联的内部或外部事件的应答,执行中断例行程序。一旦中断例行程序的最后一条指令被执行,控制被返回至主程序。您可以用执行"从中断指令有条件返回"指令(CRETI)的方法退出例行程序。

使用中断例行程序指南和限制
中断程序为特殊内部或外部事件提供快速反应。您应当优化中断例行程序,执行某项具体任务,然后将控制返回至主程序。

通过将中断例行程序保持为短小和简明扼要,可加快执行的速度,使其他程序不会受到长时间的延误。如果未能做到这一点,无法预料的情形可能导致主程序控制的装置出现非正常操作状况。

限制
您不得在中断例行程序中使用DISI、ENI、HDEF、LSCR和END指令。

中断的系统支持
由于触点、线圈和累加器逻辑可能受中断的影响,系统保存和重新载入说明累加器和指令操作状态的逻辑堆栈、累加器寄存器和特殊内存位(SM)。这样可避免因分支至中断例行程序和从中断例行程序分支而导致的主程序中断。

在主程序和中断例行程序之间共享数据
您可以在主程序和一个或多个中断例行程序之间共享数据。因为无法预测S7-200何时可能生成中断,最好限制中断例行程序和程序中其他位置使用的变量数目。由于主程序中指令执行被中断事件中断时中断例行程序采取的措施,会导致共享数据一致性故障。使用中断例行程序局部变量表,以确保中断例行程序仅使用临时内存,并且不覆盖程序其他位置使用的数据。

您可以使用各种编程技巧,以确保在主程序和中断例行程序之间正确地共享数据。这些技巧限制存取共享内存位置的方法,或者使用共享内存位置预防出现指令序列中断。

?对于共享单一变量的STL程序:如果共享数据是单字节、字或双字变量,且程序在STL中写入,则可用在非共享内存位置或累加器中存储共享数据操作数的直接数值 的方法,确保正确的共享存取。

?对于共享单一变量的LAD程序:如果共享数据是单字节、字或双字变量,且程序在LAD中写入,则可用建立仅使用"移动"指令(
MOVB、MOVW、MOVD、MOVR)存取共享内存位置常规的方法,确保正确的共享存取。尽管很多LAD指令由STL指令的可中断序列组成,这些"移动"指令却是由单个STL指令组成,此类指令的执行不受中断事件的影响。

?对于共享多个变量的STL或LAD程序:如果共享数据由各种相关的字节、字或双字组成,则可使用中断禁止/启用指令(DISI
和ENI)控制中断例行程序的执行。在主程序***享内存位置操作即将开始的点,禁止中断。一旦所有影响共享位置的措施均完成后,重新启用中断。在中断被禁止的时间内,不得执行中断例行程序,因此无法存取共享内存位置;但是,此种方法会导致对中断事件的延迟应答。

从中断例行程序调用子程序
您可以从中断例行程序调用一个子程序嵌套级别。在被调用的中断例行程序和子程序之间共享累加器和逻辑堆栈。

S7-200支持的中断类型
S7-200支持以下中断例行程序类型:

?通讯端口中断:S7-200生成允许程序控制通讯端口的事件。

?I/O中断:S7-200生成用于各种I/O状态不同变化的事件。这些事件允许程序对高速计数器、脉冲输出或输入的升高或降低状态作出应答。

?时间基准中断:S7-200生成允许程序按照具体间隔作出应答的事件。

通讯端口中断
可用程序控制S7-200的串行通讯端口。此种操作通讯端口的模式被称作自由端口模式。在自由端口模式中,程序定义波特率、每个字符的位、校验和协议。可提供"接收"和"传送"中断,协助您进行程序控制的通讯。详情请参阅"传送和接收"指令。

I/O中断
I/O中断包括上升/下降边缘中断、高速计数器中断和脉冲链输出中断。S7-200可生成输入(I0.0、I0.1、I0.2或I0.3)上升和/或下降边缘中断。可为每个此类输入点捕获上升边缘和下降边缘事件。这些上升/下降边缘事件可用于表示在事件发生时必须立即处理的状况。

高速计数器中断允许您对诸如以下之类的条件作出应答:当前值达到预设值,可能与转轴旋转方向逆转对应的计数方向的改变或计数器外部复原。每种此类高速计数器事件均允许针对按照可编程逻辑控制器扫描速度控制的高速事件采取实时措施。

脉冲链输出中断发出输出预定数目脉冲完成的立即通知。脉冲链输出的最常见用法是步进器电机控制。

您可以用将中断例行程序附加在相关I/O事件上的方法,启用上述每种中断。

时间基准中断
时间基准中断包括定时中断和定时器T32/T96中断。您可以使用定时中断基于循环指定需要采取的措施。循环时间被设为从1毫秒至255
毫秒每1毫秒递增一次。您必须在SMB34中将定时中断的循环时间设为0,在SMB35中将定时中断的循环时间设为1。

每次定时器失效时,定时中断事件将控制传输给适当的中断例行程序。通常您使用定时中断控制模拟输入取样或定期执行PID环路。

当您将中断例行程序附加在定时中断事件上时,则启用定时中断,且计时开始。在附加的过程中,系统捕获循环时间数值,因此其后对SMB34和SMB35所作的改动不会影响循环时间。欲改动循环时间,您必须修改循环时间数值,然后将中断例行程序重新附加在定时中断事件上。重新附加时,定时中断功能从以前的附件中清除所有的累计时间,并开始用新数值计时。

时间中断被启用后,则持续运行,每当指定的时间间隔失效时,执行中断连接例行程序。如果您退出RUN(运行)模式或分离定时中断,定时中断被禁止。如果全局禁止中断指令被执行,定时中断继续进行。每次定时中断出现均排队等候(直至中断被启用或队列已满)。

定时器T32/T96中断允许对指定时间间隔完成及时作出应答。仅在1毫秒分辨率接通延时(TON)和断开延时(TOF)定时器T32和T96
中支持此类中断。否则T32和T96按照正常情况作业。一旦中断被启用,在S7-200中执行的正常1毫秒定时器更新的过程中,当现用定时器的当前值等于预设时间数值时,即执行中断连接例行程序。您用将中断例行程序附加至T32/T96中断事件的方法,启用此类中断。

中断优先级别和入对等候
S7-200在中断各自的优先级别群组内按照先来先服务的原则为中断提供服务。在任何时刻,只能执行一个用户中断例行程序。一旦一个中断例行程序开始执行,则一直执行至完成。不能被另一个中断例行程序预先排空,即使是更高优先级别的例行程序。正在处理另一个中断时发生的中断入队等待处理。


每个中断队列最大条目数
队列 CPU 221、CPU 222
CPU 224 CPU 224 XP
CPU 226和CPU 226XM
通讯队列 4 8
I/O中断队列 16 16
定时中断队列 8 8
一般而言,出现的中断数目会超出队列能够容纳的数目。因此,队列溢出内存位(识别已经丢失的中断事件类型)由系统保持。下表显示中断队列溢出位。您应当仅在中断例行程序中使用这些位,因为当队列排空时这些位会被复原,控制被返回主程序。

中断队列溢出位
说明(0 = 无溢出,1 = 溢出) SM位
通讯队列 SM4.0
I/O中断队列 SM4.1
定时中断队列 SM4.2
可采用下列一种方法建立中断例行程序:

?从"编辑"菜单,选择插入(Insert)> 中断(Interrupt)。

?从指令树,用鼠标右键点击"程序块"图标并从弹出菜单选择插入(Insert)> 中断(Interrupt)。

?从"程序编辑器"窗口,从弹出菜单用鼠标右键点击插入(Insert)> 中断(Interrupt)。

程序编辑器从先前的POU显示更改为新中断例行程序。在程序编辑器的底部会出现一个新标记,代表新中断例行程序。

一个程序中总共可有128个中断。在各自的优先赋值范围内,PLC采用先来先服务的原则为中断提供服务。在任何时刻,只能执行一个用户中断例行程序。一旦一个中断例行程序开始执行,则一直执行至完成。不能被另一个中断例行程序预先排空,即使是更高优先级别的例行程序。正在处理另一个中断时发生的中断入队等待处理。

知识改变未来
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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