PLC
直播中

陈文博

8年用户 994经验值
擅长:测量仪表
私信 关注

请问一下怎样去编写中断处理的程序

中断处理的目的是什么?
中断源类型主要有哪几种?怎样去编写中断处理的程序?

回帖(1)

周振夜

2021-9-7 10:06:39
  中断处理用来实现对特殊内部事件或外部事件的快速响应。CPU检测到中断请求时,立即响应中断,调用中断源对应的中断程序(OB)。执行完中断程序后,返回被中断的程序中。
  中断源类型主要有:I/O模块的硬件中断,软件中断,例如日期时间中断、延时中断、循环中断和编程错误引起的中断等。
  1.日期时间中断组织块
  日期时间中断组织块有OB10~OB17.CPU318只能支持OB10和OB11,其余的S7-300CPU只支持OB10.S7-400支持的日期时间中断OB的个数与CPU的型号有关。
  日期时间中断可以在某一特定的时间和日期执行一次,也可以从设定的日期时间开始,周期性地重复执行,例如每分钟、每小时、每天、甚至每年执行一次。
  1)设置日期时间中断有两种方法
  A.采用SFC28“SET_TINT”和SFC30“ACT_TINT”设置和激活日期时间中断。
  B.在硬件组态界面,通过右击CPU模块,设置选项卡”Time-Of-Day Interrupts“进行设置。在“Time-Of-Day Interrupts”选项卡中设置好时间,同时选择“Active”激活多选框,将硬件下载到CPU中,即可实现日期时间中断的自动启动。
  C.结合A、B两种方法,使用B中的方法,但是不勾选“Active”复选框,用来设置中断循环周期及相关中断参数;在代码中使用SFC30“ACT_TINT”来激活日期时间中断。
  2)查询日期时间中断
  使用SFC31”ORY_TINT“可以查询出程序中都设置了哪些日期时间中断,以及这些中断什么时候发生。SFC31输出的状态字节如下表所示:
  
  3)禁止和激活日期时间中断
  SFC28用于取消日期时间中断、SFC29用于重新设置时间中断、SFC30用于激活日期时间中断。
  在调用SFC28设置循环周期”OB10_PERIOD_EXE“时,可以设置以下参数:
  W#16#0000(仅执行一次)、W#16#0201(每分钟执行一次)、W#16#0401(每小时执行一次)、W#16#1001(每天执行一次)、W#16#1201(每周执行一次)、W#16#1401(每月执行一次)、W#16#1801(每年执行一次)和W#16#2001(月末执行一次)
  4)下面通过一个示例来说明日期中断的使用
  例:在I0.0的上升沿时启动日期时间中断OB10,在I0.1为1时禁止日期时间中断,每次中断使用MW2加1。从2015年2月19日8时开始,每分钟中断一次,每次中断MW2被加1.
  本程序使用了SFC3“D_TOD_DT”用于将日期和时间整合成日期时间类型,程序编写如下:
  a.日期时间中断设置及激活功能FC1
  
  b.OB块调用功能FC1
  
  c.OB10实现NW2增1功能
  
  d.程序运行后效果图
  
  2.延时中断
  PLC中的普通定时器的工作与扫描工作方式有关,其定时精度受到不断变化的循环周期的影响。使用延时中断可以获得精度较高的延时,延时中断以ms为单位定时。
  S7提供4个延时中断OB(OB20~OB23),CPU可以使用延时中断OB的个数与CPU的型号有关,S7-300(不含CPU318)只能使用OB20,。用SFC32”SRT_DINT“启动,经过设定的时间触发中断,调用SFC32指定的OB。延时中断可以用SFC33“CAN_DINT”取消。用SFC34”ORY_DINT“查询延时中断的状态,它输出的状态字节STATUS如表所示。
  
  例:在I0.0的上升沿用SFC32启动延时中断OB20,10s后OB20被调用,在OB20中将Q4.0置位,并立即输出。在延时过程中如果I0.1由0变为1,在OB1中用SFC33取消延时中断,OB20不会再被调用。I0.2由0变为1时Q4.0被复位。
  程序编写如下:
  1)OB块设置延时中断定时器
  
  
  2.延时中断定时器中置位输出
  
  程序代码可以在此下载。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分