FB和FC的变量地址分配问题

1)局部变量表里的形参IN、OUT、IN_OUT,在其下面定义的变量,分配的地址是哪个存储区的地址?
2)在FB1里顶一个动态变量TEMP1,INT,地址:0.0;在FC里定义个局部变量TEMP2,INT,地址:0.0
      在FB1块被调用时,给变量TEMP1分配地址:LW0,当FC1被调用时,L堆栈被释放,从新分配,把TEMP2分配到LW0,在FC1执行完毕,L堆栈又被释放,会根据FB1的变量地址从新分配,我想问这个时候,TEMP1的值是不是等于在调用FC1时TEMP2最终的值?若我想在调用完FC1之后继续对TEMP1操作,是不是要把TEMP1清零之后从新开始?也就是说在调用FC1之前的那个TEMP1的值是不会保存的?
3)关于S7 300寄存器间接寻址,我在网上搜到的:有的说87000000是L区的,有的则说87000000是V区的,L区的是86000000,哪种说法是对的啊?还有,关于S7 300的V区(先前的本地数据区),求大神解说下是干嘛用的。

最佳答案

没注意这个问题发在1500版区,以下回答内容是对于S7-300、400的
1.对于FC来说,当IN、OUT、IN_OUT的实参是I、Q、M或外设区域以及非绝对地址引用的DB块数据(比如调用FC前使用OPN DB打开数据块,参数使用DBW0之类)时,变量实际传递的地址,也就是说访问形参变量等同于访问实参,其它的参数比如DB块的绝对地址引用(DB1.DBW0、LW0)等,形参保存在V区,这个V区实际就是上一层程序块的本地数据(L区),比如OB1调用FC1,在FC1里的V区实际地址就处于OB1的L区。
对于FB块,除了IN_OUT的实参是复杂数据类型时,传递的是地址指针,其余情况IN、OUT、IN_OUT的参数保存在背景数据块里。
2.临时变量根据系统调用结构的不同,同一片区域可能会被不同的块重复使用,未见赋值的临时变量可能是一个不确定的值,所以使用临时变量必须遵循先赋值后使用的原则。

提问者对于答案的评价:
看了你的解释,豁然开朗,非常感谢。。大神再帮忙看看我的另一个问题呗,快到期了,悬赏25分的,链接:http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=116487&cid=1029

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc173445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月13日
下一篇 2017年6月13日

相关推荐