您现在的位置是:首页 > PLC技术 > PLC技术

STEP 7中FC结构化编程的实现

来源:艾特贸易2017-06-04

简介为每个通用程序结构建立好参数表后,还需要在主程序中对之进行调用。以电机单向启动/停止的程序为例,程序如图 6-3 所示,图中主要的程序是在 OB1 中编写的。其中, I0.0 为启动按

    为每个通用程序结构建立好参数表后,还需要在主程序中对之进行调用。以电机单向启动/停止的程序为例,程序如图6-3所示,图中主要的程序是在OB1中编写的。其中,I0.0为启动按钮,I0.1为停止按钮,Q 4.0控制电机的接触器。该程序只能完成一个特定的控制。
OB1电机起停控制程序
    6-3    OB1电机起停控制程序    OB1中的电机起停控制程序是线性化编程,下面讲解该例子的结构化编程方法。现在为FC1声明变量,FC1的变量声明表如表6-1所示。    6-1    FC1的变量声明表
FC1的变量声明表
    FC1中编写程序见图6-4
FC1电机起停控制程序
    6-4    FC1电机起停控制程序    保存后,退出FC1梯形图编辑器界面,这样FC1就成了电机单向启动/停止的通用程序。这一结构在程序中可以被多次调用,在每次调用中再指定具体的控制目标。如图6-5所示,进入OB1梯形图编辑器界面。在OB1中调用FC1(在左边是指令列表FC blocks中选中FC1拖放到一个网络上),图中,FCt框中的变量称为形式参数,在框外填上的地址称为实际参数,PLC在运行中每次调用FC1时,把实际参数代到形式参数中进行运算,这称为参数设置。可以看见FC1的输入参数StartStop出现在FC1的左侧输入端列表上,FCl的输出参数Motor出现在FC1的右侧输出端列表上。对形参Start赋予绝对地址I0.0,对形参Stop赋予绝对地址I0.1,对形参Motor赋予绝对地址Q 4.0。若FC1内的程序如图6-5所示,则实际上FC1完成I0.0I0.1对电机接触器Q 4.0的启动停止控制。FC1调用多次可以完成多台电机的启动停止控制。
在OB1中调用FC1通用程序
    6-5    OB1中调用FC1通用程序    通过上面的例子可以看出,凡是通用的、典型的程序,都可以参数化、结构化。在STEP 7中结构化编程的工作顺序是:    1)FCFB的变量声明表中规范变量,也就是声明变量的名称。    2)变量的类型和变量的数据类型。    3)在编写程序的时候,不使用实际地址,而使用变量名称(形式参数),得到一个通用的程序。    4)在调用这些通用程序(结构)的时候,利用参数设置的方法指定实际的控制条件和控制目标。    [6-1] 编写故障报警通用程序,完成故障信息显示的控制,故障信息显示的控制要求如下:设计故障信息显示电路,故障信号为1时,使报警指示灯以2Hz的频率闪烁,操作人员按复位按钮后,如果故障已经消失,指示灯熄灭。如果没有消失,指示灯转为常亮,直至故障消失。    分析题目:在第4章中做过一个故障信息显示控制程序,是在OB1中,按照故障信号和指示灯信号的实际地址来编程的,只能处理一个故障,现在采用结构化编程,把它参数化、结构化,这就是故障显示的通用程序。    先建立功能块,取名FC2,其变量声明表如表6-2所示。    6-2    FC2的变量声明表
FC2的变量声明表
    按照控制要求,利用变量声明表中的参数,编写程序如下。
利用变量声明表中的参数,编写程序如下
    程序中,变量值符号前面有“#”的,就是局部变量(Local Variable)。全局变量(Global Variable,在符号表中定义)的变量名上会有双引号。如果全局变量和局部变量没有重名,系统会自动辨别;如果有重名,系统首先会认为是局部变量,如果不是则需要用户在输入的时候自己加上双引号。    现在,FC2就可以被多次调用了。在OB1中两次调用FC2的例子如下。
在OB1中两次调用FC2的例子
    程序中的M100.3是一个闪烁的信号。可以自己编程实现,也可以利用系统的ClockMemory,参照硬件组态。    在变量声明表中把MemoEdge两个变量放在in_out变量中,是因为这两个变量在程序中要读/写。在调用FC2时,这两个变量就作为形式参数出现。    临时变量TEMP用来存放中间结果,变量值不需要从外面送进来,也不需要送出去。但变量MemoEdge不能定义为临时变量,因为临时变量存放在L堆栈(Local Stack)中。当FC2执行完毕,返回主调块时,在L堆栈中的FC2的临时变量就会被清除。也就是说,在FC中的临时变量不能记住上一次调用时的数值;而变量MemoEdge在上一个扫描周期所取得的状态是必须记住的。在程序调用中,如果临时变量的数量超过了L堆栈的允许长度,CPU进入了STOP状态,并且,把停机原因“Stop caused by error when allocating lo-cal data”写入诊断缓冲区diagnostics buffer中。