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)之间实时双向数据传输相关推荐

  1. matlab labview 集成,利用COM技术的LabVIEW与MATLAB的无缝集成.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspLabview 利用COM技术的LabVIEW与MATLAB的无 ...

  2. matlab是那个国家,这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色,拍摄的时候反光比较少...

    这是一个老外写的利用曲率来识别硬币的MATLAB程序.作者所在国家的硬币偏黄色,拍摄的时候反光比较少 2016-08-22 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 这是一个老外写的利 ...

  3. Matlab绘图基础——利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴)

    Matlab绘图基础--利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴) - 司徒鲜生 - 博客园 Matlab中axes函数解析_ljh0302的博客-CSDN博客_ ...

  4. 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...

    matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析 课程设计任务书 学生姓名: 专业班级: 指导教师: 刘 新 华 工作单位:信息工程学院 题 目: 利用MATLAB对线性电路正弦稳态 ...

  5. matlab segy文件,利用matlab实现segy格式数据的读写研究和分析.ppt

    利用matlab实现segy格式数据的读写研究和分析 2.SEGY数据格式 地震数据一般以地震道为单位进行组织,采用SEG-Y文件格式存储.SEG-Y格式是由SEG (Society of Explo ...

  6. 基于matlab的绘图设计,matlab课程设计---利用MATLAB仿真软件进行绘图

    matlab课程设计---利用MATLAB仿真软件进行绘图 课程设计任务书课程设计任务书 题题 目目 利用利用 MATLABMATLAB 仿真软件进行绘图仿真软件进行绘图 初始条件初始条件 仿真软件 ...

  7. matlab中refcurve,利用matlab中自带的的perfcurve函数评价多分类

    本帖最后由 翻腾的鱼 于 2014-10-7 10:39 编辑 使用的是32位matlab R2014a.利用SVM做多分类,想要利用perfcurve 函数画出roc图,计算AUC然后对分类结果进行 ...

  8. 在matlab中,利用for循环来生成一个矩阵,并分别对该矩阵的行和列进行求和

    在matlab中,利用for循环来生成一个矩阵,并分别对该矩阵的行和列进行求和 先创建一个新的脚本,并保存,在编辑器中进行编辑.具体如图,以5阶方阵为例: a=zeros(5,5): for i=(1 ...

  9. 风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景

    风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景,并采用快速前推法或同步回代消除法进行削减,可以对生成场景数和削减数据进行修改,下图展示的为1000个 ...

最新文章

  1. 马云出 1000 亿做阿里达摩院:产品卖到全球了,他说科学研究也要跟上
  2. Http请求Response Code含义
  3. TCP/IP / 如何进行流量控制( flow control )?
  4. Elastic job,任务状态:分片待调整
  5. Java EE,Docker和Maven(技术提示#89)
  6. Sublime text3 代码格式化插件vue
  7. 【Elasticsearch】Elasticsearch高级调优方法论之——根治慢查询!
  8. python构造自定义数据包_pytorch中的自定义数据处理详解
  9. C#Winform编程的基础知识
  10. aspx页面,中文乱码解决方案
  11. [转]网络性能评估工具Iperf详解(可测丢包率)
  12. w3c subscribe
  13. java jsp实验设计心得_jsp课程设计心得_课程设计总结心得
  14. 极通EWEBS 常见问题及其解决办法
  15. python编写程序、一个富翁与陌生人做交易_智慧职教云课堂Python程序设计(常州工业职业技术学院)题目答案...
  16. MYSQLg高级------聚簇索引和非聚簇索引
  17. 适合c语言初学者的刷题网站
  18. 通过U盘传播的“病毒”
  19. 水仙花---c语言(经典)
  20. T480s安装Ubuntu16

热门文章

  1. 兴义高考八中2021成绩查询,兴义第八中学2021年录取分数线
  2. Python多任务(5. 进程之间的通信-Queue队列)
  3. 小余学调度:调度禁忌操作讲解(持续更新中ing)
  4. 小余学调度:学习记录(2021.9.13-2021.9.19)母线操作和线路操作
  5. 神经网络的梯度消失和过拟合产生原因及其解决方案
  6. OpenCASCADE:绘制测试线束之基本命令
  7. wxWidgets:wxTextInputStream类用法
  8. wxWidgets:wxFileCtrlEvent类用法
  9. boost::multi_array模块实现打印数组相关的测试程序
  10. boost::histogram::axis::option用法的测试程序