西门子PLC 博途FB入门篇,看这个就够了
概述
在博途环境下编程,可以使用的代码块有 OB ,FC 和 FB 。通常,功能块 (FB) 是从另一个代码块(OB、FB 或 FC)进行调用时执行的子例程。在调用 FB 块时会生成与之相匹配的背景数据块,在背景数据块中可以存储定义的接口参数及静态变量。下面将具体介绍 FB 块的使用,主要包含以下 5 个方面:
FB 块支持的编程语言 FB 块的块接口 FB 块的编程 FB 块的调用 FB 块的背景数据块属性修改一、FB块支持的编程语言
S7-1200 使用 FB 块编程支持的编程语言有 LAD、FBD、 SCL 以及 CEM (博途 V17 开始支持);S7-1500除了上述编程语言的支持,还支持Graph。这个博主会另开一期,单独细聊。
图 1. FB 块支持的编程语言
二、FB块的接口
FB 块有一个块接口区,可以用来定义块接口。在 FB 的块接口区域中可以定义的接口类型:Input(输入)、Output(输出)、InOut(输入输出)、Static(静态变量)、Temp(临时变量)以及 Constant (常量),如图 2 所示。
图 2. FB 块接口区
对于 FB 块接口访问如表 1 所示:
接口类型
读写访问
描述
Input
只读
调用 FB 块时,将数据传送到 FB 块,实参可以为常数
Output
读写
将 FB 块执行的结果输出,实参不可以为常数
Inout
读写
读取外部实参数值并且将结果返回到实参,实参不可为常数
Static
读写
静态变量存储在背景 DB 块中,不参与对外的参数传递
Temp
读写
-
Constant
只读
-
表 1. FB 块块接口访问
对于带参数的 FB 块,有形参和实参 2 个概念,如图 3 所示。
形参: 块接口区域定义的 Input,Output,InOut 参数;在调用 FB 块时,会以引脚方式出现在 FB 块上。Input 和 InOut 类型的变量出现在 FB 块的左侧;Output 类型的变量出现在 FB 块的右侧。实参: 在调用带参数的 FB 块时,为形参填写的实际变量。图 3.形参和实参
二、FB块编程
FB 块在编程时可以选择是否在块接口区定义变量。可以主要分为有 两种情况:
(1)情况1:FB 块带参数——定义块接口 ,FB 块中通常不出现任何全局变量(DB、I、Q、M);优点:模块化编程,对于相同的功能/逻辑只需要编写一个 FB 块,无需重复多次编写相同的代码,进行大量重复性工作;还可将 FB 块做成项目库或全局库,以便后续其他项目或其他工程师使用。FB 块编写程序代码,如图 4 所示。
图 4.带参数的 FB 块编程
FB 块调用以及实参参数的填写,参考图 3 。右键打开图 3 中 FB 块的背景数据块 “motor_DB”,显示内容如图 5 所示。在背景数据块中可显示 Input、Output、InOut 及 Static 变量,Temp 和 Constant 变量不会出现在背景数据块中。
图 5. FB 块背景数据块显示内容
编写的带参数的 FB 块,可以多次调用,只需为每次调用的 FB 块填写不同的实参。同样的功能仅需编写一次即可,无需重复编写相同的代码。注意:一般情况下每次调用需要生成不同的背景数据块。对于部分系统 FB 指令,可能有不同要求,详见具体指令说明。
////////////////////////////////////////////////////////////////////////////////
(2)情况2:FB 块不带参数——不定义任何块接口,FB 块编程中,使用全局变量;此种方式不推荐。 如果在 FB 块中编程时不定义任何块接口变量,那么,在 FB 块中编程时只能使用全局变量。FB 块编程如图 6 所示。
图 6.不带参数 FB 块编程
不带参数的 FB 块调用及其背景数据块,如图 7 所示。
图 7.不带参数 FB 块调用及其背景数据块
三、FB块的调用
编写好 FB 块程序后,需要进行调用才可以执行 FB 块中的程序。FB 块可以由 OB 块、FC 块或其他 FB 块调用。被不同的块调用,出现的调用方式也会不同,如图 8-10 所示。
在 OB 中调用 FB 块,仅支持单个实例调用(如图 8 所示)在 FC 块中调用 FB 块,支持单个实例和参数实例调用(如图 9 所示)在 FB 块中调用另外一个 FB 块,支持单个实例,多重背景和参数实例三种方式(如图 10 所示)。图 8. OB 调用 FB 块
图 9. FC 调用 FB 块
图 10. FB 调用 FB 块
下面针对各个调用选项进行详细说明:
(1)单个实例: 选择单个实例后,系统会自动生成该 FB 块的背景数据块,出现在程序块文件夹下方,并且自动在 FB 上方填写上该背景数据块,如图 11 所示。
图 11.单个实例调用
////////////////////////////////////////////////////////////////////////////////
(2)参数实例: 选择参数实例后,将实例作为调用块的一个 InOut 参数进行传递,需要生成一个背景数据块作为实参填写在形参上。如图 12 所示,FC1 中调用 FB2"motor",并且调用选项选择参数实例,此时 FC1 的块接口中会新增一个 InOut 类型的参数,参数类型为 motor(FB2 的背景数据块)。
图 12.FC1 中参数实例调用 FB2
添加新块,选择 DB 块,类型选择 motor(FB2 的背景数据块),如图 13 所示。
图 13.新建 FB2 背景数据块
如图 14 所示,在 OB1 中调用 FC1 时会出现一个 InOut 形参参数需要填写,此时将图 13 新建的背景数据块填写到 FC1 的 InOut 参数上即可。
图 14.参数实例填写
////////////////////////////////////////////////////////////////////////////////
(3)多重实例: 选择多重实例后,无需为被调用的 FB 块创建单独的背景 DB 块,被调用的 FB 块的背景数据块存储在外层 FB 块的静态变量区域。对于多重实例,还可以以数组形式存在,方便块的多次调用。如图 15 所示,FB1 中调用 2 次 FB2,选择多重实例方式。
图 15.多重实例调用
四、FB块的背景数据块属性修改
FB 块的背景数据块伴随着 FB 块调用出现,在背景数据块中可以存储 Input(输入)、Output(输出)、InOut(输入/输出)以及 Static(静态变量),下面说明 2 点 FB 块背景数据块属性如何修改。
1. 背景数据块的断电保持性的设置: 背景数据块的断电保持性:取决于 FB 块接口中对变量保持性的设置,如图 16 所示(图中左侧为 FB 块接口,右侧为 FB 块的背景数据块)。
图 16. FB 块接口设置保持性
标注 1:保持性有 3 种选项,非保持、保持以及在 IDB 中设置;标注 2:块接口中选择为非保持的变量,背景数据块中为不勾选保持性且不可修改;标注 3:块接口中选择为保持的变量,背景数据块中为勾选保持性且不可修改;标注 4:块接口中选择为在 IDB 中设置的变量,背景数据块中会有复选框预留,由用户自行决定是否勾选保持性,可在背景数据块中操作。此外该功能可以用于优化 FB 块 的 AT 功能的使用,详见链接。注意:对于非优化 FB 的保持性无法在 FB 接口处设置,只能在背景数据块中设置,并且所有变量参数的保持性是一致的,无法单独设置某一个变量参数的保持性。
////////////////////////////////////////////////////////////////////////////////
2.背景数据块的优化和非优化如何设置: 背景数据块的优化或非优化:由 FB 块属性的“优化的块访问” 设置决定。
FB 块创建后,默认是优化的 FB 块,其背景数据块也默认是优化的。如果需要修改该属性,可以在 FB 块属性中,将”优化的块访问“复选框取消勾选,即修改为非优化,如图 17 所示。图 17. FB 块属性修改为非优化
对程序进行编译程序后,查看 FB 的背景数据块的属性也随之修改为非优化,如图 18 所示。
图 18. FB 背景数据块非优化
关注我,工控PLC布道师,工控路上与你一路前行。
全网首个PLC维修博主,有要保程序,赶紧送来维修#电工
PLC二修机故障维修。
现在的情况是把控制电供上了,供上以后黄灯和绿灯交替闪烁,硬件故障灯红灯是常亮,这样程序可能这几个芯片被它动过了,可能还在有问题。
今天收到一台福建网友寄修的SR40的PLC,拆开以后就看到明显被焊油焊骨的痕迹,这个芯片被焊过,这个芯片被焊过,这个芯片被焊过,这个电容也炸了,相当麻烦了。这个是台二修机,二修机收费价格和一修机是不一样的,因为二修机的难度会成倍的增加。除此之外其他板没有修过的痕迹。
先测量一下CPU是不是好的,再对每一个板分别进行测试,电源模块24伏战场就不是电源的问题,把它组装起来看一下会是什么状态。组装一下,上电以后没有反应,测一下CPU的各组电压,1.7伏不正常,0伏不正常,这也不正常,电流也没有短路的很,也没有短路的迹象,不知道是不是被它修坏了。
接着看,在对IO版进行检测的时候发现这里电感就像被炸过一样,已经炸黑了,不知道是不是这里的原因,把这里处理。在处理这里之前还想着还是先搭建一个正常的供电电路,看它能不能正常的运行起来。因为二修机说实话修不好,被破坏的概率还是比较大的,所以还是先检测一下。
现在的情况是把控制电供上了,供上以后现在是黄灯和绿灯交替闪烁,故障硬件故障灯红灯是常亮,这样程序可能这几个芯片被它动过了,可能还在有问题,一层层的修。把电源把IO版修好以后接着修CPU版,一共换了那么多东西,现在清洗,清洗后对它进行上电测试。组装起来了,做个最终的上电测试,正常运行的,现在运行单量也有输出了,这边输入程序也保住了,PLC也正常修复了。
至于通讯功能好不好还接着测试,因为上个师傅把通信芯片也给换了,一共坏了那么多东西,本来是一个小故障,小问题的,被他越修越坏。这样维修费本来这种修个PLC维修费就是三四百块钱,但是因为二修机价格是维修是翻倍的,之前也跟客户协商过,二修机价格翻倍,他们说要保程序,如果程序能保住翻倍也修,现在看来应该是保住了。
接着测试下通讯,插进去通讯灯不亮,麻烦了,再测试485通讯是不是好的,如果485是好的,看能不能把程序搞上来,麻烦了,485也是找不到,这下就尴尬了。问了客服,PLC是要保证485通讯正常的,因为485外接的设备,看一下485电压是不是正常的,应该要有3点多伏次,4伏的电压,现在只有0.7伏,这个显然是不对的,不对接着修。
对光偶进行检测的时候,发现上个师傅没焊好,有虚焊,把它补起来看能不能焊,还是不对,又拆开看,拆开看背面还有一颗芯片也是虚焊的,一个个惊喜,又一个惊吓,这下焊上去不知道能不能焊。
通过最终的维修,485通信还是修不起来,模板能换的都已经换了,但是现在还是不行,最终还是把网口修起来了,网口修起来以后把程序提取出来,把程序解密,解密以后提取出来,提取出来以后做个备份,问客户需不需要程序,如果有需要程序直接提供一个原程序。除此之外那就没办法了。
喜欢维修的老铁请点赞关注李师,李师将持续不断的分享PLC的维修经验,谢谢。
相关问答
C#调用DLL的3221225477(0xc0000005)'Accessviolation'问...
有个问题想请教各位一下,我这边有个程序用C#写的里面有段代码是调用DLL程序控制PLC的api,但是这个程序有不定时的报错,并且无法捕获只有这个信息可以参...