西门子PLC中函数FC的使用方法

描述

来源:电气控制与PLC应用

函数和函数块作为模块化编程的重要组成部分,在PLC 用户程序中有着相当频繁的应用。两者在生成与使用的过程中都有一定的相似,且都不能单独使用。而需要赋予特定的功能,由组织块(OB)直接或者间接进行调用。

函数(FC)是用户程序中不带存储器的代码块,可以视为具有一定功能的独立子程序,可以在OB 中进行调用。其内的程序编写与在 OB 主程序中相同,用户在函数中编写程序,在其他代码块中调用该函数时将执行此程序。函数FC有两个作用:

1)作为子程序使用,即将相互独立的控制设备分成不同的FC编写,统一由OB块调用,这样就实现了对整个程序进行结构化划分,便于程序调试及修改,使整个程序的条理性和易读性增强。

2)可以在程序的不同位置多次调用同一个函数,即函数中通常带有形参,通过多次调用,并对形参赋值不同的实参,可实现对功能类似的设备统一编程和控制。

函数接口区:

每个函数都带有形参接口区,在接口区可以自定义函数的局部变量。FC 接口区的参数表中包括 Input(输入参数)、Output(输出参数)、InOut(输入/输出参数)、Temp(临时变量)、Constant(常数)、Return(返回值),每种形参类型可以定义多个变量,形参接口用于进行数据传递。本地数据包括临时数据及本地常量。函数接口区如图1所示。

•Input(输入参数):只读参数,调用函数时将用户程序的数据传递到函数中,调用的实参可以为常数或 I0.0、IB1 此类具体输入地址。

•Output(输出参数):只写参数,调用函数时将函数执行结果传递到用户程序中,调用的实参只能为 Q0.0、QB1 此类具体输出地址。

•InOut(输入/输出参数):读/写参数,接收数据后进行运算,然后将结果返回。调用的实参不能为常数,可用于函数、函数块。

•Temp(临时变量):用于存储临时中间结果的变量,不参与数据的传递,临时变量在函数调用时生效。应遵循先赋值后使用的原则。

•Constant(常数):在块中使用,且带有声明符号的常量。可用于函数、函数块和组织块。注:局部常量不显示在背景数据块中。

•Return(返回值):返回到调用块的值。

西门子

图1 函数接口区

1.无形参函数(子程序功能)

在函数的接口数据区中可以不定义形参变量,即调用程序与函数之间没有数据交换,只是运行函数中的程序,这样的函数可作为子程序调用。使用子程序可将整个控制程序进行结构化划分,清晰明了,便于设备的调试及维护。例如控制三个相互独立的控制设备,可将程序分别编写在三个子程序中,然后在主程序中分别调用各个子程序,实现对设备的控制,程序结构如图2所示。

注意:子程序中也可以带有形参,是否带有形参应根据实际应用而定。

西门子

图2 无形参函数FC调用

2.带有形参的函数

在应用中常常遇到对许多相似功能的设备进行编程。例如控制三组电机,每个电机的运行参数相同,如果分别对每一个电机编程,则除输入输出地址不同外,每个电机控制程序基本相同,重复编程的工作量比较大。使用函数可以将一个电机的控制程序作为模板,在程序中多次调用该函数,并赋值不同的参数,即可实现对多个电机的控制。注意:函数的形参只能用符号名寻址,不能用绝对地址。下面以创建的一个例子进行说明。

函数的创建

打开博途软件的项目视图,创建一个新项目。用鼠标双击项目树下的“添加新设备”,添加CPU 1215C,如图3 所示。

西门子

图3 添加PLC

单击项目视图下的“PLC_1”,继续单击“程序块”,用鼠标双击下边的“添加新块”,打开“添加新块”对话框后,单击其中的“函数”标志,FC 的默认编号为 1,默认的语言为 LAD(梯形图),单击“确定”按钮。此时返回项目树文件夹,在其“程序块”下可以看到新生成的FC1。FC1 的创建过程如图 4 所示。

西门子

图4 函数生成

在接口区可以自定义函数的参数,如图5,6所示。

西门子

图5接口参数区

西门子

图6 接口参数的定义

双击新建立的 FC,进行程序编写,如图 7 所示,此时的“输出”不是单纯意义上的输出,同时对该变量赋予了一个常开触点,因此需要在 InOut下定义该变量。(Inout既做输入又做输出,在FC中做自锁时,要把这个“输出”放在inout中。因为做自锁时,有需要读入“输出”这个参数的原因,然后形成自锁)

西门子

图7 程序编写

在定义变量后,函数(FC)中所使用的参数只以“名称”的形式出现,这些由“名称”给出的参数被称为形参。在调用块中对“名称”所赋予的具体数值或具体地址,如100、I0.0、MB1等,被称为实参。如图8所示。

西门子

图8 给形参赋值

在主程序中调用在FC 内部定义的变量时,为各个形参指定对应的实参。然后双击主程序“Main[OB1]”,将项目树下的“块_2”拖到右侧的程序区的水平“导线”上,在程序中可以对函数进行多次调用,并赋予不同的实参,由此对多个变量重复 相同操作,实现模块化编程,极大程度上简化了程序结构。如图9所示。

西门子

图9 函数子程序调用

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分