西门子FB3功能在附件头上的应用
西门子 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就没有一个永久的数据块来存放数据,只在运行期间会被分配一个临时的数据区。
西门子PLC FC和FB用法讲解

西门子PLC FC和FB用法讲解FC块讲解首先,我们从两者的名字就可以进行区分,可以用一个公式即FB=FC+DB来表示,FB是具有DB背景块的特殊FC,也就是说FB具有FC的功能,同时拥有一个DB块。
FC全称是Function函数。
注:DB块全称DataBlock 数据存储区域,类似数据库中关系表结构。
那首先什么函数呢?函数函数f(x)就像机器或黑箱,给予输入值x便产生唯一输出值f (x)。
x是自变量,f(x)是因变量。
举一个我们常见的公式,求圆的面积,S=π*r*r。
输入r值,便得到圆的面积S,这就是最简单的函数,r是自变量,S是因变量。
图1 变量声明图2 FC函数内容Input:输入型参数,提供外部输入接口。
类似于函数f(x)中的x,是一个自变量。
Input类型参数,是外部变量的拷贝副本,修改其值,外部变量无变化。
假设在程序中修改R的值,从图2编译信息发现,传递的并不是实际参数,所以修改外部接口变量无变化。
Output:输出型参数,提供外部输出接口。
该类型参数由于直接引用外部变量地址,可以修改其值。
InOut:输入输出型参数,既做输入又做输出。
同Output类型一样,可以修改外部接口变量的值。
在适当地方,使用InOut类型变量,可以减少占用PLC的变量声明空间。
Temp:局部变量,在函数内部使用,不提供外部的接口。
我们常常把temp变量用于数据转换的中间值,或者用于循环变量,比如用于For 或者While循环。
由于Temp是局部变量,它的值是随机,使用必须初始化,对其赋值。
Constant:常量,在函数内部使用,意思是恒定不变的变量,只能在声明处修改。
比如我们这里的π圆周率是固定不变的,可能调用的地方有几十处,若程序中直接引用3.1415,后期修改,需要把每个地方都修改过去,很麻烦。
在声明处修改π值,所有函数中的π变量都会修改。
假设我们在程序中修改π常量,从图2中编译信息可以发现,常量不能在程序中修改。
FB和FC使用注意事项

用西门子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的好处楼上以讲得很好了。
FB与FC没有太大的差别,FB带有背景数据块,而FC没有。
所以FB带上不同的数据块,就可以带上不同的参数值。
这样就可以用同一FB和不同的背景数据块,被多个对象调用。
FC和FB像C中的函数,只不过FB可以生成静态变量,在下次函数调用时数据可以保留,而FC的变量只在调用期内有效,下次调用又重新更换。
S7-300plc中的FB和FC的分别?FB带有自己的背景DB而FC没有自己的背景DB,用FC 和FB 有什么分别呢,他们都能实现控制功能,到底该用FB还是该用FC,什么时候用FB什么时候用FC?FB与FC没有太大的差别,FB带有背景数据块,而FC没有。
所以FB带上不同的数据块,就可以带上不同的参数值。
这样就可以用同一FB和不同的背景数据块,被多个对象调用。
FC和FB像C中的函数,只不过FB可以生成静态变量,在下次函数调用时数据可以保留,而FC的变量只在调用期内有效,下次调用又重新更换。
FB2和FB3的功能

