首页 理论教育 如何选择FB和FC?——优化电容器选择方案

如何选择FB和FC?——优化电容器选择方案

时间:2023-07-02 理论教育 版权反馈
【摘要】:最后单击“OK”按钮确认,如图10-52所示。需要注意FC和Program在MCC unit中的顺序,FC必须处在Program之上的位置。图10-58 插入FB程序在创建的FB程序变量声明表中定义变量,输入和输出参数如图10-59所示。图10-59 FB程序的变量声明列表图10-60 编写FB程序下面介绍如何调用FB功能

如何选择FB和FC?——优化电容器选择方案

通常,在编写程序时会多次重复使用某些程序块,这些程序块可以用子程序的方式创建。SIMOTION设备的一个或多个程序(如MCC,LAD/FBD,ST程序)可以根据需要重复调用子程序,调用子程序的示意图如图10-50所示。

978-7-111-43580-8-Chapter10-69.jpg

图10-50 子程序的执行

当调用子程序时,程序分支从当前任务跳转到子程序,开始执行其中的指令,执行完毕后跳转回原来激活的任务。

FC(Function)是一个无静态数据的子程序,即当FC执行后所有本地变量的值就丢失了,当FC下次执行时再进行初始化。可使用输入参数或输入/输出参数把数据传入FC,也可输出FC的返回值,通过传递参数或全局变量在子程序和调用程序间传递信息。

FB(Function Block)是一个有静态数据的子程序,即当FB执行后,所有的本地变量会保持它们原有的值,只有那些明确声明为临时变量的值会丢失。在使用FB之前,必须定义一个背景数据块,然后输入FB的名称作为数据类型。FB的静态数据存储在此背景数据块中。可以定义多个FB背景数据块,每个背景数据块相对独立。FB背景数据块的静态数据一直保持,直到该背景数据块再次调用。

下面分别介绍在MCC、LAD/FBD、ST编程语言下如何创建和使用FC、FB块。

1.使用MCC语言创建和使用FC

下面举例说明如何使用MCC语言创建和使用FC,首先创建一个计算圆周长的子程序,程序类型为FC,名称为Circumference。此圆周长计算可作为子程序在任何程序任务中调用。

圆周长计算公式为:Circumference=PI×2×radius

可在FC变量声明表中定义Radius(半径)和PI(π,圆周率)的值。

首先打开SCOUT,创建一个新项目。在“PROGRAMS”目录树下双击“Insert MCC unit”,插入一个MCC单元如图10-51所示,“Name”栏名称为“MCCunit_1”,单击“OK”

978-7-111-43580-8-Chapter10-70.jpg

图10-51 插入MCC单元

用鼠标左键双击“Insert MCC chart”,插入一个程序,程序名为“Circumference”,创建类型(Creation type)选择“Function”,返回类型(Return type)选择“REAL”,若选择“<-->”则无返回值。

检查Exportable选项,如果此FC程序将要在其他程序源文件中使用则勾选此选项;如果没有勾选此选项,则此程序只能在本MCC单元中使用。

此外,还可以输入作者,版本和注释等。最后单击“OK”按钮确认,如图10-52所示。

在创建的FC程序变量声明表中定义半径(radius)的变量类型为输入“VAR_INPUT”,数据类型为“REAL”;圆周率PI的变量类型为常数“VAR CONSTANT”,数据类型为“RE-AL”,初始值为“3.14159”,如图10-53所示。

编写变量赋值程序(见图10-54)并赋给返回值,然后编译保存。至此,FC程序就编写完毕了。

下面介绍如何在用户程序中调用上述FC程序。在同一“MCC unit”下插入一个新的程序名为“Program_circumference”,创建类型(Creation type)选择“Program”,如图10-55所示。

在“MCC unit”或“MCC chart”中声明下列变量(本例在MCC chart中声明,见图10-56):

●mycircum变量:FC“Circumference”的返回值赋给此变量。

●myradius变量:此变量包含半径的数据,赋给FC“Circumference”的输入参数Radius。

调用FC“Circumference”,打开调用子程序设定界面,“subroutine type”子程序类型选择“Function”,“Subroutine”子程序选择之前创建的“circumference”,“Return value”返回值选择“mycircum”,把“myradius”的值赋给FC中的变量“radius”,如图10-57所示。

978-7-111-43580-8-Chapter10-71.jpg

