
1. 从继电器柜到TIA PortalPLC编程到底在编什么很多人第一次接触PLC脑子里冒出来的画面是电工师傅蹲在配电柜前拧螺丝。这个印象不算错但只对了一半。PLC的全称是可编程逻辑控制器它的本质是一台为工业现场量身定制的工业计算机。你写的程序不是跑在手机或服务器上而是跑在一个能在粉尘、震动、高温环境下连续工作几年的铁盒子里。它要干的事情非常具体读取按钮、传感器、限位开关的输入信号按照你设定的逻辑做判断然后驱动接触器、电磁阀、变频器、指示灯去动作。所以PLC编程的核心不是“写代码”而是“把一套控制意图翻译成机器能可靠执行的逻辑”。这个翻译过程有几个绕不开的基本概念理解了它们后面学任何品牌都只是换皮。输入输出I/O是PLC的感官和手脚。输入端子接的是按钮、光电开关、接近开关、温度变送器这类信号源输出端子接的是继电器线圈、电磁阀、变频器启动端子这类执行机构。你在程序里看到的不是“按钮”而是一个地址比如西门子里的I0.0Allen Bradley里的Local:1:I.Data.0。程序逻辑就是围绕这些地址做文章。扫描周期是PLC的工作节奏。PLC不是事件驱动的它是循环扫描读输入、执行程序、刷新输出一圈一圈地跑。这个周期通常在几毫秒到几十毫秒之间。理解这一点非常关键因为它决定了为什么有些逻辑写法在电脑上没问题放到PLC上就会出岔子。比如你写了一个自锁电路如果扫描顺序没搞清楚可能出现“输出闪一下就灭”的现象。梯形图是PLC编程最主流的表达方式。它的图形长得像电气控制里的继电器回路左边是电源轨右边是回路中间是触点和线圈。对电工出身的人来说梯形图几乎是零门槛上手。但梯形图能表达的逻辑有边界复杂运算、数据处理、通信协议解析这些就得靠结构化文本ST、功能块图FBD或者指令表IL来补。我见过太多新手一上来就纠结“学西门子还是学三菱”其实这个问题的优先级很低。PLC编程的底层思维是通用的位逻辑、定时器、计数器、比较、移位、数据处理、模拟量缩放、通信。你把这些吃透换一个品牌无非是查一下指令手册和地址映射规则。真正拉开差距的是你对现场工艺的理解和对异常情况的预判能力。提示如果你是完全零基础不要一上来就买PLC硬件。先用仿真软件把逻辑跑通成本低、试错快等逻辑稳定了再上真机验证。2. 选西门子还是Allen Bradley入门路线的现实取舍这个问题在论坛里能吵几百楼但落到实际答案取决于你身边有什么资源、你未来可能面对什么项目。我把两条路线的特点拆开讲你自己对号入座。2.1 西门子路线的优势与典型工具链西门子在国内外中小型自动化项目里占有率极高尤其是S7-1200和S7-1500这两个系列。它的编程平台是TIA Portal全集成自动化门户把PLC编程、HMI组态、驱动配置整合在一个工程里。对新手来说TIA Portal的界面相对统一学会一个系列迁移到另一个系列的成本不高。入门西门子我建议的路径是这样的仿真先行S7-1200/1500配套的仿真工具是PLCSIM可以在没有硬件的情况下把程序跑起来观察变量变化。PLCSIM Advanced还支持更复杂的通信仿真但对入门来说普通PLCSIM够用了。从S7-1200入手它比S7-1500便宜指令集对新手友好社区资料也多。很多教学案例、红绿灯程序、小车控制程序都是基于1200写的。TIA Portal版本选择V16、V17、V18、V19、V20这些版本差异主要体现在支持的硬件和功能上。入门用V16或V17就足够没必要追最新版。版本越高对电脑配置要求越高装一个几十GB的软件在低配笔记本上跑体验会很差。有个坑要提前说TIA Portal安装过程中经常遇到许可证相关的问题比如提示找不到许可证。这通常是因为授权管理器没有正确安装或授权文件没有激活。解决办法是单独安装Automation License Manager确认授权状态而不是反复重装整个TIA Portal。2.2 Allen Bradley路线的适用场景Allen Bradley罗克韦尔自动化在北美和部分外资项目里是主流。它的编程软件是Studio 5000针对ControlLogix和CompactLogix系列。AB的编程风格和西门子差异不小地址命名、数据类型、指令体系都不一样。如果你所在的行业或公司明确用AB那就直接学AB不要绕道。AB的入门门槛在于软件获取和授权成本相对较高仿真工具也需要额外配置。但它的标签化编程方式用标签名代替物理地址在大型项目里可读性更好这一点是很多工程师喜欢它的原因。2.3 两条路线的对比与选择建议对比维度西门子Allen Bradley国内占有率高中小项目常见中外资和特定行业多入门软件TIA PortalStudio 5000仿真工具PLCSIM / PLCSIM AdvancedEmulate 5000编程风格地址符号梯形图为主标签化梯形图ST学习资料中文资料丰富英文资料为主硬件成本S7-1200入门便宜CompactLogix偏贵我的建议很直接如果你没有明确的公司要求先学西门子S7-1200加TIA Portal。原因不是它“更好”而是它的学习资源密度最高遇到问题更容易找到答案。等你把基本逻辑玩熟了再花一两周看AB的指令手册迁移成本远比你想象的低。3. 梯形图之外什么时候该换编程语言梯形图是PLC编程的母语但它不是万能的。我见过不少项目梯形图写了一两千个网络逻辑绕得像迷宫维护的人苦不堪言。问题不在于梯形图不好而在于用错了场景。3.1 梯形图、结构化文本与功能块图的适用边界梯形图LAD最适合表达布尔逻辑和顺序控制。按钮按下启动、限位到位停止、互锁保护、定时器延时这些用梯形图写出来一目了然电工也能看懂。但一旦涉及数组操作、循环计算、字符串处理、复杂数学运算梯形图就会变得非常笨拙。结构化文本ST类似Pascal或C的语法适合做数据处理、配方管理、通信协议解析、PID参数计算。比如你要把一批模拟量采集值做滑动平均滤波用ST几行就写完了用梯形图得摆一大片。功能块图FBD用方框和连线表达逻辑适合做过程控制和信号流清晰的场合。它在欧洲和过程工业里用得比较多。顺序功能图SFC专门用来描述状态机。一个设备有“待机、启动、运行、暂停、故障、复位”这些状态用SFC画出来比梯形图清晰得多。很多PLC平台都支持SFC比如西门子的GRAPH语言、汇川基于Codesys的平台也支持。3.2 一个真实场景模拟量滤波为什么不该用梯形图硬写假设你有一个压力传感器信号抖动比较厉害需要在程序里做滤波。常见做法是取最近N次采样的平均值。如果用梯形图你需要建一个数组、一个指针、一个累加器、一个计数器然后每个扫描周期做移位和累加。逻辑能实现但网络数量多调试时很难一眼看出问题。用ST写大概是这样// 滑动平均滤波窗口大小10 FOR i : 9 TO 1 BY -1 DO buffer[i] : buffer[i-1]; END_FOR; buffer[0] : raw_value; sum : 0; FOR i : 0 TO 9 DO sum : sum buffer[i]; END_FOR; filtered_value : sum / 10;这段代码逻辑清晰改窗口大小只需要改循环边界。梯形图要实现同样的功能网络数量至少翻三倍而且每次修改都要重新核对触点逻辑。注意不是所有PLC都支持ST。S7-1200/1500支持SCL结构化控制语言AB的Studio 5000支持ST三菱的GX Works也支持ST。选型时要确认平台的语言支持情况。3.3 语言混用的工程实践实际项目里我通常这样分配主控流程和互锁用梯形图数据处理和通信解析用ST状态机用SFC或GRAPHPID回路用FBD或专用功能块。一个工程里混用多种语言完全正常关键是让每种语言干它最擅长的事。有个细节容易被忽略不同语言之间的变量交互要统一命名规范。比如你在ST里定义了一个filtered_pressure在梯形图里引用时不要又写成M10.0这种地址而是用符号名。TIA Portal支持符号寻址AB的Studio 5000本身就是标签化编程。坚持用符号名后期维护会轻松很多。4. 仿真跑通之后真机调试才是真正的考试仿真软件能帮你验证逻辑对不对但它模拟不了真实世界的所有意外。真机调试阶段遇到的问题往往和逻辑本身无关而是接线、信号质量、扫描周期、通信配置这些“非代码”因素。4.1 输入输出接线中最容易犯的三个错误第一个错误PNP和NPN搞混。很多传感器分PNP高电平有效和NPN低电平有效两种输出类型。PLC的输入模块也分漏型和源型。如果传感器是PNP输入模块配置成漏型信号就进不来。反过来也一样。选型时一定要确认传感器输出类型和PLC输入模块的匹配关系。第二个错误输出负载超过模块额定电流。PLC输出模块每个点的额定电流通常在0.5A到2A之间驱动继电器线圈、电磁阀没问题但直接驱动大功率负载就会烧点。正确做法是通过中间继电器过渡PLC输出点驱动中间继电器线圈中间继电器的触点再去控制大负载。第三个错误模拟量信号没有做屏蔽和接地。模拟量信号对干扰非常敏感。如果传感器信号线没有屏蔽层或者屏蔽层两端都接地形成了地环路采集到的数值会跳得厉害。正确做法是屏蔽层单端接地信号线和动力线分开走线槽。4.2 扫描周期与程序执行顺序的隐性陷阱PLC的扫描机制决定了程序是从上到下、从左到右执行的。如果你在程序开头读取了输入状态在程序中间又用到了这个输入那么中间这段时间输入变化了程序用的还是旧值。这在大多数情况下没问题但在高速计数、精确定时、脉冲捕捉这些场景下就会出问题。举个例子你用普通输入点去捕捉一个持续时间只有几毫秒的信号如果扫描周期是10毫秒这个信号很可能被漏掉。解决办法是用高速计数模块或者中断输入而不是靠普通扫描去抓。另一个常见陷阱是双线圈输出。同一个输出地址在程序里被两个线圈驱动实际结果取决于扫描顺序最后一个生效。这种写法在调试时极难排查因为你看程序逻辑觉得两个条件都对但输出就是不对。TIA Portal和Studio 5000都会对双线圈给出警告但很多人忽略了。4.3 通信配置PLC和SCADA、HMI、变频器怎么连PLC很少孤立工作它要和触摸屏、上位机SCADA、变频器、伺服驱动器交换数据。通信配置是新手最容易卡住的地方。PLC与HMI通信西门子的HMI如精智面板和S7-1200/1500之间通过以太网或Profibus连接在TIA Portal里组态时直接拖拽变量即可。跨网段通信需要在HMI和PLC的网络设置里正确配置网关。MCGS触摸屏和西门子1500跨网段通信时要确认双方的IP地址、子网掩码、网关设置一致并且在MCGS的驱动配置里选择正确的PLC型号和通信协议。PLC与SCADA通信SCADA连接PLC通常走OPC UA、Modbus TCP、S7通信等协议。西门子S7-1200/1500支持OPC UA服务器功能SCADA作为客户端读取PLC的变量。配置时需要先在PLC侧启用OPC UA服务器设置端口和安全策略然后在SCADA侧添加对应的驱动。PLC与变频器通信ABB变频器与西门子PLC之间常用Modbus RTU或Profibus。Modbus RTU走RS485串口需要配置波特率、数据位、停止位、校验位以及从站地址。这些参数在PLC侧和变频器侧必须完全一致否则通信不上。有个经验通信调试时先用最简单的工具验证物理层。比如Modbus RTU先用串口调试助手发一帧读寄存器命令看变频器有没有回复。物理层通了再排查协议层和配置层。不要一上来就在PLC程序里调那样出了问题你分不清是硬件问题还是程序问题。5. 从红绿灯到灌溉系统用一个小项目串起所有知识点学PLC最忌讳只看不练。我建议找一个具体的小项目把输入输出、定时器、计数器、比较、状态机、HMI组态全部串一遍。十字路口红绿灯和基于PLC的大棚灌溉是两个很合适的入门项目。5.1 红绿灯项目的完整拆解红绿灯的逻辑看起来简单但要把东西南北四个方向、直行左转、黄灯过渡、紧急模式都做对涉及的知识点不少。第一步定义输入输出。输入包括启动按钮、停止按钮、紧急模式按钮。输出包括东西红、东西黄、东西绿、南北红、南北黄、南北绿。如果做左转灯还要加左转箭头灯。第二步画状态转移图。红绿灯本质是一个状态机。状态可以定义为东西绿南北红、东西黄南北红、东西红南北绿、东西红南北黄。每个状态有固定的持续时间用定时器控制切换。第三步用梯形图或SFC实现。如果用梯形图可以用定时器串联的方式每个状态一个定时器定时到了切换到下一个状态。如果用SFC直接画状态转移条件更直观。第四步加互锁和异常处理。比如紧急模式下所有方向都变红或者某个方向常绿。还要考虑如果两个方向同时绿灯会怎样程序里必须做互锁防止冲突输出。第五步接HMI做监控。在触摸屏上画一个路口示意图用不同颜色的灯表示当前状态加启动停止按钮和倒计时显示。这一步能让你学会HMI变量与PLC变量的绑定。这个项目做完你对定时器、比较指令、状态切换、互锁、HMI组态就有了完整的实操经验。5.2 大棚灌溉项目的传感器与执行器配置大棚灌溉比红绿灯更贴近实际工程因为它涉及模拟量采集和闭环控制。输入侧土壤湿度传感器模拟量4-20mA或0-10V、温度传感器、光照传感器、手动/自动切换开关、启动按钮。输出侧水泵接触器、电磁阀、报警指示灯、HMI显示。控制逻辑自动模式下当土壤湿度低于设定下限启动水泵和对应区域的电磁阀湿度达到上限停止灌溉。温度过高时启动通风或遮阳。所有状态在HMI上实时显示并记录灌溉历史。这个项目的难点在于模拟量缩放。传感器输出4-20mA对应湿度0-100%PLC模拟量输入模块把4-20mA转换成0-27648的整数以西门子为例。你需要在程序里做线性缩放把27648对应到100%0对应到0%。如果传感器是0-10V对应关系又不一样。缩放公式是实际值 (原始值 - 原始最小值) / (原始最大值 - 原始最小值) * (实际最大值 - 实际最小值) 实际最小值用SCL写一个缩放功能块输入原始值、原始范围、实际范围输出实际值。这个功能块可以在不同项目里复用。5.3 把项目经验转化为可复用的功能块做完两三个项目之后你会发现有些逻辑反复出现模拟量缩放、滑动平均滤波、PID控制、报警延时确认、设备运行时间统计。这些都应该封装成功能块下次项目直接调用。TIA Portal里可以建自定义功能块FB定义输入输出接口和内部变量生成一个可复用的“黑盒”。AB的Studio 5000里叫Add-On InstructionAOI概念类似。封装功能块的好处是逻辑经过验证减少重复劳动程序结构清晰别人接手时容易理解。我个人的习惯是每做完一个项目花半天时间把通用逻辑抽出来整理成自己的功能块库。这个习惯坚持一两年你的开发速度会明显快于同龄人。6. 新手最常卡住的几个具体问题6.1 PLCSIM启动不了、没有报错怎么办这是TIA Portal用户的高频问题。PLCSIM启动不了且没有报错通常有几个原因一是PLCSIM的版本和TIA Portal版本不匹配比如TIA Portal V17配了PLCSIM V15二是项目里的PLC型号和PLCSIM支持的型号不一致三是Windows防火墙或安全软件拦截了PLCSIM的通信端口。排查顺序先确认TIA Portal和PLCSIM版本对应关系再检查项目CPU型号是否在PLCSIM支持列表里然后临时关闭防火墙测试。如果PLCSIM Advanced报Error 11通常是虚拟网卡配置问题检查网络适配器里有没有安装PLCSIM Virtual Ethernet Adapter没有的话重新安装PLCSIM Advanced。6.2 S7-200 SMART能不能做Modbus TCPS7-200 SMART的早期固件版本不支持Modbus TCP只支持Modbus RTU。后来部分固件版本增加了Modbus TCP库指令但功能有限。如果你的项目必须用Modbus TCP建议直接上S7-1200它的Modbus TCP指令更完善配置也更简单。不要为了省硬件成本在200 SMART上硬扛后期调试的时间成本远超硬件差价。6.3 AI生成的PLC代码能不能直接用现在有一些工具可以根据自然语言描述生成PLC代码片段。我的看法是可以拿来参考但不要直接下载到PLC里运行。原因很简单AI生成的代码往往缺少对现场异常情况的处理互锁逻辑可能不完整扫描周期和实时性也没有考虑。PLC控制的是真实设备一个逻辑漏洞可能导致设备损坏或人身伤害。AI生成的代码必须经过人工逐行审查、仿真验证、空载测试、带载测试才能上现场。6.4 学编程和PLC编程是两回事经常有人问“我学过Python学PLC是不是很快”。答案是语法层面确实快但思维层面要重新训练。Python程序跑在电脑上内存大、速度快、可以随时中断调试。PLC程序跑在资源受限的控制器上扫描周期固定内存有限调试手段也少。更重要的是PLC程序直接驱动物理设备一个逻辑错误就是真实世界的动作。所以学PLC编程语法不是门槛对工业现场的理解和严谨的工程习惯才是。7. 我自己的学习路径与踩坑记录我最初学PLC的时候犯过一个很典型的错误把程序写得特别“聪明”。比如用间接寻址、用复杂的数学运算、用嵌套很深的循环觉得这样显得水平高。结果有一次设备出故障我对着自己三个月前写的程序看了两个小时才找到问题。从那以后我给自己定了一条规矩程序的可读性优先于技巧性。能用简单逻辑实现的绝不炫技。变量命名要能看懂注释要写清楚每个网络在干什么状态机要画出来贴在程序里。另一个坑是忽视硬件手册。我曾经用S7-1200的一个输出点直接驱动一个电磁阀没查电磁阀的启动电流结果输出点烧了。后来查手册才知道电磁阀启动瞬间电流可能是额定电流的好几倍必须通过中间继电器过渡。硬件手册里那些电气参数不是摆设选型和接线之前一定要看。还有一个经验是关于版本管理的。TIA Portal的项目文件很大每次修改都另存一个版本硬盘很快就满了。我现在的做法是用Git管理程序源文件虽然PLC项目不能像代码一样做diff但至少能记录每次修改的时间和说明。对于大型项目还会导出源文件SCL、LAD的源文件做版本对比。最后说一个心态问题。PLC编程入门不难但精通需要时间。你不可能看完一本教材就会做项目也不可能仿真跑通就能上现场。真正的进步来自于一个个实际项目的积累来自于每次故障排查后的复盘来自于对工艺理解的加深。别急着追求“学完”先追求“做完一个能跑起来的小项目”然后第二个、第三个经验自然就长出来了。