白话说电气_西门子FB、FC说明分析举例

FC,功能。因为是一个功能,如果这个功能在多处都能用到,那么这段FC就具有通用性。我们在程序的其他地方就可以调用,简化代码,这个是FC的模块式的作用。当然,FC也可以作为我们被调用的一个子程序,用OB1去调用他,以实现结构化编程。

因此,得出结论,FC可以干两个事:

第一,实现功能化编程。比如,我们有大车,小车,起升3个结构。我们就可以定义3个FC,跟这3个机构一一对应,然后用OB1依次调用。为什么这样做,为什么不都放在OB1里。你也可以放OB1里,对段数比较少,很简单的项目就把代码都放在OB1里。如果功能,机构多了,最好还是分开来,这样有利于程序的可读可调,更符合规范。否则一个小故障都会导致你把OB1翻个遍,会很麻烦的。找准故障机构,在相应的FC里再去找会少看很多代码。这个道理比较简单。

第二个事,就是我上面说的模块化编程,我的描述不是很准确,因为是自己的总结。这个意思就是我们平常讨论说的,把所有功能都写到一个块里,然后去调用整个块。FC可以干这个事(当然,FB也可以干,区别后面说),新建好FC,确定好输入,输出接口,然后编写逻辑,一个FC就搞定了。大家可以写一些简单的功能,来感受下FC。写好FC之后,在主程序OB1或者其他FC里就可以调用该块,程序界面右边“FC BLOCK”里就有该块,相信做到这里的话大家都应该知道怎么做了。我这里要说明其他问题。关于FC的编写,这里就不得不说一些概念性的东西,FC是不带背景数据块的,就这句话。因为FC是不带背景数据块,所以我们在调用FC时,关于FC这些逻辑的计算完全靠的是我们输入输出接口上的这些地址位,给FC提供数据来源。我们在编写FC的时候,需要注意的是,如果需要中间变量,考虑使用temp,临时变量满足需要。但是使用临时变量需要注意的是,在一个周期没有完成扫描时,A段程序调用FC1,使用了临时变量X,改变了其值。那么B段程序再次调用FC1时,X的值已经被改变了。在下个周期,才会释放。这点要非常小心。这就是跟FB无法比的,没有地址来存放数据。编程的时候,尽量多考虑使能。同样,M寄存器也要慎用,比如,你FC里用了M2.0这个位表示中间状态。现在第一次调用FC时,改变了M2.0的值,为ON。现在又第二次调用FC,M2.0的值已经为ON了,显然这不是我们想要的。虽然你调用了两次,分别赋了两组输入输出变量,但是你FC内的M终究是内存里的那个M,你调用无数次都是跟这个M打交道。不知道我说清楚了没。所以一般不要用这样呀的中间变量,一定要用时,多考虑通过使能来改变调用时序。同样,像定时器啊什么的,如果我们要使用,都需要定义一个in接口,为FC内的定时器提供一个实实在在的通道。第一次调用,我们用T21输入。第二次调用,我们用T22输入。这样就不会出错。否则就会像M那样出错。这个部分很重要。如果没听懂,不要紧。继续听FB。两个比较下,应该就很更清楚了。

FB,功能块。可以干的事,就是FC能干的第二个事。只能干这个事,为什么要特别些呢,干嘛不让FC一个人搞定就行了。是因为FB功能更强悍些,每次调用他都需要一个DB来供他为逻辑计算存放数据。而不像我之前说的FC,需要输入输出接口地址来作为数据来源。每次调用FB时,需要指明一个DB,两个相互配合。而DB中存放的数据,也可以供全局享用。比如,有一个电机的加速功能块,作用是调节电机的加速。我们需要输入的参数是加速时间,最高速度两个参数,然后计算得出速度给定。这个时候我们最好用FB。现有电机1,输入加速时间2,最高速度20。那么2,20这个值放在哪呢,我们调用FB时,就可以放到DB电机1里去了。现有电机2,加速时间3,最高速度30,。我们仍然调用这个FB,3和30放DB电机2里就可以了。如果用FC,也可以做这个块。但是,没有DB来存放这些数据,就很不方便,也就失去了通用性。

记住一点,简单的功能集合用FC,复杂的用FB。保准不错。

欢迎投稿本站:紫金网 » 白话说电气_西门子FB、FC说明分析举例