C # 응용 프로그램 및 MATLAB 공동 프로그래밍

이 기사는 주로 산업 과학 커뮤니티에서 응용 프로그램을 작성하는 C #의 편리함과 힘과 MATLAB의 광범위한 응용 프로그램을 결합합니다. 두 가지 장점을 결합하여 C #으로 작성된 Windows 데스크톱 응용 프로그램은 사용자 구성을 수신하는 UI 상호 작용으로 사용됩니다. 프런트 엔드 응용 프로그램 인터페이스에서 사용자의 작업에 따라 자동으로 MATLAB의 작업을 제어하고 MATLAB 계산 결과를 데스크탑 응용 프로그램에 반환하여 표시합니다.

1 C # 소개 및 학습

C #은 Windows 시스템의 데스크톱 응용 프로그램을 작성하는 데 매우 편리하며 Visual Studio는 매우 사용자 친화적 인 디자인 인터페이스와 상호 작용을 제공합니다. 학습 속도가 빠르고 학습 비용이 매우 낮습니다. MATLAB은 수치 계산, 시스템 시뮬레이션 및 제어에 널리 사용됩니다. 그러나 MATLAB 자체에서 제공하는 디자인은 GUI 함수가 적고 컨트롤이 매우 간단하여 모두 UI 상호 작용을위한 콜백 형식을 기반으로합니다. 단순한 MATLAB 프로그램의 경우 MATLAB에서 제공하는 GUI를 디자인에 직접 사용할 수 있습니다.
C # 학습은 책을 참조 할 수 있습니다.

  1. C # 개발 실전 1200 건
  2. C # 시작하기 Classic Sixth Edition
  3. 내일의 기술 C # 개발 진입 및 프로젝트 실전

C #은 데스크톱 애플리케이션, 웹, 모바일 앱 및 태블릿과 같은 일련의 Microsoft 애플리케이션을 개발할 수 있습니다. C #은 객체 지향 프로그래밍 언어입니다. C 학습의 기본에서 변수 정의 구문 인 If, For 및 while은 정확히 동일합니다. 프로세스 지향 Python 또는 Java 학습의 기본을 위해 클래스 정의는 다음과 같습니다. 기본적으로 유사하며 많은 시스템 라이브러리를 호출 할 수 있으며 학습 비용이 매우 낮습니다.
C #은 주로 다음 세 가지 유형으로 나누어 진 Windows 개발 응용 프로그램에 사용됩니다.

유형 풍모 이점 불리
콘솔 오토메이션 크로스 플랫폼, 자동화, 빠른 명령 줄 모드, UI 상호 작용 없음
WinForm windows 원생 UI 빠른 시작, 많은 문서가 널리 사용됨 CPU 바운드, 확장하기 어려움
WPF 풍부한 UI 디자인 프로그램과 인터페이스 디자인은 완전히 독립적입니다. XAML을 작성해야 함, 너무 많은 구성

그중 CPU 바인딩은 CPU 만 사용할 수 있고 GPU는 표시 및 계산에 사용할 수 없음을 의미합니다. 크기 조정이 어렵다는 것은 여러 크기와 해상도에 적응하기 어려운 화면을 의미하며 크기 조정은 왜곡이나 문제가 발생하기 쉽습니다.

2 MATLAB 소개

아마도이 블로그를 클릭 한 학생들은 더 이상 MATLAB 소개가 필요하지 않을 것입니다. 물론 한 가지 설명이 필요합니다 : MATLAB은 m 언어를 통해 Simulink의 작동, 자동 모델링 및 기타 사용 방법을 자동으로 제어 할 수 있습니다. 그리고 C #은 MATLAB을 제어하여 다양한 명령, 함수, 스크립트 등을 실행할 수 있으므로 원칙적으로 C #은 MATLAB을 제어하여 모든 기능을 완료 할 수 있습니다.

3 C # 응용 프로그램 및 MATLAB 혼합 프로그래밍

MATLAB을 호출하는 C #을 구현하는 방법은 주로 다음 두 가지가 있습니다. 첫 번째 방법은 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은 MATLAB의 많은 기본 루틴 실행 명령을 완료 할 수있는 COM 기반의 많은 호출 함수를 제공합니다. 아래 그림은 MATLAB이 서버로 사용할 수있는 COM 인터페이스 함수를 보여줍니다.
MATLAB 도움말 파일에서 확인할 수 있습니다 : Call COM Objects, MATLAB API for Other Languages, MATLAB API for COM Automation Server
여기에 사진 설명 삽입
위의 그림에서 알 수 있듯이 Execute는 MATLAB 명령을 실행하는 데 사용되는 가장 중요한 기능으로, 실행 기능 또는 명령 줄에 따라 Simulink 모델링 및 작업과 같은 작업을 자동으로 제어하기 위해 스크립트를 사용합니다. 동시에 COM 자동화는 워드, 엑셀 및 기타 소프트웨어를 자동으로 제어하여 문서의 자동 읽기, 쓰기 및 수정을 실현하는 C # 응용 프로그램과 같은 Windows 소프트웨어에서 널리 사용됩니다.

