TwinCAT 3_PLC_OOP教程
Version 3.1
毕孚自动化设备贸易(上海)有限公司
2017 年 5 月
前言
TwinCAT3 是基于 PC 的控制软件并且它开启了一个新的时代,是倍福公司历
史上又一个里程碑。
特别是在高效的工程领域中 TwinCAT3 将模块化思想以及其灵活的软件架构,
融入到整个平台。
几乎每一种控制应用程序都能在 TwinCAT3 中实现。从印刷设备、木工设备、
塑料机械或门窗设备、风力发电机和实验台,亦或是楼宇,诸如剧院,以及运动
场,一切都可以通过 TwinCAT3 实现自动化。
用户可以选择不同的编程语言来实现这些应用。除了经典的 PLC 编程语言的
IEC 61131-3,用户现在也可以用高级语言 C 或 C++,以及 MATLAB®/ Simulink®。
整合了运动功能从而简化了工程项目,以及全新的安全应用编辑更加人性化。
这些以及更多的特性都证明了为什么 TwinCAT3 也名为扩展的自动化。
本书针对任何想要学习倍福 TwinCAT3 软件如何实现基于 PC 控制编程的读
者,阅读本书需要预先具备 IEC61131-3,C/C++或 MATLAB®/ Simulink®中至少一种
编程语言的知识。
本书内容主要介绍了 IEC61131-3 新标准中扩展的 OOP(面向对象)功能的学
习,了解到许多新概念:方法,属性,扩展,接口等等,以及如何通过新的关键
词来实现这些概念,从中可以感受到 OOP 编程带来的便利。
本书所有的内容都会不间断更新,如果想获取更新的教材可以通过访问 FTP
获取到,当然本书所有配套的案例程序也会在此 FTP 中供所有读者免费获取。
FTP 地址:ftp://ftp.beckhoff.com.cn/TwinCAT3/TC3_training/
欢迎对本书的结构、内容提出意见和建议,请发邮件至:
y.yang@beckhoff.com.cn
杨煜敏
2015 年 12 月 1 日
1
目录
一、
TwinCAT3-OOP 编程 .................................................................................................. 3
1. 新增的数据类型和功能 ............................................................................................ 3
2.
3.
OOP 关键词的介绍与用法 ..................................................................................... 20
OOP 小应用——信号发生器 .................................................................................. 36
2
一、 TwinCAT3-OOP 编程
本章主要分成三个部分,第一部分是关于 IEC61131-3 编程标准第三版中新增
的数据类型和功能;第二部分针对 TwinCAT3 中 OOP 的关键字做一个用法的介绍;
最后以一个完整的例程给大家讲一下如何用面向对象的思想去写一个程序。
1. 新增的数据类型和功能
IEC61131-3 第三版的新增数据类型,主要是针对 64 位操作系统的,例如:
LINT,ULINT,LWORD,和 LTIME, LDATE, LDATE_AND_TIME, LTIME_OF_DAY 等时间
类型的变量,还包括 UNION 共用体以及 WSTRING 这样的数据类型。
除此之外,TwinCAT3 还新增了两个作用域,分别是 VAR_STAT 和 VAR_TEMP,
在这两个作用域之下,我们可以创建静态变量和临时变量。
1.1 VAR_STAT
众所周知,所有 Method 和 Function 里的内部变量默认都是临时变量,也就
是我们申明在 VAR 关键字下的变量默认都是临时变量。他们每一次被调用后都
会被初始化。这里给大家做一个演示。
(1)首先还是新建 PLC 程序,并且取名为 OOP1。
3
(2)右键 POUs 添加 POU。
(3)创建一个 Function,返回类型选择 INT 型。
(4)在这个 Function 中编写程序,并在主程序中调用 Function。
4
(5)激活并 Login 之后的运行效果如下图。
主程序中读到的 F_Sum 的返回值是 1,且它始终为 1。
而在 Function 里的变量显示都是问号,并且我们可以发现在 Value 下也没办法看
到实际值,它提示我们。
(6)添加断点,单步操作查看 Function 的变量值。(快捷键 F9 设置断点,F11 单
步操作)
开始时,ia 的值是 0
5
下一步,ia 进行自加一
下一步,把 ia 作为返回值赋给这个 Function
下一步,回到主程序,这个程序把自己的返回值赋给 iSum 变量,使其值为 1。
那么这个 ia 是不是会继续累加呢?我们可以继续单步执行来看一下结果。可以
发现 F_Sum 这个 Function 中的 ia 变量已经变回 0 了。所以我们之前看到的始终
值为 1 的 iSum 变量就是这么来的。
(7)当然在 Function 里也可以声明静态变量,这就要用到我们之前说的 VAR_STAT
关键字。在这个 Function 中编写程序。注意把 ib 变量申明在 VAR_STAT 关键字下。
注意 Function 的返回值也要修改。
6
(8)效果如下,我们可以看到主程序里 iSum 的值一直在累加
到 Function 里来看,可以发现 ib 是有显示在进行累加的。我们单步操作的时候
也可以发现 ib 的数值一直在累加,并没有像 ia 一样被初始化成 0。因为这里我
们的 ib 是一个静态变量。
1.2 VAR_TEMP
我们都知道,所有程序和功能块中的默认申明的变量都是静态变量(就是我们申
7