项目二:功能块FB、功能FC和背景数据库DB的创建和使用
- 格式:doc
- 大小:1.10 MB
- 文档页数:7
1.创建功能块FB1
准备完成如下功能:将“整型”变量转换成“实型”变量
2.打开功能块FB1
3.在功能块FB1中添加入口参数、出口参数、静态变量
入口参数=IN0 ---> 整型(INT) 出口参数=OUT1 ---> 实型(REAL) 静态变量=STAT2 ---> 整型(INT) 局部变量=TEMP3 ---> 长整型(DINT)
4.创建背景数据块DB2
5.打开DB2背景数据块,可以看到系统默认建立了三个数据
IN0 ---> 入口参数(整型)OUT1 ---> 出口参数(实型)STAT2---> 静态变量(整型)
6.打开FB1功能块,编写如下代码,实现将“整型”变量转换成“实型”变量
同时再编写一段静态变量自加1代码
7.打开OB1主程序,添加FB1功能块。
什么是PLC的FB,FC,DB,OB,这些块是什么意思?怎么用?展开全文PLC中写在OB1模块里和程序就是主程序,子程序写在功能(FC),功能块(FB)。
FC运行是产生临时变量执行结束后数据就丢失-----不具有储存功能FB运行时需要调用各种参数,于是就产生了背景数据块DB。
例如用FB41来作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中保存着FB使用的数据,即使FB退出后也会一直保留。
FC就没有一个永久的数据块来存放数据,只在运行期间会被分配一个临时的数据区。
在实际编程中,是使用FB还是FC,要看实际的需要决定。
FB与FC没有太大的差别,FB带有背景数据块,而FC没有。
所以FB带上不同的数据块,就可以带上不同的参数值。
这样就可以用同一FB和不同的背景数据块,被多个对象调用。
FB2 GET (可用于读取NC变量功能)FB2功能块可以使PLC程序从NC读取相应的变量,为了能正确的引导NCK变量,所需要通过“NC V AR Selector”软件在数据块中生成源数据块STL。
下面以读取机床轴位置来介绍使用FB2功能,在使用FB2功能时需要现将FB1里面的参数设置为“NCKomm=1”一,打开“NC V AR Selector”软件,新建一个项目。
搜索到一个“SMA”的变量然后“确定”二,找到代号为“988”“actToolbasepos”的选项,双击,出现下图这里面“Unit-No”是将要选着的通道号,Line是所要选着的轴号,单击OK这里我们生成3个项目如下图3图3二,单击菜单Code中的Selection选项,输入最后要生成的数据块号,默认为DB120,即生成DB120块,然后单击保存,找到所要保存到哪里的路径,这是会生成一个后缀名为“.var”的文件,名字可以自由取,这里以“zhoupos”为名三,单击菜单Code中的Generate生成后缀名为“.awl”这里以“zhoupos”为名字。
这个后缀名为“.awl”的文件是将来被PLC所认可的文件四,打开STEP7 在其源文件的跟目录下右键Insert new object—external source 找到刚才保存的文件然后打开,这时就会在STEP7的源文件里生成一个STL的源文件,双击打开,然后编译,如果没有发生错误则会在STEP7里生成一个DB120的数据块,五,在符号表里给DB120数据块定义注释,例如本例为zhoupos DB120 保存六,在OB1里调用FB2块,然后定义背景数据块例如DB121,下面将FB2的各输入输出参数说明如下1)输入参数Req:正向脉冲沿启动任务,只有当Rep端产生一个上升沿变换时,才可以启动它的一个任务,也就是读取NC轴的一个位置变量,布尔型数据类型MunVar:读取的数据数量,范围1—8,整型数据类型Addr1~Addr8:[DBName].[VarName];这是“NC V AR Selector”软件提供的NC变量标识符;数组型数据类型;例如本例为"zhoupos".C0_SMA_actToolBasePos0_2其中"zhoupos"就是刚才在符号表里定义的DB120的注释Unit1~Unit8: 变量地址中的区域地址;在这里就是“所要的通道”是那个,例如本例是通道1,就定义B#16#1, 字节型数据类型Columnl1~Columnl8:变量地址中的列地址,字型数据类型。
从零开始学PLC之逻辑块(FC和FB)的结构及编程逻辑块(FC和FB)的结构及编程功能(FC)、功能块(FB)和组织块(OB)统称为逻辑块(或程序块)。
功能块(FB)有一个数据结构与该功能块的参数完全相同的数据块,称为背景数据块,背景数据块依附于功能块,它随着功能块的调用而打开,随着功能块的结束而关闭。
存放在背景数据块中的数据在功能块结束时继续保持。
而功能(FC)则不需要背景数据块,功能调用结束后数据不能保持。
组织块(OB)是由操作系统直接调用的逻辑块。
逻辑块(FC和FB)的结构逻辑块(OB、FB、FC)由变量声明表、代码段及其属性等几部分组成。
局部变量声明表每个逻辑块前部都有一个变量声明表,称为局部变量声明表。
局部数据分为参数和局部变量两大类,局部变量又包括静态变量和临时变量(暂态变量)两种。
对于功能块(FB),操作系统为参数及静态变量分配的存储空间是背景数据块。
这样参数变量在背景数据块中留有运行结果备份。
在调用FB时,若没有提供实参,则功能块使用背景数据块中的数值。
操作系统在L堆栈中给FB的临时变量分配存储空间。
对于功能(FC),操作系统在L堆栈中给FC的临时变量分配存储空间。
由于没有背景数据块,因而FC不能使用静态变量。
输入、输出、I/O参数以指向实参的指针形式存储在操作系统为参数传递而保留的额外空间中。
对于组织块(OB)来说,其调用是由操作系统管理的,用户不能参与。
因此,OB只有定义在L堆栈中的临时变量。
逻辑块局部变量的数据类型局部变量可以是基本数据类型或复式数据类型,也可以是专门用于参数传递的所谓的“参数类型”。
参数类型包括定时器、计数器、块的地址或指针等。
逻辑块的调用过程及内存分配CPU提供块堆栈(B堆栈)来存储与处理被中断块的有关信息用户程序使用的堆栈局部数据堆栈简称L堆栈,是CPU中单独的存储器区,可用来存储逻辑块的局部变量(包括OB的起始信息)、调用功能(FC)时要传递的实际参数、梯形图程序中的中间逻辑结果等。
FB块的使用技巧和多重背景数据的使用
FB的使用技巧:FB的执行需要专门提供一个数据块DB,背景数据块DB,只能FB块访问使用它我
们先制作一个FB块,这里不在演示制作的过程(和FC一样),具体要求见下图:FB内程序建立完成后,
在OB1中调用(可多次调用 ...
FB的使用技巧:
FB的执行需要专门提供一个数据块DB,背景数据块DB,只能FB块访问使用它
我们先制作一个FB块,这里不在演示制作的过程(和FC一样),具体要求见下图:
FB内程序建立完成后,在OB1中调用(可多次调用)
因为FB可以多次调用,程序在运行的时候会有很多地方在使用FB,当我们需要看着FB内的程序进有很多实际参数给他不同的信号,我们无法看到我们想要的实际参数单独在FB内运行的效果,给用测试操作的功能,对FB内测行单独调试,方法如下图:
OK完成,可以对FB(多次调用的)进行单独的调试了
多重背景数据的使用:
(多重数据就是在一个FB内多次调用另一个FB,以达到减少FB使用数目的目的)
下面举个例子说明多重背景数据的使用:
前面我们建立了一个FB1(电机的启停控制),如果我们想控制很多电然而每个CPU支持调用FB数目是有限的,这边FB1(电机启停功能)用的多,就代表我们其他功
为了解决CPU能调用的FB数目有限这个局限,我们可以把很多FB1一起做成多重背景数据放到F 就解决了,方法入下图:
新建一个FB功能块(FB2)
OK,下面我们在OB1中调用FB2,就可以在不调用FB1的情况下达到多次调用FB1的效果了我们看一下DB102里的数据:
DB102里面集合了FB1的背景数据块的内容
使用小技巧。
西门子PLC中FB和FC区别、管脚定义、临时变量引起的麻烦FB和FC区别FB--功能块,带背景数据块 FC--功能,相当于函数FB,FC块均相当于子程序,既可以调用其它FB,FC块,也可以被OB,FB,FC块调用。
他们之间的主要区别是:1. FB使用背景数据块作为存储区,FC没有独立的存储区,使用全局DB或M区2. FB局部变量有STAT和TEMP,FC由于没有自己的存储区因此不具有STAT,TEMP本身不能设置初始值。
本质上,FB,FC的实现目的是相同的;无论何种逻辑要求,FB,FC均可实现。
只是实现方式效率不同,这也和工程师个人编程习惯有关。
FB块优点:1. 易于移植性,对于相同控制逻辑不同参数的被控对象,只要使用不同的背景DB,同一个FB块就可以方便2. 多重背景,减少重复工作,提高效率3. 多次调用时,参数修改方便4. 有独立的存储区FC块优点:1. 小巧灵活,对于非多次调用的程序更易理解2. 不占用额外的存储资源FB,FC块管脚定义IN---------变量是外部输入的,只能被本程序块读,不能被本程序块写;OUT-------是本程序块输出的,他可以被本程序块读写,其他程序通过引脚只能读值不能写;IN_OUT--- 输入输出变量本程序块和其他程序都可以读写这个引脚的值。
TEMP -----临时变量,顾名思义是暂时存储数据的变量。
这些临时的数据存储在CPU工作存储区的局部数据堆栈(L堆栈)中。
STAT-------在PLC运行期间始终被存储。
S7 将静态变量定义在背景数据块(仅对FB而言,FC和OB无静态变量),当被调用块运行时,能读出或修改静态变量;被调用块结束后,静态变量保留在数据块中。
为何定义的FB,FC块,多次调用后程序混乱?对于,多次调用的程序块,FB块建议更换调用不同的背景DB;FC则需要确保使用的存储地址不重复,即每次调用,块中调用的地址不重复。
为何含有定时器或计数器的FB或FC单次调用ok,多次调用时定时器或计数器混乱?对于多次调用的FB,FC,如为S7定时器,计数器,则需要在IN 接口中定义TIMER或Counter,每调用一次FB或FC,均赋不同的定时器或计数器号。
FB块和FC块FB和FC区别FB,FC块管脚定义临时变量引起的麻烦FB和FC区别FB--功能块,带背景数据块 FC--功能,相当于函数FB,FC块均相当于子程序,既可以调用其它FB,FC块,也可以被OB,FB,FC块调用。
他们之间的主要区别是:1. FB使用背景数据块作为存储区,FC没有独立的存储区,使用全局DB或M区2. FB局部变量有STAT和TEMP,FC由于没有自己的存储区因此不具有STAT,TEMP本身不能设置初始值。
本质上,FB,FC的实现目的是相同的;无论何种逻辑要求,FB,FC均可实现。
只是实现方式效率不同,这也和工程师个人编程习惯有关。
FB块优点:1. 易于移植性,对于相同控制逻辑不同参数的被控对象,只要使用不同的背景DB,同一个FB块就可以方便2. 多重背景,减少重复工作,提高效率3. 多次调用时,参数修改方便4. 有独立的存储区FC块优点:1. 小巧灵活,对于非多次调用的程序更易理解2. 不占用额外的存储资源FB,FC块管脚定义IN---------变量是外部输入的,只能被本程序块读,不能被本程序块写;OUT-------是本程序块输出的,他可以被本程序块读写,其他程序通过引脚只能读值不能写;IN_OUT--- 输入输出变量本程序块和其他程序都可以读写这个引脚的值。
TEMP -----临时变量,顾名思义是暂时存储数据的变量。
这些临时的数据存储在CPU工作存储区的局部数据堆栈(L堆栈)中。
STAT-------在PLC运行期间始终被存储。
S7 将静态变量定义在背景数据块(仅对FB而言,FC和OB无静态变量),当被调用块运行时,能读出或修改静态变量;被调用块结束后,静态变量保留在数据块中。
为何定义的FB,FC块,多次调用后程序混乱?对于,多次调用的程序块,FB块建议更换调用不同的背景DB;FC则需要确保使用的存储地址不重复,即每次调用,块中调用的地址不重复。
为何含有定时器或计数器的FB或FC单次调用ok,多次调用时定时器或计数器混乱?对于多次调用的FB,FC,如为S7定时器,计数器,则需要在IN接口中定义TIMER或Counter,每调用一次FB或FC,均赋不同的定时器或计数器号。
功能FC和功能块FB的使用功能(Functional Capabilities,FC)和功能块(Functional Blocks,FB)是软件开发中常用的概念,用于描述系统的功能和实现方式。
这两个概念可以帮助开发人员更好地组织代码和设计系统,并且在软件开发过程中起到了重要的作用。
下面将详细介绍功能FC和功能块FB的使用。
功能(Functional Capabilities,FC)是系统或软件所提供的一种特定功能或行为。
它描述了系统在特定情况下应具备的能力,可以是一个简单的操作或一个复杂的功能。
FC通常是对系统所需功能的高级描述,它不仅仅包括系统的输入和输出,还包括系统的行为和约束。
FC与用户需求息息相关,它是将用户需求转化为系统所需功能的中间步骤。
功能块(Functional Blocks,FB)是实现功能的基本单元。
一个功能块是具有特定功能的代码块,它接收输入,执行一系列操作,并生成输出。
功能块主要用于将系统的功能划分为更小的模块,以便于开发、维护和重用。
一个复杂的系统通常由多个功能块组成,每个功能块负责一个特定的功能或行为。
通过合理的组织和设计功能块,可以使系统更加模块化、可靠和可扩展。
在实际的软件开发过程中,我们通常会先进行功能分析和需求确定,然后将需求转化为功能,再将功能细化为功能块。
这个过程可以通过以下几个步骤实现:步骤一:功能分析和需求确定。
在这个阶段,我们需要与用户进行沟通,了解他们的需求和期望。
通过与用户的交流,我们可以确定系统所需的功能,并将其记录为功能描述。
步骤二:定义功能。
在功能分析阶段完成后,我们需要将功能描述转化为具体的功能。
例如,如果我们的系统需要实现一个登录功能,我们可以将其定义为一个“登录”功能。
步骤三:细化功能。
在细化功能时,我们需要将每个功能进一步分解为更小的功能块。
这些功能块可以是独立的,也可以依赖其他功能块。
通过细化功能,我们可以更好地组织代码,并确保每个功能块的责任清晰明确。
干货!西门子12001500PLC常用术语及FB、FC、DB各功能介绍1、块接口由形式参数和本地数据两部分组成:参数解析:输入参数:为调用模块提供数据,输入给逻辑模块输出参数:从逻辑模块输出数据结果输入/输出参数:参数值既可以输入,也可以输出变量解析:临时变量:存储在L堆栈中,块执行结束后,变量消失;静态变量:存储在背景数据块中,块调用结束后,变量被保留;(1)函数(FC)简介① 、函数(FC)是用户编写的程序块,是不带存储器的代码块。
由于没有可以存储块参数值的数据存储器,因此,调用函数时,必须给所有形参分配实参。
②、FC 里有一个局域变量表和块参数。
局域变量表里有:Input(输入参数)、Output(输出参数)、InOut (输入/输出参数)、Temp(临时数据)、Return(返回值 RET_VAL)。
Input(输入参数)将数据传递到被调用的块中进行处理。
Output(输出参数)是将结果传递到调用的块中。
InOut(输入/输出参数)将数据传递到被调用的块中,在被调用的块中处理数据后,再将被调用的块中发送的结果存储在相同的变量中。
Temp(临时数据)是块的本地数据,并且在处理块时将其存储在本地数据堆栈。
关闭并完成处理后,临时数据就变得不再可访问。
Return 包含返回值 RET_VAL。
(2)函数块(FB)的简介函数块(FB)属于编程者自己编程的块。
函数块是一种“带内存”的块。
分配数据块作为其内存(背景数据块)。
传送到FB 的参数和静态变量保存在实例DB 中。
临时变量则保存在本地数据堆栈中。
执行完FB 时,不会丢失DB 中保存的数据。
但执行完FB 时,会丢失保存在本地数据堆栈中的数据。
(3)数据块(DB)简介①、数据块用于存储用户数据及程序中间变量。
新建数据块时,默认状态是优化的存储方式,且数据块中存储的变量是非保持的。
数据块占用 CPU 的装载存储区和工作存储区,与标识存储器的功能类似,都是全局变量,不同的是,M 数据区的大小在 CPU 技术规范中已经定义且不可扩展,而数据块存储区由用户定义,最大不能超过工作存储区或装载存储区。
用户在变量声明表中创建本块中专用的变量(即局域变量)。
局域变量分为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(输入/输出)类型变量,声明块调用软件接口(即形式参数)。
用户在功能块中声明变量时,除了临时变量外,它们将自动出现在功能块对应的背景数据块中。
在变量声明表中赋值时,不需要指定存储器地址;根据各变量的数据类型,程序编辑器自动地为所有局域变量指定存储器地址。
生成功能块FB并调用
生成背景数据块并修改实际值。