text: PLC的编程策略：面向对象编程和梯形图逻辑之比较
  在科学、技术、工程和数学(STEM)教育、FIRST组织（一个美国的非盈利机构，旨在激励学生在工程领域和科技领域方面不断拓展）的活动以及高中的其它技术课程中，许多年轻人已经使用树莓派（Raspberry Pi）、Arduino、或类似的微控制器来编程。通常情况下，大多数人都在学习使用某种类型的面向对象编程(OOP)，因此当他们走入社会的时候，自然而然的就会倾向于使用面向对象编程。
  然而，工业自动化一直依赖于梯形图逻辑（也被称为梯形图）已经有近50年的历史了。编程人员在这方面已经具有数十年的工业编程经验。但这些经验丰富的编程人员，不会一直工作下去，他们也会退休；同时，大量熟悉面向对象编程的年轻员工，正不断涌入到这个行业。如何向这些新生劳动力介绍梯形图逻辑？
  虽然面向对象编程有优点也有缺点，但它是学习、使用梯形图逻辑非常好的出发点。
  面向对象编程出现于20世纪60年代初或更早，比梯形图逻辑的历史还要久远。在制造业领域，有很多可用的硬件和软件使其更受欢迎。先进的微控制器，如Arduino和树莓派就是一个例子。
  Arduin
  o微控制器硬件通常使用最基本的C语言来编程(见图1)。树莓派基于Linux系统，有许多面向对象编程平台，如 Python和Java。这些低成本的微控制器和微软的.net平台，为想学习面向对象编程的人员提供了资源。
  图1:Arduino微控制器硬件通常使用面向对象语言进行编程，一般是最基本的C语言。本文图片来源: Automation Direct
  面向对象编程的优点
  与梯形图逻辑相比，面向对象编程有以下优点:
  ●代码可移植，易于重复使用；
  ●易于使用数学函数、循环等；
  ●几乎在每一门计算机编程课程中，都会教授面向对象编程；
  ●代码可以在各种硬件平台上运行。
  要掌握面向对象编程，首先需要理解对象的概念及其使用。一旦对象或模块类编写完成，就很容易通过多次调用来实现重复利用。例如，创建一个对象来控制电机，用来处理所有输入、输出和故障。当需要时，可以通过多次实例化该单一控制对象，来控制多个电机。这就是所谓的按需实例化。当需要控制多个电动机时，可以多次使用该单个物体。 它在需要时调用，并在使用时创建实例。
  每个电机的每个实例都有自己的特性，如电机停机、电机运行、电机转速、电机过载等。大多数编程工作都是在首次创建对象时完成的。 这是一种与梯形逻辑不同的思维方式，而且更强大，因为一旦构建了一个对象，它就很容易使用和重用。
  面向对象编程更易于执行复杂的数学函数、循环计算、数组和嵌套子例程。几乎每一门计算机编程——无论是高中、大学、还是网络上的教程，都会教授这方面的知识。创建的代码是可移植的，可以在各种硬件平台上运行。
  面向对象编程的缺点
  不过，与梯形图逻辑相比，面向对象编程有以下缺点:
  ●费用更高；
  ●更陡峭的学习曲线；
  ●对于维护人员来说，故障排除不是特别容易；
  ●在将源代码上传到处理器之前，通常需要编译。
  与梯形图逻辑相比，面向对象编程往往需要更多的内存和更强的处理能力，因此费用就更高。面向对象编程语言的学习时间可能更长。很可能需要课堂学习，需要大量的时间、实践、测试和应用来掌握核心概念。
  编程人员必须经常研究面向对象编程，以便使用跟踪器来追踪代码，或调试器来调试逻辑。使用这种类型的高级编程，可能很难实现实时在线监视功能。
  在将源代码下载到控制器之前，必须对其进行编译。通常，源代码并不保存在处理器内存中。这意味着必须小心备份源代码，因为编译过的代码通常是不可编辑的。
  使用面向对象编程，库文件必须与在编译过程中使用的其它资源相连接。如果不了解连接和资源，将很难使程序运行。
  梯形图逻辑的优势
  梯形图逻辑是一种简单且自文档化的编码方法，甚至有人怀疑它是否是一种编程语言。它遵循继电器控制系统中使用的梯形电气图的格式，大多数人都可以快速学习并掌握它。它是在过去的数十年来唯一在机器自动化领域中大规模应用的编程语言，并且在可预见的将来，仍然是自动化行业中使用的主要编程语言之一(见图2)。
  图2: Automation Direct提供的一款PLC，可为执行梯形图逻辑提供工业硬件平台。
  随着时间的推移，具有不同背景的人从不同领域进入该行业，各种编程语言被引入工业自动化工具箱中。其中包括功能块编程、结构化文本、状态编程和顺序功能图。这4种编程语言和梯形图逻辑，构成了IEC61131-3国际电工委员会(IEC)的标准编程语言。
  IEC61131背后的逻辑是：如果每个供应商都遵循该标准，那么至少在某种程度上，一个人只需学习这5种编程语言，就可以轻松地在来自不同供应商提供的平台之间进行切换。然而，事实却并非如此。
  基本梯形图逻辑（如使用继电器触点和线圈）也是一样的；但是在编程时，必须学习每个供应商的语法和用户体验，以及如何使用编程平台的详细信息。
  尽管缺乏标准化，但与面向对象编程相比，梯形图逻辑有以下优势:
  ●非常适合机器和过程控制；
  ●由于本质上是自文档，因此更易于理解；
  ●易于对受控系统进行故障排除；
  ●易于调试；
  ●源代码通常可以存储在处理器中。
  梯形图逻辑非常适合于机器和过程控制，特别是具有大量离散输入、输出(I/O)的自动化系统。多年来，梯形图逻辑也在不断改进，以处理模拟量I/O，使其更适合于众多的过程控制应用。与机器控制应用相比，过程应用中模拟量I/O的比例往往较高。
  因为梯形图逻辑比面向对象编程更易于使用，因此众多熟练的技术人员和工程人员可以快速学习梯形图逻辑。逻辑高度系统化、有序化，再加上其具有自文档的性质，使其更易于理解和掌握。在启动某个设备之前，每行代码都必须为真。如果有5个电机需要控制，那么至少需要5行代码，实现了高度简化。
  更易于学习
  对电气工程师和维护人员来讲，梯形图逻辑非常直观。虽然梯形图逻辑需要有与面向对象编程不同的思维方式，但通过学习可以快速掌握，并且理解他人编写的代码所需的时间也较少。逻辑何时为真，何时为假，一清二楚。即使编程经验有限的人，也很容易弄清楚开或关、线圈通电、比较变量和常见的数学函数(见图3)。
  图3:梯形图逻辑编程的直观特性，即使是经验有限的用户也可以快速掌握。
  它简单易用，简化了故障排除和调试工作。监视逻辑时，可以很容易明白目前正在发生的工况。无需软件学位或高级编程技能。有了梯形图逻辑，维护人员和工程人员就很容易跟踪流程，了解正在发生的事情。可以将梯形图逻辑看作真值表。如果左边的逻辑为真，则右侧的逻辑就会启动。
  梯形图逻辑源代码和描述符，通常被保存在控制器中。这可以消除程序员在试图理解编译程序而无法访问源代码时所遭受的挫败，面向对象编程也是如此。
  然而，与面向对象编程相比，梯形图逻辑也有如下缺点：
  ●计算机程序员和IT人员对梯形图逻辑不熟悉；
  ●难于进行数学函数、文本和数据处理；
  ●依赖于扫描时间；
  ●需要专门的硬件来执行，如可编程逻辑控制器(PLC)；
  梯形图逻辑是计算机程序员和IT人员所不熟悉的一种符号语言，他们在学校里并没有学习这种语言。在梯形图逻辑中处理数学函数、文本字符串和数据可能会很困难，这主要是因为梯形图逻辑最初并不是为了处理这些函数而设计的。
  依赖扫描时间
  梯形图逻辑也依赖于扫描时间。较大的程序，需要更长的时间来扫描和处理逻辑。执行梯形图逻辑时，读取输入、扫描逻辑、更新数据表和输出、执行通信，然后循环重复。可以实现中断和其它编程技术等功能，以确保更快地执行某些逻辑。
  尽管配置了梯形图逻辑的基于软件的PLC可以在PC上运行，但通常硬件(如PLC)要与编程软件相匹配，两者最好都是从同一个供应商处购买的。这样就可以确保兼容性，但如果想要更换供应商，则不是特别方便。
  除了比较梯形图逻辑和面向对象编程的利弊外，用户还应该评估这些编程语言在将要部署的环境中的使用情况。如果工厂或设施已实现了梯形图逻辑的标准化，那么即使面向对象编程更适合于该应用，也不鼓励将梯形图逻辑更换为面向对象编程。随着面向对象编程的使用日益增多，预计在未来几十年内，它将与梯形图逻辑共存。一个有远见的自动化专业人士，最好要掌握这两种语言。（作者：Jerry Reaves）