中断程序请教

中断程序始终理解不透彻。请师傅们帮忙。最好能用筒单的例子来说明。多谢了!!!

问题补充:
能不能举一个简单例子加以说明呀!!!比如I\O中断.怎样中断的?中断后又怎样执行中断程序的? 
    ruixm大佬可以再举一两个简单中断程序的例子吗?!

最佳答案

中断程序其实就是一个子程序,一个带条件调用的子程序,比如当有通讯故障时调用对应的中断程序,条件就是通讯故障。

   关于s7200,你可以在microwin界面点击F1帮助,在索引中输入中断查询:
   中断由事件驱动。在启动中断例行程序之前,必须使中断事件与发生该事件时您希望执行的程序段建立联系。使用"中断连接"指令(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采用先来先服务的原则为中断提供服务。在任何时刻,只能执行一个用户中断例行程序。一旦一个中断例行程序开始执行,则一直执行至完成。不能被另一个中断例行程序预先排空,即使是更高优先级别的例行程序。正在处理另一个中断时发生的中断入队等待处理。

   注释:
   编辑器自动插入无条件POU终止指令(END用于OB1,RET用于SBR,RETI用于INT),以下显示一个范例。

   箭头表示指令由Micro/WIN自动处理

   
   另请参阅:
   队列溢出错误(中断)

   中断事件时间间隔赋值
   中断事件优先级别表
   局部变量表

   关于S7300/400,参考STEP7 编程手册第4章,在下载中心可下载。

   补充:比如STEP7中你可在OB122(I/O访问错误)中编程输出一个报警灯,
   A  M0.0
   ON M0.0
   =  Q0.0

 
  再补充:再比如OB35时钟中断(我记得好像是100MS时钟中断),你可以在其中写上:
   L     MW0
   L     1
   +I    
   T     MW0
  即每100MS让MW0加1。
 

提问者对于答案的评价:
很好

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc357468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午9:56
下一篇 2021年7月5日 上午9:56

相关推荐

  • smart200

    我想利用smart200作为远端的监控系统,smart200组建在系统中的网络上,但是我看资料smart200最远的传输距离光纤的才4.3KM不足以满足我的要求 。不知道…

    SIMATIC S7-200 2017年11月12日
  • 初级

    请教,哪里有s7200的累加器计算的视频,谢谢! 最佳答案 这是200学习的基本学习视频,你可以去看一下http://www.ad.siemens.com.cn/service/e…

    SIMATIC S7-200 2021年7月5日
  • 请教S7200的PTO/PWM

    各位高手,请教:S7200DE  PTO/PWM。我在学习PTO时看到一个程序,其中:   MOVW +550,SMW6…

    SIMATIC S7-200 2020年11月1日
  • 笔记本电脑USB口和200自由口通讯线

    为了调试方便,通常使用USB/PPI调试程序(因我的笔记本没有RS232口)。现在正测试西门子200自由口通讯。连接方式如下:使用USB转RS232串口(包括电脑已安装串口驱动),…

    SIMATIC S7-200 2017年12月21日
  • 200扩展模块EM231

    加了个500欧电阻,转化为电流型,变送器为4-20mA,在程序里做了个表达式:(X-6400)/25600=(Y+修正值-0)/150-0变送器量程0-150,修正值设为0,一采集…

    SIMATIC S7-200 2020年11月1日
  • s7 1200 modbus 15台变频器通讯

    15台变频器通讯  modbus  怎么在程序里面做一个监测这15台变频器是否有掉线过  掉线过几次怎么写这个掉线监测程…

    SIMATIC S7-200 2021年7月5日
  • 带有外部方向控制的单相计数器是不是外部方向 的那个点接通就是加计数器?

    比如:HSC0工作在模式3,是不是I0.1接通时就是加计数器? 问题补充:如果还要对SM37.3进行设置,那与内部计数器还有什么区别呢? 最佳答案 带有外部方向控制的单相计数器改变…

    SIMATIC S7-200 2021年7月4日
  • PID指令向导中的

    PID指令向导中的,过程变量和给定值是什么意思??分别怎么设置。求解,谢谢 最佳答案 、过程变量和给定值是什么意思?过程变量(实时检测值)即所调节过程中调节量的反馈值。例如在压力调…

    SIMATIC S7-200 2020年11月1日
  • S7-200自由口通信问题

    我用200PLC自由口通信与一位移传感器相联,读取每一个产品的长度,现在出现了发送与接收同时工作的现象,报错代码为009;请各位帮我看下我的接收与发送时的程序,这样写可以不,程序如…

    SIMATIC S7-200 2021年7月4日
  • 我用双绞线和D9头做两台200PLC之间通讯的硬件接线终端电阻怎么办

    一共连5个200PLC用双绞线和D9头做的,请问一下需要弄个终端电阻吗  要的话电阻是直接一端接3一端接8吗,还有电阻选多大的啊 最佳答案 1.首先如果是在办公…

    2017年11月29日

发表回复

登录后才能评论