PLC编程:为何是梯形图而非C++
我们能否将PC上使用的编程语言与PLC编程中使用的语言进行比较?
要深入了解这个问题,我们首先需要了解计算机编程语言是如何演变的。
1、第一代:机器语言
在计算机产业的最初阶段——第二次世界大战刚结束后——给予计算机的指令和命令只是一长串的"0"和"1"。这些是工程师在计算机面板上拨动的低/高或关/开开关的逻辑值。
由于我们的大脑非常擅长处理图像、句子和单词——但不擅长记忆长串数字——编程任务变得非常艰巨和繁琐。想象一下,每次你想从机器获取任何东西时,都必须翻阅一本列有所有这些命令的厚书。直到今天,这些0101100…的长序列仍然是任何计算机大脑真正理解的唯一内容。
这后来被称为机器语言——出于显而易见的原因,它被称为第一代编程语言。
零/一序列并不是唯一的障碍。一个更大的问题潜伏在暗处:大学和专业公司生产的每台新计算机都带有自己的一套指令。因此,不是只有一种机器语言,而是有多少种计算机型号就有多少个版本。随着处理器现在嵌入集成电路中,我们可以说机器语言是处理器相关的。
2、第二代:汇编语言
没过多久,有人——Kathleen Booth——试图在我们的大脑工作方式和机器代码之间架起一座桥梁。
参考书中出现了第二列:对于每条01101011001…指令,都附加了一个快捷方式。如果机器代码要执行加法,则为ADD,SUB,DIV,MUL等。这些快捷方式不是传统意义上的缩写——例如IBM是缩写。我们称它们为助记符——仍然保留其含义的较短单词部分。
一种更友好的语言诞生了:汇编语言。它是第二代编程语言。然而,它仍然存在与第一代相同的根本问题——它是处理器相关的。汇编语言版本与处理器型号一样多。
要理解这个问题的规模,让我们暂时跳到1990年代中期。随着第一款Intel Pentium处理器的出现,PC有了更强大的显卡。它们都是用汇编语言编程的。由于非常接近处理器,转换为机器语言的速度很快——足以让显卡跟上处理器速度。
但每当新的处理器和显卡上市时,工厂工程师都必须接受更新的汇编语言培训。行业中有人明智地决定,值得放弃汇编语言——即使它有速度优势——转而使用C/C++。 这一过渡标志着第三代的到来。
3、第三代:过程式和高级语言
过程式或高级语言允许你使用完整的单词作为指令,使用while和do-while编写循环,并使用if-else快速做出决策。更重要的是,它们带来了更大的优势:可移植性。
你可以复制一个C++程序并在任何其他计算机上运行,无论处理器版本如何。
你听说过的大多数语言——Java、Python、Go、Ruby、Rust、Pearl、Ada、C、C++——都是过程式语言。
4、第四代:SQL
过程式类别的两个例外是Microsoft Access和Oracle。它们构成了第四代,专门用于构建数据库。
Access处理中小型数据库——市政图书馆可能使用的那种。 对于银行系统、公用事业公司以及火车、音乐会和航空公司的订票系统所需的大规模数据库,Oracle是行业标准。这也是为什么Larry Ellison仍然是地球上最富有的人之一。
5、第五代:自然语言
第五代——自然语言——在很大程度上仍在开发中。AI可能很快就会处理它。
6、计算机语言 vs. PLC编程语言
语言是使处理器执行指令的工具。语言越接近处理器,将指令转换为机器语言所需的时间就越短。
但有一个陷阱:如果语言太接近处理器,它就会离用户更远——变得更复杂且通常是处理器相关的。相反的情况同样成立:如果用户想要更自然的语言,将结果转换为机器语言所需的工作量和时间会显著增加。
在实践中,你将被要求在执行速度和编程工作量之间做出正确的权衡——有时为了更快的翻译而放弃最用户友好的语言。
7、PLC适合哪里?
在马萨诸塞州贝德福德小镇,Dick Morley精通编程。 对于他的众多机床应用,他使用了与Dennis Ritchie和Ken Thompson几年前用于开发Unix和C语言相同类型的DEC小型计算机。
但Morley的工业应用并不容易销售。将昂贵的小型计算机放置在恶劣环境中并不理想。它们还需要专业人员。从设计到交付,时间线大约为六个月。
几乎被不断增多的不便所困扰,他设计了一种专门适应工业工作条件的新设备——温度和湿度波动、焊接机和交流电机的干扰、灰尘和气流不足。
当贝德福德84号项目原型制作完成时,它被命名为MODICON——MOdular DIgital CONtroller(模块化数字控制器)。
8、改变一切的编程语言选择
为新设备选择什么编程语言?前三代都可以使用。作为经验丰富的工程师,Morley明白工厂车间技术人员不习惯使用任何当前语言进行计算机编程。但他们似乎都对继电器梯形图感到自在。
那么为什么不把它塞进去呢?
这是一个天才之举。
继电器梯形图有两个垂直电源轨,连接在它们之间的每个梯级形成一个独特的电路,你可以当场验证。它在精神上类似于几年后在Commodore 64、Sinclair和Atari上使用的BASIC语言——解释器一次检查一行代码,使故障排除变得简单明了。
当时的唯一限制是1968-69年的计算机上没有图形应用程序。选择用于实现梯形图的语言是我们现在称为IL —指令列表——类似于汇编语言的语言。
正如你所料,每家公司都以自己的语法应用该语言。像"加载"这样简单的指令甚至不一致:Omron使用LD,IDEC使用LOD,Siemens使用L——Siemens还将该语言重命名为STL(语句列表)。
9、IEC 61131-3标准(PLC编程语言)
IEC 61131-3标准的第一版于1993年发布,列出了五种编程语言。指令列表最近已被弃用,第四版(2025年)现在只包含四种语言。就编程指令而言,所有四种都属于计算机语言的第三代。
9.1 ST:结构化文本
虽然它包含C++指令的子集,但ST语言也可以与Pascal相关。任何熟悉Pascal或C++编程的人都应该发现结构化文本相对容易学习。
注意: 虽然尚未包含在IEC 61131-3标准中,但一些PLC制造商已经支持C++。几乎所有ScadaPack型号——现在属于Schneider Electric旗下——多年来一直提供C++作为替代语言。Open PLC只使用C++,这正是它不被视为工业PLC的原因——没有IEC标准语言。
你可以使用 LAD2SCL 插件将博途中的梯形图一键转换为SCL代码。
9.2 LLD:梯形图
你可以立即在免费的PLC模拟器中练习梯形图——无需硬件或软件。
9.3 FBD:功能块图
9.4 SFC:顺序功能图(Grafcet)
除了结构化文本,IEC 61131-3标准中其余三种语言都是图形化的,专门用于PLC。它们在传统计算机语言中没有直接等价物。
10、哪种PLC编程语言最受欢迎?
没有直接的答案——这在很大程度上取决于你居住的地方。
10.1 梯形图:北美标准
继电器梯形图出现在19下半叶的某个时候,当时继电器是王者。没有人能确切指出是谁或在哪里首先使用了它。它易于绘制和理解,因此迅速传播。在Dick Morley将其采用为梯形图后,它的主导地位变得更强。
梯形图是30多年来占主导地位的PLC编程语言。如今,情况正在发生变化。更多的人从小就熟悉C++,PLC制造商也在相应地调整。对于要求严格的工业过程,有些任务根本无法合理地仅用梯形图指令解决——使更复杂的语言成为自然选择。
梯形图仍然非常直观——不仅工程师可以使用,技术人员也可以使用。在它首先传播的北美地区,它仍然占主导地位。
10.2 Grafcet:欧洲传统
欧洲的趋势不同。1977年,Grafcet被正式认可为编程工具。它在法国发明,很快成为欧洲大学编程自动化机器的核心课程。
欧洲转向Grafcet的另一个原因是,与北美大陆相比,历史上每平方公里的工程师密度更高。
1993年,Grafcet被纳入IEC 61131-3标准,国际名称为SFC——顺序功能图。
11、关于Grafcet的特别说明
Grafcet是由Michel Blanchard领导的研究人员和工业经理团队发明的。它改编自Carl Adam Petri于1962年建立的Petri网模型。
Grafcet这个首字母缩略词突出了语言的起源——AFCET——及其身份。
AFCET代表Association Française de Cybernétique Économique et Technique(法国经济和技术控制协会)。
从功能角度来看,GRAFCET代表Graphe Fonctionnel de Commande Étape Transition——正如标题所示,语言的两个主要元素出现了:步骤和转换。
要正确理解Grafcet,需要扎实的PLC基础和编程语言基础。但有了这些基础,SFC可以大大减少复杂项目的编程时间——因为用户主要关注流程图形式的操作顺序,而软件处理编译为机器语言。梯形图和Grafcet图表甚至可以在同一个程序中共存。
认识到其在组织复杂任务方面的效率,Siemens于1985年采用了Grafcet,Allen-Bradley于1986年在美国 follow。在IEC 61131-3标准的SFC格式中,该语言在Siemens S7-Graph、Schneider Electric Unity Pro和Allen-Bradley RSLogix 5000/Studio 5000中原生支持。
原文链接:PLC Programming Languages: Why Ladder Logic, Not C++
汇智网翻译整理,转载请标明出处