FC和FB里为什么使用--(S)--指令置位数据块里的位会出错?

已锁定

半截蜡烛

  • 帖子

    273
  • 精华

    1
  • 被关注

    9

论坛等级:游侠

注册时间:2008-08-26

普通 普通 如何晋级?

FC和FB里为什么使用--(S)--指令置位数据块里的位会出错?

14608

56

2009-10-02 09:13:13

下面是我编写的一个简单的功能(FC1),然后在OB1里两次调用,其作用就是利用两个不同的外部输入端I0.0和I1.0分别置位DB1.DBX0.0和DB1.DBX0.1,但用模拟器模拟的结果是只要I0.0和I1.0有一个为1,那么DB1.DBX0.0和DB1.DBX0.1都会被置1。我在单个周期扫描中观察到如果I0.0为0,I1.0为1那么在第一个扫描周期里只有DB1.DBX0.1为1,在下一个扫描周期DB1.DBX0.0才为1,这看似好像是因为使用了相同的L20.0本地地址的原因,但是我把DB1.DBX0.0和DB1.DBX0.1换成Q4.0和Q4.1,这回模拟结果且是正常的了,也就是能分别置位互不影响。

以下是FC1里的代码:
A #chufa //#chufa是FC1里定义的一个输入型形参。
S #baojing //#baojing是FC1里定义的一个输出型形参
A I 0.7 //FC1里直接使用的实参
R #baojing
NOP 0

以下是OB1里的调用两次FC1的代码:
程序段1:
A I 0.0
= L 20.0
BLD 103
CALL FC 1
chufa :=L20.0
baojing:=DB1.DBX0.0
NOP 0

程序段2:
A I 1.0
= L 20.0
BLD 103
CALL FC 1
chufa :=L20.0
baojing:=DB1.DBX0.1
NOP 0

为了简单明了的说明问题特意编写这段简单的程序,排除干扰的可能。
为什么会出现DB1.DBX0.0和DB1.DBX0.1同时被改写的情况呢?有网友告诉我说在FC、FB里最好不要使用置位、复位指令,这我也试验过了是可行的,即把--S--指令换成--()--指令,可是我想知道这是为什么?不能知其然而不知其所以然!
FC和FB里为什么使用--(S)--指令置位数据块里的位会出错? 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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