首页 理论教育 程序控制指令:块调用和结束的使用方法

程序控制指令:块调用和结束的使用方法

时间:2023-06-29 理论教育 版权反馈
【摘要】:程序控制指令是指块的调用和结束指令,用于执行程序控制。BE指令与S5软件中的不完全相同。在S7硬件上使用时,本指令与BEU具有相同的功能。将RLO设置成1,然后在BEC后的指令处继续程序扫描。CALL指令调用作为地址输入的FC和SFC或FB或SFB,与RLO或任何其他条件无关。处理了被调用块后,继续对调用块的程序进行处理。

程序控制指令:块调用和结束的使用方法

程序控制指令是指块的调用和结束指令,用于执行程序控制。

1.语句表(STL)的程序控制指令

(1)BE 块结束

指令格式为:BE

BE(块结束)终止当前块中的程序扫描,并跳转到调用当前块的块中。在调用程序的块调用语句后的第一个指令处继续程序扫描。释放当前的本地数据区,上一个本地数据区开始成为当前本地数据区。重新打开调用块时打开的数据块。此外,恢复调用块的MCR相关性,并将RLO从当前块传送到调用当前块的块中。BE与任何条件无关。然而,当跳过BE指令后,不结束当前程序扫描,而在块内的跳转目标处继续开始程序扫描。BE指令与S5软件中的不完全相同。在S7硬件上使用时,本指令与BEU具有相同的功能。

例:

978-7-111-46052-7-Chapter04-243.jpg

(2)BEC 块有条件结束

指令格式为:BEC

如果RLO=1,那么BEC(块有条件结束)中断当前块中的程序扫描,并跳转到调用当前块的块。在块调用后的第一个指令处继续程序扫描。释放当前的本地数据区,上一个本地数据区开始成为当前本地数据区。重新打开调用块时为当前数据块的数据块。恢复调用块的MCR相关性。将RLO(=1)从被终止的块传送到被调用的块。如果RLO=0,那么不执行BEC。将RLO设置成1,然后在BEC后的指令处继续程序扫描。

例:

978-7-111-46052-7-Chapter04-244.jpg

(3)BEU 块无条件结束

指令格式为:BEU

BEU(块无条件结束)终止当前块中的程序扫描,并跳转到调用当前块的块。在块调用后的第一个指令处继续程序扫描。释放当前的本地数据区,上一个本地数据区开始成为当前本地数据区。重新打开调用块时打开的数据块。此外,恢复调用块的MCR相关性,并将RLO从当前块传送到调用当前块的块中。BEU与任何条件无关。然而,当跳过BEU指令后,不结束当前程序扫描,而在块内的跳转目标处继续进行程序扫描。

例:

978-7-111-46052-7-Chapter04-245.jpg

(4)CALL 块调用

指令格式为:CALL〈逻辑块标识符〉

CALL〈逻辑块标识符〉用于调用功能(FC)或功能块(FB)、系统功能(SFC)或系统功能块(SFB)或调用由西门子提供的标准预编程块。CALL指令调用作为地址输入的FC和SFC或FB或SFB,与RLO或任何其他条件无关。当通过CALL调用FB或SFB时,必须给块提供一个相关的背景数据块。处理了被调用块后,调用块程序继续进行逻辑处理。可以指定逻辑块的绝对地址或符号地址。调用了SFB/SFC后,恢复寄存器的内容。

例:块调用语法见表4-8。

表4-8 块调用语法

978-7-111-46052-7-Chapter04-246.jpg

注意,使用STL编辑器时,表4-8中的引用(n、n1和n2)必须指向有效的已存在块。同样,在使用前必须定义符号名。

传递参数(增量式编辑模式)。调用块可通过变量列表与被调用块交换参数。当输入一个有效的CALL语句时,自动在STL程序中扩展变量列表。当调用FB、SFB、FC或SFC,而被调用块的变量声明表中具有IN、OUT和IN_OUT声明时,这些变量以形式参数列表的形式添加到调用块中。

调用FC和SFC时,必须在调用逻辑块中将实际参数分配给形式参数。

