西门子结构化编程可将不同的控制任务划分为不同的控制区域,相同控制功能数量众多的设备可利用具备多重背景的FB功能块重复调用来解决,使程序简洁、清晰、合理,易读性强,更改方便,为以后系统的升级改造提供了极大的便利。SCL语言的应用,更是大大减小了程序代码的占用空间,使西门子PLC能容纳更大的程序,控制更大的系统。下面就举一实例加以说明。
01所需软件及硬件
博途V15编程软件及仿真软件、西门子1215CPU一台、网线一条。
*注:如无PLC实物,可用仿真软件做测试*
02项目描述
顺丰、京东、邮政等大型物流企业的中转场的输送分拣系统大都是由数量众多、结构各异的皮带机再加上数台高效分拣机组成。因输送分拣的路向繁多,皮带机往往分为不同的线体,每条线体包含若干条皮带以应对不同的路向或Zui终汇集到分拣机以满足其大处理量的要求,皮带机的自动控制是中转场控制系统极其重要的一环。下面的例子以控制一条线体为例加以说明。
该实例为利用SCL语言编写的控制程序,控制一条线体当中的5条皮带启停。说明:
1、此例主要的目的是使大家掌握编程的方法,不是控制的逻辑,每条皮带的控制与起保停类似。具体的控制逻辑要根据实际的需求编写;
2、实际现场一条线体往往不止5条皮带,这里为了测试监控方便只用5条,但利用SCL语言编写控制再多数量的皮带,再多的线体,代码并不会增加,只是改下数量而已,后面会有描述;
3、这个例子可使大家借一斑而窥全豹,初步认知具有多重背景FB块的使用魅力。
03程序编写
1、创建新项目
实际生产中配方的数据已经定好,打开博途V15软件,创建一个名为“SCL循环调用电机”的项目,组态一台固件版本为4.2的1215CPU,如下图1所示:
▲图1▲
2、创建自定义数据类型
将默认的SBR0子程序重命名为配方处理,创建自定义数据类型可把我们从编写大量符号表变量的工作中解脱出来,变量越多,效果越明显。在这个项目中我们创建一个名为“motordata”数据类型的变量,如下图2所示。该数据类型包含4个布尔变量,分别是皮带电机的启动、停止、故障和运行变量。
▲图2▲
3、创建全局DB块
创建全局DB块的目的是为了给五台皮带电机FB块的形参赋实参,而DB块建了个符号名为motor的数组变量,数组元素5个,每个元素的类型为“motordata”,即我们一开始自定义的数据类型,这样我们就不必在DB块里去一个个的输5台电机的变量。节省了时间,提高了效率。图中显示了电机1(Motor【0】)展开的变量,如下图3所示:
▲图3▲
4、编写电机启停程序
该程序编写相对简单,这里为了测试或仿真方便,只写了简答的类似起保停的控制逻辑,实际的控制要根据具体要求来编写。新建名为“Mrun”的块FB1,该段程序用SCL编写,如下图4所示:
▲图4▲
5、编写电机调用程序
这是该例子的核心部分,在项目中新建FB块,命名为DYMrun,程序的变量表与代码如下图5所示:
▲图5▲
创建全局DB块的目的是为了给五台皮带电机FB块的形参赋实参,在静态参数中分别建立“dymrun”和“i”两个变量,“dymrun”为数组变量,用FB1作为数组元素的数据类型,对应5台电机;“i”为循环调用指针,整数类型,分别指向不同的皮带电机。如程序所示,i为0到4,如果电机数量更多,比如12台,那么把4改为11即可。代码很简单,就是一个FOR循环语句,重要的是把全局DB块DB1的数组变量正确赋值到FB1(Mrun)各形参管脚。要理解上述程序需要掌握UDT、SCL、数组、结构化编程等等知识点。
04测试效果
在主程序中调用FB2,为照顾没有实体PLC的学员,我们用仿真进行演示。新建一个监控表,监控表输入了Motor0和Motor2两个电机的变量。主程序及测试的结果如下图6所示:
▲图6▲
▲图7▲
▲图8▲
▲图9▲
图7中Motor0的启动信号为true,其运行信号也为true,证明程序导通,如两个红框内容所示,Motor2也是一样,如两个蓝色框内容所示;图8为复位启动信号后,Motor0和Motor2因已自锁仍继续运行;图9为Motor0按下停止信号,其运行也停止,而Motor2因为发生故障使电机停止运行。其余的几台请有兴趣的学员自行测试。