图10-52 插入MCC程序图

978-7-111-43580-8-Chapter10-72.jpg

图10-53 FC变量声明表

978-7-111-43580-8-Chapter10-73.jpg

图10-54 编写圆周长计算程序

978-7-111-43580-8-Chapter10-74.jpg

图10-55 插入程序

978-7-111-43580-8-Chapter10-75.jpg

图10-56 在MCC chart中声明的变量

978-7-111-43580-8-Chapter10-76.jpg

图10-57 调用子程序的设定

编译保存MCC程序单元,这样就完成了FC的调用。

需要注意FC和Program在MCC unit中的顺序,FC必须处在Program之上的位置。如果不是,可以单击鼠标右键选择Down或Up来调整位置。

2.使用MCC语言创建和使用FB

下面举例说明如何使用MCC语言创建和使用FB计算跟随误差。可创建一个计算跟随误差的子程序,程序类型为FB,名称为FollError。此跟随误差FB计算可作为子程序在任何程序任务中调用。

跟随误差计算公式:Difference=Specified position-Actual position

可在“MCC chart”或“MCC unit”中定义所需的输入和输出参数,如设定位置值,实际位置值和偏差。如果需要的话,还可定义其他变量。

首先打开SCOUT,创建一个新项目,在“PROGRAMS”目录树下双击“Insert MCC unit”,插入一个MCC单元。“Name”栏名称为“MCCunit_1”,单击“OK”按钮确认。

用鼠标左键双击“Insert MCC chart”,插入一个程序,程序名为“FollError”,创建类型(Creation type)选择“Function block”。

此外,还可以输入作者,版本和注释等,如图10-58所示,最后单击“OK”按钮确认。

978-7-111-43580-8-Chapter10-77.jpg

图10-58 插入FB程序

在创建的FB程序变量声明表中定义变量,输入和输出参数如图10-59所示。

在MCC chart程序编辑区编写程序,使用变量赋值命令,编写计算公式为:

Difference=Setpoint_position-Actual_position,然后编译保存,FB功能块FollError编写完成,如图10-60所示。

978-7-111-43580-8-Chapter10-78.jpg

图10-59 FB程序的变量声明列表

978-7-111-43580-8-Chapter10-79.jpg

图10-60 编写FB程序

下面介绍如何调用FB功能块。首先在“MCC unit”或“MCC chart”的变量声明表中定义FB的背景数据块(本例在MCC chart中声明背景数据块)。之后在同一“MCC unit”下生成一个新的程序,程序名称为“Prog_FollError”创建类型(Creation type)选择“Program”,单击“OK”按钮确认(见图10-61),然后声明FB背景数据块和其他变量(见图10-62)。

978-7-111-43580-8-Chapter10-80.jpg

图10-61 插入程序

978-7-111-43580-8-Chapter10-81.jpg

图10-62 声明FB背景数据块和其他变量

在“MCC chart”中插入“Subroutine call”调用子程序指令。打开调用子程序设定界面,“subroutine type”子程序类型选择“Function block”,“Subroutine”子程序选择之前创建的“FollError”,Instance背景数据块选择“myFollErr”。把轴的设定位置值和实际位置值分别赋给FB中的变量“setpoint_position”和“actual_position”,“Result”参数就是经过FB块计算后输出的值(见图10-63),单击“OK”按钮确认。

978-7-111-43580-8-Chapter10-82.jpg

图10-63 声明FB背景数据块和其他变量

编译保存MCC程序单元,这样就完成了FB的调用。

需要注意FB和Program在MCC unit中的顺序,FB必须处在Program之上的位置。如果不是,可以单击鼠标右键选择Down或Up来调整位置。

在FB功能块执行后,背景数据块中的静态数据(包括输出参数)仍然保留。可以在调用程序中访问输出参数。如果把FB背景数据块定义成VAR_GLOBAL,还可以在其他MCC charts程序中访问输出参数。

在“MCC chart”中插入“Variable assignment”指令,编写指令“Result_2:=my-FollErr.Difference”,这样就把输出参数“myFollErr.Difference”的值赋给了“Result_2”,如图10-64所示。

978-7-111-43580-8-Chapter10-83.jpg

图10-64 程序的变量分配

3.LAD语言下创建和使用FC

