回复:fc块中的in参数保存在plc的什么区域

Letham

西门子1847工业学习平台

  • 帖子

    2032
  • 精华

    43
  • 被关注

    360

论坛等级:至圣

注册时间:2006-04-15

钻石 钻石 如何晋级?

发布于 2014-12-11 21:11:07

6楼

1:S7 CPU的参数传递方式,一般是按引用传递的。
2:CALLING块 首先将实参的值,传递到L区,在调用"被调用块"的时候,会把L区的地址 传递给"被调用块",这个时候,在"被调用块"里面就根据"调用块"存在L区(在被调用块里,就叫V区,其实也是L区,就是"调用块"的L区)里的地址,然后根据地址 把实参的值读取到内部。
当然这个都是CPU操作系统底层干的事情。
比如OB1中 调FC1,FC1有个IN类型接口IN1
正常调用这样
CALL FC1
IN1:MW0
但操作系统 底层会这样干
L MW0
T LW20
UC FC1
IN1:P#L20.0
在FC1内部取IN1的值的时候,应该类似如下过程
LAR1 P#IN1
L W[AR1,P#0.0]AR1里的值就DW#16#870000A0,也就P#V20.0了。
这个“调用块”里的L20.0 在FC1内,就叫V20.0了,这个是因为FC里,也有自己的L区,所以CALLING的区,就叫V区了,是特殊的V区(这个纯属个人猜测)
所以在调用 ANY,POINTER等参数类型或者复杂数据类型的接口时,就有了指向指针的说法了。

系统在调用过程中,会不断进行这个过程,COPY实参(变量或者常数)到L区。所以,CPU停止再次运行后,你的存在L区里的值会丢失了,但是PLC在执行到调用FC的语句时,会再次把100 COPY到相应的L区里。
人生就像一场旅行!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54660条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。