matlab 读取figure 文件上的数据

情况一:figure上只有一个axis

1、首先调用h = findobj(gca,’Type’,’line’)命令取得曲线的句柄;

2、然后调用xdata=get(h,’XData’)和ydata=get(h,’YData’)取得曲线的数据。

情况二:figure上有几个axis,即用subplot等画得图像:

clc;clear

x=1:10;

y1=x.^2;

y2=x.^3;

subplot(2,1,1)

plot(x,y1)

subplot(2,1,2)

plot(x,y2)

figure_info=findall(gcf,’type’,’line’);

xc1=get(figure_info(1,:),’xdata’)

xc2=get(figure_info(2,:),’xdata’)

yc1=get(figure_info(1,:),’ydata’)

yc2=get(figure_info(2,:),’ydata’)

这样就可以将所有子图中的曲线信息都找出来。

对比了findall help文件,其中findall中的handle_list可以是一下几种:

gcf 返回当前Figure对象的句柄值

gca返回当前axes对象的句柄值

gco返回当前鼠标单击的句柄值,该对象可以是除root对象外的 任意图形对象,并且Matlab会把当前图形对象的句柄值存放在Figure的CurrentObject属性中。

情况三:figure上是个二维图像

h=findobj(gcf,’type’,’image’);

img=get(h,’CData’);

情况四:figure上是曲面图像

figure_info=findall(gcf,’type’,’surf’);

xx=get(figure_info,’xdata’);

yy=get(figure_info,’ydata’);

z=get(figure_info,’zdata’);

matlab图像设置

原设置

Figure background color设置
如果选择Force white background后用鼠标复制图像也是白色背景而不是透明的。
如果选择Use figure color保存背景和看到的是一致的,类似于截图。
如果选择Transparent background复制出来的就是透明背景。

matlab的哪些路径需要加入includepath

要使用simulink build出来的c,需要把matlab的哪些路径加入includepath

在使用 Simulink 生成的 C 代码时,你需要将一些 MATLAB 相关的路径添加到编译器的 includePath 中,以便编译器能够找到所需的 MATLAB 头文件和库文件。下面是一些常见的 MATLAB 路径,可以添加到 includePath 中:

  1. MATLAB 根目录的 include 文件夹:这个文件夹包含一些标准的 MATLAB 头文件,如 mxArray.h 和 matrix.h。在 Windows 平台上,这个文件夹的路径通常是“C:\Program Files\MATLAB

simulink生成无效变量问题

matlab调用simulink会生成 a b c d四个无效变量,值分别时1 2 3 4

在MATLAB调用Simulink模型时,如果您在MATLAB工作区域中看到了a、b、c、d等无效变量,并且它们的值分别为1、2、3、4,这可能是因为Simulink模型中存在不正确的导出设置。

当您在Simulink模型中导出数据时,Simulink会自动生成对应的MATLAB变量以供MATLAB环境使用。默认情况下,Simulink会自动导出模型中的信号和参数。这些导出的变量的名称通常以模型中的信号和参数名称作为前缀。

要解决此问题,您可以按照以下步骤进行操作:

  1. 打开Simulink模型。

  2. 在模型编辑器中,选择"File"(文件)

simulink生成代码

230821
生成代码可变参数接口:

Simulink生成C代码,标定量(Parameter)与观测量(Signal)

https://blog.csdn.net/qq_36608205/article/details/128473911

https://ww2.mathworks.cn/help/simulink/ug/working-with-data-objects.html#buvhemb-3

https://ww2.mathworks.cn/help/simulink/ug/determine-where-to-store-data-for-simulink-models.html

https://ww2.mathworks.cn/help/simulink/slref/simulink.parameter.html
https://ww2.mathworks.cn/help/rtw/ug/use-parameter-objects-for-code-generation_zh_CN.html

比着下面这个实例练习一下

Simulink代码生成的简单应用

https://www.bilibili.com/video/BV1Wi4y1X73E/?spm_id_from=autoNext&vd_source=831f636d5e58ec682d58e978245cf645

Simulink Tutorial 3:结构体变量

https://zhuanlan.zhihu.com/p/56892003

简聊Simulink功能开发和集成