你这里的FB2/FB3是用于串行通讯模块CP340通讯编程的,FB2<P-RECV>用于接收数据,FB3<P-SEND>P_RCV功能块允许接收来自一个通信伙伴的数据并将其存储在一个数据块中。
P_RCV无参数检查,如出现无效参数,CPUP_SEND功能块允许将一个数据块的全部或部分区域发送到一个通信伙伴。
没有必要了解FB2/FB3内部是怎么实现的,太复杂,精力应该放在学会如何使用FB2/FB3完成USS通讯。
点对点通讯功能块FB2、FB3是CPU模块与点对点通讯处理器CP340的软件接口,用于建立两者间的数据交换。
完成一次发送需要多个循环周期,因此在用户程序中它们必须被无条件的连续调用,用于周期性或定时程序控制的数据传输。
主站与从站的通讯协议类型、从站地址、数据位长度、停止位、奇偶校验、传输超时等必须一致,否则通讯难以成功。
FB3<P-SEND>在返回数据时将从站地址和功能码丢弃,故DB块中未见从站地址和功能码字节,而仅是数据内容。
程序不能根据从站地址、功能码来判定响应数据的种类,但CP340却规定了给定时间内仅允许一个发送模块(FB2)和一个接受模块(FB3)工作。
这就意味着它们在程序中已形成一一对应关系。
在设计程序时,可根据MODBUS的格式约定从返回的DB块中自行读取所需的数据,如返回的数据为0064,格式为16位整数,其读取地址为DB5.DBW01。
要读取从站(地址为01)从1789(十六进制,分高低位存储)开始的一个寄存器(十六进制,分高低位存储,占2个字节)的内容,其请求帧数据见表5。
CRC校验数据自行设定。
返回数据为0064(数据分高位和低位存放,占2个字节,转换为十进制是100,即6×16+4),返回帧见表6。
从站地址范围1-24 表中每格中的数据单位为字节,实例FC60 -----接收/发送子程序(CP340)程序段1程序段2 调用FB3 “P-SEND”程序段3程序段4程序段5程序段6 调用FB2 “P-RCV”P_RCV无参数检查,如出现无效参数,CPU将切换到STOP模式,必须先完成P_RCV功能块的CP_CPU启动机制,则CPU从STOP切换到RUN模式后,CP340才能接收到请求。
西门子300创建fb

西门子S7-300 中FB功能块的使用方法:1.创建功能块FB1准备完成如下功能:将“整型”变量转换成“实型”变量2.打开功能块FB13.在功能块FB1中添加入口参数、出口参数、静态变量入口参数=IN0 ---> 整型(INT)出口参数=OUT1 ---> 实型(REAL)静态变量=STAT2 ---> 整型(INT)局部变量=TEMP3 ---> 长整型(DINT)4.创建背景数据块DB25.打开DB2背景数据块,可以看到系统默认建立了三个数据IN0 ---> 入口参数(整型)OUT1 ---> 出口参数(实型)STAT2---> 静态变量(整型)6.打开FB1功能块,编写如下代码,实现将“整型”变量转换成“实型”变量同时再编写一段静态变量自加1代码7.打开OB1主程序,添加FB1功能块如何确定程序参数类型的块编号并传送给FC ?介绍使用以下程序代码可确定参数类型(BLOCK_FC, BLOCK_FB, TIMER or COUNTER)的编号。
例1 :FB 块FB1 变量声明中定义了“Timer”类型的变量“Time_1”,在FB2 中调用FB1,将定时器“T5”传递给变量“Time_1”。
如图01 所示程序代码中数值5 表示“T5”。
图. 01例2 FCFC1 变量声明中定义了“Timer”类型的变量“Time_1”,在FC2 中调用FC1,将定时器“T8”传递给变量“Time_1”。
如图02 所示程序代码中数值8 表示“T8”。
图. 02在使用多重实例时,需要在图01 所示程序中增加以下代码:TAR2 //多重实例偏移地址LAR1 P##Time_1+AR1 //多重实例偏移地址与当前地址相加L W[AR1,P#0.0]T MW00“BLOCK_DB”类型参数在调用FC 时不可以直接传送给FC 。
如果在调用功能时试图使用此参数类型,将产生如下的错误消息:“非法的参数传输<参数名>”“BLOCK_DB”类型参数仅在FB 被调用(从一个FB 或FC 中)时可被传送。
西门子OB,FB,FC模块

OB、FC、FB、SFC、SFB的区别
S7-300/400PLC程序采用结构化程序,把程序分成多个模块,各模块完成相应的功能。
结合起来就能实现一个复杂的控制系统。
就像高级语言一样,用子程序实现特定的功能,再通过主程序调用各子程序,从而能实现复杂的程序。
在S7-300/400PLC中写在OB1模块里和程序就是主程序,子程序写在功能(FC),功能块(FB)。
FC运行是产生临时变量执行结束后数据就丢失--------------不具有储存功能
FB运行时需要调用各种参数,于是就产生了背景数据块DB。
例如用FB41来作PID控制,则它的PID控制参数就要存在DB里面。
FB具有储存功能
系统功能块(SFB)和系统功能(SFC)也是相当于子程序,只不过SFB和SFC是集成在S7 CPU中的功能块,用户能直接调用不需自已写程序。
SFC与FC 不具有储存功能,FB和SFB具有储存工办。
OB模块相当于主程序,负责调用其他模块。
如果程序简单只需要OB就可以实现。
FB中可以定义静态变量,每个FB可以定义多个背景数据块,来代表同种类型的不同设备。
这样只通过一个功能块就可以完成多个设备的变程。
而FC中不可以定义背景数据块,一般情况下只能使用共享数据块中的数据,但同时也可以通过全局变量定义方式来访问其他背景数据块。
我个人的经验:在有多个类似的设备的时候,尽量抽象出这些设备的共同点,编写一个FB,然后通过FC来挂点或处理一些不同点。
STEP7常用功能块FC105FB41FB43

