【问题标题】:Learning PLC programming [closed]学习PLC编程[关闭]
【发布时间】:2010-09-23 12:33:39
【问题描述】:

如何学习 PLC 编程?不同品牌的PLC会有很大的不同吗?梯形图编程和PLC编程一样吗?

【问题讨论】:

    标签: plc


    【解决方案1】:

    我做了很多 PLC 编程,现在做了很多 .NET 编程。无论哪种方式进行转换都是非常危险的,因为许多您认为应该可以转移的技能(模式等)会让您误入歧途。

    我告诉人们最大的不同是PC程序代码应该像其他程序员一样被编写,而PLC程序(梯形逻辑)必须像维护人员一样被编写。大多数设施(尤其是制造)的维护经常直接连接到 PLC,并且在在线模式下,他们可以以图形方式查看代码执行以找出问题所在。

    例如,如果输出未打开,他们会将输出电气设备 ID 键入编程软件的查找功能,找到该输出线圈,然后从那里开始追溯以查找问题。一些 PLC 程序员经常犯的错误之一是将他们的 I/O “映射”到一个结构中(在 PLC 中,这些被称为用户定义类型),他们使用复制指令将所有输入或输出移动到结构。从 PC 编程的角度来看是有道理的,但它会让维护人员想杀了你。通常,编程软件提供交叉引用功能,他们可以在其中指定输出线圈,它会告诉他们在程序中的任何地方都使用了它。如果您使用复制指令将 10 个字的 I/O 移动到一个 10 字的数据结构中,他必须坐在那里并计数位以找出复制源中的哪个位映射到目标端的哪个位复制。诚然,cmets 可以提供帮助,但这也有问题……PLC 存储整个程序,如果您需要排除故障并且没有原始程序的副本,则允许您在紧急情况下从其中上传程序.问题是由于空间原因,PLC 不存储 cmets。因此,如果线路出现故障,每分钟的停机成本为 5000 美元,并且一个人带着笔记本电脑跑出去,他可能不得不在没有 cmets 的情况下快速上传并尝试排除故障。把这些复制说明放在那里,浪费了他 10 分钟的时间,只让公司损失了 50,000 美元的停机时间。这些是编写PLC程序时必须注意的事项。

    其他一些提示:一些 PLC 支持 FOR 循环。 切勿使用它们。出于与上述相同的原因,它们使维护人员很难对代码进行故障排除。这是因为如果您在 PLC 中有一段代码每次扫描多次被扫描(如循环的内容),那么当您进入在线调试模式时,软件无法显示每个代码的值执行此扫描的 10 个循环,所以你真的不知道你在看什么值。然后,您必须编写所有这些棘手的代码,以将特定循环索引的循环值提取到您可以监控的其他一些标签(变量)中。这只是在紧急情况下解决问题的另一个障碍。每次扫描多次使用子程序也会遇到同样的问题。

    间接寻址(我们称之为数组)对于维护人员来说非常难以理解。当您处理配方管理(存储和检索如何构建零件的值)时,通常可以使用它们,但您应该尽量在程序的控制部分远离它。

    在 PC 编程中,我们当然会尽可能地重用代码。然而,在 PLC 和控制系统中,停机时间非常昂贵,而且硬件也很昂贵。内存很便宜,实际上PLC编程器也很便宜。因此,预计如果您的机器上有 10 个相同的东西(如传送带驱动器或其他东西),那么您将有 10 个不同的文件(子程序),每个驱动器一个,每个驱动器都有自己的变量与之关联:例如Drive1_Run、Drive2_Run、Drive3_Run 等。如果你有 PC 编程背景,你会觉得这很“错误”,但这都是因为我在上面提出的观点。当您处于停机状态,并且有人说 Drive 3 不工作时,您打开笔记本电脑,转到 Drive 3 的文件,然后查看 Run 输出梯级。您可以在程序执行时从那里开始进行故障排除。没有断点(程序永远不会停止)。

    祝你工作顺利。我又写了一些insights from my years of programming PLCs,如果你想看看的话。

    【讨论】:

    • Scott,我一直是维护人员,也是编写 PLC 程序的人员(现在仍然是!),现在我已经涉足了一些用 C# 编写的 .NET,我可以告诉你你在上面所说的一切都在赚钱!很好的答案。
    • 有用的旁注:在发布此答案 8 年后,未存储在 PLC 内存中的 cmets 部分可能不再是一个问题......许多较新的 PLC 现在将程序和标签 cmets 存储在内存与项目文件。
    【解决方案2】:

    您可以从互联网上的各种资源中学习PLC编程,其中之一是this(wikibooks)this

    除非您使用 PLC 特定功能,否则您编写的程序在用于 LLD(梯形逻辑图)的不同品牌的 PLC 中几乎相同。但是如果你使用像 IL(指令列表)这样的语言,会有更多的差异。但是一旦你编写了程序,存储和执行的格式会因品牌而异

    梯形逻辑是 PLC 的 5 种编程语言之一,其他分别是 FBD(功能块图)、ST(结构化文本,类似于 Pascal 编程语言)、IL(指令列表,类似于汇编语言)和 SFC (顺序功能图)。这些只是编程语言的各种表示形式,如果您愿意,可以使用各种风格。但通常,一个给定的品牌只支持其中一个。在美国,LLD 被广泛使用,而在欧洲,IL 更受欢迎。

    【讨论】:

      【解决方案3】:

      Ladder,通常称为 LD,是 ISO 61131 自动化编程标准中定义的几种语言风格之一。其他还有SFC(顺序流程图)、FBD(功能框图)、ST(结构化文本)和IL(指令列表)。 IL 类似于汇编程序,很少有人使用它。 ST 是一种基于文本的编程,很像早期版本的 BASIC。它也不经常使用。 LD 的设计类似于电气控制面板上的继电器触点(许多 PLC 已替换)。 FBD 看起来更像是电路图。 SFC 基本上是一个流程图。

      有些PLC支持全部,有些只支持一些,甚至一个。虽然 LD 是最常见的,但 FBD 和 SFC 越来越受欢迎。

      不同品牌使用的编程语言确实略有不同。它们通常足够相似,一旦您了解了一个品牌,您就可以使用它们中的任何一个,但您不能直接从一个 PLC 获取代码并在另一个品牌上使用。

      【讨论】:

      • LD 实际上在北美很常见,但根据我的经验,它很少被使用,而且经常被欧洲人看不起。我相信这是因为在欧洲,维护人员不会与 PLC 联机 - 他们为此致电工程部门,但在北美,维护人员会联机进行故障排除,进行更改,并且在某些情况下会做很多事情编程工作。类似电路的 LD 更适合这种文化。
      • @Scott:“我相信这是因为在欧洲,维护人员不会使用 PLC 上网”——我不同意这一点。我花了数年时间做这件事,甚至从头开始编写程序,所有这些都是我的电气维护角色。
      【解决方案4】:

      到目前为止给出的答案都非常符合目标。我发现PLC在语言和设置方面具有分裂的个性。他们的核心设计是为电气人员提供一种灵活的方法,为他们的整体设计设置控制逻辑。 PLC 基本上是一堆输入和一堆输出,它们的连接方式由您加载到设备中的软件控制。

      用于 PLC 的语言的一个重点是它们可供具有电气背景的人使用。因此,对于习惯于高级语言甚至汇编语言的人来说,习语和结构似乎与直觉相反。例如,对于电气人员来说,梯形逻辑非常容易使用。

      然而,近年来 PLC 一直支持多种语言,以实现最大的灵活性。然而,在我看来,我工作的少数 PLC 在编程环境方面非常缺乏。诸如将变量名称分配给内存位置之类的简单事情通常没有设计到所使用的语言中。那些容易工作的往往不是最适合这项工作的成本效益。

      尽管存在这些缺陷,但它们非常适合简化复杂的电气系统。如果你和别人一起做一个项目,你会发现你的编程知识将帮助项目解决棘手的程序。我能够获取一个 100 梯级的梯形逻辑程序并将其重写为三分之一的梯级。一旦我能够学习梯形逻辑语言,我就能够实现各种优化,从而降低程序的复杂性。

      一个提示是,您需要了解闩锁。有时您需要存储或保持一些输出,除非您有锁存器,否则结果将在下一个周期消失。一旦你理解了这个问题,它就会变得很清楚,但一开始这对我来说是一个很大的挫败感。

      【讨论】:

        【解决方案5】:

        PLC 编程应被视为 PLC 软件工程输出的实施活动,除非您将 PLC 纯粹用作机械或电气解决方案的替代组件的一部分。

        以此为基础,PLC 编程环境通常是 IEC61131 驱动的,保证循环时间,“抢先式”实时,无需处理实时操作系统相关问题,连续代码扫描,非程序指针,不同于典型的概念计算机任务产生一种多任务处理。代码执行自然是原子的,任务之间不需要使用监视器。

        每种语言都与您的代码与您想要实现的逻辑模型的可想象性有密切的关系。

        1. 梯形图有其关于电力潮流联锁方式的基本概念。单个网络内的代码解析是水平或垂直扫描(您可以从制造商或其他站点找到有关此主题的资源)。如果您的代码具有单次扫描分辨率性质并且在一个网络中,一些不可思议的行为可能是由于扫描类型造成的(重要的是要记住梯形图只是电路的仿真,它仍然是顺序执行的)。

          李>
        2. FBD 或功能块图是电子信号流,但今天可能是数据流,具体取决于 PLC 的类型。 FBD 显示更清晰的执行顺序,在扫描顺序上与水平扫描梯形图非常相似。如今,FBD 通常用作对象功能块的容器,尽管依赖实现和与流程模型的视觉相似性取决于 PLC 类型。

        3. 文字与 BASIC 非常相似,但只是语法;执行仍然是扫描的。文字语言有利于数学计算。对于高级实现,使用 Literal 可以更容易地使用对象内的方法或属性派生。使用类似英语的状态表示或常量进行状态机编程,使程序非常易读。

        4. 语句列表看起来类似于汇编助记符,但同样的执行仍然是扫描,而不是程序指针。它在位运算和括号式离散逻辑方面很强大。它可以是一种非常有效的语言,可以使用适当的结构和注释。

        5. SFC 或顺序流程图是顺序实现的补充语言。 SFC 对动作块激活、状态转换、并行序列激活和合并具有固有的规则。但是,复杂的异常分支或并发操作管理会使实现变得复杂,流程图难以阅读。

        关于 IO 处理、通信、热备的 PLC 系统管理是硬件配置工作,并且取决于产品。一般来说,可以与软件工程分开处理。但是,PLC系统管理相关的数据属于“定位”(独立数据寻址区域)类型,软件工程中良好的数据建模方法有助于系统数据的可管理性。

        【讨论】:

        • 恐怕这是我对该用户的第二次投反对票,但给出的描述混淆了任务并使任务复杂化。用于“常规”软件的软件工程原理通常并不真正适用于 PLC/PAC 编程。想想为桌面编写客户端应用程序和编写硬实时系统来控制汽车引擎之间的区别。使用完全不同的方法,适用于应用程序的技术。
        【解决方案6】:

        Online PLC Simulator 可能有用。

        【讨论】:

          【解决方案7】:

          您可以使用结构化文本 (ST),它由一系列指令组成,这些指令由高级语言(“IF..THEN..ELSE”)或循环(WHILE ..DO) 可以执行。

          我发现它比 Ladder 更好,因为它接近标准编程语言。

          【讨论】:

            【解决方案8】:

            我在大学里学过一点 PLC 编程。在我看来,比组装低一级,但我们使用的设备不是最新的。

            我相信您需要一个 PLC 驱动程序,但我会先寻找模拟器并在购买之前阅读更多相关信息。

            【讨论】:

            • 我不同意你的“比汇编低一级”的想法。如果您查看梯形逻辑生成的 OPcode,那看起来与汇编语言(XIC 等)完全一样。在 IEC-61131-3 术语中,这就是“指令列表”(IL)。梯形逻辑是一种与功能块图有相似之处的可视化语言,功能块图绝对是比汇编更高的层次(特别是因为它更具有声明性而不是命令性)。
            【解决方案9】:

            Allen-Bradley 有一个免费的基于 dos 的软件 PLC,专门用于培训。如果您访问他们的网站或谷歌,您可能会找到它。它用于在学校教授 PLC 编程。

            【讨论】:

              【解决方案10】:

              对于想要学习梯形逻辑的初学者,最好的方法是参加http://plcs.net的免费在线培训

              【讨论】:

                【解决方案11】:

                PLC 是用于使用梯形逻辑的设备的术语。以更典型的编程语言编程的设备通常称为微控制器。但是,我们中的一些人有时会将它们全部归为 PLC 名称。 :-) 不确定梯形逻辑有多少变化,但微控制器代码可能会有很大差异。

                【讨论】: