MATLAB - MATLAB 32bit 和 64bit 之间的交互
Posted
技术标签:
【中文标题】MATLAB - MATLAB 32bit 和 64bit 之间的交互【英文标题】:MATLAB - interaction between MATLAB 32bit and 64bit 【发布时间】:2019-11-21 09:51:51 【问题描述】:问题
我有两个工具用 MATLAB 编写(我不是作者):
-
第一个允许我从 SQL 数据库中检索一些数据,但它仅适用于 MATLAB 64 位(我有 MATLAB 2016b 64 位)。
第二个使用从第一个工具检索到的数据,并通过
在 32 位系统上编译的 DLL,它会得到一些输出。如前所述,
此工具仅适用于 MATLAB 32 位(我有 MATLAB 2013a 32 位)。
我想做的是:
-
在 MATLAB 64 位中从 SQL 获取数据
以某种方式将它们“发送”到 MATLAB 32 位
在 MATLAB 32 位上运行该工具
将 MATLAB 32 位的输出“返回”到 MATLAB 64 位
我知道可以使用 IPC 机制找到解决方案,但我不确定如何找到它们或如何在 MATLAB 中使用它们。有人用过这种东西吗?
查看 MATLAB 文档,我看到可以创建 COM 对象,但我不确定如何使用它在 MATLAB 32 位中运行一些函数。
解决方案
正如下面@nekomatic 所建议的,如果我按照建议的方式运行代码,一切都对我有用,但不包括下面系统命令中的-automatic
。
最终的系统命令格式为
system('"C:\path\to\R2013a\matlab.exe" -wait -r "mycommand; exit"')
mycommand
是一个 MATLAB 脚本,它加载输入文件,执行一些操作,然后保存输出文件。
【问题讨论】:
这里是速度问题吗?例如,您是否可以在每次需要运行第二个工具时等待 MATLAB R2013a 启动,或者您是否需要在几秒钟或更短的时间内完成该过程? 速度没问题。我只想主要使用 MATLAB 64bit 来处理数据。所以,我需要从 MATLAB 64bit 启动一个 MATLAB 32bit 会话,在 MATLAB 32bit 中执行一个函数,将输出返回到 MATLAB 64bit。 【参考方案1】:如果你不需要这个操作很快,最简单的方法可能是:
将 64 位 MATLAB 中的数据另存为.mat
文件
使用system
命令启动 32 位 MATLAB 实例
在 32 位 MATLAB 中运行脚本,从文件中读取数据、处理并保存数据
将结果读回您的 64 位程序。
例如,64 位代码(不包括错误处理、当前文件夹设置等)可能如下所示:
delete result.mat % Delete any result from the previous run
save(data.mat, '-v7.3') % usually best to specify the .mat format to use
system('"C:\path\to\R2013a\matlab.exe" -automation -wait -r "mycommand; exit"')
processedData = load('result.mat')
其中mycommand
是您的 MATLAB R2013a 脚本,它从data.mat
读取数据,对其进行处理,并将结果保存在result.mat
中。
有关 R2013a here(假设 Windows)的启动选项和 R2016b here 的 system
命令的更多数据。您可能需要使用 Mathworks 帐户登录才能查看旧版本的文档,但如果这是一个问题,请查看您各自 MATLAB 安装中的帮助。
【讨论】:
如果我有一个函数我想在脚本 testRunScript 中运行并且函数的形式是 function output = runScript(input) ... output = function2 (输入)结束,我如何在你上面写的代码中实现它?谢谢 对不起,我不太明白这个问题。在我的示例中,您需要编写一个脚本并将其保存为 MATLAB R2013a 路径上的某个位置的mycommand.m
,以便您只需在 R2013a 命令窗口中键入 mycommand
即可运行它。该脚本必须从您选择保存它的任何位置加载data.mat
,使用您的DLL对其进行处理,并将结果保存为result.mat
,以便R2016b代码可以再次读取它。我假设您了解 MATLAB 中的脚本和函数的基础知识。
完美。抱歉,我只错过了您对“命令”的含义以及它应该具有“命令文件”的结构。我写了一个简单的脚本来加载 mat 文件,它会做一些其他的事情,然后将结果保存在另一个 mat 文件中。 MATLAB 64bit 中的系统命令是system('"C:\Program Files (x86)\MATLAB\R2013a\bin\matlab.exe" -automation -wait -r "testRunModel; exit"')
,但它似乎不起作用。我看到光标加载,命令窗口中没有任何反应(我要求显示一些文本)。 testRunModel 是简单的 .m 脚本。
从命令提示符发出此命令是否有效?对于调试,您可以尝试从-r
之后的字符串中删除-automation
选项和; exit
,您可以尝试使用-logfile filename
选项来捕获任何输出。我没有 R2013a,因此无法在该特定版本上进行测试,但根据文档,它应该是这样工作的。
太棒了@nekomatic!删除 -automatic
一切正常。以上是关于MATLAB - MATLAB 32bit 和 64bit 之间的交互的主要内容,如果未能解决你的问题,请参考以下文章
我的windows7旗舰版32位,安上matlab7.1后,其他应用可以,但是simulink是灰色,不可用,怎么回事呢?
DSP视频教程第6期:Matlab和VSCode联调,使用贼舒服,方便测试验证,全程无需打开Matlab(2022-04-09)