STEP7常用功能块FC105FB41FB43STEP7常用功能块FC105FB41FB43常用功能块FC105:FC105是博途(TIA Portal)中的一个常用功能块,也被称为方向判别器功能块。
它在自动化控制系统中经常被用于判断运动方向,以便在适当的时候进行控制。
FC105通过对输入信号进行处理,根据预设条件判断运动方向,然后根据判断结果输出相应的控制信号。
FC105功能块包含以下常用输入参数:1.当前位置(输入):输入当前位置信息,用于判断运动方向。
2.目标位置(输入):输入目标位置信息,用于判断运动方向。
3.正向容差(输入):输入正向容差信息,用于判断正向运动完成的条件。
4.反向容差(输入):输入反向容差信息,用于判断反向运动完成的条件。
5.正向信号(输入):输入正向运动信号,用于判断正向运动的触发条件。
6.反向信号(输入):输入反向运动信号,用于判断反向运动的触发条件。
FC105功能块的输出参数包括:1.正向运动(输出):输出正向运动信号,在判断为正向运动时触发。
2.反向运动(输出):输出反向运动信号,在判断为反向运动时触发。
FC105的工作原理如下:1.输入当前位置和目标位置信息。
2.判断当前位置是否在目标位置的正向容差范围内。
如果是,则判断为正向运动完成。
3.判断当前位置是否在目标位置的反向容差范围内。
如果是,则判断为反向运动完成。
4.判断正向信号是否触发。
如果是,则判断为正向运动。
5.判断反向信号是否触发。
如果是,则判断为反向运动。
常用功能块FB41:FB41是博途(TIA Portal)中的一个常用功能块,也被称为开关功能块。
它在自动化控制系统中经常被用于对输入信号进行开关控制,通过设置不同的逻辑条件来控制不同的输出信号。
FB41功能块包含以下常用输入和输出参数:1.输入信号:FB41的输入信号可以是布尔类型、字节类型或字类型的信号。
它们可以是来自传感器、按钮等设备的信号。
2.输出信号:FB41的输出信号可以是布尔类型、字节类型或字类型的信号。
西门子S7-300 400高级编程培训教材

功能及功能块中的参数声明
"Motor"
EN
ENO
Start
地址 声明 名称 类型 初始化值 ... 0.0 输入 Start BOOL FALSE 0.1 输入 Stop BOOL TRUE 2.0 输入 Speed INT 0 2.0 输出 Motor_on BOOL FALSE 8.0 输出 Setpoint INT 0 10.0 输入/输出 EMER_OFF BOOL FALSE ... 静态 ... ... ... ... 临时 .. ... ...
CALL #Punch . CALL #Guard
... ...
CALL FB10, DB10
Press_1的数据
传送带的数据
Press_1. Guard
Press_2. Punch
Press_2. Guard
Press_2的数据
FB10的数据
Press_1. Punch
多个实例只需要 一个 DB 在为各个实例创建“private” 数据区时,无需任何额外的管理工作 多重背景模型使得“面向对象的编程风格”成为可能(通过“集合”的方式实现可重用性) 最大嵌套深度为8级
Q20.5 Q20.6 Q9.0 QW12
. . . Q8.2 Q8.3 I 0.2 I 0.3 I 16.6 I 16.7
多重背景模型的结构
FB10
钻床数据
FB10的背景DB
CALL Drill . CALL Motor_1 . CALL Motor_2
DB10
... stat Drill FB1 stat Motor_1 FB2 stat Motor_2 FB2
FB1 “Station” 的工作原理