我如何学习PLC编程?对于不同品牌的PLC,它会有很大的不同吗?梯形图编程与PLC编程相同吗?
我做了很多PLC编程,现在做了很多.NET编程.切换是非常危险的,因为你认为很多技能应该是可转移的(模式等)会让你误入歧途.
我告诉人们最大的不同之处在于,PC程序代码应该像其他程序员一样被编写,但必须编写PLC程序(梯形逻辑),就像维护人员是受众一样.大多数设施(特别是制造)的维护经常直接连接到PLC,在在线模式下,他们可以通过图形方式观察代码,找出问题所在.
例如,如果输出未打开,它们将输出电气设备ID键入编程软件的查找功能,找到输出线圈,并从那里开始追溯寻找问题.一些PLC程序员经常犯的错误之一是将他们的I/O"映射"到一个结构中(在PLC中,这些称为用户定义的类型),并且他们使用复制指令将所有输入或输出移到结构一下子.从PC编程的角度来看是有道理的,但这会让维护人员想要杀死你.通常,编程软件提供交叉引用功能,它们可以指定输出线圈,并且它将告诉它们在程序中的任何地方使用它.如果使用复制指令将10个字的I/O移动到10个字的数据结构中,他必须坐在那里计算位以确定复制源中的哪个位映射到目标端的哪个位.复制.没错,评论可以提供帮助,但也存在问题...... PLC存储整个程序,如果您需要进行故障排除而且没有原始程序的副本,则允许您在紧急情况下从程序中上传程序.问题是由于空间原因,PLC不存储注释.因此,如果生产线停机,停机时每分钟花费5000美元,而且有一台笔记本电脑在那里用完,他可能不得不快速上传而没有评论,并尝试对其进行故障排除.在那里有那些复制说明,浪费了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输出行.在程序执行时,您从那里开始进行故障排除.没有断点(程序永远不会停止).
祝你好运.如果你想查看它们,我写了一些关于PLC编程的更多见解.
您可以从互联网上的各种来源学习PLC编程,其中之一就是这个(wikibooks)或者这个
除非您使用PLC特定功能,否则您编写的程序在不同品牌的LLD(梯形图逻辑图)PLC中几乎相同.但是如果你使用像IL(指令列表)这样的语言会有更多的差异.但是一旦你编写了程序,存储和执行的格式就会因品牌而异
梯形逻辑是PLC的5种编程语言之一,其他是FBD(功能块图),ST(结构化文本,类似于Pascal编程语言),IL(指令列表,类似于汇编语言)和SFC(顺序功能)图表).这些只是编程语言的各种表示,如果你愿意,可以有各种各样的风格.但通常情况下,某个品牌只支持其中一种.在美国,LLD被广泛使用,而在欧洲,ILs更受欢迎.
梯形图,通常称为LD,是ISO 61131自动化编程标准中定义的几种语言风格之一.其他是SFC(顺序流程图),FBD(功能框图),ST(结构化文本)和IL(指令列表).IL与汇编程序类似,很少有人使用它.ST是基于文本的编程,与早期版本的BASIC非常相似.它也不经常使用.LD的设计类似于电气控制面板(许多PLC更换)的继电器触点.FBD看起来更像电路图.SFC基本上是一个流程图.
有些PLC支持所有,只有一些,甚至一个.虽然LD是最常见的,但FBD和SFC越来越受欢迎.
不同的品牌使用略有不同的编程语言.它们通常相似,一旦你理解了一个品牌,就可以使用它们中的任何一个,但你不能直接从一个PLC中获取代码并在另一个品牌上使用.
到目前为止给出的答案非常符合目标.有一件事我发现PLC在语言和设置方面具有分裂的个性.他们的核心设计是为电气人员提供一种灵活的方法来为他们的整体设计设置控制逻辑.PLC基本上是一堆输入和一堆输出,它们的连接方式由加载到设备中的软件控制.
用于PLC的语言的重点之一是来自电子背景的人可以访问它们.因此,对于习惯于高级语言甚至汇编语言的人来说,习语和结构似乎是反直觉的.例如,Ladder Logic非常适合电气人士使用.
然而,近年来PLC一直支持多种语言以获得最大的灵活性.但是在我看来,我工作的少数PLC在编程环境方面非常缺乏.将变量名称分配给内存位置这样的简单事情通常不会被设计到所使用的语言中.那些易于工作的工作往往不是最有效的工作.
尽管存在这些障碍,但它们非常适合简化复杂的电气系统.如果您正在与项目中的其他人合作,您会发现您的编程知识将有助于项目解决棘手的程序.我能够采用100阶梯逻辑程序并将其重写为三分之一的梯级.一旦我能够学习梯形逻辑语言,我就能够实现各种优化,降低了程序的复杂性.
一个提示是,您需要了解锁定.有时你需要存储或保存一些输出,除非你有一个锁存器,结果将在下一个周期消失.一旦你理解了这个问题就会变得清晰,但起初它对我来说是一个很大的挫败感.
PLC编程应被视为PLC软件工程输出的实施活动,除非您使用PLC作为机械或电气解决方案的替代组件的纯粹部分.
以此为基础,PLC编程环境通常采用IEC61131驱动,保护循环时间,"先发制人"实时,无需处理实时操作系统相关问题,连续代码扫描,非程序指针,不同于典型计算机任务产生的概念多任务处理.代码执行自然是原子的,不需要在任务之间使用监视器.
每种语言都与您想要实现的逻辑模型的代码的可接受性密切相关.
Ladder的基本概念是电力流动联锁方式.单个网络中的代码解析是水平扫描或垂直扫描(您可以从制造商或其他站点找到有关此主题的资源).如果您的代码具有单扫描分辨率特性并且在一个网络内,则某些不可思议的行为可能是由于扫描类型(重要的是要记住梯形图只是模拟电路,它仍然是执行中的顺序).
FBD或功能框图是电子信号流,但今天可以是数据流,具体取决于PLC的类型.FBD在扫描序列中显示出与水平扫描梯非常相似的更清晰的执行顺序.今天,FBD通常用作对象功能块的容器,尽管依赖性实现和与过程模型的视觉相似性取决于PLC类型.
Literal与BASIC非常相似,但只有语法; 执行仍然是扫描.文字语言有利于数学计算.对于高级实现,使用Literal可以更轻松地在对象中使用方法或派生属性.使用类似英语的状态表示或常量的状态机编程使程序非常易读.
语句列表看起来类似于程序集助记符,但是执行仍然是扫描而不是程序指针.它在位操作和括号样式的离散逻辑中很强.它可以是一种非常有效的语言,可以与正确的结构和注释一起使用.
SFC或顺序流程图是序列实现的补充语言.SFC在动作块激活,状态转换,并行序列激活和合并方面具有固有的规则.但是,复杂的异常分支或并发操作管理会使实现变得复杂,并且流程图难以阅读.
IO处理,通信,热备份的PLC系统管理是硬件配置工作,并且取决于产品.通常,可以与软件工程分开处理.但是,与PLC系统管理相关的数据属于"定位"(独立数据寻址区域)类型,软件工程中的良好数据建模方法可以帮助系统数据的可管理性.
该在线PLC模拟器可能是有用的。