기술 칼럼

대규모 Simulink 모델 구축을 위한 모범 사례 적용

작성자: Brad Hieb 및 Erick Saldana Sanvicente, MathWorks


시스템의 규모와 복잡성이 커지면서 엔지니어링 팀은 더 작은 규모에서는 존재하지 않는 완전히 새로운 과제에 직면하게 됩니다.

규모가 크게 늘어나면 대개 접근 방식의 변화가 필요합니다. 범위뿐만 아니라 종류도 바뀌어야 합니다. 이 원리는 모델 기반 설계로 작업할 때 Simulink® 모델에도 적용됩니다. 모범 사례를 따르지 않으면 간단한 개념 증명 모델에서 수십만 개의 블록으로 구성된 대규모 모델로 전환할 때 여러 가지 문제가 발생하기 시작합니다. 여기에는 모델 아키텍처, 데이터 관리, 인터페이스, 파일 관리 및 시뮬레이션 성능 문제가 포함됩니다. 이러한 대규모 모델의 구성 요소는 작을 수 있으며, 종종 여러 개인, 팀, 심지어 부서에 의해 개발됩니다. 표준화가 이루어지고 모범 사례가 준수되면 이러한 모델은 원활하게 확장될 수 있습니다.

이 칼럼에서는 Simulink에서 대규모 복잡한 모델로 작업할 때 일반적으로 마주치는 과제를 관리하기 위한 일련의 모범 사례를 설명합니다. 이 주제 자체가 매우 광범위하므로, 여기서의 목표는 자세하고 규범적인 지침을 제공하는 것이 아니라 각 모범 사례의 기본 사항과 함께 이를 적용하는 방법을 더 깊이 이해하기 위해 탐색할 수 있는 추가 리소스에 대한 링크를 제공하는 것입니다.

모델 컴포넌트화를 위해 모델 참조 사용

고객과 협력하다 보면 의미 있는 컴포넌트화가 부족한 대규모 모델을 보는 경우가 드물지 않습니다. 팀은 아이디어를 테스트하기 위해 간단한 모델로 시작합니다. 시간이 지남에 따라 새로운 요소나 기능이 추가되고, 모든 작업은 곧 다루기 어려워지는 단일의 거대한 모델 파일에서 수행됩니다.

Simulink에는 대규모 모델을 컴포넌트화하는 여러 가지 방법이 있는데, 가장 좋은 접근 방식은 고려 중인 구체적인 활용 사례에 따라 달라집니다. 예를 들어, 단순히 블록이나 구성 요소 그룹을 시각적으로 구성하려는 팀은 모델 내 가상 서브시스템을 선택할 수 있습니다. 자주 변경되지 않는 널리 사용되는 기능을 만들고자 하는 팀이라면 연결된 서브시스템(또는 라이브러리)이 더 나은 선택입니다. 만약 독립형 모델로 컴포넌트를 개발하거나 시뮬레이션하는 것이 목표라면 모델 참조가 가장 좋은 접근 방법입니다.

모델 참조는 대규모 모델의 컴포넌트화에 있어서도 핵심입니다. 그 이유 중 하나는 Simulink의 모델 참조를 통해 팀이 독립된 모델로 병렬로 구성 요소를 개발할 수 있기 때문입니다. 각 구성 요소는 완벽하게 작동하고 시뮬레이션이 가능하며, 자체 SLX 파일에 저장되므로 각 팀은 다른 팀의 작업을 방해하지 않고 독립적으로 작업할 수 있습니다. 전체 디자인이 단일 파일에 캡처되어 있는 경우에는 이는 사실상 불가능합니다. 더욱 중요한 점은 이러한 독립적인 참조 모델을 더 큰 모델 내부에 배치하여 쉽게 통합할 수 있다는 것입니다. (그림 1) 이 아키텍처는 참조 모델의 캐시된 인스턴스와 증분 빌드를 사용하여 빌드 시간을 줄일 수 있습니다. 또한 아래의 성능 섹션에서 자세히 다루는 액셀러레이터 및 고속 액셀러레이터 모드를 사용할 수 있습니다.

BMS_ClosedLoop 모델에 배치되기 전에 BMS_Software 및 Battery_Model 모델이 어떻게 독립적으로 개발되는지 보여주는 Simulink 모델의 스크린샷입니다.

그림 1. BMS_SoftwareBattery_Model 모델은 독립적으로 개발한 후 BMS_ClosedLoop 모델 내에 배치(또는 참조)할 수 있습니다.

데이터 사전을 통한 데이터 관리 확장

컴포넌트화로 인해 문제가 발생한 동일한 시나리오를 다시 생각해 보겠습니다. 팀은 개념 증명을 위해 간단한 모델로 시작한 후 시간이 지남에 따라 모델을 계속 확장해 나갑니다. 간단한 모델의 경우 많은 엔지니어는 변수, 파라미터 및 기타 데이터를 기본 작업 공간에 저장합니다. 이러한 접근 방식은 비공식적인 작업 흐름, 빠른 파라미터 조정, 신속 프로토타이핑, 단일 개발자 프로젝트 또는 파라미터의 보편적인 가시성이 필요한 활용 사례에 적합합니다. 하지만 모델의 범위와 복잡성이 커지면서 데이터 관리를 위해 기본 작업 공간에 의존하는 데는 몇 가지 단점이 있습니다. 예를 들어, 엔지니어가 세션을 닫을 때마다 기본 작업 공간이 지워지므로 MATLAB® 코드(.m) 또는 MATLAB 파일(.mat)에 직접 저장해야 합니다.

대규모 모델, 분산 개발 또는 범위 지정 데이터가 포함된 프로젝트의 데이터를 관리하는 경우 기본 작업 공간보다 데이터 사전이 더 적합합니다. 이에 대한 이유는 몇 가지가 있습니다. (그림 2 참조) 첫 번째는 데이터 지속성입니다. 데이터는 데이터 사전(.sldd) 파일에 특정 파일 형식으로 저장되므로 팀은 모델과 기본 작업 공간과 별도로 데이터를 정의, 관리 및 업데이트할 수 있습니다. 둘째, 팀은 데이터를 여러 사전으로 분할하여 데이터 구성을 더욱 개선할 수 있습니다. 셋째, 데이터 사전은 변경 추적 워크플로에서 효과적으로 작동합니다. 이를 통해 팀에서는 어떤 변경이 이루어졌는지, 언제 변경되었는지, 누가 변경했는지 확인할 수 있고 필요한 경우 이전 버전으로 되돌릴 수도 있습니다.

대규모 모델로 작업할 때 데이터 사전을 사용하는 이점을 보여주는 차트입니다.

그림 2. 대규모 모델을 작업할 때 데이터 사전을 사용하는 장점.

여기서 중요한 점은 기본 작업 공간과 데이터 사전을 사용할지 선택할 때 전부 아니면 전무라는 방식이 아니라는 것입니다. 두 가지 접근 방식을 병행할 수 있으므로 팀은 시간이 지남에 따라 기본 작업 공간에서 하나 이상의 데이터 사전으로 점진적으로 마이그레이션할 수 있습니다.

버스를 통한 인터페이스 단순화

컴포넌트화된 계층적 모델에서 서브시스템을 연결할 때, 처음에는 가장 간단한 방법은 한 구성 요소에서 다른 구성 요소로 전달되는 각 요소에 대해 별도의 신호 라인을 사용하는 것이라고 생각할 수 있습니다. 물론 이 방법은 간단한 인터페이스에는 효과적이지만, 이 접근 방식은 필요 이상으로 복잡하고 지저분하며 관리하기 어려운 모델을 빠르게 만들어낼 수 있습니다.

Simulink에서 버스는 여러 개의 전선을 묶어 놓은 것처럼 일련의 신호(또는 요소)를 단일 선으로 표현하여 인터페이스를 단순화하고 복잡함을 줄일 수 있습니다. 간단한 예를 통해 이것의 가치를 쉽게 알 수 있습니다. 배터리 시스템의 비정상적인 조건을 식별하기 위한 오류 감지 구성 요소를 고려해 보겠습니다. 이 구성 요소에는 최대 및 최소 셀 전압, 최대 및 최소 셀 온도, 접촉기 상태, 팩 전압 및 전류, 전류 제한을 포함한 11개의 서로 다른 입력이 있습니다. 물론 11개의 개별 입력 포트로 컴포넌트를 만드는 것도 가능하지만, 입력을 논리적 그룹으로 분리하고 각 그룹에 버스를 사용하는 것이 더 깔끔합니다. 예를 들어, 셀 전압 신호와 셀 온도 신호는 모두 동일한 구성 요소에서 발생하고 서로 관련되어 있으므로 이를 단일 4요소 버스로 그룹화하는 것이 합리적입니다. (그림 3) 분명 이는 비교적 사소한 예이지만 버스를 사용하면 구성 요소 인터페이스뿐만 아니라 더 광범위하게 복잡한 모델을 단순화할 수 있다는 것을 보여줍니다.

개별 신호 대신 버스를 입력으로 사용하도록 업데이트된 오류 감지 구성 요소를 보여주는 Simulink 모델입니다.

그림 3. 개별 신호 대신 버스를 입력으로 사용하도록 오류 감지 구성 요소가 업데이트되었습니다.

프로젝트를 통한 파일 관리 개선

지금까지 설명한 모범 사례를 따르면 하나의 부작용으로 관리해야 할 파일 수가 늘어납니다. 전체 설계가 단일 모델에 있는 경우 팀이 관리해야 할 파일 세트는 비교적 작지만, 컴포넌트화가 데이터 사전을 적극적으로 사용하면 빠르게 늘어날 수 있습니다. 파일 관리 전략이 없으면 이러한 파일 확산은 문제가 될 수 있습니다.

Simulink에서 작업할 때 팀들은 프로젝트를 사용해 파일 관리 활동을 자동화하여 모델링, 시뮬레이션 및 기타 고부가가치 활동에 더 많은 시간을 할애할 수 있습니다. 예를 들어, 프로젝트를 설정할 때 팀은 프로젝트 경로에 폴더를 지정합니다. 이러한 폴더는 프로젝트를 열 때 검색 경로에 추가되고(프로젝트를 닫으면 제거됨) 프로젝트의 모든 사용자가 폴더 내의 파일에 액세스할 수 있도록 합니다. 팀은 또한 한 예로 시작 파일을 지정해 프로젝트 환경 설정을 자동화하고 종료 파일을 지정해 설정 단계를 취소하여 환경을 정리할 수 있습니다. 또한, 프로젝트를 시작할 때 자주 사용하는 파일을 열도록 구성하고 일반적으로 사용되는 작업에 대한 바로가기를 만들 수 있습니다.

프로젝트는 또한 팀이 흔히 저지르는 실수를 피하는 데 도움이 될 수 있습니다. 예를 들어, 복잡한 모델 계층 구조의 경우 같은 이름을 가진 두 개의 모델 파일이 서로 다른 디렉토리에 존재하는 것은 드문 일이 아닙니다. 프로젝트를 사용할 때 가려진 파일이 감지되면 엔지니어는 경고를 보게 됩니다. 또한, 프로젝트가 닫힐 때 엔지니어에게는 저장되지 않은 변경 사항을 저장하라는 메시지가 표시되어 작업 손실을 방지하는 데 도움이 됩니다.

마지막으로 프로젝트는 사용자 인터페이스에서 직접 액세스할 수 있는 새로 고침, 커밋, 밀어넣기, 끌어오기, 가져오기 및 기타 일반적인 작업으로 소스 컨트롤을 간소화할 수 있습니다. (그림 4)

사용 가능한 소스 컨트롤 작업을 보여주는 Simulink 스크린샷입니다.

그림 4. 소스 컨트롤 작업은 프로젝트 탭의 소스 컨트롤 섹션에서 직접 사용 가능합니다.

시뮬레이션 성능 최적화

지금까지 다룬 모범 사례는 주로 대규모 모델의 구조와 관련 데이터 및 파일에 초점을 맞추었습니다. 이러한 모범 사례를 구현한 고객과의 대화에서 시뮬레이션 성능 개선에 대한 질문을 자주 받습니다. “이제 우리는 더 나은 대규모 모델 구축 방법을 갖게 되었으니 그럼 어떻게 이를 더 빠르게 시뮬레이션할 수 있을까요?”

