技术论坛

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

返回主题列表
作者 主题
万泉河
至圣

经验值: 28633
发帖数: 10885
精华帖: 131
楼主    2022-06-25 18:24:40
主题:0625 【万泉河】PLC程序块FB和FC如何选?

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


微信公众号:PLC标准化编程,ZHO6371995
Zane
至圣

经验值: 75765
发帖数: 19245
精华帖: 376
1楼    2022-06-25 19:03:52
主题:回复:0625 【万泉河】PLC程序块FB和FC如何选?

还真是非得让我把这个事情说得透彻一点,


为了所谓的优雅方法,没办法了,搞了个一键启保停,只能FB了呀,为了解决背景数据块的数量,终于想起了还有多重背景这么回事儿。


真搞不清楚优雅在什么地方了,随意增加工位吗,还得重新生成总的背景数据块呀,没看出啥优雅来。


明明是一条道跑到黑了,却还对人说条条大路通罗马


我觉得这是恰恰证明了,某方法不仅仅脱裤子放屁,还得通过一个屁分80次放来掩盖的实质。


多重背景没错,FB/FC没错,标准化没错,模块化没错,屁放错了。


另外,我给大家的建议,是对于万泉河的所谓理论方法,大家要从反面来思考一下如果不这么做是个什么结果。




Zane 注册自动化系统工程师 Always save before download
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。