西门子PLC中FB和FC区别、管脚定义、临时变量引起的麻烦
各位工控人,点击下方 “进入圈子”,技成电工课堂每天14:30 分享一些干货趣闻,
PLC、电工、变频器、制造业技术人才分享交流!
(此处已添加圈子卡片,请到今日头条客户端查看)FB和FC区别
FB--功能块,带背景数据块 FC--功能,相当于函数
FB,FC块均相当于子程序,既可以调用其它FB,FC块,也可以被OB,FB,FC块调用。
他们之间的主要区别是:
1. FB使用背景数据块作为存储区,FC没有独立的存储区,使用全局DB或M区
2. FB局部变量有STAT和TEMP,FC由于没有自己的存储区因此不具有STAT,TEMP本身不能设置初始值。
本质上,FB,FC的实现目的是相同的;无论何种逻辑要求,FB,FC均可实现。只是实现方式效率不同,这也和工程师个人编程习惯有关。
FB块优点:
1. 易于移植性,对于相同控制逻辑不同参数的被控对象,只要使用不同的背景DB,同一个FB块就可以方便
2. 多重背景,减少重复工作,提高效率
3. 多次调用时,参数修改方便
4. 有独立的存储区
FC块优点:
1. 小巧灵活,对于非多次调用的程序更易理解
2. 不占用额外的存储资源
FB,FC块管脚定义
IN---------变量是外部输入的,只能被本程序块读,不能被本程序块写;
OUT-------是本程序块输出的,他可以被本程序块读写,其他程序通过引脚只能读值不能写;
IN_OUT--- 输入输出变量 本程序块和其他程序都可以读写这个引脚的值。
TEMP -----临时变量,顾名思义是暂时存储数据的变量。这些临时的数据存储在CPU工作存储区的局部数据堆栈(L堆栈)中。
STAT-------在PLC运行期间始终被存储。S7 将静态变量定义在背景数据块(仅对FB而言,FC和OB无静态变量),当被调用块运行时,能读出或修改静态变量;被调用块结束后,静态变量保留在数据块中。
为何定义的FB,FC块,多次调用后程序混乱?
对于,多次调用的程序块,FB块建议更换调用不同的背景DB;FC则需要确保使用的存储地址不重复,即每次调用,块中调用的地址不重复。
为何含有定时器或计数器的FB或FC单次调用ok,多次调用时定时器或计数器混乱?
对于多次调用的FB,FC,如为S7定时器,计数器,则需要在IN接口中定义TIMER或Counter,每调用一次FB或FC,均赋不同的定时器或计数器号。
如为IEC定时器,计数器,则需要在IN接口定义Block_DB,每调用一次FB或FC,均赋不同的DB块给其中的IEC定时器或计数器。
临时变量引起的麻烦
临时变量可以在组织快OB、功能FC和功能块FB中使用,当块执行时它们被用来临时存储数据,一旦块执行结束,堆栈的地址将被重新分配用于其它程序块使用,此地址上的数据不会被清零,直到被其他程序块赋予新值。
需要遵循“先赋值,再使用”的原则。
因此,有常见的几种情况导致程序运行不正常:
1. 某个块程序运行时好时坏,其中某个数值或多个数值偶尔不正常
此问题在于,一定遵循“先赋值,再使用”。否则,TEMP的数值在每个扫描周期开始未有明确的赋值,此地址的数值将是随机的。
2. 多个块使用TEMP,单独使用任意一个都正常,无法一起正常使用
此问题在于,TEMP未能先赋值,再使用;程序块1的TEMP中的数值并没有清零,而是CPU运行机制调用此地址使用或直接分配给程序块2使用,导致这个TEMP地址并不为0,因此程序混乱。
由于内存运行机制并不公开,因此,这一分配过程看起来是随机的。这可能导致,程序多次运行情况下正常,运行一段时间后出现问题。
只要遵循“先赋值,再使用”的原则,就可避免。
3. TEMP无法实现自锁
此问题在于,TEMP数值无法像M点或Q点一样保持上一个周期的数值;TEMP需要在每个扫描周期有一个明确的赋值,即先赋值(写),再使用(读写)
解决方式,FB可使用STAT静态变量;FC可使用M区或全局DB地址。
总结
在使用临时变量TEMP时:
1.不能先使用,再赋值
2.不适用于自锁线圈
3.不适用于上升,下降沿
遇到如上情况,FC块可采用M区或全局DB地址;FB块也可采用自身背景DB的STAT静态变量
在FB,FC中使用第一次调用的某个临时变量,必须先对其赋值即写指令,而不能是读指令。
来源:网络
⇩ 领取!
有人说:SCL将成为PLC的主流编程语言?
现在很多大品牌的中高级 PLC 都支持国际电工委员会 IEC61131 标准中规范的五种编程语言的混合编程,即梯形图(LD)、结构化文本(ST)、流程图(SFC)、指令表(IL)和功能块(FB)。在这五种编程语言中,
此外,由于西门子 S7 系列 PLC 在国内工控领域中使用很广,它的编程软件 Step7 默认情况下只支持梯形图和指令表编程,但通过安装“S7-SCL”软件包和“S7-Graph”软件包可实现结构化文本和流程图编程。
结构化文本是一种类似于计算机高级语言的编程方式,它的语法规范接近计算机中的PASCAL 语言。
所以有人就问:SCL将成为PLC的主流编程语言么?
于是很多电气人发表了自己的看法,一起来看看吧!
bnnyygy 说:
我献丑来一个,半成品,给设备改造的,用的欧姆龙CP1L,ST语言功能块,部分节选。
wenpian 说:
还是梯形图适合逻辑。
ljj977 说:
程序写的不错。tia protal中可以采用SCL与LAD混编的模式。这样的灵活性就更大了。
作为一个有C基础的人来说,用SCL他可能更擅长,入门更快。作为习惯了LAD编程的人员来说,写一般的逻辑关系程序,确实要清晰些。
计算机的普通编程人员将会有一部分人能胜任1200的编程工作,而且他们的转行不会有多大的门坎。可以说,PLC的编程人员来源会更广泛。
fujifa 说:
在JAVA出现之前,C语言的菜鸟们也是认为C语言将一统江湖,在PYTHON出来之前,JAVA的菜鸟们也是这么认为的。菜鸟们总是习惯使用必将,一定等词汇来描述他们认为的事物,为什么老鸟们不这样认为呢?因为老鸟们知道:
1:SCL,也就是ST语言,编译为机器码的执行效率比其他语言效率低。
2:梯形图编程语言也在进步,去看看诸如富士、AB这类在梯形图中使用高级语言编程等增强型梯形图语言的厂家就知道了。
hgxmm123 说:
老外喜欢用SCL语言编程,它功能丰富。国人喜欢用梯形图编程,易于推广。
有些PLC语言不能实现的功能,用SCL就能实现。
twtynijj 说:
最多只能说是备选的语言方法 ,主流怕是很难,可读性并不是很好,推广也难。老外是因为人家母语就是字母组成,对他们来说可读性还是非常强。
现在PLC还是以LAD SFC ST CFC 这一类为代表,也符合IEC标准的。如果哪一家PLC只有一种你说的SCL,怕是干不了几年在中国就只能关门了,这是由市场决定的。
cvlsam 说:
西门子之所以称为SCL而不是ST,是因为其编程语言指令表叫做STL,为了避免混淆,所以叫做SCL,其实就是其他厂家的ST语言。
“还是以 LAD SFC ST CFC 这一类为代表”,看到这句就说明您不太熟悉西门子了啊。
twtynijj 说:
嗯,西门子是不熟悉,刚出社会那会接触过。换工作环境后就没怎么接触。而且也只会用梯形图呀。
pqsh 说:
我觉得,5-10年这些语言都将消失。
人工智能,会听懂人的语言和思想。只要你说清楚,机器就会执行。当然,这样汉语会失去优势,因为汉语逻辑不严谨。
fsjnzhouyan 说:
现在有些智能家居就能接收中文语音控制家电。
vao 说:
梯形图,这种应该是主流趋势,不是你自己擅长什么就一定会主流,工人容易看懂的才好。
gaoyingchun 说:
工控人要失业了
ljj977 说:
在数据的处理方面,SCL还是要比LAD更具有它的它快捷性,计算的功能也是十分强大的。比如一个一维数组,你在使用时,感觉用LAD不难,但一个二维数组、一个多维数组你再使用LAD编程,难度就要大多了。
作为博图软件三大编程语言,SCL就是其中的标配,在原来300/400编程语言中,还没有列入标配行列之中。这也说明了西门子对它的重视,也给大家一个信号。因此了解它、学习它还是有必要的。
SCL是三大语言之一,说它是主流的编程语言不为过吧。
cvlsam 说:
用过AB的梯形图的话,觉得其他语言都可以不要了。
其实三大语言并不包括ST语言。
以前是梯形图,指令表和功能块,现在部分厂商取消了指令表,被SFC替代了。
当然,多学习一点没有错,不过不是以西门子SCL语言为基础,西门子的SCL语言离标准还有点距离,要用也应该从菲尼克斯的学起,人家才是完全符合IEC标准的。
wgefwgef 说:
越是菜鸟,越是水平差,越抵制ST。
逍遥的久鸣 说:
不管白毛黑猫抓到老鼠才是好猫,越简单明了越好,这么多年过去了,梯形图还是那么坚挺!
如果后期维护,现场水平不高,是不是就要失业了?
hnhyczj 说:
高级语言应当是发展的方向。
乌龟船长 说:
老外喜欢用SCL语言编程,它功能丰富。国人喜欢用梯形图编程,易于推广。
fuhuafeng72 说:
SCL确实好,但一些工控不适合。
ljj977 说:
LAD是PLC编程使用最广泛的语言,用户量最多,当然它是老大。但SCL也一定会壮大起来的,因为它有自己优势。这里并不是说LAD不好,但有时候,有些人用SCL去编程反而更方便,特别是熟悉高级语言(如C语言等)的人。这两种语言的使用肯定是因人而异的,喜好不同、知识背景不同,他们的选择就不同。
用LAD语言写的程序,复杂一点的话,一般的电工是看不懂的。说句实在话,LAD语言,当初就是为电工准备的编程语言。那时候只有逻辑控制。电工如果满足了一般的逻辑控制,数据处理程序的编写就成了一句空话,别人用LAD写出来的程序也不见得看得懂。
现在时代不同了,PLC不只是去处理逻辑控制,还多了好多些功能。老早之前,S7-200就明显看到它的结构化编程的思想。300/400,到现在的1200/1500,它们都在朝着更先进的方向发展,LAD的语言更是如此。现在的LAD就是面向开发人员、工程师、技术人员的。再说电工也分好几类吧,一般的电工在工厂里是接触不到编程这一块的。LAD现在也是也是十分强大。
SCL未来将成为主流的语言,并不意味着LAD不是主流语言。大家还是不要误解了我的观点。
SCL能作为标配的编程语言出现在博途中,说明了什么,不正是说明它的存在价值吗。
年轻的朋友们,如果感兴趣,学习一下SCL语言的程序编写,我觉得还是蛮好的。
liuxd6909 说:
但凡是主流都是被大多数人所认同 的,所接受的。
fuhuafeng72 说:
企业有三六九等,很多小作坊,你给他传统的继电器系统原理图都搞不明白,不要说英文类C的程序了。世界就是个矛盾体。
LAD确实是一种不错的编程方式,之于类C,形如安卓之于IOS。
zhanghaiw 说:
做逻辑SCL确实不怎么样,搞搞算法还可以。建议LAD+SCL的组合,感觉非常棒。
965528555 说:
做逻辑也是非常好的,算法更是好用。而且方便转换其他PLC
以上观点都非常棒!至于结论如何,小编自身觉得每个语言都有自己的可取之处,对于大型的主流化编程语言,是作为一个资深的电气人应该了解的内容,时刻把握行业潮流动态,才不会让自己处于被动状态。看了以上内容,你觉得呢?留言哦!
往期优秀文章回顾:
新手学西门子PLC,要从哪开始?「附PLC与电动机控制精品讲解」
相关问答
西门子PLC编程中FB和FC的区别?
FB是带DB块的,每次执行FB,都是从相应的DB块中读数据、写数据到DB块。这样,对于有相同功能的指令,可以用一个FB块,加上不同的DB块,就可以重复调用FB。如电机...
西门子PLC的FB模块怎么用,他有什么功能和作用?
FB=FC+数据库这个数据库是针对你所建的,不是公用的FB=FC+数据库这个数据库是针对你所建的,不是公用的
三菱plc的fb块功能详解?
主要作用有以下几点:1、减少重复编码,因为可以通过多次调用,程序员可以不用对重复的程序段多次编写。2、易于调试,通过对功能块的执行状态的变量输出,方便...
信捷plc有fb块吗?
信捷plc是有fb块的。FB在PLC中相当于一个计算式,可以调用共享数据,由于其调用接口和被调用的共享数据是不变的;FB有专属自己的1到N个“背景数据块”,F...信...
1200plcfb和fc怎么用?
1200plcfb和fc按以下步骤用1、数据块不同:FC使用的是共享数据块,FB使用的是背景数据块举个例子,如果您要对3个参数相同的电机进行控制,那么只需要使用FB编...
PLC300程序FB1中“#start”是什么意思?怎么从0变成1,是通过什么方式实现的?
带井号的是FB局部变量,找找程序里面应该有负值给它的,如果没有可以从调用它的DB负值给它带井号的是FB局部变量,找找程序里面应该有负值给它的,如果没有可以从...
plc中m区和l区区别?
在PLC(可编程逻辑控制器)中,M区和L区分别扮演着不同的角色,主要区别体现在以下几个方面:存储内容与用途:M区(位存储区):主要用于存储运算的中间操作状...在...
西门子FB284中模式4和模式5的区别?
西门子FB284是一个PLC(可编程逻辑控制器)的型号,模式4和模式5是其内置的不同工作模式。以下是它们之间的区别:1.模式4:模式4是逻辑控制模式,主要用于逻辑...
三菱q系列plc如何删除FB?
要删除三菱Q系列PLC中的FB(功能块),首先需要进入编程软件,找到所需删除的FB所在的程序段。然后,找到该FB的调用位置,并将其删除或替换为其他逻辑。接着,...
西门子1200模拟量输入编程实例?
以下是使用西门子S7-1200PLC进行模拟量输入编程的示例代码:1.配置模拟量输入模块在S7-1200PLC的硬件配置中,添加模拟量输入模块,并配置其参数。例如,如...