PLC编程入门到非标项目调试:90条实战经验避坑指南
1. 入行前三年我把踩过的坑都翻了出来PLC这行有个很有意思的现象学校里教的东西和现场用的东西中间隔了大概一百个非标项目。我刚入行那会儿抱着三菱FX3U的编程手册啃了三个月觉得自己行了结果第一次去现场调试连IO分配表都看不懂——图纸上标着“X0启动”我硬是找了十分钟才在电柜里摸到那根线。后来跟着老师傅跑了两年现场又自己独立做了十几个大小项目才慢慢把那些零碎的经验串起来。这篇文章是我入行1到3年这段时间里陆续整理出来的90条实战经验。说是90条其实每一条背后都是一个具体的场景、一次翻车、或者一个让我拍大腿的“原来还能这样”。内容覆盖PLC编程入门基础知识、IO分配、梯形图符号、西门子1200和S7-200 SMART的实操细节、Modbus和OPC UA协议读取设备状态数据、伺服和步进电机的脉冲控制、PID温度调节、程序框架搭建以及非标项目调试实战中那些没人会主动告诉你的坑。适合谁看如果你刚入行不久正在被梯形图、IO分配、通讯协议这些东西搞得头大或者你做了几个小项目但总觉得程序写得不够“顺”那这些经验应该能帮你省下不少试错的时间。如果你已经做了三五年也不妨扫一眼说不定某一条正好戳中你最近遇到的怪问题。下面我按主题把这些经验拆开讲每条都尽量说清楚“为什么”和“怎么操作”能直接抄作业的地方我会把参数和步骤写明白。2. 编程入门阶段最容易被忽略的六件事2.1 梯形图符号背后的逻辑比符号本身重要很多人学PLC第一步就是背梯形图符号大全常开触点、常闭触点、线圈、置位复位、定时器、计数器。背完了发现写个正反转梯形图还行一到实际项目就懵了。问题出在哪儿符号是死的逻辑是活的。举个例子正反转梯形图里通常会用两个接触器的常闭触点互锁。这个互锁在梯形图里就是一个常闭触点串在另一个线圈前面。但现场接线的时候如果你只靠程序互锁不接硬件互锁一旦接触器触点粘连程序再完美也挡不住短路。所以我的习惯是程序互锁和硬件互锁必须同时存在梯形图里那个常闭触点只是最后一道防线不是唯一防线。再比如定时器三菱的T0到T199是100ms定时器T200到T245是10ms定时器。很多人写电机顺启逆停定时器的时候随便选一个T结果发现时间对不上。其实只要记住100ms定时器的设定值乘以0.1就是秒数10ms的乘以0.01。选哪个取决于你的精度要求一般顺启逆停用100ms足够了。提示梯形图里每个符号都有它的物理含义写程序的时候脑子里要能浮现出对应的硬件动作而不是只盯着屏幕上的图形。2.2 IO分配表不是随便填的它决定了你后期改程序的痛苦程度IO分配这件事新手最容易犯的错就是“按顺序来”。X0启动、X1停止、X2急停、X3传感器1、X4传感器2……看起来整齐但项目稍微大一点就乱了。我吃过最大的亏是一个12轴的运动控制项目IO点有200多个前期没规划好后期加一个传感器就要翻遍整个程序改地址。后来我总结了一个原则按功能模块分区预留20%的余量。比如区域地址范围用途数字量输入X0-X27按钮、限位、传感器数字量输出Y0-Y17接触器、指示灯、电磁阀模拟量输入AIW0-AIW15温度、压力、流量模拟量输出AQW0-AQW7变频器给定、比例阀每个区域内部再按设备编号排比如1号电机的限位用X10、X112号电机的用X12、X13。这样后期查线、改程序都快得多。西门子1200的IO地址是系统自动分配的但你可以通过修改设备组态里的起始地址来手动规划这个功能一定要用起来。2.3 程序框架比单个指令重要一百倍我见过太多人的程序从头到尾就是一段主程序所有逻辑堆在一起几千步下来自己都找不到北。这种程序能跑但没法维护更没法交给别人。一个基本的程序框架应该包含这几个部分初始化段上电时复位所有输出、清零计数器、设置初始参数手动段每个动作单独控制用于调试和维修自动段按流程顺序执行包含步序控制报警段所有故障检测和处理通讯段与触摸屏、上位机、变频器的数据交换输出段统一管理所有输出线圈避免双线圈问题西门子1200里可以用FC和FB来分块三菱FX系列虽然没有那么强的结构化能力但也可以用主程序调用子程序的方式来实现类似效果。关键是让每一段程序只做一件事这样出问题的时候能快速定位。2.4 从10进制转16进制梯形图里其实有更简单的办法有人在网上问“S71200中将10进制转换为16进制的程序梯形图”其实西门子1200里根本不需要自己写转换逻辑。你直接把十进制数传送到一个Word类型的变量里然后在监控表里切换显示格式就能看到十六进制。如果是要在触摸屏上显示用字符串转换指令或者直接设置显示格式就行。三菱FX3U里稍微麻烦一点但也可以用WAND、WOR这些逻辑指令来提取高低字节。比如要把D0里的十进制数转成两个十六进制字节高字节是D0除以256的商低字节是余数。梯形图里用DIV指令和MOV指令组合就能实现。注意不同品牌PLC的寄存器位数不一样三菱FX3U的D寄存器是16位的西门子1200的Word也是16位但DWord是32位。转换之前先确认数据宽度不然会溢出。2.5 普通寄存器的断电保持参数设置比程序更靠谱FX3U的D0到D8属于普通寄存器默认断电不保持。有人想通过程序来实现保持其实没必要。三菱的PLC参数里有一个“软元件设置”选项可以直接把D0到D200设置为断电保持区域。这个设置是写在PLC内部的EEPROM里的比用程序备份更可靠。具体操作在GX Works2里打开“PLC参数”找到“软元件设置”标签页把“断电保持范围”里的D寄存器起始地址和结束地址填进去下载参数后生效。西门子1200没有这个直接设置但可以用数据块DB的“保持”属性来实现在DB块的属性里勾选“保持性”就行。2.6 仿真软件能省一半的调试时间但别全信它信捷PLC仿真、西门子PLCSIM、三菱GX Simulator这些工具在前期验证逻辑的时候非常好用。我习惯在去现场之前先在仿真里把自动流程跑一遍确认步序、定时器、计数器都没问题。但仿真有个致命缺陷它不模拟硬件响应时间和干扰。比如一个气缸的磁性开关实际动作可能有几十毫秒的延迟仿真里是瞬间到位的。如果你完全按仿真的节奏写程序现场可能会因为信号没到位而卡住。所以我的做法是仿真验证逻辑现场验证时序。仿真里跑通了现场还要留出足够的等待时间或者用传感器信号做条件判断而不是单纯靠定时器。3. 通讯与协议从Modbus到OPC UA的实战细节3.1 Modbus RTU的接线和参数错一个字节都通不上Modbus是PLC通讯里最常用的协议之一但也是最容易出问题的。我遇到过好几次“通讯不上”的情况最后发现都是基础问题A接AB接BRS485的A和B不能接反接反了要么完全不通要么时通时断终端电阻通讯距离超过50米或者波特率高于19200时需要在总线两端各接一个120欧姆的终端电阻波特率、数据位、停止位、校验位这四个参数必须和从站完全一致差一个都不行站号主站和从站的站号不能冲突也不能设为00是广播地址西门子S7-200 SMART和森兰SB200变频器通讯的时候我一般用Modbus RTU主站指令库。在STEP 7-Micro/WIN SMART里先安装指令库然后调用MBUS_CTRL初始化再用MBUS_MSG读写数据。注意MBUS_MSG指令的“First”参数第一次扫描时必须置位之后每次读写都要用上升沿触发。3.2 OPC UA读取PLC数据配置比编程更关键现在越来越多的项目要求用OPC UA协议读取PLC和数控机床的运行状态数据。OPC UA的好处是跨平台、安全性高、支持复杂数据结构但配置起来比Modbus麻烦不少。以西门子1200为例需要在TIA Portal里激活OPC UA服务器功能然后设置端口号默认4840、安全策略一般选None或者Basic256Sha256、用户认证方式。然后在客户端软件里输入服务器的IP地址和端口选择对应的安全策略就能看到PLC里开放的变量节点。提示OPC UA的变量节点是按层级组织的比如“Objects/PLC_1/DataBlocks/DB1/Variable1”。如果你在客户端里找不到变量先检查DB块是否设置了“从OPC UA可访问”属性。Process Simulate通过OPC UA与西门子PLC通讯的时候还需要在Process Simulate里配置OPC UA客户端连接把PLC变量映射到仿真模型的信号上。这个过程中最容易出错的是数据类型匹配比如PLC里是Bool类型仿真里也要对应Bool不能混用。3.3 一个PLC接两个触摸屏注意地址冲突和通讯负载“一个PLC可以接两个触摸屏吗”这个问题我被问过很多次。答案是肯定的但要注意几点通讯端口如果PLC只有一个通讯口两个触摸屏需要走同一个总线这时候两个触摸屏的站号不能相同地址冲突两个触摸屏如果都往同一个寄存器写数据会互相覆盖。解决办法是划分区域比如触摸屏1写D100-D199触摸屏2写D200-D299通讯负载两个触摸屏同时轮询PLC通讯负载会翻倍。如果PLC的通讯处理能力有限可能会出现响应变慢的情况。这时候可以降低触摸屏的轮询频率或者把不重要的数据放在低速轮询区西门子1200有两个以太网口可以分别接两个触摸屏这样互不干扰。但如果是S7-200 SMART只有一个网口就需要通过交换机连接这时候两个触摸屏的IP地址要在同一网段且不能冲突。3.4 汇川AM763无法识别本地IO模块先查这三处汇川AM763用的是Codesys平台功能很强但有时候会出现无法识别本地IO模块的情况。我遇到过两次排查下来都是这几个原因模块型号不匹配在Codesys的设备树里添加的IO模块型号必须和实际硬件完全一致差一个字母都不行固件版本不兼容PLC的固件版本和Codesys的版本有对应关系版本不匹配会导致模块识别失败背板总线接触不良模块没插紧或者背板连接器有灰尘重新插拔一下往往就能解决如果这三处都没问题可以尝试在Codesys里扫描设备让软件自动识别。还不行的话检查一下PLC的电源是否稳定电压过低也会导致模块无法正常工作。4. 运动控制与PID那些参数调不出来的夜晚4.1 步进电机和伺服电机的脉冲控制本质是一样的信捷PLC XD3-24T-E控制伺服驱动器脉冲信号和步进电机的梯形图编程核心逻辑是一样的发脉冲、控方向、读反馈。区别在于伺服一般有编码器反馈可以闭环控制而步进电机通常是开环。以信捷XD3为例控制一个伺服电机走相对定位设置脉冲输出端口比如Y0发脉冲Y1控方向用PLSY指令或者DRVI指令发脉冲脉冲数决定走的距离脉冲频率决定速度方向信号在发脉冲之前先置位或复位关键参数是电子齿轮比。伺服驱动器的电子齿轮比决定了电机转一圈需要多少脉冲。比如电子齿轮比设为1:1编码器分辨率是10000那电机转一圈就需要10000个脉冲。如果你想让电机转一圈走10mm那每个脉冲就是0.001mm。这个计算一定要在编程之前算清楚不然定位精度对不上。4.2 PLC管理六轴机械臂难点在协调不在单轴六轴机械臂的控制如果每个轴单独看都不难难的是六个轴之间的协调。比如直线插补的时候六个轴要同时到达目标位置这就要求每个轴的速度和加速度都要匹配。我一般用PLC的脉冲输出指令配合定时器中断来实现多轴协调。每个轴的运动曲线提前算好放在数据表里中断里按时间片更新每个轴的目标位置。这种方式对PLC的扫描周期要求比较高扫描周期太长会导致运动不连贯。注意六轴协调控制如果精度要求高建议用专用的运动控制器PLC只做逻辑控制和状态监控。强行用PLC做六轴插补调试周期会非常长。4.3 PID温度波动大先别急着调参数“PLC温度PID波动温差大如何调节”这个问题我遇到过好几次。很多人一上来就调P、I、D三个参数调了半天还是波动。其实PID波动大很多时候不是参数问题而是采样周期和系统惯性不匹配。温度系统惯性很大加热器从通电到温度稳定可能需要几十秒甚至几分钟。如果你的PID采样周期设得太短比如100ms每次采样温度还没变化PID就输出调节量结果就是超调、振荡。我的经验是温度PID的采样周期一般设在1到5秒具体看加热功率和热容。另外PID的输出方式也很重要。温度控制一般用时间比例输出也就是在一个周期内比如10秒根据PID输出值决定加热器通电的时间比例。这种方式比直接调电压更稳定对固态继电器也友好。如果调完采样周期还是波动再按这个顺序调参数先把I和D设为0只调P直到系统开始轻微振荡然后把P稍微调小一点加入I消除稳态误差最后加入D抑制超调4.4 伺服电机不工作先查使能和报警“伺服电机不工作”是调试中最常见的问题之一。我一般按这个顺序排查步骤检查项可能原因1伺服使能信号程序里没给使能或者使能信号被急停切断2驱动器报警过载、过流、编码器故障看驱动器面板的报警代码3脉冲信号用示波器或者万用表测脉冲输出端口确认有脉冲4方向信号方向信号不对会导致电机往反方向走或者不动5电子齿轮比设置错误会导致电机转速极慢或者极快看起来像不工作倍福PLC控制第三方伺服驱动器的时候还需要注意过程数据对象的映射。在TwinCAT3里要把伺服驱动器的PDO配置和PLC的变量对应起来不然PLC发了指令驱动器也收不到。5. 非标项目调试实战现场永远比你想的复杂5.1 非标项目调试前期准备决定后期效率非标项目的特点是“每个项目都不一样”但这不代表不能做标准化准备。我的习惯是提前写好通用功能块比如气缸控制、电机控制、报警处理、通讯处理这些功能块在每个项目里都能复用IO分配表提前给电气工程师确认避免程序写完了发现IO地址和实际接线对不上触摸屏画面提前做模板按钮、指示灯、参数设置页面做成模板新项目直接套用这些准备工作看起来费时间但到了现场能省下几倍的调试时间。我做过一个冷库监控系统设计项目因为前期把温度采集、报警、压缩机控制的逻辑都封装好了现场调试只用了两天。5.2 设备已重置、程序丢失怎么快速恢复“某设备PLC已重置”这种情况在现场并不少见。可能是电池没电、干扰导致程序丢失、或者被人误操作。这时候如果手里没有备份就只能从头写。我的做法是每个项目交付时必须留一份完整的程序备份包括PLC程序、触摸屏程序、变频器参数、伺服参数。备份存在U盘和云端各一份U盘放在电柜里云端存一份在自己的网盘里。如果程序已经丢了先别急着写。先看看设备上有没有触摸屏触摸屏里可能存了部分参数。再看看变频器和伺服驱动器的参数能不能读出来。把这些信息收集齐了再根据设备动作逻辑反推程序比完全从零开始快得多。5.3 十字路口红绿灯程序核心是状态机十字路口红绿灯PLC程序是很多人的毕业设计选题也是理解状态机的好例子。红绿灯的逻辑看起来简单但要写得稳定、可扩展需要用到状态机。我的写法是用一个步序变量比如D100每个步序对应一个状态步序0南北绿灯东西红灯计时30秒步序1南北黄灯东西红灯计时3秒步序2南北红灯东西绿灯计时30秒步序3南北红灯东西黄灯计时3秒回到步序0每个步序里用定时器控制时间时间到了就切换到下一个步序。这种方式的好处是逻辑清晰加一个方向或者改时间都很方便。5.4 8人抢答器难点在防作弊和响应速度8人抢答PLC编程图核心需求是“谁先按下谁亮灯且其他人再按无效”。这个逻辑用梯形图实现起来不难但要注意两点响应速度PLC的扫描周期决定了抢答的响应速度。如果扫描周期是10ms那两个人按下的时间差小于10msPLC可能分辨不出来。所以抢答器的程序要尽量精简把抢答逻辑放在主程序的最前面防作弊如果有人一直按着按钮不放需要在程序里做处理。我的做法是抢答成功后所有按钮的输入都被屏蔽直到主持人复位5.5 冷库监控系统温度传感器的选型和布置比程序重要基于PLC冷库监控系统设计程序部分其实不复杂采集温度、比较设定值、控制压缩机启停、超温报警。但实际项目中温度传感器的选型和布置往往决定了系统的成败。传感器类型PT100精度高但需要变送器NTC便宜但线性度差。冷库一般用PT100精度要求±0.5度以内布置位置传感器不能靠近蒸发器也不能靠近门口要放在冷库中间位置且要有代表性防结霜冷库湿度大传感器容易结霜影响测量精度。要选防水型传感器或者加防结霜套管程序里还要做温度滤波因为冷库温度变化慢但传感器信号可能有波动。我一般用平均值滤波连续采10个值取平均这样显示的温度更稳定。6. 那些没人告诉你的避坑经验6.1 程序里的时间锁别做得太绝“西门子PLC时间锁程序案例”这个需求一般是设备厂家为了防止客户拖欠尾款用的。做法是在程序里读PLC的系统时间超过某个日期就停止设备运行。但我要提醒一句时间锁可以做但一定要留后门。我见过一个案例厂家设了时间锁结果客户那边因为电池没电PLC时间复位到出厂日期设备直接锁死厂家又联系不上客户生产线停了三天。我的做法是时间锁只锁部分功能比如锁自动模式手动模式还能用。而且时间锁的解除方式要写在合同里避免纠纷。6.2 程序注释和文档是给自己留的后路我刚入行的时候不爱写注释觉得程序能跑就行。后来有一次改一个半年前写的程序看了半天才想起来某个中间继电器是干什么用的。从那以后我强制自己做到每个网络段必须有标题说明这段程序的功能每个中间继电器和寄存器必须有注释每个功能块必须有输入输出说明项目结束后写一份调试记录记录遇到的问题和解决方法这些文档在项目交付的时候可能没人看但半年后你自己就是最大的受益者。6.3 现场调试的随身工具少一样都难受去现场调试我包里必带这些东西笔记本电脑装好所有品牌的编程软件提前更新到最新版本USB转串口线三菱FX系列、西门子S7-200都需要网线至少5米带水晶头万用表测电压、通断、4-20mA信号小螺丝刀套装接线、调拨码开关U盘备份程序、拷参数笔记本和笔记录现场问题和修改内容这些东西看起来不起眼但少一样就可能让你在现场多待半天。6.4 程序下载失败先查这五个地方“台达PLC怎么下载程序”、“PLC启动器下载”这类问题下载失败的原因通常有通讯线驱动没装USB转串口线需要装驱动设备管理器里能看到COM口才行COM口选错编程软件里选的COM口要和设备管理器里的一致PLC型号选错台达PLC有很多系列选错型号下载会报错PLC在运行模式有些PLC在RUN模式下不能下载要先切换到STOP模式程序容量超限程序太大PLC的存储空间不够需要优化程序或者换更大容量的PLC6.5 触摸屏和PLC通讯不上先看指示灯触摸屏和PLC通讯不上最快的排查方法是看通讯指示灯。如果触摸屏的通讯灯不亮说明物理连接有问题如果灯亮但数据不更新说明协议或者地址有问题。物理连接问题一般是网线没插好、串口线接错、终端电阻没接。协议问题一般是波特率不对、站号冲突、数据格式不匹配。地址问题一般是触摸屏里读写的寄存器和PLC程序里的不一致。我一般先用触摸屏的“系统设置”里的通讯诊断功能看能不能读到PLC的响应。如果读不到再检查PLC这边的通讯设置。6.6 AI生成PLC代码目前只能当辅助“AI PLC代码生成”是最近比较热的话题。我试过用AI生成一些简单的梯形图逻辑比如正反转、定时器控制确实能生成可用的代码。但复杂逻辑、运动控制、通讯协议这些AI生成的代码还需要大量修改。我的建议是把AI当成一个查手册的工具。比如你忘了某个指令的用法可以问AI你需要一个标准的功能块模板可以让AI生成初稿。但核心逻辑和关键参数还是要自己把关。6.7 程序框架的扩展性决定了你能走多远最后说一个容易被忽略的点程序框架的扩展性。我见过很多程序第一个项目跑得很好第二个项目想复用的时候发现根本改不动因为所有逻辑都写死了。好的程序框架应该做到参数化设备数量、速度、时间这些用变量或者数据块不要写死模块化每个功能独立成块通过接口调用标准化输入输出地址、报警代码、通讯协议都有统一规范这样下一个项目来的时候你只需要改参数和IO地址核心逻辑不用动。我现在的项目从第一个到第十个程序框架基本没变过只是功能块越来越多越来越完善。提示程序框架的搭建不是一次性的是在项目中不断迭代出来的。每做完一个项目花半小时回顾一下哪些地方可以优化下次就能少踩一个坑。这些经验都是我一条一条从现场捡回来的有些是吃了亏才记住的有些是看别人踩坑自己学乖的。PLC这行理论重要但现场经验更重要。希望这些内容能帮你少走一点弯路早点从“能写程序”变成“能做好项目”。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →