1. 这套系统的来龙去脉水泥厂称重到底难在哪1.1 散装水泥称重的现场恶战老张端着那个搪瓷缸子蹲在2号散装库底下的时候我就知道事情又不对劲了。水泥厂这种地方你说设备多先进那是给外人看的真正让老师傅血压飙升的永远是那几个老伙计——皮带秤、螺旋秤、散装计量秤三十年了还是那些面孔。尤其是散装水泥装车这一环车号一报、磅单选好老张那边的控制柜就开始闹脾气要么仪表显示“满怀”但车里没料要么螺旋铰刀刚转起来料流就断断续续再要么装到一半流量突然从每分钟1吨掉到300公斤蹲在车底下震得脑仁疼。说白了散装水泥在线称重系统要解决的就是三件事第一装车剂量要准允差最好控制在±1%以内差多了客户那边搅拌站直接拒签第二装车过程不能“半路断料”流量波动大了混凝土配比就乱套第三要能人为干预和记录谁装的车、装了多少吨、什么时候装的这些数据得留得住。而现实中大多数老线的问题恰恰出在这三件事上传感器信号漂、PLC程序里积分逻辑混乱、组态王画面数据跟现场实际对不上。今天我这套方案就是用S7-300 PLC做前置控制和数据运算配上组态王做操作员站监控彻底把散装水泥装车这套流程捋直了。核心思路其实不难难的是把每个环节的坑都提前找出来。如果你正在为厂里的老称重系统头大这套东西可以直接照着搭。1.2 为什么用S7-300和组态王而不是换套新仪表有人可能会说现在压力变送器、称重仪表一体化的方案多的是直接买台进口计量控制器自带PID闭环干嘛还要PLC自己算这个想法没错但你得看现场条件。水泥厂的老线情况普遍是控制室距离现场百米开外仪表安装在粉尘弥漫的库底夏天温度能到五十度雷雨天线路被感应过电压打是常事。这种情况下定位高端、集成度过高的一体化仪表一旦坏了整条装车线直接瘫掉办事处派人来最快也要两天。而S7-300这种老战士一是市场上存量极大随便一个自动化公司都有备件二是模块化结构CPU挂了换CPU通讯模块挂了换通讯模块不用整条推倒重来三是对环境适应性确实强抗震动、抗粉尘、电源适应性都久经考验。组态王这边也一样不是说它比别的组态软件强到哪里去而是它在国内水泥厂、化工厂的装机量太恐怖了几乎每个电工和仪表工都摸过它的接口。工程师站坏了从别人电脑倒个工程过来半小时就能跑起来。重要的是它的数据转发脚本、历史报表、报警推送能力足够应付散装称重这种典型场景不复杂但绝对够用。换句话说这套组合不图“最先进”只图“最不耽误生产”。从信号链路来说我会把整套系统分成三层现场仪表层、PLC控制层、组态监控层。现场仪表层承担重量信号采集PLC层负责积分、比较、阀门/螺旋输出控制组态王负责显示、记录、报告和人工置数。下面我把每一层怎么搭、怎么调、怎么避坑掰开揉碎讲一遍。2. 硬件搭建与称重信号链路别让信号死在第一公里2.1 称重模块和传感器的选型与安装散装水泥秤最常用的方案有三种一种是库底直接安装三个桥式称重传感器整个储料仓坐在传感器上第二种是料斗式计量秤颗粒物料先进入称量斗放料到设定值时停止第三种是皮带秤或者螺旋秤在输送过程中计流。散装水泥装车我优先推荐第三种结构——但前提是你能忍受它的标定麻烦。如果你家有足够的仓容空间第二种“料斗秤放散阀门”的结构其实更好控制因为它静态计量不受物料冲击影响精度最高。但是车间地面空间往往不够所以大多数老线还是改成螺旋输送加称重传感器做“动态在线计量”。选传感器的时候不要贪大。很多人喜欢选量程三吨五吨的觉得耐造结果小流量的时候信号变化特别小白白浪费了变送器精度。合理的做法是计算整罐或整斗满负载时的总重量包括设备自重、物料重量、附加振动再乘上1.2倍的冗余系数。比如装一辆30吨的散装水泥罐车你用20吨/小时的通过量配螺旋秤传感器总量程选50吨每个传感器额定15吨上下余量留足但不夸张。安装环节里的坑我见得多了给你几条硬性规矩第一传感器受力线必须垂直安装面必须磨平绝对不能用电焊把底板点焊在传感器弹性体附近不然焊接电流会损坏应变片第二传感器和上下连接板之间要用球面垫圈或者薄铜垫片消除侧向力第三每个传感器独立用屏蔽电缆引到仪表不要并联走线第四也是最容易忽略的——传感器电缆一定要做防水弯电缆下弯后再进接线盒否则夏天冷凝水顺着电缆往传感器里灌今天装好明天漂一晚上的例子比比皆是。2.2 从毫伏信号到PLC变送器与模块的三种接法传感器输出的是毫伏级信号一个典型的桥式传感器满量程输出在1mV/V左右激励电压10V时就是10mV这个信号别说传到100米外就算在机旁走3米噪声都可能比信号还大。所以无论如何不能把称重信号直接往PLC模拟量模块上送必须先经过变送器或称重仪表做前端放大。我做项目时常用三种接法各有取舍方案做法优点缺点A传感器-变送器4-20mA-PLC AI模块接线简单、通用性强、便宜变送器要单独标定线性度和温漂看质量B传感器-称重仪表-串口/以太网-PLCModbus RTU/TCP仪表内置标定和滤波数据稳定重量和流量都有接口对接稍麻烦仪表本身是个故障点C传感器-SIWAREK或称重模块ET200MRS422现场总线直接收原始数字量精度最高模块贵老工程师不熟工期长车间改造我一般推荐B方案因为你既保留了仪表的本地显示和标定功能又有通讯口给PLC送数据万一组态王挂了岗位工照旧能看仪表装车。具体实现上仪表选支持Modbus RTU的比如市面上常见的称重控制仪表把“瞬时重量”“累计重量”“流量”映射到寄存器表里PLC那边用USS或者Modbus主站模块轮询读取。读取周期设定500毫秒到1秒足够了太快了没有意义慢了你还能减少总线负载。2.3 供电与接地老张骂街的根源有一半在这老张蹲在控制柜前啃煎饼骂街九成情况不是PLC程序逻辑错了而是模拟量信号那个“鬼”在飘。散装秤最容易出现的故障就是画面上的重量数值像心电图一样上下跳螺旋开了十几秒了流量还是零偶尔还冒个大峰值。干仪表的都知道这种“灵异事件”你查程序查一天查不出问题拿万用表打到毫伏档去测传感器端子那就什么都清楚了——交流成分大得很热噪声一堆。接地和供电这块我总结了几条必须遵守的常识第一称重系统不能和变频器共用接地网。螺旋输送机、罗茨风机那些变频器一开地线上就有共模干扰直接蹿到传感器屏蔽层里。称重信号必须拉独立接地线接地电阻小于4欧姆而且接地点要和设备地分开。第二屏蔽线只能单端接地。很多人把屏蔽层两头焊到仪表端和传感器端壳子上结果形成一个地环路反而把感应噪声引进来。正确做法是传感器端屏蔽层悬空仪表这一端接大地。你可以在接线端子处把屏蔽层编成辫子压在接地铜排上。第三供电要单独拿一路净化电源。我们那阵子给老张的称重仪表专门配了个隔离变压器加UPS变频器启停的时候电压瞬间塌陷几百毫秒仪表没复位全靠这个。第四避雷器不能省。水泥厂库顶是接闪重点区域传感器电缆在室外走了一段路的话必须在进控制柜前加装信号防雷器而且防雷器接地要短而直别绕个圈再下地。3. PLC程序里的核心逻辑流量、累计与提前量3.1 S7-300的硬件组态与信号读取S7-300侧我用的配置很常规CPU选315-2PN/DP配上一个模拟量输入模块AI8x14位或者其他数字量混合模块机架用IM153做分布式IO或者索性就近放主架上。实际项目里CPU型号不重要关键在于程序结构说句实话315和314都够用313做这个也富余因为逻辑量真的不大核心代码也就是几百条指令的事。信号进入PLC后第一件事是量程转换。组态王传来的原始数是0到27648的整数对应4-20mA电流然后是0到传感器满量程的重量值。我会在OB100初始化里把仪表通讯的使能打开在OB35循环中断里做重量采集和PID式流量计算。为了保证数据平滑我在模拟量通道上加了数字滤波把最近50次读到的重量值求滑动平均。水泥冲击造成的瞬间振荡、绞龙转动带来的机械振动全被这个滤波吞掉了。但要注意滤波太狠了会导致响应滞后装车提前量就没法算。所以具体情况要现场调试螺栓仓位重、冲击强度大的库口滤波窗口设为150毫秒到200毫秒稳定的小仓口可以再放宽些。有一点必须提醒S7-300读写称重仪表Modbus寄存器千万要处理好超时和重试机制。现场总线偶发一次超时是正常的不能让重量瞬间掉到零。我写过一个小的“坏质量值保持”逻辑如果通讯故障重量保持上一周期的有效值同时报警禁止螺旋继续动作。3.2 瞬时流量和累计量到底怎么算在线称重系统里最核心的计算就两个瞬时流量和累积重量。说穿了就是微积分的数字版本。瞬时流量我用的方法是“差分法”。每500毫秒读一次当前重量用当前值减掉上次值再除以时间间隔就是这一段的瞬时流量。公式很简单F (W - W_prev) / dt其中W是当前实测重量kgW_prev是上一周期重量dt是采样周期小时。比如500毫秒采一次dt就是0.5秒换算成小时是0.0001389小时。假如两次读数差是10公斤瞬时流量就是10/0.0001389 ≈ 72000公斤/小时也就是每小时72吨。这种算法见效快、调试直观但缺陷在于重量信号一波动流量值就跟着上蹿下跳。所以我加了中值滤波在滤波队列里取三个连续样本丢掉最大最小取中间值参与计算。这样既保留了动态响应又把毛刺削干净了。对于累计量用梯形算法即可每周期把当前瞬时流量上一周期瞬时流量除以2乘以dt累加到累计寄存里注意数据类型用双整数不然一堆到几百万公斤就要溢出报警。3.3 定值装车的“鬼门关”提前量公式散装水泥装车一般是PLC设定目标重量比如40吨然后自动开螺旋等到实际重量接近目标值的时候提前把螺旋停掉或者大幅降速。因为螺旋从停止信号发出到真正停止旋转还有一段“惯性期”——输送里的余料会继续落进车里。这段惯性量就是常说的“提前量”定不准的话一车水泥要么多装半吨要么少装三百公斤Tag错超差就要返厂重过磅。提前量的工程经验公式可以写成Q_stop F_current × t_react Q_offset其中F_current是当前瞬时流量t_react是系统响应时间常数包括PLC扫描周期、螺旋继电器动作时间、机械制动时间合起来大概在1.5秒到3秒之间。Q_offset是修正余量跟物料流动性和螺旋绞龙结构有关。以流量30吨/小时也就是8.3公斤/秒来算响应时间2秒提前量约17公斤加上修正余量5到10公斤总预停值大概在25公斤左右。第一次设置的时候你不必追求精确保守一点没错宁可提前多停一点再留一个“点动补仓”按钮让操作工看到还差几十公斤时手动点动螺旋两三秒一次把余量补齐。跑几车以后统计一下实装和设定间的平均偏差反过来修正Q_offset。老张那套系统我们最后把预停值调到32公斤连续10车最大超差也就0.3%装车效率大大提高骂街自然就少了。3.4 联锁保护逻辑关键时刻能救命别把软件想得太玄乎真正保命的往往是几个简单的联锁逻辑。我做了三层保护第一层是上下限联锁。重量信号超过传感器量程的105%或者低于零点负值立刻禁止螺旋启动第二层是装车中断联锁。如果料位计反馈或者闸板到位信号异常强制停螺旋和关闭卸料阀第三层是操作面板急停这个按钮直接在PLC输入点不经过任何通讯链路物理上硬线切断主接触器。另外我在程序里设了一个“流量渐升”功能螺旋启动时不立刻开到最大阀门开度而是按照每秒5%的速度缓慢增加开度到90%后锁定。因为散装水泥下料有个典型现象料柱冲击磅秤使读数突变瞬间流量尖峰动辄超过实际值30%你去跟这个假流量闭环反而会引起阀门抖个不停。有了渐升功能系统能从源头上压低冲击扰动。4. 组态王监控画面从控制柜到值班室的最后一公里4.1 组态王与S7-300的通讯配置组态王连S7-300多数情况下用的是S7-200/300 TCP驱动直接从网口抓数据。硬件上PLC侧加一块CP343-1以太网模块或者CPU自带PN口IP地址规划好比如PLC是192.168.1.10组态王电脑设192.168.1.20两者在同一个网段中。需要注意工控网最好独立交换机和办公网物理隔离避免病毒和广播风暴干扰——某水泥厂把组态王挂在公司办公网上结果财务室一台感染挖矿病毒的电脑把整个网段占了画面卡成幻灯片装车数据都刷不出来。变量建立这一步是关键。最好在PLC里提前把所有需要监控的变量汇总成一个UDT结构或者一个自定义数据块像DB100.DBW0是实时重量DB100.DBD2是瞬时流量DB100.DBD6是累计重量DB100.DBX0.0是运行状态位。组态王这边对应新建变量类型选“离散型”还是“模拟量”访问名称填DB块地址数据类型频率要对应。记得把组态王的采集周期设成500毫秒到1秒不要用100毫秒——太快的刷新除了累死CPU和网卡对操作工没有意义。4.2 画面布局让老张一眼看明白操作画面我从来不喜欢堆太多数字。老张要看的无非三样现在装到多少吨了、还剩多少吨、螺旋开了没有。画面顶部是装车信息栏显示当前车牌号、目标吨数、已装吨数、剩余吨数用大字号粗体标出来深呼吸都能看清中间是模拟流程图画一个螺旋输送机和散装罐车用颜色区分状态绿灯表示允许装车黄灯表示装车中红灯闪烁表示故障底下是操作区放“目标设定”输入框、“自动/手动切换”开关、“螺旋启动/停止”按钮、“点动补料”按钮。还有一个东西特别重要——趋势曲线窗口。组态王自带的实时趋势图控件放在角落里显示最近半小时的瞬时流量和重量曲线。老张一看曲线就知道料流稳不稳绿色的是重量上升线平缓均匀就说明系统正常锯齿形抖动说明称重信号有干扰直接按我前面讲的去查接地和屏蔽。4.3 报表、报警和掉线保护水泥厂装车数据是要交台账的所以组态王的报表功能得用好。我用的是“数据改变存库”的方式每当累计重量完成一次装车装了35吨且螺旋停止就把当前累计值、目标值、操作员姓名、装车编号、时间戳记录成一整行写入Access或SQL Server数据库。这样月底盘点的时候谁装了多少车一查就能拉出来。报警这一块我设了三条重量信号超范围报警、流量波动过大报警、通讯掉线报警。报警页面上不搞花活就按“时间、等级、变量名、描述、确认人”排开。唯一要注意的是报警确认要记录操作工工号厂里查责任的时候这个是证据。掉线保护更要命。一旦PLC程序停止或者网线被砸断组态王画面上的数据会冻结看起来一切正常实际现场可能早就停了。我在脚本里加了一段心跳检测每10秒读一次PLC里的时钟变量如果连续3次没更新自动弹窗“与PLC通讯中断可能影响生产”并且把启动按钮置灰防止操作工盲动。这个保险看起来笨但真救过场。5. 常见故障排查实录那些年我们排过的幺蛾子5.1 重量漂移零点怎么越跑越远典型的故障画面夜里两点散装水泥开始装车系统显示车内重量不断上涨可空车重量却从0飘到了1.2吨。你让老张去复位仪表复位完好了几分钟又飘回去。这种对零漂移的原因大概率是机械的不是电路。螺旋绞龙转动时物料在螺旋管里不均匀分布重心会来回偏传感器受力随之变化。我碰到过最离谱的一次是库顶近三千吨水泥压下去库根部的锥形料仓受热膨胀把传感器底座顶斜了造成固定力变浮力零点漂到天上。解决办法一是增加传感器限位挡块限制水平位移二是定期每月清一次传感器周围的积灰积灰多了相当于垫了个软垫子受力曲线自然就歪了。5.2 瞬时流量和累计量对不上流量累计量对不上也是常客。瞬时流量是差分的累计量是积分的理论上两种算法应该同向变化但如果你发现累计量在螺旋停止后还在涨赶紧查是不是PLC程序里面把“累计”和“瞬时流量积分”塞进了同一个OB里面导致循环扫描时把上一周期的瞬时流量又算了一遍。另外一个常见陷阱是组态王画面上显示的累计量和PLC里的累计量不一致。根源往往在数据类型转换上。PLC里累计量是32位双整数最大到42亿多公斤单精度实数的精度只有7位左右超过100万公斤以后组态王读出来数就不准了。解决办法很简单要么用浮点双精度变量要么把累计量拆成“吨”单位读数缩小1000倍再传给组态王画面显示就干净了。5.3 通讯掉站画面时断时续通讯掉站这事十个里有七个是网线接头松动两个是交换机端口坏了还有一个是IP地址冲突。水泥厂控制柜里震动大RJ45端子插头氧化失效半年没人管太正常了。我后来一律把PLC侧到交换机侧的连接换成了工业级M12螺纹锁紧接头从此没再返修过。如果是Modbus串口通讯还要注意波特率和校验位匹配。仪表设9600、8、N、1PLC那头设19200那肯定连不上。测试的时候不用急着开组态王先在PLC程序里读一次看看有没有有效数据再逐步排查仪表、电缆、接口。5.4 定量装车误差忽大忽小误差不稳定不要先怀疑PLC先去看料口是不是堵了。散装水泥有时会结块虽然不至于完全堵死但会造成下料速度不均匀流量一会儿大一会儿小提前量自然不准。料口锥部加入料位检测或者干脆加个助流气垫能解决大部分问题。误差如果是“固定偏大”或者“固定偏小”那多半是提前量设置不对。这时候别靠感觉调拉出最近20车的实装值和设定值算平均值和标准差。平均值偏正200公斤就把Q_offset往下调200公斤标准差太大说明流量波动先稳定料流再谈精度。5.5 故障速查表故障现象可能原因处理措施重量值剧烈波动传感器屏蔽未接或接地环路检查屏蔽单端接地、电源隔离零点漂移传感器机械受力变动、积灰清理灰料、检查限位块瞬时流量大幅跳动信号滤波参数过小加大滤波窗口换中值滤波累计量在停机状态仍增长积分逻辑在不需要的OB里执行加上螺旋运行状态做积分使能组态王与PLC通讯间歇中断网线松动、IP冲突、交换机电口故障换M12接头、检查配置装车误差固定偏大/偏小提前量参数不合适统计均值偏差修正Q_offset通讯正常但画面数据不动变量地址不对、数据类型错误核对DB地址和类型映射6. 最后再分享一点老张教我的事这个系统投运以后最让我感慨的不是那些代码和画面而是工业系统的“容忍度”。你可以在办公室把工况推演得完美无缺但到了现场总会有灰尘、振动、电缆老化、材料疲劳这些教科书里不写的东西来挑战你的设计。所以我后来做任何自动化项目都习惯性地留一手多留一个备用通道多留一个手动操作按钮多写一段掉线保护逻辑。老张后来跟我说他那套系统再也没让他半夜爬起来跟车对账。但我猜他心里一直记着的是我们有一次把现场传感器换个位置重新标定标了整整六个小时最后他就蹲在我旁边递给我一半煎饼说“原来这东西也能这么老实”。技术上能解决的问题都不是真正的难题真正难得的是让一线的师傅们愿意信你、愿意按你做的去操作。这套S7-300加组态王的称重系统给了我一个很好的答案。如果你也在折腾类似的老线改造希望这份记录能帮你少走几段弯路。