본문 바로가기
programming language/MATLAB

Simulink Signal Builder 사용시 Data Type Conversion 생성하기

by __observer__ 2017. 7. 14.
반응형
Simulink 에서 테스트 진행시 Signal Builder 를 사용하여 test case 를 만들곤 하는데

signal builder 의 출력은 double 값으로 나오기 때문에 해당 출력을 입력으로 사용하는 블록과 데이터 타입을 맞춰주는 과정이 필요 합니다. 

이렇게 데이터 타입을 맞춰주기 위해 Simulink 에서는 Data Type Conversion 블록을 사용하는데 

Signal 이 여러 개가 되는 경우 일일이  Data Type Conversion 블록을 붙여주는 것도 고된 잡업이더군요. 

그래서 여러개의 Data Type Conversion 블록을 자동으로 생성하도록 하는 MATLAB 코드를 만들어 봤습니다.

코드는 다음과 같습니다. 

function dataTypeConversionMake(N_Lines)
sys = 'dataTypeConversionSModel';
bdclose(sys)
new_system(sys,'ErrorIfShadowed') % Create the model
open_system(sys) % Open the model
yh= 30;
DataTypeConversionsSub = [sys '/DataTypeConversions'];
blockHandle = add_block('simulink/Ports & Subsystems/Subsystem', DataTypeConversionsSub);
set_param(blockHandle, 'Position', [50 50 55 (50+N_Lines*15)])
lineHandle = find_system(DataTypeConversionsSub,'FindAll','on','type','line');
delete_line(lineHandle)
in_Position = get_param([DataTypeConversionsSub '/In1'],'Position');
out_Position = get_param([DataTypeConversionsSub '/Out1'],'Position');
w = (out_Position(1) - in_Position(3))/3;
x = (out_Position(1) - in_Position(3))/3 + in_Position(3);
DataTypeConversion_pos = [x out_Position(2) x+w out_Position(4)];
add_block('simulink/Commonly Used Blocks/Data Type Conversion',[DataTypeConversionsSub '/DataTypeConversion1'], 'Position',DataTypeConversion_pos)
handle1 = add_line([sys '/DataTypeConversions'],'In1/1','DataTypeConversion1/1','autorouting','on');
handle2 = add_line([sys '/DataTypeConversions'],'DataTypeConversion1/1','Out1/1','autorouting','on');
for n=2:N_Lines
in_Position(2) = in_Position(2) + yh;
in_Position(4) = in_Position(4)+ yh;
newInNameFullpath = [sys '/DataTypeConversions/In' num2str(n)];
newInName= ['In' num2str(n)];
MuBlockHandle = add_block([sys '/DataTypeConversions/In1'], newInNameFullpath, 'Position',in_Position);
%%
out_Position(2) = out_Position(2) + yh;
out_Position(4) = out_Position(4)+ yh;
newOutNameFullpath = [sys '/DataTypeConversions/Out' num2str(n)];
newOutName= ['Out' num2str(n)];
MuBlockHandle = add_block([sys '/DataTypeConversions/Out1'], newOutNameFullpath, 'Position',out_Position);
%%
DataTypeConversion_pos(2) = DataTypeConversion_pos(2) + yh;
DataTypeConversion_pos(4) = DataTypeConversion_pos(4)+ yh;
newDTCNameFullpath = [DataTypeConversionsSub '/DataTypeConversion' num2str(n)];
newDTCName = ['DataTypeConversion' num2str(n)];
MuBlockHandle = add_block([sys '/DataTypeConversions/DataTypeConversion1'], newDTCNameFullpath, 'Position',DataTypeConversion_pos);
%%
handle1 = add_line([sys '/DataTypeConversions'],[newInName '/1'],[newDTCName '/1'],'autorouting','on');
handle2 = add_line([sys '/DataTypeConversions'],[newDTCName '/1'],[newOutName '/1'],'autorouting','on');
end
dataTypeConversionMake  함수를 사용하기 위해 입력 argument 로 signal 의 갯수를 넣어 줍니다.

아래 코드는 8 개의 signal 에 대한 Data Type Conversion  블록을 만드는 명령 입니다. 

 dataTypeConversionMake(8)

위 명령어를 실행하면 다음과 같이 Simulink 모델이 만들어 집니다. 


해당 모델을 열어 보면 8 개의  Data Type Conversion 블록 연결이 있는 걸 볼 수가 있습니다.


반응형

댓글