多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

从继电器到PLC:工业自动化背后的软件逻辑革命

从继电器到PLC:工业自动化背后的软件逻辑革命 1. 从继电器到控制器一场被“汽车产线”逼出来的革命干工控这一行久了你会发现一个有意思的现象PLC这个老古董级别的设备明明诞生于1968年前后却至今还坐在每一个自动化产线的控制柜里活得比很多IT系统都滋润。你要问为什么答案得回到那个连“工控软件”这个概念都还没成型的年代。那时候的自动化控制靠的根本不是软件而是一堵又一堵继电器柜。我现在偶尔去老厂改造项目里还能看到那种被拆出来的继电器柜残骸——几十上百个中间继电器密密麻麻排着配着一堆时间继电器、计数器线号管套得整整齐齐但看一眼就知道这玩意儿要是今天还在服役运维工程师得疯。1968年前后发生了什么汽车工业正在经历一场制造效率的军备竞赛。通用汽车的生产线每一次改款继电器控制柜就要重新设计、重新接线、重新调试一个周期动辄几个月产线停机损失算下来能吓死人。通用汽车当时提了一个著名的招标需求大意是能不能搞一套设备用“逻辑”来代替“电线”改生产线控制逻辑的时候别让我再重新拉一整柜子的线这个需求直接被交付给了底特律的一个小公司后来这家公司做出了第一台可编程控制器型号叫Modicon 084也就是PLC历史上的开山之作。1968到1980这十二年是整个工业控制从“硬接线逻辑”转向“软件逻辑”的关键窗口期。现在回头看这一段时间的意义不仅仅在于发明了一台设备更在于它把“程序”这个概念从电脑机房带进了车间地板工控软件的史册也就此翻开。这篇文章我想聊聊这段时期的来龙去脉也会把手头这些年用PLC的实操经验一起带进去。不管你是准备入行学PLC编程的萌新还是已经在做SCADA、DCS、机器人集成的老手理解一下这个行业的“原点逻辑”对后面处理各种自动化项目都会有帮助。2. 通用汽车一纸招标书是怎么把“程序”塞进车间里的2.1 继电器控制的天花板改一次型产线停三个月先解释一下继电器控制柜为什么是那个年代的天花板。一个典型的继电器控制回路是用中间继电器、时间继电器、计数器、接触器线圈通过硬接线的方式搭出“与或非”逻辑。举个例子生产线启动的联锁条件如果是“急停按钮未按下且安全门关闭且液压系统压力正常”那就得三个常闭/常开触点串联成一个回路再串到主接触器线圈。这套思路在单品种大批量时代没问题因为逻辑固定、运行工况固定继电器只要选型正确、触点寿命够长能跑好多年。但到了汽车这种多品种、频繁改款的生产场景问题就暴露了改款意味着控制逻辑重做每一台控制柜的接线图要重新出电工要一根一根拆线、重新放线、对线号。时间继电器和计数器的精度有限而且参数要靠旋钮拧拧多少全凭老师傅手感。故障排查完全靠人拿万用表量一个几百点的柜子查一个卡死的触点能把人查崩溃。所以通用汽车当年的“痛点”评语用今天的话讲就是硬接线逻辑的“可维护性”和“可重配置性”趋近于零。这种时候制造企业必然要把目光投向计算机问题是当年的大型计算机贵得要死、怕灰尘、怕振动、发热大根本不可能塞进车间。2.2 Modicon 084第一台真正意义上能“编程”的控制器通用汽车的招标催生了Modicon 084这台机器的历史地位怎么强调都不过分。它的名字来源很直接——084就是1968年4月的年月编号。这款设备虽然体积还是不小但核心逻辑已经从“触点接线”变成了“用户程序存储器处理器”。你可以用一台编程器以类似“梯形图”的方式把逻辑写进去改变逻辑不再需要动一根线。这里要说明一点梯形图的灵感就是从继电器电路图来的。第一代PLC的设计师们非常聪明他们没有搞一个全新的编程语言而是把电气工程师天天看的原理图原封不动转化成一种能在屏幕或编程器上编辑、然后编译成机器码的逻辑表达形式。这就是为什么今天你打开西门子TIA博途或者三菱GX Works看到的梯形图还是那个老味道——因为这是给几代电气工程师的“母语”设计的。这种设计上的“继承性”是PLC能快速取代继电器柜的核心原因之一。你不需要让电工重新学计算机语言只要教会他们把常开触点变成指令、把线圈变成输出上手难度急剧下降。从1968到1980这段时间PLC还经历了几次重要进化首先是存储器从磁芯发展到半导体存储器容量和可靠度都上来了其次是通信能力开始萌芽早期PLC几乎是孤岛后面才开始有简单的串行接口与上位机通信再有就是指令集不断丰富从最初的开关量逻辑逐步加入了定时器、计数器、四则运算、以及基础的模拟量处理能力。到1980年前后PLC已经不只是一台“继电器替代器”而是一台真正的工业计算机控制设备只是它被设计得更皮实、更专用、更贴近车间环境。2.3 为什么是“软件逻辑革命”而不是“电气元件革命”这个概念我想多说几句。继电器时代不是没有元件创新中间继电器也一直在改进但那是“硬件来定义逻辑”的路线你要什么逻辑就得用什么接线组合。而PLC走的是另一条路——“软件来定义逻辑”一组通用的硬件可以承载无穷多种控制程序逻辑变化只存在于内存里面车间里一根线都不用动。放在今天这个思想大家觉得理所当然但放在1968年这简直是天翻地覆。想想看同一个型号的PLC今天跑的是汽车焊装线的节拍逻辑明天换一块程序卡就能当注塑机的控制器用。硬件标准化、软件个性化这其实就是今天所有“软件定义一切”思潮的工业鼻祖。这也是为什么我把这篇工控发展史的主题定义为“工控软件逻辑革命”——PLC让工业控制从“电气图思维”变成了“程序思维”从此工控软件成为一条独立的技术分支。3. PLC凭什么是它七大核心设计逻辑拆解3.1 扫描周期时间片轮转的“工业操作系统”PLC的本质可以理解为一种“实时循环执行的计算机”上电之后它一遍又一遍地重复“读输入—执行程序—写输出—做系统管理”这一循环。这个循环每跑一圈的时间就叫“扫描周期”。早期PLC的CPU主频低程序存储器小扫描周期相对较长可能在几十毫秒级别今天的PLC能做到几百微秒甚至更快。理解扫描周期是理解PLC一切行为的关键。比如说为什么PLC程序不支持并行执行所有逻辑因为它是串行扫描的。你写梯形图的逻辑顺序会直接影响执行结果——同一个输出线圈在程序前面和程序后面分别置位最终输出取决于最后一次执行。这个细节是很多新手写程序的第一个坑在程序中间把Q0.0置位了结果后面自己又把它复位了查了半天没查到问题就是因为没理解“从上到下扫描、后者覆盖前者”的执行规则。从系统角度说扫描周期机制本身就是一套“极简实时操作系统”。PLC并没有像PC那样复杂的任务调度而是用一个固定循环加中断机制来保证实时性。现代PLC普遍支持硬件中断、定时中断、通信中断这些中断可以插在扫描周期的任意间隙里执行用来处理高速计数、急停等对时序敏感的场合。3.2 梯形图与指令表给电气工程师的“母语翻译器”梯形图能成为PLC编程语言的绝对主角背后的逻辑和我上面聊的“继承性”直接相关。继电器控制时代电气工程师画的电路图本质上就是“电源-触点-线圈”的水平排列。梯形图把这个图结构直接搬了过来左母线代表火线右母线代表零线中间的每一行就是一条逻辑支路常开/常闭触点就是输入条件线圈就是输出动作。这种语言的好处是“看得见逻辑关系”串行触点与并行触点或线圈在前面串了触点就是联锁。你今天去看任何一款PLC的梯形图编辑器哪怕从来没碰过这个品牌靠继电器电路的基础也能看懂七八成。这就是梯形图几十年来没有退出历史舞台的根本原因。当然和梯形图并存的还有指令表IL、结构化文本ST、功能块图FBD这些语言。IEC 61131-3标准把五种编程语言都标准化了每种语言都有它的适用场景。梯形图适合逻辑清晰、以开关量为主的控制结构化文本适合数学运算和复杂算法功能块图适合闭环控制和信号处理。一个成熟的工控工程师往往不是只会一种语言而是知道哪种场景切哪种语言。3.3 存储器的演进从核心磁环到半导体固化程序我们讲历史就要讲硬件的时代局限。Modicon 084时代的PLC用的是什么存储答案是磁芯存储器。这东西今天已经成了博物馆里的古董原理是“通电写数据、磁化方向代表0或1”优点是断电后数据不丢缺点是容量小、体积大、读写速度慢而且生产工艺极度繁琐当年都是女工用极细的导线手工穿磁环穿错一颗就得返工。随后半导体存储器出现先是EPROM、EEPROM再到后来的Flash。EPROM需要紫外线擦除工程现场一看调整程序要拿紫外线灯照十几分钟再重新烧录相当费事儿。后来EEPROM和Flash普及PLC程序可以在线修改、掉电保存这个体验飞跃对工程效率的提升是决定性的。这里说句可能不太中听但很真实的话很多今天用博途或GX Works做在线监控、在线下载的老铁可能完全无法想象当年的工程师是怎么一遍一遍烧录EPROM、然后重启验证的。所以“趁手的工具”这五个字在工控行业从来不是矫情是真真切切的生产力。3.4 输入输出架构为什么PLC要给你搞光电隔离和滤波PLC不像普通电脑可以直接跟“现实世界”打交道。它的输入输出端子接的是真实的按钮、接近开关、热电阻、变频器信号这些现场信号充满了干扰、浪涌、电平差异。所以PLC的每一路输入输出通道背后都有一整套信号调理电路光电隔离、RC滤波、稳压、限流。光电隔离是我特别想强调的一环。它的本质是让“现场信号”和“CPU逻辑”之间没有电气上的直接连接信号通过光耦内部的光转换传递。这样一来现场的感性负载通断带来的浪涌、电机启动时的地电位抖动不会直接打到CPU上。这也是PLC能连续在车间里稳定运行十几年的关键硬件保障。你接线的时候如果图省事把PLC输入信号的地和强电地混接或者不用隔离继电器短期内可能没啥问题但雷雨天、大电机启动的瞬间极容易出现输入信号乱跳、程序误动作。这就是有人总说“PLC太灵敏了/PLC不稳定”的重要原因——其实不是PLC的问题是信号没隔离到位。3.5 扫描循环地“插队”中断机制和高速处理前面说了PLC是固定循环扫描那遇到高速脉冲怎么办比如编码器每秒输出几千个脉冲靠普通扫描根本来不及数。这个场景就是中断机制的用武之地。CPU可以暂时停下当前的扫描先去处理高速计数中断子程序处理完再回来继续。现代PLC普遍带硬件高速计数器HSC输入端子直接接脉冲信号计数器硬件级累加不占用CPU扫描时间然后程序里再通过中断去读取计数值、执行比较和跳转。用PLC做伺服控制的场合还会用到更进阶的功能比如带编码器反馈的定位模块、电子凸轮、插补轴组这些功能本质上也都是建立在对“扫描循环硬件中断”这一套机制的深度理解上。3.6 通信接口早期形态单机PLC是怎么长成网络节点的1968到1980这一段PLC的通信功能还非常初级。最早的Modicon 084根本没有通信接口程序只能用编程器通过并行口或者专用编程电缆灌进去。后来才逐步出现串行接口比如Modbus协议就是这么来的——Modicon公司在1979年发布了Modbus用简单的串行主从报文格式实现对PLC内部寄存器、线圈、输入状态的读写访问。别小看Modbus这个“老古董”直到今天它依然是各种仪表、变频器、网关设备和PLC通信最基础、最普适的协议。我做过不少项目底层走的就是Modbus RTU走RS-485设备之间波特率设9600虽然速度不算快但胜在稳定、简单、兼容性好几乎所有工控设备厂商都会支持。从Modbus开始PLC从独立控制器变成了“网络节点”这是后来SCADA系统、工业以太网、分布式控制架构的起点。也多亏了这些早期协议1968到1980种下的种子才能长成今天工厂里满网的自动化信息化生态。3.7 可靠性设计为什么PLC敢说“7×24年不停机”工业设备天天讲可靠性但PLC的可靠性设计思路确实是走了“极端”。先说电气PLC的电路板全部按工业级标准设计宽温、防潮、防尘涂层电源模块带过压/过流/短路保护CPU模块和I/O模块之间通过背板总线高速通信。再说系统PLC的运行逻辑很“死心眼”程序是循环扫描的没有动态内存分配、没有垃圾回收、没有常驻后台的不可控进程这就天然规避了死机、内存泄漏这些普通计算机的常见问题。然后就是冗余高端PLC支持双CPU冗余、双电源冗余、双网络冗余。主CPU故障备用CPU在毫秒级别接管对工艺过程几乎无感。当然冗余是要花钱的中低端项目不一定用得上。但就算非冗余的PLC其“长期不带电的环境耐受性”和“程序固化在Flash中的稳定性”也让它在恶劣车间里比很多基于PC或嵌入式Linux的方案靠谱得多。这也是为什么至今很多工厂的核心控制工程师宁愿用小PLC也不敢上一个所谓“更智能”的工控机方案。4. PLC这一课各厂商的起点与竞争格局4.1 从Modicon到施耐德PLC老字号的沉浮Modicon是PLC的发明者但它的品牌故事却是一路易主。当年发明084的公司后来被Gould电子收购再后来成为施耐德电气的一部分。施耐德到今天依然保留着Modicon品牌和它的M340、M580、Quantum系列PLC并且持续支持Modbus协议算是工控历史里“祖上有矿”的典型代表。施耐德的PLC在国内工控市场份额不如西门子和三菱但Modicon系列在能源、基础设施、水务等领域的存量项目仍然十分可观。遇到老系统的改造项目如果没有Modbus报文基础、不了解Modicon的编程软件Unity Pro或SoMachine还真接不住。4.2 西门子、罗克韦尔、三菱分据一方的“诸侯”德国西门子是欧系PLC的绝对王者S5系列在七八十年代就已经在欧系产线里大规模部署后来S7系列更是火遍全球。西门子最大的特点是“平台化”从PLC、HMI、变频器、伺服到SCADA系统整个生态严丝合缝你几乎可以在同一套工程框架里完成从小到大的所有自动化任务。代价是学习曲线陡峭软件庞大且吃内存正版授权昂贵。美国的罗克韦尔Allen-Bradley以ControlLogix、CompactLogix系列为核心在北美流程工业和离散制造业占据统治地位。它的编程环境Studio 5000有着非常独特的“标签自动化指令”体系跟欧系的“数据块FC/FB”风格差异很大。北美留存的产线项目很多都要求工程师具备罗克韦尔经验这也是国内做出口设备集成时必须提前考虑的技术栈。日本三菱则是亚洲市场的普及之王。FX系列的小型PLC几乎是无数机电一体化专业学生的启蒙设备。三菱的GX Works编程软件、CC-Link总线和伺服产品线在注塑、包装、纺织、电子装配行业有着巨大存量。三菱PLC的优势是上手快、性价比高、售后生态成熟缺点是高端大型分布式控制场景相对西门子和罗克韦尔稍显吃力。4.3 国产PLC与DCS从替代到局部超越这几年国产工控的发展速度说实话远超很多从业者的预期。以汇川为代表的国产PLC厂商已经不满足于做“三菱兼容替代品”而是推出了基于CODESYS内核的新一代中大型PLC比如AM系列、Easy系列配合自家的伺服、变频器、HMI形成了完整的自动化套装。我最近实测过汇川AM系列和威纶通HMI的通信触屏变量绑定、轴控制参数下发都很顺畅国产设备现在的软件易用性和通信兼容性确实今非昔比。再从DCS的视角看“国产DCS登顶全球第一”这个热搜词我多聊两句。国产DCS厂商在火电、核电、石化、化工领域的中大型项目上如今已经不只是“造得出”而是“控得住”。新一代国产DCS大量吸收了大模型、AI诊断、信息安全的技术成果在工控安全领域逐渐建立起自己的体系。这对于我们这些用惯了进口设备的工程师来说最大的变化是以后做项目不再只有被授权费、交期、备件周期拿捏这一条路国产方案在越来越多场景里是能打的。4.4 工控安全与SCADA老树如何开新花热词里频繁出现“SCADA如何与PLC连接”这说明什么说明PLC单机时代早就过去了现在任何一套正经的自动化系统都要考虑上位监控、数据采集、远程运维。SCADA和PLC的通信逻辑本质就是“上位机通过工业协议周期性地从PLC内存里读写数据”。最常见的连接方案是Modbus TCP或者OPC UA。如果你的PLC支持Modbus TCP那SCADA服务器就作为Modbus客户端按一定周期轮询把PLC里的保持寄存器、线圈状态、输入寄存器、模拟量值全部读到实时数据库再组态成画面和趋势。OPC UA则是更现代的选择跨平台、带信息安全加密、支持复杂数据结构如今几乎所有新上位机组态软件都内置OPC UA客户端而新发布的西门子S7-1500、汇川AM系列也都原生支持OPC UA服务器模式。安全方面随着“工控安全”被提高到国家战略高度今天做PLC项目已经不能像十年前那样裸奔到底了。现场PLC的密码保护、通信加密、管控网段分离、上位机的操作审计都写进了很多大型项目的技术规格书里。5. 1968-1980的遗产现代工业这棵大树根扎得有多深5.1 现代PLC的工程形态从单机到智能边缘不谈历史空谈技术是耍流氓同理只说历史不看现代也是片面的。今天的PLC和Modicon 084早就不是一个物种了但根的逻辑仍然一脉相承。现代中大型PLC普遍采用模块化机架结构电源模块、CPU模块、以太网通信模块、数字量输入输出模块、模拟量输入输出模块、温度采集模块、高速计数模块、运动控制模块像搭积木一样组合。这种模块化设计完美承接了早期PLC“用统一硬件平台承载个性化软件逻辑”的理念只是今天平台更强大了。再加上近十年工业边缘计算兴起很多PLC开始自带边缘计算能力比如西门子的S7-1500系列可以在PLC内部跑一些数据分析、Web服务、甚至简单的AI推理。你可以在不增加任何外部硬件的情况下用PLC自己的Openness接口写一个简单的预测性维护脚本在设备出故障前一天推送报警。这让“PLC”这个老名词开始重新变得时髦。5.2 梯形图、ST、FBDIEC 61131-3语言超市怎么选聊到编程语言我再展开一下IEC 61131-3标准的五种语言到底怎么选。虽然很多人一辈子只用梯形图但实际工程里语言选得好能省一半开发时间。梯形图LD开关逻辑、联锁保护、互锁控制永远的首选。因为它和电气原理图一一对应甲方电气工程师也能看懂沟通成本最低。结构化文本ST算法、数学计算、字符串处理、循环批量赋值ST效率远高于梯形图。比如做配方管理几十个参数的批量读写用ST写一个FOR循环三行搞定梯形图得画半天。功能块图FBD闭环控制、PID调节、信号滤波、自定义功能块组合。FBD的连线方式直观展示数据流调参的时候非常舒服。顺序功能图SFC流程型逻辑、工步状态机比如灌装线的洗瓶-灌装-封盖用SFC表达最清晰每一“步”就是一个稳定的状态。指令表IL现在用得少了主要是应急排查和底层调试时会看一下指令助记符。我的习惯是主程序里会用梯形图做逻辑骨架数据处理块用ST闭环控制用FBD整条产线流程再套一层SFC状态机。这种“混合编程”的思路其实是现代PLC软件工程的标准做法。5.3 由PLC引发的工控软件生态HMI/SCADA/工业通讯由此展开PLC诞生之后围绕“怎么和PLC对话”“怎么把PLC的数据变成操作画面”“怎么管理多台PLC”这些问题又催生了整整一个工控软件生态。HMI人机界面从最早的文本屏到后来的触摸屏再到今天支持3D模型、趋势曲线、配方管理的可视化终端。威纶通、西门子WinCC、倍福TWINCAT HMI都是工程师每天打交道的工具。SCADA监控与数据采集当项目里PLC数量超过几十台分布在不同车间甚至不同城市就地HMI就不够看了。SCADA系统如WinCC、iFIX、InTouch、或国产组态软件实现分布式采集、集中监控、历史趋势、报警管理。SCADA和PLC的连接我上面提到用Modbus TCP或OPC UA实际项目里还要考虑通信超时、数据映射、断线重连这些工程细节。工业通讯从RS-232/485、Modbus到PROFINET、EtherNet/IP、EtherCAT、CC-Link IE工业通讯的家族成员越来越庞大。PLC扮演的角色也从孤岛变成了中枢——它下发指令给变频器采集伺服状态和机器人控制器握手向SCADA上报数据跟MES交互工单。一台现代PLC在系统里的位置有些像电脑里的CPU算力不是最强的但调度一切。5.4 编程工具演进从手持编程器到AI辅助生成说到这里必须补一段工具史。Modicon 084时代的工程师用的是手持式编程器一个带小键盘和显示屏的盒子梯形图一行一行往里敲。后来有了PC上的编辑器比如西门子的STEP 5、三菱的MEDOC再到今天的TIA博途、GX Works3、Studio 5000编程体验完全不在一个量级。新趋势也很明显AI正在渗透到PLC代码生成领域。热搜词里就有“AI PLC代码生成”这不是空穴来风。我试过用大语言模型描述一段简单的工艺要求让它生成ST代码很多基础逻辑能一次成型比如数组批量初始化、模拟量归一化处理、报警阈值判断这些东西大模型见得太多生成的代码框架质量还算靠谱。但关键逻辑比如安全联锁、状态机跳转、故障恢复策略还是得资深工程师逐行审查。AI是提效工具不是背锅侠这一点务必认清。6. 从历史回到现场手把手理解一套现代PLC的完整工作流6.1 从“扫描周期”到“现场信号”PLC到底在跑什么前面把理论和历史都聊透了这一节我们落到实操层面用一套现代PLC的完整工作流把原理和现场串起来。想象你在做一个包装线控制项目用的是西门子S7-1200。上电之后PLC先进行系统初始化把掉电保持区的数据从Flash恢复到内存然后开始循环扫描。每个扫描周期的第一步系统读取所有物理输入端的实时电平状态存入“输入映像区”。第二步CPU按照用户程序从上到下的顺序逐条执行指令运行时以输入映像区为条件值计算结果实时写入“输出映像区”——注意这里只是写到内存不是马上驱动物理端子。第三步扫描结束后系统把输出映像区的值一次性刷新到物理输出端子。这就是标准的三阶段扫描模式。为什么要把“输入输出”和“程序执行”分开因为如果每一个指令都直接读物理端子、直接驱动物理端子那PLC在指令执行的中间时刻输入端状态变化会导致同一扫描周期里前后逻辑不一致输出端子也会在一个周期里反复抖动。有了映像区就保证了逻辑执行的“一致性”——一个扫描周期内使用的是一份“快照”程序执行完再集中输出这是PLC区别于普通单片机的核心哲学。6.2 一个小案例用梯形图和ST混合编写电机联锁控制下面直接上一个小案例。场景一台输送电机M1要求启动条件为“急停未触发I0.0常闭”且“安全门关闭I0.1常开”且“变频器已就绪I0.2常开”按下启动按钮I0.3电机运转按下停止按钮I0.4电机停止电机运行中若变频器故障立即停止并报警。梯形图部分就这么写网络1启动条件联锁 I0.0 I0.1 I0.2 I0.3 Q0.0 ----|/|------| |------| |------| |------( )---- Q0.0 ----| |------------------------------------------- 网络2停止与故障复位 I0.4 I0.5 Q0.0 ----| |------|/|------(R)----但这样写有个工程隐患如果启动瞬间变频器就绪信号抖动可能造成启停竞争。更稳的写法是用“置位/复位”指令网络1运行置位 I0.3 I0.0 I0.1 I0.2 ----| |------|/|------| |------| |-------(S)---- 网络2停止复位 I0.4 I0.5 ----| |------|/|-----(R)----这样写的好处是启动和停止是“互锁双线圈”不会出现同一个周期里又置位又复位导致输出不稳定的情况。再用ST写一段配合的报警逻辑// 变频器故障时立即复位输出并置位报警 IF NOT I0.5 THEN Q0.0 : FALSE; M_Alarm : TRUE; AlarmCode : 16#A1F0; // 自定义故障码 ELSE M_Alarm : FALSE; END_IF;混搭梯形图和ST正是现代PLC编程的主流姿势。我强烈建议新入行的朋友不要只盯梯形图尽早捡起ST哪怕只是写报警、做转换都会让你在复杂逻辑面前游刃有余。6.3 程序在线监控和调试现代博途/GX Works实战要点程序写完之后在线调试是绕不开的环节。我这边用的是TIA博途简单分享一下在线监控的几个要点。在线监控会显示每个触点的实时状态触点左边出现绿色方块表示该触点导通TRUE线圈通电会在线圈符号上显示绿色。出现黄色感叹号说明这一行的变量有访问问题检查变量表。“启用/禁用设备”和“下载到设备”的区别一定要搞清楚下载到设备会覆盖PLC里的程序可能引起在线停机而仅修改下载只是下传增量变化。大项目里我一般建议先在仿真器里跑完测试再连真机。如果遇到PLC实际启动不了比如热搜里那个“S7-PLCSIM Advanced V5.0 PLC实例为什么启动不了且没有报错”的问题多半是仿真软件和TIA博途的版本不匹配或者是PLCSIM Advanced需要以管理员身份运行、虚拟网卡配置有误。仿真环境的坑很多都是配置文件层面的查报错日志时往往看不出什么得逐项排查版本和运行权限。调试时我最常用的操作是“强制变量”强制输入输出点模拟现场信号验证程序逻辑。但强制变量有风险强制一个输出点的时候如果现场有人正在操作设备可能引发动作。所以强制之前必须先断开执行机构的动力电或者明确通知现场停机。这是安全红线。6.4 用好交叉引用和标签模拟量工程排障的提速器交叉引用是排查问题的神器。大型程序动辄上千行、几百个变量你想知道某个中间继电器M50.0在哪些网络里被置位、在哪些网络里被复位用手翻程序是不可能的。直接在交叉引用窗口里输入M50.0就能看到所有使用位置、指令类型、操作数值。改程序之前先看交叉引用避免“动一个变量、引发三个副作用”的翻车现场。模拟量处理也是高频需求。4-20mA信号进入模拟量模块后PLC里的原始数值一般是从0到27648西门子量程或0到4095/0到32767其他品牌。工程上要做一次“工程量换算”把原始值转成压力、温度、流量等真实物理量。举个例子某压力变送器量程0-1.6MPa输出4-20mAPLC原始值0-27648。换算公式是实际工程量 原始值 / 27648 * (量程上限 - 量程下限) 量程下限这行ST代码写起来就是RealPressure : INT_TO_REAL(RAW_AI) / 27648.0 * 1.6;别嫌这公式简单很多新手在这个环节会犯低级错误比如整型除以整数得到0忘了转浮点或者选错量程把传感器0-1.6MPa的量程写成0-10MPa导致画面显示翻几倍。调试的时候一定要拿标准信号发生器校一遍每个通道的零点和满度。6.5 运维与维护掉电、电池、闪存那些“看不见的坑”PLC在现场长期运行运维层面的坑往往不是程序逻辑而是硬件生命力。这里列几个我踩过的真坑。掉电保持PLC程序里有一部分数据需要掉电不丢比如配方号、累计产量、故障历史。设置掉电保持区时要提前规划别把数组写得太靠后有些型号保持区容量有限写爆了不会报错而是悄悄不保持。后备电池很多CPU模块内部有锂电池用来在掉电期间给实时时钟和保持性内存供电。这个电池一般几年要换一次但很多运维团队根本不知道有电池这回事。等到某天重启PLC发现时间变成2000年、故障记录全没了才意识到电池没电了。闪存寿命频繁在线下载程序会消耗CPU的闪存写入寿命。调试期一天下载几十次没问题但生产运行阶段没事就不要天天全量下载了能增量下载就增量下载。灰尘和温度控制柜密封太严导致散热不良或者粉尘导电导致输入端子误触发都是现场常见故障。柜内要加装风扇和滤网温度高了要装空调。6.6 通信实战SCADA如何和PLC正确对接最后讲通信对接。SCADA系统与PLC的连接本质上是“把PLC的内存区域映射为SCADA的实时点表”。具体操作步骤大概是确定PLC侧通信方式如果你用西门子S7-1200/1500可以在PLC组态里启用“PUT/GET通信”或被OPC UA服务器访问。如果想让第三方SCADA直连要么走Modbus TCP有些PLC需要加通信模块或做支持配置要么走OPC UA。确定IP地址和网段PLC和SCADA服务器必须在同一网络内或者通过路由可达。不推荐把PLC直接暴露在办公网最好是划在单独的工业控制网段SCADA服务器用双网卡桥接。在SCADA侧创建通信驱动比如WinCC里选“SIMATIC S7-1500”通道填写IP地址、机架号、槽号再为每个需要监控的变量建立连接地址地址格式按PLC的存储区写I/Q/M/DB。设置轮询周期和超时机制轮询太快会占用PLC通信资源正常100ms到500ms就够超时和重连机制一定要设好不然PLC一重启SCADA就报一堆通信故障现场看着吓人。数据校验接线、加映射之后先在SCADA里看几个变量的实时值确认量程一致、字节序一致有些PLC是大端、SCADA默认小端数值会乱再做画面绑定。这一套流程做过一两次之后就会形成肌肉记忆。最常坑人的还是“字节序”和“数据类型长度”这两个细节——比如PLC里Word类型在SCADA里映射成了SInt数值对不上是必然的。做点表的时候一定要把数据类型、字节序、转换系数写清楚别靠记忆力。7. 那些年我们一起踩过的PLC坑排查实录与速查表7.1 三个典型故障案例全流程复盘案例一PLC偶发停机无规律重启。现象是现场反馈设备跑几天就重启一次但看程序没有逻辑问题CPU诊断缓冲区显示“看门狗超时”。逐项排查后定位到通信干扰触摸屏和PLC用的RS-485总线屏蔽层在两端都接了大地形成地环路变频器启动瞬间地电位跳变导致通信芯片受损进而让CPU看门狗故障。处理方案是屏蔽层单端接地、通信线加磁环、PLC和变频器分路供电。改完之后再无重启。案例二模拟量信号周期性跳动十几秒一个波峰。用示波器查变送器信号波形稳定但PLC内部数值跳。最后发现是变送器的供电和变频器共用了同一路24V电源变频器母线波动叠加在信号回路里。解决办法是给模拟量回路单独配一台带隔离的24V开关电源并加大信号线双绞密度、接好屏蔽。案例三PLC程序被别人误改导致设备动作异常。这是管理问题但非常常见。优化方案是在交付时修改CPU访问密码钥匙开关拨到RUN同时把备份程序远程存档。做项目交付时提供一个完整的“程序备份点表图纸密码信封”资料包是对客户负责也是对自己负责。7.2 常见故障速查表故障现象可能原因排查步骤解决手段PLC不运行RUN灯闪烁CPU处于STOP状态程序有严重错误或强制激活连接编程器查看诊断缓冲区和STOP原因代码修正错误后重启CPU清除停机锁定输入信号时好时坏接线松动/端子氧化/光电隔离损坏/干扰万用表量输入端子电压用短接线直接短接输入端测试重新压端子换优质端子排传感器独立供电输出动作不及时扫描周期过长或程序逻辑复杂导致输出延迟查看CPU循环时间趋势检查OB100/OB35的处理时间优化程序块结构缩短扫描周期必要时用中断输出通信超时频繁网线质量差/水晶头氧化/IP冲突/负载过高ping包丢包测试、换网线直连测试、查ARP表按工业标准重做水晶头固定IP排查冲突HMI显示#号或乱码数据格式不匹配/变量地址偏移核对变量表类型、跨字节查看统一数据类型与字节序重新映射点表PLC上电后程序丢失电池没电或Flash异常/掉电保持区丢失看CPU诊断、重新下载程序更换电池并重新下载全量程序检查保持区配置程序在线修改后不生效只下载到工作内存未保存到装载存储区在工程软件执行“保存到存储卡”或“全量下载”下载后执行“复制RAM到ROM”操作7.3 经验和教训新手和老手的分水岭多聊一点我的个人观察。新手和老手写PLC程序最大的分水岭不在于会不会用某条指令而在于两点一是“会不会考虑故障场景”二是“会不会考虑被人维护”。新手写的程序往往只覆盖正常流程按下启动设备动作按下停止设备停止。但老手会追问中途断电恢复后程序从哪一步开始传感器断线了设备应该报警还是保持原状态急停恢复之后要不要重新执行回原点动作这些“边界条件”才是设备真正可靠、好用的关键。用行话说这叫“故障安全设计”和“状态确定性”。另一个经验是“程序结构要让人能看懂”。我见过一些天才型的程序压缩得可以拿奥数奖但两年后换人维护没人敢动。工控程序是给设备用的也是给人维护的。建议强制自己养成好习惯每个程序块顶部写注释说明这个块负责什么、输入输出是什么每个网络用网络标题和注释说明逻辑意图变量命名用拼音或英文都要规范别用M0.0这种裸地址满天飞。未来你会感谢自己。8. 给新人的一份忠告从历史长河中学到的三件事这篇文章从1968年写到1980年又从1980年跳到了今天如果是第一次接触工控的读者可能信息密度有点大。最后我想把个人这些年工作的体会压缩成三句话当作给入行新人的“心法”。第一理解“实时扫描”这个概念比背住任何一条指令都重要。PLC的一切行为都是在这个循环框架里发生的理解了扫描周期、映像区、中断优先级你就能解释60%以上的现场疑难杂症。第二工业软件的核心价值不在“炫”而在“稳”和“可控”。AI生成代码、边缘计算、云上组态这些新东西当然要学但真正的老江湖永远会先问一句如果这个东西崩了我的设备会停在什么状态工控不是互联网你可以用一个月迭代三个版本但产线停机一分钟就是真金白银的损失。第三不要把自己圈死在一种品牌里。会西门子不会三菱、会PLC不会SCADA、会编程但不懂变频器参数都会严重限制你的视野。1968年那台Modicon 084开启的是一个跨学科的产业——电气、自动控制、通信、软件工程、信息安全全是PLC工程师的必修课。今天的工控人尤其是想往上走的拼的不是单一技能而是“从传感器到云端”的全栈理解力。我个人在实际项目里最深的一个体会是你会遇到无数个想把PLC“用成电脑”的甲方需求比如要它在本地做复杂的数据库交互、跑云端的API调用、甚至处理大数据模型。但每次这种时候我都会把1968年的背景重新想一遍——PLC被发明出来是为了在一个不可控、充满干扰、容错率极低的环境里稳定地执行一套逻辑。它的使命从来不是“全能”而是“可靠”。最后再分享一个小技巧每次做完一个项目我都会把现场调过的每一项参数、踩过的每一个坑、以及最终定稿的程序备份整理成一份Word版的“项目调试备忘录”发给客户。这玩意儿不挣一分钱但往往能让你在一年后接到客户下一个项目的电话时拥有别人没有的信任基础。工控这个圈子不大口碑就是这么一点点攒出来的。
返回列表