登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:0625 【万泉河】PLC程序块FB和FC如何选?

点击:1769 回复:6

0625  【万泉河】PLC程序块FB和FC如何选?
即, 当做PLC程序的时候,完成同样一个任务,有可能有2种技术路线,而且有可能FB和FC都可以实现,然而很多新手就会疑惑,我开始起步的时候到底应该选择哪一个, 选择的依据是什么?
这个问题通常非常简单,很多有一定经验的PLC工程师甚至认为不能算作一个正式的问题,不需要回答,咋选, 我觉得该用FB的时候自然用FB, 觉得该用FC的时候自然用FC咯!
而其实这个问题又非常复杂。倒不是因为原理复杂,而是针对不同的提问者,不同的应用领域,都可以有不同的回答。
比如如果针对标准化学习营的学员, 提出这样的问题, 回答会是,在做类库的时候用FB, 而在做耦合调用的时候用FC。然而也不限定, 也仍然可以互换。
所以是个复杂的,多答案的问题。
本文对此问题做些探讨。
首先, FC的名称为功能,或者叫做函数。 然而在程序中有两种完全不同的应用。分别是实现数学计算功能的函数,以及实现程序框架划分的调用。其中前者,往往有输入输出参数, 而后者则没有参数,只是用于被OB简单罗列式的调用。
在以前,S5时代的时候, PLC内部块有FB, FC和PB等。 其中PB则代表了上述的后者。 到了S7以及TIA PORTAL以后, SIEMENS取消了PB的定义,统一用FC来实现了。 因而为本问题带来了一定程度的混乱干扰。
而在西门子之外的其它品牌的系统平台中, 往往还会有一个用于在OB1循环调用之下的POU程序块,其实相当于了PB。
所以当下的这个问题,当提问者提出FB/FC不知如何选的时候,就已经同时提出了2个问题,即,
在做函数功能时选择FB还是FC?
在程序框架调用时选择FB还是POU功能的FC?
这两个问题需要分别单独回答。
对于前一个问题
涉及的是FB和FC的功能区别,即FB带有静态变量,而FC不带。 而比较最终实现的功能,FC实现的是任何时刻,只要输入管脚相同, 则输出管脚得到的数值一定是相等的。而FB则不然。 在输入管脚值相同的情况下,有可能因为静态变量存储区的存储计算值不同,而输出值不同。最典型的是PID应用。
那么问题的答案便是,如果当下的控制任务,有需求在相同的输入参数得到不同的输出值的话, 那就用FB。 反之则用FC。
这个时候如果强用FC, 是否能够实现同样的功能?也可以。然而需要显性地增加INOUT管脚,人为地部署存储区域。 这其实要增加调用时的复杂程度, 是以牺牲程序的简洁为代价的。 而在增加了INOUT管脚之后, 不同工况下的INOUT管脚数值不同,上述规律总结仍然正确。
对于后一个问题
通常都是选择使用FC实现。 FC(POU)中的内容就是实现对FB的调用和实例化。 每一次调用,都要生成一个IDB。 如果是梯形图调用,数量少的情况下, 这不存在什么问题。 PORTAL中每次调用时,输入IDB的符号名称,然后系统自动分配DB数字号,即可。
然而,如果调用数量多, 产生IDB多的情况下,再简单重复用梯形图调用,效率就很低,就会希望用SCL来实现。 然而,需要提前生成所有的IDB。 然后SCL程序中调用才可以。
PORTAL的程序块列表中的工位1-5这些,看起来是在一个列表表格中,然而却并不支持与EXCEL的简单对拷,所以并不能用批量复制的方式建立。
我曾经研究了使用生成源文件的方法,通过在EXCEL中批量生成所有IDB的源文件,然后在PORTAL程序中通过对源文件编译,实现了批量生成IDB。 这一技巧,在专著《PLC标准化编程原理与方法》P170页中有过讲解。
这个方法比较笨拙,是实在没有更好的办法的情况下比较尴尬的实现路径。
技术总在进步中, 烟台方法作为一种开放性的程序架构思想,也一直在持续发现与吸收更好的技术路线和方法。
近期,在针对官方LBP例程的直播讲座中,从其应用中领会到了更容易的方法。即用FB而不是FC, 调用库函数FB的时候IDB不再使用全局DB,而是使用多重背景。
把实例建立在FB的变量区有2个好处,其一是将来只需要为这个大FB建立一个IDB即可, 省掉了数量庞大的IDB。 其二便是变量区格式和EXCEL格式是兼容的,可以互相复制。 即即便在位号名称没有连续规律性的情况下, 也可以直接从EXCEL中复制而来。
这一点,我在制作80工位双联开关控制公用指示灯的系列例程中就充分利用了。 所有平台, 除非其不支持FB嵌套调用,都尽量使用FB做框架FC/POU,而不再是简单使用FC了。 这个系列的例程看起来非常简单,实现的功能简单,过程方法也很简单,很多人简单看一眼并没有发现有什么新奇之处,其实我自己还是有很多细节的收获在其中的。每一个平台的例子过程中都有新发现。要和我一样的心得,只简单浏览答案是远远不够的,只有自己动手实践了,收获才是自己的。另外我还布置了一些作业,未来也会在这个例子基础上产生更多的想法,会布置更多的更有意思的作业需求。
所以从中可以对标准化烟台方法了解到更多细节。
而对于没有做到标准化架构应用的普通的应用,我给同行们的建议也是,尽量使用FB来做程序,哪怕它并不是库,哪怕它最终只会调用一次,只生成一个IDB。
好处是,在这一个特定的程序块范围内, 需要的辅助变量,以前可能会用M或者全局DB的变量, 那么现在可以使用STATIC静态变量,IEC定时器TON也可以直接建立在其中,从一个最简单意义上实现了不使用M和T。
系统中有多个程序模块, 对应的就是多个FB, 互相之间建立的变量表互不干扰,相当于各自维护一个完整的变量空间。
我在十多年前,烟台方法还未诞生之前, 辅导一个同事做项目的时候, 当时是一个设备改造项目, S7-300PLC新增加了独立的功能模块,与原来的功能全部没有关系。 然而改造前的项目源程序打开之后, 对原来的工程师使用了多少M和T,还有多少资源段可以使用,就感觉很乱。 我就提议说,直接建一个FB好了。 你新加的所有功能就在一个FB1里面实现,增加的程序只有1个FB+IDB,系统的全局资源你一概不用,自然也不需要担心干扰到其系统原来的功能。
所以, 对于标准化学习营的学员,文中的建议可以参考。 而对于刚刚步入自动化行业,刚开始从事学习PLC的新手,建议则是, 在不懂区别, 不知如何取舍的情况下,都尽量选用FB即可。 可以享用FB带来的便捷。
而至于副作用, 或许会有人恐吓你说什么用FB多占用一个IDB,多耗费一些资源啥的,则完全不必理会。在资源的消耗方面,差别微乎其微。 而且,你作为一个新手,基本没可能用到这样极致的资源耗尽的地步。等将来你真有机会遇到的时候, 你早就全懂了,这个问题对你也早就不是什么问题了。
0619 【万泉河】论一个好的程序框架的重要性
0618 【万泉河】(多品牌PLC)80个工位双联开关控制公用灯示例
0615 【万泉河】PLC程序中SR逻辑的本质
0613【万泉河】一言不合就开讲
0612 【万泉河】浅议PLC程序中SR和RS逻辑的区别
0610 【万泉河】S7-1200 PLC中实现WINCC报警
0527 【万泉河】PLC程序中启保停的本质
【万泉河】面向企业的PLC系统设计编程标准化培训
图解WANQ-Y1更改WIFI网络
一位新加入三菱标准化的学员
0503 【万泉河】王者归来:完美报表谢幕后又要回来了。
0428 【万泉河】PLC编程:谈虎色变双线圈
0426 【万泉河】论PLC程序的可移植性(上):关于移植的定义
0417 【万泉河】三菱标准化程序打印版
0416 【万泉河】PLC标准化编程烟台方法的本质是颠覆
《PLC标准化编程原理与方法》已出版发行, 各大网上书店有售。
MCGS-OPC UA初体验
0407 【万泉河】汽车行业标准SICAR本质上是对自动化工程师的羞辱
0402 【万泉河】论工控行业中工艺的重要性
0407 SICAR程序获取方式
附件:0625  【万泉河】PLC程序块FB和FC如何选?.pdf
[本地下载]
22-06-26 22:16
作为一个科普文章,发在PLC板块,是不是应该先声明试用那家的PLC?不是所有读者都清楚身世,就像atpid指令,在没有pid参数的情况下,带有atpid指令的PLC只要执行一边就OK了,否则就要试,可atpid不是谁家PLC都有。
22-06-27 10:00
盲猜西门子。
22-06-28 09:16
我更喜欢用FU,FB和FC从来没用过
为了给国产更多发展机会,我的采购清单直接排除西门子
22-06-29 00:12
楼上啊,国产工控板也是有很多的兼容西门子200的板卡的,价格便宜,很多性能也基本稳定
22-06-29 21:45
汇川PLC值得推广一下,感觉很香表情
22-06-30 00:02
学习了。
22-07-01 14:11

工控新闻

更多新闻资讯