程序段1
TAR1 #TEMP7
L DB7.DBD0
LAR1
L DBD [AR1,P#0.0]
T #TEMP4
程序段2
TAR1 #TEMP7
L DB7.DBD0
LAR1
L DBD [AR1,P#0.0]
T #TEMP4
程序段3
L #TEMP4
L #IN1
>=I
= #TEMP5
程序段4
A #IN0
AN #TEMP5
= #TEMP6
程序段5
AN M2.0
ON #TEMP6
JC M002
L #TEMP4
L 1
+D
T #TEMP4
M002: NOP 0
程序段6
// 置位逻辑
A #IN0
A #TEMP5
S #IO3
// 复位逻辑
A #IN0
|NOT|
A #IN2
R #IO3
这里IN2始终为定值1
程序段7
NOP 0
L DB7.DBD0
LAR1
L #TEMP4
T DBD [AR1,P#0.0]
L P#DBX4.0
+AR1
TAR1 DB7.DBD0
LAR1 #TEMP7
程序段8
结束程序
这个是被调用的FC7功能块,#IN1=5,每个程序每次调用FC7时IN0的值不一定,=1/=0。M2.0是一个一秒一次的时钟开关,IN2=1。DB7内是有2000个双字的数组。问由于每次调用时寻址都不固定,TEMP4是怎么累加到大于等于5的,IO3才能被置位?这样寻址目的?
通过仿真软件读取到的L DBD7.DBD0是20,最后偏移四字节装载给DBD0回去的是十六进制84000020,上网查都是四字节也就是DBD4,这是为什么?
DB7里仿真在线DBD0是十六进制32A0,DBD4是0,DBD8是5,DBD12是5,DBD16是0,以下都是0、5这样交错的,为什么,越来越蒙了。
昨天有个大哥说给DB7数据块内的地址赋值,那我每次要做个程序要调用FC7,都需要赋值吗,这是西门子功能块调用规矩吗