设为首页收藏本站积分获取及使用技巧附件上传须知[求助-西门子PLC300/400]OB块和功能、功能块里的TEMP变量绝对地址的困惑。

追梦工控论坛|工控论坛-专业的Intouch论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

总共8197条微博

动态微博

查看: 5194|回复: 2

[求助-西门子PLC300/400]OB块和功能、功能块里的TEMP变量绝对地址的困惑。

[复制链接]

升级  35.5%

该用户从未签到

发表于 2013-12-16 20:56:59 | 显示全部楼层 |阅读模式

上传分享工控资料得追梦点,下载积分获取办法点击进入 ☆追梦点充值入口
发帖回帖赚金币兑换下载积分。上传附件须知点击进入

×

马上注册,结交更多工控达人,分享经验,让你轻松玩转追梦工控论坛。

已有帐号?  点击登录   或者        

支付宝扫一扫领红包
在网上查看了很多关于临时变量L的解释和使用方法,众说纷纭搞得我一头雾水。有的说临时变量随调用它的块关闭而被丢弃,又有人说是被复位,我觉得这是两个决然不同的结果,“丢弃”不等同“复位”。
FC 和FB的临时变量都是从L0.0开始往后指定的,所以多个FC和FB在OB里调用实际上就会出现绝对地址相互冲突的现象,所以就有了大家在使用临时变量时必须先赋值后调用的要求。
再看OB块里的临时变量的绝对地址好像也是从L0.0开始的,那么这个L0.0和FB.FC里的L0.0是不是一个地址呢?不都是使用的L临时存储区吗?实验结果好像不是同个存储区,它们互不干涉。
在OB块里先把常数0写入LB30,接着调用FC1,在FC1里给L30.1置位,再在FC1后面把LB30写入MB30,我以为结果MB30的值是2,其实MB30的值没变是0,这该做如何理解?还有不同的OB块里的临时变量存储区都是使用的同一L存储区还是每一个分配不同的?为什么它们的绝对地址都是一样的?</p>
        问题补充:
我知道如果我在OB块里直接赋值L30.1=1那么MB30的值就会等于2,之所以要在FC里赋值,是想验证FC的L30.1和OB的LB30会不会有冲突,也就是说他们是不是同属一个字节。
让我们联手拒绝网络伸手党,下载积分获取办法&附件上传须知 ☆追梦点充值入口





+1
5196°C
2
  • sm0769t
  • 毕村内富
过: 他们

升级  36.5%

该用户从未签到

发表于 2013-12-16 22:12:13 | 显示全部楼层
临时变量不是全局变量,所以就不存在重叠的概念。临时变量就相当于相对地址,全局变量就相当于绝对地址。在地理位置上你可以你的前后左右有什么,这就是相对地址,如果你说经纬度就是绝对地址。你的前后左右和别人的前后左右是不同的,虽然都是前后左后,但如果你说经纬度那就是唯一的地址,
                                                                                                                                                                                                                                                              
                                                        

升级  32.5%

该用户从未签到

发表于 2013-12-16 22:15:42 | 显示全部楼层
OB和FC/FB的临时变量的存储区域是一样的,你得到MB30为0的结果应该是你的置位指令有问题,注意如果你是用语句表来写的,应该这样给来写:
SET
S L30.1
之后再用
L LB30
T MB30
这样得到的结果肯定是MB30=2,除非你在中间改变了LB30的结果,或者是你在FC1的外面改变了MB30的结果
                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                            L的绝对地址都是一样的,但不代表他们是同一变量。他们的真实地址是不同的。LW0是临时变量的起始2个字节,他们对应着OB1中临时变量的前2个内容。而你的#TEMP0要看块在程序OB1中的位置以及它前面的块使用临时变量的个数确定。你可以在参考数据下的程序结构中看到各块使用L的个数。
参见:http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_id=105989&cid=1029
                                                      
图片说明:1,1
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

请珍惜自己的ID,严禁发布垃圾水贴,诸如adsf......顶......纯表情......多次重复回帖刷积分......轻则删帖警告,重则封禁!★请分享资料、经验或者赞助论坛,贡献一份力量★

关闭

最新活动上一条 /1 下一条

小黑屋|手机版|追梦工控论坛|工控论坛-专业的Intouch论坛 ( 皖ICP备10012005号 )|网站地图

GMT+8, 2025-5-4 20:50 , Processed in 0.093679 second(s), 21 queries , Gzip On, APCu On.

Powered by Dreamyiyi

© 2009-2025 工控论坛

快速回复 返回顶部 返回列表