您现在的位置是:首页 > PLC技术 > PLC技术

施耐德Unity Pro的用户功能块( DFB)

来源:艾特贸易2017-06-05

简介(1) 主要内容 用户功能块 (DFB) 是用户为了满足应用程序的特定需要而编写的程序功能块,用户逻辑被封装在一个功能块当中,能够多次重用,以满足应用的特殊要求。 用户功能块 (DFB

    (1)主要内容    用户功能块(DFB)是用户为了满足应用程序的特定需要而编写的程序功能块,用户逻辑被封装在一个功能块当中,能够多次重用,以满足应用的特殊要求。    用户功能块(DFB)可以用来对应用程序进行组织和优化。当需要在应用程序中多次重复一个程序段,或者设定一个标准的程序操作时,就可以使用DFB    用户功能块主要包括以下元素:    ●用梯形图(LD)、指令表(IL)、结构化文本(ST)、功能块图(FBD)编写的代码段;    ●输入/输出参数;    ●公共内部变量或者私有内部变量。    通过对功能块进行的相关操作,就可以让一个或多个应用程序共享。    在应用程序中使用DFB功能块,具有以下优点:    ●结构化应用程序,提高程序的可读性;    ●简化程序的设计和输入;    ●所有由功能块操作的变量都要在它的接口进行识别,方便应用程序的调试;    ●减少生成的代码的数量。与DFB相对应的代码只加载一次,虽然在程序中会多次调用,    程序只生成与实例相对应的数据;    ●保护技术秘密。    与子程序相比,使用DFB具有以下特点:    ●更容易地设置处理参数;    ●使用针对DFB的内部变量,不受应用程序影响;    ●可独立于应用程序对其进行测试操作。    另外,LDFBD语言提供了一个DFB的图形视窗,便于程序设计和调试。DFB类型结构如图3-80所示。    功能块包含以下元素:    ●名称:DFB类型的名称(最多32个字符),该名称在整个库内必须是唯一的,可以在    项目设置语言扩展选项卡的标识符区域内选择扩展的字符;    ●输入:输入参数(不包括输入/输出参数);    ●输出:输出参数(不包括输入/输出参数);    ●输入/输出:输入/输出参数;    ●公共变量:可以通过应用程序访问的内部变量;    ●私有变量:嵌入于内部的变量或者DFB,不能通过应用程序访问;    ●代码段:用LDILSTFBD编写的DFB代码段;    ●注释:最多为1024个字符。不允许使用格式化字符(回车、Tab键等);    对于每一种DFB,都可以通过对话框来打开一个描述文件,其中包括DFB的大小、参数和变量的数量、版本号、上一次修改的日期和保护级别等。    (2)用户功能块(DFB)的创建    用户功能块(DFB)的实现过程主要包括以下3个环节:    ●创建DFB类型;    ●每次在应用程序中使用DFB时,都要创建一个此功能块的副本,称为一个实例;    ●在应用程序中使用DFB实例;    创建DFB类型,使用DFB编辑器对组成DFB的所有元素进行定义和编码,包括:    ●描述功能块:名称、类型(DFB)、激活诊断、注释;    ●功能块的结构:参数、变量、代码段。    DFB的创建步骤:打开Unity Pro应用程序,创建新的DFB类型,编辑新创建的DFB类型的属性,编辑DFB的参数,在一个或多个段中输入DFB代码,分析DFB类型并使其有效,调试DFB类型,如果需要可以导出DFB用于其他应用程序,使用DFB,如图3-81所示。
DFB类型结构
    3-80    DFB类型结构
DFB的创建步骤
    3-81    DFB的创建步骤    (3)用户功能块(DFB)的内部数据    DFB的内部数据主要有两种:    ●参数:输入、输出、输入/输出;    ●公共或者私有变量。    DFB的内部数据必须使用符号进行定义,不能使用地址进行定义。    (4)用户功能块(DFB)的使用规则    设计人员编写DFB功能块模型(称为“DFB类型”);用户创建这个模块类型的数据映像(称为“实例”),并输入各个功能块实例的参数;设计人员和用户之间可将DFB导入/导出。    DFB编码在CPU中只装载一次。DFB可以被保护。DFB既可以被创建它的应用程序使用,也可以放在功能块库当中,被所有的应用程序使用。    在所有语言包括指令表(IL)、结构化文本(ST)、梯形图(LD)、功能块图(FBD)及应用程序的所有任务(代码段、子程序等)都可以使用DFB实例,除了事件任务和SFC程序的转换,在使用DFB时,不管采用什么语言,都必须遵守如下规则:    ①不必连接所有输入、输入/输出或者输出参数,但是下面参数一定要赋值:    ●泛型数据类型的输入参数(ANY_INTANY_ARRAY等);    ●输入/输出参数;    ●除了数组,泛型数据类型的输出参数(ANY_INTANY_REAL等)。    ②未连接的输入参数会保持先前调用的数值,如果相关的功能块从未被调用过,那么它们会保持定义的初始化数值。    ③所有分配给输入、输出、输入/输出参数的对象都必须与创建DFB类型时所定义的类型相同。例如,如果输入参数“speed”定义了INT类型,那么就不能把它赋给DINTREAL类型的数据。唯一的例外是用于输入和输出参数(不是输入/输出参数)的BOOLEBOOL类型,它们可以混用。    例如,输入参数“Validation”可以定义为BOOL类型,并与一个EBOOL类型的内部字% Mi相关联。但是,在DFB类型的内部代码中,输入参数实际上有BOOL类型的属性,它不能进行边沿处理。    在梯形图语言中有两种调用DFB功能块的方式:    ●在一个操作功能块内调用文本,该功能块中参数语法和约束条件应与结构化文本语言一致;    ●通过图形调用。    功能块的输入可以被连到或者分配一个数值、对象或者表达式。不论在哪种情况下,外部元素的类型(数值、表达式的运算结果等)都必须与输入参数一致。    DFB功能块必须至少有一个与之相连的布尔输入和输出,可以使用EN输入参数和ENO输出参数来实现。    对于ANY_ARRAY类型的输入、泛型数据类型的输出及DFB功能块的输入/输出,必须对其进行连接或赋值操作。    在结构化文本中,用户功能块通过调用一个DFB来实现,DFB实例的名称后面带有一个参数列表。参数会在括号中列出,彼此之间用逗号分隔。    DFB调用有以下2种类型:    ●一个形式调用,其中参数是赋值(参数=数值)。在这种情况下,参数在列表中输入的顺序是无关紧要的。EN输入参数和ENO输出参数可认用作控制功能块的执行;    ●一个非形式调用,其中参数是数值(表达式、对象或者立即值)。在这种情况下,参数在列表中输入的顺序必须符合DFB输入参数的顺序,包括未赋值的输入,即参数为空。不能使用ENENO参数。

    在指令表中,用户功能块通过CAL指令调用,该指令后面带可用作操作数的DFB实例名称,以及一个可选的参数列表。参数列表置于括号中,参数间用逗号分隔。    在指令表中,有3种调用DFB的方式:    ●指令CAL DFB_Name后面带有一个赋值的参数列表(参数=数值)。在这种情况下,参数在列表中输入的顺序无关紧要。EN输入参数可以用来控制功能块的执行。    ●指令CAL DFB_Name后面带有一个参数列表,参数为数值(表达式、对象或者立即值)。在这种情况下,参数在列表中输入的顺序必须符合DFB输入参数的顺序,其中包括未赋值的输入,即参数为空。不能使用ENENO参数。    ●指令CAL DFB_Name后面不带有参数列表。在这种情况下,在这个指令之前必须通过一个寄存器对输入参数进行赋值。首先把数值载入,然后赋给输入参数。参数( LDIST)赋值的顺序无关紧要。但是,在执行CAL命令之前,必须对所有需要的输入参数进行赋值。不能使用ENENO参数。
    功能与下列指令表相同:

    FBD(功能块图)语言中,用户功能块和梯形图语言中的表示方式相同,以图形的方式被调用。用户功能块的输入可以通过一个数值、立即值对象或者表达式进行连接和赋值。无论是哪种情况,外部元素的类型都必须与输入参数的类型一致。    DFB的一个输入只能分配一个对象(链接到具有同样变量的另外一个功能块)。但是,一个输出可以与多个对象相连接。DFB功能块必须至少有一个与之相连的布尔输入和输出,可以使用EN输入参数和ENO输出参数来实现。    对于ANY_ARRAY类型的输入、泛型数据类型的输出及DFB功能块的输入/输出,必须对其连接或者赋值操作。DFB的使用步骤如图3-82所示。
DFB的使用步骤
    3-82    DFB的使用步骤    (5)诊断DFB    诊断DFB是用于应用程序诊断的工具,用于PLC程序中的过程控制。内置诊断可以直接在PLC层次追溯错误的起源。创建用户自己的诊断DFB(QuantumPremium)    Schneider预定义的诊断DFB列表如下:
    诊断DFB的原理如图3-83所示。    报警“登记”:    ●错误登记指令REGDFB()。当错误发生时,把带时间戳的记录,写入到诊断缓存区中:    ●同一个DFB可以登记多个记录(最多4个);    ●只在Diagnostic DFB中使用。报警记录注销:    ●“注销记录指令”DEREG(),更新与错误有关的日期和时间缓冲区;    ●当所有观察器都得到确认信息时,消息从诊断缓冲区中被删除;    ●只在Diagnostic DFB内部使用。

诊断DFB的原理
    3-83    诊断DFB的原理    过程是带有多个输出的功能,没有内部状态。过程与基本功能的唯一区别是:过程可以有多个输出,且支持VAR_IN_OUT数据类型的变量。过程不返回值,是对IEC 61131-3标准的补充,且必须专门启用。