下面举例说明如何使用LAD语言创建和使用FC创建一个计算圆周长的子程序。程序类型为FC,名称为Circumference,此圆周长计算可作为子程序在任何程序任务中调用。

圆周长计算公式:Circumference=PI×2×radius

可在FC变量声明表中定义Radius(半径)和PI(π,圆周率)的值。

首先打开SCOUT,创建一个新项目,在“PROGRAMS”目录树下双击“Insert LAD/FBD unit”插入一个LAD/FBD程序单元,“Name”栏名称为“LFunit_1”。

用鼠标左键双击“Insert LAD/FBD program”插入一个程序,程序名为“Circumfer-ence”,创建类型(Creation type)选择“Function”,返回类型(Return type)选择“RE-AL”,若选择“<-->”则无返回值。

检查“Exportable”选项,如果此FC程序将要在其他程序源文件中使用(LAD/FBD,MCC或ST源文件),则勾选此选项;如果没有勾选,则此程序只能在本LAD/FBD程序单元中使用。此外,还可以输入作者,版本和注释等,如图10-65所示。

在创建的FC程序的变量声明表中定义半径(radius)的变量类型为输入“VAR_IN-PUT”,数据类型为“REAL”;圆周率PI的变量类型为常数“VAR CONSTANT”,数据类型为“REAL”,初始值为“3.14159”;直径diameter的变量类型为“VAR”,数据类型为“REAL”(见图10-66)。

在程序编辑区域右键单击“Insert network”或者左键单击按钮“978-7-111-43580-8-Chapter10-84.jpg”插入一个网络,如图10-67所示。

978-7-111-43580-8-Chapter10-85.jpg

图10-65 插入LAD/FBD程序

978-7-111-43580-8-Chapter10-86.jpg

图10-66 FC变量声明表

978-7-111-43580-8-Chapter10-87.jpg

图10-67 插入网络

在命令库中拖出两个乘法器命令到程序编辑区,编写周长计算程序,把这两个乘法器的输出赋值给返回值,然后编译保存,如图10-68所示。

下面介绍在用户程序中如何调用FC程序,在同一LAD/FBD unit下生成一个新的程序。插入一个程序名为“Program_circumference”的程序,创建类型(Creation type)选择“Pro-gram”(见图10-69)。

978-7-111-43580-8-Chapter10-88.jpg

图10-68 FC程序

978-7-111-43580-8-Chapter10-89.jpg

图10-69 插入程序

插入一个网络,然后把FC“Circumference”拖入该网络(见图10-70)。

在输入输出管脚中声明下列内容(见图10-71和图10-72):

1)mycircumference变量:FC“Circumference”的返回值赋给此变量。

2)myradius变量:此变量包含半径,赋给FC“Circumference”的输入参数Radius。

需要注意FC和Program在LAD/FBD unit中的顺序,FC必须处在Program之上的位置。如果不是,可以单击鼠标右键选择Down或Up来调整位置。

978-7-111-43580-8-Chapter10-90.jpg

图10-70 调用程序

978-7-111-43580-8-Chapter10-91.jpg

图10-71 声明变量

978-7-111-43580-8-Chapter10-92.jpg

图10-72 声明变量及数据类型

4.LAD语言下创建和使用FB

下面举例说明如何创建和使用FB来计算跟随误差,可创建一个计算跟随误差的子程序,程序类型为FB,名称为FollError。此跟随误差计算可作为子程序在任何程序任务中调用。

跟随误差计算公式:Difference=Specified position-Actual position

可在LAD/FBD程序(FB)或LAD/FBD unit中定义所需的输入和输出参数,如设定位置值,实际位置值和偏差。如果需要的话,还可定义其他变量。

首先打开SCOUT,创建一个新项目。在“PROGRAMS”目录树下双击“Insert LAD/FBD unit”,插入一个LAD/FBD单元,“Name”栏名称为“LFunit_1”。

用鼠标左键双击“Insert LAD/FBD program”,插入一个程序名称为“FollError”,创建类型(Creation type)选择“Function block”。此外,还可以输入作者,版本和注释等,如图10-73所示。(www.xing528.com)

978-7-111-43580-8-Chapter10-93.jpg

图10-73 插入FB程序

在创建的FB程序的变量声明表中定义变量,如输入和输出参数(见图10-74)。

在程序编辑区域右键单击“Insert network”,或者左键单击按钮“978-7-111-43580-8-Chapter10-94.jpg”插入一个网络(见图10-75)。

在命令库中拖出一个减法器命令到程序编辑区,如图10-76所示。

下面介绍如何在用户程序中调用FB程序块,可在LAD/FBD unit或LAD/FBD program的变量声明表中定义FB的背景数据块。本例在LAD/FBD unit的接口部分声明背景数据块,如图10-77所示。

978-7-111-43580-8-Chapter10-95.jpg

图10-74 FB程序的变量声明列表

978-7-111-43580-8-Chapter10-96.jpg

图10-75 插入网络

978-7-111-43580-8-Chapter10-97.jpg

图10-76 编写FB程序

978-7-111-43580-8-Chapter10-98.jpg

图10-77 FB程序的变量声明

在LFunit_1中创建一个程序,用鼠标左键双击“Insert LAD/FBD program”插入一个名为“Program FollError”的程序,创建类型(Creation type)选择“Program”,如图10-78所示。

978-7-111-43580-8-Chapter10-99.jpg

图10-78 插入调用FB的主程序

插入一个网络,然后把LFunit_1中的FB“FollError”拖入该网络,并选择“myfoller-ror”作为背景数据块,在该功能块的右键快捷菜单中选择“Display”→“All Box Parame-ters”可以显示功能块的所有引脚,如图10-79所示。

双击功能块,在弹出的“Enter Call Parameter”画面中可以为功能块的参数赋值,也可以直接在LAD编辑器中直接对功能块参数赋值,比如将轴的设定位置和实际位置赋给功能块的输入参数,输出参数赋给全局变量result。在功能块执行后,背景数据块中的静态数据仍然保留,可以在主程序中访问其输出参数。比如可以在程序的network2中插入MOVE指令,并编辑其输入输出参数,如图10-80所示。这样就把输出参数“myFollError.Differ-ence”的值赋给了Result_2。

978-7-111-43580-8-Chapter10-100.jpg

图10-79 调用功能块

978-7-111-43580-8-Chapter10-101.jpg

图10-80 编写调用FB的程序

5.ST语言下创建和使用FC、FB

(1)定义功能FC(Function)

在调用FC前,用户可以在执行区域(IMPLEMENTATION section)的声明部分(decla-ration part)定义一个FC。使用的语法如图10-81所示。

在关键词FUNCTION后需输入一个标识符,作为FC的名称和返回值的数据类型。如果FC无返回值,则输入VOID作为数据类型。

然后输入其他的声明区域、程序段和关键词END_FUNCTION。

(2)定义函数块FB(Function Block)

978-7-111-43580-8-Chapter10-102.jpg

图10-81 定义FC语法

在调用FB前,用户可以在执行区域(IMPLEMENTATION section)的声明部分(Decla-ration part)定义一个FB。使用的语法如图10-82所示。

978-7-111-43580-8-Chapter10-103.jpg

图10-82 定义FB语法

在关键词FUNCTION_BLOCK后需输入一个标识符作为FB的名称。

然后输入其他的声明区域、程序段和关键词END_FUNCTION_BLOCK。

(3)FB和FC的声明区域(Declaration section)

声明区域可被细分为多个不同的声明块,每个声明块都有独立成对的关键词来标识。每个块中包含一个声明列表,比如常数、本地变量和参数。每种类型的块只能出现一次,但顺序可任意调换。

表10-9所示选项可用做FC和FB的声明区域。

表10-9 FB和FC的声明块

978-7-111-43580-8-Chapter10-104.jpg

(续)

978-7-111-43580-8-Chapter10-105.jpg

调用FB或FC就会执行FB或FC中包含的语句,编写FB或FC的语法规则与编写其他程序并无区别。当调用FB或FC时,需要把传递的参数列入参数清单中,多个参数写在圆括号内,通过逗号分隔开,如图10-83所示。

978-7-111-43580-8-Chapter10-106.jpg

图10-83 调用程序的参数传递规则

通常指定输入和输入/输出参数进行赋值。用户可把实参的值赋给输出形参,通过使用“:=”操作符,可对输入参数赋值,通过使用“=>”操作符对输出参数赋值。形参在被调用块的声明部分中定义。

如果在输入/输出赋值中使用STRING字符串数据类型,那么实参的声明长度要大于或等于输入/输出形参,如图10-84所示。

