中连续模型得离散化、自定义变量名称、代码生成,然后基于VS2010平台对生成的代码进行测试。
第一步 打开模型
![5b4e14f989fed0a8b29231e854fd06cf.png](https://i-blog.csdnimg.cn/blog_migrate/ff86f5e08cd9e779cce0898e42b08a17.jpeg)
首先我们要确保模型仿真是正确的,即能够正常仿真。
第二步 将输入和需要的输出换成input和output模块。
![27e184a628843b3d0dc5e539c7cbeda6.png](https://i-blog.csdnimg.cn/blog_migrate/8e270dc62e0cca1980fc56051e051c76.jpeg)
第三步 离散化模型
如果你的模型中有连续模块,比如积分环节,那麽一定要离散化,否则即使生成C代码也会报错。
点击设置
![97e4b0550ef6cb9d94d5806fab197047.png](https://i-blog.csdnimg.cn/blog_migrate/6b28dcf3ce251a8d7b00ef70163447cd.jpeg)
设置求解器,采样时间。
![33eea701b0fe1fc77639d338a5c3bf29.png](https://i-blog.csdnimg.cn/blog_migrate/05e9f76d4b70a43a5164e25296f90aaa.jpeg)
![541ce6c5f74c0b439f1f282aea789c38.png](https://i-blog.csdnimg.cn/blog_migrate/32ddc80131e1b73c73c5b00c4cf06f3f.jpeg)
最后点击Apply,点击OK。
点击Analysis->Control Designer->Model Discretizer。
![b419db055e06c4c4aa5d4201badb6c86.png](https://i-blog.csdnimg.cn/blog_migrate/770cbf8cd9ef89c804c87d18b5eed4ce.jpeg)
设置和刚才一样的采样时间,点击转换。
![4e545be198537142b1b221a0f0254e88.png](https://i-blog.csdnimg.cn/blog_migrate/419c5f227690044c6020ac93df3dd2b0.jpeg)
转换完成后的状态空间模型和积分模块。
![dcb76d4530f75dbe7deb4f3a6f0d7674.png](https://i-blog.csdnimg.cn/blog_migrate/b8756e6c0eca8d9bf600a28b93679d85.jpeg)
![763e41378d89a6ca4d1862af95e15ff7.png](https://i-blog.csdnimg.cn/blog_migrate/24f828e075e297cb3c492d1901793591.jpeg)
第四步 自定义变量名称
点击Model Explorer
![c587756cac49c2b53c329ec9c25aa707.png](https://i-blog.csdnimg.cn/blog_migrate/90a0c164bb75966f8122aab3ba76da6a.jpeg)
选择Base Workspace,点击Add。
![1e073f1aaa1f14cdd4cf0100bcae2e54.png](https://i-blog.csdnimg.cn/blog_migrate/2db0571313274653e98eca400bca5409.jpeg)
![7edb35a59c3f13ecbdde8f65be5b7bc8.png](https://i-blog.csdnimg.cn/blog_migrate/a34ecb22080d1338a0aecfc412dd21d3.jpeg)
名称改为你想要的变量名称,类型选择mpt.singal(其他想要输出的信号也一样)。
![3310ab93f94fb2c52b9c3e9c41f0e528.png](https://i-blog.csdnimg.cn/blog_migrate/dc3a169a773a374f5ae6f0c3d66e7e93.jpeg)
![09de5961a0733b3d5c3fc1294731d34f.png](https://i-blog.csdnimg.cn/blog_migrate/e83fe3eb4aa203155a822900abc54ef8.jpeg)
关闭该窗口。
右键想要输出或者输入的信号,点击Properties。
![701274585526ea221f9ce6820dd4220d.png](https://i-blog.csdnimg.cn/blog_migrate/d4fb5b5e7d31049782f22bb3cb47423c.jpeg)
输入刚才定义的变量名称,勾选第一项
![e1f187bfb031394b4413b89ff518ff22.png](https://i-blog.csdnimg.cn/blog_migrate/c07dbb1427054b893b18b88718cee139.jpeg)
其他信号同上。
第五步 生成C代码
![58b77ac20013f1b2a6885a8e6139c9e8.png](https://i-blog.csdnimg.cn/blog_migrate/9837e029e49ac4da4933b34a311fff25.jpeg)
剩下的全部默认就好
只有这里根据你代码运行的设备进行选择,我是在64位的windows系统上测试,运行环系是VS2010.
![bbfb55d8c1898b9f4a67484b975f5172.png](https://i-blog.csdnimg.cn/blog_migrate/264a0e76a07128ae54a1f55a3398d65f.jpeg)
完成之后生成如下文件
![0b6b27f3478d7b1315e33c01ab0bdf8f.png](https://i-blog.csdnimg.cn/blog_migrate/299af9ce230239eb7090f91759d8840c.jpeg)
第六步 在VS2010上运行
打开VS2010
![af69e3e35edd83ff5cdea8949c30cd89.png](https://i-blog.csdnimg.cn/blog_migrate/fe7392deb3efea1b6c037c04182eab95.jpeg)
点击文件->新建->从现有的代码中创建
![3b31f874f8664b173240d82f09fca90d.png](https://i-blog.csdnimg.cn/blog_migrate/d96a25e0e364099bb1cc8cb6f98e7b78.jpeg)
选择刚才自动生成的文件夹
![ca67ecbd6760ddff5611a1d18970b10f.png](https://i-blog.csdnimg.cn/blog_migrate/c48ffa1637f6d6660ac11b3aa04e9bca.jpeg)
定义项目名称
![ccdd3d447d827ab4a954d0a83d9bb0a3.png](https://i-blog.csdnimg.cn/blog_migrate/e124ba44243c341beda70bbbe9eedefa.jpeg)
选择控制台应用程序
![00805f23f6300b5dfd86ce6e6c67a1a0.png](https://i-blog.csdnimg.cn/blog_migrate/065211ae2735902b88d80682a4a0ccab.jpeg)
然后就一直下一步,然后完成
![2127195a761c3d2605528e4f44877313.png](https://i-blog.csdnimg.cn/blog_migrate/09531846afb1474f0347d5e75d1aac0a.jpeg)
打开ert_main.c这个文件
![a5b66de0be0c1d2636d6563759b1e28a.png](https://i-blog.csdnimg.cn/blog_migrate/dce9781e6afca4bf3be17e62f61e72c2.jpeg)
可以找到一个while循环
![2f667d48850ef65ba3ae36f359b8fe36.png](https://i-blog.csdnimg.cn/blog_migrate/ca7861ecdaa1c2532c55f13332193326.jpeg)
修改为一下代码(注意要定义整型变量i):
while (i<=2000) {
r=5;
System1xu_step();
printf("%f", x[1]);
printf("");
i++;
/* Perform other application tasks here */
}
运行结果
![63320ea44954c910c74d336625f5366c.png](https://i-blog.csdnimg.cn/blog_migrate/9d5ce1f63aa452370dda9b56e74fa48b.jpeg)