就siemens S7-300/400而言:我个人并不赞同大量使用FB;因为大量使用FB会耗费比较多的背景DB;这样一来DB的数目繁多、如果采用多重背景数据DB,那样DB的结构又会变得复杂。用FC结合共享DB足以处理绝大多数运算,我们可以将一个DB分配给x个FC使用,编程人员可以预先定义好,并规划好共享DB的结构,最好按照某个工艺段最大数量工艺设备来规划。比如我们可以把某个工艺段设备控制放在某一个FC里面,上面那个规划好的共享DB可以专门给这个FC使用,这个FC里面可以调用用户预先开发好的或者库里面的各种模块,从而来完成这个工艺段设备的控制。下一个工艺段的程序结构思想和这个相同,建立另外一个FC,拷贝上面规划好的共享DB,这样共享DB就不需要再去建了,最好FC和DB号码相同,这样更有利于编程和程序的管理;比如FC201控制的是工艺段1,而对应的DB可以是DB201。本人也读过德国人开发的大型PLC程序,人家编程确实非常优美、而且典雅;可以说是PLC程序中的艺术品;学到了不少东西,得到不少借鉴。我把我目前做的项目OB1的结构拷贝给大家参考一下,我希望我能给那些热爱PLC的人们提供一点点启发和帮助,同样也希望能与大家共勉。
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ★★★DCS与1#辊压机、2#辊压机系统通讯程序★★★
CALL FC 301 //接受来自1#辊压机的数据 shared db DB301
CALL FC 302 //发送数据到1#辊压机 shared db DB302
CALL FC 303 //接受来自2#辊压机的数据 shared db DB303
CALL FC 304 //发送数据到2#辊压机 shared db DB304
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ★★★1#、2#水泥粉磨系统底层(PLC)控制程序★★★
CALL FC 310 //群组预警、过程报警、主机设备运行时间记录等 shared db DB310
CALL FC 311 //熟练进料及存储系统 shared db DB311
CALL FC 312 //石子、石灰石进料系统 shared db DB312
CALL FC 313 //石灰石、石膏进料系统 shared db DB313
CALL FC 314 //粉煤灰库顶袋收尘系统 shared db DB314
CALL FC 315 //粉煤灰库底流化、输送系统 shared db DB315
CALL FC 316 //水泥配料收袋尘系统 shared db DB316
CALL FC 317 //1#水泥配料系统 shared db DB317
CALL FC 318 //1#辊压机预粉磨系统 shared db DB318
CALL FC 319 //1#球磨粉磨系统 shared db DB319
CALL FC 320 //出球磨斜槽袋收尘系统 shared db DB320
CALL FC 321 //1#球磨出料输送系统 shared db DB321
CALL FC 322 //2#水泥配料系统 shared db DB322
CALL FC 323 //2#辊压机预粉磨系统 shared db DB323
CALL FC 324 //2#球磨粉磨系统 shared db DB324
CALL FC 325 //2#球磨出料输送系统 shared db DB325
CALL FC 326 //水泥库顶袋收尘、斜槽输送系统 shared db DB326
CALL FC 327 //1#水泥库底流化、出料系统 shared db DB327
CALL FC 328 //2#水泥库底流化、出料系统 shared db DB328
CALL FC 329 //3#水泥库底流化、出料系统 shared db DB329
CALL FC 330 //4#水泥库底流化、出料系统 shared db DB330
CALL FC 331 //5#水泥库底流化、出料系统 shared db DB331
CALL FC 332 //水泥包装系统 shared db DB332
CALL FC 333 //太空包包装系统 shared db DB333
CALL FC 334 //水处理系统 shared db DB334
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ★★★★1#、2#水泥粉磨系统模拟量处理程序★★★
CALL FC 361 //模拟量地址从PIW512~PIW575(每个群组32个模拟量)shared db DB361
CALL FC 362 //模拟量地址从PIW576~PIW639(每个群组32个模拟量)shared db DB362
CALL FC 363 //模拟量地址从PIW640~PIW703(每个群组32个模拟量)shared db DB363
CALL FC 364 //模拟量地址从PIW704~PIW765(每个群组32个模拟量)shared db DB364
CALL FC 365 //模拟量地址从PIW766~PIW827(每个群组32个模拟量)shared db DB365
CALL FC 371 //模拟量地址从PQW512~PQW575(每个群组16个模拟量)shared db DB371
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ★★★1#、2#水泥粉磨系步进型PID控制程序★★★
CALL FC 381 //开关型电动执行器控制群1(每个群控制16个回路STEP型电动执行机构)shared db DB381
CALL FC 382 //开关型电动执行器控制群2(每个群控制16个回路STEP型电动执行机构)shared db DB382
// ★★★1#、2#水泥粉磨系统连续PID控制程序★★★
CALL FC 385 //连续量型PID控制器控制群1(每个群控制16个回路连续量的PID控制器)shared db DB385
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
// ★★★评估CPU执行PLC程序的时间以及PID程序初始化标志位复位★★★
L #OB1_PREV_CYCLE //Cycle time of previous OB1 scan (milliseconds)
T DB300.DBW 0
L #OB1_MIN_CYCLE //Minimum cycle time of OB1 (milliseconds)
T DB300.DBW 2
L #OB1_MAX_CYCLE //Maximum cycle time of OB1 (milliseconds)
T DB300.DBW 4
A M 17.0
R M 17.0 //OB1第一个循环结束复位初始化标志位(用作PID控制器初始化)