回复:寄存器间接寻址的问题

LJCLWYF

  • 帖子

    564
  • 精华

    0
  • 被关注

    34

论坛等级:侠圣

注册时间:2011-08-13

黄金 黄金 如何晋级?

发布于 2015-01-05 10:09:50

4楼

由于手机网络太差,无法上传附件。我昨晚上又试验了一个更简单的。定义如下:
db1:共享数据块,建了64个整数变量;
fb1:叫它为子功能块吧,在in接口定义两个变量,其中address为pointer类型的变量,data_in为int类型的变量。fb1的作用是将data_in写入address开始的连续4个字。程序如下:
lar1 p##address
l w[ar1,p#0.0]
t temp1 //temp1为临时变 量,定义为数据块编号
opn db[temp1]
l d[ar1,p#2.0]
lar1
tar2
+ar1
l 4
c1:t temp2
l data_in
t w[ar1,p#0.0]
+ar1 p#2.0
l temp2
loop c1

fb2:在静态变量里以fb1定义了a和b两个多重背景,调用如下:
call #a
address:=p#db1.dbx0.0
data_in:=mw2

call #b
address:=p#db1.dbx8.0//这里只要一保存就显示为db1.dbw8
data_in:=mw4
然后在ob1里call fb2 db2进行调用。
下面是问题:只要在fb1的静态变量里建立了变量(fb2和db2都是重新再做),plcsim就stop.诊断提示到t w[ar1,p#0.0]这里。如果fb1的静态变量里没有建变量,程序正常执行。监控#b时,执行到l d[ar1,p#2.0] ;lar1时,ar1的值是db0.0。可我输入的是p#db1.dbx8.0啊。为什么?如果不加ar2,虽然不会stop,但是执行结果是乱的。请大家帮我看看该怎样做才正确。谢谢。这里不讨论用其他的方法如用fc等来实现。

学无止境
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54620条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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