第第3章章 西西门门子子S7-300 程序程序结结构构程序结构在很大程度上决定着用户编写程序的思路,西门子S7-300 PLC在程序结构方面与S7-200有着很大不同,S7-300 PLC的程序结构更模块化、更侧重于各个程序块之间的互相“调用”这样做的优点是结构清晰,易于理解,更易于移植本章主要介绍S7用户程序结构及各种块的生成与调用,结合工程实际,详细介绍了功能(FC)、功能块(FB)、组织块(OB)和数据块(DB)的编辑与使用方法本章学习目标】功能(FC)的编辑和使用;功能块(FB)的编辑和使用;多重背景的编辑与使用;组织块(OB)的编辑与使用3.1认识用户程序的基本结构认识用户程序的基本结构S7 CPU上运行的有两种程序:操作系统和用户程序1)操作系统 每个S7 CPU内部都固化有集成的操作系统,它为CPU提供一套系统运行和调度的机制,用于组织与特定控制任务无关的所有CPU功能操作系统主要完成的任务包括处理重启(暖启动和热启动);更新输入的过程映像表并刷新输出的过程映像表;调用用户程序;采集中断信息,响应中断组织块;识别错误并进行错误处理;管理存储区域;与编程设备及其他设备进行通信。
2)用户程序 用户程序是用户为了处理特定自动化任务而创建的程序,并将其下载到CPU中用户程序需要完成的任务包括:确定重启条件、处理过程数据、响应中断、处理正常程序周期中的干扰等SETP7编程软件鼓励用户设计用户程序结构,即将整个控制程序分成单个、独立的可以完成某部分功能的程序块,主程序再分别去调用各个独立的程序块这样做有很多优点:1)复杂的大程序更容易理解;2)可以标准化单个程序块;3)简化程序组织;4)易于修改程序;5)可以针对每一个程序块进行测试,简化调式难度;6)程序移植性更好根据控制要求合理使用用户程序中的块可以构造不同的程序结构,达到程序优化的目的3.1.1 用用户户程序中的程序中的块块介介绍绍在STEP7中,用户程序及所需的数据都存放在各种块中,像OB、FB、FC、SFB、SFC这些都是程序中要用到的块,我们称其为逻辑块逻辑块类似于子程序,它们可以使程序标准化、结构化,可以简化程序组织,使程序清晰明了,便于维护和修改用户程序中各种块的分类的作用见表3-1块的类型简要描述逻辑块组织块(OB)操作系统与用户程序的借口,决定用户程序的结构系统功能块(SFB)集成在CPU中,通过SFB调用一些重要功能,有存储区。
系统功能(SB)集成在CPU中,通过SFB调用一些重要功能,没有存储区功能块(FB)用户编写的可经常被调用的子程序,有存储区功能(FC)用户编写的可经常被调用的子程序,没有存储区数据块背景数据块(DI)调用FB和SFB时用于传递参数的数据块,在编译过程中自动生成数据共享数据块(DB)存储用户数据的数据区域,供所有的块使用表3-1 用户程序中的块(1)组织块(OB)组织块(OB)是操作系统与用户程序的接口,由操作系统调用,用于控制扫描循环和中断程序的执行,PLC的启动和错误处理等等可以使用的组织块与CPU的型号有关STEP7中常用的组织块见表3-2OB编号类型优先级说明OB1启动或上一次循环结束时执行1主程序循环OB10OB17时间中断072在设置的时间日期执行OB20OB23时间延迟中断0336延时后起动执行OB30OB38循环中断08715以设定的时间为周期运行OB40OB47硬件中断071623检测到来自外部模块的中断请求时起动OB55状态中断2DPV1中断(PROFIBUS-DP中断)OB56刷新中断2OB6164同步循环中断1425OB70I/O冗余错误25OB72CPU冗余错误28OB73通信冗余错误25OB80时间错误OB81电源故障OB82诊断中断OB83插入/取出模块中断OB87通信错误OB100OB102暖启动、热启动、冷启动27启动方式OB121编程错误OB122I/O访问错误表3-2 部分常用组织块OB1用于循环处理,是用户程序中的主程序。
操作系统在每一次循环中调用一次OB12)临时局域数据生成逻辑块(OB、FC、FB)时,可以声明临时局域数据,这些数据是临时的局域数据只能在生成它们的逻辑块内使用但所有的逻辑块都可以使用共享数据块中的共享数据3)功能(FC)功能是用户编写是没有固定存储区的块,其临时变量存储在局域数据堆栈中,功能执行结束后,这些数据就丢失了使用共享数据区来存储那些在功能执行结束后需要保存的数据4)功能块(FB)功能块是用户编写的有自己的存储区(背景数据块)的块,每次调用功能块时需要提供各种类型的数据给功能块,功能块也要返回变量给调用它的块这些数据以静态变量的形式存放在指定的背景数据块(DI)中,临时变量TEMP存储在局域数据堆栈中5)数据块(DB)数据块是用于存放执行用户程序时所需要的变量数据的数据区数据块中没有STEP7的指令,STEP7按数据生成的顺序自动为数据块中的变量分配地址数据块分为共享数据块和背景数据块6)系统功能块(SFB)和系统功能(SFC)系统功能块和系统功能是为用户提供的已经编好的程序块,功能是固定的,可以调用但是不能修改它们作为操作系统的一部分,不占用程序空间SFB有存储功能,其变量保存在指定给它们的背景数据块中。
不同的是,SFC没有存储功能3.1.2 3.1.2 用用户户程序程序结结构构(1)线性程序所谓线性程序结构,就是将整个用户程序连续放置在一个循环组织块(OB1)中,块中的程序按顺序执行,CPU通过反复执行OB1来实现自动化控制任务这种结构和PLC所代替的继电器控制类似,CPU逐条执行指令线性程序一般适用于相对简单的程序编写2)分部式程序所谓分部式程序,就是将整个程序按任务分成若干个部分,并分别放置在不同的功能(FC)、功能块(FB)及组织块中,在一个块中可以进一步分解成段在组织块OB1中包含按顺序调用其他块的指令,并控制程序执行在这种程序结构中,既无数据的交换,也不存在重复调用的程序,功能(FC)、功能块(FB)不传递也不接收参数,类似于子程序的调用分部式程序结构的编程效率比线性程序有所提高,程序测试也较方便,适合于不太复杂的程序编写3)结构化程序所谓结构化程序,就是处理复杂自动化控制任务的过程中,为了使任务更易于控制,把控制过程中类似或相关的功能进行分类,分割为可同时应用于多个任务的通用程序块(FC或FB)OB1通过调用这些程序块来完成整个控制任务结构化程序的特点是每个块(FC或FB)在OB1中可能会被多次调用,以完成具有相同功能的不同控制对象。
这种结构可以简化程序设计过程、减小程序长度、提高编程效率,适合于较复杂的程序设计根据需要,用户程序可以由不同的块构成,各种块的调用关系如图3-1所示:图3-1 各种块的调用关系3.23.2功能的生成与功能的生成与调调用用如果程序块不需要保存数据,可以使用功能FC来编程与FB相比,FC不需要配套的背景数据块功能FC有无参功能(FC)和有参功能(FC)两种所谓无参功能(FC),是指在编辑功能(FC)时,在局部变量声明表中不进行形式参数的定义,在功能(FC)中直接使用绝对地址完成控制程序的编写这种方式一般应用于分部式结构的编程,每个功能(FC)实现整个控制任务中的一部分,不能重复调用有参功能(FC)是指编辑功能(FC)时,在局部变量声明表内定义了形式参数,在功能(FC)中使用了虚拟的符号地址完成控制程序的编写,以便在其他块中能重复调用这种方式一般应用于结构化程序的编写中3.2.1 3.2.1 实训实训:使用有参:使用有参FCFC实现实现三台三台电动电动机启停控制机启停控制【任【任务务提出】提出】使用有参功能(FC)实现三台电动机的启停控制任【任务务分析】分析】经过分析,控制对象为三台电机,三台电机的控制功能完全相同,都是实现启动和停止功能,所以可以编辑一个有参功能(FC1),在FC1中用虚拟的形式参数来编写电机启动和停止的功能,然后在主程序OB1中针对每一台电动机分别调用FC1,三台电机共调用三次FC1,每次调用FC1时,只需要该台电动机的实际参数赋给FC1中定义的形式参数即可。
任【任务实务实施】施】任务的新建、PLC的硬件配置及接线、硬件组态方法与之前实训类似,在此不再赘述,本实训着重讲述FC的创建1.1.编辑编辑功能功能FC1FC1(1)生成功能新建名为“三台电机启停控制”的项目,CPU为314C-2DP执行SIMATIC管理器的菜单命令“插入”“S7块”“功能”“,在弹出的“属性-功能”对话框中,默认的名称为“FC1”,设置“创建语言”为“LAD”如图3-2所示单击“确定”按钮后,在SIMATIC管理器右边窗口出现FC1图3-2 功能的生成(2)在变量声明表中定义局部变量双击打开FC1,程序区上面的区域就是FC1的变量声明表,在变量声明表中声明(定义)局部变量,局部变量只能在它所在的块FC1中使用,对功能FC1之外的程序区无效局部变量名必须以英文字母开始,只能由字母、数字、和下划线组成,不能使用汉字局部变量有IN、OUT、IN_OUT、TEMP和RETURN五种,而功能块FB则有IN、OUT、IN_OUT、TEMP和STAT五种类型具体如图3-3、表3-3所示图3-3 局部变量声明表变量符号名称数据类型声明变量类型注释STARTBoolIN起动按钮STOPBoolIN停止按钮MOTORBoolOUT电动机表3-3 定义局部变量在变量声明表中赋值时,不需要指定存储器地址。
根据各变量的数据类型,程序编辑器自动为所有的局部变量指定存储器地址3)编写功能FC1中的程序FC1中的程序就是来描述第(2)步中定义的局部变量之间的逻辑关系,最终完成该功能FC1要实现的功能在引用局部变量声明表中定义的局部变量时,STEP7会自动在局部变量名之前加上“#”号譬如,在常开触点地址位置直接输入“START”,则系统会直接显示“#START”,也可以在常开触点位置单击鼠标右键,然后再单击“插入符号”命令添加变量声明表中的符号,依次添加程序的地址为已经定义的变量名称完成程序如图3-4所示图3-4 FC1编辑完成FC1的程序后,单击工具栏的“保存”按钮保存FC1程序4)编辑OB1程序不管是功能FC还是功能块FB都需要在主循环程序OB1里面进行调用才能实现其功能,FC1编辑完成后,双击打开OB1,再打开界面左侧FC块文件夹,会发现FC1已经被添加进FC块文件夹了,双击FC1,FC1就会插入在右侧编程区,调用FC1时,需要给FC1块的局部变量赋值在本实训中,第一台电动机对应的启动信号为I0.0,停止信号为I0.1,输出为Q4.0,所以将I0.0赋给“START”,将I0.1赋给“STOP”,将Q4.0赋给“MOTOR”。
OB1程序如图3-5所示图3-5 编辑OB1 程序3.2.2 实训实训:使用无参功能(:使用无参功能(FC)实现实现多种液体混多种液体混合系合系统统控制控制【任【任务务提出】提出】使用有参功能(FC)实现多种液体混合控制系统如图3-6所示为一搅拌控制系统,由3个开关量液位传感器,分别检测液位的高、中和低现要求对A、B两种液体原料按等比例混合,请编写控制程序要求:按起动按钮后系统自动运行,首先打开进料泵1,开始加入液料A中液位传感器动作后,则关闭进料泵1,打开进料泵2,开始加入液料B高液位传感器动作后,关闭进料泵2,起动搅拌器搅拌10s后,关闭搅拌器,开启放料泵当低液位传感器动作后,延时5s后关闭放料泵按停止按钮,系统应立即停止运行图3-6 多种液体混合控制系统示意图【任【任务务分析】分析】经过分析,可以将整个控制过程分为四个阶段,第一阶段为液料A的进料控制,用FC1来实现;第二阶段为液料B的进料控制,用FC2来实现;第三阶段为搅拌器控制,用FC3来实现;第四阶段为出料控制,用FC4来实现这里的FC1、FC2、FC3、FC4不需要定义形式参数。