拓冰建站拓冰建站
首页 / 资讯中心 / 正文

S7-200加组态王实现单容液位控制系统完整实战指南

S7-200加组态王搭一套单容液位控制系统这是很多自动化专业朋友接触过程控制后的第一个完整工程项目。原理图看着就一个水箱、一个阀门、一个液位计但真正从选型、接线、写PLC程序再到组态王画面上看到液位曲线稳定在设定值中间至少有三四个大坑等着你。我把这个项目从零到跑通的完整过程包括硬件配置、PLC程序结构、组态王通讯配置、画面动画、PID参数整定和常见故障全部整理成这篇实操记录。正在做课程设计、毕业设计或者准备接手小型过程控制项目的朋友可以直接照着这个思路搭。1. 系统整体设计与硬件选型1.1 单容液位被控对象怎么理解单容液位控制说白了就是一个水箱。进水通过调节阀出水可能有泵抽也可能靠溢流或自由落水。液位变送器检测当前液位送进PLCPLC根据液位与给定值的偏差去控制进水阀门的开度最终让液位稳定在设定值附近。为什么叫单容因为相比双容、三容对象它只有一个储能环节——水箱本身。这个对象的动态特性相对简单惯性也比较小但千万别觉得简单就好做。实际运行中存在着阀门的非线性、进水流量的波动、变送器信号的噪声这些都会直接影响控制品质。还有一个概念必须弄清楚这个对象是自衡的还是非自衡的。如果出水靠泵往外抽进水多则液位上升、进水少则液位下降阀门一旦失控液位可能一路冲上去这就是非自衡对象控制方案必须包含联锁保护。如果是溢流堰、底部自由出流这种结构流量随液位升高而增大对象本身有自平衡能力控制起来要稳得多。我这次用的是实验台上很常见的进水电动调节阀泵抽出水结构属于典型的非自衡单容对象控制目标就是让液位稳定在操作员设定的任意值上。1.2 控制方案选型位式控制与PID二选一说实话一个单容水箱要稳住液位最省事的做法是位式控制液位低于下限开泵/开阀液位高于上限关泵/关阀。用S7-200的几个比较指令就能写完成本低、调试快很多学校实验箱都是这么干的。但问题同样明显液位会在上下限之间来回波动执行机构频繁动作时间长了电动阀容易坏泵也经不住这样反复启停。而且你想在组态王上做出一套看着专业的连续调节画面位式控制的效果非常尴尬——阀门开度不是0就是100%趋势曲线是锯齿状拿不出手。所以我这最终选的是连续PID控制。S7-200自带PID指令也可以直接用STEP 7-Micro/WIN的PID向导生成闭环子程序控制输出为0-100%的阀门开度通过模拟量输出模块输出4-20mA给电动调节阀。位式控制并没有被完全丢掉我把高报、高高校验做了联锁保护逻辑放在PID回路外面。一旦液位超过危险值不管PID输出是多少直接强制关闭进水阀这属于安全网不影响正常连续调节。1.3 硬件配置清单我用的这套硬件非常常规基本就是实验室和中小型现场最常见的配置序号设备规格型号数量作用1PLC主机西门子S7-200 CPU224 DC/DC/DC1逻辑控制与PID运算2模拟量输入模块EM231 4AI 12位1采集液位变送器4-20mA信号3模拟量输出模块EM232 2AO 12位1输出4-20mA控制电动调节阀4液位变送器扩散硅静压式量程0-50cm输出4-20mA1检测水箱液位5电动调节阀等百分比特性4-20mA输入1调节进水流量6单容水箱有机玻璃或304不锈钢配出水泵1被控对象7通讯电缆USB-PPI编程电缆1PLC与PC通讯8开关电源明纬24V/5A1给变送器、PLC等供电提示S7-200已经停产多年现在市面上流通的大多是二手拆机件或库存件订货选型时一定要注意CPU的型号版本比如224和226的IO点数不同模拟量扩展模块的订货号也不同。拿到模块后第一件事是找官方手册核对端子接线定义别想当然按经验接。2. PLC侧控制程序的设计与实现2.1 IO点表与内存地址规划写程序之前先把IO点表和变量地址规划清楚。这步不做好后面调试会乱。很多初学者上来就写梯形图写到一半发现地址冲突再到程序里到处找纯属浪费时间。我这次的IO点表如下模拟量输入AIW0接液位变送器4-20mA模拟量输出AQW0接电动调节阀4-20mA数字量输入I0.0启动按钮、I0.1停止按钮、I0.2手自动切换数字量输出Q0.0运行指示灯、Q0.1报警指示灯、Q0.2蜂鸣器V区内存规划同样重要。我把工艺参数全部安排在VW/VD区域方便组态王直接读写VD100液位实时值0-100%实数VD110PID输出值0-100%实数VD120PID给定值VW130PID增益实数用VD132VD136积分时间VD140微分时间M0.0手自动切换标志1自动、0手动M0.1系统启动标志这样做的好处是组态王的数据词典变量可以直接指向这些V区地址PLC和上位机共享同一片数据区不用额外写通讯协议程序。PPI协议本身就是西门子为上位机访问S7-200寄存器设计的效率很高。2.2 模拟量工程量换算关键公式别搞错EM231模拟量输入模块接收4-20mA电流信号对应的数字量范围并不是0到32000而是6400到32000。为什么因为S7-200的模拟量输入通道对单极性信号0-20mA对应0-32000多出来的4-20mA段自然就是6400-32000。很多第一次做的人直接拿AIW0除以32000再乘以量程结果液位永远偏低就是因为没扣掉这个4mA的偏移。正确的工程量换算公式是工程量 (AIW0 - 6400) / (32000 - 6400) × 量程上限如果液位变送器量程是0-50cm那么液位厘米值 (AIW0 - 6400) / 25600 × 50。为了方便组态王显示我习惯先把工程量归一化到0-100%这样组态王画面上显示百分比数字趋势曲线也统一。在S7-200里用梯形图实现这个运算思路是读取AIW0 → 转为双整数 → 转为实数 → 减去6400 → 除以25600 → 乘以100。核心指令就是ITD整数转双整数、DTR双整数转实数和加减乘除浮点指令。有一点要注意V区地址有对齐要求VD100、VD104这种双字地址必须按照偶数或者4的倍数来安排否则程序编译不报错运行数据会是乱码。2.3 PID回路实现用向导还是自己写回路表S7-200官方推荐的是用STEP 7-Micro/WIN的PID向导来生成子程序。打开Micro/WIN菜单栏工具里有PID向导设置回路给定值范围、过程变量范围、输出范围、增益、积分时间、微分时间向导会生成一个PID0_INIT子程序主程序里直接CALL即可。这个方式对初学者最友好不容易出错推荐第一次做项目直接用。向导内部其实是在SMB34定时中断里调用标准PID算法默认采样时间可以设置我习惯设成1秒。对于单容水箱液位变化不会特别快1秒采样足够也能有效抑制变送器噪声对微分项的放大。自己写回路表也完全可以适合想深入理解PID机制的读者。S7-200的PID指令参数都放在一个回路表中包括给定值、过程变量、输出值、增益、积分时间、微分时间等需要用MOV指令把参数填入V区表然后用定时中断比如SMB34周期性调用PID指令。这种方式灵活但需要手动管理回路表也容易把地址搞乱。注意不管是向导还是手动回路PID输出的0-100%最后都要通过EM232转换成4-20mA输出。EM232的数字量输出范围同样是0-32000对应0-20mA。所以程序里要把PID输出值0-100%乘以256再加6400变成6400-32000的数字量才能和4-20mA对应上。这个转换忘掉的后果是阀门永远打不开或者全开关不住。2.4 联锁与安全保护逻辑单容对象的PID控制看似简单但安全联锁必须加这也是体现工程经验的地方。我的做法是在主程序里设置几个比较指令实时比较液位PV值和报警限液位超过85%置位报警中间位M10.0Q0.1报警灯亮Q0.2蜂鸣器响同时把PID输出强制清零关闭进水阀。这个强制动作要放在PID输出之后再处理让阀门指令直接等于0。液位低于10%时同样报警防止泵抽空。液位超高到95%执行更严格的保护不管手动自动强制关闭阀门并禁止启动。联锁动作必须与PID控制逻辑分开单独一个网络段处理这样即使PID调试中输出异常安全逻辑也能独立兜底。说句题外话现场调试时最容易出事故的就是PID参数没整定好导致液位冲顶溢水有了联锁最多报警响几声不至于把实验室淹了。3. 组态王工程创建与S7-200通讯配置3.1 通讯方案PPI协议直连组态王和S7-200的通讯最常规、最省钱的方案就是通过USB-PPI电缆直接连接。S7-200的Port0口支持PPI协议PC端虚拟出一个COM口组态王通过这个COM口以PPI从站方式访问PLC内部的位、字节、字、双字数据。为什么不用以太网S7-200本身不带网口要联网必须加CP243-1以太网模块那个模块价格不低配置也相对繁琐对于一套单容液位控制来说完全没必要。串口PPI方案稳定可靠在实验室小系统里足够用。通讯参数必须保持一致。PLC端的PPI端口默认站地址是2波特率96008位数据位、偶校验、1位停止位。PC端USB-PPI电缆插上后先打开设备管理器看虚拟COM口号然后在Micro/WIN软件里设置通信参数把接口选成USBCOM口选对点一下双击刷新能搜到站号为2的CPU就说明物理链路通了。3.2 组态王里新建设备打开组态王工程管理器新建工程进入开发系统后第一步是定义设备。在工程浏览器的设备节点下双击新建弹出设备配置向导。驱动树选择PLC → 西门子 → S7-200系列 → PPI。这一步千万别选成S7-300/400的MPI驱动虽然同样是西门子但协议完全不同。配置向导会依次要求输入设备名称、选择COM口、设置设备地址这里关键的是设备地址。S7-200默认PLC从站地址为2如果你从来没有改过PLC的系统块那设备地址直接填2。如果你在Micro/WIN里修改过PLC地址这里必须保持一致否则通讯永远建立不起来。还要注意COM口的实际编号是COM3就选COM3组态王不会帮你自动识别。实操经验PPI电缆在Micro/WIN里能正常连接下载程序但组态王设备诊断时提示打开通讯设备失败八成原因就是COM口号错误或者微控制器比如别的软件把串口占用了。解决方式是先把Micro/WIN退出再启动组态王运行系统。USB转串口的驱动常见CP2102或CH340芯片驱动装不好也会带来麻烦这一点后面问题排查部分会展开讲。3.3 数据词典变量定义组态王中所有画面动画、报警、趋势都是基于变量的而变量的来源就是数据词典。在工程浏览器数据库节点下双击数据词典然后新建变量。变量分为I/O变量和内存变量I/O变量直接和设备通讯读写PLC寄存器内存变量只存在于组态王本机。我定义的I/O变量如下变量名变量类型连接设备寄存器数据类型读写属性液位PVI/O实数PLC_S7200_PPIAIW0INT只读阀位输出I/O实数PLC_S7200_PPIAQW0INT只写手动阀位I/O实数PLC_S7200_PPIVD110FLOAT读写PID给定I/O实数PLC_S7200_PPIVD120FLOAT读写PID增益KCI/O实数PLC_S7200_PPIVD132FLOAT读写积分时间TII/O实数PLC_S7200_PPIVD136FLOAT读写微分时间TDI/O实数PLC_S7200_PPIVD140FLOAT读写手自动切换I/O离散PLC_S7200_PPIM0.0Bit读写系统启动I/O离散PLC_S7200_PPII0.0Bit只读这里有个容易踩坑的点组态王的寄存器地址列表中AIW0要写成AIW0AQW0要写成AQW0。有的版本界面里寄存器下拉框看起来像AIW、AQW、VW、VD等如果你把VD110的寄存器类型错选成VW那访问的就是16位整数而PLC里是32位实数数据完全对不上。注意FLOAT类型要和PLC中的VD双字对应INT类型和VW对应Bit类型和M0.0这种位地址对应。内存变量主要有画面切换辅助变量、操作员登录变量、报警确认变量等。这部分不参与PLC通讯纯属画面上的运行逻辑比如隐藏某个弹窗、切换页面等。3.4 通讯是否正常一眼判断配置完成后在组态王工程浏览器的设备节点下找到刚才定义的设备双击打开设备测试窗口可以看到通讯状态、错误计数等。更直观的方式是直接运行画面如果画面上的液位PV显示具体的数字而不是###并且数字会随水箱液位变化而变化说明通讯已经通了。如果变量显示###通常意味着通讯断开或者变量地址不正确。如果变量一直显示0且不变化但设备测试通讯正常那就要去检查模拟量通道接线、变送器是否供电以及PLC内部变量是否正确。记住一个排查思路PLC能读到的数据组态王才可能读到PLC内部数据本身就不对换什么上位机都没用。4. 监控画面组态与动画联动4.1 画面布局要贴近工艺组态王的画面设计不是画得越花哨越好。工业监控画面的核心是一屏看懂工艺状态。我的主画面布局是左侧从上到下依次是水泵、进水管路、电动调节阀、水箱右侧放液位实时显示、PID参数整定面板和手自动操作区底部放报警条和趋势窗口。画水箱的时候我习惯用工具箱里的矩形绘制水箱轮廓线用粗线条再画一个内部矩形专门做液位填充。管路用直线或多段线阀门用两个三角形加一个矩形简化表示。这些图元都不难画关键是要把变量连接做对不然静态图形再漂亮运行起来也是一潭死水。画面尺寸建议设置成1024×768或者和操作站分辨率一致。很多朋友遇到过运行画面和开发画面显示不一致的问题根源就是画面尺寸和系统分辨率不匹配或者Windows的DPI缩放比例不是100%。组态王的画面属性里可以设置画面宽度/高度建议直接填当前电脑的分辨率同时把Windows文本缩放设为100%。4.2 液位填充动画的实现这是最容易出彩也最容易出错的地方。选中水箱内那个矩形图元右键选择动画连接在对话框里找到填充页表达式填\本站点\液位PV变量名作为表达式填充设置里选择方向为从下向上对应画面里水箱的实际液位变化方向。填充的最大值-最小值要和液位变量的量程对应如果液位PV是0-100那最小值为0最大值为100这样填充高度正好跟随液位百分比变化。液位的数字显示可以用模拟值输出连接表达同样引用\本站点\液位PV小数位设一位。这比在空白处手动放文本再填数值的方式科学得多运行时会自动刷新不用反复改图。注意动画连接里的变量表达式格式是\本站点\液位PV注意本站点和变量名之间是两个反斜杠。有的朋友在组态王里直接拖变量过去结果表达式变成液位PV运行起来动画不动就是这个格式问题。正确写法可以在动画连接对话框里点开变量浏览按钮选择变量让软件自动生成表达式。4.3 操作面板手自动切换与PID参数在线整定操作面板是给运行人员用的设计原则是简单直接。“手自动切换”我放了一个按钮按钮的弹起动作设为置位一个内存离散变量手自动标志按下动作设为复位。实际PLC侧M0.0也去读写这个标志实现上下位机联动。切换后按钮的文本或者颜色可以随之变化通过隐含连接当手自动标志等于1时显示自动按钮图片等于0时显示手动按钮。这样操作员一眼就知道当前处于什么状态。PID参数整定面板我放了四个编辑框分别关联PID给定、PID增益KC、积分时间TI、微分时间TD四个I/O变量。编辑框的模拟值输入连接对应变量运行中操作员直接输入数值点确定就会写入PLC的V区。这个功能在调试阶段特别有用不用每次改参数都重新给PLC下载程序在线就能试。为了防止误操作我给PID参数编辑框加了确认密码。组态王提供了操作员安全区机制把编辑框的访问权限设置为操作员然后定义不同级别的用户密码。这只是一个小细节但工程项目里这点很重要——调试参数和运行参数混在一起一旦被人乱改整个控制品质就废了。4.4 报警与实时趋势单容液位的报警配置在变量定义时就可以完成。在新建变量的报警属性页中勾选允许报警然后设置低报警值10高报警值85高高报警值95画面中的报警窗口组件会自动显示这些报警报警产生时消息会滚动显示操作员可以进行确认。报警的作用不只是提醒更重要的是让运行人员意识到当前控制状态是否异常比如液位持续高报警但阀门没动作那就要检查阀门是否卡死或断线。实时趋势曲线组件我放在主画面右下角新建一个实时趋势曲线图元双击进入属性设置添加液位PV变量作为曲线设置Y轴范围0-100X轴显示时间跨度可选5分钟或10分钟。实时趋势能直观看到PID调节过程曲线是否振荡、是否快速接近给定值、是否有余差这些信息比看数字直观得多。历史趋势需要在数据库里配置历史记录变量并设置存储周期组态王会自动把数据记录到硬盘文件中后期分析很实用。5. 调试联调与常见问题排查实录5.1 联调顺序先通链路再调控制整个系统联调我习惯按照先硬件、再软件、后闭环的顺序推进。第一步检查接线。用万用表量变送器输出端子两端的电流如果有条件串入一个标准电流表更好。液位在半箱时理论上变送器输出应该在12mA左右。再用信号发生器模拟4-20mA信号接到EM231端子观察Micro/WIN中AIW0的原始值是否在6400-32000之间变化。这一步能验证EM231模块是否正常、跳线是否与信号类型匹配。第二步验证PLC程序。下载程序后用Micro/WIN的状态表监控VD100液位实时值、VD110 PID输出值、AQW0数字量值确认PLC内部计算逻辑正确。手动模式先开一定阀位观察阀门是否动作、液位是否升降。第三步通讯联调。组态王设备测试确认I/O变量能正确读写PLC寄存器。第四步画面联调。运行画面看动画、数值、按钮是否和变量联动。最后才做闭环PID调试。把液位给定设到一个中间值比如50%切自动观察趋势曲线。5.2 PID参数整定的实操过程单容对象的PID整定我推荐从纯比例开始。把积分时间TI设到最大值相当于不起作用微分时间设0增益KC从1开始。切自动后观察趋势曲线如果液位稳定在一个值但和给定值有偏差余差说明P已经有作用了余差需要用积分消除。如果液位等幅振荡说明P偏大把KC减小一半再试。如果液位剧烈发散赶紧切回手动同时把KC降到0.5重新开始。有了一点余差之后开始加积分。积分时间TI从10秒开始试观察余差是否缓慢消失。如果余差消失得太慢逐步减小TI积分作用增强如果液位开始以固定周期来回振荡说明TI太小了适当增大。对单容液位这种惯性不太大的对象积分时间在10-30秒之间通常能调到满意的效果。微分时间我一般先不加或者只加一个很小的值比如0.1-0.5秒。因为液位变送器的信号本身有噪声微分对噪声非常敏感放大后会让阀门频繁抖动。除非对象有比较明显的滞后否则单容液位控制用PID中的PI就够了。实际整定中我还会结合公式法做参考先通过实验找到临界增益Ku和临界振荡周期Tu然后用Ziegler-Nichols经验公式比例度2倍Ku、积分时间Tu/1.2。虽然这个方法给出的参数往往还要微调但至少能给出一个合理的起点比纯靠感觉试要快很多。5.3 常见问题速查表调试过程中整理了一份常见问题速查表遇到对应现象可以直接查现象可能原因解决办法组态王设备测试提示打开通讯设备失败COM口号错误或串口被其他程序占用设备管理器确认COM号关掉Micro/WIN或占用串口的软件I/O变量显示###通讯断开或寄存器地址错误检查设备通讯状态、变量地址写法是否正确液位PV在PLC中正确但组态王始终显示0变量数据类型不匹配检查是INT还是FLOATAIW0用INTVD110用FLOAT液位读数明显偏低/偏高EM231量程跳线不对或未扣6400偏移拨对量程跳线程序里正确减去6400阀门开度到100%液位还是上不去进水压力不足或执行器故障提高泵出口压力检查阀门是否卡死PID切自动后液位发散PID作用方向反了或P太大检查阀门是开大进水还是开大排水反作用要取反液位在给定值附近来回振荡P过大或TI过小减小KC增大TI组态王运行画面错位/显示不全画面尺寸和分辨率不匹配或DPI缩放画面属性设为分辨率大小系统缩放设为100%安装组态王报explorer.exe与.cab不匹配系统补丁环境或安装包与系统版本不兼容以管理员身份运行安装程序安装前关闭杀毒软件和安全软件运行画面中阀门动画不动动画连接表达式有误或变量未正确关联右键图元查看动画连接检查表达式格式5.4 几个特别值得记住的坑最后说几个这次实测中特别有代表性的点。第一USB-PPI电缆的驱动芯片和组态王的兼容性。市面上便宜的数据线大多用CH340或CP2102芯片一般情况下都能用但有些老的组态王版本对CH340识别不好会把串口打开后马上又断掉。我遇到过一次换了一个用CP2102芯片的原装线就好了。调试时如果时间紧优先换线别折腾驱动。第二组态王和Micro/WIN不能同时占用同一个PPI串口。组态王运行状态下Micro/WIN根本搜不到PLC。所以PLC程序还没调好之前尽量先把程序下载完再打开组态王运行系统。如果后续需要改PLC程序先退出组态王运行系统再连Micro/WIN。第三PID向导生成的子程序它的输入和输出需要在主程序里调用正确。很多朋友写好了向导却忘记在主程序CALL PID0_INIT导致PID根本不执行。这种低级错误排查起来很隐蔽因为PLC和组态王通讯都正常变量都有值就是控制不动。我在调试记录里专门标注了一条主程序里确认有CALL指令。第四做实验项目时强烈建议给组态王工程设一个固定存储路径并且经常手动备份。组态王工程文件夹里包含画面、变量、历史数据库一旦系统崩溃或者误操作整个工程就没了。我习惯每天退出运行系统后把整个工程目录压缩一份放到另一个盘。6. 项目做完之后能扩展的方向这套系统做完只是第一步。如果之后想在这个基础上继续加深有两个方向我觉得非常值得投入时间。一个是把控制算法从单回路PID升级成串级控制或多变量控制。比如如果再加入一个进水流量计组成液位-流量串级回路抗干扰能力会明显增强。S7-200最多支持8路PID回路硬件上再加一个EM231模拟量输入模块就行。另一个方向是把组态王的报表功能和历史数据查询做完善。液位控制项目的报表可以记录每小时的液位平均值、阀门开度累计、报警次数等。组态王自带的报表系统功能其实很强支持SQL访问外部数据库可以把历史数据导出来做进一步分析对后面写项目报告或者做数据挖掘都很有用。我个人在实际操作中的体会是这套S7-200组态王的组合虽然老但作为过程控制入门项目它的价值不在于技术多新而在于把传感器、执行器、PLC算法、上位机监控这条完整链路串起来的逻辑。把这条链路理顺了后续换成S7-1200、WinCC或者更大型的DCS系统核心思路都是一样的。踩过这些坑之后再回头看那句原理图很简单就知道工程和原理之间隔着的正是这些看起来不起眼却足够折腾人的细节。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门