调用FB和SFB时,只需指定通过上次调用改变的实际参数。处理了FB后,在背景数据块中存储实际参数。当实际参数是一个数据块时,必须指定完整的绝对地址,例如DB1.DBW2。可以将IN参数指定为常数、绝对地址或符号地址。必须将OUT和IN_OUT参数指定为绝对地址或符号地址。必须确保所有地址和常数都与要传送的数据类型兼容。CALL将返回地址(选择器和相对地址)、两个当前块的选择器以及MA位保存到B(块)堆栈中。此外,CALL取消激活MCR相关性,然后创建被调用块的本地数据区。

例1:将参数分配给FC6调用

CALL FC6

形式参数 实际参数

NO OF TOOL :=MW100

TIME OUT :=MW110

FOUND :=Q 0.1

ERROR :=Q 100.0

例2:调用不带参数的SFC

CALL SFC43 ∥调用SFC43,重新触发监视狗定时器(不带参数)

例3:调用带背景数据块DB1的FB99

CALL FB99,DB1

形式参数 实际参数

MAX_RPM :=#RPM1_MAX

MIN_RPM :=#RPM1

MAX_POWER :=#POWER1

MAX_TEMP :=#TEMP1

例4:调用带背景数据块DB2的FB99

CALL FB99,DB2

形式参数 实际参数

MAX_RPM :=#RPM2_MAX

MIN_RPM :=#RPM2

MAX_POWER :=#POWER2

MAX_TEMP :=#TEMP2

注意,每个FB或SFC调用必须具有一个背景数据块。在上面的例子中,必须在调用之前已经存在DB1和DB2。

(5)调用FB

指令格式为:CALL FB n1,DB n1

此指令用于调用用户自定义的功能块(FB)。CALL指令调用作为地址输入的功能块,与RLO或其他条件无关。当使用CALL调用一个功能块时,必须给它提供一个背景数据块。处理了被调用块后,继续对调用块的程序进行处理。可以指定逻辑块的绝对地址或符号地址。

传递参数(增量式编辑模式)调用块可通过变量列表与被调用块交换参数。当输入一个有效的CALL指令时,自动在语句表程序中扩展变量列表。当调用一个功能块,而被调用块的变量声明表中具有IN、OUT和IN_OUT声明时,这些变量以形式参数列表添加到调用块中。调用功能块时,只需指定必须通过上次调用改变的实际参数,因为在处理了功能块后,实际参数保存在背景数据块中。当实际参数是一个数据块时,必须指定完整的绝对地址,例如DB1.DBW2。将IN参数指定为常数或作为绝对地址或符号地址。必须将OUT和IN_OUT参数指定为绝对地址或符号地址。必须确保所有地址和常数都与要传送的数据类型兼容。CALL将返回地址(选择器和相对地址)、两个当前块的选择器以及MA位保存到B(块)堆栈中。此外,CALL取消激活MCR相关性,然后创建被调用块的本地数据区。

978-7-111-46052-7-Chapter04-247.jpg

注意,每个功能块的CALL必须具有一个背景数据块。在上面的实例中,必须在调用之前已经存在DB1和DB2。

(6)调用FC

指令格式为:CALL FC n

注意,当使用STL编辑器时,引用(n)必须与已存在的有效块相关。还必须在使用前定义符号名。该指令用于调用功能(FC)。CALL指令调用作为地址输入的FC,与RLO或其他条件无关。处理了被调用块后,继续对调用块的程序进行处理。可以指定逻辑块的绝对地址或符号地址。

传递参数(增量式编辑模式)调用块可通过变量列表与被调用块交换参数。当输入一个有效的CALL指令时,自动在语句表程序中扩展变量列表。当调用一个功能,而被调用块的变量声明表中具有IN、OUT和IN_OUT声明时,这些变量以形式参数列表添加到调用块中。

调用功能时,必须在调用逻辑块中将实际参数分配给形式参数。可以将IN参数指定为常数、绝对地址或符号地址。必须将OUT和IN_OUT参数指定为绝对地址或符号地址。必须确保所有地址和常数都与要传送的数据类型兼容。CALL将返回地址(选择器和相对地址)、两个当前块的选择器以及MA位保存到B(块)堆栈中。此外,CALL取消激活MCR相关性,然后创建被调用块的本地数据区。

例:将参数分配给FC6调用

978-7-111-46052-7-Chapter04-248.jpg

(7)调用SFB

指令格式为:CALL SFB n1,DB n2

此指令用于调用由西门子提供的标准功能块(SFB)。CALL指令调用作为地址输入的SFB,与RLO或其他条件无关。当使用CALL调用一个系统功能块时,必须给它提供一个背景数据块。处理了被调用块后,继续对调用块的程序进行处理。可以指定逻辑块的绝对地址或符号地址。

调用块可通过变量列表与被调用块交换参数。当输入一个有效的CALL指令时,自动在语句表程序中扩展变量列表。当调用一个系统功能块,而被调用块的变量声明表中具有IN、OUT和IN_OUT声明时,这些变量以形式参数列表添加到调用块中。

调用系统功能块时,只需指定必须通过上次调用改变的实际参数,因为在处理了系统功能块后,实际参数保存在背景数据块中。当实际参数是一个数据块时,必须指定完整的绝对地址,例如DB1.DBW2。

在进行参数传递时,可以将IN参数指定为常数、绝对地址或符号地址,此外必须将OUT和IN_OUT参数指定为绝对地址或符号地址,必须确保所有地址和常数都与要传送的数据类型兼容。CALL将返回地址(选择器和相对地址)、两个当前块的选择器以及MA位保存到B(块)堆栈中。此外,CALL取消激活MCR相关性,然后创建被调用块的本地数据区。

例:

978-7-111-46052-7-Chapter04-249.jpg

注意,每个系统功能块CALL必须具有一个背景数据块。在上面的实例中,必须在调用之前已经存在SFB4和DB4。

(8)调用SFC

指令格式为:CALL SFC n

此指令用于调用由西门子提供的标准功能(SFC)。CALL指令调用作为地址输入的SFC,与RLO或其他条件无关。处理了被调用块后,继续对调用块的程序进行处理。可以指定逻辑块的绝对地址或符号地址。注意当使用STL编辑器时,引用(n)必须与已存在的有效块相关。还必须在使用前定义符号名。

传递参数(增量式编辑模式)

调用块可通过变量列表与被调用块交换参数。当输入一个有效的CALL指令时,自动在语句表程序中扩展变量列表。当调用一个系统功能,而被调用块的变量声明表中具有IN、OUT和IN_OUT声明时,这些变量以形式参数列表添加到调用块中。调用系统功能时,必须在调用逻辑块中将实际参数分配给形式参数。在传递参数时,可以将IN参数指定为常数、绝对地址或符号地址。必须将OUT和IN_OUT参数指定为绝对地址或符号地址,所有地址和常数都与要传送的数据类型兼容。

CALL将返回地址(选择器和相对地址)、两个当前块的选择器以及MA位保存到B(块)堆栈中。此外,CALL取消激活MCR相关性,然后创建被调用块的本地数据区。

例:不带参数调用SFC

CALL SFC43 ∥调用SFC43,重新触发监视狗定时器(不带参数)

(9)调用多重背景

指令格式为:CALL#变量名

通过声明一个具有功能块数据类型的静态变量,创建一个多重背景。只在程序元素目录中包括已经声明的多重背景。

(10)调用库中的块

在STEP 7中可使用SIMATIC管理器中可供使用的库来选择集成在CPU操作系统(“标准库”)中的块和保存在库中供再次使用的块。

(11)CC 条件调用

指令格式为:CC〈逻辑块标识符〉

CC〈逻辑块标识符〉(块条件调用)在RLO=1时调用一个逻辑块。CC用于不带参数调用FC或FB类型的逻辑块。除了不能使用调用程序传送参数之外,CC的使用方法同CALL指令。该指令将返回地址(选择器和相对地址)、两个当前数据块的选择器以及MA位保存到B(块)堆栈中,取消激活MCR相关性,创建被调用块的本地数据区,然后开始执行被调用代码。可以指定逻辑块的绝对地址或符号地址。

例:

978-7-111-46052-7-Chapter04-250.jpg

2.0语句后执行

注意,当CALL指令调用一个功能块(FB)或系统功能块(SFB)时,必须在语句中指定一个背景数据块(DB号)。对于通过CC指令进行的一个调用,不能在语句中将数据块分配给地址。根据正在使用的程序段,程序编辑器在将梯形图编程语言转换成语句表编程语言期间,生成UC指令或CC指令。相反,应该尝试使用CALL指令,以避免在程序中发生错误

(12)UC 无条件调用

指令格式为:UC〈逻辑块标识符〉

UC〈逻辑块标识符〉(块无条件调用)调用FC或SFC类型的一个逻辑块。除了不能通过被调用块传送参数外,UC如同CALL指令。该指令将返回地址(选择器和相对地址)、两个当前数据块的选择器以及MA位保存到B(块)堆栈中,取消激活MCR相关性,创建被调用块的本地数据区,然后开始执行被调用代码。

例1:

978-7-111-46052-7-Chapter04-251.jpg

注意,CALL指令用于功能块(FB)或系统功能块(SFB)时,在指令中显式表示一个背景数据块(DB号)。使用UC指令进行调用时,不能在UC地址中关联数据块。根据正在使用的程序段,程序编辑器在将梯形图编程语言转换成语句表编程语言期间,生成UC指令或CC指令。相反,应该尝试使用CALL指令,以避免在程序中发生错误。

(13)MCR(主控继电器

注意,为了防止人员伤害或财产损失,禁止用MCR代替硬连线的机械主控继电器实现紧急停止功能。

主控继电器(MCR)是一个继电器梯形图主开关,用于激励和取消激励能量。由下列位逻辑触发的指令和传送指令取决于MCR:=〈位〉、S〈位〉、R〈位〉、T〈字节〉、T〈字〉、T〈双字〉。

当MCR为0时,使用T指令将0写入到存储器字节、字和双字中。S和R指令保持现有数值不变。指令=(赋值指令)在已寻址的位中写入“0”。

指令取决于MCR以及对MCR信号状态的反应,MCR的信号状态为0(“关闭”)时,=〈位〉写入0(模拟当断开电压时,进入静止状态的一个继电器);S〈位〉、R〈位〉不写入(模拟当断开电压时,仍然位于其当前状态的一个继电器);T〈字节〉、T〈字〉T〈双字〉写入0(模拟当断开电压时,生成数值0的一个部件)。MCR的信号状态为1(“打开”)时,正常处理。

1)MCR(-MCR区域开始,)MCR-MCR区域结束。

由1位宽、8位深的堆栈控制MCR。只要所有8个条目等于1,就激励MCR。MCR(指令将RLO位复制到MCR堆栈中)指令从堆栈中删除最后一个条目,并将空出的位置设置成1。MCR(和)MCR指令必须始终成对使用。出现故障时,即,当出现8个以上连续的MCR(指令,或当MCR堆栈为空时尝试执行)MCR指令,将触发MCRF错误消息。

2)MCRA-激活MCR区域,MCRD-取消激活MCR区域。

MCRA和MCRD必须始终成对使用。程序中位于MCRA和MCRD之间的指令取决于MCR位的状态。在MCRA-MCRD序列外编程的指令不取决于MCR的位状态。

必须使用被调用块中的MCRA指令,在各个块中对功能(FC)和功能块(FB)的MCR相关性进行编程。

(14)使用MCR功能的注意事项

1)请注意使用MCRA激活主控继电器的块。

2)取消激活MCR时,所有赋值(T,=)都在MCR(和)MCR之间的程序段中写入数值0。

3)当MCR指令前的RLO=0时,取消激活MCR。

4)危险:PLC处于STOP状态或未定义的运行系统特征!编译器还对在VAR_TEMP中定义的临时变量后的局部数据进行写访问,以计算地址。这表示下列命令序列将把PLC设置成STOP,或导致未定义的运行系统特征:

①形式参数访问

访问STRUCT、UDT、ARRAY、STRING类型的复杂FC参数的组件;访问来自具有多重背景能力的块(V2版本的块)的IN_OUT区域的、STRUCT、UDT、ARRAY、STRING类型的复杂FB参数的组件;当地址高于8180.0时,访问具有多重背景能力(V2版本的块)的功能块的参数;在具有多重背景能力(V2版本的块)的功能块中访问类型为BLOCK_DB的参数,打开DB0。任何后继数据访问将CPU设置成STOP。T0、C0、FC0或FB0始终用于TIMER、COUNT-ER、BLOCK_FC和LOCK_FB。

②参数传递,通过调用可传递参数

LAD/FBD:梯形图或功能块中的T分支和中线输出以RLO=0开始。

纠正方法是释放上述命令,使其与MCR不相关:使用所述语句或程序段前面的MCRD指令,取消激活主控继电器;使用所述语句或程序段后的MCRA指令,重新激活主控继电器。

(15)MCR(在MCR堆栈中保存RLO,开始MCR和)MCR 结束MCR

指令格式为:MCR((www.xing528.com)

)MCR

MCR((打开一个MCR区域)在MCR堆栈上保存RLO,然后打开一个MCR区域。MCR区域是指令MCR(和相应的指令)MCR之间的指令。指令MCR(必须始终与指令)MCR一起使用。

当RLO=1时,MCR“打开”。正常执行该MCR区域内与MCR有关的指令。

当RLO=0时,MCR“关闭”。

指令取决于MCR的位状态,当MCR的信号状态为0(“关闭”)时,=〈位〉写入0(模拟当断开电压时,进入静止状态的一个继电器);S〈位〉、R〈位〉不写入(模拟当断开电压时,仍然位于其当前状态的一个继电器);T〈字节〉、T〈字〉、T〈双字〉写入0(模拟当断开电压时,生成数值0的一个部件)。MCR的信号状态为1(“打开”)时,正常处理。

MCR(和)MCR指令可以嵌套。最大嵌套深度为8层指令。可能的堆栈条目的最大数目为8个。当堆栈满时,执行MCR(将产生MCR堆栈故障(MCRF)。

)MCR(结束MCR区域)从MCR堆栈中删除一个条目,然后结束一个MCR区域。释放最后一个MCR堆栈位置,并将其设置成1。指令MCR(必须始终与指令)MCR一起使用。当堆栈空时,执行)MCR将产生MCR堆栈故障(MCRF)。

例:

978-7-111-46052-7-Chapter04-252.jpg

(16)MCRA(激活MCR区域)和MCRD(取消激活MCR区域)

指令格式为:MCRA

MCRD

MCRA(主控继电器激活)激励其后指令的MCR相关性。指令MCRA必须始终与指令MCRD(主控继电器取消激活)一起使用。程序中位于MCRA和MCRD之间的指令取决于MCR位的信号状态。

MCRD(主控继电器取消激活)取消激励其后指令的MCR相关性。指令MCRA(主控继电器激活)必须始终与指令MCRD(主控继电器取消激活)组合使用。程序中位于MCRA和MCRD之间的指令取决于MCR位的信号状态。执行该指令,与状态字的位无关,也不影响状态字的位。

2.梯形图(LAD)的程序控制指令

(1)---(Call) 调用来自线圈的FC SFC(不带参数)

指令符号为: 〈FC/SFC编号〉

---(CALL)

〈FC/SFC编号〉的数据类型为BLOCK_FC和BLOCK_SFC,FC/SFC编号的范围取决于CPU。---(Call)(不带参数调用FC或SFC)用于调用没有传递参数的功能(FC)或系统功能(SFC)。只有在CALL线圈上RLO为“1”时,才执行调用。当执行---(Call)时,存储调用块的返回地址,由当前的本地数据区代替以前的本地数据区,将MA位(有效MCR位)移位到B堆栈中,为被调用的功能创建一个新的本地数据区。之后,在被调用的FC或SFC中继续进行程序处理。

例:

梯形图的梯级是由用户编写的功能块中的程序段。在该FB中,打开DB10,并激活MCR功能。当执行无条件调用FC10时,发生下面情况:

保存调用FB的返回地址,并保存DB10和调用FB的背景数据块的选择数据。在MCRA指令中设置成“1”的MA位被推入到B堆栈中,然后为被调用块(FC10)将MA位设置成“0”。继续在FC10中进行程序处理。当FC10要求MCR功能时,必须在FC10内重新激活该功能。当完成FC10时,程序处理返回调用FB。不管FC10使用了哪个DB,都恢复MA位,DB10和用户编写FB的背景数据块重新成为当前DB。通过将I0.0的逻辑状态分配给输出Q4.0,程序继续处理下一个梯级。FC11的调用为条件调用。只有在I0.1为“1”时,才执行调用。执行调用后,将程序控制传递给FC11并从FC11返回程序控制的过程,与已经描述过的FC10的过程相同。

978-7-111-46052-7-Chapter04-253.jpg

注意,返回调用块后,不是总会再次打开以前打开的DB。

(2)CALL_FB 调用来自框的FB

指令符号为:

该符号取决于FB(是否带参数以及带多少个参数)。它必须具有EN、ENO以及FB的名称或编号。

978-7-111-46052-7-Chapter04-254.jpg

EN(起用输入)和ENO(起用输出)的数据类型为BOOL型,存储区为I、Q、M、L、D。EN(被减数)和IN2(减数)的数据类型为DINT型,存储区为I、Q、M、L、D或常数。FB编号的数据类型为BLOCK_FB,DB号的数据类型为存储区为BLOCK_DB。

当EN为“1”时,执行CALL_FB(调用来自框的功能块)。当执行CALL_FB时,存储调用块的返回地址,存储两个当前数据块(DB和背景DB)的选择数据,由当前的本地数据区代替以前的本地数据区,将MA位(有效MCR位)移位到B堆栈中,为被调用的功能块创建一个新的本地数据区。

之后,在被调用的功能块中继续进行程序处理。扫描BR位,以查找ENO。用户必须使用---(SAVE)将所要求的状态(错误判断)分配给被调用块中的BR位。

978-7-111-46052-7-Chapter04-255.jpg

例:

在该FB中,打开DB10,并激活MCR功能。当执行无条件调用FB11时,发生下面情况:

保存调用FB的返回地址,并保存DB10和调用FB的背景数据块的选择数据。在MCRA指令中设置成“1”的MA位被推入到B堆栈中,然后为被调用块(FB11)将MA位设置成“0”。继续在FB11中进行程序处理。当FB11要求MCR功能时,必须在FB11内重新激活该功能。必须使用指令---(SAVE)在BR位中保存RLO的状态,以便判断调用FB中的错误。当完成FB11时,程序处理返回调用FB。恢复MA位,并重新打开用户编写的FB的背景数据块。当正确处理FB11时,ENO=“1”,因此Q4.0=“1”。

注意,打开FB或SFB时,会丢失以前打开的DB的编号。必须重新打开所要求的DB。

(3)CALL_FC 调用来自框的FC

指令符号为:

该符号取决于FC(是否带参数以及带多少个参数)。它必须具有EN、ENO以及FC的名称或编号。

978-7-111-46052-7-Chapter04-256.jpg

EN(起用输入)和ENO(起用输出)的数据类型为BOOL型,存储区为I、Q、M、L、D。FC编号的数据类型为BLOCK_FC,CALL_FC(调用来自框的功能)用于调用一个功能(FC)。当EN为“1”时,执行调用。如果执行了CALL_FC,存储调用块的返回地址,由当前的本地数据区代替以前的本地数据区,将MA位(有效MCR位)移位到B堆栈中,为被调用的功能创建一个新的本地数据区。之后,在被调用的功能中继续进行程序处理。

扫描BR位,以查找ENO。必须使用---(SAVE)将所要求的状态(错误判断)分配给被调用块中的BR位。

当调用一个功能,而被调用块的变量声明表中具有IN、OUT和IN_OUT声明时,这些变量以形式参数列表添加到调用块的程序中。当调用功能时,必须在调用位置处将实际参数分配给形式参数。功能声明中的任何初始值都没有含义。

例:

在FB中,打开DB10,并激活MCR功能。当执行无条件调用978-7-111-46052-7-Chapter04-257.jpgFC10时,发生下面情况:

保存调用FB的返回地址,并保存DB10和调用FB的背景数据块的选择数据。在MCRA指令中设置成“1”的MA位被推入到B堆栈中,然后为被调用块(FC10)将MA位设置成“0”。继续在FC10中进行程序处理。当FC10要求MCR功能时,必须在FC10内重新激活该功能。必须使用指令---(SAVE)在BR位中保存RLO的状态,以便可以判断调用FB中的错误。当完成FC10时,程序处理返回调用FB。恢复MA位。执行FC10后,根据ENO,在调用FB中继续进行程序处理:ENO=“1”FC11已处理,ENO=“0”在下一个程序段中开始处理。如果也正确处理了FC11,则ENO=“1”,因此Q4.0=“1”。注意,返回调用块后,不是总会再次打开以前打开的DB。

978-7-111-46052-7-Chapter04-258.jpg

(4)CALL_SFB 调用来自框的系统FB

指令符号为:

该符号取决于SFB(是否带参数以及带多少个参数)。它必须具有EN、ENO以及SFB的名称或编号。EN(起用输入)和ENO(起用输出)的数据类型为BOOL型,存储区为I、Q、M、L、D。SFB编号的数据类型为BLOCK_SFB,DB号的数据类型为BLOCK_DB。-SFB编号,范围取决于CPU。

当EN为“1”时,执行CALL_SFB(调用来自框的系统功能块)。执行CALL_SFB时,存储调用块的返回地址,存储两个当前数据块(DB和背景DB)的选择数据,由当前的本地数据区代替以前的本地数据区,将MA位(有效MCR位)移位到B堆栈中,为被调用的系统功能块创建一个新的本地数据区。然后在被调用的SFB中继续进行程序处理。当调用SFB(EN=“1”)且没有发生错误时,ENO为“1”。

978-7-111-46052-7-Chapter04-259.jpg

例:

功能块中的程序段。在该FB中,打开DB10,并激活MCR功能。当执行无条件调用SFB8时,发生下面情况:

保存调用FB的返回地址,并保存DB10和调用FB的背景数据块的选择数据。在MCRA指令中设置成“1”的MA位被推入到B堆栈中,然后为被调用块(SFB8)将MA位设置成“0”。继续在SFB8中进行程序处理。当完成SFB8时,程序处理返回调用FB。恢复MA位,且用户编写的FB的背景数据块成为当前背景DB。当正确处理SFB8时,ENO=“1”,因此Q4.0=“1”。

注意,打开FB或SFB时,会丢失以前打开的DB的编号。必须重新打开所要求的DB。

(5)CALL_SFC 调用来自框的系统FC

指令符号为:

该符号取决于SFC(是否带参数以及带多少个参数)。它必须具有EN、ENO以及SFC的名称或编号。

978-7-111-46052-7-Chapter04-260.jpg

EN(起用输入)和ENO(起用输出)的数据类型为BOOL型。SFC编号的数据类型为BLOCK_SFC。SFC编号,范围取决于CPU。

CALL_SFC(调用来自框的系统功能)用于调用一个SFC。当EN为“1”时,执行调用。当执行CALL_SFC时,存储调用块的返回地址,由当前的本地数据区代替以前的本地数据区,将MA位(有效MCR位)移位到B堆栈中,为被调用的系统功能创建一个新的本地数据区。之后,在被调用的SFC中继续进行程序处理。当调用SFC(EN=“1”)且没有发生错误时,ENO为“1”。

978-7-111-46052-7-Chapter04-261.jpg

例:

在该程序段的FB中,打开DB10,并激活MCR功能。当执行无条件调用SFC20时,发生下面情况:

保存调用FB的返回地址,并保存DB10和调用FB的背景数据块的选择数据。在MCRA指令中设置成“1”的MA位被推入到B堆栈中,然后为被调用块(SFC20)将MA位设置成“0”。继续在SFC20中进行程序处理。当完成SFC20时,程序处理返回调用FB。恢复MA位。处理SFC20后,根据ENO,在调用FB中继续进行程序处理:当ENO=“1时”Q4.0=“1”,当ENO=“0”时,Q4.0=“0”。

注意,返回调用块后,不是总会再次打开以前打开的DB。

978-7-111-46052-7-Chapter04-262.jpg

(6)调用多重背景

指令符号为:

EN(起用输入)和ENO(起用输出)的数据类型为BOOL型,存储区为I、Q、M、L、D。#变量名(多重背景的名称)的数据类型为FB、SFB。

978-7-111-46052-7-Chapter04-263.jpg

通过声明一个数据类型为功能块的静态变量,创建一个多重背景。只有已经声明的多重背景才会包括在程序元素目录中。多重背景的符号改变取决于是否带参数以及带多少个参数。始终标出EN、ENO和变量名。

(7)调用来自库的块

在此,可使用SIMATIC管理器中可供使用的库来选择集成在CPU操作系统中的块和由于要多次使用而自行在库中保存的块。

(8)使用MCR功能的重要注意事项

1)注意:在MCR功能中使用MCRA激活主控制继电器的块,取消激活MCR时,在---(MCR<)和---(MCR>)之间的程序段中的所有赋值都写入数值0。这对于包含一个赋值的所有框都有效,包括传递到块的参数在内。当MCR<指令之前的RLO=0时,取消激活MCR。

2)危险:PLC处于STOP状态或未定义的运行特征时,编译器还对在VAR_TEMP中定义的临时变量之后的局部数据进行写访问,以计算地址。这表示下列命令序列将把PLC设置成STOP状态,或导致未定义的运行特征:

①形式参数访问

访问STRUCT、UDT、ARRAY、STRING类型的复杂FC参数的组件;访问来自具有多重背景能力的块(V2版本的块)的IN_OUT区域的STRUCT、UDT、ARRAY、STRING类型的复杂FB参数的组件;当地址高于8180.0时,访问具有多重背景能力(V2版本的块)的功能块的参数;在具有多重背景能力(V2版本的块)的功能块中访问类型为BLOCK_DB的参数,打开DB0,任何后继数据访问将CPU设置成STOP模式,T 0、C 0、FC0或FB0始终用于TIMER、COUNT-ER、BLOCK_FC和LOCK_FB。

②参数传递,调用可传递参数的功能

LAD/FBD,梯形图或FBD中的T分支和中线输出以RLO=0开始。

3)补救方法:释放上述命令,使其与MCR不相关。

①在所述语句或程序段之前,使用主控制继电器取消激活指令,取消激活主控制继电器。

②在所述语句或程序段之后,使用主控制继电器激活指令,重新激活主控制继电器。

(9)---(MCR<)主控制继电器打开 和-(MCR>)主控制继电器关闭

主控制继电器打开的指令符号为:---(MCR<)

主控制继电器关闭的指令符号为:---(MCR>)

---(MCR<)(打开主控制继电器区域)在MCR堆栈中保存RLO。---(MCR>)(关闭最后打开的MCR区域)从MCR堆栈中删除一个RLO条目。MCR嵌套堆栈为LIFO(后入先出)堆栈,且只能有8个堆栈条目(嵌套级别)。当堆栈已满时,---(MCR<)功能产生一个MCR堆栈故障(MCRF)。下列元素与MCR有关,并在打开MCR区域时,受保存在MCR堆栈中的RLO状态的影响:

1)--(#)中线输出

2)--()输出

3)--(S)置位输出

4)--(R)复位输出

5)RS复位触发器

6)SR置位触发器

7)MOVE赋值

例:

---(MCRA)梯级激活MCR功能。然后可以创建至多8个嵌套MCR区域。在此实例中,有两个MCR区域。第一个---(MCR>)(MCR关闭)梯级属于第二个---(MCR<)(MCR打开)梯级。两者之间的所有梯级都属于MCR区域2。按如下方式执行这些功能:

I0.0=“1”:将I0.4的逻辑状态分配给Q4.1。

I0.0=“0”:无论输入I0.4的逻辑状态如何,Q4.1都为0。

I0.1=“1”:当I0.3为“1”时,将Q4.0设置成“1”。

I0.1=“0”:无论I0.3的逻辑状态如何,Q4.0都保持不变。

978-7-111-46052-7-Chapter04-264.jpg

(10)---(MCRA) 主控制继电器激活和---(MCRD) 主控制继电器取消激活

主控制继电器激活的指令符号为:---(MCRA)

主控制继电器取消激活的指令符号为:---(MCRD)

---(MCRA)(激活主控制继电器)激活主控制继电器功能。在该命令后,可以使用---(MCR〈)和---(MCR〉)编程MCR区域。

---(MCRD)(取消激活主控制继电器)取消激活MCR功能。在该命令后,不能编程MCR区域。

例:

MCRA梯级激活MCR功能。MCR〈和MCR〉(输出Q4.0、Q4.1)之间的梯级按如下方式执行:

I0.0=“1”(MCR打开):当I0.3为逻辑“1”时,将Q4.0设置成“1”,并将I0.4的逻辑状态分配给Q4.1。

I0.0=“0”(MCR关闭):无论I0.3的逻辑状态如何,Q4.0保持不变,无论I0.4的逻辑状态如何,Q4.1为“0”。

在下一个梯级中,指令---(MCRD)取消激活MCR。这表示不能再使用指令对---(MCR〈)和---(MCR〉)编程更多的MCR区域。

978-7-111-46052-7-Chapter04-265.jpg

978-7-111-46052-7-Chapter04-266.jpg

(11)---(RET)返回

指令符号为:---(RET)

RET(返回)用于有条件地退出块。对于该输出,要求在前面使用一个逻辑运算

例:

当I0.0为“1”时,退出块。

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

我要反馈