이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
Python 코드를 Simulink와 통합하기 개요
이 항목에서는 Python® 코드를 Simulink®와 통합하는 방법에 대한 개요를 제공합니다. Simulink와 함께 Python을 사용하도록 시스템을 설정하고 MATLAB Function 블록이나 MATLAB System 블록을 사용하여 Python 코드를 Simulink와 통합할 수 있습니다.
Python을 사용하도록 시스템 구성하기
MATLAB®에서 Python 모듈을 호출하려면 호환되는 버전의 Python이 설치되어 있어야 합니다. MATLAB에서 지원되는 Python 버전과 Python을 사용하도록 시스템을 설정하는 방법에 대한 자세한 내용은 Python을 사용하도록 시스템 구성하기 항목을 참조하십시오.
MATLAB에서 모든 표준 Python 라이브러리, 타사 기능 또는 사용자 생성 모듈에 액세스할 수 있습니다. MATLAB에서 Python을 사용하는 방법에 대한 자세한 내용은 MATLAB에서 Python 모듈 액세스하기 - 시작하기 항목을 참조하십시오.
MATLAB Function 블록을 사용하여 Python 코드를 Simulink와 통합하기
MATLAB Function 블록을 사용하여 간단한 Python 코드를 Simulink와 통합합니다. Python 함수나 클래스 이름의 접두사로 py.
를 사용하여 MATLAB Function 블록에서 Python 모듈을 호출합니다.
다음 코드는 py.math.cos
와 py.math.sin
을 사용하여 제공된 입력값의 복소수에 대한 오일러 공식을 계산하는 MATLAB Function을 구현합니다.
function [re, img, num] = euler(x) % Declare py.math.cos and py.math.sin as extrinsic functions coder.extrinsic('py.math.cos','py.math.sin'); % Preallocate outputs re = double(0); img = double(0); re = py.math.cos(x); img = py.math.sin(x); num = re + 1j*img; end
Python 모듈은 코드 생성 시 지원되지 않으며 실행을 위해 MATLAB 엔진이 필요합니다.
coder.extrinsic
함수를 사용하여 외재적 함수로 선언함으로써 코드 생성에서 Python 호출을 배제할 수 있으며 실행에 MATLAB 엔진을 사용할 수 있습니다. 다음 코드는py.math.cos
와py.math.sin
을 외재적 함수로 선언합니다.coder.extrinsic('py.math.cos','py.math.sin');
외재적 함수가 런타임에 반환하는 출력값은 MATLAB 배열이라고도 하는
mxArray
입니다. MATLAB 배열에 대한 유효한 작업은 이 출력값을 변수에 저장하거나, 다른 외재적 함수에 전달하거나, MATLAB에 반환하는 것으로 제한됩니다.mxArray
값에 대해 그 외의 다른 작업(예: 이 값을 코드의 표현식에 사용)을 수행하려면 런타임에mxArray
를 알려진 유형으로 변환해야 합니다. 이 작업을 수행하려면 사전할당을 통해 유형이 이미 정의된 변수에mxArray
를 할당하십시오.mxArray
사전할당에 대한 자세한 내용은 런타임 시점의 외재적 함수의 출력값 반환하기 항목을 참조하십시오. 다음 코드는 숫자의 실수부와 허수부의 데이터형을double
형으로 사전할당합니다.re = double(0); img = double(0);
Simulink에서 MATLAB Function을 구현하여 입력값에 대한 오일러 공식을 계산합니다.
MATLAB System 블록을 사용하여 Python 코드를 Simulink와 통합하기
MATLAB System 블록을 사용하여 Python 코드를 Simulink와 통합할 수 있습니다. 알고리즘이 상태 동특성을 처리해야 하거나, 데이터를 스트리밍해야 하거나, 블록을 추가로 사용자 지정해야 하는 경우 이 블록을 사용하십시오. Python 함수나 클래스 이름의 접두사로 py.
를 사용하여 Python 모듈을 호출할 수 있습니다. MATLAB System 블록 내의 Python 함수 호출은 외재적 함수로 선언할 필요가 없습니다. 다음을 사용하여 시뮬레이션 블록 파라미터를 Interpreted Excecution
으로 변경하십시오.
다음 코드는 py.math.cos
와 py.math.sin
을 호출하여 복소수에 대한 오일러 공식을 계산하는 MATLAB System object™를 구현합니다.
classdef eulerSystem < matlab.System % System object to calculate Euler's formula for an input methods (Access = protected) function [re, img, num] = stepImpl(obj, u) % Implement algorithm re = py.math.cos(u); img = py.math.sin(u); num = py.math.cos(u) + 1j*py.math.sin(u); end function [c1, c2, c3] = isOutputComplexImpl(obj) % Implement propagator to declare complexity of outputs c1 = false; c2 = false; c3 = true; end function [flag1, flag2, flag3] = isOutputFixedSizeImpl(obj) % Implement propagator to declare if outputs are fixed size flag1 = true; flag2 = true; flag3 = true; end function [sz_1, sz_2, sz_3] = getOutputSizeImpl(obj) % Implement propagator to declare output sizes sz_1 = [1,1]; sz_2 = [1,1]; sz_3 = [1,1]; end function [out_1, out_2, out_3] = getOutputDataTypeImpl(obj) % Implement propagator to declare output data types out_1 = "double"; out_2 = "double"; out_3 = "double"; end end end
아래와 같이 Simulink에서 System object를 구현하여 입력값에 대한 오일러 공식을 계산합니다.
모델을 컴파일하는 동안 System 블록의 출력 사양을 입력값에서 직접 추론할 수 없는 경우 전파자 메서드를 정의해야 합니다. 위의 코드는 isOutputComplexImpl
, isOutputFixedSizeImpl
, getOutputSizeImpl
, getOutputDataTypeImpl
전파자 메서드를 구현합니다. 전파 메서드에 대한 자세한 내용은 Add and Implement Propagation Methods 항목을 참조하십시오.