ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于S7-200 PLC与组态王的洗衣机控制系统设计

基于S7-200 PLC与组态王的洗衣机控制系统设计 洗衣机这个东西看起来简单真正做控制系统的人才知道里面的门道。这次我完整落地了一套基于S7-200 PLC加组态王的洗衣机控制系统既能用在工业洗涤设备上也能缩到家用场景跑逻辑核心架构完全通用。S7-200是西门子非常经典的微型PLC组态王则是国内工控圈用得最广的组态软件之一这两者组合起来PLC管底层逻辑和现场信号组态王管画面、数据和操作一套可长期运行的控制系统就成型了。这篇文章我就把整个构建过程拆开讲从选型依据、I/O分配、梯形图实现到组态王画面配置再到联调踩坑全部按实际操作记录。1. 项目概述与系统架构设计1.1 为什么选 S7-200 和组态王这个组合先说选型。市面上做洗衣机控制的方案不少单片机、普通继电器电路、变频器加触摸屏都有但为什么我坚持用PLC加组态王核心原因就三个字可靠性。S7-200虽然已经算是老型号但它在微型PLC里的地位至今没有被完全替代尤其是在中小型单机设备上。它的指令执行速度快、定时器计数器资源充足、I/O扩展灵活CPU 226本体自带40个数字量点还可以挂EM223扩展模块对我们这套系统来说I/O余量绰绰有余。更关键的是S7-200的抗干扰能力比单片机方案强得多洗衣机现场有电机启停、电磁阀动作、加热器通断这些都会产生很强的电磁干扰PLC光耦隔离加RC吸收电路的设计天生就是为这种场景准备的。组态王这边说白了它就是一套运行在PC上的上位机组态软件负责画出操作界面、连接PLC数据、记录历史趋势、弹出报警。它的优势在于上手门槛低、图库丰富、通信驱动成熟。做过项目的人都知道最怕上位机软件不稳定组态王在国内工业现场跑了二十多年驱动库覆盖几乎所有主流PLC稳定性和兼容性经过了大量验证。这个组合的逻辑分工非常清楚PLC管能不能动、怎么动组态王管让人看得清、操作得顺。底层逻辑不会因为上位机死机而失控这是它跟一切依赖电脑的方案最本质的区别。1.2 洗衣机控制系统的整体架构整套系统分成三层现场设备层、控制层、监控层。现场设备层包括进水电磁阀、排水电磁阀、洗涤电机实现正反转、水位开关高低水位两段、温度传感器PT100、加热器带过热保护、门锁开关、蜂鸣器。这些设备全部通过端子接入PLC的数字量或模拟量通道。控制层是S7-200 CPU 226它负责运行完整的洗涤流程状态机。所有现场信号在这里汇合所有输出指令也由这里发出。我选用继电器输出的CPU型号因为要直接驱动220V交流接触器线圈和电磁阀继电器输出带负载能力强耐压高而且成本可控。监控层就是装了组态王的PC通过PPI协议或者Modbus协议和PLC通信实时读取运行状态、水位、温度、当前步骤操作员可以在屏幕上选择洗涤模式、设定温度、启动停机还能查看历史报警和曲线。整个架构其实就一句话PLC做心脏组态王做脸面。任何一个环节出问题都能定位不会出现互相甩锅的情况。1.3 I/O点表设计与硬件选型动手写程序之前必须先把接线图想清楚。洗衣机的控制逻辑不算复杂但I/O点分配不合理后面调试会非常痛苦。我列的这套点表兼顾了功能完整性和扩展性信号类型点位说明对应设备数字量输入I0.0启动按钮常开自锁后复位数字量输入I0.1停止/急停常闭断开即停数字量输入I0.2门锁开关门盖闭合才允许运行数字量输入I0.3低水位开关进水到低水位数字量输入I0.4高水位开关进水到高水位数字量输入I0.5加热器过热保护常闭数字量输出Q0.0进水电磁阀220VAC数字量输出Q0.1排水电磁阀220VAC数字量输出Q0.2洗涤电机正转接触器220VAC数字量输出Q0.3洗涤电机反转接触器220VAC数字量输出Q0.4脱水输出220VAC数字量输出Q0.5加热器接触器220VAC数字量输出Q0.6蜂鸣器/运行指示灯220VAC模拟量输入AIW0温度传感器PT100经EM231模块转换S7-200 CPU 226本体没有模拟量通道所以我挂了一个EM231模拟量输入扩展模块PT100经温度变送器转为4-20mA信号接入这样做的好处是抗干扰能力强远距离传输衰减小。这步看起来琐碎但这是整个项目的骨架。点表确认之后接线、写程序、配组态王全都有据可依我见过太多人跳过去直接写梯形图结果调试时发现点重了、模块选错了返工工程量非常大。2. PLC 程序设计从状态机到梯形图2.1 洗涤流程状态机设计洗衣机程序的本质是状态机。洗涤过程无论如何变花样都逃不出进水→洗涤→排水→脱水这个循环只是不同模式在时间、温度、循环次数上有差异。我把整个流程拆成六个状态待机状态S0初始上电等待启动信号进水状态S1打开进水阀水位到了按模式进入洗涤或加热加热状态S2部分模式需要加热到设定温度到达后停止加热洗涤状态S3电机交替正转、反转中间有停顿持续设定时间排水状态S4打开排水阀水位降到低水位以下或者排水时间到脱水状态S5启动脱水输出同时排水阀保持打开持续设定时间每个状态用PLC的M继电器做标志位状态之间转换靠触点条件和定时器配合。这套逻辑的好处是每个时刻只有一个状态处于运行状态程序思路清晰调试的时候看M继电器的状态就能判断当前跑到哪一步。状态转换的关键规则有这么几条任何状态下按下停止都必须回到待机状态运行中途门锁打开立即停止洗涤电机和加热器保留当前水位关掉进水阀排水不到位不允许进入脱水加热器的启动条件是水位已经到高水位、门锁闭合、当前温度低于设定温度。2.2 梯形图核心逻辑实现S7-200的编程软件是STEP 7-Micro/WIN老用户都很熟新的Smart系列已经换成了Micro/WIN SMART但指令基本兼容。以下我直接用STL指令形式把关键段逻辑列出来方便大家对照理解实际上在梯形图里也就是对应的触点线圈。首先是状态转换的启动部分// 待机状态 - 进水状态 LD M0.0 // 待机标志 A I0.0 // 启动按钮按下 A I0.2 // 门锁闭合 AN M0.1 // 防止重复切换 S M0.1, 1 // 置位进水状态 R M0.0, 1 // 复位待机状态进水状态的核心逻辑是如果水位没有到高水位就一直打开进水阀当过温保护或门锁断开时强制关闭。水位到高水位之后根据模式跳转到加热状态或者直接跳洗涤。// 进水状态逻辑 LD M0.1 // 进水状态 AN I0.4 // 高水位未到位 A I0.2 // 门锁闭合 Q0.0 // 打开进水阀 LD M0.1 // 进水状态 A I0.4 // 高水位到位 S M0.2, 1 // 进入加热状态 R M0.1, 1 // 退出进水状态洗涤状态的正反转控制是重点。洗衣机电机不能直接长时间正转或反转必须正转若干秒、停顿若干秒、再反转若干秒这样不仅衣物翻滚均匀也保护电机和传动机构。我设置的参数是正转5秒、停2秒、反转5秒这个节奏对大多数布草洗涤效果都合适。用定时器T37计正转T38计停顿T39计反转三个定时器互相接力。核心梯形图段如下// 洗涤正转 LD M0.3 // 洗涤状态 A T38 // 停顿结束 AN T37 // 正转计时未满 Q0.2 // 正转输出 LD Q0.2 TON T37, 50 // 5秒正转 // 洗涤停顿 LD M0.3 A T37 // 正转时间到 AN T38 M0.4 // 停顿标志 LD M0.4 TON T38, 20 // 2秒停顿 // 洗涤反转 LD M0.3 A T38 AN T39 Q0.3 // 反转输出 LD Q0.3 TON T39, 50 // 5秒反转 // 循环复位 LD M0.3 A T39 R T37, 3 // 复位三个定时器这里有个细节定时器的触点和输出线圈在同一网络里反复引用要注意S7-200的扫描周期特性。定时器输出状态在整个扫描周期里保持一致不会出现竞态但如果你把定时器放在不同的网络且逻辑交叉过多可能会导致一个周期内定时器启停不稳定。我的做法是把正反转输出的辅助标志单独处理逻辑更清爽。洗涤总时长用T40累计洗涤状态有效时就计时时间到了就切换到排水状态。T40的定时范围最大是3276.7秒如果设定长时间洗涤需要用计数器做累加或者直接拆成多个定时器接力我在实际程序里用的是计数器累加每30秒加一次计数。2.3 温度控制与模拟量处理有加热功能的洗衣机温度控制是个绕不过去的坎。S7-200通过EM231读取PT100变送器送来的4-20mA信号AIW0的原始值范围是0-32000对应4-20mA。换算公式很简单温度 (AIW0 / 32000) * 量程 下限。假设量程是0-100°C那么// 温度工程量换算 LD M2.0 // 温度采集使能 MOVW AIW0, AC1 // 读取原始值到AC1 ITD AC1, AC1 // 转为双整数 DTR AC1, AC1 // 转为实数 *R AC1, 0.003125 // 除以32000得到百分比 *R AC1, 100.0 // 乘以量程100 MOVR AC1, VD100 // 存放到变量加热器控制采用简单的滞环控制。滞环的意思就是设一个回差防止温度在设定点附近反复启停加热器这是PID调节之外最简单也最可靠的控温方式。设定温度为60°C回差5°C则温度低于55°C时加热器投入温度达到60°C时加热器断开。逻辑如下// 加热控制 LD M0.2 // 加热状态 A I0.2 // 门锁闭合 AN I0.5 // 过热保护正常 LD M2.1 // 温度低于下限 O M2.2 // 保持条件已投入 ALD A M2.3 // 温度未达到设定 Q0.5 // 加热器输出这个滞环逻辑解决了温度PID波动大的问题。搜过PLC温度PID波动温差大如何调节的朋友应该深有体会洗衣机这种热惯性很大的对象PID参数调不好温度会来回振荡加热管反复通断反而影响寿命。滞环控制牺牲了一点温度精度换来的是稳定和耐用在家电和工业洗涤场景里完全够用。2.4 停机保护逻辑所有自动控制系统都必须考虑安全洗衣机也不例外。我单独写了一段安全联锁逻辑不受状态机控制只要条件不满足就强制关停输出。// 安全联锁 LD I0.1 // 停止按钮常闭 O I0.2 // 门锁断开 ON M0.7 // 运行中标志 M9.0 // 安全条件 LD M9.0 AN I0.2 Q0.5 // 强制切断加热器同时门锁断开时如果电机还在转必须立即切断正反转输出。为了防止排水状态下门锁被强行打开导致脱水事故我还在程序里加了门锁状态锁定功能一旦进入脱水状态门锁信号就被程序置位锁定必须停止流程并重启电源后才能解除。这是工业洗衣机的标准安全要求家用滚筒洗衣机也有类似机制但用PLC实现得非常干脆。3. 组态王人机界面开发3.1 组态王工程搭建与变量建立组态王KingView配置流程分四步建立工程、配置I/O设备、建立变量、设计画面。先从工程管理器里新建工程设置工程名称和保存路径。新建完成以后双击工程名进入开发系统。在开发系统里第一步是配置I/O设备也就是告诉组态王PLC是什么、走什么协议、IP地址或者通信口参数是什么。S7-200和组态王常用的通信方式有三类一是通过PPI协议连接PC串口和PLC的Port 0口二是通过PC/PPI编程电缆走PPI三是通过第三方协议比如Modbus RTU需要先给PLC下载Modbus从站程序。我这次走的是PPI方式因为S7-200的PPI协议通信最稳定组态王自带S7-200 PPI驱动。设备配置界面里选择PLC → 西门子 → S7-200系列 → PPI然后设置串口参数。S7-200的PPI默认站地址是2波特率96008数据位偶校验1停止位。这些参数必须和PLC侧Micro/WIN里的设置完全一致否则通信直接失败。我在实际调试中吃过亏PLC侧默认是9600组态王某个版本默认是18750两边对不上折腾了半天才发现。变量建立是组态王的核心操作。变量分两类I/O变量与PLC实时交换数据和内存变量组态王内部使用。我的变量表长这样变量名变量类型数据类型连接设备寄存器启动按钮I/O离散BoolPLCM0.0停止按钮I/O离散BoolPLCM0.1运行状态I/O离散BoolPLCM0.7当前水位I/O离散BoolPLCI0.4洗涤温度I/O实数FloatPLCVD100加热器输出I/O离散BoolPLCQ0.5注意组态王对西门子的寄存器地址描述有自己的格式比如M0.0写成M0.0、VD100写成VD100但更老版本的驱动会要求你精确到字节地址比如VW100表示字变量、VD100表示双字变量。配置前多看驱动说明否则变量通信质量会极差。3.2 画面设计与动画连接组态王的画面开发系统里一个洗衣机监控界面通常包含这些元素洗衣机罐体简图、水位动态显示、温度数字显示、当前步骤文字提示、启动/停止按钮、模式选择下拉框、报警指示灯。从图库里拖一个水箱图形当洗衣机内筒双击图形进入动画连接设置。水位动态显示用填充动画连接变量是水位百分比这个百分比怎么算呢我组态王页面里专门放了一个内存变量表示水位百分比由PLC程序通过通信写入PLC侧每周期根据高低水位开关状态更新这个值低水位时给30%高水位给80%排水完成后给5%。这样画面就能直观看到当前水位。电机正反转的动画连接用旋转动作。正转时图形按顺时针旋转反转逆时针停止时静止。旋转角度参数我设为每秒钟转15度配合PLC的正反转节奏视觉上就很接近真实洗衣机的内筒运动。温度显示更简单直接放一个字符串显示元件连接VD100变量显示格式设置成一位小数再配一个温度趋势曲线控件。趋势曲线可以实时显示温度变化过程对调试加热逻辑帮助非常大我在联调时靠它一眼就发现了滞环回差设置不合理带来的温度过冲问题。按钮的动画连接要特别注意按下触发和弹起触发的区别。启动按钮应该配置成按下时置位M0.0弹起时复位M0.0这样PLC只检测到一次完整的启动脉冲。很多人直接配成按下时置位忘了复位结果PLC那边启动按钮信号一直被读成1状态机一直在启动、复位之间跳来跳去。3.3 报警与曲线功能配置组态王的报警系统配置分三步先在数据词典里给变量设置报警限值和报警优先级然后在开发系统里建一个报警窗口最后在运行系统里打开报警窗口报警事件就会实时滚动显示。我重点配置了几类报警温度上限报警比如超过95°C立即高优先级报警、加热器故障报警过热保护动作、门锁异常报警、通信故障报警。通信故障报警是组态王自带功能在设备配置里设置通断测试和离线诊断超过一定采样周期没有收到PLC数据就判定通信故障界面弹出红色提示。这个功能在项目交付后维护时特别好用用户打电话说界面不动了远程一看就知道是不是通信断了。历史趋势曲线和实时曲线都要配。实时曲线看当前数据历史曲线用来复盘比如用户反映某一次洗涤温度没达到翻历史曲线就能知道是加热器没工作还是加热时间不够、还是温度设定被误改了。组态王的历史数据存储在工程目录下的History文件夹默认按数据变化记录可以设定存储触发方式和间隔不建议每条都存数据量太大后期查询也慢。4. 通信配置与系统联调4.1 S7-200 与组态王通信参数核对做联调第一件事不是通电而是把三处通信参数对着检查一遍PLC侧Micro/WIN的通信配置、组态王的设备配置、PC串口或USB转串口驱动。S7-200 PLC侧的PPI参数在Micro/WIN的Communications里设置PLC站地址2、波特率9600、偶校验。组态王设备配置里同样设置站地址2、波特率9600、偶校验协议选PPI。串口参数里数据位8位、停止位1位固定不变。如果用的是USB转PPI编程电缆注意驱动安装后出来的串口号可能在COM3以上组态王默认只显示COM1-COM16如果串口号超出范围需要先在设备管理器里改成COM8以下。改串口号是个小操作但调试现场真的遇到过因为忘改导致通信不上而干着急半小时的情况。参数确认无误后先在组态王的设备管理里做通信测试。测试通过后打开运行系统看画面上的变量值是否有变化。如果通信还是不通用串口调试助手抓数据看看有没有帧头字节。正常的PPI报文帧头是68Modbus RTU是01两种协议完全不一样一看就知道问题出在哪一层。4.2 联调实施步骤联调我按照三步走单点测试、流程测试、故障模拟。单点测试是指对着点表逐一验证。比如在组态王画面按下启动按钮PLC侧观察M0.0是否置位从PLC侧强制Q0.0置位组态王画面上的进水阀指示灯是否变绿。这一步把通信链路和数据映射全部确认完再往下走就没有通信的干扰因素了。流程测试就是跑完整的洗涤流程。我先把洗涤时间参数全部缩短到正常值的十分之一正反转改1秒、停顿改0.5秒这样能快速跑完一个循环确认状态机切换没有死锁。流程测试时组态王画面全程打开盯着水位填充和温度曲线任何一步切换异常立刻记录下来。故障模拟是最容易被人省略的环节但我建议必做。模拟门锁在脱水时突然断开PLC应该立刻输出停机模拟高水位开关失效进水阀应该在超时保护后关闭并报警模拟温度传感器断线AIW0读数会跳满量程这时候PLC要判断数据异常不能把满量程当实际温度继续加热。S7-200的模拟量断线检测可以通过判断AIW读数是否接近满量程实现我在程序里加了这么一段// 温度传感器断线检测 LDW AIW0, 31000 // 满量程92%以上 M5.0 // 断线标志 R Q0.5, 1 // 强制关加热4.3 参数整定与效果验证温度滞环回差我最后定为5°C这个值是反复试出来的。回差太小比如2°C加热管启动频率太高继电器触点和可控硅温度压力都大回差太大比如10°C温度波动明显洗涤效果差。5°C在60°C设定点附近产生的温度波动范围是55-60°C对洗涤酶活性来说完全可接受。洗涤节奏正转5秒停2秒反转5秒我实际测试了不同负载量下的效果空载时内筒转动惯量小停顿2秒足够满载时衣物贴壁后反转阻力大停顿时间要适当延长到3秒才舒服。最后我在程序里把停顿时间做成可调参数放到V区组态王画面上加了个输入框用户可以根据实际使用情况调整这是个很实用的优化。系统整体跑下来从启动到一次完整洗涤循环洗涤15分钟含排水脱水大约16分钟PLC扫描周期不到10毫秒组态王画面刷新延迟在200毫秒以内操作响应没有迟滞感。这个指标对洗涤设备来说完全够用。5. 常见问题与排查技巧实录5.1 组态王和PLC通信不上这个问题出现的频率最高我遇到的绝大多数情况都是下面几个原因造成的现象可能原因解决办法组态王报警设备无响应串口号错误或波特率不一致核对设备管理器串口号PLC侧和组态王波特率都设为9600通信时断时续USB转串口线质量差换带隔离芯片的转换线避免用十几块的免驱线PPI测试成功但画面数据不变变量寄存器地址映射错误检查变量定义里寄存器类型和偏移量重新对照点表通电后首次连不上稍等能连上PLC侧通信口被Micro/WIN占用Micro/WIN监控时组态王无法同时通信关闭Micro/WIN在线功能还有一个坑是PLC通信口被冻结。S7-200在运行状态里Port 0被某些程序指令占用时PPI通信就会失效。排查方法是切到STOP模式看组态王是否能恢复通信能恢复就说明程序里有指令动了通信口。5.2 水位信号误触发与进水不止水位开关用的是机械式浮球开关这种开关在进水管水流冲击下会产生抖动导致水位信号反复变化。PLC读高水位后进入洗涤状态浮球因为水流波动瞬时断开程序又退回进水状态就会出现进水不止。我处理的办法是在程序里给水位信号加了延时确认。高水位信号必须连续存在500毫秒才确认到位低水位信号连续存在300毫秒才确认排空。延时滤波用定时器实现比上位机滤波可靠得多。5.3 电机正反转切换冒火花洗涤电机正转切反转的时候如果不加停顿接触器在极短的时间内通断电弧和冲击电流都很大。这个问题在设计阶段就考虑进去了正转输出断开后停顿2秒才允许反转接通。实际操作中我把正转接触器的辅助常闭触点串到了反转接触器线圈回路里做硬件互锁就算PLC程序出Bug两个输出同时为1硬件上也绝对不会出现两台接触器同时吸合的短路情况。这是从一次现场设备烧损事故里学来的教训硬件互锁永远省不掉。5.4 S7-200 程序下载失败Micro/WIN下载程序失败大多数原因是通信参数不匹配或者PLC处于RUN状态且设置了密码保护。比较隐蔽的一个问题是Micro/WIN里通信超时时间设置太短对于程序量稍大的项目下载过程可能超过默认超时时间。解决办法是在通信设置里把超时时间从默认值调大实测调到30秒就从未再出问题。6. 实战心得与扩展思考这套系统做完之后我反而更认同一句话工业控制的难度不在于某个单点技术有多高深而在于把每个环节的可靠性都做到位。PLC程序再漂亮组态王画面再华丽一个水位信号抖动就能让你前功尽弃。所以我在整个项目里最强调的就是滤波、互锁、延时确认这些看起来不起眼、实际上保命的东西。后续如果做功能扩展有几个方向很值得尝试。一是把加热控制换成真正的PID控制但要做好PID参数自整定避免在热惯性大的对象上出现振荡二是增加变频器控制洗涤电机实现低速洗涤和高速脱水的平滑过渡这时候需要用S7-200的USS协议和变频器通信程序改动不大但对洗涤效果的提升是质的三是把组态王换成网页版数据发布让用户可以远程查看设备状态这个思路需要加一个网关设备把PLC数据转换成MQTT协议和手机端联动。洗衣机控制系统是个看似普通但五脏俱全的项目从头到尾做一遍对PLC编程、组态软件、通信协议、电气接线的理解都会上一个台阶。最后分享一个我在调试时养成的小习惯每次修改程序或组态王画面都保留一份带日期的备份版本并记录修改了什么、为什么改。项目交付后用户反馈问题翻这些记录能快速回忆起当时的设计思路省下的时间远远超过备份那几秒钟。做自动化这行持久地靠谱比短暂地聪明重要得多。
返回列表