简介:《PSpice 模型创建》是一份面向电路仿真初学者与硬件工程师的实操型文档,围绕元器件数学模型的建立与调用展开,帮助解决自带模型库不适用、新建元件缺少仿真参数等问题。资料包共1个doc文件,约1003KB,篇幅集中,便于按主题查阅。内容涉及模型参数修改、Model Editor 建模、模型文本编辑以及宏模型创建,并给出二极管模型参数文本、74AS168芯片行为级宏模型等示例,还提到.lib与.olb库文件的分配和调用思路。已有1147人学习,适合正在使用Cadence/PSpice做原理图仿真、需要补齐模型设置与宏建模环节的读者参考,可从中梳理从参数编辑到模型导入的完整流程,并借鉴具体写法排查仿真模型问题。
1. 模型创建卡住的地方,往往不在建模本身
装完 OrCAD 16.3,原理图连好线、仿真配置一点,弹出 “Model missing” 或者 “Unable to find model”,很多人的第一反应是自己 PSpice 模型创建时参数写错了。我经手过几次排查,最后发现其中大半跟参数根本没关系:模型文件生成在桌面或临时目录,*.lib没被加进仿真的模型库列表,转换出来的*.olb也没进 Capture 的库搜索路径;还有人是Edit PSpice Model一打开就崩溃,因为安装时路径带了空格或中文。PSpice 模型创建这条链路其实不长,改参数、建模型、导符号、挂库、仿真,但每一步都有一个“东西放哪”的约定,约定错了就是白干。下面按我自己装这套环境的顺序,把版本、目录、三栏编辑器、*.lib转*.olb、宏模型和排错一次写完,照着走能跑通,也能在出错时知道先看哪里。
2. 装前把版本钉死:OrCAD 16.3 的组件清单与许可配置
2.1 组件清单和版本选择
PSpice 不是一个独立安装的程序,它只是 OrCAD 发行版里的一个功能组。同一个安装包会把 Capture(原理图)、PSpice A/D(仿真引擎)、Model Editor(模型编辑)、PSpice Accessories(工具集)、PSpice Optimizer(参数优化)一并装进去,但装完之后你在开始菜单里能不能找到 Model Editor,取决于安装时勾了哪些组件。所以第一步不是急着双击 setup,而是先确认这个安装包里到底有什么。
我这台机器上用的是 16.3 这个发行版本,路径和菜单都是按这个版本来写的。网上流传的教程有的写 16.3、有的写 17.x,路径和菜单结构差别不小,尤其是 Model Editor 的入口位置,17.x 之后做了调整。跟着旧教程在新版本上找菜单,找不到是正常的,不是装坏了。所以版本先定死,后面的路径才对得上。
装之前先确认三件事:系统是 32 位还是 64 位,安装包得对上;杀毒软件或安全策略有没有拦截写注册表、写系统目录的动作;安装路径有没有中文字符和空格。第三条是最容易被忽略的,路径里带空格或者中文,Model Editor 启动时加载运行库会报一个莫名其妙的错误,看起来像“文件损坏”,其实是路径解析的问题。
组件这块,我一般装完会列个清单对一遍:
| 组件 | 入口位置 | 是否必须 | 缺失后的表现 |
|---|---|---|---|
| Capture | 开始菜单 / 安装目录tools\capture | 必须 | 画不了原理图,没有符号库 |
| PSpice A/D | 安装目录tools\pspice | 必须 | 能画图不能仿真 |
| Model Editor | Release 16.3\PSpice Accessories\Model Editor | 强烈建议 | 只能手写网表,改参数没有图形界面 |
| Model Import Wizard | Model Editor 内部菜单 | 随 Model Editor 安装 | 无法生成 Capture 符号 |
| PSpice Accessories | 安装目录PSpice Accessories | 建议 | 少一批辅助工具和示例库 |
这里的“必须”是按能不能完成一次完整仿真来定的,不是按功能多少来定的。Model Editor 单独拿掉也能跑仿真,前提是你愿意纯手写.MODEL语句,而且要自己保证语法、续行、字符数全对,出错以后没有曲线可以对照,排查成本反而更高。
提示:安装包如果只勾了 Capture 和 PSpice,后面想补装 Model Editor,必须重新跑一遍安装程序选“修改”,不要指望单独拷贝一个目录过去能用,注册表里的组件信息对不上。
2.2 安装顺序和许可配置
顺序上,我习惯先把许可相关的部分处理完,再装主程序。如果许可服务是独立部署的,先让许可服务能起来,再去装客户端;如果用的是本机许可文件,那就把许可文件放在一个纯英文、无空格的固定目录里,安装过程中指定过去。顺序反了会出现“装完能打开 Capture,但一仿真就提示 license 不可用”的情况,其实组件都装了,只是许可没接上。
安装过程中有几个参数值得停下来看一眼,不要一路下一步:
- 安装根目录:我固定用
D:\OrCAD,纯英文、无空格、层级浅。安装路径里的空格是 Model Editor 启动报错的常见诱因。 - 许可类型:本机文件还是网络许可,选错以后每次启动都要重新配。
- 组件勾选:Capture、PSpice A/D、Model Editor、PSpice Accessories 四个都勾上,不要图省空间。
装完之后先别急着建模型,先做目录核对。这一步用命令行比用资源管理器快:
# 按实际安装盘符修改根目录,检查关键子目录是否齐全 $root = "D:\OrCAD" Get-ChildItem "$root\Release 16.3" -Directory | Select-Object Name # 模型编辑器目录,PSpice Accessories 下的 Model Editor 就在这里 Test-Path "$root\Release 16.3\PSpice Accessories\Model Editor" Test-Path "$root\Release 16.3\PSpice Accessories"第一行只列目录名,用来确认发行版本号对得上;后面两行用Test-Path返回布尔值,True说明目录存在。如果返回False,不要继续往下装模型,先回去补装组件。这一步很多人跳过,结果后面模型一直加载不上,查到最后发现目录压根没生成。
环境变量这块,常见做法是把许可文件路径写进系统变量,变量名按你手上许可的说明来,通常是LM_LICENSE_FILE或CDS_LIC_FILE这一类,值是许可文件的完整路径或端口号加主机名。写完之后一定要重开一个终端窗口验证,因为已经打开的窗口读的是旧环境变量,改完不生效会让人误以为配置没写对。
# 查看当前进程读到的许可变量,值不为空且路径正确才算生效 Get-ChildItem Env: | Where-Object { $_.Name -match "LICENSE|LIC" } | Format-Table Name, ValueFormat-Table把变量名和值并排显示,方便一眼看出路径里有没有混进中文或空格。值里出现空格时,很多工具会把它当成两个参数解析,表现就是“许可找不到”。
2.3 装完先做三项自检
正式建模型之前,我会先做三个动作,每个动作都是后面出问题时的对照基准。
第一,单独启动一次 Model Editor,不走 Capture。菜单项在开始菜单的 PSpice Accessories 分组里,能正常开出一个空白窗口就说明运行库和许可都没问题。如果这里就报错,问题一定在安装层,跟模型文件无关。
第二,打开 Capture,看一眼库搜索路径。仿真能不能找到模型,取决于 Capture 的库路径里有没有对应的*.olb,以及仿真配置里的 Model Libraries 有没有对应的*.lib。这两个列表是两条独立的链路,符号找不到和模型找不到是两种完全不同的报错,后面排查要分开看。
第三,找一个自带模型改一下参数存盘,确认这个动作不会崩。自带库在安装目录的tools\pspice\library下面,随便挑一个二极管模型,右键Edit PSpice Model,改一个值、保存、关掉,再打开确认改动还在。这一步验证的是写权限,如果安装目录在Program Files下面,普通用户没有写权限,保存会静默失败或者弹一个权限错误,很多人以为改动生效了,实际一直是只读的。
3. 改模型与建模型:从 Edit PSpice Model 到 .olb 符号导入
3.1 Edit PSpice Model 打开的三栏怎么用
修改已有元件的参数是最高频的动作。做法很简单:在 Capture 原理图里选中元件,右键,Edit PSpice Model,弹出模型编辑器窗口。窗口里三块内容各有分工,很多人一上来就去找输入框,结果点错栏位,改不动还以为软件有问题。
| 栏位 | 内容 | 能不能改 | 常见误用 |
|---|---|---|---|
| Models List | 当前库里的模型名称列表 | 只能选择 | 想在这里改名字,实际改名要走文件另存 |
| Simulation Parameters | 结构化参数,键值成对 | 可以改 | 改完不存盘就切走,改动丢失 |
| Model Text | 模型描述文本 | 只读 | 直接在这块里敲字,敲不进去 |
Simulation Parameters是主力区,二极管的反向饱和电流、串联电阻、结电容这些都在这里成对出现。改完必须存盘,存盘写入的是原来那个*.lib文件。这一点要注意:如果你改的是软件自带库里的模型,等于把系统库改掉了,下次装别的工程或者别人用同一台机器,参数就跟你现在看到的不一样了。
我一般会先把这个*.lib复制一份放到自己的工程目录,再在自己那份上改。多花十秒钟,省掉后面“为什么别人的仿真结果和我差这么多”的排查。血泪经验是,自带库被改过之后,波形偏差可能只有几个百分点,肉眼看不出来,但一跑温度扫描或者瞬态分析就露馅,而且很难回想是哪次改的。
Model Text只读这件事容易让人困惑,尤其从别的教程过来的人,习惯直接在文本里改字。它的定位是“给你看这个模型最终长什么样”,真正的编辑入口有两个:结构化参数区,或者退出编辑器直接编辑*.lib文本文件。两条路都通,区别是走参数区有实时曲线对照,走文本编辑没有。
3.2 Model Editor 新建模型:两条入口的差别
在 Model Editor 里建新模型,入口是File/New,然后点工具栏上的新建符号,弹出New Model对话框。这个框里有几项选择,选错了后面参数填起来会很别扭。
Model Name填模型名,这个名字会直接写进*.lib里.MODEL后面那一串,所以别用中文、别带空格、别用特殊符号,长度也别太长,网表里出现奇怪字符是常见的语法报错来源。
最关键的是中间那两个选项:Use Device Characteristic Curves和Use Templates。
选Use Device Characteristic Curves,意思是拿器件手册上的典型曲线来反推模型参数,编辑器会把硬件的典型曲线画出来,你在曲线上取点,通过Reverse Leakage栏填入特定点的 X、Y 值,软件根据这些点拟合参数。适合手上只有数据手册、没有现成模型的情况。拟合出来的模型精度取决于你取了多少点、取在哪个区间,低频段拟合得好,高频段不一定准,这点心里要有数。
选Use Templates,意思是套用软件自带的样本模型,在样本基础上改参数。适合你手上已经有一组比较靠谱的参数,只是想微调。模板给的是一个合理的初值,比从零拟合稳定得多,收敛性也好。
From Model那个下拉框用来指定模型类型,二极管、三极管、运放各是不同类型,选错类型后面参数名对不上,填进去也不生效。
我个人的取舍是:有现成参数就选模板,没有数据手册上的曲线就选曲线拟合,两边都没有就别硬做,先去找器件资料,靠猜参数建出来的模型,仿真能跑通,结果不可信,比跑不通更麻烦。
进到编辑器窗口之后,左边是参数区,中间是曲线区。改一个参数,曲线立刻重画,这是这个工具最有价值的地方:你能直接看到参数改动对特性的影响,而不是改完跑仿真再看波形。Parameters栏里每一项都有范围限制,超出范围软件通常会拒绝接受,这个限制不要随便绕,它对应的是模型方程的适用区间。
3.3 Model Import Wizard:把 .lib 变成可调用的 .olb
模型参数设置完、存成*.lib之后,还不能直接在原理图里调用。原理图需要的是一个带引脚定义的符号,也就是*.olb文件。这一步靠File/Model Import Wizard (Capture)完成。
流程是这样的:执行菜单后弹出Specify Library对话框,输入你刚建好的*.lib文件路径,指定输出的*.olb文件路径,向导会读*.lib里的模型定义,自动生成一个对应的 Capture 符号,引脚按模型定义的端口顺序排。
这一步有几个细节值得强调。输入路径和输出路径都写绝对路径,别用相对路径,向导的工作目录不一定是你以为的那个。输出文件名跟输入保持一致,只改后缀,便于以后对照。生成完之后回到 Capture,把这个*.olb加进库搜索路径,就能在放置元件时看到新建的符号了。
生成的符号引脚顺序是按模型里的端口顺序来的,如果模型里端口顺序写反了,符号看起来正常,连线也对,但仿真结果全错,而且不会有任何报错。这种错误最坑,因为现象是“仿真能跑,结果不对”,排查方向很容易跑偏到参数上去。我一般生成符号之后会先看一眼引脚编号和模型端口是否一一对应,再接线。
3.4 纯文本建库:.MODEL 语句和续行规则
不想开图形界面的时候,直接写文本也行,而且批量建库时更快。新建一个纯文本文件,按 SPICE 语法把模型写进去,保存成*.lib,再走一遍上面的导入向导分配符号。
下面是一个二极管模型的写法,参数是示例值,实际用的时候按器件手册替换:
* 0627 D model .MODEL 0627 D + IS=1.0000E-15 + RS=1.0000E-3 + CJO=1.0000E-12 + M=.3333 + VJ=.75 + ISR=100.00E-12 + BV=100 + IBV=100.00E-6 + TT=5.0000E-9第一行以*开头是注释,不参与计算,写清楚这个模型对应哪个器件,半年后回来看还能认出来。.MODEL后面跟模型名和类型,D表示二极管,类型决定了后面哪些参数有效。每一行开头的+是续行符,表示这一行接在上一行后面,SPICE 解析器会把它们拼成一条语句。最后几个参数的含义分别是:IS反向饱和电流,RS串联电阻,CJO零偏结电容,M结梯度因子,VJ内建电势,ISR复合电流,BV反向击穿电压,IBV击穿电流,TT渡越时间。
参数怎么改,取决于你要模拟什么。做直流分析,IS和RS影响最大;做瞬态和开关特性,CJO和TT决定边沿;做反向击穿行为,BV和IBV要对上器件手册。全都改一遍没有意义,先明确这次仿真的关注点,只动相关的那几个。
续行有个硬限制:单行字符数不能超过 132 个,超了必须用+折到下一行。这个限制不是建议,是解析器的边界,超了直接报语法错误,而且报错信息通常只告诉你行号,不会告诉你“这一行太长了”,第一次遇到容易懵。我一般的习惯是每行不超过 80 个字符,留出余量,看起来也清楚。
注意:
*.lib存盘编码用 ANSI 或 UTF-8 无 BOM。带 BOM 的 UTF-8 文件在某些版本里会让第一行被解析成一个非法字符,报错指向第一行注释,人会以为注释有问题。
写完之后不要直接拿去仿真,先做一次语法上的静态检查:模型名和.MODEL是否对应、类型字母有没有写错、续行符有没有漏、有没有全角空格混进去。全角空格是最隐蔽的一种,看起来和半角一模一样,编辑器不报错,仿真器读进去就是非法字符。
4. 宏模型落地:.SUBCKT、TABLE、LAPLACE 三种写法的取舍
4.1 行为级宏模型:.SUBCKT 的骨架顺序
规模大一点的芯片,晶体管级仿真跑不动。一个计数器内部几十上百个管子,瞬态仿真要跑很久,而且大部分内部节点你根本不关心。这时候用宏模型,只描述端口上的输入输出行为,内部结构简化掉,仿真速度能差出几个数量级。
行为级宏模型用.SUBCKT定义,本质是一段子电路网表。结构上有固定顺序:注释、子电路声明、参数声明、函数声明、电路结构声明、结束声明。顺序乱了不一定报错,但维护起来会很痛苦。
看一个骨架,端口和参数按实际芯片替换:
* 通用四路缓冲器行为级宏模型骨架 .SUBCKT BUF4 A1 A2 A3 A4 Y1 Y2 Y3 Y4 + OPTIONAL: DPWR=$G_DPWR DGND=$G_DGND + PARAMS: MNTYMXDLY=0 IO_LEVEL=0 * 逻辑行为:输入到输出的布尔关系 U1 LOGICEXP(4,4) DPWR DGND A1 A2 A3 A4 Y1 Y2 Y3 Y4 + IO_AS00 IO_LEVEL={IO_LEVEL} + LOGIC: + Y1 = { A1 } + Y2 = { A2 } * 延迟与驱动强度:按工艺参数给上升下降时间 U2 PINDLY(0,0,4) DPWR DGND Y1 Y2 Y3 Y4 Y1_O Y2_O Y3_O Y4_O + IO_AS00 + MNTYMXDLY={MNTYMXDLY} IO_LEVEL={IO_LEVEL} + BOOLEAN: + Y1_O = { Y1 } .ENDS BUF4.SUBCKT那一行写子电路名和端口名,端口顺序就是将来符号的引脚顺序,写反了符号引脚就跟着反。OPTIONAL后面是可选端口,用来接数字电源和地,不写也能跑,写了才能做电源相关的分析。PARAMS定义可调参数,MNTYMXDLY控制延迟取最小、典型还是最大值,IO_LEVEL控制接口电平模型,这两个是行为级模型里最常调的两个旋钮。
中间的LOGICEXP描述纯逻辑关系,只看真假,不管时序;PINDLY描述延迟和驱动,管时序和边沿。把逻辑和延迟拆开写,是为了让你在调时序的时候不用碰逻辑部分,改一个延迟参数就行,逻辑不会跟着乱。这是行为级建模和手写门级网表最大的差别。
要注意的还是那条:每一行不超过 132 个字符,超了用+续行。宏模型里经常一行写很长的布尔表达式,最容易踩这个限制。另外.ENDS后面跟不跟子电路名都行,但跟上的话可读性好,层级多了不容易对错。
新建的.SUBCKT同样要走一遍导入向导,生成*.olb符号,才能被 Capture 调用。子电路类型的模型和前面.MODEL类型的模型在导入时处理方式不完全一样,端口数量多的时候,生成出来的符号引脚会排得很密,接线时容易看错,建议生成后手动整理一下符号的引脚布局再保存。
4.2 表格宏模型和数学宏模型:非线性关系的两种写法
有些器件的输入输出关系是非线性的,用等效电路搭出来很复杂,但你手上有实测数据。这种情况适合用表格宏模型,把测出来的点对直接写进网表,仿真时查表插值。
* 隧道型器件的表格宏模型,点对来自实测数据 Gtunnel node1 node2 TABLE {V(node1,node2)} = + (0, 0) + (0.01, 2.153m) + (0.02, 2.973m) + (0.03, 4.567m) + (0.04, 5.155m)G开头的是受控电流源,TABLE后面花括号里是被查表的变量,这里是两个节点之间的电压;等号后面是一串点对,横坐标是电压,纵坐标是电流。仿真器在两个点之间做线性插值,所以点的密度决定了精度,曲线拐弯的地方要多取几个点,平缓的地方可以稀一些。
这种写法的好处是不用推导方程,有多少数据写多少,精度可控;坏处是外插不可靠,超出表格范围的值仿真器会按端点值延伸,如果实际器件在超出范围后特性反转,结果就完全错了。所以表格一定要覆盖你关心的整个工作区间,宁可在边界上多给两个点。
数学宏模型走另一条路,用传递函数或数学表达式直接描述端口关系,不关心内部电路。典型的是滤波器,一个一阶低通可以用拉普拉斯表达式写出来:
* 一阶低通数学宏模型,时间常数 1ms ELP out 0 LAPLACE {V(in)} = {1/(1+S*1m)}E是受控电压源,LAPLACE表示这个源的输出是输入的拉普拉斯变换,等号后面的花括号里写传递函数。S是复频率变量,1m是时间常数,改这个值就等于改截止频率。这种写法在频域分析里非常直接,扫频一看就知道截止点对不对。
三类宏模型怎么选,我一般的判断是:内部结构清楚、能用少量器件等效的,用行为级.SUBCKT;有实测数据、关系非线性但说不清方程的,用表格;关系本身就是一个明确的数学表达式,比如滤波器、积分器、传递函数,用数学宏模型。混合使用也很正常,一个系统里三种都出现是常态。
4.3 abm.olb 搭动态系统:ETABLE 与 ELAPLACE
行为级宏模型库abm.olb里预置了一大批现成的宏模型符号,不用手写网表,直接从库里拖出来连线就行。做动态系统仿真的时候,这一步能省掉大量重复工作。
典型的搭法是:把系统拆成若干个单元,每个单元用abm.olb里对应的符号表示,属性里填参数,符号之间连线,形成完整的系统框图,然后按普通电路一样跑时域或频域仿真。ETABLE对应表格宏模型,属性里按符号下方标注的数据对形式填进去;ELAPLACE对应数学宏模型,属性里填传递函数表达式。
搭完之后先别急着看结果,先做一次参数核对。每个符号的属性里都有几项,漏填一项,仿真可能报“参数缺失”,也可能用默认值跑出一个看似合理但完全不对的结果。默认值这件事在动态系统仿真里特别危险,因为波形是有输出的,不会报错,容易让人误判。
系统跑起来之后,调参是迭代的:看一眼输出波形,觉得响应太慢就改时间常数,觉得超调太大就改阻尼,改完再跑。这个循环里,符号属性的修改比重新画图快得多,所以前期把系统拆成几个可独立调参的单元,比一次性画成一大坨再调要省时间。
提示:动态系统仿真里,单元之间的连接顺序和信号方向要在图上标清楚,复杂的系统建议用注释标出每个单元的输入输出含义,隔一天回来看图还能看懂。
5. 常见问题排查:五个让模型加载不上的坑
5.1 库和路径类问题
现象:原理图里元件显示正常,一仿真就报模型找不到,模型编辑器里改参数一切正常。
原因:*.lib文件在磁盘上存在,但没有被加进仿真的 Model Libraries 列表。符号库和模型库是两条独立的路径,加进了*.olb不等于加进了*.lib。
解决:打开仿真配置,找到 Model Libraries 那一栏,把*.lib的绝对路径加进去,确认路径生效后重新跑。路径里带空格时,加引号或者干脆把文件挪到无空格目录。
现象:*.olb加了,放置元件时也能看到符号,但连线后仿真提示引脚不匹配。
原因:.SUBCKT里的端口顺序和符号引脚顺序不一致,多半是中途改过模型端口但没重新生成符号。
解决:删掉旧符号,重新走一遍 Model Import Wizard 生成,生成后对照端口列表逐个核对引脚编号,再接线。
5.2 语法类问题
现象:手写的*.lib在编辑器里能打开,仿真时报语法错误,错误指向第一行。
原因:文件存成了带 BOM 的 UTF-8,第一行注释前多了一个看不见的字节,解析器当成非法字符。
解决:用编辑器另存为 ANSI 或 UTF-8 无 BOM,重新导入。改完先在模型编辑器里打开一次,确认没有异常再仿真。
现象:宏模型里的布尔表达式很长,仿真报行解析错误,但肉眼检查语法没问题。
原因:单行超过 132 个字符,没有用+续行。
解决:把长表达式按逻辑运算符拆成几行,每行开头加+,每行控制在 80 字符以内,重新导入。
5.3 配置类问题
现象:改完参数存盘,重新仿真,结果和改之前一模一样。
原因:一是没存盘就切走了;二是安装目录在系统保护目录下,普通用户没有写权限,保存静默失败。
解决:把*.lib复制到自己工程目录再改,改完存盘,重新打开确认参数真的变了,然后再仿真。
6. 装完怎么验证:三次仿真跑通的检查清单
装到这一步,别急着上正式工程,先用最小代价跑三次仿真,每次验证一层,出问题能立刻定位到哪一层。
第一次,验证自带模型能跑。放一个软件自带库里的二极管,接一个直流电源和一个电阻,跑一次直流扫描。能出波形,说明安装、许可、仿真引擎这三层都通了。这一次千万不要测自己建的模型,自带模型就是把“环境”和“模型”两个变量隔离开。
第二次,验证修改过的模型能跑。从自带库里复制一个二极管模型到自己工程目录,改一个IS值,重新导入,跑同样的扫描,对比两次的波形。曲线有可见差异,说明修改真的生效了;曲线完全重合,说明改动没写进去,回去查文件权限和保存路径。
第三次,验证自建的模型能跑。用前面手写或者编辑器建的那个模型,走完*.lib到*.olb的导入,加到原理图里,跑一次瞬态分析。这一次同时验证三件事:模型语法、符号引脚、库路径。跑通了,一条完整的 PSpice 模型创建链路就算走完了。
三次仿真的检查顺序之所以不能颠,是因为它们的失败现象不一样:第一次失败是环境问题,现象通常是打不开或者提示许可;第二次失败是写权限问题,现象是改动不生效但没有任何报错;第三次失败是链路问题,报错通常会明确指向模型或者引脚。把变量一次只放开一个,比一次全上然后对着一个报错猜要快得多。
还有一个小技巧:把这三次仿真的工程分别存成三个独立目录,不要共用库路径。后面再遇到“仿真跑不起来”的时候,直接打开第一次那个工程跑一遍,能跑通就说明环境没坏,问题在新模型上,排查范围立刻缩小一半。
从那以后,我每次装完这套环境,都会先跑一遍这三个最小工程,再动手做真正的模型。看起来多花了二十分钟,实际上省掉的是后面几个小时对着报错猜原因的时间。希望帮到你。
本文还有配套的精品资源,点击获取