C#应用程序与MATLAB联合编程

article/2025/10/19 13:52:09

本文主要结合C#编写应用程序方便强大和MATLAB在工业科学界的广泛应用,结合两者的优点,利用C#编写的windows桌面应用程序作为UI交互接收用户配置,并根据用户在前端应用界面的操作自动控制MATLAB运行,并将MATLAB计算的结果返回桌面应用程序进行显示。

文章目录

    • 1 C#介绍和学习
    • 2 MATLAB介绍
    • 3 C#应用程序与MATLAB混合编程方式
    • 4 XML传递参数
    • 5 交互实验小例子
    • 6 小例子源码地址
    • 7 推荐学习资源
        • C#与MATLAB交互
        • XML的学习

1 C#介绍和学习

C#对于windows系统的桌面应用程序编写非常方便,visual studio已经提供了非常人性化的设计界面和交互。上手速度快,学习成本很低。MATLAB是数值计算、系统仿真与控制等广泛应用。然而MATLAB提供的设计本身GUI功能较少,而且控件很简单,全都基于回调的形式来进行UI交互的,对于简单的MATLAB程序,可以直接用MATLAB提供的GUI进行设计。
C#学习可以参考书籍:

  1. C#开发实战1200例
  2. C#入门经典第六版
  3. 明日科技C#开发入门及项目实战

C#可以开发桌面应用程序,Web,移动端APP、平板电脑等一些列微软应用。C#是一种面向对象的编程语言,对于学过C语言的基础,变量定义、If、For、while语法完全相同,对于学过面向过程Python或Java语言的基础,类的定义基本相似,而且有大量的系统类库可以进行调用,学习成本很低。
C#主要用于windows开发的应用程序分为以下三种:

类型特点优点缺点
Console自动化跨平台、自动化、速度快命令行方式、没有UI交互
WinFormwindows原生UI上手快、文档多使用广泛CPU-bound、hard to scale
WPF丰富的UI设计程序与界面设计完全独立需要编写XAML、配置过多

其中CPU-bound指的是仅能利用CPU,而不能利用GPU用于显示和计算。Hard to scale指的是难以适应多种尺寸大小和分辨率的屏幕,缩放容易失真或者出现问题。

2 MATLAB介绍

想必点这个博客的同学已经不需要MATLAB介绍了吧,当然需要说明的一点:MATLAB可以通过m语言实现自动化控制SImulink运行、自动化建模等各种使用方法。而C#能够控制MATLAB运行command的各种命令、函数、脚本等等,因此原则上 C#可以控制MATLAB完成其所有功能。

3 C#应用程序与MATLAB混合编程方式

主要有以下两种方式实现C#对MATLAB的调用,其中第一种方式为C#函数调用由MATLAB中内建或者用户定义函数编译的动态链接库(dll)。如下图所示,即自定义的函数通过编译器得到dll文件,然后C#调用dll文件实现函数的调用。
在这里插入图片描述
如上图所示,该种方式不依靠MATLAB即可单独运行,然而仅能够调用部分MATLAB函数,例如无法完成Simulink仿真,功能受到限制。
第二种方式为C#函数利用COM自动控制接口直接控制MATLAB工作空间内的变量、运行命令或者函数,并且取出MATLAB返回运算结果,如下图所示。
在这里插入图片描述
C#应用程序直接控制MATLAB运行,理论上能够实现MATLAB的所有功能,然而第一次需要启动MATLAB Server(相当于打开一次MATLAB),耗时长。
COM是Component Object Module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。MATLAB把其下的关键运行程序做成COM组件,供其他语言调用。C#、C++、VB、Excel等可以基于COM可实现自动化调用MATLAB,控制MATLAB运行。
MATLAB提供了很多基于COM的调用函数,可以完成很多MATLAB的基本常规运行命令。下图展示的是MATLAB作为服务器可以用到的COM接口函数。
在MATLAB帮助文档中可以看到:Call COM Objects;MATLAB API for Other Languages;MATLAB API for COM Automation Server
在这里插入图片描述
在上图中可以看出,其中Execute是最主要的函数,用于执行MATLAB command,根据执行函数或者命令行 ,利用脚本自动化控制Simulink的建模与运行等任务。同时COM自动化广泛应用于windows软件中,例如C#应用程序自动化控制word、excel等软件,实现文档的自动化读、写、改。

// 启动MATLAB并运行runTest()函数MLApp.MLApp matlab = null;Type matlabAppType = System.Type.GetTypeFromProgID("Matlab.Desktop.Application");matlab = System.Activator.CreateInstance(matlabAppType) as MLApp.MLApp;string path_project = Directory.GetCurrentDirectory();   //工程文件的路径,如bin下面的debugstring path_matlab = "cd('" + path_project + "')";     //自定义matlab工作路径    这里我注释调用 matlab.Execute(path_matlab);matlab.Execute("clear all");matlab.Execute("close all");string command;command = @"runTest()";matlab.Execute(command);

(注意runTest是一个自定义函数,并放置在项目的debug文件夹下,MATLAB才能找到该文件)
可以将runTest换成MATLAB的任何命令语句,例如 a = 1,这样在MATLAB变量空间里就会得到变量a,其大小为1
具体关于COM接口可参考MATLAB帮助文档:MATLAB COM Automation Server Interface(直接在MATLAB的help中搜索这个短语就能找到帮助),另外还能控制启动MATLAB的版本,启动方式,启动类型等。(看帮助文档)。这里经常用到的一个配置是:启动命令窗还是整个MATLAB,即通过控制GetTypeFromProgID方法传入的字符串参数对应以下两种选择:

  1. Matlab.Application:打开MATLAB 命令窗口
  2. Matlab.Desktop.Application :打开整个桌面应用MATLAB窗口

出自MATLAB C# Book书中的一段话,概括了C#与MATLAB交互的主要方式:

  1. C# functions call MATLAB built-in functions in the mathematical library created from MATLAB M-files to solve the mathematical problems.
  2. C# functions call the MATLAB Workspace to perform particular tasks then transfer results from the MATLAB Workspace to C# functions
  3. C# functions use COM that is created from MATLAB M-files by using MATLAB COM Builder.

4 XML传递参数

由于仿真需要很多用户配置参数和仿真配置参数,因此对于C#与MATLAB进行用户配置而言,不能靠MATLAB提供的COM来取或者读参数,而需要利用XML文件来传递参数。eXtensible Markup Language,可扩展标记语言,是一种标记语言。 通常,XML被用于信息的记录和传递,不同语言针对XML文件都有统一的解析函数,可以用于不同平台或者不同语言之间的信息的交互。 XML经常被用于充当配置文件。
我们可以通过C#程序改写原有的XML文件。然后控制MATLAB解析该XML文件,以达到传递参数的目的。下图为XML文件的展示,可以看出XML是通过节点和子节点的结构。、
XML概念:可扩展标记语言(英语:Extensible Markup Language,简称:XML),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言(SGML)中简化修改出来的。主要包括以下部分
1、文档声明
2、元素=标签
3、属性
4、注释
5、CDATA区、特殊字符<![CDATA[不想解析的内容]]>
特点便捷性:不同的语言C#和Java、不同的平台win和linux之间,进行数据传递
标记语言,不是编程语言

在这里插入图片描述

如上图所示,XML根据节点和节点内包含是信息属性等方式,对不同的参数和配置进行保存。当保存完成后,C#和MATLAB都需要读和写XML文件的功能。才能完成C#与MATLAB的信息交互过程。如下图所示。
在这里插入图片描述

5 交互实验小例子

根据上述的基于COM的控制方式和基于XML文件的信息交互方式,在桌面应用程序中输入两个数值型参数,并调用MATLAB程序完成相关的计算。

C#软件交互示意
软件界面如上图所示,用户输入参数然后通过输入按钮生成XML文件,点击MATLAB执行会控制MATLAB读取该文件并读取信息,然后根据信息自动调用不同的函数来实现功能,最后将运算结果保存为XML文件。当用户点击取回时,程序读取MATLAB生成的XML文件并显示到返回结果。
在这里插入图片描述
软件运行流程
具体的运行流程如上图所示,主要是通过用户操作用户界面来完成的。
1、在参数1和参数2对话框输入两个参数,然后在函数选择下拉框选择对应的计算方式,有add和mul两个函数选择项;
2、通过点击MATLAB输入按键生成XML输入文件,然后点击MATLAB执行按键用以自动化控制MATLAB执行编写的函数
3、该函数读取了XML文件并解析出用户的输入,然后得到运算结果,并写入XML结果文件
4、C#读取XML结果文件并展示
下图分别展示了C#传递给MATLAB的XML文件和MATLAB保存的结果XML文件。
在这里插入图片描述

C#传递给MATLAB的XML文件

在这里插入图片描述

MATLAB传递给C#的XML文件

MATLAB 所用到的m文件如下所示:
mulTest.m:用以完成乘法运算函数,输入为两个参数,输入结果
Xmlread,m:用以完成XML文件的读取操作
Xmlwrite.m:用以完成XML文件的写操作
runTest.m:C#调用MATLAB运行的主函数,根据XML制定的数据规则来解析用户输入,并根据输入计算,得到结果根据数据规则写入XML文件
注意所有函数需要放置在vs项目的debug文件夹下,MATLAB才能找到这些文件
C#程序分别进行读取用户参数输入、利用COM控制MATLAB运行、写XML函数、读XML函数和控制文本框显示。

