发布于 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等来实现。
学无止境