简介施耐德Unity Pro入门使用手册专为零基础学习者编写系统讲解这款编程软件从新建工程到下载调试的完整流程。手册从新建程序开始逐步介绍机架槽位调整默认16插槽可换为10插槽与模块拖拽配置、CPU状态RAM地址范围设定、以太网网络及NOE模块通讯配置并详细演示变量与DFB功能块类型的创建方法以及程序段编写和动态数据表监视等核心操作。针对实际使用还补充了变量列自定义与过滤器、利用Excel批量处理地址、标准与仿真模式切换、程序上传下载、生成更改和保存STU格式等实用技巧。资源仅包含1个docx文档约1.18MB内容紧凑、步骤清晰适合自学或现场参考。目前已有1991人学习与下载对于电气工程师、维护人员及自动化初学者快速上手施耐德PLC编程是一份高性价比的入门指南。1. Unity Pro 不是黑匣子入门最大的门槛在组态顺序刚接触 Unity Pro 的人通常会有一种错觉它是 PLC 编程软件那重点应该就是写 ST、梯形图。真上手才发现至少三分之一的时间花在硬件组态和变量规划上。机架槽位、CPU 状态 RAM 范围、NOE 模块的 IP 配置哪一步排错了程序写得再漂亮也下不到设备里。这份手册最值钱的地方恰恰是把从新建项目到下载运行的完整路径按“点鼠标的顺序”列了出来选 CPU、换机架、配模块、配通讯、建变量、写程序段、连仿真器或真机。尤其适合两类人一类是从零开始的现场工程师没人带只能自己照着一步步点另一类是刚接手某条产线、需要快速读懂别人项目结构的人。它解决的不是“怎么写梯形图”而是“怎么把软件环境搭对、把变量地址圈住、让程序真正跑起来”。2. 硬件组态与 CPU 配置把机架、CPU、状态 RAM 一次配对2.1 新建项目与机架替换默认 16 槽和实际图纸不是一回事新建程序的路径很简单左上角“文件 → 新建”在弹出的对话框里选择 Quantum 平台的 CPU 型号典型型号为 140CPU67160点确定后软件会生成一个默认的硬件站。这里第一个坑就来了默认机架槽位是 16 插槽机架型号 140XBP01600但很多现场图纸实际用的是 10 插槽机架 140XBP01000。不换的话后面拖模块时插槽位置对不上图纸IO 地址也会和现场端子排对不上。我一般会先对着图纸确认机架型号再右击机架上的 1 号槽位选择“替换机架”换成和图纸一致的型号。这一步看着不起眼但如果不做后面每拖一个模块都要怀疑是不是自己记错了插槽位置。替换时机架上的已有模块位置会重新映射所以有强迫倾向的人可以做在新建项目后、开始拖模块之前省得返工。机架搞定后双击空白插槽位置会弹出一个设备目录直接添加电源模块和通讯模块也可以从“硬件目录”里选中模块直接拖拽到插槽上。两种方式效果一样但拖拽时要注意模块类型是否匹配插槽的物理特性。配置模块的顺序我习惯从左到右先电源再 CPU再通讯最后是 IO 和特殊功能模块。这样后面配置 NOE 模块时网络关系在硬件树上看着更清楚。2.2 CPU 状态 RAM 地址范围变量地址出界等于给程序挖坑双击主机架上的 CPU 模块 140CPU67160会进入 CPU 属性配置对话框。重点在这里必须对“状态 RAM”的地址范围做设定。程序的变量地址必须落在这个范围内才能生效不能超出这个范围。这是 Unity Pro 里非常容易忽略的一步——默认范围往往和你实际用到的变量数量不匹配。状态 RAM 的作用是给程序变量提供物理存储空间。比如现场有 200 个模拟量、500 个数字量还有一批中间变量和掉电保持变量那 RAM 范围就必须把这些都罩住。地址范围的设定是用“起始地址 长度/结束地址”的方式给出通常按字%MW规划。我给一个参考做法数据用途典型地址段说明模拟量输入映射%MW100 - %MW199和模拟量 IO 模块的通道一一对应模拟量输出映射%MW200 - %MW249DA 通道或调节阀指令内部计算中间变量%MW300 - %MW799各种算法临时数据掉电保持数据%MW800 - %MW999配方、累计量、运行模式记忆通讯接收/发送缓冲%MW1000 - %MW1199和上位机或第三方设备交换数据这里不是说每个项目必须照这个分法而是说在配置状态 RAM 之前最好先花十分钟把变量的地址族规划出来再填到对话框里。否则可能出现“编译提示地址越界”或者更隐蔽的情况——两个不同的变量地址在逻辑上重叠运行时互相覆盖查起来极痛苦。注意状态 RAM 的配置里还有一个“热备对话框”非传输区域此区域与上位机数据库没有数据交换只限 PLC 内部使用。做热备项目时这一块要专门划定。RIO 子站选择如果系统里没有配置远程 IO 子站就选“无 RIO 子站”。我这边的老系统就没有 RIO 子站这块保持默认即可不用去勾选任何远程站选项勾了反而会在通讯诊断列表里出现不存在的从站报错。“动态显示”里可以配置实时时钟来源。勾选“PC → PLC”时每次连接会把电脑系统时间写入 PLC也可以手动设置时间后选“用户 → PLC”。现场如果有多台 PLC 且需要统一时间戳我习惯用第一种让一台工控机在开机时统一对时避免各控制器时间越走越偏。2.3 实时时钟与日期掉电保持不丢时间的正确姿势时钟这块单独拎出来说是因为不少新手第一次做时间戳记录时翻过车PLC 内部时钟没配置来源断电重启后时间回到出厂基准上位机查历史曲线时发现某几天的数据时间全部错乱。Unity Pro 的时钟配置在 CPU 属性对话框的“动态显示”里。常见做法是在 CPU 属性里启用“PC → PLC 时间同步”然后在需要时间戳的程序段里直接读取系统时钟变量。若现场有多台 PLC 但只有一台电脑做上位机这种方式的同步精度足够日常使用了。要注意这里的“用户 → PLC”是把手动设置的时间作为 PLC 的本地时间写入适合没有上位机、完全靠单机运行的小系统。两种方式选一种就可以不要同时配置成自动对时和手动写入否则每次开机都会被覆盖成你设定好的那个固定值。3. 通讯网络与变量体系从 NOE 模块到 EDT/DDT 的边界3.1 NOE 模块配置先定 IP 规划再双击以太网口通讯这块的逻辑顺序是先建通讯网络再配 IP 参数最后把 NOE 模块关联到网络上。我在项目里看到的最常见的错误是直接双击 NOE 模块想配 IP发现对话框里没有网络可选——因为“通讯 → 新建网络”这一步没做。点击“通讯”选择“新建网络”在可用网络列表里选“以太网”。网络名称默认不允许中文也不允许数字或个别符号开头建议以英文字母开头比如 ETHERNET1。这里为什么强调命名规则因为在后续的 NOE 配置、上位机通讯、全局地址引用里网络名会成为关键索引如果一开始用了非法字符新建时直接报错还算好的最怕的是建到一半才提示你都不知道哪里出问题。建好网络后在“通讯”里选中 ETHERNET1配置 IP 地址、子网掩码和网关地址。给一个典型现场参数PLC 侧 IP192.168.1.20子网掩码255.255.255.0上位机 IP192.168.1.10或让上位机 DHCP 自动获取但固定 IP 更稳网关192.168.1.1现场有路由器或三层交换机时填纯二层直连则不填最后回到主机架双击 NOE 模块下方对应的以太网口图标弹出的对话框里选择刚才建好的 ETHERNET 网络。这一步是把物理网口和逻辑网络绑定在一起。如果现场有第二个网段接其他设备可以再建一个网络再绑定另一个网口但入门阶段先别做多网络容易把路由搞乱。3.2 变量表与列管理默认视图和自定义列进入“项目浏览器 → 变量和 FB 实例 → 基本变量”默认的列包括名称、类型、地址、值、注释。对大多数人来说这些够用了但项目变大之后我建议按自己的排查习惯自定义列。做法是右键点击列名称一栏选择“自定义列”把“所属段”“使用次数”“强制状态”这一类列调到前面来。排查动态数据表或交叉引用时这些列能省很多时间。列的显示顺序可以通过右侧按钮调整选中名称前面的检查框就能显示对应列。建议至少保留名称、类型、地址、注释这四列不加“值”列——因为“值”是运行时的信息写在变量表里反而干扰静态阅读。变量的所有参数都集中在数据属性窗口里显示。名称和类型是必填项地址、值、注释可以有也可以没有。变量名称默认不能以数字开头这条规则有时候很烦人比如想建 1# 水泵这种命名风格直接输入会报错。解决路径是“工具 → 项目设置 → 变量 → 允许前导数字”勾上即可。3.3 EDT 与 DDT什么时候用基础类型什么时候自定义EDT 是软件自带的基本数据类型比如 WORD、EBOOL、BOOL、INT、ARRAY[0..31] OF WORD。DDT 是在“DDT 类型”里由用户自定义的数据类型本质上是以基本数据类型为基础拼装出来的复合结构。它们之间的边界在新建变量时经常让人纠结我给一个判断标准单一信号用 EDT一组相关信号用 DDT。举一个典型例子某现场的阀门控制需要同时关联开指令、关指令、开反馈、关反馈、故障、累计动作次数如果每次都用独立的 BOOL 和 INT 变量去定义变量表会膨胀得很厉害。更合理的做法是在 DDT 类型里定义一个结构把这些信号打包成一个类型然后在基本变量里建一个该 DDT 类型的实例。手册里的例子也类似DDT 类型中定义了一个名称为 BigActSEQ、数据类型为 ARRAY[0..34] OF WORD 的变量在基本变量里建立名为 Big_ActSEQ 的变量数据类型选择 BigActSEQ这样整个 35 个字的数组就整体可用了。这比你在基本变量里手动敲 35 个 %MW 地址要干净得多。还有一个细节DDT 类型定义好后基本变量里引用它的名称建议带下划线或前缀比如 Big_ActSEQ因为程序里通过“类型名.成员名”访问成员时可读性依赖命名规范。没有规范的话半年后你自己回来看都会愣一下。3.4 批量建变量Excel 打开 TXT 再回填的土办法纯手敲变量表不仅慢而且极易把地址写错。Unity Pro 支持在硬件那栏建一个变量然后导出生成 TXT 文档再用 Excel 打开这个 TXT 继续编辑最后再导回。这个流程几乎是现场模板级操作值得完整走一遍在硬件里建立第一批变量右侧导出 TXT 文件。打开 Excel“文件 → 打开”文件类型选“所有文件”选中刚导出的 TXT。选择“分隔符号”点下一步勾选“Tab 键”再点下一步。根据原变量表的各列含义把每列对应的数据格式选对比如“名称”列选文本“地址”列选文本“值”列选数值。在 Excel 里补齐其余硬件的地址和注释保存回 TXT注意保持列顺序和原文件一致再导入 Unity Pro。有时导出文件里的列分隔不是标准的 Tab而是空格或其他符号Excel 的“预览”窗口会直接显示分列效果看准了再点下一步。如果导回后中文注释乱码多半是编码问题用记事本把 TXT 另存为 UTF-8 或 ANSI 再试具体取决于软件版本的区域语言设置。这里可以分享一个我常用的补充手段把导出的 TXT 丢给一段脚本来检查地址重叠。比如在 Python 里读入 TXT解析每一行的地址字段比较 %MW 数值区间是否有交集。几百个变量的项目用脚本跑一遍比肉眼核对可靠得多import re # 读取导出TXT按Tab分隔 vars_list [] with open(exported_vars.txt, r, encodingutf-8) as f: for line in f: parts line.rstrip(\n).split(\t) if len(parts) 3: continue name, typ, addr parts[0], parts[1], parts[2] m re.search(r%MW(\d), addr) if m: vars_list.append((name, int(m.group(1)))) # 按地址排序后检查重叠 vars_sorted sorted(vars_list, keylambda x: x[1]) for i in range(1, len(vars_sorted)): prev_name, prev_addr vars_sorted[i - 1] cur_name, cur_addr vars_sorted[i] if cur_addr prev_addr: print(f地址重叠: {prev_name}(%MW{prev_addr}) 与 {cur_name}(%MW{cur_addr}))这个脚本虽然朴素但能一次性找出手误造成的地址冲突。参数上只需保证导出的 TXT 是“名称\t类型\t地址”的简单结构如果你的导出列更多把 split 之后的下标对应当前列顺序即可。脚本只做检测不做修改避免误写源文件。4. DFB 与程序段把重复逻辑封成功能块再落到 MAST4.1 DFB 的创建流程AI 转换块怎么起手Unity Pro 里的 DFBDerived Function Block是用户自定义功能块适合把一段反复使用的逻辑封装起来。入门阶段最常见的 DFB 场景是模拟量转换现场压力变送器输出 4-20mA经过模拟量输入模块后你拿到的原始值是 0-4095 或 0-65535 之类的数字量要变成真实的压力值。每次写一遍线性换算不仅烦而且各段的量程还可能被改错。创建路径是“项目浏览器 → 变量和 FB 实例 → DFB 类型”。输入变量名称 AI_Converter类型保持默认的 DFB。在“输入”和“输出”区输入管脚变量名比如输入RawValue原始值、RawMin、RawMax、EngMin、EngMax输出EngValue工程量结果。然后在“段”里输入功能块变量名 SCALE_Calculate编程语言通常选 FBD、LD 或 ST。我习惯选 ST公式写起来最直接。双击 SCALE_Calculate进入块内编程区逻辑就是标准的线性映射(* 4-20mA / 0-10V 信号线性转工程量 *) IF RawMax RawMin THEN EngValue : (RawValue - RawMin) * (EngMax - EngMin) / (RawMax - RawMin) EngMin; ELSE EngValue : 0; (* 防止分母异常 *) END_IF;这段代码的核心是把原始值减去原始量程下限再按比例缩放后加上工程量下限。需要注意的是 Unity Pro 的除法结果类型。这里的变量如果全是 INT乘法结果会按整数运算处理量程跨度大的场景很容易失去精度。常见做法是管脚变量用 REAL 类型或者用 INT_TO_REAL 做一次显式转换。DFB 的定义里“所有输入值和输出值的数据类型必须相同”是针对功能块的通用规则你建立 DFB 管脚时类型自己把控别让管脚混着 INT 和 REAL 还指望隐式转换。4.2 程序段与任务为什么不建议把所有逻辑塞进一段编写程序的入口是“程序 → 任务 → MAST → 段”右键选择“新建段”输入名称和编程语言。Unity Pro 的程序结构里任务相当于扫描周期MAST 是主任务段是任务下的逻辑单元。新建的段可以选 FBD、LD、ST 等语言同一任务下混用不同语言的段是被允许的。在实际项目里我强烈建议把段按功能拆分而不是一个段里从上到下写完所有逻辑。参考拆分方式段名称语言职责DI_HandleST数字量输入滤波与状态整理AI_HandleST模拟量工程量换算InterlockFBD设备联锁保护条件Motor_CtrlLD电机启停逻辑Comm_UpdateST通讯数据打包与发送段独立的好处很明显设备联锁有问题时直接打开 Interlock 段排查不用在几千行的大段落里滚动翻页同时每个段的编译信息独立显示错误定位到段级。新建段时语言的选择没有绝对标准我的习惯是有大量数学运算和数据转换用 ST逻辑控制、互锁用 FBD 或 LDPID 回路用 FBD 自带的 PID 功能块。4.3 功能块族谱速记逻辑、数学、比较三类大同小异Unity Pro 的功能块虽然多但基本原理不复杂。先记一条规则所有功能块的输入值和输出值的数据类型必须相同。这解释了为什么你用 INT 和 REAL 混着接 ADD 时会提示“类型不一致”。逻辑类里最常用的是ANDOUT IN1 IN2两个输入都为 1 时输出 1否则输出 0。OROUT IN1 OR IN2两个输入都为 0 时输出 0否则输出 1。XOR两个输入值不同时输出 1相同输出 0。NOTOUT NOT IN取反。RS复位优先存储器。S 置 1 时 Q1 输出 1R1 置 1 时 Q1 清零S 和 R1 同时为 1 时R1 优先。R_TRIG上升沿检测CLK 从 0 跳到 1 时 Q 输出一个扫描周期的 1。F_TRIG下降沿检测CLK 从 1 掉到 0 时 Q 输出一个扫描周期的 1。数学类最常用的是 ADD、SUB、MUL、DIV、MOVE 和 DIVMOD。ADD 的 OUT IN1 IN2MOVE 本质是赋值OUT IN做批量数据传递时 MOVE 比逐字赋值高效。DIVMOD 同时给出商和余数适合做累计量换算比如把脉冲数除以 10 得到工程单位余数用来补精度。比较类 EQ、NE、GE、GT、LE、LT 都是双输入判断 IN1 与 IN2 的关系后输出 BOOL。新手容易把 GT 和 GE 记混GT 是严格大于IN1 IN2GE 是大于等于IN1 ≥ IN2。程序里需要“高于上限报警”用 GT“不低于下限复位”用 GE别把复位死区搞没了。定时器和计数器里 CTU 是加计数器模型是每次输入上升沿计数值加 1达到预设值时输出置 1。复位信号触发后回到 0。典型应用是产线产品计数(* 使用CTU加计数器统计装箱数量 *) udtBoxCount : CTU(ctuInput : bProductPulse, ctuReset : bResetPulse, ctuPreset : 200); IF udtBoxCount.ctuDone THEN bBoxFull : TRUE; (* 满箱信号触发换箱动作 *) END_IF;这段代码里 CTU 功能块通过结构化文本调用ctuInput 是计数脉冲ctuReset 是复位ctuPreset 是预设值。调用完成后 CTU 的输出成员 ctuDone 在计数值到达预设值时变为 TRUE用于给“满箱”逻辑置位。功能块调用方式看起来和普通函数不同但本质上是一一对应的参数名看清就行。5. 避坑手册连接、下载、上载、保存最容易翻车的地方这一章全是真金白银的踩坑经验。以下现象如果你没遇到那说明你运气好遇到了也正常照着下面的原因和解决路径来就行。坑 1断开程序连接时提示“是否更新上载信息”手快点了“否”下次连接 PLC 时无法上传程序。现象程序能下载、能运行但点“从 PLC 中上传项目”时软件提示“上载信息不可用”或类似错误且无法从控制器读回源程序。原因Unity Pro 上载功能依赖控制器端保存的上载信息。这个信息是在你下载程序后、正常断开连接时写入的。如果断开时选了“否”控制器侧的上载信息不会更新。某些情况下如果你在下载时设置了“禁止上载”也会直接锁掉上载通道。解决断开连接时弹出的提示框选择“是”让软件更新上载信息。没有别的捷径也不要反复拨线重插——和接线无关。这个提示框很多时候被当成“要不要保存工作区”其实是两码事。从那以后我每次断开 PLC 连接前都停一下看清楚再点。另外在“上载信息”勾选框里如果为了交付、防止程序被随意拷贝而去掉勾选就会导致无法上载这是主动行为不是故障。坑 2在运行模式下修改完程序没有点“生成更改”点了下载按钮后 PLC 里还是老逻辑。现象明明改了梯形图或 ST 代码编译也显示无错误但下载到 PLC 后现场动作没变化切到仿真模式看逻辑却是新的。原因Unity Pro 的增量编译机制。修改程序或添加删除变量后必须点“生成更改”或“重新生成所有项目”改动才会进入可传输的工程镜像。如果只是保存了文件而没有生成下载到 PLC 的仍是上一次生成的结果。解决养成固定习惯改完程序 → 先点“生成更改” → 看下方信息栏是否有错误或警告 → 再执行“将项目传输到 PLC”。有错误时无法下载到 PLC这不是软件 bug是在主动保护旧程序不被半成品覆盖。注意有警告时通常可以正常下载但警告里如果包含“地址重叠”“变量未使用”之类的提示还是先双击进去看清楚再走别带病运行。坑 3变量地址超出状态 RAM 设定范围编译不报错但运行到某个逻辑时数据不回写。现象程序能下载、能运行但某些变量的值在动态数据表里始终不变或者在上位机画面上显示异常。查程序逻辑也没问题变量地址也没冲突。原因状态 RAM 的地址范围在 CPU 属性里设定了而你的变量地址恰好落在范围之外。Unity Pro 对超范围地址的处理有时候是编译告警有时候甚至不提示运行时该地址不会被正确映射。解决回到 CPU 属性对话框检查“状态 RAM”的起始和结束地址确认覆盖了全部变量地址。给出的经验是地址范围至少要留 10%~15% 的余量因为你后面加变量、加功能块时地址会继续往前推没有余量就得改 CPU 配置再重新下载那是牵一发动全身的操作。坑 4新建以太网网络时网络名称用了中文或数字开头新建时提示失败。现象在“通讯 → 新建网络”输入名称比如“1#网络”或“以太网1”点确定后直接报错提示名称非法。原因Unity Pro 对网络名称的字符集有限制。手册里明确说了名称默认设置不支持中文不支持数字和个别符号开头建议以英文字母开头如 ETHERNET1。解决按规则重命名。名称里可以包含数字但不能以数字开头也不能带中文。这一点不需要绕过去因为后续所有引用都会用这个名字老老实实按“字母开头 下划线或数字”的规范来能少很多没必要的麻烦。坑 5高版本软件打不开低版本工程文件或者打开后部分功能显示异常。现象同事发给你一个 .STU 文件你的软件版本比对方高直接双击打开报错或打开后工程树里某些对象是灰色不可用。原因Unity Pro 的工程文件格式不完全向上兼容。高版本软件打开低版本程序必须先把低版本工程导出为 .XEF 格式文件再在高版本里导入。同样地如果你的版本低对方的版本高也需要对方导出 XEF 给你。解决文件菜单“开始 → 导出项目”保存类型选 *.XEF。这个格式就是不同版本之间迁移的中间桥梁相当于设计软件的“兼容格式”。平时的工程保存则用“文件 → 另存为”生成 .STU 主文件同时自动生成 .ztx、.auto、.sta、.BAK 等辅助文件这些辅助文件都可以删不影响 .STU 打开。但要注意.STU 保存的是完整工程.XEF 是迁移/交换用格式二者不是替代关系。提交给同事做跨版本协作时换成 XEF 对方才接手。6. 从仿真到真机动态数据表验证与一套“保存三件套”习惯程序写完后别急着下装。先在“PLC”下把运行方式切到“仿真模式”仿真器的连接地址固定为 127.0.0.1、介质 TCPIP。仿真模式不是摆设它能验证大部分逻辑正确性尤其是变量表地址映射和功能块调用关系。仿真模式下点“测试连接”通了之后把项目传输到仿真器点运行然后在动态数据表里观察变量当前值。动态数据表的使用技巧是先在基本变量表里选中一个或几个变量右键选择“初始化动态数据表”软件会自动把这些变量带入动态数据表也可以直接在动态数据表里手输变量名。对模拟量变量可以直接修改数值模拟现场信号对数字量变量可以强制为 1 或 0。这个能力在调试联锁逻辑时极其好用——不用去现场短接信号直接在表里强制一个“到位反馈”看程序怎么响应。模拟量信号常见的做法是输入一个中间值比如 4-20mA 对应 0-100%你就填 50看换算后的工程量是不是 50借此验证 DFB 的量程设置。真机连接时标准模式下有三种方式连接方式介质地址适用场景USBUSBSYS笔记本直连 CPU 的 USB 端口以太网TCPIPCPU 中 NOE 配置的 IP如 192.168.1.20通过网线连到 NOE 模块网口MBMBPLUS01主机架上 NOM 模块的 MB 地址如 2老系统或远程机架维护无论哪种方式连完都必须点“测试连接”按钮。连接失败就检查网线、IP 段、模块是否运行别盲目重插线。仿真模式下测试连接用的是 127.0.0.1如果你的现场 PLC 的 IP 恰好是 192.168.1.20也要保证电脑网卡 IP 和它在同一网段。调试完下装运行后我固定会做一遍“保存三件套”第一点“文件 → 另存为”保存 .STU更新工程文件第二把需要跨版本传输的程序用“导出项目”另存一份 .XEF第三断开连接时弹出的“更新上载信息”提示框选“是”。这三步做完才意味着整个工程在这一轮调试中的成果真正被固定下来了。曾经有一位同行因为没有做第二步导致高版本软件那边接手后打不开关键程序段周末赶去现场重新上传才解决。从那以后我每完成一次项目修改都强制走一遍这“保存三件套”——生成更改、测试连接、运行验证、另存 STU、导出 XEF、断开选“是”。这套动作用不了三分钟但能挡掉八成的返工和跨版本悲剧。动态数据表还有个小习惯值得推荐每次真机验证时把几个关键模拟量和状态字都拉进动态数据表保持这个小窗口常开然后去操作现场的阀门或电机观察强制值和实际反馈是否一致。这一步能直接把“程序逻辑问题”和“硬件接线问题”区分开遇到状况时排查路径能缩短一半。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?