回复:局部储存区L覆盖到哪里。

sunway888

  • 帖子

    11
  • 精华

    0
  • 被关注

    0

论坛等级:新手

注册时间:2004-11-09

普通 普通 如何晋级?

发布于 2004-11-22 13:14:27

0楼

显然,每个扫描周期都要调用两个子程序,当调用子程序0时,I0.0传到LO.0,I0.1传到LO.1,运算结果经L0.2传递到Q0.0,在调用子程序1时(假设I0.2没用闭合,I0.3没有断开),则L0.0的值保持在子程序0里的状态,Q0.2是否有输出,取决于I0.0是否闭合。显然这不是编程者的目的,为了解决这种情况,可以在子程序调用前把临时变量清零。其本质就是yanxiao说的L区的变量,先赋值,后使用。
具体这个程序,可以这样用,你试一下;
ORGANIZATION_BLOCK MAIN:OB1
TITLE=
//PROGRAM COMMENTS
//Press F1 for help and example program
//

BEGIN
NETWORK 1 //NETWORK TITLE (single line)
//
//NETWORK COMMENTS
//
LD SM0.0
= L60.0
LD I0.0
= L63.7
LDN I0.1
= L63.6
LD L60.0
CALL SBR_0 L63.7 L63.6 Q0.0

NETWORK 2
LD SM0.0
= L60.0
LD I0.2
= L63.7
LDN I0.3
= L63.6
LD L60.0
CALL SBR_1 L63.7 L63.6 Q0.1

END_ORGANIZATION_BLOCK

SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=
//SUBROUTINE COMMENTS
//Press F1 for help and example program
//

VAR_INPUT
light_on:BOOL;
light_off:BOOL;
END_VAR
VAR_OUTPUT
light:BOOL;
END_VAR
BEGIN
NETWORK 1
LD SM0.0
MOVB 0 LB0

NETWORK 2 //NETWORK TITLE (single line)
//
//NETWORK COMMENTS
//
LD #light_on
O #light
A #light_off
= #light

END_SUBROUTINE_BLOCK

SUBROUTINE_BLOCK SBR_1:SBR1
TITLE=
//SUBROUTINE COMMENTS
//Press F1 for help and example program
//

VAR_INPUT
switch_on:BOOL;
switch_off:BOOL;
END_VAR
VAR_OUTPUT
light:BOOL;
END_VAR
BEGIN
NETWORK 1
LD SM0.0
MOVB 0 LB0

NETWORK 2 //NETWORK TITLE (single line)
//
//NETWORK COMMENTS
//
LD #switch_on
O #light
A #switch_off
= #light

END_SUBROUTINE_BLOCK

INTERRUPT_BLOCK INT_0:INT0
TITLE=
//INTERRUPT ROUTINE COMMENTS
//Press F1 for help and example program
//

BEGIN
NETWORK 1 //NETWORK TITLE (single line)
//
//NETWORK COMMENTS
//

END_INTERRUPT_BLOCK
把此文件保存为文本格式,改变扩展名为.awl格式,然后用FILE---import 导入
,下载到PLC中,试试看,结果怎样?

乐于助人
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33289条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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