【转贴】创建自已的Toolbox
为了增加代码或模块通用性与规范性,最好的方法便是建立自已的工具箱;我以前写程序也喜欢规纳与总结成自已的库,但是毕竟精力有限,只是做一个简单的堆积,没有规范的文档。现在很荣幸有时间投入到这项工作中,所以分享一些精验,也希望得到一些指点。以下所述是针对matlab7.1的,主要计划是建立某个以simulink模块为主加上m文件函数的工具箱。
1. m文件函数的文档可用htm文件, 在文件头注释中可加入"参见"与"doc"链接,形如
function varargout=my(T)
% XXXXXXXXXXXXX
% 例: r=my(T)
% 参见
% <a href="matlab:help my2">my2</a>
%
% <a href="matlab:helpview('C2Q.htm')">doc C2Q</a>
这样 help my 就会在命令窗口提示链接。
2. 为每一个字目录(除了private与help)编写Contents.m文件,典型格式如下:
% ==================================================================
% Contents of XXXX
% ==================================================================
%
%<a href="matlab:help my">my</a> - XXXX model
这样 help+目录名 就可以在命令窗口提示链接,可以从主目录链接到各子目录。
3. 为工具箱编写安装程序,如install.m,内容包括路径添加,欢迎界面,特定的初始化工作,在系统工具箱中添加所需通用文件等。为了不用设次都运行install.m,可以在其中加入读写starup.m的代码。例如,运行一次install后,我的startup.m增加如下代码:
%$$
% -------------- Codes Generated from XXXX Library 1.0 ---------------
if exist('E:\XXXXX\install.m')
run('E:\XXXXX\install.m')
end
% -------------------------------------------------------------------
%$$
这样每次重启matlab后自动运行install,可以看到漂亮的欢迎界面。
4. 为工具箱编写反安装程序,如uninstall.m,把写入startup.m的内容除去,去除所添加路径,把更改系统工具箱的地方改回来。
5. Simulink模块库的搭建框架是,一个主模块文件,其结构是封装的各级目录,但不包括具体模块。每部分具体模块是一个文件,通过主在模块文件中用回调函数"openfcn"打开。
6. 要想simulink模块库在simulink browser中显示,需要在路径中添加slblocks.m文件,其具体内容可参考帮助。
7. mdl模块中不出现中文或全角字符,模块的SavedCharacterEncoding采用默认值或'GBK', Matlab的CharacterEncoding采用默认的'GBK'(参见slCharacterEncoding); m文件函数, C文件S-function可以有中文字符.
8. mdl模块文档可用htm文件, 添加方法为Edit mask->Mask help,再输入helpview('myhelp.htm').可为整个模块库建立Contents.htm文件,以树型结构链接到各模块文档。文档间的链接可以包括:类似模块文档间的链接,返回目录的链接,与演示文档的链接,邻近模块的链接等。
9. mdl模块中若有S-function最好用C语言的版本.m file的S函数不支持编译(可以加tlc文件,好象更复杂).
10. mdl模块中不应有Matlab Fcn模块,不支持编译,可以用Matlab Embedded Fcn模块.
11. mdl模块中可以有Stateflow模块,是支持编译的,但stateflow中不应有像"ml.disp"这样的matlab语言。
12. mdl模块若用到原有模型库的模型时link不能打断,这样更新某个模块,用到它的模块也同样更新。
13. 要隐藏模块的内部结构,可将其编译为c-mex S-函数(点右键Generate S-function)。
还存在的问题是C-mex function用到的公用函数的管理,以及两相s-function同时include一个c文件无法编译的问题,还有模块库的发布形式问题。欢迎有兴趣的朋友提出建议并一起讨论。 好贴,收藏了 收藏了!多谢分享!
页:
[1]