文档库 最新最全的文档下载
当前位置:文档库 › S7+多重背景数据块

S7+多重背景数据块

S7+多重背景数据块
S7+多重背景数据块

在SIEMENS S7-300/400系列PLC中有多种程序块,如下图(在管理器右边的空白区域点击右键),主要有:组织块(OB),功能块(FB),功能(FC),数据块(DB)及系统功能(SFC)和系统功能块(SFB)等。

注:快捷菜单中的其它两项:数据类型和变量表。数据类型(UDT)用于指定程序中数据元素的大小与格式;变量表(VAT)用来在程序调试和运行时修改和监视变量的内容(在地址栏中输入地址后,符号栏中会自动显示在符号表中定义的符号)。

这几种程序块的功能简要说明如下:

说明:

调用程序块:OB,FB,FC(可以调用除OB块外的其它程序块);

被调用程序块:FB,FC,SFB,SFC。

1、组织块OB

OB由系统自动调用,并执行用户在OB块中编写的程序,所以OB的基本作用是调用用户程序。

在OB块中编写程序的最大容量,S7-300是16KB,S7-400是64KB。

除主程序循环OB1外,其它OB均是由事件触发的中断。

2、函数FC

函数FC有两个作用:(1)作为子程序用;(2)作为函数用,函数中通常带形参。

函数中程序的最大容量,S7-300是16KB,S7-400是64KB。

FC的形参通常也称为接口区,参数类型分为输入参数,输出参数,输入/输出参数和临时数据区。

在编写函数FC的输出参数时,应避免没有直接输出(否则,可能输出一个随机值,影响程序的判断)。可以在函数的开始,将字输出参数清0,位输出参数复位。

3、函数块FB

FB与FC相比,FB每次调用都必须分配一个背景数据块,用来存储接口数据区(TEMP类型除外)和运算的中间数据。其它程序可以直接使用背景数据区中的数据。

FB中程序的最大容量,S7-300是16KB,S7-400是64KB。

FB的接口区比FC多了一个静态数据区(STAT),用来存储中间变量。

程序调用FB时,形参不像FC那样必须赋值,可以通过背景数据块直接赋值。

由于FB带有背景数据块,输出参数不会输出随机值,可以不在FB中编写初始化程序。

4、数据块DB

DB用来存储用户数据及程序的中间变量,为全局变量。DB的最大容量,S7-300为32KB,S7-400为64KB。

DB可分为共享数据块(Share DB)、背景数据块(Instance DB)和用户自定义数据(UDT)类型的数据块。

★共享数据块可作为所有程序使用的全局变量,在CPU允许的条件下,一个程序可创建任意多个DB,每个DB的最大容量为64KB。

默认条件下,共享数据块为掉电保持,在其属性菜单中选中“Non Retain”可以更改为掉电数据丢失。

如CPU中无足够的内部存储空间保存数据,可将指定的数据保存到共享数据块。存储在共享数据块中的数据可被其它任意一个块调用(全局变量)。这一点和背景数据块不同,背景数据块只能被指定的功能块(FB)使用,保存在背景数据块中的数据只能在这个功能块中有效。

★背景数据块与FB和SFB关联,也是全局变量。背景数据块和共享数据块相比,只保存与FB或SFB接口数据区(Temp)相关的数据。背景数据块中有一种比较特殊的数据块,称为多重背景数据块。有关多重背景数据块的用法和使用注意事项请参看《怎样使用多重背景数据块》。

★基于UDT的数据块为全局变量,提供一个固定格式的数据结构,便于用户使用。

5、系统函数(SFC)和系统函数块(SFB)

SFC和SFB集成在CPU中,相当于系统提供的可供用户程序调用的FC或FB,实现与CPU 系统相关的一些功能,如读写CPU时钟等功能。调用SFB需要背景数据块。

多重数据块是数据块的一种特殊形式,如在OB1中调用FB10,在FB10中又调用FB1和FB2,则只要FB10的背景数据块选择为多重背景数据块就可以了,FB1和FB2不需要建立背景数据块,其接口参数都保存在FB10的多重背景数据块中。建立多重背景数据块的方法是:在建立数据块只要在数据类型选项中选择“实例的DB”就可以了,见下例。

下面通过一例简单介绍一下多重背景数据块使用的一些注意事项和方法。

例如,PLC控制两台电机,且控制两台电机的接口参数均相同。一般的作法,我们可以编写功能块FB1控制两台电机,当控制不同的电机时,分别使用不同的背景数据块就可以控制不同的电机了(如第一台电机的控制参数保存在DB1中,第二台电机的控制参数保存在DB2中,我们可以在控制第一台电机调用FB1时以DB1为背景数据就可以了,第二台同样以DB2为背景数据块)。这样就需要使用两个背景数据,如果控制的电机台数更多,则会使用更多的数据块。使用多重背景数据块就是为了减少数据块的数量。

像这种情况,我们就可以利用多重背景数据块来减少数据块的使用量。拿本例来说,我们就可以在OB1中调用FB10,再在FB10中分别调用(每台电机各调用一次)FB1来控制两台电机的运转。对于每次调用,FB1都将它的数据存储在FB1的背景数据块DB1中。这样就无需再为FB1分配数据块,所有的功能块都指向FB10的数据块DB10。原理图如下:

首先,我们需要先后插入一个功能块FB10和数据块DB10,DB10就为FB10的多重背景多重数据块。如下图:

其次,需要在FB10中指定其所包含的背景数据块。方法如下:在FB10局部变量定义窗口中,在“STAT”变量区中(必须在此变量区中)为每台电机的控制取好名称后,数据类型

