
老刘前两天在微信里找我说他们饲料厂那套用了快十年的配料系统上位机电脑突然罢工组态王工程文件也没做备份着急上火问我要怎么办。我让他先把系统盘拿去数据恢复同时帮他重新梳理了一遍整套系统的图纸和程序结构。聊完之后我意识到市面上“基于S7-300 PLC和组态王的饲料配料控制系统”这类项目实在太多了存量设备遍布各中小饲料厂、预混料车间甚至食品配料线但真正能把梯形图、接线图、上位机组态讲透的资料并不多。这篇就把我这些年做这类项目的设计思路、电气接线要点、梯形图核心逻辑以及组态王开发的坑一次性整理出来。这套系统的核心价值很直接按配方比例自动称量多种原料顺序投入混合机混合均匀后放料同时把每批数据记录下来。适合正在做毕业设计的学生、刚接手饲料厂电控的工程师以及准备自己改造配料线的设备主管参考。下面我按从需求到落地的顺序把整套东西拆开讲。1. 系统要解决什么问题从工艺到电控的整体设计思路1.1 配料工艺的痛点在哪里饲料配料的工艺其实不复杂但工况很苛刻。原料仓里装着玉米、豆粕、麸皮、预混料等不同物性的物料有的流动性好有的容易结拱有的粉尘大。配料工段的核心动作就三个按配比称料、把料送进混合机、混合后排出成品。但这里面的讲究全在“精度”和“节拍”上。称重的难点在于给料过程中存在“空中料柱”。给料机接到停止命令后从设备出口到秤斗料面之间还悬浮着一部分物料这部分料也会落入秤斗。如果控制逻辑不考虑这个落差实际重量就会比目标值多出一截。精度要求高的配方比如预混料里的微量元素多用一克可能就导致整批产品质量问题。节拍的难点在于配料顺序。如果所有料仓同时加料称重斗的容量有限而且粉尘互相干扰称重传感器会受到气流冲击导致读数不稳。所以一般采取“顺序配料”的策略一种料称完等秤稳定再启动下一种料。整个配料周期要尽量短因为后续的混合机、制粒机都在等着配料慢了整条线都卡脖子。还有一层是防错需求。饲料配方被改错、某种料没投进去、料仓料位过低没预警这些在手工配料时代都是常见质量事故。电控系统除了完成动作还要能记录数据、追溯批次、报警提醒。1.2 为什么是S7-300和组态王这套组合现在新项目很多人会用S7-1200/1500加WinCC但说实话存量饲料厂里S7-300和组态王的组合依然是绝对主流原因很现实第一S7-300模块化设计很成熟DI/DO/AI/AO模块随点数灵活组合。中小型配料线用CPU 313C或者315-2PN/DP就足够扩展机架还能挂更多模块。对于饲料厂这种24小时连续运转的粉尘环境S7-300的可靠性和备件易得性经过了长期验证。第二组态王作为国产组态软件在中低端市场的占有率非常高。它的操作逻辑符合国内工程师的使用习惯中文资料多网上随便搜就有大量案例。相比WinCC授权费用高、版本兼容性折腾人组态王性价比高很多尤其适合单机监控或者小规模工厂管理。第三通讯简单可靠。S7-300的PN口或者CP343-1以太网模块直接和组态王的“S7-300/400 TCP”驱动对接设置一个IP地址和机架槽号就能通讯不涉及复杂的OPC配置。这在实际项目里是非常大的优势——调试时间能省一半。1.3 系统架构和控制流程整套系统的架构可以分成三层现场设备层、控制层和监控层。现场设备层包括螺旋给料机、振动给料机、提升机、混合机、卸料门、称重仪表、料位计等控制层就是S7-300 PLC负责采集信号、执行逻辑运算、输出控制监控层是组态王上位机负责人机交互、配方管理、报表和报警。控制流程用大白话描述是这样的操作员在组态王画面里选好配方号输入配料批次数量点击启动。PLC读到启动指令后先检查设备状态是否满足条件混合机卸料门已关到位、称重斗门已关到位、无急停报警。条件满足后启动混合机和提升机等待然后按顺序打开第一个料仓的给料机。给料机以“快加”方式高速送料当秤斗重量到达“目标值减慢加阈值”时切换成“慢加”方式低速送料到达目标值后完全停止。等秤斗重量稳定记录实际重量再切到下一个料仓。所有料都称完后打开称重斗卸料门物料落入混合机混合计时到后打开混合机卸料门放料。一个批次完成后自动进入下一个批次或者停机并把批次数据写入报表和数据库。这个流程听起来简单但每一步落实到梯形图和组态王变量上会牵扯很多细节。接下来我逐个环节讲。2. 硬件配置与接线图原理图IO点表是整套设计的地基2.1 IO点表的梳理方法做任何PLC项目第一步都是列IO点表。点表漏了后面改机架配置和接线图就是灾难。我以一套8个原料仓、1台称重斗、1台混合机的典型配料线为例整理出大概的点数。数字量输入这块主要是设备状态和位置反馈8个料仓的低料位报警料位计信号、称重斗卸料门开到位和关到位、混合机卸料门开到位和关到位、提升机故障、混合机故障、成品输送故障、手自动转换开关、远程启动按钮、急停按钮。这样算下来20多个DI点加上预留备用点配32点DI比较从容。数字量输出这块包括8个给料机启停、称重斗卸料门开关指令、混合机卸料门开关指令、提升机启停、混合机启停、成品输送启停、声光报警器、运行指示灯。算下来24点左右。模拟量方面称重传感器信号一般通过称重仪表转成4-20mA送给PLC模拟量模块这是标配。混合机电流可以加一路电流互感器变送器用来监测堵料情况属于加分项。如果有控制给料速度的需求还要留一两路模拟量输出给变频器作为频率给定。点表列完之后建议在表格里加一栏“对应PLC地址”比如I0.0对应“1号料仓低料位”Q0.0对应“1号给料机”PIW256对应“称重斗重量”。这一步看着枯燥但后面写程序、做组态王变量、查接线故障全靠它。2.2 S7-300模块选型和机架配置根据上面的IO点数我一般推荐这么配置电源模块用PS307 10ACPU用315-2PN/DP自带PN口省掉CP343-1模块的钱和槽位。数字量输入用两块SM321 DI16x24V数字量输出用一块SM322 DO16x24V加一块SM322 DO8x24V如果继电器输出更耐用选继电器型的。模拟量输入用一块SM331 AI8x12位模拟量输出选SM332 AO2x12位。这些模块往机架0上一插槽位紧凑也不用扩展机架。如果设备点数更多比如12个料仓加两条混合线CPU可以考虑317-2PN/DP然后把从站机架挂起来。S7-300通过IM360/361扩展机架最多能到4个机架不过中小项目基本用不上机架0就够。模块选型有个容易被忽略的点DO模块的驱动能力。晶体管输出模块输出电流一般0.5A驱动中间继电器没问题但如果直接驱动接触器线圈就可能烧输出点。实际接线里PLC的输出一般只驱动小型中间继电器再通过中间继电器触点去控制接触器这样既能隔离又方便以后更换。2.3 关键接线原理与防干扰措施接线图里最核心的是电源回路和信号回路要分开。动力电缆电机、接触器和信号电缆传感器、通讯线绝对不能穿同一根金属管间距保持至少30厘米以上。这个在图纸上就要标清楚否则施工队图省事把线捆绑在一起调试时模拟量波动、通讯无故中断会让你怀疑人生。数字量输入的接线要注意S7-300的输入类型。S7-300数字量模块是源型输入公共端接M负极信号线从正极经过按钮或传感器触点进入输入点。手动转换开关、限位开关、按钮都是简单干触点按这个回路接就行。有些新工程师会把公共端接到L上导致输入点永远没信号这是特别常见的低级错误。急停回路必须单独强调急停按钮不能只进PLC用程序控制接触器。因为PLC程序跑飞或者CPU故障时急停指令就失效了。正确做法是急停按钮串联在接触器控制回路里硬件直接切断动力电源PLC只是“知道”急停动作并做报警显示。这个属于保命设计不能省。2.4 称重传感器的接线毫伏信号不能直接进AI模块称重传感器的输出是毫伏级的差分电压信号直接接PLC模拟量模块不仅精度不够而且抗干扰能力很差传输距离稍长信号就衰减得没法看。项目里我更推荐通过称重显示仪表中转称重传感器接仪表仪表里做标定和滤波然后输出4-20mA模拟信号给PLC有需要的话还能同时走RS485把实时重量传给触摸屏或者其他系统。称重显示仪表布置在秤斗附近的控制箱里输出信号线用屏蔽双绞线接到SM331模块屏蔽层单端接地。仪表一般需要DC24V供电注意电源不要和接触器线圈共用一个开关电源否则接触器吸合瞬间的压降会导致称重仪表死机或者读数跳变。现场如果条件实在受限至少要在仪表电源前加稳压和滤波。3. 梯形图程序核心逻辑快慢加料、空中料柱补偿与设备互锁3.1 程序结构规划OB、FC、DB怎么分S7-300的梯形图程序我习惯用STEP 7 V5.6来做结构上分得很清楚。OB1作为主循环扫描周期大概在10到30毫秒对整个系统的实时性要求来说绰绰有余。FB和FC按功能拆分FC10专门做称重配料流程FC20做单机设备控制FC30做报警汇总FC40做模拟量工程值转换。DB块按数据类型存放DB1放配方参数DB2放运行数据DB3放报警信息。这样拆分的好处是调试的时候非常清爽。比如精车不准了你就去检查FC10和DB1某个电机不动了去FC20里看对应的互锁条件。如果所有逻辑都堆在OB1里几百个网络从头到尾时间一长连自己都看不下去更别说后面接手的维护人员。关于配料数据我这里给一个DB1的设计参考DBD0存配方号DBD4存原料总数量DBD8存当前配料序号DBD12存当前料目标重量DBD16存当前料实际重量DBD20存快慢加切换阈值DBD24存提前量补偿值DBD28存慢加启动后的稳定延时时间。用双字浮点数存重量值配方精度可以到0.1公斤以内。3.2 称重配料核心逻辑快慢加与提前量补偿配料程序最核心的一段逻辑就是快慢加控制。简单的程序只做到目标值就停给料机这样过冲量会很大精度差。实际项目中我一般用快加、慢加两段控制开始大规模送料接近目标值时降速用小流量把剩余的料精确补上。饲料配料的常规做法是给料机用双速控制或变频器多段速控制快加时50Hz或者大小绞龙一起开慢加时降到20-30Hz或者只开小绞龙。梯形图里实现快慢加的逻辑我通常写成这样自动模式M0.0 且 当前配料状态M0.1 且 当前重量MD30 (目标值MD10 - 慢加阈值MD14) - 快加输出Q0.0置位慢加输出Q0.1复位 当前重量MD30 (目标值MD10 - 慢加阈值MD14) 且 当前重量MD30 目标值MD10 - 快加输出Q0.0复位慢加输出Q0.1置位 当前重量MD30 目标值MD10 - 快加输出Q0.0复位慢加输出Q0.1复位 - 启动稳定延时定时器延时2秒后记录实际重量 - 切换配料序号重置目标值启动下一料仓这里的慢加阈值MD14一般取目标重量的2%-5%。如果目标重量是500公斤慢加阈值设10公斤就是重量到490公斤时切慢加。具体数值要在调试时通过实际物料测试确定因为不同物料的流动性和冲料特性差别很大。提前量补偿也在这段逻辑里体现。程序判断是否到达目标值时实际比较的不是“目标值”而是“目标值减提前量”。比如你希望某料最终恰恰停在500公斤但给料机停止后还有2公斤空中料柱会落进秤斗那PLC就在重量到498公斤时发出停止指令。这2公斤就是补偿值。补偿值不是拍脑袋定的我在调试时会做一张记录表比如1号料快加提前量1.5kg、慢加提前量0.3kg每次生产前根据物料批次的流动性微调一次。3.3 电机控制与互锁逻辑配料线里的电机控制看着简单就是启停、停止、保护但互锁条件很容易被忽略。我的经验是互锁逻辑写在梯形图里而不是完全依赖上位机。上位机可能卡死PLC的互锁才是最后一道防线。启动顺序上必须先启动下游设备再启动上游设备先启动混合机和提升机等它们运行反馈到位后才允许启动给料机。如果链条反过来物料会堵在混合机入口或者提升机底部清理起来非常痛苦。停止顺序则相反先停给料机等称重斗内物料放空再停混合机和提升机。称重斗卸料门和给料机的联锁也很关键称重斗门没有关到位绝对不能允许任何给料机启动。否则一边加料一边漏料现场会失控。混合机卸料门没关到位时也绝对不允许混合机启动否则有设备损坏风险。这些互锁用常闭触点串联在输出回路里就可以了。手自动切换逻辑我建议这样处理手动模式下每个设备可以通过组态王或者现场按钮单独启停主要用于检修和试车自动模式下设备由配料流程统一指挥。切到自动时所有手动操作的输出必须统一复位防止自动流程启动时设备还在手动运行造成两者冲突。切换瞬间如果混合机正在运行我不建议立刻停机应该让流程自然结束后再响应新的模式指令。3.4 模拟量量程转换S7-300模拟量模块采集4-20mA信号后在PLC内部是以0-27648这个整数量程存储的。4mA对应的是553020mA对应27648。如果不做转换直接把PIW值拿去做判断你比较的数字根本不是重量值程序会完全乱套。转换公式用浮点数运算写清楚实时重量 (PIW256 - 5530) / (27648 - 5530) * 量程上限举个例子称重仪表量程是0-1000公斤PIW256读到的值是16500那么实时重量就是(16500-5530)/(27648-5530)*1000约等于493.3公斤。这个转换可以在FC40里做一次输出到DB2的MD30后面所有逻辑都用这个工程值。转换完成后要做滤波处理。称重信号在给料机振动、物料下落的时候会有毛刺直接拿来判断容易误动作。我在梯形图里加一阶惯性滤波或者滑动平均滤波简单做法是连续采集10次取平均时间大概200毫秒既不影响响应速度又能滤掉大部分干扰。个别仪表还有自己的滤波功能PLC侧可以只做防抖处理。4. 组态王上位机开发从通讯配置到报表报警4.1 组态王与S7-300的通讯配置组态王和S7-300的通讯我基本都是走以太网方案成熟速度快。具体操作分几步先把PLC的PN口IP地址在硬件配置里设置好比如192.168.0.1下载到CPU。然后在组态王开发系统的设备配置里选择“S7-300/400 TCP”驱动填上PLC的IP地址、机架号0、CPU槽号2。如果用的是CP343-1通讯处理器槽号要填CP模块实际所在的槽位这一点很多人会填错通讯不上大概率就是这。通讯参数里的采集周期默认100毫秒就够用。如果觉得画面刷新慢可以适当调低到50毫秒但不要太低否则CPU通讯负载过高会影响程序扫描周期。值得注意的是S7-300老版本CPU要在硬件配置里确认“允许通过PUT/GET进行远程通讯”是勾选状态否则组态王只能读不能写或者干脆连接失败。这个属性在CPU属性的“通讯”选项卡里新固件默认值可能不一样务必检查。通讯建立后组态王里定义变量时寄存器类型要选对Q0.0对应位输出I0.0对应位输入PIW256对应模拟量输入字。PLC内部M区、DB区也可以直接读写数据字典变量类型里都有对应选项通讯驱动工作得很好。4.2 画面组态与变量定义画面组态是组态王开发最直观的部分。主画面做成全厂工艺流程示意图把料仓、给料机、称重斗、混合机、提升机用图库里的图形画出来颜色区分运行/停止状态。每个设备旁边放一个状态指示灯绿色闪烁代表运行红色代表故障灰色代表停止这样操作员扫一眼就能知道全厂状态。变量定义要特别小心。不管在PLC里怎么转换组态王里的I/O变量必须和PLC数据格式对齐。称重实时重量在PLC里是浮点数组态王变量类型选“实数”或者“FLOAT”寄存器地址填对应的DB区或者MD地址。如果把浮点数当整数读你会在画面上看到完全不对的数字。手动操作按钮我习惯用“左键弹起”命令语言配合“变量置位/复位”。比如手动启动1号给料机按钮弹起时执行“\本站点\1号给料机手动启动 1;”旁边放一个停止按钮执行“ 0;”。自动模式启动按钮则执行一系列联动配料启动、目标批次写入、流程使能置位。画面切换用系统菜单或者功能按钮都行关键是每个画面里的“返回主画面”按钮一定要有不然操作员切出去就回不来了。我在多个项目里都有过这种返工经验一个小按钮能省一堆售后电话。4.3 组态王连接MySQLODBC配置与SQL函数生产数据要长期保存、导出分析的话用组态王自带的报表也能凑合但强烈推荐把关键数据落地到MySQL数据库。组态王本身不直接支持MySQL访问要通过ODBC中转。这里你会用到Navicat for MySQL或者其他数据库管理工具来建库建表但组态王运行时的数据交互是走ODBC驱动的。ODBC配置步骤大概是先安装MySQL ODBC Connector注意位数要和组态王一致。组态王是老软件6.55默认32位就要装32位的MySQL ODBC驱动。如果是7.5的64位版本装64位驱动。然后打开Windows的ODBC数据源管理器32位和64位在系统里是分开的别找错地方添加一个“MySQL ODBC Driver”数据源填好服务器地址、端口、用户名、密码和数据库名测试连接通过即可。组态王侧的开发分两步第一步在工程浏览器的“SQL访问管理器”里新建记录体。记录体里的字段名称和顺序必须和数据库表的字段完全对应。比如表feed_record里有batch_no、material_name、target_wt、actual_wt、result字段记录体里也要按顺序定义这些字段。第二步在画面命令语言或应用程序命令语言里写SQL函数SQLConnect( DeviceID, DSNFeedDB;UIDroot;PWD123456; ); SQLInsert( DeviceID, feed_record, RecorderBody ); SQLSelect( DeviceID, feed_record, RecorderBody, batch_no 1001, );SQLConnect建立连接SQLInsert把记录体里的数据插入表SQLSelect按条件查询。实际项目里我一般按批次号作为查询条件把某一天或者某个批次的配料记录拉出来生成报表。数据库连接建立后统一在“工程运行系统启动时”执行一次平时不反复连接断开避免资源开销。还要注意MySQL 8以上版本的默认认证插件改了连接报错时要把用户改成mysql_native_password方式认证。4.4 组态王7.5和6.55怎么选很多人在群里问6.55和7.5到底选哪个我的建议看场景。6.55是老牌版本稳定、资料多、占用资源低在Win7 32位工控机上运行非常流畅。但它在Win10/11上的兼容性一般高分屏显示模糊工程文件移植到新系统会出现各种奇怪问题。7.5默认原生支持64位系统对高DPI界面做了优化画面字体缩放效果明显更好。Web发布功能也比6.55强方便你从办公室远程瞄一眼车间画面。历史数据的存储方式更合理支持更大规模的点位和更长时间的归档。列一个简单对比表对比项6.557.5 SP3系统兼容性Win7 32位最佳Win10需打补丁原生64位兼容Win10/11高分屏适配模糊支持DPI缩放Web远程发布功能较基础增强版Web发布历史数据存储专用格式更灵活支持更大容量学习资料非常多逐年增多加密狗不能用于7.5不能用于6.55如果你在维护老项目重点看6.55的资料就行如果新上项目直接上7.5 SP3别犹豫。加密狗不通用换版本要重新购买授权这个采购成本要提前算清楚。4.5 两个被问烂的细节按钮字体和报警时间关于按钮字体修改组态王里有两个层面。第一是修改按钮上显示的文字内容选中按钮控件后右键“字符串替换”输入新文字就行。第二是修改字体大小、颜色、字体类型选中按钮后在工具栏的字体下拉框和颜色按钮里改。但有些版本里按钮控件的字体属性改了没反应这种情况我建议直接用“文本”控件叠在按钮上文本控件设置字体属性绘出现代化的多行多色效果。7.5版本在高DPI下按钮字体模糊的问题需要在系统配置里开启DPI感知。报警记录时间不对这个坑几乎每个人都踩过。典型表现是报警画面上显示的时间比实际发生时间慢8个小时或者完全不对。先检查工控机系统时间是否准确Windows时间不对组态王的报警时间肯定不对。再检查Windows时区设置是否为中国标准时间被设置成其他时区的话显示就会偏差。第三组态王系统配置里有“报警时间”的来源设置确认是启用本机时间而不是服务器时间如果配置了远程采集站各站电脑时间必须同步。最后Windows的“自动调整夏令时”功能在某些情况下会导致时间差异建议关闭。我遇到过机房电池没电、每次开机时间回退到2015年的奇葩情况换主板电池立马就好了。5. 调试心得与常见问题速查5.1 调试顺序与称重精度标定整套系统装完调试顺序千万别乱来。我先带灯测试PLC输出不接负载在程序里强制各个输出点确认每个DO点对应的指示灯或者万用表有响应排除模块损坏和接线错误。然后空载测试接上执行机构手动模式下逐个启停设备方向反转、限位动作、急停停车都要试一遍。最后才跑自动流程先用小批量料试跑比如配方临时改成总重50公斤确认整个流程动作顺序正确再加载正式配方的重量值。称重精度标定是重头戏。第一步是仪表侧静态标定在秤斗上放标准砝码用仪表的标定功能把重量显示校准。没有砝码的话可以用已知重量的基准物多取几个点做线性校正。第二步是动态配料测试实际物料跑几个批次记录每个料仓目标值和实际值之间的偏差。如果实际值总是偏高说明提前量补偿不足调大补偿值如果实际值偏低说明补偿过头调小补偿值。这个调整是个迭代过程一般三轮测试就能把精度稳定在0.3%以内。5.2 常见问题速查表我把这些年调试和售后遇到的典型问题整理了一张速查表遇到症状直接查原因对应解决方案。这张表我打印出来贴在控制柜门内侧维护师傅都说好用。现象可能原因排查与解决组态王连不上PLCIP不通、CPU槽号填错、PUT/GET权限未开先用ping确认网络通再核对机架号和槽号最后检查CPU属性里的远程通讯权限通讯时通时断网线/交换机故障、采集周期太短、CPU负载高检查物理链路适当调长采集周期到100ms以上减少变量采集数量和频率称重显示乱跳信号线受干扰、仪表电源波动、滤波不足屏蔽层单端接地仪表单独供电PLC程序增加滤波处理实际重量过冲大提前量补偿不够、快慢加切换阈值不合理增大提前量补偿值把慢加启动点提前检查给料机停止响应时间某种料漏配给料机未启动、料仓空料、互锁条件未满足查看该给料机运行反馈和故障状态检查低料位报警查看互锁变量状态自动流程不执行设备未就绪、手自动切换信号无、配方参数非法逐个检查启动条件变量确认手动输出已复位检查配方目标值是否为0组态王按钮字体不生效控件版本差异、文字格式设置有误选中后在工具栏设置字体无效则用文本控件叠加报警时间不对系统时间不准、时区设置错、夏令时选项开启校正时间检查时区关闭夏令时同步所有站电脑时间MySQL连接失败ODBC驱动版本不对、认证方式不兼容统一位数把MySQL用户改成mysql_native_password检查端口防火墙5.3 项目交付时一定要做的事项目交付的时候程序注释和图纸归档比设备本身还要重要。我会把S7-300的STEP 7项目文件、组态王工程文件全部备份到移动硬盘和网盘连同一个“项目说明.txt”放在一起里面写清楚IP地址规划、通讯参数、配方说明、常见故障处理方式。这玩意看着土但能让你在一年后接到售后电话时少掉不少头发。PLC程序里的注释必须写完。各种中间继电器M区、数据块DB区的含义在符号表里全部定义好。DB1里的配方偏移地址DB2里的运行中间变量都用有意义的符号名替代裸地址。组态王画面里的变量注释也顺手补上不然半年后你自己都不记得那个“\本站点\MD60”到底是什么。设备清单、IO点表、接线图、原理图这些纸质版图纸建议打印两份一份放控制柜一份交业主资料室。控制柜那张用塑封袋装好经常有人修设备时抓一张纸就去柜子底下趴着。图纸上标注清楚端子号、线号、颜色和柜内实际接线一一对应这份耐心迟早会回报你。最后再分享一个小经验给每台设备加一个唯一的编号在梯形图注释、组态王画面、接线端子标记上用同一套编号体系。将来不管是排查故障还是做改造升级都能减少大量的沟通成本。配料控制系统的核心不在于某个复杂的算法而在于每一个细节都说得清楚、对得上号、经得起推敲。把基础工作做扎实了这个系统自然稳定可靠。