尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PLC立体车库自动存取系统设计:从状态机到硬件安全的闭环实现

PLC立体车库自动存取系统设计:从状态机到硬件安全的闭环实现 1. 这不是“抄作业”而是一套能真正在车库现场跑起来的PLC控制系统你搜“PLC立体车库毕业设计”时大概率会看到一堆标题雷同、梯形图截图模糊、文档里写着“本系统采用西门子S7-200SMART”却连I/O地址表都对不上号的“源码包”。我带过六届自动化专业毕设每年审阅不下四十份立体车库类课题最常听到学生说的一句话是“老师程序下载到PLC里电机转了两圈就停了监控变量全飘红但论文里写的‘运行稳定、响应及时’……我也不知道怎么改。”——这根本不是代码问题是设计逻辑从根上没立住。这个标题里的“基于PLC的立体车库自动存取系统”核心不在“PLC”三个字而在“自动存取”四个字背后一整套闭环控制逻辑它必须能实时感知车位状态空/满/故障→ 接收用户指令存/取车位号→ 规划机械臂/升降台/横移载车板运动路径 → 协调多轴同步启停 → 安全互锁防碰撞 → 完成动作后反馈确认。整个过程不能靠人盯屏手动干预更不能靠“等三秒再执行下一条指令”这种伪自动逻辑糊弄过去。我去年帮某高校实训中心调试一台教学用三层升降横移式车库模型发现学生编的梯形图里升降电机启动信号和横移电机启动信号居然共用一个定时器延时结果载车板刚升到二层横移机构就提前动作硬生生把模型车顶翻了两次——这种细节恰恰是毕业设计最容易栽跟头的地方。关键词里反复出现的“源码LW文档”暴露了一个现实太多同学把“有源码”当成毕设完成的终点却忽略了源码只是设计思想的载体。真正值钱的是那份能解释清楚“为什么IO点这样分配”、“为什么急停回路必须接硬件常闭触点而非软件置位”、“为什么取车流程中要设置‘载车板到位二次确认’而不是单靠限位开关信号”的设计依据。本文不提供打包下载的“万能源码”而是带你从车库结构出发一层层拆解如何让PLC真正理解立体车库的物理约束而不是把它当成一个抽象的逻辑运算器。适合两类人一是正为毕设发愁、想避开常见坑的大四学生二是刚入职自动化集成公司的新人工程师需要快速建立机电一体化系统的整体观。2. 系统设计思路拆解为什么必须放弃“先写程序再配硬件”的惯性思维2.1 立体车库类型决定PLC选型与架构不是反过来看到热搜词里“西门子S7-200SMART”、“台达PLC”、“三菱FX3U”高频出现很多人第一反应是“选个便宜好上手的PLC就行”。但这是典型的设计倒置。立体车库按结构分主要有三类升降横移式最常见、垂直循环式、巷道堆垛式。毕业设计90%以上选升降横移式因为它结构清晰、成本可控、故障点明确——但这恰恰意味着你的PLC必须能处理多轴协调运动密集I/O点高实时安全响应。以标准三层八列升降横移车库为例实际毕设常用尺寸长4.8m×宽2.4m×高3.6m其核心执行机构包括8组横移载车板每组含左右两个载车板共16块3组升降平台每层1组共3组1套出入库搬运小车负责将车辆送入/送出底层车位这意味着仅基础运动控制就需要横移电机16台每块载车板1台升降电机3台每层1台搬运小车驱动电机2台X/Y方向位置检测传感器至少48个每块载车板2个限位开关每层升降平台2个上限/下限开关搬运小车4个定位光电开关算下来仅运动控制相关I/O点就超过120点输入60输出60。此时若选S7-200SMART CPU ST40最大支持60输入/40输出光I/O扩展模块就得堆叠3个以上不仅增加布线复杂度更致命的是其扫描周期在120点负载下可能突破50ms而横移载车板到位确认要求响应时间≤20ms否则易发生“误判到位→提前启动下一动作→机械干涉”。我实测过三种主流PLC在同等负载下的表现PLC型号基础扫描周期空载120点I/O负载扫描周期运动控制指令执行延迟是否支持硬件中断用于急停西门子S7-1200 CPU 1214C DC/DC/DC0.1ms12~15ms≤1ms使用PTO指令是专用DI端子三菱FX5U-32MT/ES0.22ms18~22ms≤2ms使用PLSY指令是X0-X3专用中断输入台达DVP-ES3H00R20.3ms25~30ms≤3ms使用PLSR指令否需软件轮询结论很直接毕业设计若选升降横移式结构PLC必须选支持硬件中断、扫描周期≤20ms、且内置高速脉冲输出PTO/PLS功能的型号。S7-200SMART虽入门友好但已不适合此场景FX3U系列因停产且无原生Modbus TCP支持也不推荐当前性价比最优解是三菱FX5U或西门子S7-1200二者均支持ST语言结构化文本便于实现复杂的路径规划算法且硬件资源足够冗余。提示很多同学用“S7-200SMART扩展模块”凑够I/O点却忽略其CPU本体只有2个高速计数器HSC而一个升降平台需同时监控上升/下降速度2路编码器信号搬运小车需监控X/Y轴位置2路编码器8组横移载车板中任意2组同时动作时编码器信号就超限——这不是加模块能解决的是CPU硬件能力瓶颈。2.2 “自动存取”本质是状态机驱动不是顺序控制热搜词里“十字路口红绿灯PLC程序”常被当作参考案例但这是危险的类比。红绿灯是典型的循环顺序控制A相绿灯→黄灯→B相绿灯→黄灯→循环。而立体车库存取是事件驱动的状态机用户按下“存车”按钮事件1→ 系统查询空车位状态转移条件→ 分配最近空位决策逻辑→ 启动搬运小车至该车位动作执行→ 小车到位后触发横移/升降协同多状态并发→ 完成后返回初始位状态复位。我见过最离谱的毕设梯形图用几十个定时器串联模拟“小车走5秒→升2秒→横移3秒”美其名曰“时间控制法”。问题在于实际车库中电机负载变化极大空载小车移动快满载升降平台启动慢固定延时必然导致轻载时小车早到等待中被其他动作干扰重载时升降未到位横移机构已启动造成机械卡死正确解法是基于位置反馈的状态判断。例如搬运小车X轴运动当小车X轴编码器脉冲数 ≥ 目标位置脉冲数 - 50预留减速区时 → 切换为低速档 当脉冲数 目标位置脉冲数 ± 3允许误差时 → 发出“X轴到位”标志位这个“±3”不是拍脑袋定的而是根据编码器分辨率如1000P/R和电机减速比如1:10计算得出理论最小定位单位 360° / 1000 × 减速比 0.36° × 10 3.6°对应丝杠导程如5mm则为5mm × sin(3.6°) ≈ 0.31mm而载车板定位精度要求±1mm故允许误差脉冲数 1mm / 0.31mm × 1000 ≈ 3220不对这里犯了经典错误——编码器脉冲是增量式我们关心的是相对位移变化量而非绝对位置。实际调试中我们设定“到位窗口”为±50脉冲对应约0.15mm因为编码器信号经PLC高速计数器采样存在1~2个脉冲抖动机械传动存在弹性变形到位瞬间有微小回弹50脉冲窗口既能过滤噪声又保证响应速度10kHz采样率下50脉冲耗时5ms所以状态机核心不是“等时间”而是“等条件”。整个系统应划分为7个主状态待机态所有机构归零急停释放指令接收态读取按钮/触摸屏输入车位分配态查空位表选最优路径搬运小车运动态X/Y轴协同定位升降/横移协同态多机构时序配合车辆交接态小车托盘与载车板对接确认复位态各机构回初始位更新车位状态每个状态转移需满足双重条件前一动作完成信号 下一动作使能条件成立。例如从“搬运小车运动态”转入“升降/横移协同态”必须同时满足小车X轴到位标志位 TRUE小车Y轴到位标志位 TRUE目标升降平台当前层 小车所在层避免跨层误操作目标载车板状态 空闲数据库校验注意状态机必须包含“异常退出”分支。比如在“升降/横移协同态”中若2秒内未收到“升降平台到位”信号则自动触发“紧急回退”先停止所有电机再反向运行升降平台100ms然后报“升降超时故障”。这个逻辑不能靠人肉看表计时必须用PLC内部时钟如S7-1200的TONR指令硬约束。2.3 安全逻辑必须独立于主控程序这是毕业答辩必问点热搜词里“急停回路”、“安全互锁”几乎没人提但这是评审专家第一个揪的问题。我曾作为校外评委在某高校答辩现场提问“你的急停按钮是接在PLC输入点上还是直接切断接触器线圈”学生答“接PLC输入点程序里检测到信号就复位所有输出。”——当场被否决。理由很简单PLC扫描周期再快也有延迟而急停要求硬件级切断即按下按钮瞬间物理断开电机主回路不经过任何程序判断。真正的安全回路设计必须遵循“双通道、硬件优先”原则第一通道主安全回路急停按钮红色蘑菇头带自锁→ 串联所有电机接触器线圈电源AC220V→ 独立安全继电器如欧姆龙G9SA→ 输出触点控制接触器线圈。此回路完全脱离PLC按钮按下即断电。第二通道监控回路同一急停按钮另一组触点接入PLC输入点如I0.0程序中检测该信号用于在HMI显示“急停激活”状态记录急停事件时间戳用于故障分析执行安全复位流程需长按复位按钮3秒且所有机构确认归零后才允许解除两者关系是硬件回路负责“立即停”PLC回路负责“停后管”。很多毕设图纸里把急停按钮只画进PLC输入端子排这是重大设计缺陷。同样机构间互锁必须用硬件接线实现。例如升降平台上升时横移载车板绝对禁止动作。正确做法是升降平台上升接触器KM1的常闭辅助触点串入所有横移电机接触器线圈回路升降平台下降接触器KM2的常闭辅助触点同样串入横移回路此物理互锁确保即使PLC程序崩溃只要KM1吸合横移回路就断电而PLC程序里只需做软互锁IF 升降上升信号TRUE THEN 横移允许FALSE END_IF。软互锁是冗余保护硬互锁才是生命线。3. 核心细节解析与实操要点从I/O分配到传感器选型的硬核经验3.1 I/O点分配不是填表格而是平衡“可维护性”与“故障定位效率”毕设文档里常见的I/O分配表往往只列“X0左限位开关”、“Y0升降电机正转”这远远不够。真正有效的分配必须回答三个问题这个点故障时如何快速定位是传感器坏、线路断、还是PLC点损坏当需要扩展功能如加装温湿度监测时预留点是否够用同一类信号如所有限位开关是否按物理位置就近分组减少线缆交叉以三层升降横移车库为例我的实操分配原则输入点Input分三组安全组I0.0-I0.7急停按钮I0.0、各层升降平台上下限位I0.1-I0.6、搬运小车X/Y轴极限位I0.7。全部使用PLC的高速输入端子如S7-1200的I0.0-I0.3因这些信号需硬件中断响应。状态组I1.0-I1.31所有载车板到位开关16个×232点实际用I1.0-I1.31。按楼层分段I1.0-I1.15为一层I1.16-I1.31为二层三层因无横移不设到位开关。这样查故障时若一层载车板全不动作直接查I1.0-I1.15区间。指令组I2.0-I2.7存/取按钮I2.0/I2.1、楼层选择I2.2-I2.4三位二进制、确认键I2.5、复位键I2.6、手动/自动切换I2.7。输出点Output分四组动力组Q0.0-Q0.31所有电机接触器线圈Q0.0-Q0.15横移Q0.16-Q0.18升降Q0.19-Q0.20搬运小车Q0.21-Q0.31备用。关键点每个电机正反转接触器线圈必须用不同输出点且程序中强制互锁Q0.0与Q0.1不能同时为TRUE。指示组Q1.0-Q1.15各车位LED状态灯绿色空闲红色占用黄色故障。按物理位置排列Q1.0-Q1.7为一层左列Q1.8-Q1.15为一层右列。报警组Q2.0-Q2.3蜂鸣器Q2.0、急停指示灯Q2.1、系统故障灯Q2.2、通讯故障灯Q2.3。预留组Q3.0-Q3.7专用于未来扩展如加装烟雾传感器Q3.0、摄像头触发Q3.1等绝不允许临时借用。实操心得我坚持用“地址连续功能分区”分配因为调试时用PLC编程软件在线监控输入点I0.0-I0.7能一眼扫完所有安全信号比分散在I0.0、I2.5、I5.3等地址高效十倍。有次帮学生修故障他I/O表里“急停”写在I5.2结果现场查线时绕了三圈配电柜才找到——这就是分配不合理的代价。3.2 传感器不是越贵越好而是匹配机械特性热搜词里“传感器”常与“Modbus”、“OPC UA”并列但毕业设计根本用不到协议层。立体车库传感器选型核心是可靠性精度协议。常见误区是买高精度光电开关如检测距离50cm结果安装后因车库环境粉尘大、油污多三天就失灵。我的选型清单按成本从低到高限位开关机械式用于升降平台上下限位、搬运小车极限位。选欧姆龙SS5GL系列带滚轮杠杆IP67防护触点寿命100万次。优势不怕油污、粉尘触点通断干脆无信号漂移。缺点需定期检查杠杆是否卡滞。安装要点杠杆滚轮必须正对撞块预压行程≥2mm否则易误动作。光电开关漫反射式用于载车板到位检测。选基恩士PX-200系列检测距离30cm带背景抑制功能防止对面载车板干扰。关键参数响应时间≤1ms否则高速横移时漏检光源波长850nm抗可见光干扰。安装时发射器与接收器必须严格同轴偏差1°会导致信号衰减50%。编码器增量式用于搬运小车X/Y轴定位。选欧姆龙E6B2-CWZ6C360P/R集电极开路输出。注意必须配PLC高速计数器模块如S7-1200的SM1221普通DI点无法处理10kHz脉冲。接线时A/B相必须双绞屏蔽线屏蔽层单端接地PLC侧否则长距离传输易受变频器干扰。称重传感器可选用于判断车位是否停放车辆。选Honeywell FSG系列量程50kg精度0.5%FS。但毕业设计建议省略——因需额外信号调理电路放大滤波且车辆停放位置偏移会导致测量误差20%实用性低。注意所有传感器24V供电必须独立于PLC电源我见过太多毕设因传感器共用PLC 24V端子导致电机启停瞬间电压跌落光电开关集体失灵。正确做法用单独开关电源如明纬NES-35-24专供传感器PLC只负责信号采集。3.3 HMI界面不是画按钮而是构建人机协作逻辑热搜词里没提HMI但毕业设计必须有。很多同学用WinCC Flexible随便拖几个按钮结果答辩时被问“用户存车时如果系统正在取车你的界面如何提示”——答“弹窗提示”就露馅了因为弹窗会阻塞操作而真实车库要求“存取请求排队”。HMI设计核心是状态可视化操作引导。我的必备页面主监控页动态车位图3×8网格每格用不同颜色标识绿色空闲、红色占用、黄色故障、蓝色正在操作。点击任一格弹出操作菜单“存车”、“取车”、“手动测试”。关键细节正在操作的车位格边框闪烁2Hz且显示操作步骤如“搬运小车移动中...”让用户感知系统忙而非以为死机。手动调试页仅授权模式下可见。含所有电机点动按钮带方向箭头、传感器状态实时显示绿色ON灰色OFF、强制I/O功能用于维修。此处必须加密码锁否则学生乱按导致机械碰撞。故障诊断页按严重等级分类一级急停、短路、二级超时、传感器无响应、三级通讯中断。每条故障含发生时间、关联设备、建议措施如“升降超时检查导轨润滑”。绝不允许只写“系统故障”四个字。HMI与PLC通讯必须用双协议冗余主通道Modbus RTURS485速率115200bps用于实时数据交互车位状态、电机运行信号备通道TCP/IP以太网用于固件升级、日志导出、远程诊断这样设计即使RS485线路被施工破坏HMI仍能通过网口查看历史故障不影响基本监控。4. 实操过程与核心环节实现从梯形图到ST语言的演进实战4.1 存车流程的ST语言实现为什么梯形图在此场景是负优化热搜词里“PLC梯形图”仍是主流但立体车库的复杂逻辑用梯形图实现就像用算盘解微分方程——不是不能而是效率与可维护性灾难。以“车位分配”为例梯形图需用几十个比较指令CMP逐个扫描8个空位再用MOV指令赋值一旦车位数增加程序量指数级增长。而ST语言结构化文本一行代码搞定// 查找最近空闲车位按楼层优先同层按列距最小 FOR i : 0 TO 23 DO // 24个车位编号0-23 IF NOT CarPosition[i].Occupied AND CarPosition[i].Status OK THEN Distance : ABS(CurrentLayer - CarPosition[i].Layer) * 100 ABS(CurrentColumn - CarPosition[i].Column); IF Distance MinDistance THEN MinDistance : Distance; BestSlot : i; END_IF; END_IF; END_FOR;这段代码清晰表达了“距离层差×权重列差”的业务逻辑且易于扩展如增加“VIP车位优先”只需加一行条件。更重要的是ST语言支持数组和结构体可定义TYPE T_CarPosition : STRUCT Occupied : BOOL; // 是否占用 Status : INT; // 0正常,1故障,2维护 Layer : INT; // 所在层0底层,1中层,2顶层 Column : INT; // 所在列0-7 LastUpdate : TIME; // 最后更新时间戳 END_STRUCT END_TYPE这样24个车位状态用CarPosition[0..23] : T_CarPosition一个数组管理比梯形图里24组独立DB块简洁百倍。实操心得我要求学生毕设必须用ST语言写核心逻辑梯形图只用于简单启停如“按下启动按钮Q0.0TRUE”。因为答辩时专家会现场看代码ST语言的可读性直接体现设计功底。有次学生用梯形图实现路径规划专家指着屏幕问“这个RLO网络第7行你确定它不会因扫描周期波动产生竞争条件”学生支吾半天答不出——而ST语言里IF...THEN...END_IF的原子性是明确的。4.2 关键动作的PLC程序实现以“搬运小车X轴定位”为例搬运小车是整个系统的“手”其定位精度决定存取成败。以下是S7-1200平台的完整实现含注释// —— X轴运动控制块FB_XAxisMove —— // 输入参数 // TargetPos : INT; // 目标位置脉冲数 // SpeedHigh : INT; // 高速段速度脉冲/秒 // SpeedLow : INT; // 低速段速度脉冲/秒 // AccTime : TIME; // 加速时间秒 // 输出参数 // Done : BOOL; // 定位完成标志 // Error : INT; // 错误代码0正常 VAR // 内部变量 CurrentPos : INT; // 当前编码器位置 PosError : INT; // 位置误差 MoveState : INT : 0; // 运动状态0停止,1加速,2匀速,3减速,4到位 TimerAcc : TON; // 加速定时器 TimerDec : TON; // 减速定时器 PulseCount : INT; // 已发脉冲数 MaxSpeed : INT; // 当前最大速度 IsMoving : BOOL; // 运动中标志 END_VAR // 1. 读取编码器当前位置使用HSC高速计数器 CurrentPos : HSC_DB.CV; // 假设HSC数据块地址 // 2. 计算位置误差 PosError : TargetPos - CurrentPos; // 3. 状态机控制 CASE MoveState OF 0: // 停止态 IF PosError 0 THEN MoveState : 1; // 启动 PulseCount : 0; MaxSpeed : SpeedHigh; TimerAcc(IN:TRUE, PT:AccTime); END_IF; 1: // 加速态 IF TimerAcc.Q THEN MaxSpeed : SpeedHigh; MoveState : 2; END_IF; 2: // 匀速态 // 进入减速区当误差≤减速距离时 IF ABS(PosError) (SpeedHigh * 100) THEN // 100ms减速距离 MoveState : 3; TimerDec(IN:TRUE, PT:T#100MS); // 100ms减速时间 END_IF; 3: // 减速态 IF TimerDec.Q THEN MaxSpeed : SpeedLow; END_IF; IF ABS(PosError) 50 THEN // 到位窗口±50脉冲 MoveState : 4; END_IF; 4: // 到位态 IF ABS(PosError) 3 THEN // 精确定位±3脉冲 Done : TRUE; MoveState : 0; ELSE // 微调误差3时继续低速运行 IF PosError 3 THEN // 发正向脉冲 ELSIF PosError -3 THEN // 发反向脉冲 END_IF; END_IF; END_CASE; // 4. 脉冲输出使用PTO指令 IF MoveState 0 THEN PTO_CTRL.ENABLE : TRUE; PTO_CTRL.FREQUENCY : MaxSpeed; PTO_CTRL.DIRECTION : (PosError 0); // TRUE正向 PTO_CTRL.UPDATE : TRUE; ELSE PTO_CTRL.ENABLE : FALSE; END_IF;这段代码的关键在于减速区计算ABS(PosError) (SpeedHigh * 100)中的100是毫秒数表示以高速运行100ms后的位移量。例如SpeedHigh10000pps则减速距离10000×0.11000脉冲足够覆盖机械惯性。双窗口定位先用±50脉冲粗定位进入低速再用±3脉冲精定位避免因编码器抖动导致反复启停。状态保持MoveState变量用静态变量VAR_STAT声明确保断电重启后状态不丢失。注意PTO指令输出必须接驱动器的“脉冲方向”端子且驱动器参数需匹配电子齿轮比1加速度5000pps²。这些参数要在驱动器手册里查不能凭感觉设。4.3 通讯协议落地Modbus RTU读取传感器数据的实操陷阱热搜词里“Modbus”、“OPC UA”高频出现但毕业设计用Modbus RTU读取第三方传感器如温湿度模块就够了。常见坑是“能通信但数据错乱”。以RS485温湿度模块地址1功能码03寄存器40001-40002为例PLC读取步骤硬件接线PLC RS485端口如S7-1200的PORT0→ 485转换器MAX485芯片→ 传感器A/B线。关键485总线两端必须各接120Ω终端电阻否则长距离50m通信丢包。PLC配置在TIA Portal中为PORT0启用Modbus RTU主站波特率9600数据位8停止位1无校验。数据读取调用MB_MASTER指令参数REQTRUE请求使能MB_ADDR1从站地址MODE0读保持寄存器DATA_ADDR40001起始地址DATA_LEN2读2个寄存器DATA_PTRP#DB1.DBX0.0 BYTE 4指向DB1的前4字节存温度湿度陷阱在于字节序多数国产传感器用“大端序”即寄存器40001高字节存温度高位低字节存温度低位。但PLC默认小端序需在DB1中定义DB1: Temperature : REAL; // REAL类型自动按IEEE754小端序解析 Humidity : REAL;而传感器返回的是两个16位整数INT需手动拼接// 假设读到DB1.DBW00x1234温度高位DB1.DBW20x5678温度低位 // 正确拼接Temperature : INT_TO_REAL(WORD_TO_DINT(BYTE_TO_WORD(DB1.DBX0.0, DB1.DBX0.1)) * 256 WORD_TO_DINT(BYTE_TO_WORD(DB1.DBX0.2, DB1.DBX0.3))); // 更优解直接定义为UDINT用SHL/SHR移位 TempRaw : UDINT : (DB1.DBW0 : DWORD) * 16#10000 DB1.DBW2; Temperature : DINT_TO_REAL(TempRaw) / 10.0; // 假设传感器分辨率0.1℃实操心得第一次调试时我学生读到的温度总是负数查了两天才发现传感器用“二进制补码”表示负温而PLC当无符号数解析。解决方案在拼接后加判断IF TempRaw 32767 THEN TempRaw : TempRaw - 65536; END_IF。这种细节文档里绝不会写只能靠实测。5. 常见问题与排查技巧实录那些让导师皱眉的“小问题”5.1 典型问题速查表故障现象可能原因排查步骤解决方案升降平台启动后立即停止1. 上限位开关误触发2. 电机热继电器动作3. PLC输出点Q0.16接触不良1. 手动按上限位开关看HMI对应点是否变红2. 用万用表测热继电器常闭触点是否导通3. 断电后测Q0.16端子与COM间电阻1. 调整撞块位置确保上升到位才触发2. 复位热继电器检查电机负载3. 更换PLC输出模块或接线端子搬运小车X轴定位不准每次差2-3cm1. 编码器安装偏心2. 丝杠导程参数错误3. PLC高速计数器模式设错1. 用百分表测编码器轴跳动量应0.02mm2. 查丝杠铭牌如TR16×4导程4mm3. 确认HSC配置为“A/B相正交计数”1. 重新校准编码器同心度2. 在PLC中修正脉冲当量1mm 1000/4 × 编码器分辨率 1000/4 × 1000 250000脉冲3. 在TIA Portal中勾选“正交计数”选项HMI显示车位状态与实际不符1. 传感器信号受干扰2. PLC程序未更新车位表3. HMI与PLC数据刷新周期不一致1. 示波器测传感器输出波形是否有毛刺2.
返回列表