回复:STEP7编程

已锁定

天王盖地虎

西门子1847工业学习平台

  • 帖子

    251
  • 精华

    3
  • 被关注

    5

论坛等级:侠士

注册时间:2019-04-25

白金 白金 如何晋级?

发布于 2022-10-26 10:25:56

5楼

展开查看
以下是引用RENHQ在2022-10-02 16:12:40的发言 >1楼

这个和状态字的BR位有关

在程序的最后云STL写个

set

save

应该就都是实线了

参考:

STEP 7 的状态字中的 BR 位的含义是什么?


https://support.industry.siemens.com/cs/cn/zh/view/10729283


描述
BR 位(二进制结果位)是状态字的第 8 位,并且用来将前一个功能的执行结果传递给接下来的功能。下表解释了 BR 位的含义并指出了其用法。
 

序号    BR 位的含义及用法    

1    在 FBD/LAD 编辑环境中,BR 位的值被传递到功能块的输出 ENO (FBs/FCs 和 SFBs/SFCs)。

如果 BR = 1,那么紧接下来的功能或者功能块的 EN=1 (=BR),所以就会被执行或者被调用。

如果 BR = 0,那么紧接下来的功能或者功能块的 EN=0 (=BR),所以不会被执行或者被调用。

   

2    如果,在 FBD/LAD 编译环境中,使用字操作 (如 ADD_...) 或者其它非二进制操作,操作执行成功则 BR = 1,如果发生处理错误(例如:溢出)则 BR = 0。在这种情况下,后续的功能或者功能块的调用由 BR 位控制。    

3    如果使用 STL 创建一个功能或者功能块并在 FBD/LAD 编辑环境中调用,则必须在退出功能或者功能块前将逻辑操作结果 (RLO) 保存到 BR 位中。使用指令 "SAVE","JCB" 和 "SPBNB" 来使能在 LAD/FBD 调用时的输出 (ENO)。    

4    如果调用系统功能块 (SFB) 或者系统功能 (SFC),BR 位的状态指示出 CPU 执行 SFB 或者 SFC 是否正确。

如果执行过程中出错,则 BR 位 = 0。

如果执行过程中未出错,则 BR 位 = 1。

   

5    SAVE
"SAVE" 指令将 RLO 状态保存至 BR 位。首次检查位 "/FC" 未复位。因此,如果接下来的程序段中是 AND 逻辑指令,那么 BR 位的状态被包含在逻辑操作中。

不推荐在同一个块或者更低层的块中使用 SAVE 指令然后查询 BR 位,因为如果中间操作过多会导致 BR 位的值的变化。

最好是在退出块之前使用 SAVE 指令,因为这样 ENO 输出 (=BR 位) 的值就是 RLO 位的值,在这之后可以立即加上错误处理。

   

6    "JCB <jump label>" 指令
JCB: 当 RLO=1 时发生跳转并将 RLO 状态保存至 BR 位。"jump label" 即为跳转目的地的标识符。

如果 RLO = 1,"JCB <jump label>" 指令将中断顺序程序的执行并跳转到跳转目的地。顺序执行的程序在跳转目的地继续执行。跳转目的地由跳转符号来标明。

如果 RLO = 0,则不跳转。RLO 被置为 "1"  并且继续执行下面的程序。

例如

A I10.1
A I10.2
JCB M001 //如果 RLO=1 跳转到 "M001" 

   

7    "JNB <jump label>" 指令
JNB: 当 RLO=0 时跳转并将 RLO 保存到 BR 位。"jump label" 即为跳转目的地的标识符。

当 RLO = 0,"JNB <jump label>" 指令中断顺序程序的执行并跳转到跳转目的地。顺序执行的程序在跳转目的地继续执行。

如果 RLO = 1,则不执行跳转。RLO 被置 "1"。程序继续执行下面的指令。

例程

A E10.1
A E10.2
JNB M001 //如果 RLO=0 跳转到 "M001"

   



上面提到的跳转有可能是向前跳转也可能是向后跳转。最大跳转距离是 -32768 或者 +32767 字节的程序代码。跳转只可能在块内,即跳转指令和跳转目的标号均在同一个块内。跳转目的标号在一个块内只允许出现一次。实际能被跳过的最大指令数目取决于 程序中指令的组合(单字,双字或三字指令)。

S7-300 中程序行为注意事项
S7-300 CPU 和 S7-400 CPU 的内部结构是不同的。S7-400 直接处理程序而 S7-300 程序在加载时编译。因此 S7-400 被称为 ASIC 机而 S7-300 被称为编译机。特别是在处理二进制逻辑操作序列方面是不同的。S7-300 CPU模块只有在编译程序时才知道逻辑操作序列的起始和结束。此时可以定义状态字首次扫描位 /ER 的行为。

如果使用跳转指令跳转到一个逻辑操作序列,那么跳转指令的 RLO 位与 /ER 位是关联到一起的。在 300 系列 CPU 中,对于 RLO 的影响会显然导致在 OR 指令执行时得到错误的结果。因此,在跳转之后需要开始一个新的逻辑运算序列。


虽不是千里马,但也想遇到伯乐的栽培和教导
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54622条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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