PLC Structured Text Object Oriented Programming
PLC结构化文本(ST)——方法(Method)
什么是方法
一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。---C#方法
方法是语句的集合,它们在一起执行一个功能。
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
---Java方法
PLC ST中的方法定义与上述类似,并无其它区别。国内PLC工程师在写ST代码时,使用最多的是PROGRAM(PRG)和ACTION(ACT),显而易见这些程序块只适合面向过程编程(OPP),这里不讨论OPP和OOP哪种编程方式好,各有各的应用场景和范围。
这里只介绍OOP中的方法,当然方法Method并不是只可以在面向对象编程时才能使用,其实IEC61131-3新增的OOP功能及特性并不局限某种编程模式,换句话说在OPP中也可以使用属性、接口、方法等。只不过混合使用会让程序变得复杂难懂显得不伦不类。
建议:在PLC程序设计时,面向过程编程(OPP)不要掺杂面向对象编程(OOP)的功能特性,反之亦然。
如何创建方法
- 1.FB创建方法Method
这里使用TwinCAT3程序编译器创建方法,使用CODESYS源生平台或CODESYS其它二次开发平台都是可以的。作者工作中使用TwinCAT3较多,所以后面的文章基本全部使用TwinCAT3作为工具编写例程。
//变量声明区
METHOD eat
VAR_INPUT
END_VAR
-----------------
// 代码编辑区
- 2.PRG创建方法Method
//变量声明区
METHOD test
VAR_INPUT
END_VAR
-----------------
// 代码编辑区
Tips : 在使用ST面向对象编程时,一般只有一个PRG程序且不会给它创建Method方法块。所以后续介绍OOP时不会使用PRG + Method这种方式。
方法特点
- 1.局部临时变量特点:
在方法内部声明的变量为本地临时变量,FB及FB其它成员无法访问。比如在VAR...END_VAR内部声明的整型变量eatTimes仅作用于eat当前方法,其它任何地方无法访问。
METHOD eat
VAR_INPUT
END_VAR
VAR
eatTimes : INT; // 吃饭次数
END_VAR
-----------
eatTimes := eatTimes + 1;// 临时变量,一个周期后初始化为0
Tips : 方法(Method)和函数(Function)类似,内部声明的变量为局部临时变量,每次退出(Return)之后变量会重新初始化。因此示例中eatTimes := eatTimes + 1并不会跟想象中的一样累加。
- 2.方法内部声明静态变量(STAT)
在方法内部声明静态变量可以实现上述效果,每次程序退出时(Return)并不会重新初始化静态变量。
METHOD eat
VAR_INPUT
END_VAR
VAR_STAT
eatTimes : INT; // 吃饭次数
END_VAR
----------
eatTimes := eatTimes + 1; // 静态变量,一个周期后仍然保持当前值.
Tips :PRG和FB声明的内部变量默认都是静态变量,FUN和METHOD声明的内部变量默认都是临时变量。VAR_TEMP声明临时变量,VAR_STAT声明静态变量。
方法调用
// main 主程序中实例化
PROGRAM MAIN
VAR
dog : FB_Dog; // 实例化FB_Dog,dog对象
bTest : BOOL;
END_VAR
-----------
IF bTest THEN
dog.eat();
bTest := FALSE;
END_IF
实例化FB_Dog,使用对象dog点出eat方法。
Tips : 此处的方法默认为PUBLIC,方法修饰符PUBLIC、PRIVATE、PROTECTED、INTERNAL以及ABSTRACT以后会在后续章节介绍。
总结
方法Method是FunctionBlock的内部成员,方法内部声明的变量为局部临时变量,方法调用可以使用对象.方法名方式,也可以FB内部方法成员之间相互调用。
标签:eatTimes,END,变量,ST,PLC,VAR,方法,Method From: https://www.cnblogs.com/JSheng/p/18393155