2014-06-05 3 views
0

이상적인 목표는 다음과 같습니다.VB.Net의 MatLab Simulink 값 읽기

우리는 시뮬 링크 모델을 가지고 있으며 실행 중에 모든 결과 값을 vb.net 응용 프로그램에 보내기를 원합니다.

나는 몇 가지 방법을 발견했지만 다이빙하기 전에 몇 가지 입력을 원한다고 생각합니다. 나는 그것을 사용하는 것을 어렵게 만드는 과거에 matlab이나 simulink를 사용하지 않았다.

matlab에 대한 COM 개체가 있지만 시뮬 링크가 실행되는 동안 변수에 대한 실시간 액세스가 허용되지 않습니다. Simulink는 완료 후에 데이터를 matlab에 덤프합니다.

옵션 # 1 : 콜백? 나는 읽고 있었고 값이 타이머를 기반으로 matlab에 보내지는 것처럼 블록에 콜백을 추가 할 수있는 것처럼 보인다. 그런 다음 이러한 값을 얻기 위해 VB에서 matlab에 대한 상수 호출을해야합니다. 이 doesnt는 효율적으로 보이고 simulnk를 동시에 달리기로 많은 자원에 채택 할 것입니까? How do I get data from a Simulink block into a MATLAB GUI?

옵션 # 2 : 나는 매스 웍스의 웹 사이트에 '시뮬링크 코더'를 발견하고 이상적인 솔루션처럼 보이지만 여기 사람이 그것을 사용하는 경우 몇 가지 설명을하고 싶습니다. 나는 재판을 신청했지만, 얻기 전에 몇 번 더 뛰어 넘을 수 있습니다.

코더가 시뮬 링크 모델을 가져 와서 C/C++ 코드로 알고리즘을 만드는 것처럼 보입니다. 그러면 C 응용 프로그램을 만들고 해당 코드를 소스로 사용할 수 있다는 의미입니까? 따라서 애플리케이션으로 시뮬 링크를 실행하는 대신 코드를 실행하고 매개 변수를 입력하여 출력 변수를 제공 할 수 있습니까?

나는 또한 DLL이나 mux를 출력하는 matlab에 대한 정보를 읽었습니까? 그래서 .net 응용 프로그램과 함께 사용할 수 있습니까?

모든 입력/의견은 감사합니다 :)이

답변

2

정말 귀하의 질문에 간단한 대답이 아닌, 최고의/올바른 접근 방식이 아래로 어떤 기능이 필요에오고.

Simulink Coder : 예, Simulink 모델을 C 코드로 변환합니다.이 코드는 작성한 다른 C 코드와 동일한 방식으로 사용할 수 있습니다.

그 시점에서 더 이상 Simulink를 사용하지 않으며 라이센스를 요구하지 않습니다. 응용 프로그램을 배포하는 데 유용 할 수 있습니다.

그러나 제한 사항이 있습니다. 일반적으로 고정 단계 솔버에만 국한됩니다. M- 코드 S- 함수는 변환 할 수 없습니다. MATLAB Function 블록에서 coder.extrinsic 함수를 정의 할 수 없습니다. 매개 변수와 모델 입력 만 변경할 수 있습니다. 토폴로지 즉 코드의 재생성없이 블록의 수와 상호 연결을 변경할 수는 없습니다. 좀 더 포괄적 인 목록은 Coder Limitations을 참조하십시오.

런타임 개체 (사용자가 제공하는 링크에 언급되어 있음)를 사용하는 것이 이상적이지 않으며 때로는 잘 조정되지 않을 수도 있습니다 (예 : 보려는 신호가 많은 경우 문제가 될 수 있음). 실제로는 시뮬레이션 중에 모델에서 데이터를 가져 오는 유일한 방법. (블록에 첨부 할 수있는 event_listeners가 있지만 잘 스케일되지 않습니다.)

언급 한 COM 제한은 Simulink의 제한 사항이 아닙니다. 효율성을 위해 Simulink는 모델이 일시 중지되거나 중지 될 때만 데이터를 덤프합니다.이는 MATLAB-COM API 자체와 아무 관련이 없습니다.

또한 DLL과 mux를 생성하는 MATLAB (아마도 mex를 의미 함)에 대해 언급합니다. MATLAB (즉, m- 코드)과는 다른 코드 생성 메커니즘이 Simulink와 다릅니다. MATLAB Coder 또는 MATLAB Compiler가 아닌 Simulink Coder 만 사용하실 수 있습니다. Mex (당신이 말한 것이라고 가정)은 MATLAB에서 컴파일 된 코드를 호출하기위한 메커니즘이며 여기에서 묻는 것과 관련이 없습니다.

+0

응답 해 주셔서 감사합니다. 첫째, 네, 저는 mex를 의미했습니다. 실수였습니다. 방금 Simulink Coder의 시험판을 받았으므로 일부는 더 이해하기 쉽습니다. 그것은 또한 현재 가장 실행 가능한 옵션처럼 보입니다. 이 질문을 새로 작성해야할지 모르겠지만 다른 기능을 알아 내는데 어려움이 있습니다. 생성 된 코드가 입력 변수를 받아들이고 출력 변수를 반환하는 함수를 포함하도록 입력 및 출력을 정의 할 수 있습니까? 또는이 일을 위해 일종의 래퍼를 만들어야합니까? –

+0

정말 새로운 질문이 필요합니다. 그러나 생성 된 코드는 시뮬레이션 중에 발생하는 것을 반영합니다 : 초기화를위한 코드, 시간을 통해 모델을 스테핑하기위한 코드 (상태를 업데이트하고 블록 출력을위한 코드를 호출하고, 종료를 코드함으로써 코드를 생성합니다. 모델을 사용하여 신호를 입력하고 출력합니다. 호출 가능한 함수를 가지려면 모델의 관련 부분을 원자 서브 시스템에 넣고 블록 매개 변수의 "코드 생성"옵션을 적절한 값으로 설정해야합니다. –

관련 문제