1. 现场配料不准的问题从前到后理了一遍1.1 人工配料线到底卡在哪儿去年我们接手了一条小型建材辅料配料线的改造现场一共要配六种原料四种粉料、一种颗粒料、一种液体助剂。改造之前的模式很传统两个工人对着磅秤按照配方单顺序称量手动倒进混合机再人工记录批次数据。听起来简单但实际运转起来问题一堆。第一个问题是精度随人走。有经验的老师傅称料又快又稳换上个新手就容易过冲尤其粉料在往秤斗里倒的时候会“飞料”视觉上看着还没到秤值已经过了。第二个问题是配方切换麻烦。现场每个班次可能要换三四套配方每次换配方都要翻手册、调整磅秤上的挡块改错一次就是一整批废料。第三个问题是过程没法追溯。生产记录靠手写老板想知道每批料用了多少、对不对得上根本查不清楚——纸上的数字和实际消耗对不齐。这三个痛点凑到一起老板才下决心上自动配料。但真到选方案的时候又有新的纠结整套上DCS太贵单个称重仪表做自动配料功能又太死板而且操作界面不直观工人学不会、不爱用。最后我们把方案定成S7-200 PLC做控制核心 组态王做上位机监控 称重仪表做计量反馈也就是一套典型的“PLC自动控制系统配料生产线”组合。这套方案预算不高控制逻辑全部自己写画面自己组态后期改配方、加原料都很灵活。1.2 为什么选S7-200而不是其他控制器有人问这种配料线用国产小型PLC行不行当然行但得看现场条件。这条产线规模不大点位也就五六十个用S7-200 CPU226完全够用性价比也合适。S7-200在中小型配料项目里用得特别多原因有几个首先是编程软件Micro/WIN上手门槛低梯形图逻辑直观后期现场维护的工程师基本都看得懂其次是它的模拟量处理可靠配合EM235扩展模块读取称重传感器变送器过来的4-20mA信号非常稳定再就是PPI通信协议成熟和组态王的配套方案早就跑通了网上能找到大量现成案例技术风险低。我们最后确定的CPU是CPU226 DC/DC/DC晶体管输出版本带24路数字量输入、16路数字量输出扩展了一块EM235模拟量模块4AI/1AO再扩展一块EM223数字量模块用来补点位。这个配置看着不高端但处理六种原料的配料循环绰绰有余。1.3 组态王在上位机里的角色上位机监控画面选了组态王原因也很实在客户对组态王不陌生操作工在别的厂里见过类似界面上手成本低组态王自带图库丰富料罐、电机、阀门、管道这些图元拖出来就能用开发周期短和S7-200的通信不管是走PPI驱动还是走OPC都有成熟路径。组态王在这个项目里承担的事有三件第一把整个配料流程用动画画面展示出来哪个料仓在加料、哪个阀门开了、混合机转不转工人一眼能看清第二下发配方和批次指令操作工在触摸屏或者电脑上选配方号、填批次数量不用碰PLC程序第三记录报警和历史趋势方便事后查问题。这套“PLC干活、组态王展示和指挥”的架构是中小型配料线最常见的组合。2. 硬件选型和I/O清单先画清信号链路再写程序2.1 控制系统整体架构和信号流向动手编程之前我习惯先把信号链路画明白。这条产线的控制架构分三层底层是执行机构和传感器包括六台给料机构、一台混合机、卸料门、称重传感器、料位开关中间层是S7-200 PLC负责采集信号、执行配料逻辑、输出控制顶层是组态王上位机负责下发配方、监控状态、报警记录。信号流的核心是称重信号。每个配料批次开始后PLC通过EM235模块实时读取称重变送器输出的4-20mA信号把电流值换算成重量值再和配方设定值比较控制给料机构的快慢加状态。给料机构采用螺旋给料机用变频器驱动通过PLC的数字量输出控制变频器的多段速端子实现快加和慢加两种速度切换比模拟量调速更简单、更皮实。2.2 称重和给料机构选型的几个细节配料系统的精度七成取决于称重和给料机构而不是PLC程序。现场用的是称重传感器加变送器的方式传感器装在秤斗的三个支撑点上信号并进变送器变送器输出4-20mA给PLC。选型时要注意传感器的量程最好让正常配料重量落在量程的30%到70%之间这样线性度最好。比如一秤满量程200公斤的料传感器按300公斤量程配比较合适。给料机构这块值得多说一句。粉料用螺旋给料机颗粒料用振动给料器液体用泵加电磁阀。粉料最容易出问题的是“喷料”和“架桥”喷料是螺旋转速太快导致粉料冲出来架桥是料仓里粉料结拱不下料。所以在给料机选型时我倾向于选择带调速功能的变频器驱动配合双速控制大比例快加、接近目标慢加。这个设计直接影响配料精度后面程序部分会详细展开。2.3 完整I/O点表设计I/O点表是编程的依据也是电气接线的图纸。我把这套系统的点表整理出来稍微简化了一下供参考PLC地址信号名称信号类型说明I0.01#给料机运行反馈数字输入变频器运行信号I0.11#给料机无料检测数字输入料位开关信号I0.22#给料机运行反馈数字输入同上I0.3混合机运行反馈数字输入接触器辅助触点I0.4卸料门开到位数字输入行程开关I0.5卸料门关到位数字输入行程开关I0.6急停按钮数字输入常闭触点I0.7自动/手动切换数字输入选择开关AIW0秤斗重量信号模拟输入4-20mA经EM235Q0.01#给料机快加数字输出控制变频器多段速1Q0.11#给料机慢加数字输出控制变频器多段速2Q0.22#给料机快加数字输出同上Q0.32#给料机慢加数字输出同上Q0.4混合机启动数字输出接触器控制Q0.5卸料门开门数字输出电磁阀控制Q0.6卸料门关门数字输出电磁阀控制Q0.7报警输出数字输出声光报警器实际项目里六种原料的给料机各自占用两组输出再加混合机和卸料门CPU226的16路输出不够用所以扩展了一块EM223。输入侧也是类似情况CPU226自带的24路输入刚好够。这里给大家一个经验做I/O点表时一定要给每种给料机预留下“运行反馈”和“无料检测”两个输入哪怕现场暂时没装料位开关也要预留点位。后期想补断料检测功能不用再拆柜子改线。2.4 电气柜和现场布线的注意事项电气柜这块要点其实就三条电源干净、信号屏蔽、接地可靠。PLC的24V电源和变频器、接触器这些动力设备分开供电不要用同一个开关电源带PLC又带给料机电磁阀否则变频器一启动PLC模拟量通道就跳变。称重信号线必须用屏蔽双绞线屏蔽层单端接地绝对不能和动力线走同一个线槽。我们现场吃过这个亏一开始称重信号和变频器输出线平行走了一段结果快加启动瞬间组态王上显示的重量值能跳好几公斤后来重新布线才解决。另外晶体管输出型的CPU226驱动能力有限不能直接带接触器和电磁阀中间必须加中间继电器。这一步别省别觉得电流小就直连PLC输出点烧坏了换起来麻烦得多。3. PLC程序核心配方、双速给料和落差补偿3.1 配方数据存储与批次流程设计配料程序必须解决两个核心问题配方怎么存、配料流程怎么走。配方在S7-200里我习惯用数据块DB1来存储。每种原料占2个实数寄存器例如配方1的1#原料目标重量存放在VD4002#原料目标重量存放在VD404依此类推。配方号通过组态王下发到VD380PLC根据配方号把对应原料的目标值搬到当前配料用寄存器。这样好处是程序逻辑不直接引用具体配方值只操作“当前配方目标”改配方不用改程序组态王画面上直接填数就行。配料批次流程用状态机来写核心状态大致是待机状态等待启动指令和配方确认逐料配料状态从1#开始依次完成六种原料的称量卸料状态所有原料称量完成后自动或手动打开卸料门把物料放入混合机混合状态混合机运行设定时间同时可以开始下一秤的称量重叠生产提高效率批次完成状态计数加1回到待机或自动启动下一批次。用状态机编程的好处是逻辑清晰不会出现两个步骤同时执行的情况。S7-200没有专门的顺序功能图我是用内部继电器加上移位逻辑实现的每个状态对应一个内部继电器状态切换时复位当前状态、置位下一个状态。3.2 快慢加料时序和落差补偿算法配料精度最关键的地方就是“什么时候从快加切到慢加”和“什么时候彻底停止给料”。先说过冲问题。螺旋给料机停止后螺旋管里还有一部分余料会继续往秤斗里掉称重值还会涨一点。这部分多出来的量叫“落差”。如果不处理每一批的实际重量都会比设定值多出1到3公斤对要求严格的配方来说完全不能用。处理方法是落差补偿也就是把设定值“提前量”扣除。假设目标重量是50公斤实测停止后还会涨2公斤那么给料提前量就是2公斤下次配料时实际让PLC在48公斤时就停止给料。但落差不是固定值料位高低、物料湿度都会影响它所以不能用固定值得让程序自己学习。我在程序里的做法是每次配料结束后等称重值稳定延时2秒记录实际重量计算实际重量和目标重量的差值作为本次落差值。然后用平滑滤波更新下一次的提前量提前量新值 0.7 × 提前量旧值 0.3 × 本次实测落差值这样提前量会自适应物料状态变化。实测下来用这个简单算法配料误差能稳定控制在±0.3%以内。再说快慢加切换。切换的临界点要设计成两个条件取“先到为准”条件一当前重量达到“目标重量 - 提前量 - 慢加余量”时关闭快加开启慢加条件二快加持续了最长时间比如15秒但重量还没跟上说明给料机堵了或料流不畅也要切到慢加并报警。这个“慢加余量”一般取目标值的5%左右或者取一个固定值比如3公斤。太小了会导致慢加时间过长太慢了会过冲过大。3.3 断料、堵料、缺料的判断方法配料线最常见的故障不是控制逻辑出错而是“料下不来”。粉料架桥、颗粒料卡住、液体泵空转都会导致给料机在转但秤斗重量不涨。不处理的话程序会一直傻等一个批次卡在那里半个小时都没人发现。断料判断逻辑不复杂在慢加阶段PLC每隔一定时间比如500毫秒读取一次重量值和上一次读数比较。如果连续10次读数变化量都小于一个阈值比如每次变化小于0.1公斤就判定为断料或堵料立刻停止该给料机输出报警并且让程序进入“暂停等待人工处理”状态。这个逻辑要注意一点阈值不能设得太小否则螺旋给料机刚启动时的正常间歇性下料也会被误判。我调试时的经验是先空转观察正常下料时重量的最小变化速率取这个速率的1/3作为判断阈值留足余量。3.4 手动干预和自动运行的无缝切换自动程序做得再完善现场也难免遇到需要人工干预的情况比如某种原料临时缺货需要跳过或者某秤料加多了需要人工取出一点。所以程序里必须设计可靠的自动/手动切换逻辑。我的做法是用一个选择开关切换“自动/手动”模式两种模式下PLC的输入输出分别走不同逻辑。手动模式下组态王画面上的每个设备都有独立的“开/停”按钮直接控制对应输出点方便检修和应急操作。自动模式下这些手动按钮全部失效防止误操作。切换的关键在于从自动切手动时所有自动运行中的输出必须立即复位避免设备在不受控状态下继续动作从手动切自动时程序必须重新从初始待机状态开始不允许从中间状态继续跑。这个切换逻辑看起来简单但我在现场见过很多程序在这里出问题最常见的就是切换瞬间设备突然动作把人吓一跳。解决方法是切换指令用“下降沿”触发复位并且复位完成后再允许进入自动状态。4. 组态王上位机组态安装、图库和动画连接的实战细节4.1 组态王6.60SP4安装装对版本和路径能省一半故障组态王的上位机开发第一步就是把软件装对。网上经常有人搜“组态王6.60sp4下载”但下载只是一半装对才是关键。我装过很多台机器说几点实在的安装目录不要用默认的“Program Files”路径建议直接装到类似“D:\Kingview”这样无空格、无中文的目录下。我在两台电脑上遇到过因为路径里有空格导致驱动加载失败的问题重装之后才解决安装过程中会弹出驱动安装选项最好全选省得后面想用某个通信驱动时找不到装完6.60之后打上SP4补丁包修复了不少通信稳定性问题尤其是和S7-200的OPC通信打补丁和不打补丁区别挺明显组态王运行需要加密锁。插上锁之后如果系统提示找不到授权去设备管理器里看看加密锁驱动有没有正常安装这个驱动在安装包里手动装一下就行。组态王装好后第一步是新建工程。工程名称和路径同样别用中文工程路径里的中文在某些版本里会导致画面编译异常。这个我踩过坑后来统一用拼音或者英文命名工程。4.2 用图库精灵搭建主画面料罐、电机、阀门组态王图库是它最方便的地方新手也能快速搭出像样的画面。打开开发系统右侧有个“图库”管理器里面按类别分好了一批现成图元容器罐、电机、泵、阀门、管道、仪表、按钮等等。做配料画面时我基本上是拖拽和拼接。具体操作是这样的从图库类别里找到一个立式料罐图元拖到画面上用鼠标拉伸到合适尺寸复制六个分别代表六种原料仓。给料机用“螺旋给料机”图元或者用一个电机图元加一条管道代替混合机找一个带搅拌桨的容器图元。图元放好后双击图元进入“动画连接”对话框把图元的填充属性关联到对应的变量上。举个例子料仓的料位显示双击料罐图元在动画连接里选择“填充”表达式填PLC传来的料位变量如“料仓1料位”填充方向和颜色设好。运行时变量值变化料罐的填充高度就会跟着变。电机旋转动画选择“旋转”或“水平移动”表达式关联电机运行状态变量变量为1时图元旋转。这样整个画面动起来之后操作工一眼就能看出系统正在干什么。如果有特殊设备在图库里找不到现成图元调试完成之后可以把图形组合选中点图库菜单里的“存图库”下次做同类画面直接调出来用。做第二个项目的时候效率会快很多。4.3 变量定义和S7-200通信配置组态王里的变量分内存变量和I/O变量。内存变量只在组态王内部使用I/O变量则要和PLC实时交换数据。配料系统里配方设定值、下发启动指令、读取实际重量、读取设备状态这些都是I/O变量。S7-200和组态王通信我推荐用OPC方式先装好S7-200 PC Access这个OPC服务器软件在PC Access里建好PLC连接定义好要访问的寄存器然后在组态王的工程浏览器里“设备”列表中添加OPC服务器选到S7200.OPCServer再在变量定义时把“连接设备”指向这个OPC服务器。用OPC方式比组态王直接走PPI驱动要稳定。实际调试中我发现PPI直接驱动在通信量大的时候容易偶尔掉线OPC方式则好很多而且PC Access里能看得见通信状态排查问题非常方便。要注意的是PC Access和Micro/WIN软件不能同时占用同一个通信端口调试时要关掉Micro/WIN的通信连接。连接建立后变量地址要和PLC程序里的一致。比如PLC里实际重量存放在VD200组态王变量“1#实际重量”的连接设备选OPC服务器数据类型选FLOAT寄存器地址写VD200通信方向选读写。数据类型一定要对应上S7-200的VD是32位浮点组态王里选Float选错类型读出来就是天书一样的乱值。4.4 配方下发、报警显示和实时趋势曲线组态王的配方功能有两种做法。一种是用组态王自带的配方组件把配方数据存在上位机里下发时一次性写进PLC。另一种简单直接在画面上做几个输入框操作工直接输入每种原料的目标重量点“下发配方”按钮把这些值依次写入PLC的配方寄存器。我比较推荐第二种因为操作工逻辑更清晰改配方就像填表格不容易搞混。做一个配方画面列出六种原料的输入框旁边放“下发配方”、“读取当前配方”、“确认启动”三个按钮。点“下发配方”时组态王脚本把画面上的内存变量值赋给对应的I/O变量PLC收到新配方值后存入数据块。报警显示用组态王的报警窗口控件。PLC把断料、堵料、超差、急停这些状态都做成一个报警变量可以是一个字节的各位组态王里对每个位关联一条报警配置触发时报警窗口显示并记录。历史趋势曲线用“历史趋势曲线”控件选择要记录的重量变量、变频器频率变量运行时可以查看任意一段时间的数据曲线这个是事后分析称重波动最有力的工具。5. 通信调试实录变量不刷新和偶发掉线的排查5.1 通信参数匹配的全链条检查每次做S7-200和组态王通信我都会遇到“上位机变量不刷新”的求助。这类问题90%出在参数不匹配而且是一个链条上的好几个环节都要对上PLC侧的通信端口参数站号、波特率。S7-200默认站号是2波特率是9.6kbpsPC Access里的PG/PC接口参数必须选择正确的通信硬件如PC/PPI电缆波特率要和PLC一致组态王OPC服务器连接配置读取的寄存器地址要和PC Access里定义的完全一致。排查顺序我建议从最底层往上走先用Micro/WIN测试能否在线监控PLC。如果Micro/WIN都连不上那就是电缆、接口、PLC站号的问题和组态王没关系。Micro/WIN能连上再打开PC Access新建变量测试通信PC Access显示质量指标为“好”再去看组态王。这就像查水管哪里堵了从源头逐段排查效率最高。5.2 组态王变量闪烁和偶发掉线怎么定位变量不刷新还有一个表现画面上的数字一会儿有值一会儿变“####”或者显示“设备失败”。这种情况是组态王和OPC服务器之间通信中断后又恢复来回闪。经验判断偶发掉线的原因通常有三个一是通信端口被其他软件占用比如Micro/WIN还开着在线监控占着PPI口组态王就抢不到通信资源。解决方法是调试期间不要两个软件同时开着通信。二是通信数据量太大PPI口忙不过来。组态王画面上的I/O变量如果太多而且刷新频率设得很高比如100毫秒刷新一次通信周期内排不过来就会超时。解决办法是非关键变量刷新频率降到500毫秒或1秒关键重量变量单独设短周期。生产画面没必要所有数字都实时跳重点是趋势和状态。三是OPC服务器里的通信超时设置。PC Access的通信超时时间我习惯调到2000毫秒以上S7-200响应慢超时时间太短容易误判为掉线。还有一个容易被忽略的坑S7-200的通信口同时被编程口和组态王使用时如果程序启用了“数据块写保护”或者PLC程序本身有访问冲突也会导致通信异常。我曾经为这个问题折腾了一整个下午最后发现是PLC程序里有个子程序在不停读写同一个V区地址导致通信和程序冲突。解决办法是程序扫描周期内避免频繁重复占用同样的通信缓冲区。5.3 上电自恢复和看门狗设计做项目最怕什么晚上断电第二天早上PLC和上位机状态不一致操作工不知道按哪个按钮现场一片乱。所以我习惯在程序里加入上电初始化和通信看门狗逻辑。上电初始化PLC上电后所有输出点先强制复位所有状态机寄存器清零然后延时3秒再允许自动逻辑运行。这样即使PLC刚上电瞬间出现信号抖动也不会导致设备误动作。通信看门狗PLC程序里做一个1秒自增的寄存器只要PLC在运行这个值就持续变化。组态王画面脚本里定时读取这个寄存器如果超过5秒没变化说明PLC可能死机或通信断了画面上弹出一个明显的报警同时把相关操作按钮置灰防止操作工在通信断开的状况下盲操作。这个设计成本极低但能避免很多生产事故。我们这套系统投运后的第一次夜间断电第二天早上操作工就是靠这个看门狗画面确认了通信状态然后再放心启动的。6. 试车结果和现场运营细节6.1 试产精度数据和节拍对比系统调试完成后做了两天试产验证。连续生产了80个批次每批六种原料总重量在100公斤到300公斤之间。数据统计下来单种原料的称量误差基本都在±0.3%以内大部分批次甚至能做到±0.1%。对比原来人工配料的±2%误差可以说提升非常明显。效率上也直观。原来一个批次从称量到投料大概需要12分钟自动系统稳定后一个批次只需要6到7分钟而且两个人减少到一个人值守。操作工的主要工作从“称料”变成了“看着画面、处理报警”劳动强度明显下降老板最关心的“这个月用了多少原料”也能从组态王的历史报表里直接导出来账目清清楚楚。6.2 操作工最关心的两个点防错和易改配方项目验收之后我特意问了操作工的使用感受。他们最在乎的其实不是自动化率多高而是两个细节第一是防错。原来人工配料最怕加错料一袋料倒下去就是几百块的成本损失。自动系统里我给每个料仓都加了“物料代码确认”逻辑操作工在画面上选择当前料仓实际装的是什么物料PLC校验配方要求后才会运行对不上直接报警不允许启动。这一个功能操作工觉得比省力气更重要。第二是改配方容易。他们原来改一次配方要重新算比例、改磅秤、做记录现在直接在配方画面里改数字、点下发一分钟搞定。我还把配方权限分了两级普通操作工只能调用配方不能修改配方参数技术人员登录后才允许修改配方并写入。避免了操作工不小心把配方数值改错的情况。6.3 这套方案的可复制性和扩展方向这个项目的经验后来在另一个小化工厂的配料线上也复用了。硬件结构基本一样只换了模拟量模块的规格和给料机构类型PLC程序框架没动组态王画面改了下原料标签一个多星期就跑通了。如果要扩展可以考虑的方向是把S7-200升级成S7-1200或S7-200 SMART以太网通信会比PPI快很多组态王也支持对应的TCP驱动或者把组态王的报警和历史数据接到管理系统的数据库里实现生产数据远程查看。但就这条线的规模来说S7-200加组态王的组合已经足够稳定可靠再往上升级边际收益不一定大。最后分享一个实际体会做自动配料项目真正花时间的往往不是编程和组态而是现场那些看起来不起眼的细节——给料机的机械结构顺不顺、料仓的架桥问题有没有解决、称重传感器的安装有没有受震动影响。PLC程序和组态王画面做得再漂亮这些机械和工艺问题不解决精度照样上不来。所以有人问我要不要换更高端的硬件时我的建议通常是先确认现场机械和仪表侧的底子打好了再考虑控制器和上位机升级顺序反了钱就白花了。