PLC的中断程序

     可编程序控制器的串行通信口可由用户程序控制,通信口的这种操作模式称为自由端口模式。在该模式下,接收信息完成、发送信息完成和接收一个字符均可产生中断事件,利用接收和发送中断可简化程序对通信的控制。

,

    可用定时中断来执行一个周期性的操作,以1 ms为增量,周期的时间可取1~255 ms。定时中断0和中断1的时间间隔分别写入特殊存储器字节SMB34和SMB35。每当定时器的定时时间到时,执行相应的定时中断程序,例如可以用定时中断来采集模拟量和执行PID程序。如果定时中断事件已被连接到一个定时中断程序,为了改变定时中断的时间间隔,首先必须修改SMB34或SMB35的值然后重新把中断程序连接到定时中断事件上。重新连接时,定时中断功能清除前一次连接的定时值,并用新的定时值重新开始定时。

    定时中断一旦被允许,中断就会周期性地不断产生,每当定时时间到时,就会执行被连接的中断程序。如果退出RUN状态或定时中断被分离,则定时中断被禁止。如果执行了全局中断禁止指令,则定时中断事件仍会连续出现,每个定时中断事件都会进入中断队列,直到中断队列满。

    定时器T32/T96中断允许及时地响应一个给定的时间间隔,这些中断只支持1 ms分辨率的通电延时定时器(TON)和断电延时定时器(TOF)即T32和T96。一旦中断允许,当定时器的当前值等于设定值时,在CPU的1 ms定时刷新中,将执行被连接的中断程序。

    【例】  定时中断的定时时间最长为255 ms,用定时中断1实现周期为2s的高精度定时。

    为了实现周期为2s的高精度周期性操作的定时,可以将定时中断的定时时间间隔设为250 ms,在定时中断1的中断程序中,将VB0加1,然后用比较指令判断VB0是否等于8。若相等(中断了8次,对应的时间间隔为2 s),在中断程序中执行每2s一次的操作,例如使QB0加1。语句表程序如下:

    //主程序OB1

    LD    SM0.1

    MOVB  0,VB0    //将中断次数计数器清零

    MOVB  250,SMB34    //设定时中断0的中断时间间隔为250 ms

    ATCH    INT_0,10    //指定产生定时中断0时执行0号中断程序

    ENI    //允许全局中断

    //中断程序0(INT_0),每隔250 ms执行一次

    LD    SM0.0

    INCB    VB10    //中断次数计数器加1

    LDB=    8,VB10    //如果中断了8次(2 s)

    MOVB    0,VB10    //将中断次数计数器清零

    INCB    QBO    //每2s将QB0加1

,

     中断程序不是由程序调用,而是在中断事件发生时由操作系统调用。因为不能预知系统何时调用中断程序,故它不能改写其他程序使用的存储器,因此应在中断程序中使用局部变量。在中断程序中可以调用一级子程序,累加器和逻辑堆栈在中断程序和被调用的子程序中是公用的。

    可采用下列方法创建中断程序:在“编辑”菜单中选择“插入”→“中断”,在程序编辑器视窗中单击鼠标右键,从弹出菜单中选择“插入”→“中断”;用鼠标右键单击指令树上的“程序块”图标,并从弹出菜单中选择“插入”→“中断”。创建成功后程序编辑器将显示新的中断程序,程序编辑器底部出现标有新的中断程序的标签,可以对新的中断程序编程。

    中断处理提供对特殊内部事件或外部事件的快速响应。应优化中断程序,执行完某项特定任务后立即返回主程序。应使中断程序尽量短小,以减少中断程序的执行时间,减少对其他处理的延迟,否则可能引起主程序控制的设备操作异常。设计中断程序时应遵循“越短越好”的原则。

    中断允许指令ENI(Enable Interrupt)全局性地允许处理所有被连接的中断事件。

    禁止中断指令DISI(Disable Interrupt)全局性地禁止处理所有中断事件,允许中断排队等候,但是不允许执行中断程序,直到用全局中断允许指令ENI重新允许中断。

    进入RUN模式时自动禁止中断。在RUN模式执行全局中断允许指令后,各中断事件发生时是否会执行中断程序,取决于是否执行了该中断事件的中断连接指令。

    使ENO=0的错误条件:SM4.3(运行时间),0004(在中断程序中执行ENI、DISI、HDEF指令)。

    中断程序有条件返回指令CRETI(Conditional RETurn from Interrupt)在控制它的逻辑条件满足时从中断程序返回。编程软件自动地为各中断程序添加无条件返回指令。

    中断连接指令ATCH(Attach Interrupt)用来建立中断事件(EVENT)和处理此事件的中断程序(INT)之间的联系。中断事件由中断事件号指定(见表1),中断程序由中断程序号指定。为某个中断事件指定中断程序后,该中断事件被自动地允许。

    表1    中断事件描述

    中断号

   中断描述

