技术论坛

FC的INOUT引脚调用不同类型的区别

作者 主题
至圣

经验值: 13749
发帖数: 2032
精华帖: 16
主题:【探讨】FC的INOUT引脚调用不同类型的区别


只看楼主 只看精华 楼主 2019-09-03 21:42:04

虽然我写FC,FB的时候绝对不会既使用引脚变量又同时使用全局变量,但是看了别人的贴子我还是试了下。

我是想FB起始读取OUTPUT,或者INOUT,最后再赋值输出,所以不管你在FB里面如何调用全局变量,最后是以引脚的最后一次赋值为最后输出结果。

我试了下,int类型和我想的一样。

但是调用结构体的数据却出错了,是按照先后赋值顺序进行赋值的,原因在哪呢?

FC和FB测试是一样的效果,我用的是仿真测试。





工控毁我青春!
以下网友喜欢您的帖子:

  
重要声明:

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

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

版主

经验值: 69061
发帖数: 12270
精华帖: 59
回复:FC的INOUT引脚调用不同类型的区别


只看楼主 只看精华 1楼 2019-09-03 22:47:12

你这个同时复制,可能是调用完FB之后,再根据b的逻辑结果进行刷新到背景数据块吧

不确定呢


Q群:https://jq.qq.com/?k=9BDuEgf6
以下网友喜欢您的帖子:

  
侠士

经验值: 1073
发帖数: 129
精华帖: 2
回复:FC的INOUT引脚调用不同类型的区别
精华帖精华帖星级3级


只看楼主 只看精华 2楼 2019-09-10 16:15:02

FB:

in接口不管参数是基本数据类型还是复杂数据类型都是副本,

out同上。

inout接口基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针,是直接改写。

FC:

in接口实参是基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针,

out接口实参基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针。

inout接口基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针,是直接改写。

所以你的程序中UDT是以最后一次的赋值为准,基本数据类型都是副本,所以是以形参赋值为准。


好好学习,天天向上
以下网友喜欢您的帖子:

  
至圣

经验值: 13749
发帖数: 2032
精华帖: 16
回复:FC的INOUT引脚调用不同类型的区别


只看楼主 只看精华 楼主 3楼 2019-09-10 17:10:08
以下是引用mkas在2019-09-10 16:15:02的发言 >2楼

FB:

in接口不管参数是基本数据类型还是复杂数据类型都是副本,

out同上。

inout接口基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针,是直接改写。

FC:

in接口实参是基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针,

out接口实参基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针。

inout接口基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针,是直接改写。

所以你的程序中UDT是以最后一次的赋值为准,基本数据类型都是副本,所以是以形参赋值为准。

你有官方的文档说明吗?


工控毁我青春!
以下网友喜欢您的帖子:

  
游士

经验值: 224
发帖数: 7
精华帖: 0
回复:FC的INOUT引脚调用不同类型的区别


只看楼主 只看精华 4楼 2020-02-23 19:04:24

程序执行过程中,STEP 7 (TIA Portal)中的块参数在FC或FB中的处理是不同的。 两种类型的访问是有区别的: 
参数将作为参数指针被传递。调用的块可以直接访问被定义为实参的操作数。 
向被调用的块中写参数,将导致调用该块的块中的实参发生变化。
块参数的读访问直接读实参。
参数以复制的方式被传递。被调用的块的参数将保持被调用时的实参值。
当块被调用时,实参的值将被复制到调用块的临时数据。
向被调用的块写参数将不会导致实参在调用的块中被改变。
读访问访问的是之前的参数,而不是实际参数值。
基本数据类型(I, Q, M, P, L) 将不会被传递为指针,而是以复制方式被传递 (In, Out and InOut)。
结构体数据类型在InOut接口将被参数化为 
如果块的访问是统一的(都是优化的或都是非优化的),则被参数化为一个指针指向该结构体或者指向该PLC的数据类型。
如果块的访问是不统一的(有的优化有的非优化),则结构体或者PLC的数据类型将以复制方式被传递 。

当块被执行后,作为复制被传递的值将被写回,这样,执行过程中变化的值在程序执行完成后将可以被观察到。


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
FC的INOUT引脚调用不同类型的区别
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。