
干过散装物料装车的人都知道装料仓出料这活儿看着不起眼真要盯起来特别费人。以前我们这边的做法是工人站在仓口旁边盯着车停到位了手动按按钮开阀放料差不多了再按按钮关阀全场全靠人盯着。料多点少点全凭手感遇到车稍微偏一点、料流不稳一不小心就冒料撒一地。整个过程又脏又累记录也不全回头产量统计全靠本子手写。这次接手的项目核心诉求就是把S7-200 PLC和组态王这两样东西配合起来做一套物料传送系统货车装料仓出料自动化方案。简单说就是让装料仓的出料阀门、给料机这些设备按预设流程自动执行同时在中控室的组态王画面上能看到整个出料过程能远程操作、能记录报警、能看产量。这个方案覆盖的场景比较典型水泥、砂石骨料、饲料、粮食这类散装物料装车不管哪个行业底层逻辑几乎一样。我先把这套系统适合谁参考说清楚。假如你是搞自动化集成的工程师或者是厂里设备科、机修班的人想自己搞一套小型的装车控制系统这篇文章适合你。因为方案里没有那种特别贵的硬件、特别玄学的技术全部是存量市场上非常常见的设备预算有限的工厂完全能落地。如果你完全没有PLC基础读起来会有点吃力但我会把每一个决策背后的理由都写明白配合基本的梯形图知识也能看出个大概。1. 项目背景与需求拆解装料仓出料为什么要做自动化继续往下说需求拆解。当时去现场看了两天把问题归拢成三类这也是几乎所有散装装车点都会遇到的共性痛点。第一车不到位就放料料直接漏到车厢外面第二出料时没人知道仓里还有多少料料空了设备还继续空转既费电又伤设备第三手动开阀出料量控制不稳定不同工人操作差异大每车装多装少看心情月底产量全靠估。更麻烦的是现场操作工年纪偏大低头弯腰按按钮、仰头看料位长期下来腰和颈椎都不太好。厂里提自动化改造目的不只是省人更是为了把装车量做准、把安全兜住。所以需求最终落在三个核心功能上车辆到位检测、料仓料位监测、定量/时序出料控制。这三个功能前两个靠传感器给PLC信号最后一个靠PLC内部逻辑加上执行机构动作来实现。组态王做的是上位的眼睛和手把PLC里跑的数据拿出来显示把值班员的操作指令发给PLC。整体架构上我采用的是PLC做底层控制核心、组态王做上位监控的两层结构。PLC负责所有输入输出信号的采集和输出组态王通过PPI通信协议读写PLC的存储区。说白了PLC这一层保证就算电脑坏了出料流程也能按原样跑组态王这一层保证人在中控室能看见、能干预、能留记录。这个架构也是目前中小型工控项目里最稳妥的打法成本可控、维护容易、出问题好排查。方案确认过程中也考虑过直接用S7-200 SMART加以太网模块的方案毕竟S7-200停产多年新采购设备基本买不到全新原装。但现场PLC柜里已经躺了一台闲置的S7-200 CPU 226而且厂里其他几条线也在用同款备件通用性很好所以最终决定沿用S7-200只在软件和外围设备上做升级。这个决定也提醒大家设备选型不完全是最新最好就合适和厂里现有技术力量、备件体系匹配才是关键。2. 硬件选型与电气系统搭建2.1 S7-200型号与I/O点表确认既然标题里点名了S7-200选型就直接围绕它来。S7-200这个系列虽然已经停产多年但存量设备保有量极大二手备件、兼容模块都很好找而且它的指令集和编程风格至今仍有大量资料可查。项目现场用的是一台CPU 226这是S7-200里I/O点数最多的常规型号24点输入、16点输出单机最大可带7个扩展模块对我们这个规模的控制系统来说余量充足。先把I/O点表拉出来这一步直接决定选什么型号。点表不是凭空写的是把现场每台设备、每个检测点位列出来挨个对号入座。这个项目输入信号大概有这些序号信号名称类型来源1启动按钮开关量输入现场操作箱2停止按钮开关量输入现场操作箱3复位按钮开关量输入现场操作箱4车辆到位检测1开关量输入地感线圈5车辆到位检测2开关量输入对射光电6料位上限开关量输入阻旋料位开关7料位下限开关量输入阻旋料位开关8出料阀开到位开关量输入阀门限位开关9出料阀关到位开关量输入阀门限位开关10设备热保护反馈开关量输入接触器辅助触点输出信号大概有出料阀开、出料阀关、给料机启动、报警灯、运行指示灯总共5个。这么一算输入10个、输出5个用CPU 22414入10出就能满足。但考虑到以后可能要加装称重模块和更多传感点我最后选了CPU 226留出扩展余地。在实际项目里多留20%到30%的I/O余量是常规操作不然二期改造又要换CPU成本反而更高。2.2 传感器与执行机构选型思路传感器这块车辆到位检测我选了地感线圈加对射光电双冗余的方式。地感线圈埋在装车位地面下车停到准确位置时产生感应信号对射光电装在装车棚立柱上确认车头遮挡。为什么要双冗余单靠地感线圈很容易被旁边的铁皮板房、堆料设备干扰误触发单靠光电又可能有灰尘遮挡、车辆反光造成误判。两个信号按与的关系参与连锁只有同时满足PLC才允许出料稳当很多。当然如果是预算很紧的小项目也可以只用一个对射光电加一个机械限位挡板效果略差但能用。料位计用的是阻旋式料位开关上面一个上限、下面一个下限。之所以没上雷达料位计一是费用高二是在这个场景下我们只关心有料没料、料满没满并不需要连续精确的料位高度数据。阻旋式料位开关结构简单电机带动叶片旋转料堆到位置挡住叶片电机堵转触发微动开关输出开关量信号在粉尘大的环境表现也比较稳。不过要注意安装位置必须避开仓壁的下料冲击区否则料流直接砸在叶片上叶片很容易折断。执行机构这块出料阀用了气动插板阀配电磁阀控制气缸伸缩。为什么选气动而不是电动因为插板阀动作频率低、要求速度快而且现场本来就有空压机气源。气动阀比电动阀便宜结构也皮实出问题维修成本低。给料机用了一台振动电机给料机通过调节振动幅度控制给料速度。这个设备把物料从仓口稳定地喂到车厢里避免一下子全涌出来冒料。2.3 电气回路设计要点电气回路我画的是主回路加控制回路分开的形式。主回路里给料机的三相电源经过断路器QF1、接触器KM1接到电机气动插板阀的电磁阀线圈用220V控制由PLC输出点通过中间继电器驱动。中间继电器这步非常关键S7-200的输出点容量有限直接驱动电磁阀线圈这种感性负载很容易烧触点也不符合电工规范。我的做法是PLC输出点接中间继电器线圈DC24V中间继电器触点驱动电磁阀线圈AC220V中间再加RC吸收器件把感性负载产生的反电动势吸收掉。电源部分也单独说一下。PLC本体用DC24V供电我配了一个开关电源同时给传感器供电。电气柜里强电和弱电分开走线PLC、传感器、中间继电器这侧的24V电源和给料机接触器、电磁阀的220V动力电源在柜内用隔板隔开避免动力侧干扰把PLC干复位。这步容易被忽视但实际调试时很多莫名其妙的故障都跟柜内布线有关后面我会专门讲。还有接地。PLC主机的接地端子、开关电源的接地端、屏蔽线的屏蔽层都要接到柜内独立接地排上接地电阻不大于4欧姆。这不算什么高深技术但不这么做通信和模拟量信号大概率在后期出幺蛾子。3. 控制逻辑设计与梯形图实现3.1 程序结构规划写梯形图之前一定要先把程序结构规划好千万别一上来就画。我的习惯是把程序按功能拆成几个子程序主程序OB1负责调用各个子程序管理运行模式切换手动控制子程序处理单台设备点动用于检修和应急自动出料子程序是核心流程控制报警处理子程序处理料位异常、设备故障、通信超时复位子程序做设备状态初始化。S7-200的编程软件是STEP 7-Micro/WIN。程序采用梯形图LAD编写因为梯形图直观、便于现场维护人员理解国内大多数机修师傅都看得懂这是语句表难以替代的优势。写程序时我先在纸上画出自动流程的状态转换图也就是空闲→就绪→出料→保持→完成这几个状态之间的跳转关系然后再翻译成梯形图。这个习惯帮我少走了很多弯路流程图理顺了梯形图只是翻译工作而已。3.2 自动出料流程的核心逻辑自动出料是这套系统的核心。我把流程捋成一条线启动确认→车辆到位确认→仓内料位确认→开阀→给料机启振→装料中持续监测→达到停止条件→停振关阀→装车完成信号输出。用梯形图或对应的STL语句表实现时我摘几个关键段说明一下。第一段是车辆到位料位正常的综合允许信号网络1 启动条件综合判断 LD I0.0 // 启动按钮 A I0.3 // 车辆到位检测1 A I0.4 // 车辆到位检测2 A I0.6 // 料位下限有料时为1 M0.0 // 运行允许标志这个网络的意思是按下启动按钮、车也到位了、仓里还有料三项同时满足才算运行允许。这里料位下限用了常开触点因为有料时阻旋开关正好导通。实际项目中如果料位开关常开常闭选错了逻辑正好反着所以接线前一定先确认传感器输出逻辑。第二段是出料阀打开和给料机启动的控制网络2 出料阀开 LD M0.0 // 运行允许 AN Q0.1 // 出料阀关输出互锁 AN M0.1 // 停止标志 S Q0.0, 1 // 置位出料阀开实际控制中我用置位/复位S/R指令来保持阀门状态而不是简单的输出线圈。原因很直观气动阀动作到位后开阀信号不能丢用置位指令能保证状态稳定不回扫。给料机的启动可以单独做延时我加了一个0.5秒的TON延时等阀门开到位信号I0.7真实反馈回来再给给料机振动启动信号。这个延时是为了防止阀门没完全打开就给料物料堵在阀口。很多人喜欢用长延时替代阀位反馈这是不对的阀卡住的时候延时到了照样给料照样堵。有阀位反馈的日子调的就是反馈本身。第三段是达到停止条件的处理。停止条件分几种情况人为按停止按钮车辆突然离开车到位信号消失料位下限报空累计装车时间到设定值定时定量。网络3 停止条件汇总 LD I0.1 // 停止按钮 O T37 // 装车时间到 O M0.5 // 料空报警标志由料位下限取反得出 S M0.1, 1 // 置位停止标志定时定量这个功能用的是TON定时器T37设定时间可以根据每车方量在现场用组态王直接改通过PLC的VW存储区通信不用重新下载程序。这个点我要强调一下很多项目做定时定量都硬编码在程序里改一次参数就得连电脑下载一次工作效率极低。把定值放到VW区用组态王绑定上值班员在画面上输入数值就行这是很实用的做法。3.3 互锁与保护逻辑互锁和保护这部分是控制系统的安全底线马虎不得。第一层保护是急停回路急停按钮用常闭触点接到PLC输入程序里串联在输出使能母线上。急停一按下不允许任何输出动作已启动的设备立刻停止。这里有个细节急停信号不能只用软件逻辑处理最好同时切断控制回路的电源。我在电气回路里用中间继电器做了硬接线急停按下急停按钮直接断开接触器和电磁阀的电源比PLC软件响应快得多这是安全回路的标准做法。第二层保护是阀门开到位/关到位互锁。程序里控制阀门开输出和控制阀门关输出在任何情况下都不允许同时得电。我在梯形图里做了软件互锁开输出的常闭触点串在关输出的线圈回路里硬件上又做了中间继电器触点互锁双保险。这套双保险用在气动阀上特别重要一旦开阀、关阀同时通电气缸两腔同时给气轻则阀不动重则憋坏气缸。第三层保护是运行中车辆离开的连锁。正常情况下允许出料的同时车到位信号必须一直保持。一旦装料过程中车辆突然前移或后溜PLC要在100毫秒内停止出料动作避免物料撒到车厢外。这个逻辑用常开触点串联在运行允许回路里就能实现关键是响应速度不能慢。S7-200一个扫描周期才几毫秒到几十毫秒完全够用。顺带提一句现在有些AI工具能帮你生成PLC代码片段我试过一次拿来做简单逻辑参考还可以但直接下到现场跑是绝对不行的。工控代码的边界条件和安全联锁非常讲究AI生成的代码往往缺少这些关键细节只能当灵感来源用不能当交付代码用。4. 组态王监控界面与数据词典4.1 工程创建与设备配置组态王这边我用的版本是6.55这是目前国内中小型项目里非常普及的版本稳定性和资料丰富程度都经过验证。新建工程后第一步是定义设备。组态王的设备配置路径是工程浏览器→设备→COM1→新建然后选择PLC→西门子→S7-200系列→PPI。这里有个容易踩的坑组态王6.55对S7-200的PPI通信实质上是走串口COM口不是以太网。所以必须先在Windows里把USB转PPI电缆的驱动装好认到正确的COM口号。注意组态王里的COM参数要和PLC侧完全一致波特率9600或19200数据位8停止位1偶校验从站地址2S7-200默认站号通信超时设3000毫秒左右。很多人上来就通信失败十有八九是波特率或者校验方式两边没对上。设备定义完成后组态王的设备列表里会出现一个PLC_200之类的设备名后面定义变量时都要引用它。我在设备配置的时候就顺手把通信测试跑通了用的是组态王自带的测试功能直接读PLC的一个寄存器值。这一步别跳过测试通过了再往下做画面能省很多事。4.2 数据词典变量定义变量定义是组态王和PLC沟通的翻译表。在数据词典里新建变量每定义一个变量都要指定变量名、变量类型I/O离散、I/O整数等、连接设备、寄存器类型、寄存器地址、数据类型、读写属性。举个例子PLC里控制阀门开的输出点是Q0.0那组态王这边定义一个I/O离散变量出料阀开连接设备选PLC_200寄存器选Q寄存器地址填0数据类型Bit允许读写。这样一来组态王画面上的按钮就可以直接操作这个变量实现远程手动开阀。组态王变量名类型寄存器地址读写对应PLC点出料阀开I/O离散Q0读写Q0.0出料阀关I/O离散Q1读写Q0.1给料机启动I/O离散Q2读写Q0.2车辆到位I/O离散I3只读I0.3料位下限I/O离散I6只读I0.6装车时间设定I/O整数VW100读写VW100当前装车时间I/O整数VW102只读VW102这里要注意寄存器的地址对应关系S7-200中I区对应组态王的寄存器类型IQ区对应Q位存储区M对应MV区对应V。V区的字变量在组态王里要特别留意高低字节问题。组态王对S7-200 VW的读取通常用寄存器V数据类型SHORT来处理。如果发现组态王读出来的数值跟PLC里的不一致比如数值偏大很多倍那多半是寄存器地址偏移或者字节序没匹配上。4.3 画面组态与脚本画面组态这步工作量最大但技术难度不算高。我做的主监控画面包含这么几个区域料仓轮廓用图库里的灰斗图形用动画连接绑定料位变量料位变化时仓体填充颜色跟着变直观显示仓内余量出料设备区阀门、给料机的图形用动画连接绑定Q0.0、Q0.2等变量设备运行时图形闪烁或变色装车信息区当前装车时间、设定时间、历史装车次数的文本显示和输入框报警区料位上下限报警、设备故障报警的指示灯操作区自动启动、自动停止、急停、模式切换按钮。画面组态的具体操作路径是新建画面→在画面上拖入图库元件→双击元件打开动画连接对话框选择对应的变量和动作类型。比如阀门图形要闪烁就绑定闪烁属性到出料阀开变量值为1时闪烁。脚本这块我用了组态王的应用程序命令语言做了一小段逻辑当画面启动时自动初始化设定时间、清空报警列表、刷新当日累计装车数。还有一个数据改变命令语言绑定了装车时间设定变量当值班员在画面输入新的时间值时自动写入PLC的VW100寄存器。这么做的好处是组态王这边能动的逻辑尽量在脚本里处理PLC程序不用频繁改动两边解耦维护成本低。报警配置也值得多提一句。组态王的报警系统可以按变量定义报警条件比如料位下限变量为1时触发仓料空报警为0时恢复正常。报警会记录到实时报警窗口和历史数据库里可以查询、打印。项目完工后值班员用这个功能查每天的停机报警记录排故障效率提升很明显。组态王里如果发现报警记录时间不对通常检查系统时间和PLC时间同步问题这个也属于常见小坑。5. 通信配置与现场联调5.1 PPI通信参数设置通信这块是S7-200和组态王联动的命门。S7-200默认的通信协议是PPI采用主从方式PC端是主站PLC是从站。要用PC的串口和PLC通信通常需要一根USB-PPI编程电缆或者老式的RS232-PPI电缆。我用的是USB-PPIWindows会虚拟出一个COM口。关键参数按下表设定两边必须一致参数PLC侧Micro/WIN组态王侧协议PPIPPI站地址2从站2波特率9.6 kbps9600数据位88校验方式偶校验偶校验停止位11通信超时默认3000msPLC侧的参数可以在STEP 7-Micro/WIN的系统块里设置设置后要下载到PLC才生效。很多人忽略的是PLC的站地址可以在程序里通过特殊继电器修改。一个PPI网络上如果挂多个PLC站地址不能重复这是基本规则。5.2 联调步骤与顺序联调时我习惯按先本地后远程、先点动后自动、先软件后通信的顺序推进。第一步不带组态王单独验证PLC逻辑。用STEP 7-Micro/WIN的状态表监控I/O点和中间变量手动模拟输入信号看输出是否正确动作。这一步先确保PLC本身没问题否则后面组态王连上来了故障定位会非常痛苦。第二步硬接线检查。逐个强制Q输出确认中间继电器、接触器、电磁阀动作正常确认阀门的开/关限位信号真实有效。这个环节要小心强制输出前一定确保现场人员撤离设备区域并挂检修警示牌。设备安全不是小事宁愿多花10分钟检查也不要冒安全风险。第三步组态王与PLC通信测试。在组态王上定义一个测试整数变量绑定PLC里的VW102当前装车时间在画面放个文本显示。如果文本能实时刷出PLC的数据说明通信通了。如果读不出来优先检查COM口号、波特率、校验位再看PLC站地址是否被占用。第四步画面与PLC联动测试。在画面上点出料阀开按钮观察PLC端Q0.0是否输出同时看现场阀门是否动作。组态王画面上的状态反馈、报警信息、实时数据曲线每个都验证一遍。这里有个小技巧联调时找个人站在设备旁边通过对讲机跟你配合你点在组态王画面上他看现场实际动作两边同步确认比你自己跑上跑下高效得多。5.3 通信故障排查链路通信故障是S7-200加组态王最常见的劝退问题我把排查链路完整写出来这条链路也被我写进了项目文档交付给现场电气人员。第一步确认物理连接USB-PPI电缆插好没有电脑设备管理器里COM口号是多少PLC的PPI口是哪一个S7-200 CPU上有两个通信口默认是PORT0。这一步排查掉80%的低级问题。第二步确认波特率匹配用STEP 7-Micro/WIN里的通信设置去检测PLC。如果电脑能连上PLC说明物理链路和波特率没问题问题在组态王这边如果电脑也连不上先折腾编程电缆和PLC端。第三步检查组态王设备配置设备地址、COM口号、波特率、校验位、数据位、停止位各项都要和PLC侧一致。第四步检查变量定义寄存器类型、地址、数据类型。比如PLC的输出是Q0.0组态王变量定义成I0.0那肯定读不对。第五步检查PLC程序是否启用了自由口模式或其他通信协议。S7-200如果用了自由口通信指令XMT/RCV会占用通信口PPI通信就受影响。这步写在最后是因为它最隐蔽一般排查不到这一步才会考虑它。6. 调试中踩过的坑与改进方案6.1 料位开关在粉尘环境下的误动作这个坑是最早暴露的。阻旋式料位开关在水泥仓这种高粉尘环境里叶片转动部位容易积灰导致电机阻力增大叶片转速变慢甚至卡滞微动开关误触发PLC收到假料位信号出料流程被误停。解决方法是双管齐下第一把阻旋式料位开关换成防护等级更高、叶片更宽的型号减少粉尘附着第二在PLC程序里对料位下限信号做延时确认——料位下限信号持续5秒有效才认定为真的料空瞬时抖动直接忽略。这个5秒延时用TON定时器实现很简单但效果非常明显。6.2 组态王通信偶尔超时跑了一个星期后值班员反馈组态王画面数据偶尔卡住不动过十几秒又自己恢复了。排查下来发现是USB-PPI电缆在电柜里有干扰。电缆走线离变频器动力线太近变频器启停瞬间的电磁干扰打到了通信线上。处理办法把USB-PPI电缆的屏蔽层接到电柜接地排电缆走线避开动力线重新整理整个柜内布线。改完后连续运行一个月没有再出现通信超时现象。这个经验再次印证了我前面说的——柜内布线和接地在工控项目里不是小事是稳定性的基础。6.3 车辆检测地感线圈误触发地感线圈装好后一开始还行但过了一段时间空车经过装车位旁边也触发了到位信号。查下来发现是地感线圈的灵敏度调太高检测范围超出了预定区域旁边车道的车经过也会感应到。解决办法在地感检测器的面板上把灵敏度等级降了两档同时把程序中车辆到位信号加入了持续1秒以上才有效的延时判断相当于给信号加了滤波。调整后误触发再没出现过。这里提醒一下地感线圈的灵敏度不是越高越好一定要结合现场的实际车道宽度和车辆间距来标定否则后期误触发会让人抓狂。6.4 阀门开关时间不一致导致流程卡住自动流程偶尔出现卡在开阀后不给料的状态排查发现是出料阀的开到位和关到位限位信号都正常但阀门的实际开关时间有偏差。开阀动作明显比关阀慢原因是气缸进气侧的节流阀调节不当进气流量比出气流量小很多导致开阀时间达到了程序设计里限定的最大等待时间程序判定阀门超时进入报警状态停止往下走。最后把气缸的节流阀重新标定让开阀和关阀的时间都控制在2到3秒的合理范围内同时把程序里的阀门等待超时从10秒放宽到15秒给实际工况留出余量。这里要说的是程序设计中的超时保护不是越短越好要根据现场设备的实际动作时间设定留够正常波动空间不然容易误判故障。6.5 几个可以快速复用的改进思路这套方案做完后结合现场反馈我整理了几条改进方向供参考。增加称重传感器目前是定时定量如果现场对装车量要求更精确可以加装车辆地磅或者料斗秤用重量信号作为停止条件精度比时间控制高一个量级。PLC扩展一个模拟量模块如EM231接称重传感器变送器的4-20mA信号组态王再绑定重量变量做实时显示和记录。增加远程报表功能组态王的报表功能可以自动生成每个班次的装车产量、设备运行时长、报警统计配合数据库存储能形成完整的生产台账。组态王6.55的ODBC接口可以直接对接MySQL热词里提到的用Navicat连接MySQL管理数据这个需求现在越来越普遍报表面向管理人员展示比传统Excel汇总省力太多。预留以太网升级通道如果现场有网络环境可以把S7-200的PPI口换成以太网模块CP243-1组态王走TCP/IP通信布线更灵活传输距离更长。要是新项目直接从零开始直接上S7-200 SMART加以太网是最省心的。S7-200停产多年备件成本在涨新项目建议优先考虑200 SMART或者1200系列。这套基于S7-200 PLC和组态王的物料传送系统货车装料仓出料自动化方案从项目落地到稳定运行我最深的体会是工控项目没有什么玄学稳定可靠全靠每一个细节的较真。硬件选型留余量、程序逻辑做互锁、通信参数两边对齐、柜内布线规范、信号延迟滤波这些看起来都是基本功但真正能把每一项都做扎实的项目后期运行就是省心。如果你正准备做类似的小型出料自动化项目我建议先把设备动作时序和联锁保护想清楚再动手画梯形图最后才做组态画面这个顺序不能乱。最后分享一个我们内部一直用的检查习惯每次改完PLC程序必须在Micro/WIN里做一次编译加交叉引用检查确认没有重复输出、没有未定义变量每次改完组态王画面必须用组态王的运行系统自带调试工具跑一遍变量刷新再交付给现场。还有一点所有最终版本的PLC程序和组态王工程一定要做好备份命名带上日期和版本号。这个习惯能帮你避免很多昨天还好好的今天不知道谁改了什么的尴尬。就这些希望对你有用。