[西门子] TIA Portal面向对象编程入门

[复制链接]
查看90979 | 回复0 | 2024-11-15 10:03:51 | 显示全部楼层 |阅读模式
软件工程从面向过程编程发展到面向对象编程(OOP:Object-Oriented Programming)被认为是程序设计方法学的一场实质性革命,是程序设计方法学的一个重要里程碑。尽管时至今日依然有少数人质疑面向对象的编程思想,但我们看到的是面向对象技术发展的越来越好,无论是后端语言(JAVA、C#)或者前端语言(JavaScript、TypeScript),无一不是完全的支持面向对象技术。

传统PLC编程方式

现在高校的PLC教材基本上采用的还是五六十年前的编程理念,将PLC定位为传统继电器控制的替代,以软元件、寄存器这种古老落后的概念来讲授这一门日新月异的现代工业控制编程技术。这就导致时至今日大多数自动化工程师依然采用的是下图展示的编程方法。


图1 传统PLC编程随意滥用的全局变量、没有良好规划的程序设计使得程序复用性很差,开发周期长、bug多、调试困难。
面向过程是不是必经过程

相信很多人会有疑惑,PLC编程不都是要从这个开始吗?其实不然,对于初学者来说也根本没有必要以电气的思维来编写PLC程序。虽然我们都曾经经历过这个过程,但并不代表这个过程是必须的。我们完全可以跳过这个过程,直接以面向对象的思想来编写PLC程序。一旦熟悉了面向对象编程,相信你再也不愿意回到面向过程这种方式。

PLC支持面向对象编程吗

面向对象编程的三大特征是封装、继承和多态。以TIA Portal为例,尽管对这三个特性支持的不彻底(比如无法禁止访问实例的私有变量),但是这并不妨碍我们在S7-1200/1500中使用面向对象来编程。

简而言之,在S7-1200/1500中的面向对象编程就是我们将控制对象进行抽象化,然后封装到一个FB中。当我们调用这个FB时会要求分配一个背景数据块,这个过程就是对象的实例化。背景数据块的英文是Instance Data Block,其中Instance就是实例的意思。

如何进行面向对象编程
在PLC中,面向对象编程最重要的一点就是对控制对象进行抽象化。一个好的控制对象(FB)需要不断的打磨完善。千里之行,始于足下,首先我们从实现最基本的控制功能开始。那么最开始要搞清楚的是我们的FB需要哪些信号?会输出哪些命令?下图展示了我们设计的一个简单马达控制对象的接口。其中对HMI的接口采用了状态控制字的方式,这样一方面简化了HMI组态,另一方面降低了点数需求、节省了软件授权成本。

图2 接口设计然后我们用接口变量替换图1中的全局变量。

图3 马达控制逻辑(LAD)如果你对SCL熟悉的话,也可以采用下面的写法。虽然我们推荐使用SCL,但并不表示梯形图不好。对于逻辑控制而言,梯形图具有无法比拟的优势。面向对象的核心在于它的三个特性,至于语言只是形式而已。

图4 马达控制逻辑(SCL)设备对象在整个工艺中往往还需要和其它设备进行联动,所以我们还得对外提供设备状态,其实也就是对象的属性。

图5 马达状态对象属性不但要对外输出,还需要通过状态控制字SCW提供给上位机。

图6 马达对象实例化我们在程序中对该对象进行实例化即可。联动时可以直接访问对象属性,而无需再使用I/O点,其优点不言而喻。
更高层次的编程
面向组件编程基于面向对象编程技术,不过它更强调分发性。在高级编程语言中,面向对象和面向组件有比较明显的区别。而在PLC中它们区别不大,我们更趋向于称之为面向组件编程。面向接口编程大多用于前后端分离的开发中。对于一个比较大的自动化项目,有的时候PLC程序和上位机分别由不同的团队开发。在以前一般由PLC团队提供变量表给上位机团队,但这种方式效率很低,调试工作量很大,项目成本居高不大。并且现在上位机大多也支持面板技术,HMI同样也需要对设备对象进行封装,只有面向接口编程才能发挥现在的HMI技术优势。

HwLib(慧兰博)技术团队专注于高端自动化技术,如果您对我们的技术教程感兴趣的话,可以X宝上搜索店铺“hwlib”或者“慧兰博”



关于HwLib(慧兰博)技术团队的更多信息:www.hwlib.com.cn

HwLib(慧兰博)技术团队技术资料:

https://pan.baidu.com/s/1t-5BPQmeUbWRVH9FJ-tjPg

提取码:63rt




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则