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