优先级分组

按组排列

的优先级

    8

    通信口0:字符接收

通信(最高)

    0

    9

    通信口0:发送完成

    0

    23

    通信口0:报文接收完成

    0

    24

    通信口1:报文接收完成

    1

    25

    通信口1:字符接收

    1

    26

    通信口1:发送完成

    1

    19

    PTO0脉冲输出完成

数字量(中等)

www.diangon.com

    0

    20

    PTO1脉冲输出完成

    1

    0

    I0.0的上升沿

    2

    2

    I0.1的上升沿

    3

    4

    I0.2的上升沿

    4

    6

    I0.3的上升沿

    5

    1

    I0.0的下降沿

    6

    3

    I0.1的下降沿

    7

    5

    I0.2的下降沿

    8

    7

    I0.3的下降沿

    9

    12

    HSC0CV=PV(当前值=设定值)

    10

    27

    HSC0方向改变

    11

    28

    HSC0外部复位

    12

    13

    HSC1CV=PV(当前值=设定值)

    13

    14

    HSC1方向改变

    14

    15

    HSC1外部复位

    15

    16

    HSC2CV=PV(当前值=设定值)

    16

    17

    HSC2方向改变

    17

    18

    HSC2外部复位

    18

    32

    HSC3CV=PV(当前值=设定值)

    19

    29

    HSC4CV=PV(当前值=设定值)

    20

    30

    HSC4方向改变

    21

    31

    HSC4外部复位

    22

    33

    HSC5CV=PV(当前值=设定值)

    23

    10

    定时中断0

