matlab实时数据传输,利用QuaRC实现c++与simulink(matlab)之间实时双向数据传输
1. 软件环境
1.1
Visual Studio 2005/2008/2010/2012(楼主用的2012)
1.2
Matlab (楼主用的2013b)
1.3
QuaRC (楼主用的2.4版本)
2. 硬件环境
无特殊要求,一般主流PC均可流畅运行。
3. C++程序(客户端)
1.1
首先在vs中添增QuaRC头文件与库文件文件夹目录。
1.1.1
在Property Page->Configuration
Properties->C/C++->Additional Include Directories 加入
$(QUARC_DIR)include。
1.1.2
在Property Page->Configuration
Properties->Linker->General->Additional Library
Directories 加入 $(QUARC_DIR)lib\windows。
1.1.3
在Property Page->Configuration
Properties->Linker->Input->Additional Dependencies
加入 quanser_communications.lib quanser_runtime.lib
quanser_common.lib。
1.2 编写C++客户端程序。
先来看一段QuaRC中提供的代码:
#include
#include
#include "quanser_messages.h"
#include "quanser_communications.h"
#include "stdafx.h"
static int stop = 0;
static void control_c_handler(int signum)
{
stop
= 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
const
char uri[] =
"shmem://foobar:1";
const t_boolean
nonblocking =
false;
const char
* locale =
NULL;
t_connection client;
t_error result;
char
message[512]; signal(SIGINT,
control_c_handler); result = qcomm_connect(uri, nonblocking,
&client);
if (result == 0)
{
t_double buffer =
0.0;
t_int buffer_size
= sizeof(buffer);
while
(!stop)
{ result
= qcomm_receive_double(client, &buffer, buffer_size);
if
(result == -QERR_CONNECTION_NOT_BOUND)
{
result
= qcomm_send(client, &buffer, buffer_size);
if
(result < 0)
break;
}
else
if (result <= 0)
break; result
= qcomm_send(client, &buffer, buffer_size);
if
(result < 0)
break;
} qcomm_close(client);
printf("Connection
closed. The last value received is: %lf.\n",
buffer); if (result <
0)
{
msg_get_error_messageA(locale,
result, message, sizeof(message));
printf("Error
communicating on URI '%s'. %s\n", uri, message);
}
}
else
{
qcomm_close(client);
msg_get_error_messageA(locale,
result, message, sizeof(message));
printf("Unable to
connect to URI '%s'. %s\n", uri, message);
}
printf("Press enter to exit\n");
getchar();
return 0;
}
楼主对其进行了修改,如下:
#include
#include
#include "quanser_messages.h"
#include
"quanser_communications.h"
#include
//#include "afx.h"
#include
using namespace std;
static int stop = 0;
static void control_c_handler(int
signum)
{
stop =
1;
}
int main(int argc, char* argv[])
{
const char
uri[]
= "shmem://foobar:1";
const t_boolean nonblocking
= false;
const char *
locale =
NULL;
t_connection
client;
t_error result;
char
message[512];
signal(SIGINT,
control_c_handler);
result = qcomm_connect(uri,
nonblocking, &client);
if (result == 0)
{
double buffer[3] = {4.0,3.0,2.0};
double buffer1[3] =
{4.0,1.0,2.0};
int buffer_size =
sizeof(buffer);
//cout<
while (!stop)
{
//buffer1=buffer1+0.001;
// cout<
result =
qcomm_receive(client, &buffer, buffer_size);
//cout<
//cout<
if
(result == -QERR_CONNECTION_NOT_BOUND)
{
result
= qcomm_send(client, &buffer1, buffer_size);
//cout<
buffer1[0]=buffer1[0]-0.01;
if
(result < 0)
break;
}
else if
(result <= 0)
break;
result =
qcomm_send(client, &buffer1, buffer_size);
if
(result < 0)
break;
}
qcomm_close(client);
printf("Connection closed.
The last value received is: %lf.\n",
buffer);
if (result <
0)
{
msg_get_error_messageA(locale, result, message,
sizeof(message));
printf("Error communicating on URI '%s'. %s\n",
uri, message);
}
}
else
{
qcomm_close(client);
msg_get_error_messageA(locale, result, message,
sizeof(message));
printf("Unable to connect
to URI '%s'. %s\n", uri, message);
}
printf("Press enter to
exit\n");
getchar();
return 0;
}
建立simulink的model:
相关配置:
如果传输数组(楼主传递的是1×3的向量),得用到bus。
详细参见:
在使用bus时要先定义:
在simulink工具栏edit下找到bus editor 打开
如图,定义一个名为BusObject的bus数据,定义完之后需要对定义的bus数据进行初始化
具体操作,在bus editor中对要初始化的object,
使用bus,每次运行时都需要打开对应mat文件,很麻烦!设法让他在编译model时自己启动
在InitFcn对话框中加入:
load(fullfile(fileparts(get_param(bdroot, 'Filename')),
'my_bus_object.mat'))
最后一项是你要加载的mat文件名。
完成以上后开始对simulink的model进行编译(ctrl+M),然后链接。接着打开c++编译执行,就可以实时进行行数据传输了!
5. 注意事项
1.1
首先运行simulink程序,因为这个是服务器端。
我们也可以将simulink作为客户端,c++作为服务短,对应的simulink模块需要变化。具体可以看QuaRc里面的具体讲解
1.2
断开连接时应先断开客户端,然后暂停服务器端,最后停止服务器端。
6. 这样C++与matlab就可以进行实时通讯。
matlab实时数据传输,利用QuaRC实现c++与simulink(matlab)之间实时双向数据传输相关推荐
- matlab labview 集成,利用COM技术的LabVIEW与MATLAB的无缝集成.pdf
您所在位置:网站首页 > 海量文档  > 计算机 > Labview 利用COM技术的LabVIEW与MATLAB的无 ...
- matlab是那个国家,这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色,拍摄的时候反光比较少...
这是一个老外写的利用曲率来识别硬币的MATLAB程序.作者所在国家的硬币偏黄色,拍摄的时候反光比较少 2016-08-22 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 这是一个老外写的利 ...
- Matlab绘图基础——利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴)
Matlab绘图基础--利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴) - 司徒鲜生 - 博客园 Matlab中axes函数解析_ljh0302的博客-CSDN博客_ ...
- 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...
matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析 课程设计任务书 学生姓名: 专业班级: 指导教师: 刘 新 华 工作单位:信息工程学院 题 目: 利用MATLAB对线性电路正弦稳态 ...
- matlab segy文件,利用matlab实现segy格式数据的读写研究和分析.ppt
利用matlab实现segy格式数据的读写研究和分析 2.SEGY数据格式 地震数据一般以地震道为单位进行组织,采用SEG-Y文件格式存储.SEG-Y格式是由SEG (Society of Explo ...
- 基于matlab的绘图设计,matlab课程设计---利用MATLAB仿真软件进行绘图
matlab课程设计---利用MATLAB仿真软件进行绘图 课程设计任务书课程设计任务书 题题 目目 利用利用 MATLABMATLAB 仿真软件进行绘图仿真软件进行绘图 初始条件初始条件 仿真软件 ...
- matlab中refcurve,利用matlab中自带的的perfcurve函数评价多分类
本帖最后由 翻腾的鱼 于 2014-10-7 10:39 编辑 使用的是32位matlab R2014a.利用SVM做多分类,想要利用perfcurve 函数画出roc图,计算AUC然后对分类结果进行 ...
- 在matlab中,利用for循环来生成一个矩阵,并分别对该矩阵的行和列进行求和
在matlab中,利用for循环来生成一个矩阵,并分别对该矩阵的行和列进行求和 先创建一个新的脚本,并保存,在编辑器中进行编辑.具体如图,以5阶方阵为例: a=zeros(5,5): for i=(1 ...
- 风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景
风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景,并采用快速前推法或同步回代消除法进行削减,可以对生成场景数和削减数据进行修改,下图展示的为1000个 ...
最新文章
- 马云出 1000 亿做阿里达摩院:产品卖到全球了,他说科学研究也要跟上
- Http请求Response Code含义
- TCP/IP / 如何进行流量控制( flow control )?
- Elastic job,任务状态:分片待调整
- Java EE,Docker和Maven(技术提示#89)
- Sublime text3 代码格式化插件vue
- 【Elasticsearch】Elasticsearch高级调优方法论之——根治慢查询!
- python构造自定义数据包_pytorch中的自定义数据处理详解
- C#Winform编程的基础知识
- aspx页面,中文乱码解决方案
- [转]网络性能评估工具Iperf详解(可测丢包率)
- w3c subscribe
- java jsp实验设计心得_jsp课程设计心得_课程设计总结心得
- 极通EWEBS 常见问题及其解决办法
- python编写程序、一个富翁与陌生人做交易_智慧职教云课堂Python程序设计(常州工业职业技术学院)题目答案...
- MYSQLg高级------聚簇索引和非聚簇索引
- 适合c语言初学者的刷题网站
- 通过U盘传播的“病毒”
- 水仙花---c语言(经典)
- T480s安装Ubuntu16
热门文章
- 兴义高考八中2021成绩查询,兴义第八中学2021年录取分数线
- Python多任务(5. 进程之间的通信-Queue队列)
- 小余学调度:调度禁忌操作讲解(持续更新中ing)
- 小余学调度:学习记录(2021.9.13-2021.9.19)母线操作和线路操作
- 神经网络的梯度消失和过拟合产生原因及其解决方案
- OpenCASCADE:绘制测试线束之基本命令
- wxWidgets:wxTextInputStream类用法
- wxWidgets:wxFileCtrlEvent类用法
- boost::multi_array模块实现打印数组相关的测试程序
- boost::histogram::axis::option用法的测试程序