PLC程序设计|简化程序元素的最佳方式——面向对象编程
摘要
面向对象编程,是一种利用对象、方法和属性,来组织和简化程序元素的最佳方式。
最新发布的IEC-61131-3标准更新包括面向对象编程(OOP)语言。虽然面向对象编程是高大上的术语,但它其实是关于组织和简化的。组织是指程序元素进行分组以及分组所采用的机制。组织良好的程序更直观和更易于使用。面向对象的特征旨在改善和促进健全的组织项目。简化是指向外部世界提供简化的接口。封装之下,对象内部的复杂细节则保留在程序中。
何为对象?
编程中的“对象”,就是将功能和数据整合在一起,用其来实现对实际设备、过程和其它结构的状态和行为的建模。 在IEC 61131-3标准中,对象是带额外特性的功能块。功能块可以定义方法和属性,从而可以进一步划分代码和扩展接口。方法和属性可以使用任何IEC-61131-3语言来实现。语言的选择在每个方法或属性的基础上确定,这使其很容易根据环境来使用最适合的语言。
示例项目包含一个功能块,该功能块实现一个简单的加/减计数器(如图1所示)。在其它面向对象编程(OOP)语言中使用的“类”,是“函数功能块”的同义词。两者的定义都必须在使用前进行实例化。类的实例或功能块被称为“对象”。
图1:该示例工程包含了一个简单的增/减计数器的功能块。图片来源: Mitek 自动化
定义方法
“方法”,是能够访问所定义的函数块内部数据和参数的函数。 它们也可以有输入、输出参数和返回值,这和普通函数一样。
方法,可以用梯形图来定义。 当输入参数为“真”时,计数器递增,最后达到一个最大值。在功能块的主体中,定义PMaxCount和Count参数。由于方法可以访问功能块的数据和参数,方法内部就可以使用PMaxCount和Count参数。返回值被写入到CountUp,它是方法本身的名字。
在方法中定义NotMax变量,并将其分配给方法的调用堆栈。 这意味着,前一个运行周期的变量值不会保持。在功能块主体中定义的变量被分配到内存中,并在不同的运行周期中保持一致。
另一种方法是定义递减计数器,比如使用结构化文本语言来实现。 当输入参数为“真”时,计数器递减,直到减为零为止。Count 是功能块的输出参数,并将返回值写入变量CountDn,这也是方法的名称。此方法提供了一种简单方便的方法,将整个程序分解成更小、更易于管理的程序块。这种设计,更易于匹配不同的语言。
从函数块本体调用这些方法,是很简单的事情(如图2所示)。 由于这些方法是使用关键字“私有”定义的,所以只能在函数中调用它们。使用关键字“公共”定义的方法,也可以在外部调用。
图2:用户可以从功能块本体来调用这些方法,并使用关键词作为方法的防护。
定义属性
“属性”是类似于变量的函数,可以在表达式中使用,与使用变量的方法相同。 不同于绑定到某个存储位置,属性与get()和set()功能绑定。当需要从属性中读取数据时,就需要执行get()功能。当需要向属性写入数据时,就需要执行set()功能。
“公有”与“私有”关键词,也可以用来控制属性的访问权限。 “私有”意味着属性只能在定义的功能块内部使用。“公有”,则意味着该属性可用在外部调用。然而,“公有”与“私有”关键词也可以用于get()和set()函数的定义。这就使得该属性,外部可读,内部可写。
在最基本的形式中,属性从内部变量读取、或写入数据。 它们的附加功能可用于验证数据值或执行其它操作。例如,可在程序中添加MaxCount属性。这允许将最大计数设置为指定的值,且其当前值可读。数据通过MaxCount属性传递给set()和get()函数,就像变量一样。get()函数返回功能块变量PMaxCount的值。set()函数验证输入值,以便在将结果写入PMaxCount之前确保它是一个正数。
图3:重置属性没有潜在读写操作对象。
在图3所示的例子中,在项目中增加了使用梯形图语言实现的复位功能。重置属性没有潜在的读写操作对象变量。当写入“真”时,执行复位操作。当读取属性时,计算表达式的值,并返回结果。
值得一提的是,项目结构和组织如何反映到项目树中。 在项目中,每个程序、函数块、方法和属性都用一个节点表示。双击节点,就会在主窗口的文档页打开一个选项卡。标签可以被移除并以单独的窗口显示。get()和set()功能都可以单独显示,因此可以用于属性定义的显示。
图4:程序可以像功能块一样定义内部数据、参数、方法和属性。
面向对象程序元素的优化
面向对象包括很多,但它最根本的目的就是以一种最优的方式组织程序元素。 对象、方法和属性,是实现这一目标的主要手段,对于理解和掌握这些概念,是最基本的。
项目初期,可采用较小的程序步骤来组织常规程序;基于对象的设计可以稍后进行。熟悉使用这些技术以后,会让你更容易考虑所有其它的可能性。没有理由不做尝试。
本文来自于《控制工程中文版》(CONTROL ENGINEERING China )2017年9月刊《技术进展》栏目,原标题为:PLC程序设计:面向对象编程
PLC的编程策略:面向对象编程和梯形图逻辑之比较
许多年轻的自动化从业人员非常熟悉面向对象编程,但在工业自动化领域,梯形图逻辑仍然是最常用的编程语言之一。
在科学、技术、工程和数学 (STEM)教育、 FIRST组织(一个美国的非盈利机构, 旨在激励学生在工程领域和科技领域方面不 断拓展)的活动以及高中的其它技术课程中,许多年轻人已经使用树莓派(Raspberry Pi)、 Arduino、或类似的微控制器来编程。通常情况下,大多数人都在学习使用某种类型的面向对象编程 (OOP),因此当他们走入社会的时候, 自然而然的就会倾向于使用面向对象编程。
然而,工业自动化一直依赖于梯形图逻辑(也被称为梯形图)已经有近50 年的历史了。编程人员在这方面已经具有数十年的工业编程经验。但这些经验丰富的编程人员,不会一直工作下去,他们也会退休 ;同时,大量熟悉面向对象编程的年轻员工,正不断涌入到这个行业。
如何向这些新生劳动力介绍梯形图逻辑? 虽然面向对象编程有优点也有缺点,但它是学习、使用梯形图逻辑非常好的出发点。 面向对象编程出现于20 世纪60 年代初或更早,比梯形图逻辑的历史还要久远。在制造业领域,有很多可用的硬件和软件使其更受欢迎。先进的微控制器,如 Arduino和树莓派就是一个例子。 Arduino微控制器硬件通常使用最基本的 C 语言来编程 ( 见图 1)。树莓派基于 Linux系统,有许多面向对象编程平台,如 Python和 Java。这些低成本的微控制器和微软的.net 平台,为想学习面向对象编程的人员提供了资源。
图 1 : A r d u i n o 微 控 制 器 硬 件 通 常 使 用 面 向 对 象 语 言 进 行 编 程 ,一 般 是 最 基 本 的 C 语 言 。 本 文 图 片 来 源 : Automation Direc
面向对象编程的优点
面向对象编程的优点与梯形图逻辑相比,面向对象编程有以下优点 :
• 代码可移植,易于重复使用 ;
• 易于使用数学函数、循环等 ;
• 几乎在每一门计算机编程课程中,都会教授面向对象编程 ;
• 代码可以在各种硬件平台上运行。
要掌握面向对象编程,首先需要理解对象的概念及其使用。一旦对象或模块类编写完成, 就很容易通过多次调用来实现重复利用。例如,创建一个对象来控制电机,用来处理所有输入、输出和故障。当需要时,可以通过多次实例化 该单一控制对象,来控制多个电机。这就是所谓的按需实例化。当需要控制多个电动机时, 可以多次使用该单个物体。 它在需要时调用,并在使用时创建实例。
每个电机的每个实例都有自己的特性,如电机停机、电机运行、电机转速、电机过载 等。大多数编程工作都是在首次创建对象时完成的。 这是一种与梯形逻辑不同的思维方式,而且更强大,因为一旦构建了一个对象,它就很容易使用和重用。 面向对象编程更易于执行复杂的数学函数、循环计算、数组和嵌套子例程。几乎每一门计算机编程——无论是高中、大学、还是网络上的教程,都会教授这方面的知识。创建的代码是可移植的,可以在各种硬件平台上运行。
“梯形图逻辑遵循继电器控制 系统中使用的梯形电气图的格 式,大多数人都可以快速学习 并掌握它。”
面向对象编程的缺点
不过,与梯形图逻辑相比,面向对象编程有以下缺点 :
• 费用更高 ;
• 更陡峭的学习曲线 ;
• 对于维护人员来说,故障排除不是特别 容易 ;
• 在将源代码上传到处理器之前,通常需要编译。
与梯形图逻辑相比,面向对象编程往往需要更多的内存和更强的处理能力,因此费用就更高。面向对象编程语言的学习时间可能更长。 很可能需要课堂学习,需要大量的时间、实践、测试和应用来掌握核心概念。 编程人员必须经常研究面向对象编程,以便使用跟踪器来追踪代码,或调试器来调试逻辑。使用这种类型的高级编程,可能很难实现实时在线监视功能。
在将源代码下载到控制器之前,必须对其进行编译。通常,源代码并不保存在处理器内存中。这意味着必须小心备份源代码,因为编译过的代码通常是不可编辑的。 使用面向对象编程,库文件必须与在编译过程中使用的其它资源相连接。如果不了解连接和资源,将很难使程序运行。
梯形图逻辑的优势
梯形图逻辑是一种简单且自文档化的编码方法,甚至有人怀疑它是否是一种编程语言。 它遵循继电器控制系统中使用的梯形电气图的格式,大多数人都可以快速学习并掌握它。它是在过去的数十年来唯一在机器自动化领域中大规模应用的编程语言,并且在可预见的将来, 仍然是自动化行业中使用的主要编程语言之一( 见图 2)。
图 2 : A u t o m a t i o n D i r e c t 提 供 的 一 款 PLC,可为执行梯形 图逻辑提供工业硬件 平台。
随着时间的推移,具有不同背景的人从不同领域进入该行业,各种编程语言被引入工业自动化工具箱中。其中包括功能块编程、结构化文本、状态编程和顺序功能图。这 4 种编程语言和梯形图逻辑,构成了IEC61131-3 国际电工委员会 (IEC) 的标准编程语言。
IEC61131 背后的逻辑是 :如果每个供应商都遵循该标准,那么至少在某种程度上,一个人只需学习这 5 种编程语言,就可以轻松地在来自不同供应商提供的平台之间进行切换。 然而,事实却并非如此。
基本梯形图逻辑(如使用继电器触点和线圈)也是一样的 ;但是在编程时,必须学习每个供应商的语法和用户体验,以及如何使用编程平台的详细信息。尽管缺乏标准化,但与面向对象编程相比,梯形图逻辑有以下优势 :
• 非常适合机器和过程控制 ;
• 由于本质上是自文档,因此更易于理解;
• 易于对受控系统进行故障排除 ;
• 易于调试 ;
• 源代码通常可以存储在处理器中。
梯形图逻辑非常适合于机器和过程控制, 特别是具有大量离散输入、输出(I/O)的自动化系统。多年来,梯形图逻辑也在不断改进,以处理模拟量I/O,使其更适合于众多的过程控制应用。
与机器控制应用相比,过程应用中模拟量 I/O 的比例往往较高。
因为梯形图逻辑比面向对象编程更易于使用,因此众多熟练的技术人员和工程人员可以快速学习梯形图逻辑。逻辑高度系统化、有序化,再加上其具有自文档的性质,使其更易于理解和掌握。在启动某个设备之前,每行代码都必须为真。如果有 5 个电机需要控制,那么至少需要 5行代码,实现了高度简化。
“梯形图逻辑源代码和描述符通常保存在控制器中,无需访问源代码,这可以消除程序员在试图理解编译程序所遭受的挫败。”
更易于学习
对电气工程师和维护人员来讲,梯形图逻辑非常直观。虽然梯形图逻辑需要有与面向对象编程不同的思维方式,但通过学习可以快速掌握,并且理解他人编写的代码所需的时间也较少。逻辑何时为真,何时为假,一清二楚。 即使编程经验有限的人,也很容易弄清楚开或关、线圈通电、比较变量和常见的数学函数 ( 见图 3)。
图3:梯形图逻辑编程的直观特性, 即使是经验有限的用户也可以快速掌握。
它简单易用,简化了故障排除和调试工作。 监视逻辑时,可以很容易明白目前正在发生的工况。无需软件学位或高级编程技能。有了梯形图逻辑,维护人员和工程人员就很容易跟踪流程,了解正在发生的事情。可以将梯形图逻辑看作真值表。如果左边的逻辑为真,则右侧的逻辑就会启动。
梯形图逻辑源代码和描述符,通常被保存在控制器中。这可以消除程序员在试图理解编译程序而无法访问源代码时所遭受的挫败,面向对象编程也是如此。
然而,与面向对象编程相比,梯形图逻辑也有如下缺点 :
• 计算机程序员和 IT人员对梯形图逻辑不熟悉 ;
• 难于进行数学函数、文本和数据处理 ;
• 依赖于扫描时间 ;
• 需要专门的硬件来执行, 如可编程逻辑控制器 (PLC) 。
梯形图逻辑是计算机程序员和IT人员所不熟悉的一种符号语言,他们在学校里并没有学习这种语言。在梯形图逻辑中处理数学函数、文本字符串和数据可能会很困难,这主要是因为梯形图逻辑最初并不是为了处理这些函数而设计的。
依赖扫描时间
梯形图逻辑也依赖于扫描时间。较大的程序,需要更长的时间来扫描和处理逻辑。执行梯形 图逻辑时,读取输入、扫描逻辑、 更新数据表和输出、执行通信, 然后循环重复。可以实现中断和其它编程技术等功能,以确保更快地执行某些逻辑。
尽管配置了梯形图逻辑的基于软件的PLC可以在PC上运行, 但通常硬件 ( 如 PLC)要与编程软件相匹配,两者最好都是从同一个供应商处购买的。这样就可以确保兼容性,但如果想要更换供应商,则不是特别方便。
除了比较梯形图逻辑和面向对象编程的利弊外,用户还应该评估这些编程语言在将要部署的环境中的使用情况。如果工厂或设施已实现了梯形图逻辑的标准化,那么即使面向对象编程更适合于该应用,也不鼓励将梯形图逻辑更换为 面向对象编程。随着面向对象编程的使用日益增多,预计在未来几十年内,它将与梯形图逻辑共存。一个有远见的自动化专业人士,最好要掌握这两种语言。
本文关键概念:
■理解梯形图逻辑和面向对象的编程 ;
■ PLC 的编程策略;
■了解梯形图逻辑和 面向对象编程的各自优势。
思考一下:
您公司的PLC编程 人员,是否受过足够的培训?
相关问答
三菱PLC人机界面编程用什么软件?
GX-DEVELOPER-8.52中文(plc编程);三菱触摸屏软件GT-Designer3中文版GX-DEVELOPER-8.52中文(plc编程);三菱触摸屏软件GT-Designer3...
三菱PLC与触摸屏如何编程?
三菱系列的PLC(FX2N)与三菱系列的触摸屏(A970GOT)和电脑的连接:计算机COM1口-----SC09编程线------PLC编程口(422口)计算机COM2口-----FX232CAB1数...
三菱PLC三种编程方法是什么求解答?
PLC的编程方式有梯形图语言(LD)、指令表语言(IL)、功能模块语言(FBD)、顺序功能流程图语言(SFC)、连续功能图(CFC)、结构化文本语言(ST)。但现目前在工业运用...
三菱plc入门到熟练,应该选择哪些书籍,有没有全是案例的书,对编程进行详细介绍?
给你推荐本书,PLC职业技能培训及视频精讲,三菱FX系列,张云刚宋小春编写的,里面从最简单的基本指令慢慢介绍一直到后面应用指令,一边介绍一边有列子,对学...
三菱PLC编程软件有一个什么工程名?
三菱PLC编程软件的工程名是自己定义的,只要名字里面没有特殊符号,非法符号,都是允许的。一个完整的三菱PLC工程文件夹下面有以下几个文件:1.Resource----是...
学习三菱plc,哪本书好一点?
有点惭愧,虽说日常工作经常和PLC打交道,但本人是个机械,液压从业者,电器只是对低压普通电器熟悉,数字电路与自动控制只是知道大致路数。如果推荐,实在抱歉...个...
三菱plc编程模块化编程方法?
三菱PLC编程采用模块化编程方法,即将程序分解为多个模块,每个模块负责完成特定的功能。通过模块化编程,可以提高程序的可读性和可维护性。在编程过程中,可以...
三菱PLC如何编写程序?
三菱PLC编程软件模拟运行步骤如下:1、首先,我们需要在开始菜单中打开三菱PLC编程软件GXDeveloper:2、然后,需要从工程菜单中创建新工程,并选择使用plc的...
三菱plcdhscs指令怎么用?
ASC指令ASC(ABCDEFGH)D100;指令功能就是把计算机输入的输入的8个字母,转换成对应的ASCII码保存在D100---D103中,顺序为A保存在D100低字节,B保存在D10...
三菱PLC怎么使用MODBUS协议与触摸屏进行通讯?
建议分开调试,先用通用的调试软件,如格西烽火等,按照触摸屏的指令测试,等调好所需要的命令后,再放入PLC中实现,避免瞎蒙。建议分开调试,先用通用的调试软件,...