ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

西门子PLC与组态王水泥搅拌站自动配料系统设计与调试

西门子PLC与组态王水泥搅拌站自动配料系统设计与调试 做完整套水泥搅拌站的自动配料改造之后很多做工艺和做设备的朋友都来问我西门子PLC配上组态王这套组合到底是怎么把水泥、砂石、粉煤灰这些料按配方精确称出来的说实话自动配料系统本身不算什么新鲜东西但把它用在水泥混凝土生产这种多物料、多秤斗、强粉尘、高振动的现场还是有不少门道。这篇文章我就以自己最近交付的一个搅拌楼配料系统为例子从系统架构、硬件选型、PLC程序逻辑、组态王画面组态一直聊到现场联调遇到的坑完整拆一遍这套西门子PLC与组态王联合设计的自动配料系统。这套系统解决的问题很明确水泥混凝土生产中的多种原料按配方比例自动称量、自动投料、自动记录同时让操作员在控制室里就能看到每一秤的实时重量、设备状态和历史曲线。适合正在做配料系统项目、搅拌站自动化改造或者刚入门想搞懂PLC加上位机组态怎么配合的朋友参考。1. 系统整体设计思路配料这件事本质上是闭环计量1.1 水泥配料要解决的核心问题水泥混凝土配料看起来简单就是把几种料按比例称出来倒进搅拌机实际拆开看核心问题有三个。第一个是配方可配置。同一个搅拌站今天可能生产C30明天生产C50砂、石、水泥、粉煤灰、矿粉、外加剂、水的比例全不一样。系统必须能让工艺员在上位机直接改配方而不是每次去改PLC程序。第二个是称量精确且可重复。配料秤是动态称重料流在往下掉秤斗里的重量一直在变什么时候该从快加切换到慢加、什么时候该发停止命令既要稳又要准重复性还得一致。第三个是过程可视、可控、可追溯。现场设备那么多料仓缺不缺料、哪台秤正在配料、这批料实际称了多少操作员和班长都得一眼看到并且每一批的数据要能留档出问题能查。围绕这三个问题我用的是最常见的两层架构加一个现场设备层也就是下位机PLC负责实时控制和计量上位机组态王负责监视、操作和记录中间通过以太网通讯连起来。这个方案的优势在于稳定和好维护PLC负责的逻辑不出画面就不会瘫痪组态王死机了系统还能按原配方继续跑。1.2 三层结构设备层、控制层、监控层设备层就是那些真正的执行和检测元件——称重传感器、变频器、螺旋输送机、卸料门气缸、料位计、振动器。这些元件分布在地面料仓、计量层和搅拌机周边粉尘大振动强选型一定要皮实。控制层用的是西门子S7系列PLC。我这次项目用的是S7-1200CPU 1214C加模拟量模块和通讯模块放在现场电控柜里直接采集重量信号控制电机和气缸同时把数据通过以太网送给上位机。控制层是整个系统的核心配料时序、飞料补偿、联锁保护全在这一层完成就算上位机掉线PLC自己也能独立完成整个配料流程。监控层用组态王运行在控制室电脑上负责配方下发、实时画面、趋势曲线、报表打印和故障报警。很多人纠结为什么不用西门子的WinCC我的考虑很实际组态王在中小型搅拌站项目里普及率高做报表和中文化界面方便授权成本也友好而且现场维护的电气人员大多都碰过组态王后期改画面、加变量不用厂商专门培训。WinCC当然也能做但在这个项目体量和预算下组态王更合适。1.3 PLC型号和组态王版本的选型思路选型这块我给出一个参考思路。如果配料秤不超过4台、点数在100点左右S7-1200完全够用性价比也最好。如果秤多、设备多比如有6台秤加几十个料位信号直接上S7-1500运算速度和通讯能力都余量更大。老项目里S7-300还在服役的也很多只是新设计我不建议再用了。组态王我用的是6.55以上版本太老的版本在新系统上跑容易出兼容问题尤其是Win10和Win11环境下建议能上新版就上新版。2. 硬件选型与信号链路先把秤准和驱动搞定2.1 称重传感器、变送器与PLC模拟量通道配料称重的第一个硬件环节是称重传感器。水泥混凝土配料秤一般是每个秤斗用三只传感器均布在斗体下方三只传感器的信号并联汇入称重变送器。传感器量程选择有个经验值秤的额定称量乘以1.5到2倍例如一秤要称3000公斤骨料三只传感器每只选2吨或者3吨量程避免超载损坏。变送器是信号链路的第二个环节把传感器的毫伏信号转成标准4到20毫安电流再进PLC模拟量模块。我在这个项目里用的变送器支持多点标定现场用标准砝码做两点标定一边标定一边在组态王画面上盯着数值误差控制在±0.2%之内。从4到20毫安到PLC工程量很多新手在这里容易被原始数值搞晕。以西门子1200的模拟量输入模块为例选择4到20毫安量程后模块内部原始值0对应4毫安27648对应20毫安。假设秤量程为3000公斤那么实际重量可以用一个很简单的比例算出来实际重量 原始值 / 27648 × 3000这段逻辑在PLC里可以用SCL一行写完或者直接用工艺对象的缩放指令。需要提醒的是每个秤的模拟量通道都要单独校准不要指望所有通道完全一致仪表和模块通道本身就有离散误差。信号链路还有两个容易忽略的细节。第一称重信号线必须用屏蔽电缆屏蔽层在PLC柜一侧单端接地另一端悬空第二变送器供电尽量用隔离的24V电源不要和接触器、变频器共用一回路。我在现场处理过好几次称重漂移最后查下来都是电源干扰或者屏蔽层两端都接地形成地环路这类问题排查起来非常耗时间。2.2 变频器与给料电机的连接ABB变频器与西门子PLC的Modbus RTU配料系统的精度一半靠秤另一半靠给料设备的控制能力。螺旋输送机、皮带机给料时如果只能一个速度跑到底那配料精度很难做好因为快加阶段和精加阶段需要的料流速度不同。所以给料电机我配了变频器通过改变频率实现快速给料和慢速给料两档速度。这次项目用ABB变频器驱动螺旋给料机PLC通过Modbus RTU方式和变频器通讯。接线很简单S7-1200加一块CM1241 RS485通讯模块用屏蔽双绞线连变频器端子。两者通讯参数必须完全一致变频器站号设为1波特率9600数据位8停止位1无校验。PLC这边用Modbus通讯指令先调用通讯加载指令初始化端口再周期调用主站读写指令。频率给定一般写到保持寄存器40001控制字写到40002实际频率从输入寄存器读回。这里有个常见的坑Modbus的寄存器编号和协议里的地址偏移量差1很多新手直接写40001实际指令参数却用的是0结果怎么都写不进去。ABB变频器还需要先设置控制源为通讯否则即使Modbus通讯正常频率指令也不生效。我实际操作下来的经验是给料变频器的控制周期放在500毫秒到1秒就足够了不用每次扫描周期都去写频率。频繁写通讯指令反而会增加总线负荷甚至导致通讯偶发超时。控制周期降低一些稳定性反而好。2.3 执行机构与料位检测配料系统里除了给料设备还有卸料门、振动器和料位计这些基础元件。卸料门我用的带磁性开关的气缸开到位和关到位都有反馈信号PLC里做联锁门没关到位时禁止开始下一种料的配给。这个看起来多余实际很重要因为一旦门没关严就开始配料秤斗里的料会漏掉整个批次都废了。振动器的作用是破拱。粉煤灰、矿粉这类细粉料流动性差料仓里很容易搭桥料流突然断掉或者突然涌下一大块对配料精度影响极大。程序里我做了联动逻辑给料电机运行期间如果检测到重量长时间不变化自动启动振动器振动几秒钟把搭桥的料震下来。这个逻辑大大减少了人工干预的次数。料位计我用的是阻旋式和雷达式两种搭配仓顶装雷达连续料位高位和低位用阻旋开关做报警信号进PLC后上传到组态王画面班组长在控制室就能看到哪个仓快没料了提前安排上料。3. PLC程序设计配料逻辑是整台设备的大脑3.1 手动、半自动、自动三种运行模式PLC程序我把运行模式分成三档这也是调试和生产的实际需要。手动模式用于单机调试和检修。操作员在组态王画面上直接点哪个设备启停哪个设备PLC不做连锁只做必要的保护。比如卸料门手动开、给料机手动启这个模式下特别适合换电机、换传感器之后验证接线。半自动模式用于单秤校验。操作员选定某一台秤设定目标重量PLC自动完成这一台秤的快加、慢加、停止流程但不自动卸料。这个模式在标定秤、测试落差值时非常有用我调参数时基本上都是在这个模式下反复试的。自动模式是正常生产模式。工艺员先在组态王上选定配方号按下启动PLC就按顺序把各种料依次称量、依次卸料全部完成后自动进入下一批次。自动模式下还分连续生产还是单批次生产这个由组态王上的一个开关决定。模式切换有个原则只能在系统处于待机状态时切换生产中禁止切换。我在程序里做了互锁防止误操作导致配料流程中断。3.2 配料状态机快加→精加→停止→卸料单一物料的配料流程本质上是一个状态机。我在功能块里用整数变量代表当前步骤每台秤一个独立的功能块实例这样写几个秤就是复制几个实例不用每个秤都重新写一遍逻辑。以水泥秤为例目标重量500公斤状态步骤如下第一步待机状态等待配方启动。第二步快加状态变频器全速运行螺旋给料机大流量给料当秤重值接近目标值的某个比例时切换。第三步精加状态变频器降到低速用小流量慢慢凑数直到重量到达“停止提前量”的位置立刻发停止命令。第四步等待稳定停料后料流和秤斗都还在晃动程序延时1到2秒等重量读数稳定。第五步判断合格把稳定后的实际重量和配方目标比较在允许偏差范围内就判定合格否则出超差报警。第六步卸料开卸料门等门开到位反馈重量接近空秤时再关。这套状态机组态王上显示的就是“该秤正在快加/精加/卸料”等状态文字。操作员看着画面就能知道现在走到哪一步了对接班人员特别友好。3.3 飞料补偿与落差值自动修正配料精度最大的敌人是“落差值”。这个词听上去玄乎其实就是从发出停止命令到料流完全停下来这段时间里继续掉进秤斗的料。这部分料是收不住的只能提前预判。我常用的做法是自动落差值自学习。假设目标重量是500公斤PLC在重量到达493公斤时发停止命令料流惯性又落了7公斤最终实际重量正好500公斤那么这个7公斤就是当前的落差值。下一批可能因为料流变化实际停在了505公斤偏差5公斤说明这次落差值变成了12公斤于是程序自动把落差值从7修正到8或者9逐步逼近真实情况。修正算法的表达式类似加权平均新落差值 旧落差值 修正系数 × (本次实际偏差 - 旧落差值)修正系数取0.2到0.3太小收敛慢太大会被单次随机波动带偏。每次配料结束后这个值自动更新保存在PLC的保持性数据块里断电也不会丢。自动补偿虽然好用但有两个边界情况要注意一是落差值要限幅不能无限修正比如最大50公斤超过这个幅度宁可按固定值来防止补偿算法在小概率异常数据下发散二是换料种时要重新观察砂石和粉煤灰的落差值差别很大配方切换后先跑几批手动批次观察一下别直接上自动。3.4 配方管理与数据记录配方数据我放在PLC的DB块里结构大概是这样的配料序号 | 物料名称 | 目标值(kg) | 快切慢值(kg) | 停止提前量(kg) | 偏差上限(kg) 1 | 砂 | 800 | 760 | 10 | 16 2 | 石 | 1100 | 1045 | 14 | 22 3 | 水泥 | 500 | 475 | 7 | 10 4 | 粉煤灰 | 100 | 92 | 3 | 2.5组态王配方画面做的操作是操作员输入配方号和各物料的目标值点“下发配方”按钮数据就写入PLC对应的DB块。PLC运行时只认当前配方区的数值不下发就不改变防止误操作。另外每批生产数据我都做了记录批次号、时间、每种料的实际称量值、最终偏差。数据存在PLC的大数据块里组态王定时读取并写进Access数据库月底导Excel做统计分析。有了这些数据你和工艺员讨论配比问题时就有据可依不用靠猜。编程语言方面我给新手一个建议。S7-1200上用LAD梯形图起步是最直观的继电器逻辑看得懂联锁关系一目了然。复杂算法比如落差值自学习、浮点数运算用SCL写几个功能块就好没必要全用梯形图硬写也别全用SCL后面维护的人看着会头疼。4. 组态王上位机设计从通讯配置到画面组态4.1 组态王与S7-1200/1500的通讯搭建组态王和PLC通讯本质上是一个客户端去读西门子的数据区。这次用的是S7-TCP驱动走以太网。配置分三步。第一步是PLC侧准备。S7-1200上需要把CPU的属性里的“允许来自远程对象的PUT/GET通讯访问”勾上否则组态王读不到数据。同时把PLC的IP地址设在和上位机同一个网段比如上位机192.168.0.10PLC就设192.168.0.20子网掩码一致。第二步是组态王侧添加设备。在组态王的工程浏览器里新建设备驱动选S7-TCP填PLC的IP地址。设备地址格式一般要按驱动说明写有些版本还要带上机架号和槽号S7-1200通常是0和1S7-1500一般是0和1或者根据硬件组态调整。这一块没统一标准以驱动帮助文档为准我以前就吃过这个亏照着网上随便搜的格式填结果设备状态一直显示初始化失败。第三步是定义变量。组态王里的I/O离散变量对应PLC的位变量I/O实数对应DB块里的浮点数。建变量时地址填写一定要和PLC的数据块绝对地址对应上比如DB1.DBD4表示数据块1的第4字节偏移开始的浮点数。S7-1200的DB里变量偏移地址可以在TIA软件里直接查看对不上的话数值读出来就是乱的。下面是个简单的变量对应表大家可以参考组态王变量 | PLC地址 | 类型 | 说明 配料启动按钮 | M0.0 | I/O离散 | 写 当前配方号 | DB1.DBW0 | I/O整数 | 读写 1号秤实时重量 | DB1.DBD4 | I/O实数 | 读 1号秤状态字 | DB1.DBW12 | I/O整数 | 读 1号秤目标值 | DB1.DBD20 | I/O实数 | 读写变量刷新周期我一般设500毫秒画面显示完全流畅也不会给PLC通讯带来压力。设成100毫秒以下对画面没什么肉眼提升反而容易造成通讯阻塞。4.2 画面设计与动态连接组态王的画面我分成六个页面主工艺流程画面、配料监控画面、配方管理画面、报警记录画面、历史趋势画面、报表画面。主画面画的是从料仓到配料秤再到搅拌机的工艺流程图料位高度用填充效果动态显示电机运行时图形变色加旋转效果卸料门开关也有对应的动画。操作员不用跑现场也能知道整个系统当前的状态。配方管理画面有配方号选择、各种物料目标值输入框、下发按钮和读取按钮。这里要特别注意“下发配方”操作一定要做二次确认弹窗防止操作员鼠标一抖把正在生产的配方改掉了。我遇到过操作员在配料过程中误触下发按钮导致当前批次全部重新按新配方执行最后那批料全报废了。报警画面的作用不是光显示几条文字而是要能帮人快速定位问题。我把报警分成两级一级是设备故障比如电机过载、门反馈丢失这类报警必须停流程并声音提醒二级是提示信息比如某个仓低料位、某秤偏差偏大只提醒不中断。这样操作员不至于被报警淹死。4.3 常见的“组态王创建协议组件失败”类问题排查用组态王的人基本都会撞到这类报错新建协议组件时提示失败。我遇到的和朋友问到的归纳起来有这么几个典型原因。一是驱动组件没装好或者被杀毒软件隔离了。组态王安装好后驱动文件在安装目录下的驱动文件夹里有些杀毒软件会把关键DLL文件隔离导致新建协议组件时找不到文件。排查办法是先看设备列表里能不能找到对应的驱动找不到就重新安装组件并把组态王程序目录加入杀毒软件信任区。二是软件版本和系统不兼容。老版本的组态王运行在Win7上很稳换到Win10上就各种创建失败多半是权限或者兼容性问题。右键以管理员身份运行属性里设置兼容模式都能解决一部分问题。三是设备地址格式不对。新建设备时地址填错比如S7-1200的机架号槽号填错组态王会反复初始化设备表现也像“协议组件失败”。我的排查顺序是先清理设备重建再检查系统日志和DLL是否正常注册最后核对协议格式和PLC侧的PUT/GET设置基本上90%的问题都能在这几步里解决。5. 系统联调、精度分析与问题排查实录5.1 先静态校准再动态联调系统调试我坚持一个原则先静态后动态先单机后联动。静态阶段先把每台秤的零点和量程标定好。空秤状态下在PLC程序里做一次去皮清零再放标准砝码或者挂标准重量观测模拟量原始值和显示重量是否一致不一致就调整变送器的标定点。每个秤标完还要重复性测试放砝码拿掉再放看回零和复现情况。单机阶段逐个设备手动启停确认电机转向、气缸开闭方向、反馈信号是否正常。这个环节不能图快每一个接线错误都要在这个阶段抓出来否则联动以后出了问题非常难查。动态阶段才把通讯连起来先在前几步确认PLC本体逻辑正确再开组态王画面看数据是否刷新正常。我在这个项目里发现的通讯问题大多出在变量地址错误或者PLC侧PUT/GET设置没保存生效上一旦确认地址无误刷新都非常稳定。5.2 配料精度分析从偏差数据反推原因要判断配料精度好不好不能只看一两批数据我一般连续观察十批以上把每批的终值偏差按物料分别统计。偏差有三种典型形态。第一种是系统性超差这批料每次都多称或者每次都少称偏差方向一致、大小接近这种情况几乎可以断定是落差值设定不合适。多称就把停止提前量调大少称就调小。第二种是随机波动大有时多有时少偏差方向和大小的规律性不强这往往是料流不稳定比如细粉料搭桥导致瞬间涌料优先检查振动器联动和料仓出料口有没有堵塞。第三种是称重信号本身跳动大静止状态下称重数值都在持续跳动那就不是配料逻辑问题而是干扰问题重点查屏蔽、接地和供电。我调试时会在组态王上拉历史曲线看精加阶段的停止点曲线会清楚地显示重量从快速上升转为缓慢爬升、最后突然走平的整个过程。通过曲线能看出来快切慢切换得是否太早或太晚停止点是否离目标值有足够的提前量。5.3 常见故障速查表现场运行一段时间后我把遇到过的典型问题整理成了下面的速查表故障现象 | 可能原因 | 处理办法 称重数值缓慢漂移 | 传感器受潮、接线端子氧化、屏蔽层未单端接地 | 检查传感器密封重做接地清洁端子 配料终值系统性超差 | 落差值未收敛或配方更换后未重新标定 | 观察连续批次手动修正停止提前量 组态王通讯时断时续 | 网线屏蔽差、刷新周期过短、驱动版本不匹配 | 更换屏蔽网线调长刷新周期更新驱动 快加切慢加时机不准 | 快切慢重量设置错误或模拟量滤波过强 | 重新设定切值整定模拟量滤波系数 卸料门关不到位报警 | 气压不足、磁性开关松动、门体卡料 | 检查气源压力重新固定开关清理门体 细粉料不下料 | 料仓搭桥 | 启用振动器联动破拱逻辑必要时加装助流器 PLC和组态王数值对不上 | 数据类型不匹配或DB地址偏移错误 | 核对TIA里的变量偏移地址和组态王地址这张表我建议做项目的朋友直接打印出来贴在电控柜里操作人员照着排查能解决一大半日常故障。6. 系统整合与扩展这层功夫决定项目上限6.1 Profinet与第三方设备通讯以PLC和安川机器人地址映射为例配料系统往往不是孤立存在的搅拌站现在越做越智能后面可能要接码垛机器人、自动插袋机、AGV小车。很多朋友问过西门子PLC和安川机器人用Profinet通讯时地址怎么对应这里以这个为例说下思路。Profinet通讯里机器人一般作为IO设备接入西门子PLC的主站网络。第一步在TIA软件里安装机器人厂商提供的GSD文件然后从硬件目录里把机器人拖到以太网网络上。第二步给机器人分配输入输出地址区比如PLC输出给机器人的控制字放在QB80开始的8个字节机器人反馈给PLC的状态字放在IB72开始的8个字节。第三步才是关键要把PLC这边定义的数据字节顺序和机器人那边程序里定义的变量顺序一一对上。我调试时吃过字节顺序的亏。PLC侧定义了一个16位的控制字高字节低字节的顺序和机器人侧不一致结果按位判断状态怎么都对不上。后面我把所有需要交换的数据整理成一张地址映射表第一列是功能描述第二列是PLC地址第三列是机器人地址第四列是数据类型PLC和机器人两边照着同一张表填问题就解决了。另外联调时建议先用最少的字节通信比如先只传一个控制字和一个状态字验证通了之后再逐步增加内容。一次性定义一堆数组通讯一旦不对都分不清是谁的问题。6.2 与DCS和上级系统数据交换水泥厂的生产线往往还有DCS总控中心配料系统PLC经常要作为子站往DCS上报数据或者接收DCS下发的生产指令。西门子PLC与DCS通讯最常用的几种方式是Modbus TCP、OPC UA、Profinet从站。不管用哪种协议我都建议在PLC里单独规划一个“通讯映射区”比如专门建一个DB块把所有要和DCS交换的数据集中放在这个块里DCS工程师只读写这个块PLC内部程序需要什么数据就从这里取。这样双方接口固定后期无论是DCS侧改点表还是PLC侧改逻辑都只动映射区不互相影响。寄存器映射表用Excel建列清楚功能描述、数据类型、PLC地址、DCS地址、单位、读写属性。这个习惯一开始可能觉得多花了一点时间联调的时候会谢天谢地尤其是碰上两边工程师不在同一个现场的情况发一张表过去就能把问题说清楚。6.3 后续扩展与安全建议这套系统目前运行稳定后续扩展方向也很明确。一是远程运维通过工业网关把PLC的关键信息传到工厂信息平台设备报警时手机能收到提醒这个对搅拌站这种24小时连续生产的场景特别实用。二是数据上云把每个批次的配料数据上传到系统里做大数据分析工艺员能统计不同料性、不同季节下的配料偏差规律。三是移动端巡检值班人员拿着平板在设备旁边就能看到各秤重量和报警信息。扩展的同时别忘了安全。PLC要设置访问口令上位机要分操作员和管理员权限无人值守时禁止无关人员操作。工业控制和办公网络要有明确边界避免生产网络被外部设备随意接入。这些不是形式主义是保证系统不出生产事故的基本底线。我个人在实际操作里的体会是做自动配料系统重心永远在秤、料流和提前量这三件事上。PLC程序写得再漂亮组态王画面再炫如果秤没标定好、料流不稳定、落差值没摸透系统一样达不到工艺要求。这个项目交付到现在运行最顺利的恰恰是我前期花时间最多的地方——把每一台秤的落差值用几十批数据慢慢喂出来的过程。配料系统是一个需要耐心调出来的系统不是把它装好通上电就完事的。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进