CN110196720B - 一种Simulink生成动态链接库的优化方法 - Google Patents
一种Simulink生成动态链接库的优化方法 Download PDFInfo
- Publication number
- CN110196720B CN110196720B CN201910457517.6A CN201910457517A CN110196720B CN 110196720 B CN110196720 B CN 110196720B CN 201910457517 A CN201910457517 A CN 201910457517A CN 110196720 B CN110196720 B CN 110196720B
- Authority
- CN
- China
- Prior art keywords
- model
- file
- link library
- dynamic link
- mapping table
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种Simulink生成动态链接库的优化方法,所述方法包括以下步骤:首先提供模型编译模板文件;将文件放在同一个文件夹下,并且将文件夹的路径添加到Matlab的搜索路径列表里;在模型的配置对话栏,选择选项Code Generate,在System target file下拉列表里选中links_ert_shrlib.tlc文件,并点击确定,关闭对话框;选择选项Code Generate,并选择子选项Interface,在Interface下拉列表里选择CAPI,并勾选signals、parameters、states和root‑leave I/O四个勾选框;编译完成后,调用方通过动态链接库的导出符号获得模型接口静态信息和内存地址映射表;本发明极大的方便了动态链接库的使用,提高了Simulink生成动态链接库的扩展性,提高了使用效率。
Description
技术领域
本发明涉及图形化建模工具MATLAB/Simulink生成动态链接库技术领域,具体是一种Simulink生成动态链接库的优化方法。
背景技术
MATLAB是美国MathWorks公司出品的商业数学软件,主要用于算法开发、数据可视化、数据分析以及数值计算等,在科学研究及工程计算等多个领域得到广泛的应用。Simulink是MATLAB中的一种图形化建模工具,被广泛应用于线性系统、非线性系统、数字控制及数字信号处理的建模和仿真中。Simulink提供了图形化的设计界面,以模块为功能单位,通过信号线进行连接,用户通过模块的参数设置对话框来设置参数,仿真的结果以数值和图像等方式展示。
Simulink提供了种类繁多、功能强大的模块库。在基于模型设计的开发流程下,设计人员可以使用Simulink进行模型仿真和早期设计的验证,还可以生成C/C++、PLC等代码,甚至多种硬件平台的二进制可执行代码,直接应用于PC、MCU、DSP等平台,在软件开发中发挥着重要的作用。
动态链接库(Dynamic Link Library或者Dynamic-link Library,缩写为DLL)是一种二进制可执行文件,通过进程动态加载的方式执行。Simulink可以使用官方提供的编译模板文件TLC(Target Language Compiler)直接把设计人员开发验证好的模型编译成动态链接库,供其他程序使用。
Simulink模型使用官方提供的编译模板文件TLC生成动态链接库的时候,模型的输入、输出和变量都是和模型紧密耦合,扩展性极差。其他程序在调用动态链接库的时候,无法直接通过DLL文件了解调用接口的信息,包括输入、输出和变量的数量、数据类型等,必须打开原始模型文件才可以达到目的,协作效率低下。
发明内容
本发明的目的在于提供一种Simulink生成动态链接库的优化方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种Simulink生成动态链接库的优化方法,所述方法包括以下步骤:
S1:首先提供模型编译模板文件links_export_shrlib_model_info.tlc、links_export_shrlib_def.tlc和links_ert_shrlib.tlc;
S2:将S1中的三个文件放在同一个文件夹下,并且将文件夹的路径添加到Matlab的搜索路径列表里;
S3:在模型编译之前,先设置模型的配置;在模型的配置对话栏,选择选项CodeGenerate,在System target file下拉列表里选中links_ert_shrlib.tlc文件,并点击确定,关闭对话框;
S4:在模型的配置对话框里,选择选项Code Generate,并选择子选项Interface,在Interface下拉列表里选择CAPI,并勾选signals、parameters、states和root-leave I/O四个勾选框,在模型编译的时可生成模型接口静态信息;根据模型接口静态信息,获得模型变量列表、输入列表、输出列表、模块参数列表、模型参数列表、数据类型映射表、维数映射表和定点数映射表;
S5:编译完成后,调用方通过动态链接库的导出符号获得模型接口静态信息和内存地址映射表;对于单个变量来说,可以通过内存地址索引在内存地址映射表获取变量的数据,可以通过数据类型索引在数据类型映射表中获取数据类型信息,可以通过维度索引在维度映射表中获取维度信息;对于单个参数来说,可以通过内存地址索引在内存地址映射表获取并设置参数的数据,可以通过数据类型索引在数据类型映射表中获取数据类型信息,可以通过维度索引在维度映射表中获取维度信息。
作为本发明进一步的方案:所述links_ert_shrlib.tlc文件是在官方提供的动态链接库的模型编译模板TLC文件的基础上引用了S1中的links_export_shrlib_model_info.tlc,目的是生成c代码文件model_info.c;model_info.c代码文件定义了函数void**getDataAddrMap(),用来获取模型的内存地址映射表。
作为本发明进一步的方案:所述links_ert_shrlib.tlc文件引用了S1中的的links_export_shrlib_def.tlc,目的是生成符号导出def文件,该文件基于官方def文件修改,添加了导出符号getDataAddrMap,这样调用动态链接库的程序可以看到这个符号并调用。
作为本发明再进一步的方案:所述单个变量的信息包括内存地址索引,模块路径,名称,数据类型索引,维度索引;单个参数的信息包括内存地址索引,模块路径,名称,数据类型索引,维度索引。
与现有技术相比,本发明的有益效果是:
本发明通过此方法可以生成有模型接口信息的动态链接库文件,用户可以直接通过优化后的动态链接库文件获取丰富的模型接口信息,包括模型输入、输出和变量的数量、名称、数据类型和内存地址等,极大的方便了动态链接库的使用,提高了Simulink生成动态链接库的扩展性,提高了使用效率。
附图说明
图1为一种Simulink生成动态链接库的优化方法中模型接口静态信息结构示意图。
图2为一种Simulink生成动态链接库的优化方法中实例模型生成动态链接库后被调用的流程图的结构示意图。
图3为一种Simulink生成动态链接库的优化方法中使用流程图的结构示意图。
具体实施方式
下面结合具体实施方式对本专利的技术方案作进一步详细地说明。
请参阅图1-3,一种Simulink生成动态链接库的优化方法,包括以下步骤:
S1:首先提供模型编译模板文件links_export_shrlib_model_info.tlc、links_export_shrlib_def.tlc和links_ert_shrlib.tlc,其中links_ert_shrlib.tlc引用前面两个文件;
S2:将S1中的三个文件放在同一个文件夹下,并且将文件夹的路径添加到Matlab的搜索路径列表里;
S3:在模型编译之前,先设置模型的配置;在模型的配置对话栏,选择选项CodeGenerate,在System target file下拉列表里可以看到本方法提供的links_ert_shrlib.tlc文件,选中并点击确定,关闭对话框;
所述links_ert_shrlib.tlc文件是在官方提供的动态链接库的模型编译模板TLC文件的基础上引用了S1中的links_export_shrlib_model_info.tlc,目的是生成c代码文件model_info.c;model_info.c代码文件定义了函数void**getDataAddrMap(),用来获取模型的内存地址映射表;
所述links_ert_shrlib.tlc文件引用了S1中的的links_export_shrlib_def.tlc,目的是生成符号导出def文件,该文件基于官方提供的def文件修改,添加了导出符号getDataAddrMap,这样调用动态链接库的程序可以看到这个符号并调用;
S4:模型在编译之前,设置模型的配置;在模型的配置对话框里,选择选项CodeGenerate,并选择子选项Interface,在Interface下拉列表里选择CAPI,并勾选signals、parameters、states和root-leave I/O四个勾选框,这样模型编译的时候可以生成模型接口静态信息;根据模型接口静态信息,可以获得模型变量列表,输入列表,输出列表,模块参数列表,模型参数列表,数据类型映射表,维数映射表,定点数映射表等,其中,单个变量的信息包括内存地址索引,模块路径,名称,数据类型索引,维度索引等;单个参数的信息包括内存地址索引,模块路径,名称,数据类型索引,维度索引等;
S5:编译完成后,调用方可以通过动态链接库的导出符号获得模型接口静态信息和内存地址映射表;对于单个变量来说,可以通过内存地址索引在内存地址映射表获取变量的数据,可以通过数据类型索引在数据类型映射表中获取数据类型信息;可以通过维度索引在维度映射表中获取维度信息;对于单个参数来说,可以通过内存地址索引在内存地址映射表获取并设置参数的数据,可以通过数据类型索引在数据类型映射表中获取数据类型信息;可以通过维度索引在维度映射表中获取维度信息。
使用时,以具体模型rtwdemo_shrlib.slx为例,说明本方法:rtwdemo_shrlib.slx有若干个模块,比如sum_out,Amplifier等,在菜单栏打开模型配置对话框,选择选项CodeGenerate;在System target file下拉列表里选择自带的模型编译模板文件ert_shrlib.tlc,然后点击确定,关闭对话框;然后在菜单栏选择编译,即可编译成动态链接库rtwdemo_shrlib_win64.dll文件(在win32位系统中生成rtwdemo_shrlib_win32.dll)。
通过微软官方提供的Dependency Walker工具,可以查看动态链接库的导出符号信息,打开Dependency Walker工具,选择生成的rtwdemo_shrlib_win32.dll可以看到导出的符号,前面四个导出符号,以“rtwdemo_shrlib_”开头的,是模型的输入,输出等变量信息;以输入rtwdemo_shrlib_U为例,数据类型是含有一个Int32整型的结构体,这个数据类型是因为模型里有个Input输入模块,数据类型就是Int32整型,这样的接口对于调用方来说,不了解模型,没法调用。
另外还有个导出符号sum_out,也是模型特有的模块的名字,对于调用方来说,同样不了解模型,没法调用。
本发明的使用效果:在Matlab的路径列表里添加本发明提供的几个tlc文件所在的文件夹路径后,打开模的配置对话框,选择选项Code Generate,在System target file下拉列表里可以看到links_ert_shrlib.tlc,针对Windows平台的动态链接库,选中(host-based shared library target)并退出。
在模型的配置对话框里,选择选项Code Generate,并选择子选项Interface,在Interface下拉列表里选择C API,并勾选signals、parameters、states和root-leave I/O四个勾选框。
然后点击确定按钮并关闭模型配置对话框,点击菜单栏的编译按钮,生成rtwdemo_shrlib_win64.dll文件;用Dependency Walker查看动态链接库的导出符号信息;rtwdemo_shrlib_GetCAPIStaticMap导出符号可以用来导出模型接口静态信息,getDataAddrMap导出符号可以用来导出模型内存地址映射表。
调用方可以通过动态链接库的名字rtwdemo_shrlib_win64.dll获取模型的名字为“rtwdemo_shrlib”,从而获取各个导出符号的名字为rtwdemo_shrlib_initialize、rtwdemo_shrlib_step、rtwdemo_shrlib_terminate、rtwdemo_shrlib_GetCAPIStaticMap、getDataAddrMap;每个导出符号的函数声明方式都是固定的,调用方工作流程如图2所示。
调用方可以获取变量列表。每个变量的信息包括变量索引,名字,维数,数据类型和内存地址。调用方根据这些信息,在运行模型过程中可以随时监视变量数值。
调用方可以获取参数列表。每个参数的信息包括参数索引,名字,维数,数据类型和内存地址。调用方根据这些信息,在运行模型过程中,可以随时监视参数数值或修改参数数值。
如上所述,调用方可以动态的加载任一优化过后的动态链接库文件,显示所有变量和参数信息,并在运行过程中实时显示变量和修改参数。
上面对本专利的较佳实施方式作了详细说明,但是本专利并不限于上述实施方式,在本领域的普通技术人员所具备的知识范围内,还可以在不脱离本专利宗旨的前提下做出各种变化。
Claims (4)
1.一种Simulink生成动态链接库的优化方法,其特征在于,所述方法包括以下步骤:
S1:首先提供模型编译模板文件links_export_shrlib_model_info.tlc、links_export_shrlib_def.tlc和links_ert_shrlib.tlc;
S2:将S1中的三个文件放在同一个文件夹下,并且将文件夹的路径添加到Matlab的搜索路径列表里;
S3:在模型编译之前,先设置模型的配置;在模型的配置对话栏,选择选项CodeGenerate,在System target file下拉列表里选中links_ert_shrlib.tlc文件,并点击确定,关闭对话框;
S4:在模型的配置对话框里,选择选项Code Generate,并选择子选项Interface,在Interface下拉列表里选择CAPI,并勾选signals、parameters、states和root-leave I/O四个勾选框,在模型编译的时可生成模型接口静态信息;根据模型接口静态信息,获得模型变量列表、输入列表、输出列表、模块参数列表、模型参数列表、数据类型映射表、维数映射表和定点数映射表;
S5:编译完成后,调用方通过动态链接库的导出符号获得模型接口静态信息和内存地址映射表;对于单个变量来说,可以通过内存地址索引在内存地址映射表获取变量的数据,可以通过数据类型索引在数据类型映射表中获取数据类型信息,可以通过维度索引在维度映射表中获取维度信息;对于单个参数来说,可以通过内存地址索引在内存地址映射表获取并设置参数的数据,可以通过数据类型索引在数据类型映射表中获取数据类型信息,可以通过维度索引在维度映射表中获取维度信息。
2.根据权利要求1所述的一种Simulink生成动态链接库的优化方法,其特征在于,所述links_ert_shrlib.tlc文件是在官方提供的动态链接库的模型编译模板TLC文件的基础上引用了S1中的links_export_shrlib_model_info.tlc,目的是生成c代码文件model_info.c;model_info.c代码文件定义了函数void**getDataAddrMap(),用来获取模型的内存地址映射表。
3.根据权利要求1所述的一种Simulink生成动态链接库的优化方法,其特征在于,所述links_ert_shrlib.tlc文件引用了S1中的links_export_shrlib_def.tlc,目的是生成符号导出def文件,该文件基于官方def文件修改,添加了导出符号getDataAddrMap,这样调用动态链接库的程序可以看到这个符号并调用。
4.根据权利要求1所述的一种Simulink生成动态链接库的优化方法,其特征在于,所述单个变量的信息包括内存地址索引,模块路径,名称,数据类型索引,维度索引;单个参数的信息包括内存地址索引,模块路径,名称,数据类型索引,维度索引。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910457517.6A CN110196720B (zh) | 2019-05-29 | 2019-05-29 | 一种Simulink生成动态链接库的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910457517.6A CN110196720B (zh) | 2019-05-29 | 2019-05-29 | 一种Simulink生成动态链接库的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110196720A CN110196720A (zh) | 2019-09-03 |
CN110196720B true CN110196720B (zh) | 2023-01-10 |
Family
ID=67753424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910457517.6A Active CN110196720B (zh) | 2019-05-29 | 2019-05-29 | 一种Simulink生成动态链接库的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110196720B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111985055B (zh) * | 2020-08-28 | 2023-08-08 | 北京世冠金洋科技发展有限公司 | 一种模型封装方法、装置及电子设备 |
CN113705004B (zh) * | 2021-08-30 | 2023-06-13 | 中国电子科技集团公司第三十八研究所 | 一种适合dsp的实时系统行为级软件仿真方法 |
CN113885426A (zh) * | 2021-10-14 | 2022-01-04 | 江苏徐工工程机械研究院有限公司 | 一种挖掘机控制程序plc代码自动生成方法、测试方法及可视化测试系统 |
CN115185539B (zh) * | 2022-09-06 | 2022-12-09 | 西安羚控电子科技有限公司 | 一种生成可执行动态链接库文件方法、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5812850A (en) * | 1995-11-13 | 1998-09-22 | Object Technology Licensing Corp. | Object-oriented symbolic debugger using a compiler driven database and state modeling to control program execution |
US5916308A (en) * | 1995-02-27 | 1999-06-29 | International Business Machines Corporation | Dynamic link libraries without linker or loader support |
CN108415699A (zh) * | 2018-02-12 | 2018-08-17 | 北京智行鸿远汽车有限公司 | 利用Simulink定制单片机的底层驱动进行代码生成的方法 |
CN109799971A (zh) * | 2018-12-07 | 2019-05-24 | 陕西法士特齿轮有限责任公司 | 一种文件生成装置和方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
MY172251A (en) * | 2014-10-13 | 2019-11-19 | E Manual System Sdn Bhd | System generator module for electronic document and electronic filing |
-
2019
- 2019-05-29 CN CN201910457517.6A patent/CN110196720B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5916308A (en) * | 1995-02-27 | 1999-06-29 | International Business Machines Corporation | Dynamic link libraries without linker or loader support |
US5812850A (en) * | 1995-11-13 | 1998-09-22 | Object Technology Licensing Corp. | Object-oriented symbolic debugger using a compiler driven database and state modeling to control program execution |
CN108415699A (zh) * | 2018-02-12 | 2018-08-17 | 北京智行鸿远汽车有限公司 | 利用Simulink定制单片机的底层驱动进行代码生成的方法 |
CN109799971A (zh) * | 2018-12-07 | 2019-05-24 | 陕西法士特齿轮有限责任公司 | 一种文件生成装置和方法 |
Non-Patent Citations (3)
Title |
---|
《Modeling of DLL-based frequency multiplier in time and frequency domain with Matlab Simulink》;Mohammad Gholami;《IEEE》;20110527;全文 * |
基于Visual C++6.0的动态链接库编程的研究与实现;彭玉华等;《内江科技》;20070925(第09期);全文 * |
基于共享MFC DLL的对话框窗口动态库开发;王强;《江苏科技信息》;20171130(第33期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110196720A (zh) | 2019-09-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110196720B (zh) | 一种Simulink生成动态链接库的优化方法 | |
US11036614B1 (en) | Data control-oriented smart contract static analysis method and system | |
EP3745256B1 (en) | External code integrations within a computing environment | |
US8429627B2 (en) | Asynchronous preemptive edit time semantic analysis of a graphical program | |
JPH08202545A (ja) | ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法 | |
US20070061641A1 (en) | Apparatus and method for generating test driver | |
US8046202B1 (en) | Generation of intermediate representations based on user specified elements in a graphical model that enable simulation, propagation and code generation | |
CN111985055B (zh) | 一种模型封装方法、装置及电子设备 | |
CN107704382A (zh) | 面向Python的函数调用路径生成方法和系统 | |
JPH11513512A (ja) | ディジタル信号プロセッサの製造方法 | |
CN107741847A (zh) | 实现领域驱动模型的方法及装置 | |
CN111797020A (zh) | 基于动态字节码的mock数据方法及装置 | |
CN111650847A (zh) | 执行机构模型在航空发动机硬件在回路平台的集成方法 | |
Wägemann et al. | GenE: A benchmark generator for WCET analysis | |
CN113031932A (zh) | 项目开发方法、装置、电子设备及存储介质 | |
CN113238834A (zh) | 仿真模型文件的处理方法、装置及电子设备 | |
CN115686631A (zh) | 一种基于知识基的随机指令生成方法、装置及存储介质 | |
US7428737B1 (en) | Method for using header files to call a shared library from a dynamic environment | |
US20030237078A1 (en) | Incorporating simulation analysis instrumentation into HDL models | |
CN104731705B (zh) | 一种基于复杂网络的脏数据传播路径发现方法 | |
CN113835688B (zh) | 一种科学计算语言解释器的对象封装方法 | |
CN113448874A (zh) | 一种单元测试脚本的生成方法及装置 | |
Weiß et al. | Towards establishing formal verification and inductive code synthesis in the PLC domain | |
CN114756205B (zh) | 测井应用程序集成方法及装置 | |
Selonen et al. | Generating structured implementation schemes from UML sequence diagrams |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
PE01 | Entry into force of the registration of the contract for pledge of patent right |
Denomination of invention: An Optimization Method for Simulink Generating Dynamic Link Libraries Effective date of registration: 20230809 Granted publication date: 20230110 Pledgee: Zhongguancun Branch of Bank of Beijing Co.,Ltd. Pledgor: BEIJING LINKS TECHNOLOGY Co.,Ltd. Registration number: Y2023980051592 |
|
PE01 | Entry into force of the registration of the contract for pledge of patent right |