技术论坛

回复:关于局部变量存储器的理解

作者 主题
侠士

经验值: 1353
发帖数: 728
精华帖: 25
回复:关于局部变量存储器的理解


只看楼主 2011-01-04 16:43:49
局部变量就是一块由系统管理的普通内存(我们暂且称它为H内存),系统程序会为每次子程序调用在H内存中“随机”分配64字节供当前调用的子程序以L名字使用(由此可见L实际上是以指针访问的,所以L内存的速度非常慢,特别是作为位变量访问时)。
每次进入子程序,这64字节的初始化是“不定”的,必须满足先赋值后使用的原则,赋值后的L变量只在当前扫描周期的子程序内部有效,退出子程序后失效。

任何其它通过实验得出来的结论都是不可靠的,而且做这种实验也是完全没有意义的。因为这个跟PLC设计时的内存管理策略有关,在今天这台PLC上得出的结论由内存管理策略决定可能是偶然的,即使今天肯定的,明天PLC版本升级了也许就是错误的。所以这种针对个体得出来的结论没有任何意义。

争论的原因实际上就是L的初值问题,这有几个影响因素:
一是PLC是否会主动初始化所分配的64字节,一般来说是不会的,因为会严重影响内存管理效率而实际上也没有必要。即使设计时主动初始化了,那么可能用0,可能用FF或其它任意值,因此,对用户来说,它仍然是不定的。
二、从H中分配L的策略,我们退出子程序时,L所赋的值“失效”了,并不是说程序会将这个值清掉(同样出于效率的原因不可能这样做),实际上那个值仍然保存在H内存中,但我们下次进入同一子程序时,所分配的L并不一定是H中上次所分配的那一块(当然也有可能是),所以子程序下次使用LB0时,跟上一次所使用的LB0对应的不一定是原来的那个HBx,这也是初值“不定”的原因。
三、同一扫描周期被调用一两个不同子程序,前一个子程序退出后,第二个子程序所分配的L内存在H中对应的正好是为前一个子程序所分配的内存块(是否会出现这种情况取决于PLC本身的设计),所以有可能出现通过L内存在两个子程序中传递值的现象,但是这是不个利用的特性。
生命存在的方式只有两种:腐烂或燃烧
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=786302&b_id=3&s_id=0&num=0

  • 上一页
  • 1
  • 下一页
收起
回复:关于局部变量存储器的理解
×
扫描打开手机版
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。