在SIMATICS7中,用户程序会用到各种各样的“块”——Block。STEP7中,有以下几类块:
1、逻辑块:OB、FB、FC、SFB以及SFC
2、数据块:DB、SDB
3、用户自定义数据类型:UDT
本文将简单介绍以下逻辑块FB、FC和数据块DB,及其在编程中的应用。
一、DB块
DB块是用户程序的一部分,它没有逻辑指令,只包含了用户数据。DB块有两种:
1、共享DB块
共享DB块可被所有的逻辑块访问。
2、实例DB块
实例DB块存储FB块的格式化参数和静态数据。

图1共享DB块、实例DB块
共享DB块一般由程序员根据编程需要手动创建,而实例DB块则通常在调用FB时,都需要相应的对应一个实例DB块,如图2。

图2FB的调用
如果写入的DB块尚不存在,则系统会提示新建一个(如图3),新建之后,实际的FB调用如图4所示。

图3新建实例DB块

图4FB的调用
一般来说,常用3种方式访问DB块内的数据:
1、按“位”访问:,访问的是DB1中第二个字的第0位;
2、按“字”访问:,访问的是DB1中第一个字;
3、按“双字”访问:,访问的是DB1中的第一、第二个字。
二、FB、FC
FB是带有实例DB块的逻辑块,它有自己的静态数据。用户可以通过FB传递参数,通常用FB编写复杂的、频繁调用的函数。由于FB可以通过实例DB块存储数据,因此,用户可随时随地通过实例DB块访问其参数。
FC也可以用来编写复杂的、频繁调用的函数,但与FB不同的是,由于它不带实例DB块,在调用FC后,过程数据需要马上处理,否则就会失效。
用同一个功能的程序,就可以看出FB与FC的区别了。图5给出了分别用FB和FC编写功能相同的一段程序。它们都用三个BOOL量的输入格式化参数I1、I2、I3以及一个BOOL量的输出格式化参数Q1,完成的功能是I1、I2和I3进行“或”运算,结果赋值给Q1。分别在OB1中调用如图6所示。

图5FC、FB编程

图6FC、FB的调用
对比Network6和Network7可以看出,同样是定义了格式化参数I1、I2、I3和Q1,调用FC时,仍需要程序员对其赋值以实际参数;而调用FB时,只要指明了实例DB块后,即使不给格式化参数赋值以实际参数,程序仍能正常运行,FB会访问相应的实例DB块中的参数值来完成程序运行。
调用FB块,并声明了实例DB块后(如图4所示,DB2为实例DB块),系统会根据FB的格式化参数表自动建立实例DB块的数据结构,其与FB的格式化参数表相同。如图7为DB2的数据结构,三个BOOL量输入,一个BOOL量输出,与FB的格式化参数表完全一致。

图7DB2的数据结构
三、小结
FB、FC和DB块是STEP7中频繁使用的“块”。它们各自扮演着自己的“角色“:
1、DB块分为共享DB块和实例DB块,它们保存着用户需要的数据,以备在合适的时候访问;
2、FC类似于C/C++语言里的子函数,用户可以根据需要,在FC中编写合适的程序,完成特定的功能。FC中的格式化参数表类似于C/C++语言里形参,在调用FC时,需要给格式化参数表相应的赋值以实际参数。当然,与C/C++语言里类似,FC也可以不带格式化参数表,其调用时,如图8所示。

图8FC1,不带格式化参数表
3、若要类比的话,FB比较类似于C/C++中的”结构“或”类“,有函数体,也有数据类型,当然不太形象。FB在调用时,都要同时声明一个实例DB块,该DB块的数据结构与FB中的格式化参数表保持一致。FB也可以不带参数表,相应的实例DB块为一个空块,通常建议FB要编制自己的参数表。