6 小例子源码地址

这里所用到MATLAB的读xml和写xml函数不是官方的,而是有位老哥在官方的基础上进一步进行封装的,使得在使用时非常的简单和方便。下载该读写xml的工具包如下所示:
XML读写交互工具下载地址
源程序打包下载地址如下:
小例子源程序下载

7 推荐学习资源

C#与MATLAB交互

两本英文书,第一本主要是介绍C#编写应用程序结合嵌入式硬件开发的小案例,第二本是专门针对C#和MATLAB交互的,我感觉不如直接看MATLAB的帮助文档,但是帮助文档对于C#和MATLAB交互都是基于COM实现的,因此文档中介绍的并不是特别详细。

  1. Integrating C# .Net with Embedded System
  2. MATLAB C# Book

XML的学习

学习XML的语法和结构的可以去bilibili或者学习网站等,然后学习C#控制XML读写改等操作,同时学习MATLAB对XML读写改的操作。

联系作者 QQ 2807073834,邮件:2807073834@qq.com,拒绝伸手党


http://chatgpt.dhexx.cn/article/h46Hharq.shtml

相关文章

编程输出中文变问号的解决办法

问题是出现在windows的dos显示设置上。 如何解决这个问题&#xff1f; 1.打开运行&#xff0c;输入cmd&#xff1b; 2.界面顶部右键&#xff0c;option中选择默认值&#xff1b; 3.将437&#xff08;OEM-美国&#xff09;改为936&#xff08;ANSI/OEM-简体中文GBK&#xff09; …

Python入门(二)-编程环境

本章重点介绍 Python 编程环境的搭建&#xff0c;包括各个平台下 Python 的下载和安装&#xff0c;常见 IDE 的使用&#xff0c;如何运行 Python 程序等。我还会亲自带着大家编写并运行第一个 Python 程序&#xff0c;让大家认识一下最简单的 Python 代码。 本章的后半部分还介…

数模混合信号建模语言Verilog-AMS

混合信号建模语言Verilog-AMS 很多人做模拟电路的朋友&#xff0c;都希望有一款“模拟FPGA”&#xff0c;希望有一个“模拟的Verilog”&#xff0c;但现实是没有“模拟的Verilog”只有混合信号建模语言-Verilog-AMS&#xff0c;今天就简单介绍一下-Verilog-AMS。 为了便于物理系…

Java入门-Java语言概述

1、Java语言基本概述 1.1、什么是计算机编程语言 人与人之间是如何沟通的呢&#xff1f;从小父母就教会我们说话&#xff0c;在长期的熏陶和自我学习中&#xff0c;我们就学会了普通话&#xff0c;学会了表达自己的需求&#xff0c;父母收到我们的信号或者听到我们的要求也会尽…

Python 批量下载BiliBili视频 打包成软件

文章目录 一、项目概述1.项目背景2.环境配置下载ffmpeg设置环境变量 二、项目实施1.导入需要的库2.设置请求参数3.基本处理4.下载视频5.视频和音频合并成完整的视频6.3种下载方式的分别实现7.主函数 三、项目分析和说明1.结果测试改进说明2.软件打包3.改进分析4.合法性说明 如有…

Java 之父 James Gosling 最新访谈:JIT 很好,但不适合所有语言

计算机编程确实是一门艺术。 James Gosling&#xff0c;“Java 之父”, 完成了 Java 的原始设计&#xff0c;并实现了 Java 最初版本的编译器和虚拟机。 90年代初&#xff0c;James Gosling和一群技术人员合作“绿色计划”&#xff0c;创建了一个名为Oak的项目&#xff0c;旨在…

Python语言概述及其运行机制详解

即日起&#xff0c;我们将打开一个新的编程世界的大门——Python语言。Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本(shell)&#xff0c;随着版本的不断更新和语言新功能的添加&#xff0c;越来越多被用于独…

go语言开发环境搭建

Go 是一个开源的编程语言&#xff0c;它能让构造简单、可靠且高效的软件变得容易。 Go语言专门针对多处理器系统应用程序的编程进行了优化&#xff0c;使用Go编译的程序可以媲美C或C代码的速度&#xff0c;而且更加安全、支持并行进程。 学习Go一部分是兴趣&#xff0c;一部分是…

汇编语言程序运行过程分析

