签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
虽然我写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
你这个同时复制,可能是调用完FB之后,再根据b的逻辑结果进行刷新到背景数据块吧
不确定呢
FB:
in接口不管参数是基本数据类型还是复杂数据类型都是副本,
out同上。
inout接口基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针,是直接改写。
FC:
in接口实参是基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针,
out接口实参基本数据类型是副本,在调用结束后刷新实参,如果是复杂数据类型,传的是指针。
所以你的程序中UDT是以最后一次的赋值为准,基本数据类型都是副本,所以是以形参赋值为准。
你有官方的文档说明吗?
程序执行过程中,STEP 7 (TIA Portal)中的块参数在FC或FB中的处理是不同的。 两种类型的访问是有区别的: 参数将作为参数指针被传递。调用的块可以直接访问被定义为实参的操作数。 向被调用的块中写参数,将导致调用该块的块中的实参发生变化。 块参数的读访问直接读实参。参数以复制的方式被传递。被调用的块的参数将保持被调用时的实参值。 当块被调用时,实参的值将被复制到调用块的临时数据。 向被调用的块写参数将不会导致实参在调用的块中被改变。 读访问访问的是之前的参数,而不是实际参数值。基本数据类型(I, Q, M, P, L) 将不会被传递为指针,而是以复制方式被传递 (In, Out and InOut)。 结构体数据类型在InOut接口将被参数化为 如果块的访问是统一的(都是优化的或都是非优化的),则被参数化为一个指针指向该结构体或者指向该PLC的数据类型。 如果块的访问是不统一的(有的优化有的非优化),则结构体或者PLC的数据类型将以复制方式被传递 。当块被执行后,作为复制被传递的值将被写回,这样,执行过程中变化的值在程序执行完成后将可以被观察到。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录