发布于 2009-04-12 18:33:23
0楼
临时变量并不是功能执行结束就清零的。
局个例子:OB1中调用FC1,FC1中编辑:
A M 0.0
S #temp0
A #temp0
= M 0.1
除此之外不含有其他程序。首先置位M0.0那么M0.1也被置位,然后M0.0复位但M0.1仍然为1。这表明temp0所占用的L区并没有被清零。
做另外一个试验:在OB1中增加调用FC2,在FC2中编辑:
L 0
T #temp0
T #temp0_1
T #temp0_2
T #temp0_3
T #temp0_4
T #temp0_5
T #temp0_6
T #temp0_7
T #temp0_8
T #temp0_9
T #temp0_10
T #temp0_11
T #temp0_12
T #temp0_13
T #temp0_14
T #temp0_15
T #temp0_16
T #temp0_17
T #temp0_18
T #temp0_19
temp都为DWORD类型。重复上面的测试过程先置位M0.0那么M0.1也被置位,然后M0.0复位M0.1变为0。temp0所占用的L区被清零。
根据上面的试验我认为:temp变量在使用后它所对应的物理地址的数值并不变化,除非在另外的块中的临时变量分配了与之前临时变量相同的物理地址可能会改变该物理地址的数值。
这也就是临时变量要先赋值后使用的原因。
学无止境