面向对象编程是计算机高级语言的一种先进的编程模式,在工业掌握体系的plc程序中也能够接纳这种设计头脑,固然我们无法实现面向对象的很多优秀特色如“秉承”,乃至于它基础就不具有面向对象编程语言的特色,但面向对象编程的根基概念即是类和类的实例(即对象),我们只需要使用这种概念就可以了。在计算机编程中我们需要把一些事物空洞和归纳,才气编写类,而在工业掌握体系中,掌握对象如:电机,阀等等是很明显的掌握种别,不需要空洞就可以很明显的针对它们编写类,以下将会用到西门子的Step7编程语言和施奈德的Unity编程语言来疏解PLC的面向对象编程。
一、实现方法
面向对象编程在Step7中使用功效块(即FB)编程,一谈到此朋友们就会想到西门子提出的模块化编程,不错,即是这个模块化编程,但西门子提出的模块化、布景数据块、多重布景等名词并不能让朋友们很清楚的理解和使用这种优秀的设计理念。若朋友们从面向对象编程的角度去理解,则可以很好的理解这种设计模式。“FB块”被当作“类”,它可以被当作是对类似的掌握对象的代码归纳,如对MM440的变频器可以编写FB块:MtrMM440,这在面向对象编程中称为“类”,当需要编程掌握具体的电机时,可以给它分派一个布景DB块,在面向对象编程中称为类的实现(即建立类的实例:对象),当需要掌握多个电机时,可以分派不同的布景DB到这个FB块,即建立类的多个实例。Step7中有另外一种程序块,即FC块,以FC块为主的编程在西门子中称为布局化编程,这也能够类比于计算机编程中的面向历程编程,即纯粹以函数为主体的编程。
施奈德的Unity应用编程可以更好的理解面向对象编程。它的DFB定义中包含输入/输出参数,专有/共有变量,以及代码实现,而这恰是计算机的面向对象编程中“类”的根基元素,而建立类的实例(对象)就像建立一般的“布尔”变量同样,只需在“FunctionBlocks”中定义这种“类”的变量即可。
Step7和Unity都可以接纳面向历程和面向对象编程方法,这两种编程方法的差别类似于计算机高级语言中的C语言和C++语言编程的差别。
以下的疏解将会把Step7中的FB和Unity中的DFB称为“类”,Step7中的FB+布景DB以及Unity中DFB的实例称为“对象”。
二、面向对象编程架构
以上疏解的是实现细节,而编程头脑是确立在程序架构上的,不是某个局部使用了面向对象方法,则可以称之为这种编程即是面向对象编程。这种编程需要从以下方面动手:
1、电路设计的布局化。
这里主要以自动线为主说明,对于单机机床可以是它的简化布局,
自动线层:这是非常高档次,它拥有一个主PLC,对属于它下面的各区域掌握
工程层:拥有自力的配送电体系,但没有PLC,惟有分布式模块,由自动线掌握。顾名思义,它有着较大的自力性,可以作为一个独自的工程项目设计和制造,当自动线相对小时,可以省略该档次。
功效组层:凭据工艺分别,将实现某一个工艺功效的区段装备分别为一个功效组,它从属于工程层,当工程层被省略时,从属于自动线层。
面向对象编程并不一定要求使用以上的布局,但好的电气布局更利于面向对象编程。
2、任何掌握对象逻辑都在“类”中实现。
为了做到这点,必需说明与掌握对象关联的信息,譬如,对于一个电机,有以下关联的信息需要考虑:
输入信息:
电路护卫信息,如电机的空气开关,热继电器等。
功效护卫信息,如运动电机的限位开关,风机的风压开关,油泵的油位开关等。
启动和终止条件,以上的电路护卫和功效护卫都可能造成电机运转终止,复位也可能造成重启动,但这里的条件指的是平常运转的启动和终止条件,譬如挨次掌握的流程步。
掌握模式:如手动和自动等。
故障复位:通过复位信息,重新启动。
输出信息:
掌握输出,如掌握电机的主接触器。
状况信息输出
故障输出
状况储存信息:
用于代码实现的中心变量以及可以被电路图设计中我们早曾经在使用针对掌握对象的画图方法,即把根基的主配送电路和PLC配置实现后,我们会针对每一个现场掌握对象如:电机、阀、气缸等掌握对象绘制电路图,他们的电源来自主配送电路,掌握和反应与PLC确立连接,硬件连锁凭据现实情况调整,一个个掌握对象就象搭建积木同样有组织的堆积起来,同样的,编程也是针对一个个掌握对象使用相应的标准掌握块实现就可以,把程序掌握细节实现了有用的封装,使程序看起来简洁和易于护卫,而好的设计可以把道理图和程序进行很好的关联,乃至于做到一对一的关系,如道理图中的一个掌握对象可以在程序中找到相应的FB调用与之对应,真正做到面向掌握对象编程。
可能有人疑虑,PLC编程大片面是步进编程,这一个个标准块都是针对掌握对象的,那掌握挨次怎样实现呢?这就要求编写特地的挨次掌握FB块,或者使用Siemens现成的Graph7来实现,这点与一般编程没什么差别。
结束语:当今的工业掌握平台有很多程序妙手,他们很醒目算法,也有着本人的编程理念,当我和一些人探究标准化时,他们认识到标准化的高效性,但觉得如许无法体现本人的编程水准,是的,如上所述作为应用层面的程序设计是不要很高的编程水平,但要想想,一个人岂非能一辈子去搞现场调试吗?若想体现本人的代价,可以从事标准编程。我更希望他们能花一点时间研究程序架构,各行各业,真确大师是体系架构设计者,编程小方法只但是是为好的架构如虎添翼。