// 启动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下面的debug
            string 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는 사용자 정의 함수이며 MATLAB이 파일을 찾을 수 있도록 프로젝트의 디버그 폴더에 위치합니다.)
runTest를 a = 1과 같은 MATLAB 명령문으로 대체하여 가져올 수 있습니다. MATLAB 변수 공간 Variable a, 크기는 1입니다.
COM 인터페이스에 대한 자세한 내용은 MATLAB 도움말 문서 인 MATLAB COM Automation Server Interface를 참조하십시오 (MATLAB 도움말에서이 문구를 검색하여 도움말을 찾을 수 있음). 또한 MATLAB의 버전 및 시작 방법, 시작 유형 등도 제어 할 수 있습니다. (도움말 파일 참조). 여기에서 자주 사용되는 구성은 다음과 같습니다. 명령 창 또는 전체 MATLAB 시작, 즉 GetTypeFromProgID 메서드를 제어하여 전달 된 문자열 매개 변수는 다음 두 가지 옵션에 해당합니다.

  1. Matlab.Application : MATLAB 명령 창 열기
  2. Matlab.Desktop.Application : 전체 데스크톱 응용 프로그램 MATLAB 창을 엽니 다.

C #과 MATLAB 간의 주요 상호 작용 방식을 요약 한 MATLAB C # Book의 한 구절 :

  1. C # 함수는 MATLAB M 파일에서 생성 된 수학 라이브러리의 MATLAB 내장 함수를 호출하여 수학 문제를 해결합니다.
  2. C # 함수는 MATLAB 작업 공간을 호출하여 특정 작업을 수행 한 다음 결과를 MATLAB 작업 공간에서 C # 함수로 전송합니다.
  3. C # 함수는 MATLAB COM Builder를 사용하여 MATLAB M 파일에서 생성 된 COM을 사용합니다.

4 XML 전달 매개 변수

시뮬레이션에는 많은 사용자 구성 매개 변수와 시뮬레이션 구성 매개 변수가 필요하기 때문에 사용자 구성을위한 C # 및 MATLAB의 경우 매개 변수를 가져 오거나 읽는 데 MATLAB에서 제공하는 COM에 의존 할 수 없지만 매개 변수를 전송하려면 XML 파일을 사용해야합니다. eXtensible Markup Language, Extensible Markup Language는 마크 업 언어입니다. 일반적으로 XML은 정보 기록 및 전송에 사용됩니다. 각 언어마다 XML 파일에 대한 통합 구문 분석 기능이있어 서로 다른 플랫폼 또는 서로 다른 언어 간의 정보 상호 작용에 사용할 수 있습니다. XML은 종종 구성 파일로 사용됩니다.
C # 프로그램을 통해 원본 XML 파일을 다시 작성할 수 있습니다. 그런 다음 MATLAB을 제어하여 매개 변수 전달 목적을 달성하기 위해 XML 파일을 구문 분석합니다. 다음 그림은 XML 파일의 디스플레이를 보여줍니다. XML은 노드와 하위 노드를 통해 구조화되어 있음을 알 수 있습니다. ,
XML 개념 : Extensible Markup Language (영어 : Extensible Markup Language, 참조 : XML)는 마크 업 언어입니다. 마킹이란 컴퓨터가 이해할 수있는 정보 기호를 말하며, 이러한 마킹을 통해 컴퓨터는 다양한 정보를 담고있는 기사를 처리 할 수 ​​있습니다. 이러한 태그를 정의하는 방법은 HTML과 같이 국제적으로 사용되는 마크 업 언어를 선택하거나 XML과 같은 관련 당사자가 자유롭게 결정하는 마크 업 언어를 사용할 수 있습니다. 이것이 언어의 확장 성입니다. XML은 SGML (Standard Generalized Markup Language)에서 단순화되고 수정됩니다. 주로 다음 부분이 포함됩니다.
1, 문서 선언
2, 요소 = 태그
3, 속성
4, 주석
5, CDATA 영역, 특수 문자 <! [CDATA [What I do n’t want to parse]]>
Features and Convenience : data transfer between different languages ​​C # and Java, different platform win and linux
Markup language, not a programming language

여기에 사진 설명 삽입

위의 그림과 같이 XML은 노드와 노드에 포함 된 정보 속성에 따라 다른 매개 변수와 구성을 저장합니다. 저장이 완료되면 C #과 MATLAB 모두 XML 파일을 읽고 쓰는 기능이 필요합니다. C #과 MATLAB 간의 정보 상호 작용 프로세스를 완료하기 위해. 아래 그림과 같이.
여기에 사진 설명 삽입

5 대화 형 실험의 작은 예

위에서 언급 한 COM 기반 제어 모드와 XML 파일 기반 정보 상호 작용 모드에 따라 데스크톱 응용 프로그램에 두 개의 숫자 매개 변수가 입력되고 MATLAB 프로그램이 호출되어 관련 계산이 완료됩니다.

