STEP7中FC的应用

STEP7中FC的应用

ID:40572628

大小:58.17 KB

页数:5页

时间:2019-08-04

STEP7中FC的应用_第1页
STEP7中FC的应用_第2页
STEP7中FC的应用_第3页
STEP7中FC的应用_第4页
STEP7中FC的应用_第5页
资源描述:

《STEP7中FC的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、FC参数处理过程解析:实例:新建一个FC块,编写一个简单的按钮启停程序,如下图所示:2个bool型输入变量IN1,IN2;一个bool型输出变量OUT1;以及完成简单的按钮启停程序如下:1.在OB1中调用FC1,实参输入为M区变量,观察结果如下:如图:M250.0有输入时,M250.2输出为1;M250.3没有输入,M250.4输出为0,结果符合程序预期,运行正确;1.在OB1中再次调用FC1,赋给实参为DB区的变量,如下图所示:注意,如上图:但把DB3.DBX0.0置1时,DB3.DBX0.2有输出;但同时发现,Network2中,DB3.DBX0

2、.4也输出了1,这是为什么呢,本来不应该有输出的啊?问题提出:为什么同样的FC,当参数为M区变量和DB区变量时,执行的结果会不同呢,FC对于参数的调用机制是怎么样的?问题解答:在STEP7V5.4编程手册中,我们可以找到这样的描述:在编程调用块时,请确保写入声明为OUTPUT的参数。否则,输出值为随机值!对于功能块,该值为最后一个调用指定的实例DB中的数值;对于功能,该值为位于L堆栈的数值。注意以下几点:l调用FC时,初始化所有OUTPUT参数;l尽量不要使用任何置位和复位指令,这些指令取决于RLO,当RLO的值为0时,将保持随机值;l如果在块内跳转

3、,那么确保没有跳过写入OUTPUT参数的位置。结论:FC调用输出实参为数据块时的处理,与输出实参为M、I、Q、PQ不同。在输出实参为M、I、Q、PQ时,FC输出形参(指针)指向实参实际存储地址,如果在FC中,没有对输出形参形成实质性操作,则形参指针所指向的实际存储区内容不会改变,对于参数传递过程而言,仅仅是调用时形参指向实参,调用结束时形参指针区域释放的一个过程。在输出实参为DB块时,FC开始调用时,先在V区为该形参分配一个存储区(可能是位,也可能是字节或其它,根据形参参数类型而定),每一次调用FC,根据调用FC时所传递的实参类型不同,为输出形参分配

4、的V区区域可能不同,比如一个FC有一个位输入形参,一个位输出形参,在第一次调用时,实参分别是I0.0,DB0.DBX0.0,则为输出形参分配的V区为V20.1;第二次调用FC,实参分别为DB0.DBX0.1,DB0.DBX0.2,则为输出形参分配的V区为V20.2,原来的V20.1被输入形参所对应的实参DB0.DBX0.1内容所填充。如果第二次调用FC时,实参为M0.1,DB0.DBX0.2,则为输出形参分配的V区仍为V20.1。其后,FC在实际运行时,针对输出形参(数据块)的处理其实都是在对该V区进行处理,在FC结束调用后,不管在FC中有没有对该V

5、区进行实质性处理,该V区的内容均会被拷贝至另一个存储区,比如L区,该L区与实参区对应,但不在同一区,此时并一直等到本次OB循环结束,该L区内容都不会被拷贝至实参区,所以这个时候实参区的内容还不会有变化。等到下一个OB循环开始之前,该L区内容就会被拷贝至实参区。根据以上内容,结合本例分析:1:第一次调用FC1时,在V区为形参分配一个存储区,本例中实参为DB3.DBX0.0,DB3.DBX0.1,输出实参为DB3.DBX0.2,则为形参分配的V区为V20.1,V20.2,V20.3;程序执行完毕后,V20.3值为1,并输出给DB3.DBX0.2;2:第二

6、次调用FC1时,同样为形参分配的V区为V20.1,V20.2,V20.3,但程序并未对OUT1变量进行初始化操作,此时V20.3的值仍然为1,即OUT1保持为第一次调用后的V20.3的值,所以第二次调用FC1时,输出DB3.DBX0.4也变为了1!解决办法:1.在FC1中对OUT1进行初始化操作,如下图所示:2.把OUT1变量改为IN/OUT类型。3.以上2点适用于所有FC调用,切记。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。