https://mp.weixin.qq.com/s?__biz=MzU4MzcwODk3Nw==&mid=2247483861&idx=1&sn=ca4b997976475b5e1073dc2e24ff4315&chksm=fda5b98bcad2309d42e74db2efa122e1c3c4cb0d4e081642b964935a6e3b6ca9ecdea7dc33b9&token=1228118232&lang=zh_CN&scene=21#wechat_redirect

你如果用的simulink.corder生成的代码可以在simulink的model workspace内定义bus作为结构体的封装,在使用时在model explor内将对应模型的输入输出数据类型设置为结构体,同时设置export global,之后,在simulink输入输出端口同样设置数据类型为刚才设置的bus类型,即可。

关于包含头文件
https://ww2.mathworks.cn/help/simulink/slref/coder.cinclude_zh_CN.html

使用 C Caller 模块集成 C 代码

https://ww2.mathworks.cn/help/simulink/ug/integrate-ccode-ccaller_zh_CN.html

在生成的代码中创建可调标定参数

https://ww2.mathworks.cn/help/rtw/ug/use-parameter-objects-for-code-generation_zh_CN.html

https://blog.csdn.net/weixin_41695564/article/details/80751543?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-80751543-blog-127982031.235%5Ev38%5Epc_relevant_default_base&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-80751543-blog-127982031.235%5Ev38%5Epc_relevant_default_base&utm_relevant_index=1
使用Simulink从零构建一个控制系统模型【上】
https://www.zhihu.com/tardis/bd/art/633917431?source_id=1001

https://www.zhangshilong.cn/work/102027.html

生成可供外部调用的函数代码

https://ww2.mathworks.cn/help/releases/R2020a/ecoder/ug/generate-code-using-embedded-coder-quick-start.html

导出函数模型概述

https://ww2.mathworks.cn/help/releases/R2020a/simulink/ug/export-function-models.html

Create an Export-Function Model

https://ww2.mathworks.cn/help/releases/R2020a/simulink/ug/create-export-function-model.html

对求解器进行设置,我们把求解器类型设置为定步长求解器,求解器设置为离散求解器,因为我们的计算机控制系统是一个离散的控制系统,并且我们的控制算法一般是通过定时中断和定时调度去完成的。我们把这个算法设置为10ms调度一次,接下来再去做一个代码生成设置,主要是把系统目标文件设置为grt.tlc,这个呢就是使用代码生成工具时使用simulink coder,

Simulink模型生成c代码,有ert.tlc和grt.tlc,这两个工具链的区别

这两个文件都是系统目标文件,使用grt.tlc作为系统目标文件,生成的代码可以用作快速原型,而ert.tlc生成的代码可以用于嵌入式系统。
ert.tlc生成的是更高效的代码。

另外,grt中的g表示general
ert中的e表示embedded
grt一般用来做sil测试,主要考察生成软件的架构以及功能的正确性
ert则是针对嵌入式进行了优化的“嵌入式C语言”,可以这么理解,grt用来验证代码正确性,ert则是针对嵌入式器件对代码进行了相应的优化处理

simulink生成c程序使用中遇到的问题

我遇到下面这些问题的原因是生成代码配置错了。
经过很多探索,后来使用嵌入式c模块就好了。

Temp\cc1lzoWz.o:test_230fptr.rtP[.refptr.rtP]+0x0): undefined reference to `rtP'

在生成的模型文件中添加
P rtP; // 230822 手动添加 undefined reference tortP’`

test_230829.c:(.bss+0x18): multiple definition of `rtY'; C:\Users\weiyo\AppData\Local\Temp\ccOePlmT.o:main.c:(.bss+0x18): first defined here

重复定义问题,本身include的c文件已经定义了,所以在main.c文件中就不用再定义了。

对于引用了其他c文件的程序编译

gcc main.c simc/test_230829.c -o output

如果只编译主文件会提示一些变量或者就够找不到。

Temp\ccEfu3Tl.o:main.c:(.rdata$.refptr.rtU[.refptr.rtU]+0x0): undefined reference to `rtU'

“undefined reference to“ 解决方法

https://blog.csdn.net/daijingxin/article/details/117292473

simulink可调节参数全局设置

常量模块引用参数时不支持bus类型

把优化部分的默认参数行为从内联改成可调就可以了。

想让simulink生成c后参数可以修改,应该注意什么

如果您希望在 Simulink 生成的 C 代码中能够修改参数,您需要注意以下几点:

  1. 使用可调节参数:在 Simulink 模型中,将需要修改的参数定义为可调节参数。可调节参数是一种在运行时可以修改的参数,可以使用 MATLAB Workspace、MATLAB 命令行或外部接口进行修改。在模型中使用可调节参数,而不是硬编码的常量,可以在生成的 C 代码中实现参数的修改。

  2. 参数标记为 tunable:在 MATLAB Function 块或其他相关模块中,将需要修改的参数标记为 tunable。这样做可以告诉代码生成器将参数作为可调节参数进行处理,并生成相应的接口和访问方法。

  3. 适当的存储类别和访问权限:确保为参数选择适当的存储类别和访问权限。存储类别和访问权限可以在模型的代码生成选项中进行设置。存储类别确定了参数在生成的 C 代码中的存储位置,而访问权限定义了参数在代码中的可见性和可访问性。

  4. 生成代码前的配置:在生成 C 代码之前,确保在模型的代码生成选项中进行适当的配置。您可以选择生成可修改参数的接口函数,以便在运行时修改参数。

  5. 运行时修改参数的机制:在生成的 C 代码中,您需要提供一种机制来实际修改参数。这可以通过与外部接口进行通信、使用命令行界面或通过其他方式实现。您可以根据应用场景选择适当的方法。

需要注意的是,确保在运行时修改参数时,对于实时系统或嵌入式平台,要谨慎评估性能和稳定性的影响。确保任何对参数的修改都不会导致系统不稳定或出现意外行为。

同时,请参考 Simulink 文档和代码生成选项中的相关说明,以获得更详细的指导和最佳实践。

请问如何在Simulink中将参数定义为可调节参数?

在 Simulink 中,您可以将参数定义为可调节参数,以便在生成的 C 代码中能够修改这些参数。以下是一种常见的方法:

  1. 打开 Simulink 模型。
  2. 找到您想要定义为可调节参数的参数。
  3. 右键单击该参数,并选择 "Properties"(属性)。
  4. 在参数属性对话框中,选择 "Tunable"(可调节)选项。
  5. 确定参数的数据类型和初始值,并进行相应的设置。
  6. 根据需要,可以设置其他属性,如最小值、最大值、步长等。

通过将参数的 "Tunable" 属性设置为 "on",Simulink 将识别该参数为可调节参数,并生成相应的接口和访问方法。这样,在生成的 C 代码中,您可以通过修改这些参数的值来实现动态的参数调整。

请注意,参数的可调节性仅在生成的 C 代码中有效。在模拟或仿真过程中,参数仍然按照初始值进行计算。

此外,请确保在模型的代码生成选项中启用了参数接口生成选项,以便生成适当的接口函数。您可以在 "Configuration Parameters"(配置参数)对话框的 "Code Generation"(代码生成)选项中进行设置。

matlab的sim函数

sim函数的变量
[t,x,y]=sim(f1,tspan,options,ut)
其中f1为SIMULINK的模型名,tspan为仿真时间控制变量;参数options为模型控制
参数;ut为外部输入向量。

将数据加载到根级输入端口

https://ww2.mathworks.cn/help/simulink/ug/load-data-to-root-level-input-ports-1_zh_CN.html#bsuwoc1

指定输入表达式

模型的默认输入表达式为 [t,u],默认输入格式为 Array。如果在 MATLAB 工作区中定义 t 和 u,只需选择配置参数 

simulink技巧

在view菜单中有Model Data选项,可以直接查看模型数据

先使用bdclose(‘all’)关闭一切模型(不管你要的模型是否打开),经过这一步之后你要的模型百分百是关闭的,然后执行打开程序。
我用的是bdclose(‘sys’);关闭指定的simulink模型,因为我怕把别的有用的simulink模型也关了。

mcrinstaller

mcrinstaller
ans =
'E:\R2017a\toolbox\compiler\deploy\win64\MCRInstaller.exe'

importdada

对于Unicode编码会多出很多空格和空行
另存为ANSI编码

可不可以把matlab的输出窗口配置到自己的程序中

想法很好,但是命令窗口是MATLAB软件的一个界面,不是一个控件,所以,不能嵌入到自己的GUI界面中。
使用evalin和assignin两个函数就可以搞定~~

也不是不可能,可以用echo和diary函数来试试。。。