TEMP(临时变量)的概念是这样的。 |
每一个OB,FB,FC都可以声明Temp临时变量。
它们仅是在被调用时,由操作系统,根据块声明,临时分配的内存空间。该块结束时,释放(收回)该空间。
若在一个块(例如FB10)内调用了自己(FB10)(递归),尽管Temp名称完全一样,系统也是再次分配该临时空间。在块结束返回时,收回临时空间。 |
递归深度4层,即分配4次,4倍的临时空间。(每个临时空间仅属于自己的块。可以传递到下一“层”,作用域有效。)
如果若干块(OB、FB、FC)是多次单一调用,则最多可能占用的内存临时空间,仅是它们之中声明最多Temp的那个块空间。
中断使用的块也一样。
别说跨扫描周期了。主循环扫描中的每一个块结束,该空间都可能被中断功能块占用去了。
再比如:OB1中声明了多个Temp,数据类型位、字节,整数、浮点等等。我可以反复地使用它们做暂存中间变量。因为是在OB1中,它们始终存在。
而在OB1中调用的FB11、FC22等等,块调用结束那一刻,它们声明的Temp全部被收回。
也就是说,Temp临时变量的作用域仅属于块。
FB的静态变量则不会。 |
块中声明的常量,则是附属于程序块的赋值,而不是调用时由系统分配,再赋值。