外部函数:在 C 脚本中引用头文件来编译 dll

2023-12-14

使用 Dymola 2017。

情况 A) 调用外部 c 脚本

我已经成功实现了没有“# include ”语句的简单外部 c 函数:

模型功能:

function chirp

  input Modelica.SIunits.AngularVelocity w_start;
  input Modelica.SIunits.AngularVelocity w_end;
  input Real A;
  input Real M;
  input Real t;
  output Real u "output signal";

  external "C" u=chirp(w_start,w_end,A,M,t)
    annotation(IncludeDirectory="modelica://ExternalFuncTest/Resources/Source/", Include="#include \"chirp.c\"");

end chirp;

C 脚本:

double chirp(double w1, double w2, double A, double M, double time)
{
  double res;
  res=A*cos(w1*time+(w2-w1)*time*time/(2*M));
    
  return res;
}

情况 B) 调用 .dll 文件中的外部函数

我还成功地在编译的 dll 中调用外部函数:

模型功能:

function bessel_Jn
  "Bessel function of the 1st kind (regular cylindrical) of order n"

  extends Modelica.Icons.Function;

  input Integer n;
  input Real x;
  output Real y;

  external "C" y=gsl_sf_bessel_Jn(n,x) annotation(LibraryDirectory="modelica://ExternalFuncTest/Resources/Source/gsl-1.8/", Library="libgsl");

end bessel_Jn;

情况 C) 调用外部 C 脚本,该脚本通过标头使用外部 .dll 中的函数

我现在想做的是创建一个可以做更多有趣事情的 c 函数。我当前的方法是在引用编译的 dll(在本例中是 GNU 科学库的编译版本)的 c 函数中包含头文件。这个例子有标题(尽管它暂时没有做任何事情)。

模型功能:

function chirp

  input Modelica.SIunits.AngularVelocity w_start;
  input Modelica.SIunits.AngularVelocity w_end;
  input Real A;
  input Real M;
  input Real t;
  output Real u "output signal";

  external "C" u=chirp(w_start,w_end,A,M,t)
    annotation(LibraryDirectory="modelica://ExternalFuncTest/Resources/Source/gsl-1.8/", Library="libgsl",
               IncludeDirectory="modelica://ExternalFuncTest/Resources/Source/", Include="#include \"chirp.c\"");

end chirp;

C-cript:

#include <gsl/gsl_sf_bessel.h> //<-- note the additional header

double chirp(double w1, double w2, double A, double M, double time)
{
  double res;
  res=A*cos(w1*time+(w2-w1)*time*time/(2*M));
  return res;
}

当尝试调用上面的函数时,错误表明翻译失败,并且由于头文件的存在而没有其他错误。如果头文件被注释掉,该函数将按预期运行。

如果您对如何正确实施此功能有任何见解,请告诉我。谢谢。


供参考:下图是外部c脚本和.dll的路径。

Wrong Path: Note gsl header folder is within gsl-1.8 folder Resources Source Folder

Correct Path: Note gsl header folder is at the same level as gsl-1.8 folder Corrected Resources Source Folder


UPDATE:标头有效,但函数调用导致翻译失败

我已经更新了 c 脚本,现在调用一个应该由标头处理的函数。在目前的状态下,它不会起作用。也许它无法找到 .dll 文件,尽管它在 modelica 代码中指定了?我是否必须在 C 脚本中包含 load .dll 命令?

#include <gsl/gsl_sf_bessel.h>

double chirp(double w1, double w2, double A, double M, double time)
{
  double res;
  double y;
  res=A*cos(w1*time+(w2-w1)*time*time/(2*M));
  y = gsl_sf_bessel_j0(time); // <-- Calls a function from the .dll file using the header
  return res;
}

我相信这只能通过相对包含路径或实现未来 Modelica 语言规范 3.4 的未来工具来解决。看https://trac.modelica.org/Modelica/ticket/2103了解 Modelica 语言规范的相应更新。

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

外部函数:在 C 脚本中引用头文件来编译 dll 的相关文章

  • 第四讲 系统建模方法

    系统建模一般流程 实际系统的分析方法大致类似 但对于实际系统的模型实现方式则有多种 1 面向方程 图框 的因果建模 基于图框进行系统模型实现 的软件很多 如Simulink AMESim 应用于控制领域 等 2 面向对象 非因果 的物理建模
  • 从平面 Modelica 代码中提取类型/类名

    我想知道是否已经存在从平面 Modelica 代码中提取所有变量及其相应类型 分别为类名 的可能性 例如 给定扁平 Modelica 模型的摘录 constant Integer nSurfaces 8 constant Integer c
  • OpenModelica 建模库仑摩擦:翻译错误,优化后模块 findZeroCrossings(模拟)失败

    我正在尝试在 Modelica 中模拟库仑摩擦力 基本概念是检查表面之间的相对速度是否小于常数 并且试图使表面相互滑动的外力是否小于最大静摩擦力 法线力 静摩擦系数 则摩擦力等于负值的外部剪切力 否则 摩擦力等于滑动方向相反方向的动摩擦力
  • 如何在 Dymola (Modelica) 中使用 /bigobj 进行编译

    我正在将一个相对较小的有限元 FE 模型集成到 Modelica 中 为此 我创建了一个模型 Modelica 类 它可以读取 Matlab 二进制文件格式的质量 M 和刚度 K 矩阵 我将 FE 模型与 Modelica 标准库 Mode
  • 来自 Dymola mos 脚本的 mkdir

    我有一个用于运行多个模拟的 mos 脚本 在运行模拟之前 我想cd to a new目录 以便保存所有结果和日志文件并且永远不会被覆盖 目前只能cd据我所知 到现有目录 任何人都建议如何创建名为例如的目录temp modelname and
  • 外部函数:从 C 脚本使用 .dll 的替代方法

    这是一个伴随问题外部函数 在 C 脚本中引用头文件来编译 dll 该堆栈溢出问题是使用 Modelica 外部函数调用 c 脚本 然后 该 c 脚本使用 dll 中包含的 c 函数 以下是我尝试过的最初首选方法和我不喜欢的工作尝试 初步尝试
  • modelica:计算随时间变化的连续变量的最小值/最大值

    如上所述 我希望计算连续变量随时间变化的最小值 和 或最大值 这是一个演示的最小示例 model MinMaxTest Real u Real u min start 10 Real u max start 10 equation u si
  • Modelica 仿真和方程初始化总时间计算

    我想测量 DAE 系统的总模拟和初始化时间 我对挂钟时间感兴趣 就像 Matlab 中函数 tic toc 给出的时间 我注意到在 Modelica 中 模拟时间有不同的标志 但实际上 与我按下模拟按钮到模拟结束所经过的时间 大约用手机时钟
  • Dymola 标志列表

    Dymola 中的一些设置可以通过在 命令 窗口中设置标志来更改 标志的一些示例是 Advanced AutoFormatting Advanced PedanticModelica Advanced LogStartValuesForIt
  • 使用 python 进行 Modelica 参数研究

    我想使用 python 在不同的 modelica 建筑库 建筑物 IDEAS 中运行参数研究 例如 更改渗透率 我尝试过 simulateModel和simulateExtendedModel zone n50 value 我的问题 为什
  • 外部函数:在 C 脚本中引用头文件来编译 dll

    使用 Dymola 2017 情况 A 调用外部 c 脚本 我已经成功实现了没有 include 语句的简单外部 c 函数 模型功能 function chirp input Modelica SIunits AngularVelocity
  • Modelica - Dymola Python 界面:将输出格式设置为文本

    我通过 Dymola Python 界面使用 Dymola 运行 Modelica 模拟 我的目标是将结果文件写入文本输出 即写入 txt文件 即使我的模型包含注释 Dymola experimentSetupOutput textual
  • 仿真期间的 Modelica 输出文件

    我进行了很长时间的模拟 并且需要在模拟继续时检查输出 另一个原因是我正在进行实时模拟 所以我也想实时查看输出 如果 OpenModelica 在模拟过程中创建一个输出文件 以便我可以使用第 3 方工具 也许是 Python 读取并绘制它 那
  • 是否可以在 Windows 机器上从 Dymola 编译 Linux 可运行的 fmus?

    我正在尝试使用 Dymola 从 Windows 计算机导出 FMU 以便在 Linux 和 Windows 操作系统上使用 我猜这样的 fmu 将有 linux64 和 linux32 二进制文件以及 win32 和 win64 二进制文
  • FMU FMI模拟,设置某类参数时不修改结果

    我为该示例开发了一个基于 MSL 流体库的简单 Modelica 模型 我将 MassFlowSource 与管道和 Boundary PT 连接为接收器功能 如下图所示 http www casimages com img php i 1
  • 在 Modelica 模拟中包含因果关系会导致模型扁平化时出现平移错误

    我想模拟基于能量工作的质量弹簧模型的控制器 model model parameters parameter Real m 1 parameter Real k 1 parameter Real Fmax 3 parameter Real
  • 如何将自定义包添加到 Dymola/Modelica 的启动路径中?

    我有一个自定义包 我发现自己在 Dymola 模型中重复使用该包 并且我想将此包放在一个公共目录中 每当我启动 Dymola 时都会自动加载该目录 我当前的策略是在加载我正在处理的模型时加载自定义包 然后保存总计 这并不优雅 因为自定义包的
  • 从 dymola 模型获取高质量图片

    我需要从 dymola 的建模对象中获得相当好的图像 由于模型的尺寸 截取屏幕截图 使用截图工具会导致图片质量非常差 有没有办法导出我在dymola中画的 图片 您可以将模型导出为可扩展和可编辑的 SVG 图像 此致 雷内 贾斯特 尼尔森
  • DYMOLA:opc 服务器如何使用 MATLAB 使用 dsin.txt 或 mat 文件进行初始化

    我在 DYMOLA 中创建了一个 OPC 服务器 现在我在 DYMOSIM 中有这个可以单击并初始化 使用 dsin txt 的 MAT 文件 现在我在 MATLAB 中创建了一个 GUI 文件 并获取变量的输入并创建了一个 mat 文件
  • OpenModelica 中的集成方法

    我注意到 OpenModelica 模拟设置中有多种可用的集成方法 我不知道这些是什么 我可以获得有关这些的一些信息吗 如果改变积分方法 结果的质量会发生变化吗 有关 OpenModelica 中可用集成方法的简短文档 https open

随机推荐

  • OpenCV-(-215:断言失败) _src.total() > 0 函数 'cv::warpPerspective'

    我的完整代码 import cv2 as cv import numpy as np cap cv VideoCapture 0 cv CAP DSHOW imgTarget cv imread photos TargetImage jpg
  • python 中 Appengine 的通配符搜索

    我刚刚开始在 Google App Engine 上使用 Python 构建联系人数据库 实现通配符搜索的最佳方法是什么 例如 我可以执行 query name newman 吗 不幸的是 Google 应用引擎无法进行部分文本匹配 来自文
  • 使用 Java 和 Samba JCIFS 访问文件

    我有一个关于使用 Samba JCIFS 访问文件的问题 所以我想访问一个服务器 我们将其称为server unv edu 工作组是WKGRP 此服务器中有一个共享 server unv edu pcb 我尝试访问服务器的方式是 publi
  • 防止变量名被 read.csv/read.table 破坏?

    我的数据集testdata有 2 个名为PWGTP and AGEP 数据位于 csv file 当我做 gt head testdata 变量显示为 PWGTP AGEP 23 55 26 56 24 45 22 51 25 54 23
  • 通过文件输入选择多个文件时删除单个文件

    当允许用户选择多个文件时 是否可以从要上传的文件列表中删除单个文件 例如 我有一个看起来有点像这样的输入
  • Android:使用 xslt 转换 xml

    我想使用 xsl 文件转换一些 xml 并以某种方式输出结果 我使用的是 Android Api Level 8 我当前的活动如下所示 但变压器保持为空 LogCat 抛出一个System err with org apache harmo
  • 如何消除const_iterator的常量性?

    作为这个问题的延伸Are const iterators faster 我还有一个问题const iterators 如何消除 a 的常量性const iterator 虽然迭代器是指针的广义形式 但仍然const iterator and
  • 获取 Dart 中的当前日期

    如何在 Dart 中获取独立于系统日期和时间的当前日期 我努力了DateTime now但它给出的是系统日期而不是实际日期 以防系统日期被更改 如果您不相信系统会给出正确的时间 则需要向其他地方询问以获取时间 这可以通过多种方式完成 具体取
  • ABP 中实体的 DTO 映射异常

    当我尝试插入实体时 出现有关 映射 的错误 插入物是由CreateCrudAppService 的方法 我的实体继承自FullAuditedEntity但相关的 DTO 仅指定了几个属性 我该如何处理这种情况 Unmapped member
  • 删除所有的 .字符串中除最后一个之外的(点)

    我需要删除字符串中除最后一个点之外的所有点 例如 如果字符串是 1 2 3 4 5 则结果需要是 1234 5 这是在 powershell 中 我做不到 先感谢您 正则表达式替换 所有点后面没有点 1 2 3 4 replace
  • 在 C++、OpenGL 中使用 De Casteljau 算法绘制贝塞尔曲线

    我正在尝试找到使用 decasteljau 算法生成贝塞尔曲线的方法 以完成我的一项作业 我能够使用正常方法生成贝塞尔曲线 但无法开始使用上述算法生成 如果有人可以建议我正确的方向或分享您拥有的任何代码 这将会有很大的帮助 我不只是按原样询
  • 萤火虫错误:找不到元素

    1客户端 通过 AJAX fn 向服务器发送请求 2服务器 响应形式为text xml并且只能正常运行 1 到 2 次 response setContentType text xml 3但仅在 1 2 请求之后 我在浏览器中收到错误 fi
  • 从 Google 云端硬盘下载图像

    我正在尝试使用 python api 从 Google Drive 下载一些图像文件 我使用的代码首先获取文件资源对象 找到 downloadUrl 并使用它来下载文件 问题是gif和png文件似乎没有下载网址 service self u
  • 连接到 Paypal 时出现 OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 读取服务器证书 B:证书验证失败)

    我知道有很多关于此错误的讨论 但遗憾的是我无法在那里找到任何可行的解决方案 我正在开发一个电子商务网站分享部落 我正在尝试将 Paypal 实施为支付网关 所以我正在使用活跃商户 在开发机器上一切正常 但是当我将 Rails 应用程序部署到
  • 在 Android 所有活动上设置标签栏底部

    我开发了一款Android应用程序 在这里 我必须在所有 Android 活动上设置选项卡栏底部 我该怎么做 请给我解决方案 我总共有 10 个活动 这意味着选项卡栏显示在所有 10 个活动的按钮上 我在 android 中该怎么做 请帮助
  • BroadcastReceiver获取ServiceState信息

    有谁知道在android中获取电话服务状态 IN SERVICE OUT OF SERVICE EMERGENCY ONLY POWER OFF 的方法 我希望有一个广播接收器来识别这些变化 但我找不到任何东西 我知道有一个侦听器 但我不确
  • 如何在 R 中计算这个求和?

    如果我们有一个数据集 其中 x ij 的大小为 4 x 3 矩阵 i 1 2 3 4 且 j 1 2 3 y i 是一个向量 z ij 也是一个 4 x 3 矩阵 a1 c 1 0 1 2 a2 c 2 2 1 2 a3 c 1 3 2 3
  • 错误 无法安装应用程序。确保您已设置 Android 开发环境

    我创建了react native项目 然后在终端打开该文件夹 运行 npm start 然后 react native run android 后 我能够在虚拟设备上运行它 但是 当我从 vscode 终端执行此操作时 出现以下错误 信息
  • 将 JTextfield 放在 JPanel 上?

    为什么文本字段没有出现在框架内的面板上 我的意思是是否需要一些额外的操作来制作面板的组件 可见的 我希望有人能帮助我 public class example1 public static void main String args JFr
  • 外部函数:在 C 脚本中引用头文件来编译 dll

    使用 Dymola 2017 情况 A 调用外部 c 脚本 我已经成功实现了没有 include 语句的简单外部 c 函数 模型功能 function chirp input Modelica SIunits AngularVelocity