公司动态

PLC板全链路解析:梯形图、变频器通讯与上位机采集排障

📅 2026/8/27 5:19:28
PLC板全链路解析:梯形图、变频器通讯与上位机采集排障
前阵子帮朋友处理一台老设备故障是“新换的PLC板频率显示不准变频器转起来了触摸屏上的数字却一直不对”。打开控制柜一看接线没问题程序看着也没问题最后折腾了半天才发现是三菱FX系列的RS485通讯参数里停止位设成了2位变频器那边配的却是1位。这种问题从集成商到维修工谁都会撞上但很少有一篇文章能把PLC板从硬件选型、梯形图编程一直讲到通讯采集和现场排障串成一条完整的知识线。我从业这些年接触最多的就是“PLC板”这个级别的设备——从三菱FX2N/FX3U、西门子S7-200 SMART到国产汇川、台达再到倍福这类软PLC一体板。今天这篇我把自己实际调试中积累的、最容易被问到的内容整理出来尽量用项目现场的视角讲透一块PLC板到底里面是什么、怎么写程序、怎么跟变频器伺服通讯、上位机怎么采集数据、以及现场碰到的各种稀奇古怪的坑。适合刚入门的电气工程师、做上位机开发的IT朋友以及正在做PLC相关课程设计的学生参考。1. 一块PLC板到底装着什么——从板级硬件理解可编程逻辑控制器1.1 为什么管它叫“板”不叫“控制器”很多人第一次看到PLC板时会很困惑这不就是一块电路板吗跟单片机开发板有什么区别确实从外观上看PLC板就是一块集成了主芯片、电源、接口和端子排的电路板但它的价值不在于硬件本身而在于它内置的扫描式运行逻辑、成熟的编程环境以及工业级的抗干扰设计。可编程逻辑控制器Board这个叫法更多是相对于“整机式PLC”和“模块式PLC”来说的。整机式就是那种带外壳、带卡扣、直接导轨安装的一体机模块式是CPU模块、电源模块、IO模块拼装在一起比如西门子S7-1500、罗克韦尔ControlLogix而板卡式PLC通常裸露电路板或者嵌入到一个更大的控制柜/机器内部比如倍福CX系列嵌入式PLC、一些基于CoDeSys内核的国产控制板。选“板”的最大理由有两个一是成本低同样的CPU性能板式比整机便宜二是嵌入性好可以放进自研设备内部和设备主板集成在一起。工业现场选型时我一般会先问三个问题IO点数多少通讯协议有哪些安装空间和防护等级够不够如果设备要过CE认证、要应对高温高湿粉尘环境整机式明显更省心如果是设备内部集成、批量产线、成本敏感板卡式或嵌入式方案往往更合适。1.2 板级硬件的分工逻辑CPU、IO、电源、通讯口各自干什么把一块PLC板的“骨架”拆开核心就是这几块CPU与存储负责执行用户程序、刷新IO、管理通讯。存储分为用户程序区、数据区软元件区、系统区。很多PLC板标称“程序容量XX KB注释容量XX KB”这个容量决定了你能写多少梯形图指令。电源部分PLC板内部需要5V/3.3V逻辑电源输入来自外部24V DC或220V AC开关电源。很多板式PLC的电源模块直接做在板上需要注意输入范围常见是DC 24V±10%。数字量与模拟量IO接口数字量用于开关、按钮、继电器、磁性开关的输入以及接触器、电磁阀、指示灯的输出模拟量用于读取压力、温度、液位传感器的4-20mA或0-10V信号以及输出模拟量控制变频器、比例阀等执行机构。通讯接口RS232、RS485、以太网口一些高端板卡还带CANopen、EtherCAT或PROFINET总线口。这是PLC板连接变频器、伺服、上位机、触摸屏的主要通道。扩展总线板式PLC常常留有IO扩展接口通过排线或总线扩展IO板应对点数不够的情况。这里有个初学者经常忽略的逻辑PLC的工作方式是循环扫描而不是像单片机那样靠中断实时响应。整个程序按输入刷新→程序执行→通信服务→输出刷新的顺序反复循环。扫描周期越短实时性越好一般PLC板的扫描周期在几毫秒到几十毫秒之间。很多人上来就写一个死循环自增指令导致程序卡死就是因为没理解这个扫描模型——你的程序是“被周期执行”的不是“从头跑完就结束”的。1.3 堆栈原理梯形图运算在底层是怎么“算”出来的热词里有个“plc堆栈原理图”这是个很底层但又很关键的概念。PLC执行梯形图时CPU内部维护着一个逻辑结果堆栈Logic Stack每一次AND、OR、ANI、ORI等指令都会压栈、出栈或对栈顶做逻辑运算。比如LD X0 // 把X0的值压入堆栈作为当前结果 AND X1 // 当前结果与X1相与结果仍存在栈顶 OR M0 // 栈顶与M0相或 OUT Y0 // 把栈顶结果输出到Y0当面对分支结构比如电路块串联并联时就需要用到ANB、ORB这类块与块之间进行组合运算的指令这些指令操作的就是堆栈。理解堆栈的最大价值在于排查逻辑错误如果你发现梯形图逻辑明明是对的但输出行为诡异可以怀疑是不是块操作指令用错导致堆栈不平衡了。我曾经调试过一个程序某段输出始终异常最后发现是多加了一个不该有的ANB指令把逻辑栈里的值搞乱了。这种问题用软件仿真很难查必须回归到堆栈运算的基本规则去推。2. 梯形图、扫描机制与程序架构PLC编程的地基2.1 梯形图为什么能“活”到今天PLC诞生之前工厂里大量使用继电器控制柜。继电器控制是纯硬件的改变控制逻辑等于重新接线。PLC出现后把继电器控制电路“翻译”成了软件常开触点对应LD常闭触点对应LDI线圈输出对应OUT这些梯形图符号几乎就是继电器接线图的直译。所以梯形图的核心思想是像画电路图一样写程序。左母线代表电源正极右母线代表电源负极实际编程中右母线常省略触点串联是AND触点并联是OR线圈放在最右边。这个设计极大降低了电气工程师的转型门槛。举个例子实现一个最经典的“自锁回路”按钮启动、按钮停止、接触器保持|--[X000]启动--[X001]停止--( Y000 )--| | | | | ---[Y000]接触器辅助触点--------写成指令表就是LD X000 OR Y000 ANI X001 OUT Y000这个逻辑的关键是OR Y000把输出自身的常开触点并联到启动按钮上实现了“一旦启动即使松开按钮也能保持”的功能。现实中这个自锁回路还会配合互锁、保护触点一起用。你在许多PLC课程设计里看到的“三相异步电动机正反转控制”核心也是这个自锁电路只是多了两个接触器的常闭触点互锁。2.2 主程序、子程序、中断不是花架子很多入门教程都会讲主程序、子程序和中断但很少讲透彻。我的理解是这样的主程序OB1/MainCPU每个扫描周期都执行一遍。常规逻辑全部放在这里比如气缸动作顺序、报警判断、模拟量处理。子程序SBR/子程序被主程序按条件调用。比如模式切换、配方处理、手动/自动共用的计算逻辑用子程序组织代码能避免主程序写得像一锅粥。中断INT不管扫描周期一旦满足中断触发条件CPU立即暂停当前工作跳去执行中断程序执行完再回来。用于高速计数、高速脉冲输出回零、通讯接收完成等对实时性要求高的任务。我个人建议初学者从一开始就养成“主程序当骨架、子程序当功能模块、中断只给高速场合”的编程习惯。热词里“plc主程序 子程序 中断”搜索量那么大就是因为很多人把中断当普通程序用结果扫描周期或者通讯响应全乱套了。2.3 软元件就是PLC的“内存条”梯形图里的X、Y、M、D、T、C这些统称软元件实际就是PLC内存地址的别名软元件含义典型用途X输入继电器接外部开关、传感器信号Y输出继电器驱动外部接触器、电磁阀、指示灯M内部继电器程序中表示中间状态D数据寄存器存放数值、模拟量换算结果、通讯数据T定时器延时控制C计数器计数、定位脉冲计数这个体系对后面的上位机采集特别重要。很多IT开发人员拿到一个任务“读取PLC里的数据”第一反应是“这个变量在哪”但在PLC的世界里地址就是一切。比如西门子S7-200 SMART的V区地址三菱的D区地址汇川的%ID/GD地址都是一串数字。地址体系的差异是后续跨平台连接时最费神的地方。3. 三菱、西门子、汇川都在做的事PLC板读写变频器频率3.1 为什么“读变频器频率”是PLC通讯的必修课搜热词榜里“三菱plc读取写入变频器频率程序”这个搜索量一直很高。原因很简单变频器大概是工厂里除了PLC之外数量最多的自动化设备。要读运行频率、电流、母线电压要写目标频率、启停命令这几乎是每个电气工程师都会遇到的需求。PLC和变频器通讯最常见的物理通道是RS485协议最常见是Modbus RTU。RS485是半双工差分信号两条线A/B或D/D-抗干扰能力强通讯距离可达1000米。接线时要注意屏蔽层单端接地终端电阻并联在总线两端波特率、数据位、停止位、校验位必须主从站一致。3.2 Modbus RTU报文到底在“说”什么Modbus RTU是一种非常简单的协议——主站发请求从站回响应。报文格式就四部分地址码、功能码、数据区、CRC校验。举个我常用的例子三菱D700系列变频器地址01H目标频率写入频率寄存器H2001对应Modbus映射地址40002。假设我想把频率设为50.00Hz三菱D700里频率单位通常0.01Hz所以50Hz 5000 0x1388写入命令是01 10 00 01 00 01 02 13 88 CRC高 CRC低拆开看01从站地址即变频器站号110功能码10H写多个寄存器实际上写1个也行00 01寄存器起始地址H2001的高低位Modbus协议本身就是从0开始的所以H2001在Modbus里映射为4000200 01写1个寄存器02后面数据字节数为213 885000的十六进制对应50.00HzCRC高 CRC低CRC16校验读当前频率则用功能码03H寄存器地址H2001例如01 03 00 01 00 01 CRC高 CRC低CRC16计算看起来吓人其实编程实现就十几行查表或按位异或算法。很多三菱PLC项目里直接在梯形图里写一段CRC计算子程序扫描时计算好后拼入发送帧。3.3 三菱FX系列RS485通讯的实操配置三菱FX2N本体不带RS485口需要挂载FX2N-485BD通讯板FX3U可以加FX3U-485ADP或者直接用FX3U-USB口转。我以FX3U485BD三菱D700变频器为例讲一下完整流程。第一步设置串口通信参数。三菱FX3U用特殊寄存器D8120设定通讯格式例如要设为“9600bps8位数据无校验1位停止位无协议模式”D8120的值是H0C81或者类似值具体看手册对照表。要注意每个PLC系列对D8120的位分配不一样FX3U和FX5U就不同。第二步写发送指令。三菱用RS指令进行无协议通讯LD M0 RS D100 D10 D200 D20意思是D100开始的10个字节是发送缓冲区D200开始的20个字节是接收缓冲区。第三步在发送前填好报文发送后等着接收完成标志M8123。等接收完成后把D200缓冲区里的响应报文取出来解析成频率值。三菱D700返回的当前频率一般是十六进制数据例如0x1388表示50.00Hz需要转成十进制。这套流程很多年都是“标配”做法。现在新出的FX5U内置以太网可以用MC协议或Modbus TCP直接读写省事不少但现场老设备存量巨大掌握RS指令方式仍然很吃香。3.4 西门子和汇川的思路指令库与功能块西门子S7-200 SMART和S7-1200做Modbus通讯更“封装化”。S7-1200用MB_COMM_LOAD配置串口再用MB_MASTER功能块执行读写。MB_MASTER的参数直接传寄存器地址、数据长度和数据区指针基本不用去组底层报文。汇川H5U/AM系列则既有Modbus指令库也有基于EtherCAT总线的运动控制库。前几天一个朋友问我“汇川plc 正弦运动”怎么做其实就是用运动控制里的速度规划功能块比如MC_MoveVelocity外加一系列的频率/幅值累加计算让目标速度按照正弦曲线变化。这种需求放在老式PLC上要实现到梯形图堆栈繁琐且容易出错而汇川这类基于CoDeSys的平台直接在功能块图FBD或结构化文本ST里写数学表达式配合Trace曲线调试效率高很多。4. 运动控制和气动机械手PLC板如何驱动执行机构4.1 变频、步进、伺服三种执行器三种控制思维控制柜里除了变频器还有气缸、步进电机、伺服电机。这三个看似都是“电机”但控制方式完全不同变频器控制交流电机转速通常通过模拟量端子0-10V/4-20mA或者RS485/Modbus给定频率。步进电机PLC发脉冲串给步进驱动器一个脉冲电机转一个固定角度。转速由脉冲频率决定位置由脉冲数量决定。典型接线就是PUL、PUL-脉冲、DIR、DIR-方向。伺服电机比步进更“闭环”驱动器内部有编码器反馈。PLC除了发脉冲/总线给定位置还要处理使能SON、报警复位ALM等信号。三菱PLC常用定位指令PLSY / DRVI / DRVA西门子用运动控制工艺对象。PLC板上的高速脉冲输出口Y0/Y1等就是给步进/伺服用的频率上限取决于PLC型号常见100kHz/200kHz。很多新入行的朋友直接用普通DO口接脉冲结果发现电机跟不上或不动作就是因为普通输出口无法输出高频脉冲必须用CPU指定的高速输出口。4.2 控制柜里的经典组合PLC电磁阀气缸机械手、搬运设备、自动化产线里大量使用气动执行机构控制元件就是电磁阀。PLC的Y输出点接电磁阀线圈电磁阀控制气流气流推动气缸伸出/缩回。气缸两端通常配磁性开关或接近开关来反馈到位信号给PLC输入点。一个典型的双气缸搬运动作流程原位检测X0为“气缸A缩回到位”X1为“气缸B缩回到位”按下启动按钮X2Y0接通电磁阀A得电气缸A伸出等待X3气缸A伸出到位为ON才能启动下一步Y1接通电磁阀B得电气缸B伸出等待X4气缸B伸出到位为ON延时0.5秒气缸B缩回延迟气缸A缩回回到原位这里最重要的是互锁和联锁Y0和Y1不能同时让两个气缸形成物理干涉每一步必须等上一步的确认信号到位才能执行。如果你用梯形图写这种顺序控制最直观的方法是“步进梯形图指令STL”或者“顺序功能图SFC”。三菱FX2N/FX3U的STL指令就是为这种流程设计的每一步对应一个状态继电器S程序清晰调试时能直接看到设备卡在哪一步。4.3 课程设计“基于PLC的工业搬运机器人”怎么拿高分热词里有“基于plc的工业搬运机器人设计”这几乎是电气自动化专业课程设计的常客。我给你一个建议评分老师最看重的不是指令多花哨而是流程完整、安全互锁到位、程序能在线仿真跑通。你可以把任务拆成这几块硬件选型表PLC型号、电磁阀数量、气缸行程、传感器选型、电机驱动方式I/O分配表X/Y地址、元件类型、对应动作这张表是课程设计报告的核心工作流程状态图最好用SFC或步骤表表示评审老师一眼能看懂关键程序段开机回原点程序、单步/自动/手动模式切换、报警与急停处理再加一点小亮点加一个“手动调试模式”让设备可以单步动作方便检修。这是实际项目的标准需求放到课设里是加分项。5. 让PLC板开口说话上位机与IT系统如何采集PLC数据5.1 先理清楚上位机到底在和谁说话越来越多的开发者开始接触“Java读取PLC数据”“C#对西门子PLC数据采集”“LabVIEW与汇川PLC通讯”这些本质上都是IT系统和OT系统的互联。目前常见的通讯架构有三种PLC直连上位机PLC作为服务器或客户端上位机通过以太网或串口直接读取寄存器。比如C#用S7协议连西门子Java用Modbus TCP连施耐德/汇川/三菱LabVIEW用DSC模块或Modbus Master连PLC。通过网关/协议转换器把Modbus RTU转成Modbus TCP或者Modbus转OPC UA好处是上层系统不关心底下是什么品牌PLC。通过OPC UA/SCADA组态软件WinCC、组态王、IoT平台统一采集PLC数据再向上层MES/数据库提供接口。我的总体建议是小项目直连最简单厂级系统尽量上OPC UA或SCADA否则光处理各品牌协议差异就能写好几套代码。5.2 C#读西门子S7-200 SMART的实操示例C#读西门子最常见的库是S7.Net开源和Sharp7。S7.Net对S7-1200/1500支持较好S7-200 SMART用的是S7协议子集兼容性也还凑合。下面这段我实测过能读S7-200 SMART的V区数据using S7.Net; using (var plc new Plc(CpuType.S71200, 192.168.1.10, 0, 1)) { plc.Open(); // 读VW0也就是V区第0个字的数值 var value plc.Read(VW0); Console.WriteLine($VW0 {value}); // 读DB1.DBD0对应S7-1200的数据块S7-200 SMART无DB区只有V区 var vdValue plc.Read(VD10); Console.WriteLine($VD10 {vdValue}); }如果连的是S7-200 SMARTCPU类型可以选S71200或者CpuType.S71500部分版本支持S7-200 SMART需用S71200兼容参数但要注意S7-200 SMART的程序区不是DB而是V区直接用VW/VD/VD等地址即可。S7.Net处理S7-200 SMART偶尔会出现协议子集不兼容的坑需要用Sharp7的“ReadArea”指定0x84V区区域代码略复杂但更稳。关于地址三菱D100西门子VW100或DB1.DBD4汇川AM/AC系列地址如%IW0/%QW0Modbus侧则是400001/400002之类的映射地址。这些地址映射关系决定了你写的上位机程序能否正确拿到值。5.3 Java和LabVIEW接入PLC的路子Java读PLC最常见走Modbus TCP因为Java生态里缺少像S7.Net那么顺手的S7协议库。Modbus4J是个常用的开源库。示例import com.ghgande.j2mod.modbus.Modbus; import com.ghgande.j2mod.modbus.facade.ModbusTCPMaster; import com.ghgande.j2mod.modbus.procimg.Register; ModbusTCPMaster master new ModbusTCPMaster(192.168.0.10, 502); master.connect(); // 功能码03从从站地址1读起始地址0的10个保持寄存器 Register[] registers master.readMultipleRegisters(1, 0, 10); int value registers[0].toUnsignedShort(); System.out.println(寄存器0的值 value); master.disconnect();这里“寄存器地址0”对应PLC侧的什么地址取决于PLC的Modbus映射表。三菱FX5U的Modbus映射里D0对应保持寄存器400001西门子S7-200 SMART默认映射里VW0对应400001注意偏移量为1或0不同库之间有差异。解决方法是先看PLC手册里的“Modbus地址映射表”再用一个已知数值的寄存器做联调验证不要靠猜。LabVIEW的方式我做过两个方案一是用LabVIEW Datalogging and Supervisory ControlDSC模块里的Modbus I/O Server直接建通道绑定PLC寄存器二是自己用VISA串口发Modbus RTU报文解析返回的十六进制数据。DSC方案配置简单适合快速出原型VISA方案灵活适合非标准协议。两者都是“建立通道→读写寄存器→处理数据→显示/存储”的大框架。注意LabVIEW读写Modbus时数据类型默认是U16如果PLC侧是32位浮点需要拆成两个寄存器再拼装。6. 现场最消磨人的不是编程是通讯和网络问题6.1 PLC的IP地址设置常识连不上先别怪设备每次听到“PLC的ip地址怎么设置”这种问题我第一反应是先确认电脑的网卡IP和掩码与PLC在不在同一个网段。这是几乎所有连接失败的第一原因。具体步骤一般是这样查看PLC默认IP。比如西门子S7-200 SMART出厂默认是192.168.2.1三菱FX5U默认是192.168.3.250或由用户设定汇川AM系列常见192.168.1.88。把电脑有线网卡设置成同网段的静态IP。比如PLC是192.168.2.1电脑网卡就设192.168.2.10掩码255.255.255.0。ping一下PLC的IP能通再打开编程软件搜索设备。如果ping不通优先检查网线是否插在以太网口而不是串口/编程口、是否使用直连线现代网卡都支持自适应基本不用交叉线、Windows防火墙是否拦截了编程软件。西门子S7-200 SMART还支持通过Micro/WIN SMART的“查找CPU”功能自动搜索搜索不到时把“网络接口”里的“允许其他主站访问”之类的选项打开或者直接断电重启PLC。这些看似基础但我在现场看到太多人一上来就改程序折腾半天结果只因为网段不对。6.2 VMware桥接连不上PLC虚拟机用户的经典崩溃现场热词“vmware桥接无法连接到plc”这个问题我至少被问过十次。很多人喜欢在Windows宿主机上装VMware虚拟机跑上位机开发结果虚拟机里的软件怎么也连不上PLC。排查链路我建议固定成下面这套先在宿主机上ping PLC确认网络本身通。虚拟机网络模式选了“桥接模式”了没NAT模式默认是访问不上外部PLC的因为NAT会把虚拟机的IP隔离在子网外。桥接模式还要检查VMware的“虚拟网络编辑器”里VMnet0桥接的物理网卡是不是选对了。如果电脑同时有无线网卡、有线网卡、虚拟网卡VMware默认“自动”桥接可能连到错误的网卡上必须手动指定为接PLC的那块有线网卡。关闭Windows防火墙或者放行VMware端口和对应PLC通讯端口比如西门子S7端口102、Modbus TCP端口502。如果还是不通看虚拟机里的IP是否和宿主机抢了同一个IP段建议虚拟机单独设一个静态IP比如宿主机192.168.2.10虚拟机192.168.2.20互不冲突。还有一个隐蔽坑有些USB转RS485串口线在宿主机上独占虚拟机里选“连接USB设备”后宿主机的Modbus工具反而打不开了。这时候先确认串口设备归属再谈通讯。6.3 台达PLC的CommGR、罗克韦尔的MSG指令品牌专属坑台达PLC的搜索词里有一条“请台达plc请先开启commgr”这个太真实了。台达WPLSoft/ISPSoft软件在线时需要通过通讯管理器Comm ManagerCommGR连接PLC如果CommGR服务没起来或者被系统服务停用在线联机就会报错。解决办法是在“我的电脑→管理→服务”里找到CommGR相关服务并启动或者直接用最新版ISPSoft自带的管理器重新加载。当年第一次用台达光这个问题就卡了我一下午。罗克韦尔AB ControlLogix尤其是1756系列的MSG指令做UDP通讯报错搜索量也很高。AB的MSG通讯有Connected和Unconnected两种很多老工程师习惯用无连接MSGUnconnected做UDP读写报错常见原因目标设备的IP地址填错或填写的是“本地地址/远端地址”混淆路径Path里模块所处的背板槽号写错比如PLC在槽0通讯模块在槽1路径要写成“1, 0”目标设备不支持无连接MSG导致需要在硬件配置中建立MSG连接的Consumed/Produced标签报文大小或数据长度与目标设备寄存器区不匹配。排查步骤我一般这样做先用RSLogix 5000的“MSG”指令状态码查到具体错误代码再去罗克韦尔的知识库搜对应码然后在线监视MSG指令的状态字确认“已发送/超时/拒绝”落在哪一层。大多数情况下最后都能归到“路径里槽号写错”这一点上。6.4 模拟量与485通讯的干扰问题现场经验才是下限热词里有一条“plc的ao输出10v怎么通过改硬件变5v”这其实是模拟量输出量程选择的问题。很多PLC的模拟量输出模块上带硬件跳线或DIP开关专门用来选择电压/电流、0-10V/0-5V等量程。如果你用的是4-20mA电流输出那就和0-10V电压互不相关如果是电压输出想从0-10V改成0-5V必须看模块手册上的跳线位置改完跳线后重新上电有些还要在PLC参数里同步选择对应的输出模式。485通讯不稳定的排查顺序一般是这样先降低波特率9600比19200稳定得多检查终端电阻总线两端各加一个120欧姆电阻如果只有两台设备分别接在两端检查屏蔽层屏蔽层单端接地不能两端都接更不能悬空检查地址重复Modbus从站地址如果两台都设成1必然通讯紊乱检查接地环路485总线A/B线不能和强电动力线走同一根线槽否则大功率变频器一启动通讯必挂必要时用带隔离的RS485收发器或在PLC通讯口加隔离模块。这类问题很多时候不是程序问题而是施工工艺问题。程序里你写得再标准线缆走线不合理照样白搭。最后再分享一个我自己的体会做PLC这块很多时候瓶颈不在“会不会写梯形图”而在“能不能把一个通讯/网络问题按层次排查清楚”。一块很小的PLC板从硬件选型开始到程序架构、变频器通讯、运动控制再到上位机采集和现场排障一条线串下来就是一个完整的自动化系统思维。我建议刚入行的朋友手头一定要有一块真实可操作的PLC板哪怕是入门级的FX3U或者S7-200 SMART把频率读写、气缸联动、Modbus通讯这些基础场景实实在在地跑一遍比看一百遍教程都管用。