实验项目程序运行过程分析综合性实验2020年11月 18日 一、实验综述 1.实验目的及要求 &#xff08;1&#xff09;掌握程序执行具体过程 &#xff08;2&#xff09;构建汇编语言的运行环境 &#xff08;3&#xff09;掌握汇编语言的编译连接过程 &#xff08;4&#xff09;掌…

【x86汇编】第六章 输出/输出和win32编程

文章目录 输入/输出指令和数据的传送方式输入/输出指令输入指令IN输出指令OUT串输入指令INS串输出指令OUTS 数据的传送方式无条件传送查询传送直接存储器中断传送 中断与异常中断的概念不可屏蔽中断 NMI可屏蔽中断 INTR除法出错溢出调试异常&#xff08;单步&#xff09;软中断…

总算编译通过了《自制编程语言》一书里的代码!

起初按照书里的说明来搭建Windows下的环境&#xff0c;卡在下载和编译正则表达式库“鬼车”的地方&#xff0c;后来留言给作者&#xff0c;才知道这个库已经转移到github上了&#xff08;2018年4月25时点&#xff1a;https://github.com/kkos/oniguruma&#xff09;&#xff0c…

脑语言v0.5.8 2500令【单字编程】

脑语言v0.5.8 2500令【单字编程】 【号】【单字】【多字】【英文】 1 1脑 脑语言 naoyuyan 2 配 配置 config 3 班 班级 grade 4 令 指令 command 5 述 描述 description 6 横 ■横 ■x 7 纵 ■纵 ■y 8 深 ■深 ■z 9 宽 ■宽 width 10 高 ■高 height 11 撑 缩放…

p4 编程语言环境配置

文章目录 前言建议直接看第二种方法第一种方法&#xff1a;p4官方教程里的方法&#xff08;不建议&#xff0c;我没安装成功&#xff09;1.1 下载并安装 Virtual Box1.2 下载并安装 Vagrant1.3 利用 Vagrant 安装虚拟机 第二种方法&#xff1a;直接导入已经配置好的虚拟镜像文件…

Python学习笔记 - Python语言概述和开发环境

一、Python简介 1.1 Python语言简史 Python由荷兰人吉多范罗苏姆(Guido van Rossum)于1989年圣诞节期间&#xff0c;在阿姆斯特丹&#xff0c;为了打发圣诞节的无聊时间&#xff0c;决心开发一门解释型程序语言。Python语言基于ABC教学语言开发的。1991年第一个Python解释器公…

西门子plc如何用c语言编程软件下载,s7一200编程软件下载安装

s7-200编程软件是专为西门子s7-200系列可编程控制器而设计开发的一款工业化编程工具,该工具基于Windows系统而开发,功能强大,既可用于开发用户程序,又可实时监控用户程序的执行状态,是西门子PLC用户不可缺少的开发工具。 软件特色 1、简单、易学,能够解决复杂的自动化任务…

2019常用的几种编程语言的简单介绍和特点以及应用领域

常用编程语言的特点以及应用 编程语言有很多种&#xff0c;以下就是对一些常用的编程语言的简单介绍和特点以及他们的一些应用领域。希望对你能有所帮助。 在介绍各种编程语言前&#xff0c;我们先来看一下下面这个图&#xff0c;从图中可以明显看出来&#xff0c;当前应用最…

【编程实践】编程语言之 Smalltalk

目录 Smalltalk 简介 什么是Smalltalk 理解Smalltalk 基础语法 方法与类 代码块 控制流

浅谈对话系统

随着社会发展&#xff0c;我们的生活中方方面面都充斥着各种对话系统&#xff0c;常见提供对话系统的组织有&#xff1a;运营商、电商、政府服务窗口等&#xff0c;刚才提到的例子一般都属于任务型对话系统。何为任务型的对话系统呢&#xff1f;指的就是用户通常通过该对话系统…

如何实现一个简单的对话系统

文章目录 前言一、为什么需要对话二、创建对话框1.创建Canvas2.创建Panel3.创建Text和Image4.Text介绍5.Image介绍 三、对话的实现&#xff08;脚本&#xff09;四、实际效果总结 前言 本文主要是对如何完成简单的游戏类对话做一个学习总结&#xff0c;新手菜勿喷 一、为什么需…

面向任务的对话系统

面向任务的对话系统 1.1 流水线方法1.1.1 语言理解1.1.2 对话状态跟踪1.1.3 策略学习1.1.4 自然语言生成 1.2 端到端方法 面向任务的对话系统一直是口语对话系统的重要分支。在本节中&#xff0c;我们将回顾面向任务的对话系统的流水线方法和端到端方法。 1.1 流水线方法 基于…