定时(最低)

    0

    11

    定时中断1

    1

    21

    定时器T32的CT=PT

    2

    22

    定时器T96的CT=PT

    3

    使ATCH指令的ENO=0的错误条件:SM4.3(运行时间),0002(HSC输入赋值冲突)。

    中断分离指令DTCH(Detach Interrupt)用来断开中断事件(EVENT)与中断程序(INT)之间的联系,从而禁止单个中断事件。

    在启动中断程序之前,应在中断事件和该事件发生时希望执行的中断程序之间,用ATCH指令建立联系,使用ATCH指令后,该中断程序在事件发生时被自动启动。

    多个中断事件可以调用同一个中断程序,但一个中断事件不能调用多个中断程序。中断被允许且中断事件发生时,将执行为该事件指定的最后一个中断程序。

    在中断程序中不能使用DISI、ENI、HDEF、LSCR和END指令。

     中断按以下固定的优先级顺序执行:通信(最高优先级)、I/O中断、定时中断(最低优先级)。在上述3个优先级范围内,CPU按照先来先服务的原则处理中断,任何时刻只能执行一个用户中断程序。一旦一个中断程序开始执行,它要一直执行到完成,即使另一程序的优先级较高,也不能中断正在执行的中断程序。正在处理其他中断时发生的中断事件要排队等待处理。3个中断队列及其能保存的最大中断个数如表2所示。

    表2    中断队列和各队列的最大中断数

    队  列

    CPU221

    CPU222

    CPU224

  CPU226

    通信中断队列

    4

    4

    4

    8

    I/O中断队列

    16

    16

    16

    16

    定时中断队列

    8

    8

    8

    8

    如果发生中断过于频繁,使中断产生的速率比可处理的速率快,或中断被DISI指令禁止,则中断队列溢出状态位被置1。只应在中断程序中使用这些位,因为当队列变空或返回主程序时这些位被复位。

     可编程序控制器的串行通信口可由用户程序控制,通信口的这种操作模式称为自由端口模式。在该模式下,接收信息完成、发送信息完成和接收一个字符均可产生中断事件,利用接收和发送中断可简化程序对通信的控制。

     I/O中断包括上升沿中断、下降沿中断、高速计数器(HSC)中断和脉冲列输出(PTO)中断。CPU可用输入点I0.0~I0.3的上升沿或下降沿产生中断。高速计数器中断允许响应HSC的计数当前值等于设定值、计数方向改变(相应于轴转动的方向改变)和计数器外部复位等中断事件。高速计数器可实时响应高速事件,而可编程序控制器的扫描工作方式不能快速响应这些高速事件。完成指定脉冲数输出时也可以产生中断,脉冲列输出可用于等。

    【例】  在I0.0的上升沿通过中断使Q0.0立即置位,在I0.1的下降沿通过中断使Q0.0立即复位。

    //主程序OB1

    LD    SM0.1

    ATCH    INT_0,0    //I0.0上升沿时执行0号中断程序

    ATCH    INT_1,3    //I0.1下降沿时执行1号中断程序

    ENI//    //允许全局中断

    //中断程序0(INT_0)

    LD    SM0.0

    SI    Q0.0,1    //使Q0.0立即置位

    //中断程序1(INT_1)

    LD    SM0.0

    RI    Q0.0,1    //使Q0.0立即复位

    可用定时中断来执行一个周期性的操作,以1 ms为增量,周期的时间可取1~255 ms。定时中断0和中断1的时间间隔分别写入特殊存储器字节SMB34和SMB35。每当定时器的定时时间到时,执行相应的定时中断程序,例如可以用定时中断来采集模拟量和执行PID程序。如果定时中断事件已被连接到一个定时中断程序,为了改变定时中断的时间间隔,首先必须修改SMB34或SMB35的值然后重新把中断程序连接到定时中断事件上。重新连接时,定时中断功能清除前一次连接的定时值,并用新的定时值重新开始定时。

    定时中断一旦被允许,中断就会周期性地不断产生,每当定时时间到时,就会执行被连接的中断程序。如果退出RUN状态或定时中断被分离,则定时中断被禁止。如果执行了全局中断禁止指令,则定时中断事件仍会连续出现,每个定时中断事件都会进入中断队列,直到中断队列满。

    定时器T32/T96中断允许及时地响应一个给定的时间间隔,这些中断只支持1 ms分辨率的通电延时定时器(TON)和断电延时定时器(TOF)即T32和T96。一旦中断允许,当定时器的当前值等于设定值时,在CPU的1 ms定时刷新中,将执行被连接的中断程序。

    【例】  定时中断的定时时间最长为255 ms,用定时中断1实现周期为2s的高精度定时。

    为了实现周期为2s的高精度周期性操作的定时,可以将定时中断的定时时间间隔设为250 ms,在定时中断1的中断程序中,将VB0加1,然后用比较指令判断VB0是否等于8。若相等(中断了8次,对应的时间间隔为2 s),在中断程序中执行每2s一次的操作,例如使QB0加1。语句表程序如下:

    //主程序OB1

    LD    SM0.1

    MOVB  0,VB0    //将中断次数计数器清零

    MOVB  250,SMB34    //设定时中断0的中断时间间隔为250 ms

    ATCH    INT_0,10    //指定产生定时中断0时执行0号中断程序

    ENI    //允许全局中断

    //中断程序0(INT_0),每隔250 ms执行一次

    LD    SM0.0

    INCB    VB10    //中断次数计数器加1

    LDB=    8,VB10    //如果中断了8次(2 s)

    MOVB    0,VB10    //将中断次数计数器清零

    INCB    QBO    //每2s将QB0加1

PLC的中断程序

相关文章:

你感兴趣的文章:

标签云: