第8章编制功能(FUN)/功能块(FB)8-1第8章编制功能(FUN)/功能块(FB)FPWINPro导入8-28-1概要■什么是功能(FUN)/功能块(FB)功能/功能块,是通过对一系列的处理进行部品化并登录、使其能够完全作为一个指令使用的功用。程序(POU的类型:PRG)(POU的类型:FUNorFB)一系列的处理功能or功能块部品作为指令使用●对功能及功能块的输入和输出变量定义输入部类VAR_INPUT输出部类VAR_OUTPUT在对功能和功能块的输入和输出中,需要使用变量。如上图所示,在功能及功能块内的Header中进行了定义,但是变量的类分别按输入→VAR_INPUT输出→VAR_OUTPUT进行了定义。VAR_INPUT功能或功能块中必要的参数的输入时使用的变量。被调用的POU将变量值传送到功能或功能块(PRG除外)。VAR_INPUT是在对应于功能或功能块的Header中进行定义的。虽然可以读出输入变量的数值,但是不能写入操作。(强制输入输出除外)VAR_OUTPUT只在功能块中使用的输出变量。当PLC从PROG模式切换到RUN模式时,或者电源变为ON时,VAR_OUTPUT的初始值被设定。第8章编制功能(FUN)/功能块(FB)8-3●功能与功能块的不同功能是在程序中被调用后、进行一系列处理并将结果返回的处理。在功能中,对于输入其处理结果是一次性确定的。功能内部不占用存储区。不占用存储区2Result_1・・・Result_1=2Result_1=2Result_1=2Result_1=2程序上图是用功能编制的进行_In_Data_1+Work_1=Work_1计算的示例,但是由于功能不占用存储区,进行加法运算的Work_1每次都为“0”。即当输入数据(_In_Data_1)等于“2”时,“2”“0”“2”_In_Data_1+Work_1=Work_1每次的结果都为”2”。可以看到,由于不使用存储区,功能不能用于定时器/计数器、位置控制经过值等必须使用存储区的情况。(如果使用了定时器/计数器,会产生编译错误)此外,在功能内部也不能使用全局变量。FPWINPro导入8-4功能块虽然与功能一样进行一系列的处理,但是功能块本身具有记忆数值的存储区域。因此,对于相同的输入数值也会产生不同的结果。此外,在程序中可以多次使用同一功能块。在这种情况下,在调用各个功能块时,通过添加名称(实例,instance)加以区别。这与在程序中可以配置若干、利用附加编号来区别的定时器指令的概念相同。调用功能块的次数受到PLC的SUB指令的数量的限制。占用存储区实例(instance)2Result_・・・Result_2=8Result_2=6Result_2=4Result_2=2程序上图是一个功能块形式的、名为_In_Data_1+Work_1=Work_1的计算程序的作成示例。因为功能块占用存储区,所以每次累加计算Work_1时都能反映出前次的运算结果。因此,在输入数据(_In_Data_1)等于“2”的情况下,_In_Data_1+Work_1=Work_1“2”“0”“2”第1次第2次“2”“2”“4”“2”“4”“6”“2”“6”“8”・・・结果中可以反映出前次的运算结果第3次第4次・・・即,对于定时器/计数器、位置控制的经过值等必须使用存储区的情况,应该使用功能块。第8章编制功能(FUN)/功能块(FB)8-5■功能(FUN)/功能块(FB)的读取次数程序中读取功能和功能块的次数是由所使用的PLC的机型决定的。功能和功能块在编译后被表述为SUB(子程序)指令。即,可以使用SUB指令的次数就是读取次数的限制。●功能的情况功能内的程序Clock_Pulse_1功能块内的程序●功能块的情况即使是同一个功能块,也表述为调用次数的SUB指令。在调用功能块的情况下,生成一个SUB指令。在调用1个功能的情况下,功能块内的程序Clock_Pulse_2●主要PLC机型的子程序调用数子程序数FPΣ32K型500FP-X全系列500FP0R500FP2、FP2SH100FPWINPro导入8-68-2功能(FUN)的编制■操作步骤上图所示的是[输入数值(Data_1、Data_2、Data_3)后,返回平均值(Result_1)]的功能。编写功能时,从新创建功能(FUN)型的POU开始。Header、程序体等都与此相同地进行编辑。按照如下的步骤,编写梯形图程序(LD)。程序(POU的类型:PRG)的程序体画面1.新创建功能(FUN)型的POU。选择功能(FUN)作为POU的类型。请点击菜单栏中的图标画面将显示POU的新创建对话框。输入功能的名称。选择功能(FUN)。选择梯形图程序(LD)。选中使用EN/ENO。将功能输出的数据类型设置为INT。设置完成后,请点击按钮。●关于EN/ENO指定[使用EN/ENO]后,将生成带有EN/ENO端子的功能。EN是用于执行功能的触发器输入,而ENO是用于输出到下一个功能的触发器输出。第8章编制功能(FUN)/功能块(FB)8-7●关于输出的数据类型在功能中通过指定输出的类型,类可以定义VAR_OUTPUT的变量。就是这一部分。在上述示例中以INT型输出。变量名称指定功能的名称。2.如下所示,在Mean_Value(Function)的POUHeader中定义任意的变量。在工程文件引导器中显示出功能。FPWINPro导入8-8可以从下拉菜单中选择变量的类及数据类型。类的指定方法数据类型的指定方法3.点击程序体,再点击工具栏中的图标。点击(指令的选择)图标利用点击程序体,使菜单栏中显示出图标。第8章编制功能(FUN)/功能块(FB)8-94.显示以下的对话框。首先,由于需要编写计算3个输入值的合计的程序,选择加法运算的功能ADD。5.将[PIN(引脚)数量]设置为3,然后点击按钮。(PIN(引脚)数量在配置完程序体后也可以再修改。)配置程序体。FPWINPro导入8-10●参考PIN的数量也可以在程序体配置完后进行修改。用鼠标将右下角的部分向下拖拽。点击程序体的空白部分。拖拽到目标的PIN数量后,第8章编制功能(FUN)/功能块(FB)8-115.用鼠标点击变量框使其中的“?”处于反显状态后,打开右键菜单,点击[变量的选择]。画面将显示如下的对话框。显示出在Header中已登录的变量。在选择“_In_Data_1”的变量的状态下,点击按钮。FPWINPro导入8-126.按照同样的步骤,对剩余的输入值2也进行变量的输入。。7.在这里,请选择在输入侧作为保存从“_In_Data_1”到“_In_Data_3”的3个输入值合计的区域_Work_1。8.然后,编制计算平均值的程序块。按照与步骤4.相同的操作打开对话框,选择功能[DIV]、插入程序体。(请插入到下一个程序块)●参考功能的查找方法在知道目标功能的情况下,由于功能是按照字母顺序排列的,如果输入功能的起始字母,就可以使光标移动到接近的功能,因此可以高效率地选择目标功能。例如,需要选择上述的[DIV]时,输入起始字母“d”。(不区分大写小写字母)光标移动到以“D”开始的功能的“DELETE”。然后可以利用滚动杆查找到“DIV”。第8章编制功能(FUN)/功能块(FB)8-139.请按以下所示配置各个引脚中的变量。在功能的输出中请指定功能名称。不必在Header中定义输出变量。功能名称的变量是以INT型登录的。10.以上完成了功能的程序。FPWINPro导入8-1411.进行对象的检查。点击工具栏中的[对象检查]图标,执行检查。检查结果对话框。如果显示“0错误”,功能的编程即完成。12.读取导程序(POU类型:PRG)现在,将已编写完成的功能读取到程序中。首先,请在“新创建POU”中编制程序(程序语言LD)。输入文件(程序)名称。POU的类型设置为程序(PRG)。程序语言设置为梯形图程序(LD)。Task(任务)为Programs。输入与设置完成后,请点击按钮。第8章编制功能(FUN)/功能块(FB)8-1513.从程序(POU类型:PRG)读出功能(POU类型:FUN)。程序(POU类型:PRG)表示用标签程序(POU类型:PRG)功能(POU类型:FUN)功能(POU类型:FUN)表示用标签从程序(POU类型:PRG)读取调用功能(POU类型:FUN)。在工程文件引导器中双击程序(POU类型:PRG),或者单击程序(POU类型:PRG)标签,显示出程序体。单击程序(POU类型:PRG)标签双击工程文件引导器程序体单击。请在程序体的适当位置通过双击工程文件引导器显示图标使程序体被显示的情况FPWINPro导入8-16点击工具栏中的[指令选择]图标。画面将显示功能选择对话框,在其中选择刚才作成的功能。库:选择工程(Project)作成的功能被显示。选择完成后,点击按钮,将功能粘贴到程序块1中适当的位置。超出行距也没有问题。自动增大行间距。请移动鼠标,确定插入的位置。如果决定了放置位置,请单击左键确定。画面显示变为如下内容。第8章编制功能(FUN)/功能块(FB)8-1714.如下所示,在程序的POUHeader中定义任意的变量。15.配置输入用的变量和输出用的变量。左键单击变量框,在的状态下,请从右键单击菜单中选择[变量选择]。右键单击点击此按钮,使其被插入。FPWINPro导入8-1816.以下同样地插入其余的变量。17.工程文件全部进行编译。至此,向程序(POU类型:PRG)的功能(POU类型:FUN)插入结束。点击工具栏中的全部编译图标,执行编译。全部编译的结果显示对话框如果显示“0错误”,则工程文件的编程工作结束。第8章编制功能(FUN)/功能块(FB)8-19■动作确认1.将工程文件下载。2.确认功能动作。请确认是否处于监控。向Data_1、Data_2、Data_3中输入数值。向Data_1中输入数值时,将光标移动到Data_1上,然后双击。画面将显示数据输入对话框,请在其中输入数值(上述示例为“100”)。点击按钮确定。按同样的步骤,分别也向Data_2とData_3输入数值。FPWINPro导入8-20将执行条件置ON。如上图所示,Data_1~Data_3的合计的平均值通过Result_1被返回。向Signal_1中输入数值时,将光标移动到Signal_1上,点击按钮。然后双击。●备注通过上图可以看到,即使是使用2个相同的功能,对于不同的输入,会得到不同的结果。在这种在内部不具有存储区、对输入进行计算并输出结果的情况下,应该使用功能。虽然也可以使用功能块,但是会消耗SUB指令,并且使程序步数增加。第8章编制功能(FUN)/功能块(FB)8-218-3功能块(FB)的编制■操作步骤功能块的编制,从新创建功能块(FB)型的POU开始。Header、程序体等,都进行同样的编辑。1.新创建功能块(FB)型的POU。对于如上图所示[Signal_1的信号变为ON时,根据由_Set_Value设定的时间(单位0.1秒)间隔、使Out_Signal进行ON/OFF交替]的功能块,可以按照以下的步骤,利用体型图程序作成。程序(POU类型:PRG)的程序体画面选择功能块(FB)作为POU的类型。请点击菜单栏中的图标。画面将显示POU的创建对话框。输入功能块名称。选择功能块(FB)。选择梯形图程序(LD)。选中使用EN/ENO。设置完成后,请点击按钮。FPWINPro导入8-222.按以下内容在Clock_Pulse(FB)的POUHeader中定义任意的变量。在工程文件引导器中显示出功能块。3.输入程序。如下图,在已经输入了触点的状态下,点击工具栏中的(指令选择按钮)。粘贴FB后,需要输入实例名。选择0.1秒定时器的TM_100MS_FB。粘贴到程序体。按插入按钮后第8章编制功能(FUN)/功能块(FB)8-23输入实例名。此处输入TM_1。实例名输入结束后,会相应显示出变量登录对话框。不做改动,直接点击定义按钮。在Header中也将刚才