美文网首页
MatlabGUI与Simulink实时通信

MatlabGUI与Simulink实时通信

作者: carry_xz | 来源:发表于2018-03-13 15:12 被阅读0次

        Matlab的GUI通过load_system加载Simulink模型,之后在GUI控件的回调函数中通过set_param控制Simulink模型。

        Simulink回调函数StartFcn可以注册监听事件,事件在周期都会更新一次。可以借此实现两者之间的实时通信。

GUI与simulink实时通信实例

1.建立GUI界面


    新建GUI选择空白GUI。完成后先保存为Test,会生成两个文件Test.fig与Test.m,继续编辑Test.fig。

    按以上界面从左侧控件列表拖入对应控件。双击按钮1打开属性对话框,修改string属性为Start,Tag属性改为PB_Start。同理修改按钮2为string属性为Stop,Tag属性改为PB_Stop。

2.准备simulink模型

    如下图建立TestSim的simulink模型,存放在与fig文件相同的位置。模块可在simulink

Library Browser左上方输入名称查找,Real-Time Sync模块实现仿真与真实时间的同步(可能需要独立安装,按提示输入几个命令即可)。

3.修改GUI生成的Test.m文件

打开Test.m文件,在Test_OpeningFcn中加入

load_system('TestSim');

在PB_Start_Callback中加入

set_param('TestSim','SimulationCommand','start')

在PB_Stop_Callback中加入

set_param('TestSim','SimulationCommand','stop')

在slider1_Callback中加入

pos =num2str(get(hObject,'Value')) %获取slider当前位置

set_param('TestSim/Constant','Value',pos);%将slider当前值赋值给Constant模块。

    目前已经实现了GUI控制Simulink模型的单向操作,接下来实现simulink模型实时传递数据给GUI界面。

4.在GUI的m文件中加入Line对象

在Test_OpeningFcn函数中加入line_H继承自axies1

line_H = line('Parent',handles.axes1,...

    'XData',[],...

    'YData',[],...

    'Color','blue',...

    'EraseMode','xor',...

    'Tag','line_H');

5.建立给Simulink模型调用的Callback函数EventListener.m

function EventListener(block,eventdata)

hf = findall(0,'Tag','figure1');

ax = findall(hf,'Tag','axes1');

thisLineHandle = findall(hf,'Tag','line_H');

xdata = get(thisLineHandle,'XData');

ydata = get(thisLineHandle,'YData');

sTime = block.CurrentTime;

data =

block.OutputPort(1).Data;

if length(xdata) < 1001

    newXData = [xdata sTime];

    newYData = [ydata data];

else

    newXData = [xdata(2:end) sTime];

    newYData = [ydata(2:end) data];

end

set(thisLineHandle,...

    'XData',newXData,...

    'YData',newYData);

newXLim = [max(0,sTime-10)

max(10,sTime)];

set(ax,'Xlim',newXLim);

end

6.将回调函数加载到simulink模型中

在TestSim模型的StartFcn中加入监听事件:

h=add_exec_event_listener('TestSim/Product','PostOutputs',@EventListener);


       至此已经完成了Simulink更新GUI中axes1数据的操作,实现了Simulink向GUI实时传输数据的功能。运行Test.m文件点击start可以看到效果。

相关文章

  • MatlabGUI与Simulink实时通信

    Matlab的GUI通过load_system加载Simulink模型,之后在GUI控件的回调函数中通过s...

  • iOS开发即时通讯环境搭建-XMPP

    即时通信是一个实时通信系统,允许两人或多人使用网络实时的传递文字,消息,文件,语音与视频交流。 关于XMPP XM...

  • iOS近距离实时通信解决方案

    iOS近距离实时通信解决方案 iOS近距离实时通信解决方案

  • 魔方实时通信im组件

    魔方实时通信/协作引擎(Web SDK)是一个全能力的实时云端协作引擎 魔方实时通信,请点击这个 这个SDK可以是...

  • 魔方实时通信一对一音视频组件

    魔方实时通信/协作引擎(Web SDK)是一个全能力的实时云端协作引擎 魔方实时通信,请点击这个 继上一个im聊天...

  • NIO

    基本上实时通信都用socket

  • 环信集成中的bug

    即时通讯 即时通讯,又称实时通讯 即时通信(Instant Messaging,简称IM)是一个实时通信系统,允许...

  • SocketIO 实时通信

    做项目有个需求,站内信息 之前都是http定时请求, 是使用websocket还是http? (本人之前没有做过w...

  • WebSocket实时通信

    WebSocket 协议本质上是一个基于 TCP 的协议。 WebSocket是浏览器和服务器只需要做一个握手的动...

  • fiddler

    fiddler代理模式 -流模式(Streaming):实时通信,请求之后实时返回-缓冲模式(Buffering)...

网友评论

      本文标题:MatlabGUI与Simulink实时通信

      本文链接:https://www.haomeiwen.com/subject/cwezfftx.html