关于西门子临时变量L的应用 点击:1808 | 回复:6



俗家人

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 10回
  • 年度积分:0
  • 历史总积分:14
  • 注册:2008年12月03日
发表于:2010-07-06 10:54:45
楼主

最近我发现了一个比较奇怪的现场,西门子200里各个子程序里的局部变量之间会有相互影响,我前一个子程序里给临时变量赋值,会影响下一个子程序里相同地址的临时变量,比如我在前一个子程序里给LD0赋值100,在下一个子程序里,我同样用到了LD0,但这个程序里LD0的赋值语句没有执行,但是LD的值为100,和前一个子程序里的赋值一样。我这样就不理解了,既然是局部变量,应该是不同的子程序里用到相同名称但之间是不会有影响的吧,可是为什么会出现这种情况呢?咨询西门子,他们说LD的保持功能是随机的。那什么时候它会保持,什么时候它不保持的呢?想请教下大家,是不是也有遇到这样的情况,是怎么解决的?




miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2010-07-06 12:28:04
1楼

那你就以Siemsns 的官方解释为准!                      

yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2010-07-06 12:57:38
2楼
在作用域中保持. 那就谨慎使用L区域,在使用前先赋值后使用. Regards

俗家人

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 10回
  • 年度积分:0
  • 历史总积分:14
  • 注册:2008年12月03日
发表于:2010-07-06 15:52:03
3楼

我是先赋值再引用的,可是在后面的子程序中的LD0复制条件不符合,所以没有执行,但是LD0却依然有值,像这种情况有的时候是很难避免的!

yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2010-07-06 16:01:49
4楼
L中无时无刻都会有值存在,系统并不复杂L区的回收,系统仅负责L区的分配,所以,L区遵守的原则是先赋值后引用。 先赋值,再引用,如何再会出现此状况?因为当你引用结束后,你所引用的值已经不再具有任何价值,所以他是什么值已经变得不再重要。除非一种特殊的状况,也就是您在使用L区的过程中发生了越界,访问了原先不该访问的地址。 Regards

芳季

  • [版主]
  • 精华:5帖
  • 求助:5帖
  • 帖子:86帖 | 5336回
  • 年度积分:0
  • 历史总积分:20165
  • 注册:2003年1月31日
发表于:2010-07-06 19:22:29
5楼

www.ad.siemens.com.cn有讨论的。

这里面是我的观点。

http://www.ad.siemens.com.cn/club/bbs/post.asp?myreply=1&b_id=3&a_id=643451&s_id=&num=21#anch

俗家人

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 10回
  • 年度积分:0
  • 历史总积分:14
  • 注册:2008年12月03日
发表于:2010-07-08 13:19:36
6楼

噢,谢谢芳季,我大概明白了点!


热门招聘
相关主题

官方公众号

智造工程师