PLC的程序结构_廖常初
- 格式:pdf
- 大小:14.17 KB
- 文档页数:2
HMI及PLC控制系统
PLC的程序结构
廖常初
(重庆大学,重庆400044)
摘 要:介绍PLC几种典型的程序结构,为PLC的用户和国产PLC厂家提出了选择PLC程序结构的建议。
关键词:PLC;程序结构
Program Structure of PLC
LIAO Chang-chu
(Chongqing University, Chongqing 400044, China)
A bstract: Several typical program structures of PLC are introduced and PLC program structure selection advices are given for PLC users anddomestic PLC manufactures.
Keywords: PLC; program structure
所有PLC的用户程序都由主程序、子程序(S7-300/400称为功能和功能块)和中断程序组成。
实际上不同的PLC的程序结构有很大的区别,程序结构的好坏,与程序的可移植性、可复用性、程序封装能力有很大的关系。
程序结构是设计或选择一个理想的PLC产品首先应考虑的最重要的问题。
1 几种典型的PLC程序结构
国内流行的三菱FX系列,西门子S7-200、S7-300/400系列分别代表了3种不同的程序结构。
此外还应注意IEC 61131-3标准规定的程序结构,下面分别讨论它们的特点。
1.1三菱FX系列的程序结构
FX系列的用户程序由主程序、子程序和中断程序组成。
在每个扫描循环周期,CPU都要调用一次主程序。
主程序可以调用子程序,小型控制系统可以只有主程序。
中断程序用于快速响应中断事件。
在中断事件发生时,CPU将停止执行当时正在处理的程序或任务,去执行用户编写的中断程序。
执行完中断程序后,继续执行被暂停执行的程序或任务。
FX的子程序和中断程序没有局部变量,子程序没有输入、输出参数,程序模块之间没有清晰的接口,难以对外部隐藏程序模块内部的代码,从而实现模块化编程。
1.2西门子S7-200的程序结构
S7-200的程序组织单元(Program Organizational Unit,简称为POU)包括主程序、子程序和中断程序。
输入I、输出Q、变量存储器V、内部存储器位M、定时器T、计数器
C等属于全局变量,所有的POU都可以使用它们。
每个POU均有自己的局部变量,局部变量只能在它所在的POU中使用。
子程序的4种局部变量:
(1) 临时变量TEMP是暂时保存在局部数据堆栈中的局部变量。
只有在调用POU时才能使用它的临时变量,POU执行完后,不再保存临时变量的值。
主程序和中断程序只有临时变量。
(2)输入参数IN的值由调用它的POU提供。
(3)输出参数OUT用来将功能的执行结果返回给调用它的POU。
(4)IN_OUT是输入_输出参数,其初始值由调用它的POU传送给子程序,并用同一变量将子程序的执行结果返回给调用它的POU。
使用具有输入、输出参数和局部变量的子程序,易于实现结构化编程,对于长期生产同类设备或生产线的厂家尤为有用。
这些厂家的编程人员为设备的各组件或工艺功能编写了大量的通用的子程序。
即使不知道子程序的内部代码,只要知道子程序的功能和输入、输出参数的意义,就可以通过程序之间的调用快速“组装”出满足不同用户要求的控制程序,就好像用数字集成电路芯片组成复杂的数字电路一样。
子程序的输入、输出参数是实现结构化编程的必要条件。
子程序和中断程序如果没有局部变量,只能使用全局变量。
将这样的子程序和中断程序移植到别的项目时,需要重新统一分配它们内部使用的全局变量的地址,以保证不会出现地址冲突。
当程序很复杂,子程序和中断程序很多时,这种重新分配全局变量地址的工作量非常大,也很容易出错。
收稿日期:2010-11-26
42自动化应用www.auto-apply.com
HMI及PLC控制系统
自动化应用
43
2011 2期
如果子程序和中断程序有局部变量,并且在它们内部只使用局部变量,不使用全局变量,因为与其他POU没有地址冲突,不需作任何改动,就可以将这样的子程序和中断程序移植到别的项目中去。
1.3西门子S7-300/400的程序结构
S7-300/400将子程序分为功能(FC)和功能块(FB)。
S7-300/400的共享数据块可供所有的逻辑块使用。
功能是用户编写的没有固定的存储区的程序块,
类似于S7-200的子程序。
其输入、输出参数和临时变量存储在局部数据堆栈中,功能执行结束后,不再保存这些数据。
可以用全局变量来存储那些在功能执行结束后需要保存的数据,但是会影响功能的可移植性。
功能的局部变量中的返回值实际上属于输出参数。
功能块是用户编写的有自己的存储区(背景数据块)的程序块,功能块的局部变量包括临时变量、输入/输出参数和静态变量。
临时变量存储在局部数据堆栈,其他局部变量存放在调用功能块时指定的背景数据块中。
功能块执行完后,背景数据块中的数据不会丢失,但是不会保存局部数据堆栈中的数据。
1.4 IEC 61131-3的程序结构
IEC 61131-3是PLC的编程语言标准,对应的国家标准为GB / T 15969.3-2005。
IEC 61131-3是世界上第一个,也是至今为止唯一的工业控制系统的编程语言标准。
IEC61131-3有三种POU:程序、功能块和功能。
(1)功能:是有多个输入参数和一个输出参数(返回值)的POU,返回值的名称与功能的名称相同,需要定义返回值的数据类型。
调用具有相同输入值的功能总是返回相同的结果。
在一个功能内,可以调用另外的功能,但是不能调用功能块或程序。
功能可定义的局部变量有VAR和输入参数VAR_INPUT。
IEC 61131-3定义了一系列标准的功能和功能块。
(2)功能块:是带有多个输入/输出参数和内部存储单元的POU,功能块的返回值与其内部存储单元的值有关。
功能块内可以调用别的功能块或功能,但是不能调用程序。
在调用功能块之前,必须在要调用功能块的POU中,为每次调用声明功能块的实例,操作系统将为每次调用分配功能块专用的存储区(类似于S7-300/400的背景数据块)。
(3)程序:项目中至少必须有一个程序,可以在程序中调用功能和功能块,程序有局部变量。
1.5 S7-300/400与IEC 61131-3程序结构的区别
(1)S7-300/400的功能可以有多个输出参数,返回值也属于输出参数。
IEC 61131-3的功能只有一个返回值。
(2)在声明IEC 61131-3的功能块的实例时,自动分配用于保存功能块局部变量的专用存储区,用户程序不
能直接访问该存储区。
S7-300/400的功能块的局部变量(不包括临时变量)保存在它的背景数据块中。
其他逻辑块可以访问背景数据块中的变量,但是由此带来一些问题。
如果需要多次调用同一个功能块来控制同一类型的被控对象,每次调用都需要指定一个背景数据块,但是这些背景数据块中的变量可能又很少,这样在项目中就出现了大量的背景数据块“碎片”。
可以使用多重背景来减少背景数据块的数量。
但是需要增加一个用来管理多重背景的功能块。
背景数据块使程序结构复杂化,但是实际上别的
POU一般并不需要访问背景数据块,它的优点很难发挥出来。
这可能是IEC 61131-3没有完全采用S7-300/400的程序结构的原因之一。
(3)S7-300/400的功能块的局部变量有临时变量和静态变量,IEC 61131-3的功能块的内部变量VAR相当于S7-300/400的静态变量。
(4)S7-300/400将数据区划分为数据块来使用,数据块的大小与数据块中定义的变量的数据类型和变量的个数有关。
在访问数据块时,需要指定数据块的编号和数据块内部的地址。
IEC 61131-3的程序结构中没有数据块。
2 对PLC程序结构的建议
2.1对PLC用户的建议
(1)小型控制系统可以选用类似FX系列程序结构的PLC。
(2)要求较高时可以选用类似S7-200程序结构的PLC。
(3)系统较大、对程序的可移植性要求较高时,可选用S7-300/400,或其他采用IEC 61131-3程序结构的PLC。
2.2 对国产PLC厂家的建议
(1)鉴于局部变量与子程序的输入、输出参数的重要作用,建议小型PLC至少采用类似于S7-200的程序结构,子程序有输入、输出参数,子程序和中断程序有局部变量。
其缺点是子程序没有专用的存储区,如果在执行完子程序后有需要保存的数据,不能使用子程序的临时局部变量,只能使用全局变量来储存它们。
(2)最好采用IEC 61131-3的程序结构。
S7-300/400或IEC 61131-3的程序结构比较理想,其功能块内部可以全部使用局部变量,不使用全局变量,具有良好的可移植性。
相对而言,IEC 61131-3的程序结构比较简单,但是其功能只有一个输出变量(返回值)。
建议采用IEC 61131-3的程序结构,但是功能可以有多个输出参数。