1. 项目概述一个典型的物料处理自动化单元最近在帮一个做化工辅料的朋友改造他们的一个小型配料间核心需求是把人工称重、投料、搅拌、放料这套流程给自动化了。他们原来就是两个工人一个负责用磅秤称各种粉料另一个负责倒进搅拌罐、开搅拌机、最后手动打开底阀把混合好的料排到包装机里。活儿不重但粉尘大配比精度全凭老师傅手感批次间总有差异。他们老板就想能不能用一套PLC系统把这摊事儿管起来减少人工干预提高一致性。这个需求太典型了就是一个小型的“上料-搅拌-排出”自动化过程。我第一时间想到的就是用西门子S7-1200系列PLC来搭这个系统。为啥选它首先S7-1200在中小型自动化项目里是绝对的主力性价比高功能足够从简单的逻辑控制到带点模拟量、通信的复杂任务都能胜任。其次它的编程环境TIA Portal博图用起来比较顺手从PLC编程到HMI人机界面组态可以一站式搞定对于这种自控系统集成项目来说开发效率很高。最后生态好资料多无论是自己调试还是后期客户维护门槛都相对低一些。这个项目麻雀虽小五脏俱全。它涉及了自动化的几个核心环节感知用传感器检测物料位置、重量、决策PLC根据配方和流程逻辑发出指令、执行控制电机、气缸、阀门等动作。我们将用S7-1200作为大脑通过数字量和模拟量模块连接现场的按钮、传感器、变频器用博图软件编写控制逻辑并制作一个简单的WinCC触摸屏画面让操作工能一键启动、查看状态、修改配方参数。下面我就把这个项目的完整实现过程从设计思路到程序细节再到调试中踩过的坑给大家拆解清楚。2. 系统整体设计与硬件选型思路做自动化项目最忌讳的就是拿到需求直接开干、写程序。前期把系统框架和硬件清单理清楚后期能省下一大半的调试时间。对于这个物料处理单元我的设计思路是把它分解成三个明确的工位并明确每个工位的输入信号和输出动作。2.1 工艺流程分解与功能定义整个流程可以清晰地划分为三个阶段形成一个闭环上料阶段操作工在触摸屏上选择配方例如“配方A原料X 50kg原料Y 30kg”按下启动按钮。系统首先打开进料仓的底阀原料依靠重力落入称重料斗。料斗下方安装有称重传感器压式称重模块PLC通过模拟量输入模块实时读取重量值。当重量达到配方设定值时PLC立即关闭底阀完成一种原料的投加。如果配方包含多种原料则按顺序重复此过程。所有原料加注完毕后系统自动进入下一阶段。搅拌阶段上料完成信号触发后PLC首先关闭称重料斗与搅拌罐之间的隔离阀如果有然后打开称重料斗底部的放料阀将配好的原料投入下方的搅拌罐中。确认原料排空后关闭放料阀。接着PLC启动搅拌电机。这里我建议使用ABB的变频器来控制电机而不是直接工频启动。好处有两个一是可以实现电机的软启动/软停止减少对机械结构的冲击二是可以通过变频器调节搅拌转速未来如果工艺需要不同转速段如先低速混合再高速分散扩展起来非常方便。搅拌时间可以在触摸屏上设定。时间到PLC停止变频器输出搅拌结束。排出阶段搅拌完成PLC打开搅拌罐底部的排料阀通常是气动蝶阀或球阀将混合好的成品物料排放至下游的包装机或中转容器。在排料口可以安装一个物料检测传感器如阻旋式料位开关用于检测物料是否已排空。收到排空信号后PLC关闭排料阀。整个循环结束系统恢复到待机状态等待下一次启动指令。2.2 核心硬件选型与配置清单基于以上流程我们可以列出主要的硬件清单。选型的核心原则是可靠、够用、留有余量。控制器西门子S7-1215C DC/DC/DC。这是S7-1200系列中非常主流的一款。CPU自带14点数字量输入/10点数字量输出对于本项目可能不够但我们可以扩展。选择DC/DC/DC型号是因为现场传感器和中间继电器线圈多为24VDC供电统一方便。它的性能处理这个顺序逻辑加少量模拟量运算绰绰有余还内置了PROFINET接口方便连接触摸屏和后续可能的网络扩展。数字量扩展模块SM 1223 DI16/DQ16。因为我们需要接的开关量信号不少各种阀门的开到位/关到位反馈接近开关、急停按钮、手自动切换开关、搅拌电机的运行/故障信号从变频器来、物料检测信号等。输入输出点都需要扩展。这块模块提供了16点输入和16点输出基本能满足需求。模拟量输入模块SM 1231 AI4。用于连接称重传感器的模拟量信号。称重传感器一般输出的是毫伏mV级信号需要接一个称重变送器将信号放大并转换为标准的4-20mA或0-10V信号再送入PLC的AI模块。一个AI通道对应一个称重料斗。如果只有一种原料一路就够了如果需要同时称量两种原料就需要两路。这里我们按一路设计。HMI人机界面西门子KTP700 Basic PN。这是一款7寸的精简系列触摸屏通过PROFINET与S7-1200通信。用它来做操作和监控界面非常合适可以显示当前重量、搅拌时间、系统状态运行/停止/故障并设置配方参数、手动调试设备等。执行机构与传感元件气动阀门上料仓底阀、称重料斗放料阀、搅拌罐排料阀。选用两位五通电磁阀控制气缸上配套磁性开关作为阀开/阀关的位置反馈。称重系统包括称重料斗、称重传感器如悬臂梁式、称重变送器。变送器需将传感器信号转换为4-20mA输出给PLC。搅拌电机与驱动普通三相异步电机配一台ABB ACS550系列变频器。PLC通过数字量输出点给变频器启动/停止命令通过模拟量输出或通信给定速度。同时变频器的“运行中”和“故障”状态信号需反馈回PLC的DI点。物料检测搅拌罐排空检测可用阻旋式料位开关输出一个无源触点信号。注意硬件选型时务必核对每个传感器的供电电压24VDC还是220VAC和信号类型NPN/PNP、干接点/湿接点确保与PLC输入模块匹配。例如S7-1200的DI模块通常支持PNP接法公共端接0V如果现场是NPN传感器就需要加中间继电器转换或选择支持NPN的模块。2.3 电气原理图与IO分配表硬件清单确定后就要画电气原理图。这是编程的基础必须清晰无误。这里我强调几个关键点PLC电源与接地给PLC CPU和扩展模块供电的24VDC电源一定要稳定、干净最好单独一路并做好接地避免干扰。输出点的保护控制电磁阀、接触器线圈等感性负载时必须在负载两端并联续流二极管对于直流负载或阻容吸收回路对于交流负载以保护PLC的输出触点不被感应电动势击穿。急停安全回路急停按钮必须采用硬线连接直接切断控制回路的总电源或关键执行机构的电源绝不能只靠PLC程序来响应急停。这是安全规范的要求。根据原理图整理出详细的IO分配表。这个表是编程时定义变量名的直接依据。例如PLC地址设备符号功能描述备注I0.0SB1系统启动按钮触摸屏画面也可启动I0.1SB2系统停止按钮I0.2SA1手/自动切换开关1自动0手动I0.3SQ1上料阀开到位接近开关反馈I0.4SQ2上料阀关到位接近开关反馈.........Q0.0YV1上料仓底阀打开控制电磁阀Q0.1YV2称重料斗放料阀打开控制电磁阀.........IW64WT1称重值来自AI模块0-27648对应0-100kgQW80AQ1变频器速度给定0-27648对应0-50Hz3. 博图TIA Portal中的软件设计与编程硬件搭好接下来就是灵魂——编程。我们使用TIA Portal V18版本选择较新的稳定版即可进行开发。软件部分主要分为三大块PLC程序、HMI画面、PLC与HMI的变量连接。3.1 项目创建与设备组态打开博图新建项目首先添加硬件设备。在“项目树”中双击“添加新设备”选择正确的S7-1215C型号。添加后进入设备视图在CPU右侧的“插槽”中依次拖入我们选好的数字量扩展模块SM 1223和模拟量输入模块SM 1231。博图会自动分配它们的IO地址我们之前做的IO分配表需要与此一致。接着要配置模块参数。对于模拟量输入模块SM 1231需要双击模块进入属性在“输入”选项中将通道0的类型设置为“电流”4-20mA并勾选“启用”通道。这样PLC就能正确读取称重变送器送来的电流信号了。网络视图里把HMI设备KTP700也拖进来并用PROFINET网络线将其与PLC连接起来。博图会自动为它们分配IP地址和设备名称通常PLC是192.168.0.1HMI是192.168.0.2保持默认即可。3.2 PLC程序结构规划与主程序OB1编写好的程序结构是调试和维护的基础。对于S7-1200我习惯采用“结构化编程”的思想结合组织块OB、函数块FB和函数FC。OB1主循环组织块程序的入口在这里调用其他功能块。我的OB1通常非常简洁就像一本书的目录。FC/FB用于实现具体的功能。FC是函数无记忆功能FB是函数块有背景数据块DB可以保存状态非常适合用于需要记住之前状态的设备控制比如阀门、电机。DB数据块存储全局数据如配方数据、系统状态、报警信息等。在OB1中我通常会按以下顺序调用功能块// 主程序OB1网络1 CALL “FC_System_Mode” // 处理手自动切换、启动停止命令 CALL “FB_Weighing_Cycle” // 称重上料功能块 CALL “FB_Mixing_Cycle” // 搅拌功能块 CALL “FB_Discharge_Cycle” // 排料功能块 CALL “FC_Alarm” // 报警处理功能块 CALL “FC_HMI_Data” // 与HMI的数据交换处理这样结构清晰每个功能块独立修改一个功能不会影响其他。3.3 核心功能块详解FB_Weighing_Cycle称重上料这是整个流程的第一个关键环节精度和可靠性要求最高。我把它封装成一个FB块方便管理。首先在FB的接口区Interface定义好输入输出变量和静态变量Static。InputStart启动信号TargetWeight目标重量来自配方ActualWeight实际重量来自AI转换后。OutputFeedValveOpen控制上料阀WeighingDone称重完成标志位。StaticState状态机变量Int类型Tmr_Delay延时定时器TON类型。核心逻辑采用状态机State Machine编程这是顺序控制的标准方法比一堆互锁的线圈逻辑清晰百倍。状态0空闲IDLE。等待Start信号。收到信号后将State置为10并打开上料阀FeedValveOpen:TRUE。状态10进料中FEEDING。在这个状态里程序不断比较ActualWeight和TargetWeight。这里有个关键技巧不能等到重量等于目标值才关阀因为物料有惯性关阀后空中还有一部分在落料。我们需要设置一个提前量Pre-act。例如目标50kg我们可以在重量达到48kg目标值的96%时就关闭阀门。这个提前量需要现场调试确定。IF ActualWeight (TargetWeight * 0.96) THEN FeedValveOpen : FALSE; // 提前关阀 State : 20; // 进入稳定状态 END_IF;状态20稳定等待STABILIZING。关闭阀门后重量读数还会因为落料和传感器抖动而小幅变化。这时启动一个定时器Tmr_Delay比如延时2秒等待重量稳定。状态30完成DONE。定时器时间到读取最终的稳定重量值可以记录到配方数据块中用于追溯。置位WeighingDone信号通知主流程进入下一步。然后将State复位为0等待下一次循环。实操心得称重控制的难点在于抗干扰和提前量的设定。传感器信号线必须使用屏蔽线并且屏蔽层单端接地一般在PLC柜侧。提前量需要在实际物料和速度下反复测试几次才能确定最佳值。可以在HMI上做一个“提前量系数”的设定界面方便调试员在线微调。3.4 核心功能块详解FB_Mixing_Cycle搅拌控制与变频器集成搅拌控制的核心是电机的启停和调速这里我们通过ABB变频器来实现。首先需要在PLC程序中与变频器交换信号。通常我们使用最简单的数字量控制启停模拟量给定速度的方式。硬件接线PLC的一个DQ点接变频器的“启动”端子如DI1另一个点接“故障复位”端子。PLC的AQ点模拟量输出接变频器的“速度给定”端子如AI1。变频器的“运行中”继电器输出RO1和“故障”继电器输出RO2接回PLC的DI点。程序逻辑在FB_Mixing_Cycle中当收到开始搅拌指令后程序首先通过模拟量输出模块输出一个对应低速如10Hz的数值例如0-27648对应0-50Hz则10Hz对应5530然后置位启动变频器的输出点。延时几秒后再将速度给定值提高到工艺要求的转速如35Hz。搅拌时间由HMI设定PLC用一个定时器计时。时间到先将速度给定值降为0然后延时1秒再关闭启动信号实现软停止。最后复位启动信号搅拌完成。注意变频器的参数设置至关重要。必须根据电机铭牌正确设置电机功率、电流、极数等基本参数。此外加速时间Ramp-up time和减速时间Ramp-down time要设置合理太短会导致过流报警太长会影响工艺节拍。通常可以从5-10秒开始试。3.5 报警与数据记录功能实现一个完整的系统必须有完善的报警功能。我通常在数据块DB中创建一个报警数组或结构体。定义报警字在全局数据块DB_Alarm中创建一个Array[1..32] of Bool每个Bool位代表一个具体的报警如“称重传感器故障”、“变频器故障”、“气源压力低”、“搅拌超时”等。触发报警在程序各个位置检测报警条件。一旦条件满足就将对应的报警位置位。同时可以关联一个Word类型的变量Alarm_Word通过位逻辑运算将报警数组映射到这个字上方便HMI一次性读取所有报警状态。报警处理在专门的报警功能块FC_Alarm中处理报警的响应。例如发生“变频器故障”时除了点亮HMI上的报警灯还应自动停止整个流程并锁定启动按钮直到操作工在HMI上确认报警并复位。数据记录对于重要的工艺参数如每次称重的实际值、搅拌时间、批次号等可以利用S7-1200的“归档”功能或自己编程将数据周期性写入PLC的保持性存储区或通过通信发送到上位机。简单的做法是创建一个配方数据块DB_Recipe_Log每完成一个批次就将当前配方数据和实际重量值复制到日志数组的末尾。4. WinCC HMI界面设计与用户交互PLC是系统的大脑HMI就是系统的脸面和操作窗口。设计原则是信息清晰、操作简单、防止误操作。4.1 主监控画面设计主画面应该一目了然地展示整个系统的主要状态。设备示意图用简单的图形画出上料仓、称重料斗、搅拌罐、阀门、电机的位置。用颜色变化如绿色代表关闭/停止红色代表打开/运行来实时显示阀门和电机的状态。关键数据展示在称重料斗图形旁边放置一个“I/O域”显示当前的实时重量值单位kg。在搅拌罐旁边显示设定的搅拌时间和剩余时间。趋势图可以添加一个小型趋势视图显示最近几分钟的重量变化曲线这对于调试和观察进料稳定性非常有用。全局按钮与指示灯画面顶部或底部固定放置“自动/手动”切换按钮、“启动”、“停止”、“急停复位”、“报警确认”等全局功能按钮以及“电源”、“运行”、“报警”等指示灯。4.2 配方管理画面设计这是操作工最常用的画面之一。配方列表用一个表格显示已存储的配方如“配方A”、“配方B”每行显示配方名、各种原料的目标重量、搅拌时间。配方编辑提供“新建”、“编辑”、“删除”、“保存”按钮。编辑时弹出窗口或切换到编辑区域通过I/O域输入各种参数。配方选择与调用在主画面或配方画面有一个下拉列表或一排按钮用于选择当前要使用的配方。选择后相应的目标参数会自动载入PLC的当前配方数据块中。4.3 手动调试画面设计设备维护和调试时手动模式必不可少。手动画面应该能单独控制每一个执行器。分立控制为每个气动阀设置一个“开”按钮和一个“关”按钮或一个自复位旋钮开关图形。为变频器设置“启动”、“停止”、“故障复位”按钮以及一个设定转速的输入框和进度条。互锁与提示即使在手动模式也要加入必要的软件互锁。例如在手动打开称重料斗放料阀时程序应检查搅拌罐是否处于可接收状态如排料阀已关闭否则禁止操作并弹出提示。每个按钮旁边最好有该设备当前状态的直接反馈。实操心得WinCC与S7-1200的变量连接非常简单在博图里是同一项目下的不同设备。组态HMI时直接拖拽“连接”下的PLC变量到画面对象上即可。关键在于变量规划在PLC中定义好结构清晰的全局变量如HMI_StartHMI_Set_Weight并在HMI中只对这些变量进行读写避免直接操作PLC的内部中间变量这样程序更健壮。5. 系统集成调试与现场问题排查实录所有硬件安装就位程序下载完毕画面也做好了最紧张刺激的调试阶段就开始了。这个过程就是不断发现和解决问题的过程。5.1 上电检查与通讯测试千万不要一上来就自动运行。按步骤来检查供电用万用表测量PLC、传感器、阀门电磁铁的24V电源是否正常、极性是否正确。检查接地确保所有屏蔽线接地良好。下载程序将PLC和HMI程序分别下载到设备中。下载PLC程序时建议选择“仅下载程序块”保留原有的硬件配置和强制值避免意外。测试通讯在线连接PLC查看CPU状态是否为“RUN”。在HMI上观察是否能正确显示PLC中的变量比如一个测试用的BOOL变量在PLC里让它闪烁看HMI上指示灯是否同步闪烁。5.2 单机手动模式调试在HMI上切换到手动画面逐个测试每个执行机构。测试阀门点击“开阀”按钮观察气缸是否动作对应的“开到位”信号指示灯在HMI上是否亮起。点击“关阀”亦然。如果阀门不动作检查PLC输出点是否亮在线监控电磁阀是否得电气源是否打开气缸是否卡涩。测试称重在手动模式下读取AI通道的原始值0-27648。空载时记录一个值比如5000。放上一个已知重量的砝码如20kg记录另一个值比如12000。这样就能计算出标定系数(12000-5000)/20 350每个数字量代表350g。在程序里做好这个标定转换。测试时可以手动加卸砝码看HMI显示的重量值变化是否线性、准确。测试变频器与电机手动给定一个低速如5Hz点启动观察电机是否缓慢旋转方向是否正确。听电机和减速机有无异响。逐步提高频率观察运行是否平稳。测试停止和故障复位功能。5.3 自动流程联调与参数整定所有单点动作正常后切换到自动模式进行全流程联调。首次空跑不投真料让流程空跑一遍。目的是检查逻辑顺序是否正确各个状态机切换是否顺畅定时器时间是否合理。通过观察HMI上的状态指示和程序在线监控一步步跟踪。带料调试投入真实物料。这是调整关键参数的时刻。称重提前量这是重点。先设一个估计值如95%运行一次看最终稳定重量是超差还是不足。如果超差了比如最终52kg目标50kg说明关阀晚了提前量要加大比如调到93%。如果不足最终48kg说明关阀早了提前量要减小比如调到97%。反复几次找到最佳点。稳定延时时间关阀后等待重量稳定的时间。物料流动性好2秒可能就够了流动性差有粘附可能需要5秒甚至更长。以重量读数不再发生明显漂移为准。搅拌速度与时间根据工艺要求调整。观察物料混合是否均匀电机电流是否在额定范围内。异常情况测试模拟故障检查系统响应。急停测试在自动运行中拍下急停按钮所有执行机构阀门、电机应立即失电停止。复位急停后系统应处于安全待机状态不能自动恢复运行。信号故障测试比如拔掉一个阀门的“开到位”信号线程序应该能检测到超时例如发出开阀命令后5秒内未收到到位信号并触发“阀门故障”报警停止流程。变频器故障测试在变频器面板上模拟一个过载故障看PLC是否能收到故障信号并在HMI上产生报警。5.4 常见问题与排查技巧速查表以下是我在调试这类系统中常遇到的问题及解决办法问题现象可能原因排查步骤与解决方法HMI上所有画面数据不更新显示“####”或默认值1. PLC与HMI通讯中断。2. PLC处于STOP模式。3. HMI连接的PLC变量地址错误。1. 检查网线、交换机、IP地址设置。2. 在线连接PLC查看CPU状态若为STOP检查有无致命错误并复位。3. 检查HMI连接中设置的PLC IP地址和机架/插槽号是否正确。称重值显示跳动大不稳定1. 传感器或变送器供电不稳。2. 信号线受干扰未屏蔽或屏蔽层未接地。3. 机械振动传递到传感器。1. 用万用表测量变送器24V电源电压波动应在±5%内。2. 确保使用屏蔽电缆屏蔽层在PLC柜侧单端可靠接地远离动力线敷设。3. 检查称重料斗及其支撑结构增加减震措施。阀门动作不到位或到位信号时有时无1. 气缸气压不足。2. 磁性开关位置安装不准或松动。3. 磁性开关损坏或线路接触不良。1. 检查气源压力表确保压力在设备要求范围内通常0.4-0.6MPa。2. 手动推动气缸至到位位置调整磁性开关使其指示灯刚好亮起并紧固。3. 用万用表测量磁性开关通断状态。变频器启动后电机不转或报过流故障1. 电机动力线未接或接错。2. 变频器电机参数设置错误。3. 机械负载卡死。4. 加速时间设置太短。1. 检查U/V/W电机线连接是否牢固、正确。2. 核对变频器内设置的电机功率、电流、电压、频率是否与铭牌一致。3. 脱开电机与负载的联轴器手动盘车检查是否灵活。4. 适当延长加速时间如从5秒改为10秒。自动流程在某个状态“卡住”不往下执行1. 转移条件未满足如传感器信号没来。2. 有更高级的报警或急停被触发。3. 程序逻辑错误如状态机未正确复位。1. 在线监控程序查看卡住的状态是哪个检查其转移条件中哪个BOOL变量不为TRUE。去现场确认对应传感器信号。2. 检查报警字和急停回路。3. 检查程序确保每个状态完成动作后都能在满足条件时跳转到下一状态或复位。WinCC画面按钮操作无反应1. 按钮关联的PLC变量地址错误或类型不匹配。2. 该操作在PLC侧被互锁条件禁止。3. HMI画面对象属性中“启用”未勾选或设置了不可见的条件。1. 检查按钮“按下”事件关联的变量名和PLC中的是否一致类型是否为Bool。2. 在线监控PLC程序查看控制该操作的逻辑条件是否全部满足。3. 检查画面对象的属性确保其“启用”和“可见”属性没有设置错误的表达式。调试是一个需要耐心和细心观察的过程。务必养成在线监控程序变量、同时观察现场设备动作的习惯。很多时候问题不是单一的需要结合电气、机械、程序多方面分析。每解决一个问题都是对系统和自身理解的一次加深。这个基于S7-1200的物料处理自动化项目从设计到调试完成大约花了两周时间。最终系统运行稳定客户对配料的精度和一致性非常满意。通过这个项目我们再次验证了结构化编程、状态机应用以及细致的前期设计和调试的重要性。