尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于PLC梯形图与MCGS组态的气力除灰控制系统实战解析

基于PLC梯形图与MCGS组态的气力除灰控制系统实战解析 接了个小项目的活儿给一套两泵交替运行的气力除灰系统做控制从PLC梯形图到MCGS组态基本上一人包圆。这套系统要说复杂也不算复杂两个仓泵、四个电动球阀、两个气动阀、几路模拟量自动循环加上故障联锁但真正从梯形图一路写到组态画面中间踩的坑比想象中多得多。趁项目收尾还有记忆把整个过程捋一遍为什么选这套方案、梯形图里哪些逻辑容易写错、组态软件配置变量和通讯时有哪些容易忽视的细节还有现场调试时查过的那些疑难杂症。不管是正在做课程设计的学生还是被安排维护除灰系统的工程师或者是想从零手搓一套小型PLC控制系统的朋友这篇文章里应该有对你有用的东西。1. 项目背景与整体方案设计1.1 除灰控制系统到底在控制什么气力除灰是电厂、水泥厂、化工厂里常见的粉状物料输送方式基本原理不复杂除尘器收集下来的灰通过进料阀进入仓泵达到一定料位后关闭进料阀然后向仓泵内通入压缩空气压力升到设定值后打开排料阀灰被压送到远处的灰库排料结束后排空仓泵内余气回到初始状态开始下一轮循环。控制系统的任务就是把这个循环管好进料阀、进气阀、排料阀按顺序动作同时监视料位、压力、阀位反馈异常时及时联锁停机并报警。项目里是两台仓泵要求自动运行时交替循环这样输灰效率高系统不空等。为什么非要“手搓”当时市面上成套的除灰控制柜报价不低而且程序逻辑对方不给开源后期想根据现场情况调整就得加钱。自己用PLC加组态软件做硬件成本不到成套方案的零头程序完全掌握在自己手里加联锁、改参数都方便。这种小规模系统用通用PLC做技术上完全够用没必要上专用的除灰控制箱。1.2 方案选型PLC、组态、通讯方式PLC选了常见的日系小型机我用的三菱FX3U理由很直接指令入门容易SFC和步进指令天生适合顺序控制价格也合理。上位机组态选了MCGS通用版理由同样实用MCGS支持三菱FX系列串口和以太网驱动自带实时数据库和历史存储不需要额外写代码。画面组态用拖拽方式能快速做出设备流程图适合一个人赶工期。资料多、网上教程和案例多遇到问题好查不像某些组态软件文档写得云里雾里。PLC与上位机的通讯方式有条件就直接上以太网。FX3U本体没有网口我加了一块以太网模块如果预算紧张串口RS422也能做但速率慢、容易受干扰。现场实地调试时你会发现以太网通讯排查起来比串口省心太多ping一下就知道通不通。为什么不选Qt做组态Qt做组态首先要自己解决设备图元库、变量驱动、数据采集线程、历史存储、报警系统这一整套下来没有几个月下不来。它适合有特殊定制需求或者想做产品化的场景手搓一个项目没必要给自己加这种难度。Web组态比如基于HTML5的2.5D设备库方案更适合远程可视化、大屏展示但中小型除灰项目只要本地控制MCGS足够。1.3 硬件拓扑与控制柜布局硬件组成不算多PLC主单元FX3U-32MR16输入16输出、模拟量模块FX3U-4AD4路4-20mA输入、以太网模块FX3U-ENET再加上中间继电器、断路器、开关电源和一台工控机跑MCGS。I/O分配是开工第一步。输入侧有进料阀开到位/关到位、排料阀开到位/关到位、料位计高料位、手动/自动旋钮、启停按钮、压力变送器4-20mA信号。输出侧有进料阀开/关指令、进气阀、排料阀开/关指令、气源电磁阀、运行指示灯和报警灯。有个选型经验可以分享如果你只是做本地显示用带MCGS嵌入版的触摸屏一体机更省事但如果要远程监控和趋势记录工控机加MCGS通用版更灵活而且MCGS通用版可以跑在普通电脑上调试时直接插笔记本就能看画面。2. 梯形图编程核心逻辑与踩坑实录2.1 先把工艺动作转换成状态图再谈编程拿到需求不要急着打开编程软件我习惯先画“状态转移图”。这套除灰系统的工艺循环可以拆成这几个状态S0 初始状态等待启动信号 S1 进料状态开进料阀等待高料位信号或进料超时 S2 加压状态关进料阀开进气阀等待压力上升到上限 S3 输送状态开出料阀保持进气等待压力落到下限或输送超时 S4 排空状态关出料阀、关进气阀开排气阀等待压力回零 S5 回到S0自动模式下切到另一台仓泵开始下一轮画状态图最大的好处是逻辑分支一目了然。特别容易漏的是异常跳转仓泵在进料过程中压力突然高了怎么办排料过程中料位计卡在高位怎么办这些边界分支不提前想清楚写出来的程序就是“主流程能跑异常就乱套”。另一个经验是状态图必须带超时保护。任何一步卡住阀门不到位、压力上不去系统必须在设定时间内报警并跳安全状态否则轻则堵管重则设备损坏。这个习惯帮我在后面省了很多现场调试时间。2.2 顺序控制的两种实现方式STL步进指令 vs 置位复位三菱FX系列有STL步进指令专为流程控制设计。用STL实现状态图非常自然每一状态对应一个S状态位动作和转移条件写清楚就能跑。我最终用这种方式在GX Works里按状态图逐块编写每一块对应一个状态转移条件就是各输入信号的组合。另一种常见方案是“置位复位M辅助继电器”方式用M辅助继电器表示当前状态状态切换就是RST旧状态、SET新状态再配合TON定时器做延时。两种方式的取舍参考实现方式优点缺点适用场景STL步进指令状态结构清晰、流程修改方便、便于评审对初学者有理解门槛、转移条件需严格互斥顺序控制明确、状态较多的流程置位复位M灵活、逻辑不受指令限制、支持复杂分支状态多了容易乱、可读性差简单流程、状态少或需要混合逻辑除灰系统既有时间条件又有压力、料位等输入条件我选了STL方案。实际写下来后面加联锁、加手动/自动切换都是在对应状态块里加行改动范围小不容易碰坏其它逻辑。网上有人问“三菱SFC怎么转换成梯形图”其实在GX Works里可以直接建SFC程序也可以先画SFC再转换为梯形图块这一点我建议新手上手先用梯形图块配合STL指令比直接画SFC更直观。2.3 双线圈、扫描周期与联锁保护踩的第一个大坑就是双线圈。“双线圈”指的是同一个Y输出在多段梯形图里被OUT指令赋值两次以上。PLC扫描是从上到下逐行执行的后执行的那次赋值会覆盖先执行的结果。比如进料阀开输出Y0自动程序里写了OUT Y0手动程序里也写了OUT Y0自动模式下如果手动程序段里的条件也满足了结果是后扫描到的那段说了算。这个问题在现场表现很随机有时好使有时乱动排查起来非常头疼。正确做法是程序里不直接OUT Y输出而是把控制结果汇总到M辅助继电器最后在程序结尾统一把M映射到Y。例如LD M100 OR M110 ANI M120 OUT Y0这样Y0只被赋值一次逻辑全部集中在M区排查起来也方便。控制逻辑和物理输出分开这个习惯我一直保持。扫描周期也要注意。PLC扫描周期通常几毫秒到几十毫秒高速动作的联锁如果判断条件分布在较长程序段里可能延迟一个扫描周期才能生效。对除灰这种秒级动作的系统延迟一个扫描周期问题不大但不要在程序中间修改自己本轮扫描中刚用到的状态位否则容易出现“同一周期前后不一致”的怪问题。联锁保护是这套系统的命根子。我设计了三路与状态无关的独立联锁段任何状态下都生效联锁1压力大于0.35MPa直接切故障状态关进气阀。联锁2开出料阀指令后15秒内开到位信号没来判断阀卡涩报警并自动关闭进气阀保压。联锁3进气阀开指令执行5秒后压力仍低于0.05MPa判断气源压力不足报警提示。这些联锁是调试过程中不断补出来的。第一次上电试运行排料阀卡滞导致仓泵压力憋到0.5MPa机械安全阀直接跳了。当时才意识到联锁设计不能只停留在“主流程跑通”异常兜底才是控制系统的价值。2.4 三台电机顺序启动逆序停止的经典逻辑项目里输灰系统配了三台气源风机要求顺序启动、逆序停止启动顺序M1→M2→M3每台间隔5秒停止顺序M3→M2→M1每台间隔5秒。这个题目在很多招聘笔试里出现过实际项目里也确实常用。实现思路不复杂。启动条件按下启动按钮且当前处于“未启动”状态。启动过程用两个定时器做延时每5秒投入一台电机。停止过程反过来先停M3、再停M2、再停M1。关键点在于启动过程中按了停止按钮怎么办停止过程中按了启动按钮怎么办必须用一个“正在启动/正在停止”的状态锁存让两种操作互斥。否则就会出现启动到一半被打断设备状态混乱的问题。我用了M区状态位实现M101启动中M102停止中。启动按钮SET M101RST M102前提是M102为OFF。停止按钮SET M102RST M101前提是M101为OFF。启动中T0定时5秒到M1保持运行M2输出ON并重新启动T0再5秒后M3输出ON。停止中T1定时5秒到M3先停M2保持运行再5秒后M2停M1最后停。每一台电机输出都要串上“启动中/停止中”对应状态位并且附加故障输出OFF的联锁。比如风机过载热继电器动作必须无条件停掉对应风机还要把后面未启动的电机锁死防止二次启动。这里我反而建议用M加定时器方式而不是STL。因为启停流程是纯时间顺序没有输入条件判断用定时器链更直接。顺序启动逆序停止的梯形图网上版本很多但大多没有处理启动/停止互斥的细节这是实际项目里最容易出问题的地方。2.5 模拟量处理与比较指令FX3U-4AD模拟量模块接收4-20mA压力变送器信号转换后的数值范围通常是0-4095。我把量程设置为0-1.0MPa对应0-4095。换算公式很简单实际压力MPa 数字量 / 4095 × 1.0。但FX3U做浮点运算相对麻烦实际上我用的是整数运算先把数字量乘以1000再除以4095得到0-1000的“千分值”组态画面上直接除以10就显示成MPa。指令写法大致是MUL D100 K1000 D110 DIV D110 K4095 D112这样D112里就是千分压力值组态读取后显示为“xx.x MPa”。PLC侧比较时直接用D112和设定值比较比如压力上限350对应千分值350。模拟量滤波是必须做的。现场压力信号在阀门动作瞬间会有波动直接用原始值做比较容易误动作。我做了滑动平均值处理每100ms采样一次把最近10次采样的平均值作为当前值。数字滤波虽然不能完全替代硬件滤波但对这种秒级响应的系统足够。还有个容易踩的坑模拟量模块通道地址没弄对。FX3U-4AD通过FROM/TO指令读取缓冲存储区通道1的地址是BFM #5通道2是#6。我第一次把两个通道读反了调试时发现压力值一直显示另一个点位的数值。后来养成习惯先给每个通道单独强制加信号确认地址无误再往下做。2.6 梯形图调试仿真和实物的差别梯形图写完先用GX Works的仿真功能跑一遍逻辑。仿真时可以用软元件测试功能故意给M、D赋值模拟传感器信号把主逻辑跑通。但仿真毕竟不是实物仿真不知道实际IO的响应时序比如开关阀门需要几十秒仿真里瞬间就到位了。仿真不好模拟模拟量跳变、通讯延迟这类实际问题。仿真的扫描周期与实际硬件有差异联锁时序问题只能在现场暴露。所以我的调试顺序是先仿真跑主流程和异常分支再上真机空载测试不接真实阀门用按钮模拟到位信号最后接真实阀门带压测试。空载测试这一步能发现大量接线和地址映射问题千万不要省。现场调试时我喜欢用GX Works的在线监视功能一边看梯形图状态绿色高亮表示导通一边强制M变量模拟条件。组态画面那边同步看效果两边对照排查效率高很多。3. 组态软件选型与画面搭建3.1 为什么选MCGS而不是自己写MCGS组态软件分通用版和嵌入版通用版跑在Windows上适合配合普通电脑或工控机嵌入版跑在触摸屏里。这次用通用版原因是需要数据历史记录和灵活的报表功能。对比一下市面常见方案方案上手难度成本适用场景MCGS组态低较低中小型系统、国产触摸屏/工控机配套组态王中中国内老项目多、资料多、生态成熟WinCC中高高西门子生态、大型项目、与TIA深度集成Web组态自研HTML5/2.5D设备库高开发成本高远程监控、大屏展示、产品化需求Qt自研组态高开发成本高特殊定制、无现成组态可用对除灰控制系统这种中小型项目MCGS已经能覆盖设备通讯、实时数据库、画面动画、报警、趋势、用户权限全都有。上手周期大概一到两周。如果项目要求高比如上百个变量、大量历史报表、复杂用户权限分级再考虑组态王或WinCC也不迟。3.2 设备通讯与变量连接MCGS里最核心的两块是设备窗口和实时数据库。先添加设备驱动我用的是三菱FX系列以太网驱动通讯参数要填对PLC IP设为192.168.1.10工控机IP设为192.168.1.20同一网段。通讯周期建议500ms左右太快会增加PLC负担太慢画面会卡顿。然后建立设备通道把PLC里的D、M、X、Y映射到MCGS通道。这个项目主要用的通道Y输出状态运行指示、故障指示。D112压力实际值千分值。D120当前状态编号方便画面上显示“进料中/输送中”等文本。M区状态位手动/自动、报警状态等。实时数据库变量与通道绑定后画面图元才能通过变量取数。这里有几个隐蔽的坑第一个是地址偏移。不同驱动的地址对应关系有区别有的驱动D0对应PLC的D0有的驱动从D1开始对应PLC的D0。建立通道后一定要先在设备调试里读一下确认数值对上了再继续做画面。第二个是变量属性设置。MCGS变量有“读写”属性按钮需要写入的变量必须设为读写否则运行后点击按钮没反应。这个坑很隐蔽因为在组态环境里按钮能拖能保存就是运行时不动作。第三个是通道类型匹配。D是字寄存器M是位寄存器搞混了画面会显示一堆乱码或常量。建立通道时选错数据类型排查起来非常费时间。3.3 画面设计从操作员的视角出发画面不是给自己看的是给现场操作工看的。操作工不需要看懂梯形图也不关心程序怎么写的他要的是“现在设备什么状态、下一步该干嘛、有问题点哪里报警就出来”。我做的画面结构分五个页面系统总览整个输灰流程图两台仓泵、管道、阀门、风机全部画出来用颜色区分运行/停止/故障。单泵操作画面手动/自动切换、各阀手动动作按钮、当前流程状态显示。参数设置画面压力上下限、进料时间、输送超时时间等设定值可从组态写入PLC。报警画面实时报警列表、历史报警查询、报警确认按钮。趋势画面压力实时趋势、历史趋势曲线。图元用MCGS自带图形库拼管线用线段阀门用圆形加颜色变化。在动画连接里设置“颜色动画连接”Y0为1时阀门图元变绿色为0时变灰色。这样操作工一眼能看出哪个阀是开着。操作权限设置了三档操作员、工程师、管理员。操作员能手动开关阀、切换自动手动工程师能改参数管理员能修改用户权限。按钮上做了安全确认弹窗防止误触。我个人觉得画面设计最容易被新手忽略的是“当前状态文本显示”。在一堆图形动画里直接显示一行文字“1号仓泵输送中”比各种颜色动画都直观。我在组态里用条件判断脚本根据D120的值显示对应状态文本操作工反馈特别好。3.4 报警与趋势曲线MCGS报警功能配置不复杂。在实时数据库里给需要报警的变量建“报警组”设置上限/下限或上下限值报警类型选“开关量报警”或“数值越限报警”。运行时报警自动记录时间、变量名、当前值、报警类型。这个项目配置的报警项压力高报大于0.35MPa。气源压力低报小于0.05MPa。阀开到位超时开出料阀指令后15秒未到位。风机过载热继电器动作。通讯故障PLC通讯断开。报警记录默认存MCGS自带数据库。建议在运行策略里配置“数据对象”定时存储把关键数据周期性写入数据库方便事后查曲线。趋势曲线的坑很典型历史趋势曲线显示空白。多半原因是变量没有配置“数据存盘周期”或者存盘周期没启动。把变量加进存盘数据组存盘周期设1秒重新运行工程就有了。实时趋势曲线要设置采样周期一般1秒就够。3.5 组态画面“动起来”的调试组态做完不要直接上真机先用MCGS自带的模拟运行方式。把PLC侧程序停掉MCGS用模拟设备驱动或直接给变量赋测试值看画面动画是否按预期变化。这一步能过滤掉80%的变量地址错、动画连接错的问题。上真机调试时打开MCGS设备调试窗口逐个看PLC侧变量值是否正常刷新。我习惯在PLC程序里加一段测试逻辑上电后D120自动置1、2、3循环这样不操作外部设备也能用组态观察状态显示是否正常。测试完记得把这段逻辑删掉否则现场跑起来状态会乱跳。还有一点画面刷新速度设置不要太激进。MCGS画面扫描周期默认值一般够用强行调小可能导致CPU占用率飙升整个上位机卡顿反而影响操作体验。这个参数在运行策略里调整不要为了追求“实时”把系统搞死。3.6 远程监控扩展Web组态与2.5D设备库最后说说Web组态。现在有一些开源的Web组态方案基于HTML5、Canvas或SVG适合做远程监控大屏还有2.5D设备库能做出很漂亮的设备效果。但现实问题是自己做Web组态要处理浏览器与PLC的通讯通常需要中间网关或MQTT转发、前端图元库、实时数据刷新、历史存储工程量比本地组态大很多。除非项目有明确的远程监控、大屏展示需求否则没必要在起步阶段就上Web组态。如果后续要扩展我建议在MCGS工程稳定运行后用MQTT网关采集PLC数据再对接前端可视化两边互不影响。这样既有了远程能力又不影响本地控制的稳定性。4. 常见问题与排查技巧实录4.1 PLC与组态通讯掉线现象画面所有数据停止刷新报警记录里出现通讯故障但PLC运行指示灯正常。排查步骤一般是确认网络连接在工控机上ping PLC的IP不通就查网线、交换机、IP配置。确认MCGS设备驱动是否在线设备窗口里驱动状态是否显示正常。确认通讯周期是否过短500ms以下容易在高负载时超时适当放宽到800ms。确认是否有两个程序同时占用PLC通讯端口MCGS在调试时如果又开了GX Works在线监视两个连接会互相挤占导致掉线。经验之谈现场用过串口RS422通讯距离超过30米后偶尔掉线后来换以太网模块彻底解决。能用以太网就不建议用串口尤其是需要长时间连续运行的除灰系统。4.2 数据显示“#”或乱码现象MCGS画面里压力值显示“####”按钮状态显示乱码模拟量显示一个巨大数字。原因基本是通道地址或数据类型配置错误。最典型的有这几类D地址和M地址搞混。16位有符号数和无符号数混用压力值超过32767后变成负数。模拟量数字量与工程量换算没做直接显示4095这种原始值。通道偏移一位PLC的D100在驱动里配成了D101。排查办法打开设备调试窗口看原始值是否正常把变量删掉重新建立通道不要图省事复制旧通道改地址复制出来的通道经常带着旧配置容易背锅。4.3 定时器时间不准确现象进料延时设定60秒但实际有时50秒有时70秒。原因主要集中在定时器类型和调用方式上。FX系列定时器分100ms、10ms、1ms三种T0-T199是100ms定时器T200-T245是10ms定时器T246-T255是1ms
返回列表