选择FB ,确认后,再把改为1,即功能块FB1。如果你在变量表中已经定义了FB1的符号,则会自动出现其符号名。地址一般由CPU根据FB1的接口参数数量自动计算得到,采用默认值就可以了。

因为控制两台电机,所以需要在STAT中定义两个这样的变量。结果如下:

经过以上步骤,FB的背景数据块DB10中就完全包含了1#和2#电机所需的数据,如下图,其中地址2.0~8.0是第一台电机的接口区控制参数,10.0~16.0是第二台电机接口区控制参数。

这时,在FB10的指令列表中“多重实例”中就会出现已经添加的两个局部背景,如下图。

在程序中就可以分别调用这两个局部背景控制1号和2号电机了。程序如下:

这样,就可以在OB1中通过调用OB10就可以分别控制1#和2#电机了。如下图:

多重背景数据块的使用(图)

先建立一个FB10。完成内容X*Y=Z 定义形式参数 IN:X,Y OUT:Z 保存 然后在建立FB20,形式参数STAT里定义 NAME:MUL Data Type:FB10 程序中写以反复的写call MUL。保存 OB1中写CALL FB20,DB10 DB10为多重背景数据块 注意一点,多重背景调用等同于FC的调用,call MUL下的参数填写一定不能空着,必须有实际地址,否则用DB10的数据程序会混乱。 以下详细讲解西门子多重背景数据块的使用。 1、在SIMATIC Manager 中,打开你希望生成多重背景的FB。在静态变量定义部分,输入多重背景的名字,数据类型为FB 或SFB。 图1 2、在程序中调用多重背景,可以在多重背景中的目录中选择托拽它到NETWORK 中,也可以用CALL 指令调用它。

图2 在STEP 7 V5.4 SP2 中请注意: 如果在LAD/FBD编辑器的目录视图中多重背景未被列出,推荐在静态变量声明中先插入一个功能块,然后再删除它。这样多重背景就再次可以被选择。 3、现在设置程序块的输入和输出并保存。就可以在程序(例如OB1)中使用多重背景来调用FB。创建一个背景数据块以供监控。 注意: 当生成多重背景时,如其在FB 中作为一个多重背景被调用,注意要首先生成它,然后再指定一个多重背景调用。如果不遵从这个顺序,程序中将会出现不一致的情况,这种不一致的情况也有可能在修改多重背景后出现。 4、一旦修改过了多重背景,并打开调用它的功能块。当功能块被打开时,会出现一个消息显示在FB 接口声明中有一个UDT 或本地标签的被修改,并显示在功能块调用中至少有一个时间标签冲突。确认此信息,修改过的背景调用在LAD/STL/FBD 编辑器中将会以亮红色显示。 为了更新功能块调用,右击功能块,然后在弹出菜单中选择“Update Block Call...”。 图3 5、在后续的对话框中,点击OK 来执行接口更新。 图4 在STEP 7 V5.3中的注意事项: 当尝试通过“File > Check and Update Accesses”来更新程序块调用时,STEP7 V5.3 不能发现变量间的唯一分配,调用还是保持红颜色,也无法通过“Edit > Call > Update”改正调用错误。更新调用的唯一办法是删除调用,在声明中更新接口,然后再以多重背景方式调用功能块。如果已经删除了FB 接口中的变量,应该通过“Edit > Call > Update”来改正所有的多重背景调用,而不需使用前面的“Check and Update Accesses”功能。一旦已经更新了这些多重背景,就又可以与平时一样使用“Check and Update Accesses”功能了。 6、推荐在更新功能块调用后进行一致性检查。在SIMATIC Manager 中,右击S7 program 文件夹,选择“Check block consistency...”功能,系统会显示S7程序的结构。 通过工具栏中的第二个按钮或者“Program > Compile All”功能编译程序。在编译后,STEP 7程序一致性将统一。

(完整版)项目二:功能块FB、功能FC和背景数据库DB的创建和使用

用户在变量声明表中创建本块中专用的变量(即局域变量)。局域变量分为IN(输入变量)、OUT(输出变量)、IN-OUT(输入/输出变量)、TEMP(临时变量)和STAT (静态变量)五种类型。 ?·IN(输入变量):为调用它的块提供的输入参数。 ?·OUT(输出变量):返回给调用它的块的输出参数。 ?·IN-OUT(输入-输出变量):初值由调用它的块提供,被 子程序修改后返回给调用它的块。 ?·TEMP(临时变量):暂时保存在局域数据区中的变量。 只是在执行块时使用临时变量,执行完后,在主程序中不能再使用该变量。 ?·STAT(静态变量):在功能块的背景数据块中使用。关 闭功能块后,其静态数据保持不变。功能( FC)没有静态变量。 IN(输入变量)、OUT(输出变量)和IN-OUT(输入/输出变量)属于程序块的形式参数。TEMP(临时变量)属于程序块的局域变量,只在它所在的块中有效。STAT(静态变量)只在FB程序块中存在,也属于程序块的局域变量,在它所在的块中有效,而且PLC 掉电后STAT变量仍然保持。 每一种类型的变量都包括变量名、变量类型和变量注释。变量声明表的左边给出了该变量表的总体结构,点击某一变量类型,例如“OUT”,在表的右边将显示出该类型局域变量的详细情况。块中的局域变量名必须以字母开始,只能由英语字母、数字、下划线组成,,但是在符号表中定义的共享数据的符号名可以使用其他字符。 在程序中,操作系统在局域变量前面自动加上“#”号。如果在块中只使用局域变量,不使用绝对地址或全局符号,易于形成通用子程序块实现结构化编程,并且易于将程序块移植到别的项目中去。 变量声明后在局域数据块中为临时变量( TEMP)保存有效的存储空间。对于功能块FB,还要为配合使用背景数据块为静态变量(STAT)保存空间。通过设置IN(输入)、OUT(输出)和IN-OUT(输入/输出)类型变量,声明块调用软件接口(即形式参数)。 用户在功能块中声明变量时,除了临时变量外,它们将自动出现在功能块对应的背景数据块中。 在变量声明表中赋值时,不需要指定存储器地址;根据各变量的数据类型,程序编辑器自动地为所有局域变量指定存储器地址。

