首页 历史故事结构化编程的优点及实践

结构化编程的优点及实践

【摘要】:结构化编程有如下优点:1)程序只需生成一次,显著减少了编程时间。结构化编程就要涉及到FC和FB中使用局部存储区,使用的名字和大小必须在块的声明部分中确定,如图6-37所示。在FC5中编写程序,如图6-41a所示。

由前述例子可以看出,模块化编程可能会存在大量的重复代码,块不能被分配参数,程序只能用于特定的设备,但是,在很多情况下一个大的程序要多次调用某一个功能,这时应建立通用的可分配参数的块(FC、FB),这些块的输入输出使用形式参数,当调用时赋给实际参数,这就是结构化编程。

结构化编程有如下优点:

1)程序只需生成一次,显著减少了编程时间。

2)该块只在用户存储器中保存一次,显著降低了存储器用量。

3)该块可以被程序任意次调用,每次使用不同的地址。该块采用形式参数(INPUT、OUTPUT或IN/OUT参数)编程,当用户程序调用该块时,要用实际地址(实际参数)给这些参数赋值

结构化编程就要涉及到FC和FB中使用局部存储区,使用的名字和大小必须在块的声明部分中确定,如图6-37所示。当FC或FB被调用时,实际参数被传递到局部存储区。之前我们使用的是全局变量,如位存储区和数据块来存储数据,下面利用局部变量来存储数据。局部变量分为临时变量和静态变量两种,临时变量是一种在块执行时用来暂时存储数据的变量,如图6-37所示。如果有一些变量在块调用结束后还需保持原值,则必须被存储为静态变量,静态变量只能被用于FB块中。赋值给FB的背景数据块用做静态变量的存储区。关于静态变量的详细使用将在后续章节进行说明。

对于可传递参数的块,在编写程序之前,必须在变量声明表中定义形式参数。表6-3列举了几种类型的参数及定义方法。注意,当需对某个参数做读、写访问时,必须将它定义为IN/OUT型参数。

表6-3 形式参数的类型

978-7-111-34922-8-Chapter06-43.jpg

在声明表中,每一种参数只占一行。如果需要定义多个参数,可以用回车键来增加新的参数定义行,也可以选中一个定义行后,通过菜单命令“插入”→“声明行”来插入一个新的参数定义行。当块已被调用后,再插入或删除定义行,必须重新编写调用指令。

现在重新编写前述电动机的控制电路程序。

新建块FC4,定义形式参数如图6-38所示。使用形式参数编写FC4程序,如图6-39所示。

要注意以下问题:

1)如果在编程一个块时使用符号名,编辑器将在该块的变量声明表查找该符号名。如果该符号名存在,编辑器将把它当做局部变量,并在符号名前加“#”号。

2)如果它不属于局部变量,则编辑器将在全局符号表中搜索。如果找到该符号名,编辑器将把它当做全局变量,并在符号名上加引号。

3)如果在全局变量表和变量声明表中使用了相同的符号名,编辑器将始终把它当做局部变量。然而,如果输入该符号名时加了引号,则可成为全局变量。

978-7-111-34922-8-Chapter06-44.jpg

图6-38 FC4程序

在OB1中调用FC4,输入实际参数,如图6-39所示。可以看出,此时的FC4有两个输入参数和一个输入输出参数,分别输入相应的实际地址,实现的功能与前述例子相同,但是此时只编写了一个块FC4。

978-7-111-34922-8-Chapter06-45.jpg

图6-39 调用FC4

重新编写前述求取平方根例子程序,定义局部参数并编写程序,如图6-40所示。

978-7-111-34922-8-Chapter06-46.jpg

图6-40 求取平方根例子程序

【例6-4】工业生产中,经常需要对采集的模拟量进行滤波处理。本例通过将最近三个采样值求和除以3的方式来进行软件滤波。假设模拟量输入处理后的工程量存储在MD44中,为浮点数据类型。

编程思路:将采集的最近的三个数保存在三个全局地址区域,每个扫描周期进行更新以确保是最新的三个数,三数相加求平均即可。

首先定义FC5的形式参数,如图6-41所示。注意:定义的形式参数中,三个采集值Value1、Value2和Value3的参数类型为IN_OUT型,不能为TEMP型,否则将无法保存该数值。

在FC5中编写程序,如图6-41a所示。“程序段1”的含义是根据循环扫描工作方式从左到右的顺序将三个最近时间的采集值保存,注意三个MOVE指令的次序不能改变;“程序段2”的含义是将三个数相加除以3求平均值。

图6-41b中,调用FC5,并赋值实际参数,求得的平均值存放在MD72中。这样,通过不同的实际参数可以重复调用FC5进行多路滤波。

但是,通过此例也可以看出一个问题:我们关心的只是三个数的平均值,而调用FC1子程序时,却需要为三个采集值寻找全局地址进行保存,麻烦且容易造成地址重叠,能不能既不用人为寻找全局地址而又能保存数值呢?通过FB就可以实现。

978-7-111-34922-8-Chapter06-47.jpg

图6-41 程序例子

a)子程序FC1 b)主程序OB1