【更新v1.1】matlab/simulink代码生成与labview调用(DLL方式)

您所在的位置:网站首页 simulink生成数组 【更新v1.1】matlab/simulink代码生成与labview调用(DLL方式)

【更新v1.1】matlab/simulink代码生成与labview调用(DLL方式)

2024-07-09 09:36| 来源: 网络整理| 查看: 265

文章目录 0. 补充内容:SIMULINK代码生成为DLL时封装多个函数1. 测试范例1.1 方法1:直接输入二维矩阵(推荐方案)1.2 方法2:一维向量输入后转换二维矩阵(特殊情况) 2. 实操2.1 labview修改图像大小与分离图像RGB(推荐,方便部署FPGA)2.1 调用matlab生成的DLL处理图像 3. 存在的问题

0. 补充内容:SIMULINK代码生成为DLL时封装多个函数

见博文 https://blog.csdn.net/huangzhai429718/article/details/101677380

1. 测试范例

以单通道色彩图像m*n矩阵合并,可以得到matlab所需的m x n x 3的图像矩阵 使用代码生成,function输入为3个单通道的二维m x n矩阵,输出也为二维矩阵

1.1 方法1:直接输入二维矩阵(推荐方案)

在matlab中创建如下例子程序

function y = f(x) y = x.*3; end

进行代码生成(具体操作步骤见本人另外一篇博文),设置如下: 在这里插入图片描述 在labview 内设置如下: 变量x:数组,维数2,4位单精度,固定大小 变量y:数组,维数2,4位单精度 在这里插入图片描述

1.2 方法2:一维向量输入后转换二维矩阵(特殊情况)

在这里插入图片描述

2. 实操 2.1 labview修改图像大小与分离图像RGB(推荐,方便部署FPGA)

如图 在这里插入图片描述

2.1 调用matlab生成的DLL处理图像

此处以R,G,B合成图像,再拆分为R,G,B三通道为例

function [ROut, GOut, BOut] = restructuring(RIn, GIn, BIn) [hang, lie] = size(RIn); image = uint8(zeros(hang,lie,3)); image(:,:,1) = RIn; image(:,:,2) = GIn; image(:,:,3) = BIn; ROut = image(:,:,1); GOut = image(:,:,2); BOut = image(:,:,3); end

在这里插入图片描述

3. 存在的问题 matlab代码生成时,若选择输入矩阵大小为:inf x :inf,在vs2015内编译会报错,暂未找到解决方法,应该是缺少某.lib或者某.h文件

如下设置,可解决VS编译报错的问题,但labview调用dll时会卡死,(1)可能是labview设置问题,导致输入为完全定义;(2)可能是labview不支持C99标准,待查 在这里插入图片描述 针对:inf x :inf矩阵无法被labview正确调用的问题思考:例如在matlab中定义输入为100 x 100矩阵,但labview中输入小于100 x 100的矩阵可以被读取,且读取规则按照向量引索进行,那么在matlab内定义输入大小为1 x n的固定长度的一维数组,随后将一维数组处理为所需矩阵,是否可以解决无法输入变大小数组的问题?

未完待续……



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3