C # 소프트웨어 상호 작용 회로도
소프트웨어 인터페이스는 위의 그림과 같습니다. 사용자는 매개 변수를 입력 한 다음 입력 버튼을 통해 XML 파일을 생성합니다. MATLAB 실행을 클릭하면 MATLAB이 파일을 읽고 정보를 읽도록 제어 한 다음, 다음에 따라 자동으로 다른 함수를 호출합니다. 기능을 구현하고 마지막으로 계산 결과를 XML 파일로 저장하기위한 정보. 사용자가 검색을 클릭하면 프로그램은 MATLAB에서 생성 한 XML 파일을 읽고 반환 된 결과를 표시합니다.
여기에 사진 설명 삽입
소프트웨어 실행 프로세스
특정 실행 프로세스는 위 그림과 같이 주로 사용자 인터페이스를 조작하는 사용자에 의해 완료됩니다.
매개 변수 1, 매개 변수 2 대화 상자에서 두 개의 매개 변수를 입력 한 후 기능 선택 드롭 다운 상자에서 해당 계산 방법을 선택합니다,이 기능 옵션을 추가하고 MUL이있다,
2.를 클릭하여 XML 입력 파일을 생성 MATLAB 입력 버튼을 클릭 한 다음 MATLAB 실행 버튼을 클릭하여 작성된 함수를 실행하도록 MATLAB을 자동으로 제어합니다.
3. 함수는 XML 파일을 읽고 사용자의 입력을 구문 분석 한 다음 작업 결과를 가져 와서 XML 결과 파일에 씁니다.
4. C #은 XML 결과 파일을 읽고 표시합니다
. 다음 그림은 각각 C #에서 MATLAB으로 전달한 XML 파일과 MATLAB에서 저장 한 결과 XML 파일을 보여줍니다.
여기에 사진 설명 삽입

MATLAB에 전달 된 C # XML 파일

여기에 사진 설명 삽입

MATLAB에서 C #으로 전달한 XML 파일

MATLAB에서 사용하는 m 파일은 다음과 같습니다.
mulTest.m : 곱셈 함수를 완료하는 데 사용되며 입력은 두 개의 매개 변수, 입력 결과
Xmlread, m : XML 파일
Xmlwrite.m 의 읽기 작업을 완료하는 데 사용됩니다. XML 파일 쓰기 작업 완료
runTest.m : C #은 MATLAB이 실행하는 주 함수를 호출하고, XML로 공식화 된 데이터 규칙에 따라 사용자 입력을 구문 분석하고, 입력에 따라 계산하고, 결과를 다음에 따라 XML 파일에 씁니다. 데이터 규칙.
모든 기능이 디버그 폴더에서 프로젝트 대, MATLAB 이러한 파일을 찾을 수 있습니다.에 배치 할 필요가 있습니다
C # 프로그램은 사용자 매개 변수의 입력을 읽어 제어 MATLAB 작업, 쓰기 XML 기능, 읽기 XML 기능 및 제어에 COM을 사용하여 텍스트 상자 표시.

6 작은 예제 소스 코드 주소

여기에 사용 된 MATLAB의 xml 읽기 및 쓰기 xml 함수는 공식적이지 않지만 형이 공식적으로 추가로 캡슐화하여 사용하기가 매우 간단하고 편리합니다. 다음과 같이 xml 읽기 및 쓰기 용 툴킷을 다운로드하십시오.
XML 읽기 및 쓰기 대화 형 도구 다운로드 주소
소스 프로그램 패키지 다운로드 주소는 다음과 같습니다.
작은 예제 소스 프로그램 다운로드

7 권장 학습 리소스

C # 및 MATLAB 상호 작용

두 권의 영어 책, 첫 번째는 주로 임베디드 하드웨어 개발과 결합 된 C # 작성 응용 프로그램의 작은 경우를 소개하는 것이고, 두 번째는 특히 C #과 MATLAB 간의 상호 작용을위한 것입니다. MATLAB의 도움말 문서를 직접 보는 것이 더 낫다고 생각합니다. 하지만 도움말 문서는 C #과 MATLAB 간의 상호 작용이 COM을 기반으로 구현되었으므로 문서에 소개 된 내용은 특별히 자세하지 않습니다.

  1. C # .Net과 임베디드 시스템 통합
  2. MATLAB C # 책

XML 학습

XML의 문법 및 구조를 배우려면 bilibili로 이동하거나 웹 사이트를 학습 한 다음 XML 읽기, 쓰기 및 기타 작업을 제어하는 ​​C #을 배우는 동시에 XML 읽기 및 쓰기에 대한 MATLAB 작업을 학습 할 수 있습니다.

저자에게 연락 QQ 2807073834, 이메일 : [email protected], 파티에 연락을 거부

추천

출처blog.csdn.net/qq_36320710/article/details/107114811