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 函数名称的最大长度

    我编写了一个 MATLAB 程序 可以动态创建自定义 MATLAB 函数 并使用以下命令在其他 MATLAB 实例中启动它们unix命令 我使用这个程序来自动化 fMRI 神经影像分析 使用 SPM8 for MATLAB 一切正常 但是
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • Simulink 仿真引擎如何工作?

    我想了解 Simulink 仿真引擎的工作原理 它是否使用离散事件模拟机制 那么如何处理连续时间 它是否依赖于基于静态循环的代码生成 或者 在第一个周期之前 它会计算出块的执行顺序 从不需要任何其他块输入的块开始 每个周期 它都会根据输入和
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 在 MATLAB 中重命名文件

    我正在尝试以编程方式重命名工作目录中的文件a temp txt to b hello txt 您建议如何这样做 MATLAB中有一个简单的文件重命名函数吗 我认为您正在寻找 MOVEFILE
  • 如何在 Matlab 中对数组应用低通或高通滤波器?

    有没有一种简单的方法可以将低通或高通滤波器应用于 MATLAB 中的数组 我对 MATLAB 的强大功能 或数学的复杂性 有点不知所措 需要一个简单的函数或一些指导 因为我无法从文档或网络搜索中找到答案 看着那 这filter http w
  • Matlab没有优化以下内容吗?

    我有一个很长的向量 1xrv 和一个很长的向量w1xs 和一个矩阵Arxs 它是稀疏的 但维度非常大 我期望 Matlab 对以下内容进行优化 这样我就不会遇到内存问题 A v w 但看起来 Matlab 实际上是在尝试生成完整的v w矩阵
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • MATLAB 教程中的 SIFT 实现

    我正在寻找 MATLAB 中的一些基本 SIFT 实现 我需要从第一原则来写它 另外 我正在寻找一些可以解释程序中发生的事情的内容 Vedali 的代码和 David Lowe 的代码超出了我的理解范围 如果您是 Matlab 用户 您一定
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 使用符号求解器仅求解某些变量

    我正在尝试在 MATLAB 中求解包含 3 个变量和 5 个常量的方程组 是否可以使用solve求解三个变量 同时保持常量为符号而不用数值替换它们 当您使用SOLVE http www mathworks com access helpde
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • 正确使用 fft2 和 fftshift 进行着色形状

    我正在尝试从 Trucco Verri 文本 3d 计算机视觉入门技术 中看到的着色算法重新创建经典形状 但我很难理解 matlab 中的 fft 函数 本质上 我需要使用可积性约束来获取图像的深度 Z 我不确定在这种情况下何时使用 fft
  • MATLAB:在不使用循环的情况下提取矩阵的多个部分

    我有一个巨大的 2D 矩阵 我想从中提取 15 个不同的 100x100 部分 我有两个向量 x 和 y 其中保存了零件的左上角索引 我用过这样的东西 result cam1 x 1 end x 1 end 99 y 1 end y 1 e
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla

随机推荐

  • 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文件中读取数据 以正确的方式