赋给输入/输出参数的变量必须能够直接读或写。因此,系统变量(SIMOTION设备,工艺对象TO,过程映像区的I/O变量)不能赋给输入/输出参数。

(4)参数传递给输出参数(只针对FB)

用户使用输出赋值把FB的输出形参赋给变量(实参),如图10-85所示。当FB调用后,变量接受输出形参的值。在FB语句中可以使用和修改输出形参。对于参数传递而言,输出赋值是可选的。用户可以在任何时刻对FB输出参数进行读和写的操作。

不同的访问类型导致访问参数的时间不同:

978-7-111-43580-8-Chapter10-107.jpg

图10-84 在输入/输出赋值中使用STRING字符串数据类型

978-7-111-43580-8-Chapter10-108.jpg

图10-85 语法:输出赋值

1)在输入赋值情况下,实参的值复制给了形参。如果大的数据结构(比如数组(AR-RAY))被复制,而且经常调用FC或FB,那么性能就会受到限制。

2)在输入/输出赋值情况下,不会复制参数的值,而是建立一个形参的存储地址和实参之间的链接。因此,传递变量比输入赋值的情况快(特别是包含大量数据的情况)。但是,从FB访问变量要慢一些。

3)如果使用单元变量,则不会有任何变量复制到FC或FB。因为这些变量在整个ST程序单元中都是有效的。

(5)调用FC

可按照如下规则调用:

1)带返回值的FC(数据类型不是VOID)。

功能被放置在赋值的右边,通常也作为一个在表达式内部的操作数出现。调用FC后,计算表达式的结果为它的返回值。具体举例如下:

y:=sin(x);

y:=sin(in:=x);

y:=sqrt(1-cos(x)*cos(x));

2)不带返回值的FC(VOID数据类型)。

变量赋值只由调用FC组成。具体举例如下:

funct1(in1:=var11,in2:=var12,inout1:=var13);

(6)调用FB(背景数据块调用)

在调用FB功能块之前,必须声明一个背景数据块,语法如图10-86所示。可声明一个变量,然后输入FB的名称作为数据类型。可以如下声明背景数据块:

1)本地的。

在程序或FB的声明部分,VAR/END_VAR范围内。

2)全局的。

在执行部分的接口处,VAR_GLOBAL/END_VAR范围内。

3)作为输入/输出参数。

在FB或FC的声明部分,VAR_IN_OUT/END_VAR范围内。

978-7-111-43580-8-Chapter10-109.jpg

图10-86 语法:声明背景数据块

背景数据块声明也可以是数组ARRAY。比如:FB_inst:ARRAY[1..2]OF FB_name。

在程序组织单元POU(Program Organization Units)的语句部分调用FB的背景数据块如图10-87所示。FB参数输入赋值和输入/输出赋值通过逗号分隔开。

978-7-111-43580-8-Chapter10-110.jpg

图10-87 FB调用语法

假定“supply”和“motor”FB功能块已经定义完毕,如图10-88所示,有

1)FB supply:输入参数in1,in2;输入/输出参数inout;输出参数out;

2)FB motor:输入/输出参数inout1,inout2;输出参数out1,out2。

在FB调用中,可使用结构变量从FB外部访问FB的输出参数,格式为FB instancename.output parameter,比如Supply1.out;也可使用结构变量从FB外部读或写FB的输入参数,格式为FB instance name.input parameter,比如Supply1.in1。

978-7-111-43580-8-Chapter10-111.jpg

图10-88 背景数据块声明,FB调用,访问输出参数

FB背景数据块名称本身不能用于变量赋值。

(7)FB调用注意事项

当调用FB背景数据块时,需注意:

1)只能把直接存储在存储器中的变量赋给输入/输出参数。

允许使用下列变量:

①全局变量(单元变量和全局设备用户变量);

②本地变量;

③TO的数据类型的变量(TO背景数据块)。

不允许使用下列变量:

①系统变量(TO变量);

②工程系统中的工艺对象名称;

③I/O变量;

④绝对和符号过程映像访问。

2)不能把FC作为输入/输出参数。调用FC时,不能在输入/输出赋值中把其当做实参。必须首先在本地变量中存储FC的结果,然后在输入/输出赋值中把此变量作为实参使用。

3)不能把常数作为输入/输出参数。

4)输入/输出参数不能初始化。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