西门子 PLC中OB、FC、FB、SFC、SFB中功能块

西门子 PLC中OB、FC、FB、SFC、SFB中功能块使用概述 (2013-12-05 16:13:52) S7-300/400PLC程序采用结构化程序,把程序分成多个模块,各模块完成相应的功能。结合起来就能实现一个复杂的控制系统。就像高级语言一样,用子程序实现特定的功能,再通过主程序调用各子程序,从而能实现复杂的程序。 在S7-300/400PLC中写在OB1模块里和程序就是主程序,子程序写在功能(FC),功能块(FB)。 FC运行是产生临时变量执行结束后数据就丢失-----不具有储存功能 FB运行时需要调用各种参数,于是就产生了背景数据块DB。例如用FB 41来作PID控制,则它的PID控制参数就要存在DB里面。FB具有储存功能系统功能块(SFB)和系统功能(SFC)也是相当于子程序,只不过SFB 和SFC是集成在S7 CPU中的功能块,用户能直接调用不需自已写程序。 SFC与FC不具有储存功能,FB和SFB具有储存功能。 OB模块相当于子程序,负责调用其他模块。如果程序简单只需要OB就可以实现。 用西门子PLC编程时,可以用到功能块FB和功能FC(FB、FC都是组织块)资料上说FB与FC都可以作为用户编写的子程序,但是我不明白这两个组织块之间到底有什么区别阿?在应用上到底有什么不同之处吗? FB--功能块,带背景数据块 FC--功能,相当于函数 他们之间的主要区别是:FC使用的是共享数据块,FB使用的是背景数据块 举个例子,如果您要对3个参数相同的电机进行控制,那么只需要使用FB编程外加3个背景数据块就可以了,但是,如果您使用FC,那么您需要不断的修改共享数据块,否则会导致数据丢失。FB确保了3个电机的参数互不干扰。 FB,FC本质都是一样的,都相当于子程序,可以被其他程序调用(也可以调用其他子程序)。他们的最大区别是,FB与DB配合使用,DB中保存着F B使用的数据,即使FB退出后也会一直保留。FC就没有一个永久的数据块来存放数据,只在运行期间会被分配一个临时的数据区。 在实际编程中,是使用FB还是FC,要看实际的需要决定。 FB与FC没有太大的差别,FB带有背景数据块,而FC没有。所以FB 带上不同的数据块,就可以带上不同的参数值。这样就可以用同一FB和不同的背景数据块,被多个对象调用。 FC和FB像C中的函数,只不过FB可以生成静态变量,在下次函数调用

编号22--多重背景数据块的项目举例

多重背景数据块的项目举例 下面以发动机控制系统的用户程序为例,介绍生成和调用FB多重背景数据块的方法。 用STEP7的新项目创建一个名为“多重背景实例”的项目,项目中创建组织块OB1是主程序,FB1电机4,FB2电机3,FB3电机2,UDT1电机1控制。如图: 首先:明白功能块的调用关系,此实例关系图如下: 1、在项目右侧单击右键新建数据块DB1,在生成时如下图,选择instance DB 对应是FB1,下图红笔处。

2、FB2、FB3和UDT1没有自己的背景数据块,创建好FB2和FB3和UDT1后分别定义FB2和FB3的输入输出管脚。如创建FB3后,打FB3。 如上图红圈处,定义了三个输入管脚,分别是 DIANJI1shoudong电机1手动启动,DIANJI1zidong电机1自动,DIANJI1sudu电机1速度。同理定义FB2的2个输出管脚和FB3的输入输出管脚及其UDT1的输入输出管脚。 3、此时FB1,FB2,FB3,UDT1都已经定义好,但是只是建立了DB1

作为FB1的背景数据块,这时我们要把FB2,FB3嵌套到FB1里面。使FB2和FB3定义的管脚建立在DB1里面。具体如下: ①打开FB1数据块,在FB1管脚STAT定义区,添加name:q_control,数据类型:选FB,改成FB2.这样就把FB2嵌套在FB1中。如图 同理添加另外两个,其中调用了FB2两次,调用了FB3一次。保存后,打开DB1数据块。如图: 问题1:为什么在STAT区域定义?因为FB与FC相比多了一个STAT 静态背景数据区,保存在DB1中。不能直接修改DB1,DB1的数据生成由FB1的管脚定义。 问题2:DB1数据块的地址生成规律,如上图红笔部分。地址是根据

基于图像分块的背景模型构建方法

第29卷第1期杨广林等:基于图像分块的背景模型构建方法3l 我们尝试将图像分块,利用图像块的特征建立背景模型.下面就针对图像块给出背景建模方法. 为了简化讨论,假设图像是灰度图像.设,c。(菇,Y)为一个m×m像素的图像块,(戈,Y)表示该图像块左上角的坐标.在2×2的情况下,图像块中前景像素的分布组合有以下5种: (a)(b)(c)(d)(e) (a)完全背景;(b)有1个前景像素;(c)有2个前景像素; (d)有3个前景像素;(e)完全前景 图12X2图像块的5种情况 Fig.1Thefiveinstancesof2×2imageblock 3.1图像块特征的选取 将图像块设定为相邻像素的方形块,以2×2的图像块为例,图1给出了前景在图像块的各种分布情况的理想状态.一般地讲,图像块越大,要处理的块数就越少,效率就越高,但对局部目标敏感度就越小,目标的精确度就会变差,因为前景所占比例小的图像块的个数会增加,例如图1中(b)和(c)的情形.随着图像的增大,图像块的特征选取变得复杂.综合考虑识别目标的敏感性和识别目标的精确性以及处理问题的效率,一般选择m=2比较合适.可以有多种方式引入特征,最简单的情形是任意选择图像块中的一个像素为代表,或以图像块的均值为特征.以下我们提出几种提取特征的方案. (1)图像块中心点,即A=中心点像素; (2)选取若干点的组合作为图像块的代表点, 例如可选择图像块的对角线上的点; (3)图像块均值,即A=(X,,+x。2+…+k)/m2; (4)图像块的行均值或图像块的列均值; Al=Xll+X12+…+X1。。 A2=X2l+Xz2+…+】,2m A。=X。l+X,以+…+X。。 (5)图像块的幅度值,即A=maxXi—minXii; (6)图像块的行幅度值或列幅度值. 由于所有特征都是图像块中像素的线性组合,因此当像素值X。服从正态分布时,所有特征A作为原像素的线性运算的结果,也服从正态分布. 若A=√。X,其中X是由若干个像素组成的向量;l,为与x同维数的向量,则有: A—N(v"it,t,1Vv)(3)图像块中的像素点值的变化能够反映到特征值的变化上,这样就可以对特征A(而不是对像素值)建立背景模型,以此来判断图像块(而不是判断像素)是背景还是目标.例如,可以对特征A使用w4方法,求在一个训练周期内特征的最大值、最小值和连续两帧的最大差,利用不等式来判断该图像块是背景图像块还是前景图像块.由于特征也服从Gauss分布,所以也可以对特征A建立单Gauss背景模型.下面针对从图像块中选取的几个特征A,建立分块的混合Gauss背景模型. 3.2基于图像块特征的自适应的高斯混合模型在3.1节给出的特征中,选择其中的一个或几个特征A,,A:,…,A,构成特征向量,令A={A。,A:,…,A。}. 采用文[4]给出的混合Gauss分布的形式和参数更新方法.选择一个时间周期{Ai,.一,A,},给出/l,具有K个分量的高斯混合密度(GMM): K p(a;)=∑p(A。l∞i,It¨,U“)Jp((£Ji) iil(4) X、 =∑%。p(A。№,tt沁,U如) 其中 p(AI,p“,Ui.。): (5)P(∞i)或加。。为第i个分量在总体分布中所占的比例,也称为第i个分量权值. 基于像素间相互独立的假设,可以得出特征之间也是相互独立的.为了简化计算,可以进一步假设他们具有同样的方差,因而协方差矩阵可以简化为U“=盯2。I,其中J为单位阵.这种假设可以避免复杂计算引起误差加大.关系式(4)说明了每一图像块的特征向量/土的当前观察值的概率分布可由一个高斯混合函数所刻画,也就是说图像块的特征向量的某种状态可由混合模型的某个分量来描述.基于前面的假设,可利用在线K均值近似算法对此高斯混合模型进行操作.所谓的在线K均值近似算法即为:从前向后将新的图像块的特征向量的值与现存的K个高斯分布进行匹配,如果一个特征向量的值落在某个分布的标准方差的某一倍数范围内,就认为匹配成功,即如果IA。一肛小f≤r盯叫,则认为匹配成功.实验表明对于2X2的图像块,丁取4比较合适. 如果当前的特征向量的值不能匹配K个分布中

多重背景数据块

多重数据块是数据块的一种特殊形式,如在OB1中调用FB10,在FB10中又调用FB1和FB2,则只要FB10的背景数据块选择为多重背景数据块就可以了,FB1和FB2不需要建立背景数据块,其接口参数都保存在FB10的多重背景数据块中。建立多重背景数据块的方法是:在建立数据块只要在数据类型选项中选择“实例的DB”就可以了,见下例。 下面通过一例简单介绍一下多重背景数据块使用的一些注意事项和方法。 例如,PLC控制两台电机,且控制两台电机的接口参数均相同。一般的作法,我们可以编写功能块FB1控制两台电机,当控制不同的电机时,分别使用不同的背景数据块就可以控制不同的电机了(如第一台电机的控制参数保存在DB1中,第二台电机的控制参数保存在DB2中,我们可以在控制第一台电机调用FB1时以DB1为背景数据就可以了,第二台同样以DB2为背景数据块)。这样就需要使用两个背景数据,如果控制的电机台数更多,则会使用更多的数据块。使用多重背景数据块就是为了减少数据块的数量。 像这种情况,我们就可以利用多重背景数据块来减少数据块的使用量。拿本例来说,我们就可以在OB1中调用FB10,再在FB10中分别调用(每台电机各调用一次)FB1来控制两台电机的运转。对于每次调用,FB1都将它的数据存储在FB1的背景数据块DB1中。这样就无需再为FB1分配数据块,所有的功能块都指向FB10的数据块DB10。原理图如下: 首先,我们需要先后插入一个功能块FB10和数据块DB10,DB10就为FB10的多重背景多重数据块。如下图:

其次,需要在FB10中指定其所包含的背景数据块。方法如下:在FB10局部变量定义窗口中,在“STAT”变量区中(必须在此变量区中)为每台电机的控制取好名称后,数据类型选择FB ,确认后,再把改为1,即功能块FB1。如果你在变量表中已经定义了FB1的符号,则会自动出现其符号名。地址一般由CPU根据FB1的接口参数数量自动计算得到,采用默认值就可以了。 因为控制两台电机,所以需要在STAT中定义两个这样的变量。结果如下:

多重背景数据块的使用

多重背景数据块的使用 当功能块FB1在组织块中被调用时,使用了与FB1相关联的背景数据块。这样FB1有几次调用,就必须配套相应数量的背景数据块。当FB1的调用次数较多时,就会占用更多的数据块。使用多重背景数据块可以有效地减少数据块的数量,其编程思路是创建一个比FB1级别更高的功能块,如FB10,对于FB1的每一次调用,都将数据存储在FB10的背景数据块中。这样就不需要为FB1分配任何背景数据块。 下面以发动机组控制系统为例,介绍如何编辑和使用多重背景数据块。 例发动机组控制系统设计——使用多重背景 设某发动机组由1台汽油发动机和1台柴油发动机组成,现要求用PLC控制发动机组,使各台发动机的转速稳定在设定的速度上,并控制散热风扇的启动和延时关闭。每台发动机均设置一个启动按钮和一个停止按钮。 项目的编程步骤如下: (1)创建S7项目。使用菜单“文件” “新建工程”向导创建发动机组控制系统的S7项目,并命名为“多重背景”。CPU选择CPU 315-2DP,项目包含组织 块OB1。 (2)硬件配置。在“多重背景”项目打开“SIMATIC 300(1)”文件夹,打开硬件配置窗口,并按图1完成硬件配置。 图1 硬件配置 (3)编辑如图2所示的符号表。

图2 符号表 (4)规划程序结构。程序结构规划如图3所示。FB10为上层功能块,它把FB1作为其“局部实例”,通过二次调用本地实例,分别实现对汽油机和柴油机的控 制。这种调用不占用数据块DB1和DB2,它将每次调用(对于每个调用实例) 的数据存储到体系的上层功能块FB10的背景数据块DB10中。 图3 程序结构 (5)编辑功能(FC)。FC1用来实现发动机(汽油机或柴油机)的风扇控制,按照控制要求,当发动机启动时,风扇应立即启动;当发动机停止后,风扇应延

S7+多重背景数据块

在SIEMENS S7-300/400系列PLC中有多种程序块,如下图(在管理器右边的空白区域点击右键),主要有:组织块(OB),功能块(FB),功能(FC),数据块(DB)及系统功能(SFC)和系统功能块(SFB)等。 注:快捷菜单中的其它两项:数据类型和变量表。数据类型(UDT)用于指定程序中数据元素的大小与格式;变量表(VAT)用来在程序调试和运行时修改和监视变量的内容(在地址栏中输入地址后,符号栏中会自动显示在符号表中定义的符号)。 这几种程序块的功能简要说明如下: 说明: 调用程序块:OB,FB,FC(可以调用除OB块外的其它程序块); 被调用程序块:FB,FC,SFB,SFC。 1、组织块OB OB由系统自动调用,并执行用户在OB块中编写的程序,所以OB的基本作用是调用用户程序。 在OB块中编写程序的最大容量,S7-300是16KB,S7-400是64KB。 除主程序循环OB1外,其它OB均是由事件触发的中断。 2、函数FC 函数FC有两个作用:(1)作为子程序用;(2)作为函数用,函数中通常带形参。

函数中程序的最大容量,S7-300是16KB,S7-400是64KB。 FC的形参通常也称为接口区,参数类型分为输入参数,输出参数,输入/输出参数和临时数据区。 在编写函数FC的输出参数时,应避免没有直接输出(否则,可能输出一个随机值,影响程序的判断)。可以在函数的开始,将字输出参数清0,位输出参数复位。 3、函数块FB FB与FC相比,FB每次调用都必须分配一个背景数据块,用来存储接口数据区(TEMP类型除外)和运算的中间数据。其它程序可以直接使用背景数据区中的数据。 FB中程序的最大容量,S7-300是16KB,S7-400是64KB。 FB的接口区比FC多了一个静态数据区(STAT),用来存储中间变量。 程序调用FB时,形参不像FC那样必须赋值,可以通过背景数据块直接赋值。 由于FB带有背景数据块,输出参数不会输出随机值,可以不在FB中编写初始化程序。 4、数据块DB DB用来存储用户数据及程序的中间变量,为全局变量。DB的最大容量,S7-300为32KB,S7-400为64KB。 DB可分为共享数据块(Share DB)、背景数据块(Instance DB)和用户自定义数据(UDT)类型的数据块。 ★共享数据块可作为所有程序使用的全局变量,在CPU允许的条件下,一个程序可创建任意多个DB,每个DB的最大容量为64KB。 默认条件下,共享数据块为掉电保持,在其属性菜单中选中“Non Retain”可以更改为掉电数据丢失。 如CPU中无足够的内部存储空间保存数据,可将指定的数据保存到共享数据块。存储在共享数据块中的数据可被其它任意一个块调用(全局变量)。这一点和背景数据块不同,背景数据块只能被指定的功能块(FB)使用,保存在背景数据块中的数据只能在这个功能块中有效。 ★背景数据块与FB和SFB关联,也是全局变量。背景数据块和共享数据块相比,只保存与FB或SFB接口数据区(Temp)相关的数据。背景数据块中有一种比较特殊的数据块,称为多重背景数据块。有关多重背景数据块的用法和使用注意事项请参看《怎样使用多重背景数据块》。 ★基于UDT的数据块为全局变量,提供一个固定格式的数据结构,便于用户使用。 5、系统函数(SFC)和系统函数块(SFB) SFC和SFB集成在CPU中,相当于系统提供的可供用户程序调用的FC或FB,实现与CPU 系统相关的一些功能,如读写CPU时钟等功能。调用SFB需要背景数据块。

多重背景DB问题

OB1: CALL FB1 ,DB1 FB1: CALL "BEIJING1" // FB1中定义的静态变量,也就是调用的FB2 CALL "BEIJING2" //FB1中定义的静态变量,也就是调用的FB2 FB2: 程序段1: A #SBE1 FP #A S #STOP A T 1 R #STOP NOP 0 程序段2: A #STOP L S5T#700MS SD T 1 NOP 0 NOP 0 NOP 0 NOP 0 程序段3: A( O #OPEN O #RUN ) AN #STOP = #RUN 引用 Zane 至圣 经验值: 10669 发帖数: 7963 精华帖: 88

主题:回复:多重背景数据块问题 2011-09-15 23:23:513楼 在FB2中是不允许使用实参的定时器的,如果FB2被多次调用,即相当于定时器T1被多次调用。Zane 注册自动化系统工程师Always save before download 引用 火麒麟 侠士 经验值: 1513 发帖数: 403 精华帖: 11 主题:回复:多重背景数据块问题 2011-09-16 08:27:494楼 用IEC定时器吧,也作为多重背景调用就可以了。 业精于勤,行成于思 引用 划痕 侠士 经验值: 1913 发帖数: 1280 精华帖: 17 主题:回复:多重背景数据块问题 2011-09-16 10:20:245楼 正如4楼所言,建议使用IEC定时器。IEC定时器有以下3种: 1、SFB3“TP”扩展脉冲定时器 2、SFB4“TON”接通延时定时器 3、SFB5“TOF”断电延时定时器 付出中收获希望^_^ Email:zhangqin6@https://www.wendangku.net/doc/4b2550297.html, 引用 Automann 侠圣 经验值: 3972 发帖数: 1990 精华帖: 71 主题:回复:多重背景数据块问题

功能块和功能的区别

功能: Function , 简称 FC 功能块: Function Block , 简称 FB FB和FC根本的区别是:FB支持静态变量,而FC只支持临时变量。 静态变量:是调用FB返回时,仍然要为FB保留此变量区,因此不会改变这一区域的数据值。临时变量却没有这样的特*。 所以在FC中如果在对临时数据变量处写入确定的数据前,就去读时就可能产生不可预见的结果,而对于静态变量却不会,因为它会保留你上次写入的结果。 另外,楼下的某位大侠的回答也很详细,你可以看看—— “ 我简单的说说FB和FC的区别,FB是具有存储功能的,FC没有存储功能,这是一般的理解;FB需要背景数据块,而FC是没有的;参数的传递方式不同,FB的输入输出对应着背景数据块地址,而FC的输入输出是没有实际地址对应的,只有的程序调用时,才会和实际的地址产生对应关系。FB参数传递的是数据,FC参数传递的是数据的地址。

FB(功能块)的处理方式是围绕着数据块处理数据,他的入口参数和出口参数都是数据块里的数据,以及STAT的数据都是数据块里,入口参数和出口参数、STAT可以认为是静态数据,这些数据不会因为函数消失而逝去,他会一直保存在数据块里。FB里的变量与他的背景数据块是一一对应的,而他的对应并不是一层不变的。更确切的说,FB 里的变量在调用时将根据AR2的值当作偏移量与背景数据块是一一对应。如果一个FB功能块里没有入口参数、出口参数及STAT数据,他将不需要背景数据块,这时的FB和没有入口出口参数的FC就没有什么区别了,就只能使用临时变量和全局变量了。 用很多人认为,FB的背景数据块必须由FB生成、FB里的第一个变量对应着背景数据块的第一个变量,还有就是由FB生成的数据块只能作为FB的背景数据块使用。其实这些理解是错误的,FB的背景数据块不一定是通过FB生成的,可以像生成共享数据块一样生成FB的背景数据块,换句话说,普通的数据块也可以作为FB的背景数据块,不过这种做法是有一定前提的,就是这个数据块的字节数必须大于等于FB所需的字节数,如果小于FB所需的字节数时,FB访问到超出背景数据块的变量时就会找不到变量的地址,肯定会出错了。FB里的第一个变量对应可以对应数据块字节数减去FB所需背景数据块字节数里的任意位置的

STEP7数据块的作用

STEP7数据块的作用 我想问一下在STEP7中建立数据块(DB)有什么作用,变量表又有什么作用,它们只有监控变量的作用吗?修改会对项目有影响吗?STEP7中数据块(DB)和WICC中变量地址属性中数据DB 有关联吗? 问题补充:如果我在WINCC中建立一个DB类型变量如DB0.DD0,那么我需要在STEP7中定义该变量吗?它的定义有范围吗? 答复 数据块是用作建立临时数据的,在与WINCC连接的时候可以关联,整个STEP7都可以关联,在程序中M的点是有限制的,而DB可以随着内存卡改变大小。变量表就是一个调试工具。 回答者:小浩浩 - 新生第1级 2010-12-21 14:32 建立数据块是用来集中地存取数据,便于对数据进行操作和管理.分为共享数据块和背景数据块.其中背景数据块是依附于与之相对应的功能块FB使用的.变量表可以用来批量地监管变量.在变量表中还可以对变量的状态和数值进行修改.修改后程序中引用的变量的值为修改后的值.便于对程序进行调试和强制. STEP7中数据块(DB)和WICC中变量地址属性中数据DB有关联吗? 没错,它们是关联的,它们的地址相对应,DB代表数据块变量在wincc中被缩 写例如:STEP7 中DB0.DBD0 对应 wincc中 DB0.DD0 回答者:smarteye - 中级技术员第6级 2010-12-21 14:40 1.数据块DB DB用来存储用户数据及程序的中间变量,为全局变量。DB的最大容量,S7-300为32KB,S7-400为64KB。 DB可分为共享数据块(Share DB)、背景数据块(Instance DB)和用户自定义数据(UDT)类型的数据块。 共享数据块可作为所有程序使用的全局变量,在CPU允许的条件下,一个程序可创建任意多个DB,每个DB的最大容量为64KB。 默认条件下,共享数据块为掉电保持,在其属性菜单中选中“Non Retain”可

S7-300多重背景调用实例

多重背景数据块 如果在结构化编程时经常使用功能块,那么在每次调用FB时都要为其指定一个单独的背景数据块。对于非常小的FB,它的背景数据块经常由很少的几个字组成,则会浪费大量没有使用的背景数据块空间。当频繁调用和指定背景数据块给这些小的FB时,程序会变得非常不清晰,或者DB块的数量会达到CPU所支持的最大数量。由于一个背景数据块可以长于FB实际需要的长度,因此多个背景数据块可以合并成一个多重背景。但是,这种合并必须在一个FB中通过编程完成。多重背景调用等同于FC的调用,在多重背景下调用的参数填写一定不能空着,必须有实际地址,否则用DB10的数据程序会混乱 具体步骤: 1.先建立一个FB1。符号名:三数相加。完成内容a*b*c=outcome 定义形式参数 IN:a, b, c OUT:outcome temp:temp_out

2.在SIMATIC Manager 中,打开你希望生成多重背景的FB2。在静态变量STAT定义部 分,输入多重背景的名字,数据类型为FB,选择后要注意改成FB1。然后将左侧多重背景的数据模块拖入编程框内。

3.建立FB2的多重背景数据块 4.在主程序OB1里调用FB2 5.如果需要可以在主程序里用mov指令给相应的变量例如DB1.DBW2等赋值,或直接在DB2数据库里改变当前值。

6.仿真运行 多重背景刷新补充内容 7.一旦修改过了多重背景,并打开调用它的功能块。当功能块被打开时,会出现一个消息 显示在FB 接口声明中有一个UDT 或本地标签的被修改,并显示在功能块调用中至少有一个时间标签冲突。确认此信息,修改过的背景调用在LAD/STL/FBD 编辑器中将会以亮红色显示。为了更新功能块调用,右击功能块,然后在弹出菜单中选择“Update Block Call...”。

多重背景数据块的使用

多重背景数据块得使用 当功能块FB1在组织块中被调用时,使用了与FB1相关联得背景数据块。这样FB1有几次调用,就必须配套相应数量得背景数据块。当FB1得调用次数较多时,就会占用更多得数据块。使用多重背景数据块可以有效地减少数据块得数量,其编程思路就是创建一个比FB1级别更高得功能块,如FB10,对于FB1得每一次调用,都将数据存储在FB10得背景数据块中。这样就不需要为FB1分配任何背景数据块。 下面以发动机组控制系统为例,介绍如何编辑与使用多重背景数据块。 例发动机组控制系统设计——使用多重背景 设某发动机组由1台汽油发动机与1台柴油发动机组成,现要求用PLC控制发动机组,使各台发动机得转速稳定在设定得速度上,并控制散热风扇得启动与延时关闭。每台发动机均设置一个启动按钮与一个停止按钮。 项目得编程步骤如下: (1)创建S7项目。使用菜单“文件” “新建工程”向导创建发动机组控制系统得S7项目,并命名为“多重背景”。CPU选择CPU 315-2DP,项目包含组织块 OB1。 (2)硬件配置。在“多重背景”项目内打开“SIMATIC 300(1)”文件夹,打开硬件配置窗口,并按图1完成硬件配置。 图1 硬件配置 (3)编辑如图2所示得符号表。

图2 符号表 (4)规划程序结构。程序结构规划如图3所示。FB10为上层功能块,它把FB1作为其“局部实例”,通过二次调用本地实例,分别实现对汽油机与柴油机得控制。 这种调用不占用数据块DB1与DB2,它将每次调用(对于每个调用实例)得数据 存储到体系得上层功能块FB10得背景数据块DB10中。 图3 程序结构 (5)编辑功能(FC)。FC1用来实现发动机(汽油机或柴油机)得风扇控制,按照控制要求,当发动机启动时,风扇应立即启动;当发动机停止后,风扇应延时关闭。 因此FC1需要一个发动机启动信号、一个风扇控制信号与一个延时定时器。

使用多重实例的困惑-多重实例的多重实例-

使用多重实例的困惑?多重实例的多重实 例? 最近使用多重实例编程使用定时器碰到点困惑,希望大家指点下。 S7300PLC控制60个回路,60个回路代码相同,只是输入,输出参数不同,每个回路内部编程需用到5个定时器。300个定时器超过CPU定时器的Timers数量,所以放弃采用传递T定时器方式,再说也不想用,不然传参数一大堆,翻屏容易眼花。想采用IEC定时器. 程序结构大概如下: FB200为单回路代码子函数,内部STAT静态变量分别定义了5个IEC定时器SFB4,代码内以STL编程符号名方式调用SFB4。 FB201为10路调用函数,输入,输出分别定义了和FB200接口类似的参数,只是数量是每种10个。内部STAT静态变量定义了10个FB200实例.FB201内部代码什么也没干,只是调这10个实例并传参数。 FB202:调用FB201的过程,没有定义任何参数,代码内分别调6次FB201,传递不同的参数和DB背景块。 FB203,测试用,单回路,直接调用FB200并传递参数和

背景块. 测试过程: 模拟运行,OB1中调用FB203,FB200运行正常,5个IEC 定时器均独立工作很好。 模拟运行,OB1中调用FB202并传递DB背景块,发现都在分别共用这5个IEC定时器,并不是我想象中的300独立个定时器。 查了下资料讲的多重实例,我定义了5个IEC定时器SFB4,这就是SFB4的多重实例,不知道类似于SFB4的这种库函数支不支持多重实例的多重实例?不知道大家编这种要用定时器程序是怎么规划的,不会是OB35定时中断计数来整吧?我实在不想堆积木样的堆60个回路的代码,编的累,改的累,维护更累。再说心疼CTRL,C,V这几个按键,呵呵,都快没什么弹性了。 最佳答案 你这样使用是没有问题的,调用6次FB201使用了不同的背景数据块怎么可能共用了呢,或许你忽略了其它问题。 支持不支持多重背景实例是指调用者而不是被调用者,FB生成是默认支持多重背景实例的,即使它不支持多重背景实例,但它可以做为多重背景实例被其它的FB调用。

项目二:功能块FB、功能FC和背景数据库DB的创建和使用

项目二:功能块FB、功能FC和背景数据库DB的创建和使用

用户在变量声明表中创建本块中专用的变量(即局域变量)。局域变量分为IN(输入变量)、OUT(输出变量)、IN-OUT(输入/输出变量)、TEMP(临时变量)和STAT(静态变量)五种类型。 ?·IN(输入变量):为调用它 的块提供的输入参数。 ?·OUT(输出变量):返回给 调用它的块的输出参数。 ?·IN-OUT(输入-输出变量): 初值由调用它的块提供,被子程序修改后返 回给调用它的块。 ?·TEMP(临时变量):暂时保 存在局域数据区中的变量。只是在执行块时 使用临时变量,执行完后,在主程序中不能 再使用该变量。 ?·STAT(静态变量):在功能 块的背景数据块中使用。关闭功能块后,其 静态数据保持不变。功能( FC)没有静态变 量。

IN(输入变量)、OUT(输出变量)和IN-OUT (输入/输出变量)属于程序块的形式参数。TEMP(临时变量)属于程序块的局域变量,只在它所在的块中有效。STAT(静态变量)只在FB程序块中存在,也属于程序块的局域变量,在它所在的块中有效,而且PLC掉电后STAT 变量仍然保持。 每一种类型的变量都包括变量名、变量类型和变量注释。变量声明表的左边给出了该变量表的总体结构,点击某一变量类型,例如“OUT”,在表的右边将显示出该类型局域变量的详细情况。块中的局域变量名必须以字母开始,只能由英语字母、数字、下划线组成,,但是在符号表中定义的共享数据的符号名可以使用其他字符。 在程序中,操作系统在局域变量前面自动加上“#”号。如果在块中只使用局域变量,不使用绝对地址或全局符号,易于形成通用子程序块实现结构化编程,并且易于将程序块移植到别的项目中去。 变量声明后在局域数据块中为临时变量( TEMP)保存有效的存储空间。对于功能块FB,

STEP7如何使用多重背景数据块

STEP7如何使用多重背景数据块 多重数据块是数据块的一种特殊形式,如在OB1中调用FB10,在FB10中又调用FB1和FB2,则只要FB10的背景数据块选择为多重背景数据块就可以了,FB1和FB2不需要建立背景数据块,其接口参数都保存在FB10的多重背景数据块中。建立多重背景数据块的方法是:在建立数据块只要在数据类型选项中选择“实例的DB”就可以了,见下例。 下面通过一例简单介绍一下多重背景数据块使用的一些注意事项和方法。 例如,PLC控制两台电机,且控制两台电机的接口参数均相同。一般的作法,我们可以编写功能块FB1控制两台电机,当控制不同的电机时,分别使用不同的背景数据块就可以控制不同的电机了(如第一台电机的控制参数保存在DB1中,第二台电机的控制参数保存在DB2中,我们可以在控制第一台电机调用FB1时以DB1为背景数据就可以了,第二台同样以DB2为背景数据块)。这样就需要使用两个背景数据,如果控制的电机台数更多,则会使用更多的数据块。使用多重背景数据块就是为了减少数据块的数量。 像这种情况,我们就可以利用多重背景数据块来减少数据块的使用量。拿本例来说,我们就可以在OB1中调用FB10,再在FB10中分别调用(每台电机各调用一次)FB1来控制两台电机的运转。对于每次调用,FB1都将它的数据存储在FB1的背景数据块DB1中。这样就无需再为FB1分配数据块,所有的功能块都指向FB10的数据块DB10。原理图如下: 首先,我们需要先后插入一个功能块FB10和数据块DB10,DB10就为FB10的多重背景多重数据块。如下图: 其次,需要在FB10中指定其所包含的背景数据块。方法如下:在FB10局部变量定义

相关文档
相关文档 最新文档