ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

化工反应釜PLC控制系统设计实战:三菱FX2N与组态王PID整定

化工反应釜PLC控制系统设计实战:三菱FX2N与组态王PID整定 1. 这个题目常青的原因一套间歇反应釜到底在控制什么我最早接触这个命题是在培训班做项目作业的时候。当时看到基于三菱FX2N系列PLC化工加热反应釜过程控制系统设计这个题目第一反应是这不是老掉牙的东西了吗FX2N停产多少年了现在不都用FX3U、FX5U吗等到我真的把一套柜子调通、把组态王画面跑起来才意识到这个题目能一直出现在毕业设计和工控培训里是有道理的。化工加热反应釜说得直白点就是工业上最常见的间歇式反应设备。原材料进釜升温到目标温度保持这个温度让物料反应若干小时反应结束再降温最后出料。整个过程是典型的顺序控制加模拟量调节混合型项目电磁阀、搅拌电机这些是开关量温度、压力、液位是模拟量加热功率的输出又是连续调节。这种开关量模拟量上位机监控的组合恰好把一个自动化系统工程师需要掌握的东西全串起来了。三菱FX2N作为一款成熟到不能再成熟的机型搞清它的IO分配、模拟量模块、PID指令和通讯协议再去碰FX3U、FX5U甚至西门子1200逻辑上是完全贯通的。题目里同时出现了组态王6.55和西门子这也是我后来才体会到的深意。组态王是国产组态软件里流传最广的一套6.55版本虽然老但设备配置→变量字典→画面绑定→报警报表这套思路跟WinCC、InTouch、力控都一个套路。而西门子程序则是让你换一个PLC品牌视角去看同一套工艺——三菱的内存理念、指令风格和西门子的块式编程完全是两套逻辑对照着学会极大加速你对程序结构这件事的理解。这篇文章我就按我自己当初做这个项目的顺序来写从硬件选型、IO规划讲到梯形图编排、PID整定再讲组态王6.55怎么跟FX2N通讯、怎么把画面做活最后聊聊拿西门子程序对照学习时应该重点看什么。结尾部分是我调试时踩过的几个实在坑每条都有代价。2. 先从低压元器件讲起FX2N选型、IO分配和接线要点很多初学者拿到这个题目第一件事是打开GX Developer写程序这是个典型错误。PLC程序本质上是对已接好的硬件的行为描述硬件没定清楚程序写出来也是空中楼阁。所以第一步永远是做选型和IO分配表。2.1 一套标准反应釜方案的器件清单我按最常见的配置列一套适合15kW以下电加热的反应釜PLC三菱FX2N-48MR24入24出继电器输出预算充足用FX2N-64MR留余量。实训环境里FX2N-32MR也够但工程上IO点数最好有20%~30%的余量模拟量输入模块FX2N-4AD4通道16位分辨率模拟量输出模块FX2N-4DA或FX2N-2DA用于给变频器转速信号搅拌调速或作为PID输出备用温度传感器PT100热电阻配温度变送器输出4~20mA信号。别直接用PT100接PLCFX2N-4AD不认电阻信号需要变送器转成标准电流加热执行器固态继电器SSR固态继电器配15kW以下电加热非常合适无触点、响应快能用脉宽调制的思路接受PLC的高速脉冲输出冷却执行器电磁阀或电动球阀控冷却水进水搅拌电机7.5kW左右三相电机配接触器、热继电器变频器可选配其他断路器、24V开关电源、急停按钮、三色灯、蜂鸣器2.2 IO分配表的写法写IO分配表的核心原则是把每一路输入输出的地址、信号来源、功能注释全部列清楚程序里用到哪个点直接查表。我习惯这样组织地址信号来源/去向功能说明X0急停急停按钮常闭触点急停为一类保护用常闭输入X1启动启动按钮系统启动X2停止停止按钮系统停止X3手动/自动切换开关模式切换X4高液位液位开关进料上限联锁X5低液位液位开关低液位禁止加热联锁X6釜门关闭门限位开关釜门未关不允许升温X7超温温度开关独立于PLC独立超温保护Y0加热输出SSR控制信号PID输出脉冲信号Y1搅拌电机接触器线圈电机启停Y2进料阀电磁阀进料Y3出料阀电磁阀出料Y4冷却水阀电磁阀降温Y5报警指示灯三色灯红灯故障指示Y6运行指示灯三色灯绿灯运行状态这里有个容易犯迷糊的点X0急停为什么要用常闭触点因为急停按钮是按下断开、复位闭合。如果程序里用X0常开作为允许运行的条件一旦急停回路断线比如线被压断PLC会认为急停没有按下系统照常运行这是致命的。用常闭触点编程导线断开就是急停触发断线也是保护状态。这个习惯是从安全联锁逻辑里带出来的做化工项目必须刻进脑子里。2.3 FX2N-4AD接温度变送器的通道配置FX2N-4AD是特殊功能模块地址排在主机之后通常从D8000之后的缓冲存储区访问非常繁琐。新手常在这卡住。它的核心配置是将模块的0号缓冲存储器设为模式选择比如用BFM #0写入值来选择通道输入范围为4~20mA或1~5V。读4~20mA电流信号要选对应模式一般写H0000到H1111对应四个通道用FROM/TO指令FNC78/FNC79读写BFM。举例如下// 程序启动初始化配置4AD的1号通道为4~20mA输入 TO K0 K0 H0000 K1 // 将H0000写入0号特殊功能模块的BFM#0配置1通道 FROM K0 K5 D100 K1 // 读取BFM#5通道1的转换结果到D1004~20mA对应数字量0~20004AD的默认量程所以实际工程值需要换算温度变送器量程下限 D100/2000 ×量程上限-下限。比如0~200℃的变送器D1001000就代表100℃这部分代码放初始化脉冲里执行一次之后每个扫描周期读一次D100并做标定转换。别忘了4AD的转换值是带符号的做减法换算时要用32位指令处理否则零下温度会算出负值后溢出。2.4 主回路设计里的两个保命细节电加热回路我建议这样安排断路器→交流接触器主切断→SSR→加热器。接触器用来做紧急情况下的硬切断SSR负责正常工况下的PID调节。因为SSR长期通断加热如果只靠接触器直接通断触点寿命很快耗尽。另一个细节是SSR的输入信号。FX2N继电器输出的Y0直接给SSR输入端会存在一个问题继电器输出动作频率达不到PID脉冲输出的要求。PID指令往往要求输出一个0.1秒~1秒周期的脉宽调制信号机械继电器根本跟不上的。正确的做法是Y0接一个中间继电器或直接接晶体管输出的PLC点去驱动SSR的DC控制端电压通常3~32VDC。所以做这类项目时输出点最好选晶体管输出型或者专门留出一个24V电子点给加热PWM用。液位、超温这些联锁我建议除了进PLC还要在电气回路里直接串进接触器线圈回路上。比如低液位浮球开关串在接触器KM1的线圈回路里液位不够加热接触器直接没电根本不依赖PLC程序。这叫硬联锁PLC软联锁只是第二道防线。化工装置的安全永远是硬件优先。3. 梯形图不是把设备点一遍灯而是把工艺步骤排队很多学生写的反应釜程序长这样X1启动了Y0on温度到了Y0 off。设备确实动了但既不安全也不符合工艺。真实反应釜的梯形图核心是按工艺阶段切换状态每一个阶段只有一组设备动作被激活。3.1 用状态寄存器做步序切换我习惯用M系列辅助继电器做步序标志比如M10待机初始化完成等待启动M11进料阶段M12升温阶段M13保温反应阶段恒温定时M14冷却阶段M15出料阶段切换逻辑用一个步进互锁结构进入下一阶段的条件满足时同时复位当前阶段标志、置位下一阶段标志。以升温阶段切入保温阶段为例LD M12 // 升温阶段标志 ANI M20 // 未发生超温报警 AND D10 D20 // 当前温度D10 目标温度D20 SET M13 // 进入保温阶段 RST M12 // 退出升温阶段这里最忌讳的是跳步。必须保证同一时刻只有一个M标志在ON否则工艺阶段互相打架进料阀还没关就去开加热冷却阀和加热同时动作这在化工上就是事故。我在每个阶段标志之前都加一个条件前序阶段已完成且后续阶段未激活相当于硬件里的互锁。3.2 加热与搅拌的时序关系化学工程里反应釜搅拌不转就加热会造成局部过热甚至爆沸这是釜式反应器的大忌。所以升温阶段的启动顺序必须是先启动搅拌电机Y1确认运行反馈后再开始投放PID输出。反映在程序里就是LD M12 // 升温阶段 OUT Y1 // 搅拌电机启动 LD M12 AND X10 // 搅拌运行反馈接触器辅助触点接到X10 AND M30 // PID输出使能 OUT Y0 // SSR加热输出这段程序很短但它体现了过程控制里设备启动顺序就是安全顺序的思想。类似的还有进料阶段必须高液位检测到X4 ON才允许停止进料低液位X5 OFF时强制切断加热输出釜门没关X6 OFF禁止任何升温动作。这些联锁条件应该单独组织成一段安全联锁程序放在主程序最前面任何阶段状态下都先执行它保证保护动作永远优先。3.3 手动/自动双模式的编排实训和工程上都要做手动模式方便单台设备点动调试。我的思路是手动模式下各设备由开关直接控制自动模式下由步序逻辑控制两者用X3切换后互锁。最安全的是做成这样一段结构LD X3 // 手动模式 ANI M11 // 自动步序未激活 OUT Y2 // 进料阀手动控制 LD M11 // 自动模式下的进料阶段 OUT Y2 // 进料阀自动控制注意这里Y2同时被两条支路驱动PLC梯形图里同一个线圈多处输出是允许的但不同支路之间逻辑容易乱。我后来习惯把模式切换做在中间继电器上先选出一路控制信号最后统一驱动输出点排查问题时思路清楚得多。报警处理也要在梯形图里做扎实。超温、低液位、通讯异常这些条件用中间继电器汇总成报警链任何一个报警触发就置位M20故障标志同时输出Y5红灯并停止加热输出。报警发生后要能自锁保持直到操作员按下复位按钮。自锁是报警控制的标配否则温度稍微波动一下报警自己消失又自己恢复现场根本不知道发生过超限。4. PID指令在FX2N上的参数表与整定经验加热反应釜如果只做开关量通断控制温度会像过山车一样在目标值上下震荡。要稳必须上PID。三菱FX2N提供FNC 88 PID指令虽然是老指令但结构相当典型学会了它再看西门子的PID_Control、PID_Compact基本都能秒懂。4.1 PID指令的参数表结构FX2N的PID指令格式是PID S1 S2 S3 DS1目标值SV比如D20S2测量值PV即上节提到的温度转换值D10S3参数表首地址从D30开始依次存放采样周期、动作方向、滤波系数、比例增益、积分时间、微分时间等D输出值MV比如D40程序再拿D40去做脉宽调制驱动SSR具体参数表的含义我按半年使用的经验整理如下字地址含义我常用的初始值D30采样周期ms2000~5000反应釜温度变化慢采样周期要长D31动作方向K1为反作用加热K0为正作用冷却D32输入滤波系数0关闭取0~99反应釜推荐30左右D33比例增益KP先给100~300后整定D34积分时间TI×100ms先给2000即200秒这类大值D35微分时间TD×100ms先给0反应釜滞后大微分要谨慎D36~输出上下限等辅助参数输出上限D36设1000下限D37设0这里最大的坑是FX2N PID指令执行一次之前必须先把参数表里的值用传送指令填好而且采样周期如果小于扫描周期效果会很差。反应釜本身是大惯性对象温度曲线变化很慢我把采样周期放到了5秒效果比1秒好得多——因为每5秒才基于一段稳定温差调整输出反而避免了频繁干扰。4.2 用试凑法整定先调P再调I化工加热釜的PID整定教科书上教你找临界比例度但现场真功夫还得靠试凑。我在这个项目上的步骤是先把I和D都设为0D34、D35为0只留P。KP从很小的值慢慢往上加观察温度曲线KP太小温度升得慢、永远差几度到不了目标KP合适温度会围绕目标值小幅自然振荡反应釜的特性是振荡周期很长几分钟一次记录下开始持续振荡时的KP值取它的50%~60%作为最终比例增益加上积分。先把积分时间设大比如300秒逐步减小直到温度能在一个合理时间内回到目标值且没有明显超调微分我基本不启用。反应釜温度信号本来就是大惯性平滑信号微分项只会放大变送器噪声徒增震荡这里有个化学反应釜特有的现象升温时加热器功率大温度逼近目标时釜内物料已经开始放热会出现还没到设定值就开始过冲的情况。这时候PID输出会先降下来但釜内反应热还在往上冲超调几乎无法完全避免。我的措施是在组态王里加一个预停功能当温度到达目标值的92%左右时限制PID最大输出比如从100%降到40%让余热把温度顶上去。这个分段限幅在实际温度控制里非常管用。4.3 PID输出如何变成SSR的脉宽FX2N PID算出来的输出D40是一个0~10004AD的量程基准或0~100的数字它不是直接给Y0而是要做脉宽调制。简单做法是定义一个定时器T0周期1秒然后每个扫描周期做比较LD M8000 // 常ON OUT T0 K10 // 1秒周期脉冲 LD M12 AND T0 // 时间基准 AND D40 K500 // 如果PID输出 50% OUT M30 // 使能半个周期的加热实际更严谨的做法是用PWM指令FNC 57输出0~32767占空比FX2N的晶体管输出支持比较高的PWM频率但对SSR来说0.5~2Hz的频率就够了脉冲周期短了反而容易让SSR散热来不及。我最终用的方案是写一个0.1秒的定时器做脉冲基准比较PID输出占空比驱动Y0翻转实测稳定性和SSR温升都在可接受范围。5. 组态王6.55接入FX2N从设备配置到画面联动的完整链路组态王6.55这个版本说实话界面有点老气但它的逻辑骨架是一切国产组态软件的标准教科书。我最初在这个环节卡了将近两天原因就是设备驱动配置那一套东西没人好好讲透。5.1 设备配置让组态王认识FX2N组态王把PLC通信抽象成设备路径是工程浏览器→设备→COM1→新建→PLC→三菱→FX2编程口。这里的关键参数是通讯方式FX2N的编程口是RS-422组态王通过RS-232转RS-422的下载线编程线跟PLC连接串口参数波特率9600数据位7注意是三菱FX编程口默认7位数据位不是常见的8、停止位1、校验偶通讯地址站号默认0我把96%的通讯失败案例都归结为一个原因数据位选了8。三菱FX编程口协议用的是7位数据位组态王默认参数也是7但你电脑串口助手或者某些转换线默认8两边对不上就是一片乱码或者完全没反应。这是教科书上不会写但实际第一个遇到的坑。5.2 变量字典把PLC地址映射成画面能用的变量组态王的变量字典就是D区/M区地址和上位机变量的映射表。我建变量的习惯是模拟量变量D10对应温度PVD20对应目标温度SVD40对应PID输出。数据类型全部选整型开关量变量M11对应升温阶段M20对应报警状态Y1对应搅拌电机。数据类型选开关读写属性操作员要调整的变量目标温度D20设读写只作为监控的D10温度设只读我强烈建议变量名称做到见名知义比如Temp_PV、Temp_SV、Alarm_20这种。组态王支持直接在变量里定义报警下限上限、变化率报警这些属性别浪费给温度PV设上上限5℃报警比你在PLC里算半天要省事得多。5.3 画面组态反应釜要画得会说话画面本身不需要多精美但每个图形必须和变量联动。我做主画面的三层结构是反应釜主体一个矩形表示釜体内部填充色和温度关联温度超过60℃变橙色超过90℃变红——用的是动画连接→颜色变化功能设备状态指示搅拌电机、进料阀、冷却阀都做成小圆圈运行时变绿停止时变灰。这里用的是隐含连接驱动M位实时数据区温度PV、SV、PID输出、反应时间用模拟值输出连接注意设置整数位和量程不然显示出来是个莫名其妙的大数组态王6.55的实时趋势曲线是这个软件的一大亮点。把温度PV、SV都拖进趋势曲线控件可以清楚地看到升温、保温、降温整个过程的曲线对PID整定简直是神器。我每次调PID都是自己在组态王上盯着曲线操作比看监控表格直观十倍。历史记录和报表这层实训项目里通常要求不高但我建议至少做两个功能报警窗口和班报。报警窗口能实时显示超温、低液位等事件它是化工操作员最依赖的东西基础班报表用组态王的报表控件把温度每小时存一行存到CSV里应付验收和课程答辩完全够用。6. 西门子程序拿来对照不要从零学起要带着问题学题目的后半段是西门子程序学我的理解不是让你看完三菱又去从头学一遍西门子而是拿同样的反应釜工艺横向对比两个平台的不同写法。这种同一工艺两个平台的学习方式效率比单独学任何一家都要高出一大截。6.1 从三菱到西门子的第一关程序结构三菱FX2N的程序是单扫描周期顺序执行从第0步一路执行到END子程序和中断是特殊结构。西门子的逻辑完全不同它把程序拆成OB组织块、FC函数、FB函数块、DB数据块OB1是主循环相当于整个FX2N的主程序体FC相当于无记忆的子程序类似于三菱的CALL子程序FB是带背景数据块的函数块背景DB能保存内部变量——这个概念三菱直到FX3U的FB功能才出现FX2N的时代只能用M区和D区手工管理状态DB全局数据块类似三菱D区但胜在可以按结构体和变量名访问我用三菱写反应釜步序用的是M11~M15互锁那一套。西门子里更职业化的做法是用一个FB写顺控专用逻辑块步序存在一个INT型变量里每个CASE分支对应一个阶段。SCL语言写出来大概是CASE step OF 0: // 待机等待启动命令 1: // 进料 2: // 升温 3: // 保温反应 4: // 冷却 5: // 出料 END_CASE对比到这里你会立刻明白三菱的梯形图做步序是用辅助继电器的位置来表达状态西门子的SCL/块式编程是用变量的数值来表达状态。前者直观但程序量大后者紧凑但需要建立抽象的块思维。这是西门子最值得学、也最值得和三菱对照理解的地方。6.2 PID指令的对比功能定位完全不同三菱FX2N的PID就是FNC 88一条指令绕着一个参数表玩西门子S7-1200的PID_Compact是一个完整的FB自带自动整定功能你只要输入设定值和过程值调用它将手上的参数交给它自己调。这个对比特别能说明两个品牌的哲学差异三菱把PID当作一个高等数学计算功能给用户强调我给你工具参数好坏你自己负责西门子把PID当做一个专业控制策略给用户强调我替你完成大部分整定工作你只管接线。前者适合学习控制原理后者适合快速落地项目。我在教学和实训中最常用的建议是先在FX2N上用试凑法把PID吃透再去用西门子1200的PID_Compact看它自动整定出来的参数是什么量级两相对照对比例、积分、微分的理解会扎实得多。顺带一提网上常有人问组态王SCADA怎么用博途来仿真。这个做个参考就行博途TIA Portal里的S7-PLCSIM可以仿真1200/1500仿真的PLC变量通过S7通讯和组态王对接确实能在没有真实PLC的情况下跑通整条链路。但那是进阶玩法做基础项目时老老实实用真实FX2N做通讯调试能避免掉省仿真环境里80%的古怪问题。6.3 数据结构思维D区和DB块的差距三菱世界里的数据管理是地址即身份D10是温度、D20是目标值全靠注释文档硬记。西门子DB块允许你定义结构体比如Reactor_Temp、Temp_Setpoint、PID_Output放在一个结构里还是一个变量名。这种差异在小型PLC里体现不出来程序一长就会明显感觉到谁的组织性好。我把这个理解成地址簿思维和对象思维的区别。学西门子要刻意练习的就是对象思维哪怕用S7-200 SMART这种相对简单的机种也要习惯把相关的参数打包、命名、组织而不是像我早期做三菱那样用一串裸地址铺满程序。等你回头再写一份三菱程序时这个习惯会让你的注释格式、命名规范、程序分段都明显上一个档次。7. 现场调试最容易翻车的四个环节最后这部分写我实实在在踩过的坑。每个坑背后都是一次凌晨的售后电话或者一次狼狈的返工。7.1 串口通讯三菱的老大难第一次组态王连不上FX2N我在电脑前折腾了三个小时。驱动装好了串口参数改了又改状态一直是红的连接失败。后来把示波器接在RX/TX线上才发现手里的232转422转换器用的DB9针脚定义和FX2N编程口不一样。三菱编程口的针脚定义是特别排布的很多廉价转换线内部5、8、9脚的定义根本对不上。解决的稳妥办法是直接用三菱原装SC-09编程电缆或者质量可靠的兼容线别想着自己头对头焊线。检查顺序永远是硬件线缆→串口参数→站号→驱动版本。组态王里设备连不上时画面上的设备图标会显示红叉新手会觉得是软件问题其实九成是物理层的事。7.2 模拟量信号跳变接地问题温度显示在组态王上跳来跳去几十毫伏的干扰叠加在4~20mA信号上温度换算出来上下乱摆。排查到最后是信号线屏蔽层接地没做好屏蔽层单端接地原则并要接在控制柜的接地排而不是接在PLC的0V上。另外变送器信号线和SSR的220V加热电源线走在了同一个线槽里我用示波器都能看到SSR导通瞬间的干扰毛刺。把信号线单独走一个屏蔽线槽和强电拉开20cm以上跳变问题当场消失。再说一遍处理流程干扰问题不要上来就改程序滤波先查接地、查走线、查屏蔽。程序滤波是末路而不是出路。7.3 PID输出震荡SSR和温度死区PID整定过程中最容易出现的是输出在0%和100%之间反复横跳——温度还没到设定值输出就一会儿全力加热一会儿完全关闭釜体都能听到继电器哒哒响。根因有两类一是采样周期太短温度每次变化的量极小PID反应过度二是SSR过零触发方式在低占空比下会造成几秒不开几秒全开的冲击。我的处理是采样周期由1秒提到5秒同时给PID设置输出死区——目标温度±0.5℃范围内输出保持不动。这相当于给系统加了一个不灵敏区抑制了小幅抖动的传导。实测温度能在±1℃内稳住对化工加热反应釜来说完全合格。7.4 组态王画面假死和数据不刷新画面和报表跑着跑着不刷新了通常不是通信断了而是变量定义里采集频率设得太快。组态王6.55对COM口的轮询频率有上限变量多了以后每个采样周期都去抢串口结果就是通讯队列拥塞、画面数据停留在旧值上。解决方式把非核心变量的采集频率从100ms改到1秒甚至5秒温度这种慢变量500ms足矣。别把所有变量都设成最快频率那是拿串口带宽开玩笑。还有个小经验组态王的创建协议组件失败这种情况十有八九是安装时没装.NET运行库或者杀毒软件把组件隔离了。重装前先把杀毒关掉、把软件目录加入白名单能省很多时间。这个坑在6.55的XP/Windows 7环境里尤其常见。写在最后的一点个人体会这个项目做完我最大的收获不是会写几条梯形图、会连一个组态王而是形成了从工艺需求倒推控制系统设计的思维先搞清楚反应釜的升温、保温、降温到底要求什么再去选点位、搭硬件、写逻辑、配画面、整参数。FX2N这个平台虽然老了但它的指令集足够简单、参考资料足够多非常适合把整套方法论练扎实。等你把组态王、PID、通讯这串链路都跑通再接触任何PLC、任何组态软件都只是在熟悉新工具而不是重新学习原理。标题里那句西门子程序学我也算给出我的答案了学西门子不要生啃手册把三菱上实现过的同一套工艺搬到西门子上去实现一遍用块思维重新表达一遍两个平台就都吃透了。如果你正在做类似的课设或培训项目我的建议是给自己加一个组态王报警记录导出到表格的小任务这一个附加功能做完你就会发现对整套系统的理解又上了一个台阶。
返回列表