matlab dymola 连接在一段时间后失败

2023-12-08

我有 .mat 文件中的实验数据和用 dymola 编写的模型。我使用 dymolaM.m 文件将命令从 matlab 发送到 dymola。这样我就可以使用 matlab 来优化模型的参数。 Matlab从.mat文件中读取数据,以正确的方式初始化dymola,让dymola模拟模型,读取dymola的输出并将其与实验数据进行比较。

这一切在一段时间内工作正常,但如果我重复 matlab dymola 连接太多,我总是会收到以下错误:

    ??? Error using ==> ddeexec
    The first argument 'channel' is not valid.

    Error in ==> dymolaM at 59
    status = ddeexec(DymolaChannel, deblank(command(i,:)), '', timeout);

我尝试重复完全相同的命令 200 次。我总是在迭代 26 时遇到错误。

我应该怎么办?这是 dymolaM.m 文件的代码

    function res=dymolaM(command, value)
    % Executes a command optionally followed by a value in Dymola.
    % Dymola is started if not already running.

    % Version 1.0, 1997-11-14
    % Version 1.1, 1999-06-12

    %    Copyright (C) 1997-2001 Dynasim AB.
    %    All rights reserved.

      DymolaChannel = ddeinit('dymola', ' ');
      if DymolaChannel == 0,
         pause(1);
         DymolaChannel = ddeinit('dymola', ' ');
         if DymolaChannel == 0,
           dymola    = getenv('DYMOLA');
           v=version;
            if (isempty(dymola) & v(1,1)>='5') 
                if v(1,1)>='7'
         [st,I]=dbstack('-completenames');
       else
         [st,I]=dbstack;
       end
       if v(1,1)>='7'
          currentfile=st(I).file;
       else
         currentfile=st(I).name;
       end
             I=find(currentfile=='\' | currentfile=='/');
             currentfile=currentfile(1:(max([1,I(1:end-1)])-1));
             dymola=currentfile;
           end
           if ~isempty(dymola)
              dymola=[dymola,'\bin\'];
           end
           disp('Starting Dymola - Wait');
           fquote    = '';
           if strcmp(computer, 'PCWIN') | strcmp(computer, 'PCWIN64')
            fquote = '"';
           end;
           dos([fquote,dymola,'Dymola',fquote,' &']);
           pause(10);
           DymolaChannel = ddeinit('dymola', ' ');
           disp('Dymola started');
        else
           disp('Worked around problem communicating with Dymola');
        end
      end
      if nargout>0
         res=zeros(size(command,1),1);
      end

      if DymolaChannel == 0,
         disp('Error starting Dymola');
      elseif nargin > 0,
         for i=1:size(command,1)
              timeout=4000*1000; % Can always kill dymola
              if nargin == 1, 
                 status = ddeexec(DymolaChannel, deblank(command(i,:)), '', timeout);
              elseif nargin == 2,
                 status = ddeexec(DymolaChannel, [deblank(command(i,:)), num2str(value(i))], '', timeout);
              end
              if nargout==0 
                 if status == 0,
                    error('Invalid Dymola command.');
                 end
              else
                 res(i)=status;
              end;
            end
            ddeterm(DymolaChannel);
      end

好吧,这个问题已经有四年了,但我在过去的两周里使用了一些不令人满意的解决方法,然后才最终找到了这个解决方案。

我用以下策略解决了这个问题:

我用我自己的修改版本重载了函数 dymolaM.m。 我把命令注释掉了:

DymolaChannel = ddeinit('dymola', ' ');

并将其替换为:

% DymolaChannel = ddeinit('dymola', ' ');
DymolaChannel = get_dymola_channel();

我定义了函数get_dymola_channel();如下:

function DymolaChannel = get_dymola_channel()
    persistent dymola_channel_persistent
    if isempty(dymola_channel_persistent)
        dymola_channel_persistent = ddeinit('dymola', ' ');
    end
    DymolaChannel = dymola_channel_persistent;
end

这意味着函数ddeinit(只能创建有限数量的通道)仅被调用一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab dymola 连接在一段时间后失败 的相关文章

  • 在 MATLAB 中将数据拟合到 B 样条

    我正在尝试估计矩阵形式的时间序列数据中的缺失值 列代表时间点 即现在 我想将矩阵的每一行拟合到 B 样条曲线 并用它来估计缺失值 我可以使用 MATLAB 将数据拟合到普通样条曲线 但我完全陷入尝试找出如何拟合数据以创建 B 样条曲线的困境
  • 在 C/C++ 中调用 MATLAB API

    我刚刚从某处听说 对于数值计算 MATLAB 确实提供了一些用户友好的 API 如果你在 C C 代码中调用这些 API 你可以显着加快计算速度 但我在MATLAB文档中没有找到这样的信息 例如http www mathworks com
  • 如何以编程方式指定 MATLAB 编辑器键绑定

    我想将键盘键绑定设置为Windows 默认设置我想在启动时使用startup m因为我希望在大量系统上设置此设置 首选项对话框中的等效设置是 MATLAB gt Keyboard gt Shortcuts gt Active Setting
  • 在 Matlab 中快速加载大块二进制文件

    我有一些相当大的 int16 格式的数据文件 256 个通道 大约 75 1 亿个样本 每个文件约 40 50 GB 左右 它以平面二进制格式编写 因此结构类似于 CH1S1 CH2S1 CH3S1 CH256S1 CH1S2 CH2S2
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • MATLAB 可执行文件太慢

    我使用以下命令将 MATLAB 程序转换为基于控制台的应用程序deploytool在 MATLAB 中 MATLAB m文件执行大约需要 2 秒 但在我将其转换为可执行文件并调用 exe 执行需要45秒 太长了 我想将 MATLAB 程序与
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http
  • Ilnumerics Ilpanel 在 winform 中编译成 dll 并加载到 matlab 时不激活

    我想将 Visual studio 2012 中用 C 编写的 winform 编译为 dll 然后将其加载到 matlab 2013a 中 然后 我想使用 matlab net 接口与 winform 进行交互 侦听其事件并通过一组预定义
  • Matlab:3D 堆积条形图

    我正在尝试创建一个 3D 堆积条形图 如这个问题所示 Matlab 中的 3D 堆叠条形图 https stackoverflow com questions 13156133 3d stacked bars in matlab 5D 然而
  • 如何在 MATLAB 编译的应用程序中运行外部 .m 代码? [复制]

    这个问题在这里已经有答案了 我有一个 MATLAB 项目 我使用 MCC 对其进行编译以获得单个可执行文件 然后我想知道外部程序员是否可以在 exe 中执行他的一些 m 文件 而无需重新编译整个项目 重点是提供一个应用程序 其他开发人员可以

随机推荐

  • Angular - 通过不同的框架附加 html,每帧一个模块

    我的代码有主窗口和一个 iframe 每个 iframe 都有您的模块 主窗口中的按钮触发单击事件 该事件应将 html 附加到 iframe 中 新的 html 附加到该事件中时应正确应用拦截器和指令 但它不起作用 角度 JavaScri
  • C++ 如何动态创建二维向量

    我正在尝试创建一个 n x n 向量 稍后我可以cout作为表格 矩阵 Xcode 指向 in the for循环并告诉我No viable overloaded 我不知道这意味着什么或如何解决它 int n 5 vector lt vec
  • 如何对来自 facebook api 的图像进行 Base64 编码

    我正在尝试使用 cURL 将 facebook api 提供的图像 url 转换为 base64 格式 api 提供了这样的 url https fbcdn sphotos g a akamaihd net hphotos ak xfp1
  • 如何插入页面跳转并在同一页面内打开选项卡

    我正在尝试插入一个链接 内容为 单击此处查看保修详细信息 该链接将向下滚动页面并打开退货政策选项卡 我已经使用了 iframe 代码 但 eBay 不接受它并且它不起作用 我还可以使用什么其他代码 我想要打开的 退货政策 选项卡位于页面中间
  • Android SAF 获取 SD 卡上特定目录的访问权限

    我仍在寻找 但也许有人面临同样的问题 我正在维护一个应用程序 该应用程序将一些数据存储在两个位置 假设在 sdcard example 和 external memory example 上 在迁移到最新的 Android Api 之前 一
  • 如果在哪里使用 Flutter,我无法使用 firestore 中的 orderBy 查询

    我正在从 Firestore 检索列表 并且需要使用查询来检索特定的 UserID 但同时我还需要按时间戳对该列表进行排序 使用 orderBy 在哪里不可能得到这是我的代码 Container height MediaQuery of c
  • 为什么 Ruby 将 FixNum n 哈希为 2n+1?

    为什么 Ruby 对整数进行哈希处理n to 2 n 1 gt gt 0 1 2 3 each x puts x hash 1 3 5 7 我可以看到 您并不总是需要复杂的哈希值 尤其是对于简单的对象 但为什么采用 双倍加 1 规则而不是像
  • 基于 Web 表单的 Web 应用程序 URL,不带“.aspx”,如 stackoverflow.com

    我想知道是否可以在不显示 Webforms 应用程序页面的 URL 的情况下显示 aspx扩大 例如 http stackoverflow com questions ask代替http stackoverflow com question
  • Internet Explorer 11 不稳定的 CSS3 动画

    请参考这个小提琴 http jsfiddle net eQegA 3 div class spinner div spinner width 100px height 100px border 50px solid blue border
  • 设置ggplot2标签背景颜色

    我有这个条形图 group c A A B B value c 25 75 40 76 day c 1 2 1 2 dat data frame group group value value day day dat ggplot data
  • 是否可以为 iPhone 提供临时构建,而不询问设备 ID?

    是否可以为 iPhone 提供临时构建 而不询问设备 ID 我想将应用程序部署给几个人 但我不想要求设备 ID 来创建配置文件和所有其他内容 那可能吗 如果没有 最简单的方法是什么 简单地说 不 如果您担心从测试人员处获取 UDID 的复杂
  • 是否可以从 Swift 中的 UITextView 元素的光标位置获取索引(String.Index)值?

    我正在寻找拉索引值 String Index 从 UITextView 元素的用户光标位置 我正在使用selectedTextRange方法来获取 UITextRange 值 我如何使用它来检索索引值 您可以获取从文档开头到所选范围开头的选
  • 在 Dynamic Linq 中使用“Single”

    我正在尝试将在 Linq 中工作的 Linq 查询转换为能够在动态 linq 中工作 使用 System Linq Dynamic 因为我希望用户能够形成自己的查询 并且将添加此查询字符串在运行时到其他查询字符串上 我有一个疑问 db in
  • Struts 2 中的 ModuleConfig 和 PluginConfig

    我正在从事 Struts 2 迁移工作 我的 Struts 1 应用程序正在使用ModuleConfig and PlugInConfig类 如何在Struts 2中使用这些类 ModuleConfig and PlugInConfig是S
  • 从 main 调用 pthread_exit 可以吗?

    当我打电话时pthread exit from main 程序永远不会终止 我希望程序能够完成 因为我正在退出程序的唯一线程 但它不起作用 看来挂了 include
  • CSV 新行字符

    我有一个 Excel 模板 用于填写数据并将其导出到 CSV 以填充我网站上的以下页面 http play mink7 com ifocus v4 careers php 当我在 Windows 中导出文件时 我得到了正确的新行字符的格式
  • 瞬态变量继承且子类被序列化

    如果从可序列化类继承瞬态变量 并且如果我更改子类中变量的值 瞬态变量是否仅作为瞬态继承 如果子类反序列化会发生什么 反序列化子类后瞬态变量是否会保持其行为并具有默认值 字段不能被继承 只能被隐藏 如果你有一个transient超类中的字段的
  • 当 classProbs=TRUE 时,在 R 中使用 Caret 的 SVM 会产生不同的结果

    当我尝试使用支持向量机提取预测概率时 我提出了以下问题 SVM 通常分类算法的概率截止值为 0 5 但我需要分析准确性如何随概率截止而变化SVM机器学习算法 I used caret封装在R留一交叉验证 LOOCV 首先 我安装了常规支持向
  • 如何使用 AngularJS 在 ng-init 中传递作用域变量

    我在将从范围声明的变量传递到 ng init 时遇到问题 到目前为止我有这样的事情 scope x 10 div 如何从 ng init 函数内的范围传递 x var 很多人会告诉你不应该这样做 正如这里的文档中提到的 https docs
  • matlab dymola 连接在一段时间后失败

    我有 mat 文件中的实验数据和用 dymola 编写的模型 我使用 dymolaM m 文件将命令从 matlab 发送到 dymola 这样我就可以使用 matlab 来优化模型的参数 Matlab从 mat文件中读取数据 以正确的方式