시뮬레이션 성능을 개선하는 데 사용할 수 있는 툴은 여러 가지가 있습니다. 첫 번째 단계로 시뮬레이션 속도를 저하시킬 수 있는 구성 설정을 식별하기 위해 일련의 검사를 실행하기 위해 성능 어드바이저를 권장합니다. 다음으로, (예를 들어 콜백 안에서) 초기화 MATLAB 코드가 포함된 모든 모델의 경우 MATLAB이 어디에서 가장 많은 시간을 소요하는지를 알아보려면 MATLAB의 프로파일러 앱을 실행하는 것이 좋습니다. Simulink 프로파일러는 모델 실행 시간을 평가하고 시뮬레이션 성능 저하의 원인이 될 수 있는 문제를 식별합니다. 마지막으로 가변 스텝 솔버를 사용하는 팀의 경우 솔버 프로파일러를 실행하는 것이 좋은데, 이는 솔버 동작을 분석하고 잠재적인 문제(솔버 재설정이나 매우 작은 시간 스텝 등)를 식별하고 이를 해결하기 위한 권장 사항을 제공하는 솔루션입니다. 이러한 툴 각각에 대한 지침(사용 방법 및 시기 등)은 문제 해결 및 시뮬레이션 성능 향상 안내서에서 볼 수 있습니다. (표 참조)

대규모 모델을 컴포넌트화한 팀은 액셀러레이터 모드 또는 가속 액셀러레이터 모드를 사용해 시뮬레이션 속도를 높일 수 있는데, 이 모드는 Simulink 시뮬레이션에서 일반적으로 사용되는 인터프리트 코드를 생성된 코드로 대체합니다. 모델 초기화 중에 Simulink 코드가 이미 생성된 모든 구성 요소가 있는지 캐시를 확인합니다. 이 증분적 빌드 프로세스는 많은 구성 요소가 있는 대규모 모델의 초기화 시간을 크게 줄여줍니다. 마지막 시뮬레이션 이후 변경된 구성 요소만 다시 빌드하고 캐시에 추가하면 되기 때문입니다.

초기화 시간을 줄이는 또 다른 방법은(특히 모델을 반복적으로 시뮬레이션할 때) 빠른 재시작입니다. 팀이 모델에 구조적 변경을 하지 않고 여러 번 시뮬레이션을 수행하는 경우, 빠른 재시작 기능을 사용하면 모델을 컴파일하고 매번 시뮬레이션을 종료하지 않고도 시뮬레이션을 수행하여 프로세스 속도를 높일 수 있습니다. 대신, 첫 번째 시뮬레이션에서 모델이 컴파일되고 초기화되고, 이후의 각 시뮬레이션에서 모델 작동 지점의 스냅샷이 캡처됩니다. (그림 5)

기준 모델에서 두 개의 최적화된 모델까지 시뮬레이션 시간이 얼마나 단축되었는지 보여주는 막대형 차트입니다.

그림 5. 더 빠른 시뮬레이션을 위해 모델을 최적화합니다.

결론적으로, 엔지니어링 팀이 Simulink 모델의 확장에 따른 복잡성을 탐색함에 따라 모범 사례를 준수하는 것이 필수적입니다. 이 문서에서는 모델 컴포넌트화, 데이터 관리, 성능 최적화를 위한 필수 전략을 설명하면서, 모델 개발에 대한 체계적인 접근 방식의 중요성을 강조했습니다. 성능 어드바이저, MATLAB 프로파일러, 솔버 프로파일러와 같은 툴을 활용하면 팀은 시뮬레이션 성능을 향상하고 생산성을 개선할 수 있습니다. 이러한 관행은 대규모 모델이 관리 가능하고, 효율적이며, 적응 가능한 상태를 유지하도록 보장합니다. 모델 기반 설계 환경이 계속해서 발전함에 따라 이러한 가이드라인은 팀이 점점 더 복잡해지는 엔지니어링 과제의 요구 사항을 충족하는 견고한 모델을 구축하는 데 도움이 될 것입니다. 더 자세히 알아보고 싶다면, 이 논문 전반에 강조된 추가 자료와 교육 기회를 활용해 보시기 바랍니다.

이 기사의 내용은 "컴포넌트에서 복잡한 시스템에 이르는 대규모 모델을 구축하기 위한 모범 사례"라는 제목의 강연을 기반으로 합니다(이 강연과 추가 웨비나 및 교육에 대한 자세한 내용은 "자세히 알아보기"를 참조하세요). 이 강연은 MathWorks Automotive Conference에서 발표했습니다. 서두에서 언급했듯이, 이 주제는 매우 광범위해서 단 한 편의 기사나 강연으로 모든 내용을 다룰 수 없습니다.

2025년 기고

관련 기능에 대한 칼럼 보기

관련 산업에 대한 칼럼 보기