http://foundy.blog.163.com/blog/static/26338344201161031053576/
学习SIMULINK的人都会摆几个S-Function概念的招式,认为这才是入道者、专业SIMULINK人士的标志,如果按照这个标准,那么我觉得自己的SIMULINK仍然不够专业,不过不要紧,在SIMULINK框架下实现多领域产品设计的体系,S-Function并不是致命的要素,在某个时期侧重点不同,现在回来再总结下这个环节温故而知新。
S-Function是SIMULINK提供的一种灵活的几乎无所不能的机制,拯救那些专业人士表达自己聪明才干的梦想,这些人可以鄙视或者不肖一顾那些专业的SIMULINK工具箱,他们希望自己的思想得到自由流畅的表达,呵呵,这些人中,多数大脑运转的非常快,但是大脑的指令总是不那么容易传达到四肢,这种极端的例子就是霍金先生(SORRY,调侃了)。但是普通的工程师真的有那么多别具一格、原创、甚至需要保密的劳动成果吗?所以S-Function在我看来并不是一个SIMULINK初学者值得花时间的内容。在SIMULINK的代码自动化过程中,可能更现实的内容是用SIMULINK的工具集成一些现成的算法,或者集成目标底层驱动程序到SIMULINK实现系统各个系统的装配,SIMULINK有这样一类工具自动实现S-Funtion的功能,这样实现的S-Function,你也无须了解任何关于TLC(目标语言编译器)的知识,这对减轻SIMULINK学习的负担是非常重要的。C代码、C++代码是最为优秀的程序语言,也有实在太多的通用的劳动成果可以免费得到,所以我们应该强调的代码重用,而不是用S-function去创新、创新、再创新........哇,简直是天才,其实更多的时候,我们用剪切与复制的方法来实现想法也发现憋得慌。
现在来谈谈S-Function的几个基础认识。用S-Function来实现自己的想法可以有很多种可能,一是用MATLAB的m脚本语言,这种方法就适合哪种一天一个闪光思想的大家,这种方法比较简单,m脚本也容易看明白思路的骨架。SIMULINK里可以用两种级别的m脚本实现S-Functon,分别叫做A Level-1 M-file S-function,A Level-2 M-file S-function,在实现M-fileS-function的过程中,SIMULINK是通过一些S-Functon API 和 M-file相互作用的,A Level-2M-file S-function比A Level-1 M-fileS-function有更多的API支持,当然还有其他方面的支持差异,采纳A Level-1 M-fileS-function的应用者没如果没有代码生成的要求,可以这样做。然而用A Level-2 M-fileS-function的应用者如果要做代码生成,那么就得搞TLC了。对于这样的操作,A Level-2 M-fileS-function相对容易实现,但是TLC有点麻烦。还有一种高级点的S-Functon是A C MEXS-function,这种S-function执行速度比A Level-2 M-file S-function要快,这种 C MEXS-function就是比较专业的人士表演的舞台了,比如搞复杂的动态系统算法,所以以上的方法我认为都不适合初学者。下面谈比较容易而高效的两种办法,这两种办法主导思想都是代码重用的技术,就是把曾经可用,测试好的C代码集成到SIMULINK里来,使用这既不需要知道S-Function深入知识,也不需要TLC的只是。
这两个方法就是,一是S-Function Builder,二是Legacy CodeTool,这两个工具使用起来都相对简单,给初学的一个建议就是看看SIMULINK下的最简单的解释样例,比如你可以在MATLAB帮助搜索栏输入关键词ExampleUsing S-Functions to Incorporate Legacy CCode来学习这个简单样例。就把
S-Function Builder,Legacy CodeTool工具基本搞清楚。只有一点值得提醒的是,Function Builder,Legacy CodeTool两类工具,各自支持的模块特征也不一样,比如Legacy CodeTool打包的C代码只是表达系统静态特性的代码(和动态系统相比),但对一般的代码重用支持基本是没问题。更多的各类S-Function的细节特点可以查阅SIMULINK用户指南。