0中断优先级_西门子博途中OB循环中断程序编写详解及实例程序说明!干货!

1b90dd38c51435dee60d6c1f24ca06ff.gif

首先我们先来了解一下循环中断OB的功能,再用实例来详细说明一下

● 循环中断 OB 的功能

循环中断 OB 在经过一段固定的时间间隔后执行相应的中断 OB 中的程序。

S7-1200 最多支持 4 个循环中断 OB ,在创建循环中断 OB 时设定固定的间隔扫描时间。在 CPU 运行期间,可以使用“SET_CINT”指令重新设置循环中断的间隔扫描时间、相移时间;同时还可以使用“QRY_CINT”指令查询循环中断的状态。循环中断 OB 的编号必须为30~38,或大于、等于123。

● 与循环中断 OB 相关的指令功能

指令名称

功能说明

SET_CINT

设置指定的中断 OB 的间隔扫描时间、相移时间,以开始新的循环中断程序扫描过程。

QRY_CINT

使用该指令查询循环中断的状态。


● 循环中断 OB 的执行过程,请参见下图1:

1、PLC 启动后开始计时;

2、当到达固定的时间间隔后,操作系统将启动相应的循环中断 OB ;

3、图例中,到达固定的时间间隔后,循环中断 OB30 中断程序循环 OB1 优先执行。

循环中断的执行过程请参考下图:

92bf04bab98bd8012f03c2d38bf93bce.png

图1. 循环中断 OB 执行图例

● 循环中断 OB 的使用示例:

例如:运用循环中断,使 Q0.0 500ms输出为1,500ms输出为0,即实现周期为1s的方波输出。具体实现过程如下:

1、按如下步骤创建循环中断 OB30 。如图2。

3d10bc3ab2c05c47ac6af0f5b4c18c84.png

图2. 创建循环中断 OB30

2、OB30 中编程如下图,当循环中断执行时,Q0.0 以方波形式输出。如图3。

c6c80468c6acd23490385d1b907fc0de.png

图3. OB30 中编程

3、在 OB1 中编程调用“SET_CINT”指令,可以重新设置循环中断时间,例如:CYCLE=1s(即周期为2s);调用“QRY_CINT”指令可以查询中断状态。在“指令->扩展指令->中断->循环中断”中可以找相关指令。如下图4。

0336e21b5b08bece0e6895c4cb44c198.png

图4. 调用循环中断指令

OB1 中的编程见图5:

fb5a44e65bba79d18d763396e4caae33.png

图5. OB1 中的编程

“SET_CINT”指令参数说明:

EN

:=%M100.0

//当 EN 端出现上升沿时,设置新参数

OB_NR

:=30

//需要设置的 OB 的编号

CYCLE

:=1000000

//时间间隔(微秒)

PHASE

:=0

//相移时间(微秒)

RET_VAL

:=%MW0

//状态返回值(详细信息请查看在线帮助)

“QRY_CINT”指令参数说明:

OB_NR

:=30

//需要查询的 OB 的编号

RET_VAL

:=%MW2

//状态返回值(详细信息请查看在线帮助)

CYCLE

:=%MD4

//查询结果:时间间隔(微秒)

PHASE

:=%MD8

//查询结果:相移时间(微秒)

STATUS

:=%MW12

//循环中断的状态(详细信息请查看在线帮助)

4、测试结果:程序下载后,可看到 CPU 的输出 Q0.0 指示灯0.5s亮,0.5s灭交替切换;当 M100.0 由0变1时,通过“SET_CINT”将循环间隔时间设置为1s,这时,可看到 CPU 的输出 Q0.0 指示灯1s亮,1s灭交替切换。

● 相移时间(Phase shift)功能

当使用多个时间间隔相同的循环中断事件时,设置相移时间可使时间间隔相同的循环中断事彼此错开一定的相移时间执行。请通过如下两幅图例理解相移时间的概念。

下图中,没有设置相移时间,以相同的时间间隔调用两个 OB ,则低优先级的 OB 块将不能以固定间隔时间 t 执行;何时执行受高优先级的 OB 执行时间影响,请看图6。

14e52cdce25cc2c13197bf9dfa7b5031.png

图6. 没有相移的循环 OB 调用

下图中,低优先级的 OB 块可以以固定间隔时间 t 执行;相移时间应大于较高优先级 OB 块的执行时间,请看图7。

bd376ec558e6c77e73894e8966fe96e2.png

图7. 有相移的循环 OB 调用

小结:如果以相同的时间间隔调用优先级较高和优先级较低的循环中断 OB ,则只有在优先级较高的 OB 完成处理后才会执行优先级较低的 OB 。低优先级 OB 的执行起始时间会根据优先级较高的 OB 的处理时间而延迟,如果希望以固定的时间间隔来执行优先级较低的 OB ,则优先级较低的 OB 需要设置相移时间,且相移时间应大于优先级较高的 OB 的执行时间。

如何设置相移时间?

请看下图的设置步骤。(请注意,如果程序中调用“SET_CINT”指令设置相移时间,则以程序中设定的时间为准)

a004784ed54edbbb49f2dee206348998.png

图8. 相移的设置步骤

常见问题:

使用循环中断需要注意什么?

1、循环中断 + 延时中断数量 <= 4;

2、循环间隔时间1~60000ms,通过指令“SET_CINT”设置错误的时间将报错16#8091;

3、CPU 运行期间,可通过“SET_CINT”指令设置循环中断间隔时间、相移时间;

4、如果“SET_CINT”指令的使能端 EN 为脉冲信号触发;则 CPU 的操作模式从 STOP 切换到 RUN 时执行一次,包括启动模式处于 RUN 模式时上电和执行 STOP 到 RUN 命令切换,循环中断间隔时间将复位为 OB 块属性中设置的数值;

5、如果循环中断执行时间大于间隔时间,将会导致时间错误。

3542b8057a246d330cb075df25f5fa7f.gif

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值