序文
前回の記事(メッセージ数 6 件) Simulink 学習記録: 非線形システムのための適応コントローラーの構築_HFUTdumpling のブログ - CSDN ブログ に続き、この記事は著者による S-Function (S-Fcn) の学習過程を記録します。
S-Function は System Function の略語で、 Simulink のモジュールを非グラフィカルな方法で記述します。完全な S-Function 構造システムには、動的システムを記述するために必要なすべての機能が含まれています。S-Function を使用すると、ユーザーは独自のモジュールを Simulink モデルに追加でき、MATLAB、C、C++、およびその他の言語を使用して独自のモジュールを作成することを自由に選択できます。
Simulink - S 関数 - Zhihu (zhihu.com)
文章
S——システム、その名前が示すように、S 関数はシステム タイプを構築するために使用される関数です (前回の記事でわかるように、simulink を使用して構築すると行数が増えます)。S 関数を使用して構築すると、システム全体がシンプルかつ明確に見えます。
以下は例に直接進みます。
![](https://img-blog.csdnimg.cn/img_convert/7596ee597b43bb5f3b81760708bf1609.png)
システムはS機能を利用して構築されています。(前の k は方程式によって調整されました。ここで、方程式内の khat を k に変更します。これは、このコントローラーを設計するためにバックステッピング法を使用するのと同じです。この部分を理解していなくても、構築には影響しません。 )。
構築プロセス
まず、plant (システム)、ctrl (コントローラー)、parameters (パラメーター)、および BS_plot (描画) という 4 つの新しいスクリプトを作成します。
parmmeters は、次のようにいくつかのパラメーターを定義します。
![](https://img-blog.csdnimg.cn/img_convert/f315c6f798e2278451a67f8f6f2a79c3.png)
ここでは、その後の使用を容易にするために構造を通じて定義されていることに注意してください。
コマンド ライン ウィンドウに edit sfuntmpl と入力して、S 関数を開きます。S関数はシステムに組み込まれている関数であることがわかります。
![](https://img-blog.csdnimg.cn/img_convert/42ac7aab012d9cd322157c54f87ef841.png)
なお、この関数の内容は変更しないでください。使用する場合はすべて選択し、作成したスクリプトにコピー&ペーストして使用します。ここでは、この部分をすべてコピーして、plant と ctrl にそれぞれ貼り付けます。
- プラント建設(システム構築)
![](https://img-blog.csdnimg.cn/img_convert/6fd67681eea134b7b73930679ce57997.png)
まず、S 関数の構造を簡単に説明します。
![](https://img-blog.csdnimg.cn/img_convert/c9db2a2ea83148e5c87b7cc239ece4e2.png)
これが関数の全体的な構造であり、パラメーターの意味は次のとおりです。
t:时间;x:系统的状态(列向量);u:系统的一个输入(列向量);flag:标志
注意函数名“plant”需要与该脚本名相同(为了方便引用)
然后pa是引入的结构体参数,所以在函数中也需要申明。
![](https://img-blog.csdnimg.cn/img_convert/3fab8d262c8b51ad4afedcc94301dfb1.png)
往下滑动可以看到这一条,这是函数的初始化,以下是我对各函数意义的一些简单的注释:
![](https://img-blog.csdnimg.cn/img_convert/e38231f76414574c725a4c756287a1e0.png)
这部分的数值是对系统搭建的一个初始化。
这里提一个点:
直接馈入:如果S函数的输出y或采样时间t与输入u有直接联系,就是直接馈入;否则不存在直接馈入情况
系统的结构是微分方程的结构,故需要在该函数(状态变量微分)中编辑:
![](https://img-blog.csdnimg.cn/img_convert/c16d3fdab74b713e303239e80e6e6592.png)
系统的输出项:
![](https://img-blog.csdnimg.cn/img_convert/ad20d919418706d76e0c5d925a895050.png)
至此,系统搭建完毕。
- ctrl搭建(即控制器搭建)
跟上部分一样,此处就直接看结果了。
初始化:
![](https://img-blog.csdnimg.cn/img_convert/98323675f4e3ad6dbc5c7c66a76fb630.png)
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/bebdb56915ed96c7fee31b01507e8436.png)
至此两个s函数搭建完毕。
3.在simulink中搭建起来
![](https://img-blog.csdnimg.cn/img_convert/76c691fd74b3453af66f78c613e7bce9.png)
搭建结果大致如上。其中第一个模块是上一篇文章中搭建好的((6条消息) Simulink学习记录:一种非线性系统自适应控制器的搭建_HFUTdumpling的博客-CSDN博客)。
中间的ctrl和plant模块则是用了S函数模块:
![](https://img-blog.csdnimg.cn/img_convert/7c5b252fcd70299f72baf0fcb1ae460a.png)
这里将名称“system”改为之前编辑好的s函数文件名称即可直接与之前编辑的文件对应起来了。然后自己申明的参数是需要写出来的(如pa)。
![](https://img-blog.csdnimg.cn/img_convert/b84a502061a1982262cd90b88229e8d3.png)
搭建好之后,在示波器中,我们可以看到仿真结果:
![](https://img-blog.csdnimg.cn/img_convert/27439083386a7d13a68f268931ec7167.png)
可以看到x1和x1d是能基本拟合的。
至此,非线性反步法的S函数搭建完毕。
*追加一个模块:
![](https://img-blog.csdnimg.cn/img_convert/fd99fd68110ee4af446f516a4ebf8208.png)
这个模块可以在simulink中作为输出,导出的数据可以存入工作区。用以下方法引用:
simulink中:
![](https://img-blog.csdnimg.cn/img_convert/5f5569e1c8cf86aa623e8bd6f4a6f125.png)
建立的脚本文件中:
![](https://img-blog.csdnimg.cn/img_convert/5850db95ebec481c8f8c8d5ec78eca33.png)
再次感谢b站up:德狗追求独立