Simulink模块库的建立以及模块封装(二)

在simulink中建立自己的模块库以及使用mask对模型进行封装。

每当遇到重复要使用的模型时,都需要去复制粘贴,有些浪费时间,本文就是将自己经常用的模块或者模型放在一起建立自己习惯的模块库。

文件建立步骤Mylib文件夹建立

一、初次安装(安装后,如需增加或更新库,无需再次安装)安装的文件怎么建立前面链接有说明。不需要再解压了。
1.将压缩包进行解压(解压好的文件夹最好放在Matlab所在文件夹里,防止被删掉,导致不能使用)。
在这里插入图片描述

2.在matlab主页,将文件夹Mylib设置为matlab路径。
在这里插入图片描述

3.在matlab打开Mylib文件夹,运行文件夹里的脚本。
在这里插入图片描述

4.打开Simulink Library Blocks,按F5刷新,或者如同点击右键,然后选择Refresh Library Browser刷新模块库,模块就出现在My Library里面。注意:My Library安装后一般在中间位置。
在这里插入图片描述

在这里插入图片描述

二、封装过程
以程序均值滤波为例(MATLAB2018b),进行封装,选择Blank Library,将模型均值滤波模型粘贴在里面。

在这里插入图片描述
在这里插入图片描述

1.框选模型按Ctrl+G,将模型封装成subsystem,删掉输入输出模块,如下图
在这里插入图片描述

2.选择模型,右键选择Mask,再选择Create Mask(或者按Ctrl+M)
在这里插入图片描述

出现下图框
在这里插入图片描述

3.模型有2个输入,1个输出,将模块的名字命名为Filter.
在框内加入代码:

disp('Filter')
port_label('input',1,'in')
port_label('input',2,'Filter_C')
port_label('output',1,'out')

在这里插入图片描述

第1行为模块名字
第23行为输入名称
第4行为输出名称

4.在如图Prompt位置输入模块说明——均值滤波
在这里插入图片描述
4.封装后的模型(这只是模型封装成模块,还没有进入模块库内)
在这里插入图片描述
三、My Library模块库的更新与添加
更新模块库
将要更新的模块复制粘贴到Blank Library模型内,将模型名称改为mylib,替换掉安装时的mylib.slx文件,注意替换的文件也要为.slx。然后打开Simulink Library Blocks,按F5刷新,就可以看到更新的模块库。
在这里插入图片描述

直接向库内添加模块
1.打开Simulink Library Blocks,选择My Library,右键选择Open My Library library,进入到mylib模块库

在这里插入图片描述
2.拖动一下模块,出现黄色标语,选择unlock this library
在这里插入图片描述
3.将封装好的模块复制在模块库内,点击保存。
在这里插入图片描述
4.打开Simulink Library Blocks,按F5刷新,就可以看到更新的模块库。
在这里插入图片描述
四、模块库的模型分类
1.在mylib模块库内加入subsystem,删除它的输入输出模块,改名为要分类的名称,将所属的模块放入subsystem内。点击保存。
![在这里插入图片描述](https://img-blog.csdnimg.cn/216d44490f374b3bb32e3eb6459de295.png
2.打开Simulink Library Blocks,按F5刷新,就可以看到分类的模块库。
在这里插入图片描述
3.双击就能打开分类的模块库,或者在My Library下属分类直接选择。
在这里插入图片描述

<think>嗯,用户现在遇到了Simulink中“找不到引用的库”的问题,即使他们确认库已经存在。这个问题可能让用户感到困惑,因为他们已经按照标准步骤寻找库,但仍然无法解决。我需要仔细分析可能的原因,并给出详细的解决步骤。 首先,用户提到“已经找到这个库了却还是没看见这个引用的库”,这可能意味着库文件确实存在于文件系统中,但Simulink无法正确识别或加载它。可能的原因包括路径问题、库未加载、缓存问题、版本兼容性或引用方式错误。 我应该回顾之前的回答中提到的步骤,特别是关于路径检查和缓存的部分。此外,用户可能没有正确加载库,或者库被其他模型锁定,导致无法访问。版本兼容性也是一个需要考虑的因素,尤其是当用户使用的是较新或较旧的Simulink版本时。 需要确保用户不仅将库添加到路径中,还要在Simulink库浏览器中加载它。另外,检查模型引用是否正确,比如是否使用了绝对路径而非相对路径,或者路径中存在空格或特殊字符导致的问题。缓存问题可以通过重启MATLAB或清除缓存来解决。 另外,用户可能没有意识到需要刷新库浏览器或者重新加载库。有时候,即使文件存在,Simulink可能没有正确更新其内部引用列表。还可能涉及到权限问题,比如库文件是只读的,导致无法正确加载。 我应该分步骤引导用户检查这些可能性,从路径确认开始,到加载库、检查缓存、验证引用方式,以及处理可能的版本冲突。提供具体的命令行操作和图形界面操作步骤,帮助用户逐步排查问题。同时,强调预防措施,如使用项目管理工具和初始化脚本,以避免未来出现类似问题。</think>在Simulink中遇到**“找不到引用的库”**错误时,即使确认库文件存在,问题可能源于路径配置、缓存冲突或引用方式错误。以下是逐步排查与解决方案: --- ### **1. 明确错误类型** - **典型报错**: ```matlab Error: Referenced model 'mylib.slx' not found. ``` - 提示模型引用了某个库(如 `mylib.slx`),但Simulink无法定位。 --- ### **2. 核心解决步骤** #### **步骤1:验证库文件是否真正被识别** - 在MATLAB命令行中检查库路径: ```matlab >> which mylib.slx % 检查Simulink是否能识别库的位置 ``` - 若返回空,说明路径未正确添加。 - **手动添加路径**: ```matlab >> addpath('C:\Project\Libraries\'); % 替换为实际库路径 >> savepath; % 永久保存路径(可选) ``` #### **步骤2:确保库已加载到Simulink浏览器** - Simulink库浏览器可能未加载目标库: 1. 打开Simulink库浏览器(`Ctrl+Shift+L`)。 2. 检查左侧库列表中是否存在目标库(如 `mylib`)。 3. 若未显示: - 右键点击库浏览器空白处 → **“打开库”** → 手动选择 `mylib.slx`。 - 在模型中右键引用模块 → **“链接选项”** → **“更新链接”**。 #### **步骤3:检查引用方式是否正确** - **错误引用示例**: - 模型中使用模块直接链接到库文件(如 `mylib.slx/Subsystem`),但路径未包含。 - **解决**: 1. 在模型中双击报错的引用模块。 2. 查看模块属性中的 **“源块”** 路径是否完整(应为绝对路径或相对路径)。 3. 若路径错误: - 右键模块 → **“链接选项”** → **“更改链接”** → 重新选择库文件。 #### **步骤4:处理缓存或版本冲突** - **问题**:Simulink可能缓存了旧路径或旧版本库。 - **解决**: 1. 清除Simulink缓存: ```matlab >> clear all >> bdclose all >> rehash toolboxcache % 重置工具箱缓存 ``` 2. 重启MATLAB,重新打开模型。 #### **步骤5:检查库文件权限与完整性** - 确认库文件未被锁定或损坏: - 尝试另存库文件副本(如 `mylib_copy.slx`)。 - 检查文件属性是否设置为“只读”(取消勾选)。 --- ### **3. 场景化解决方案** #### **场景1:库文件在路径中,但模型仍报错** - **可能原因**: - 库文件位于MATLAB路径的子文件夹中,但未添加到路径。 - 路径中包含空格或特殊字符(如 `C:\My Project\`)。 - **解决**: - 使用 `genpath` 添加子文件夹: ```matlab >> addpath(genpath('C:\Project\Libraries\')); ``` - 避免路径含空格,改为短路径(如 `C:\Proj\Libraries\`)。 #### **场景2:跨版本兼容性问题** - **问题**:高版本Simulink创建的库在低版本中无法识别。 - **解决**: 1. 在高版本中导出库为旧版本格式: ```matlab >> save_system('mylib.slx', 'mylib_R2018b.slx', 'ExportToVersion', 'R2018b'); ``` 2. 在低版本中重新链接。 #### **场景3:库文件被其他模型占用** - **问题**:库文件已由其他Simulink实例打开并锁定。 - **解决**: - 关闭所有Simulink窗口,重新打开当前模型。 --- ### **4. 高级调试技巧** - **依赖项追踪**: ```matlab % 列出所有依赖库 >> [refModels, ~] = dependencies.fileDependencyAnalysis(modelName); >> disp(refModels); ``` - **最小化测试**: 1. 新建空白模型,尝试添加目标库中的模块。 2. 若仍报错,说明问题在库文件本身(如内部路径错误)。 --- ### **5. 预防措施** 1. **使用项目管理工具**: - 通过 **`Simulink Project`** 统一管理库和模型,自动配置路径。 2. **初始化脚本**: ```matlab % init_project.m proj = simulinkproject; % 激活项目 proj.addPath('Libraries'); ``` 3. **避免相对路径**: - 使用 **`$MATLABROOT`** 或 **`$PROJECTROOT`** 宏定义路径。 --- ### **示例:修复“未找到库”错误** **报错**: ```matlab Error: Referenced model 'motor_lib.slx' not found. ``` **解决步骤**: 1. 检查路径:`which motor_lib.slx` → 发现路径未添加。 2. 添加库路径: ```matlab >> addpath('D:\Drive\Motor_Models\'); ``` 3. 更新模块链接: - 右键报错模块 → **“链接选项”** → **“更改链接”** → 选择 `motor_lib.slx`。 4. 清除缓存并重启MATLAB。 通过以上步骤,可系统性解决Simulink中“找不到引用的库”问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吐V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值