Vestas - 모델 기반 설계 및 지속적 통합을 통한 풍력 발전소의 제어 소프트웨어 개발 사례
“Simulink와 Embedded Coder를 사용하면 발전소 제어기에서 실행될 실제 코드가 통합된 시뮬레이션을 고객과 전력망 운영자에게 보여줄 수 있습니다. 이는 전력망 운영자의 요구사항이고, 이를 통해 Vestas는 아직 기존 접근법을 사용하는 경쟁사와 비교하여 경쟁 우위를 확보할 수 있습니다.”
과제
지역에 따라 다르고 진화하는 계통망 규약을 준수하는 재생 발전소 제어 소프트웨어 개발
솔루션
모델 기반 설계와 지속적 통합을 함께 사용한 제어기 모델링, 시뮬레이션 기반 테스트 자동화, 산업 제어기용 프로덕션 코드 생성
결과
- 신뢰성이 있고 문제 없는 코드 생성
- 복수사업장 CI 워크플로 자동화
- 하드웨어 종속 방지
Vestas Wind Systems A/S는 80개국에서 66,000개 이상의 터빈으로 총 100GW 이상의 풍력 발전 설치를 자랑하며, 이는 다른 어떤 기업보다도 많은 풍력 발전량입니다. Vestas의 엔지니어들은 모델 기반 설계에 CI(지속적 통합)를 도입하여 발전소 제어 소프트웨어를 개발하고 Vestas 고객과 전력망 운영자에게 계통망 규약 준수 방법을 시연하고 있습니다.
“전력망 운영자는 플랜트의 거동을 시뮬레이션으로 보고 제어 코드가 시뮬레이션과 일대일로 일치하는지 확인하고 싶어 합니다.” Vestas Wind Systems A/S의 제어 시스템 소프트웨어 설계자 Hagen Nielsen의 설명입니다. “현재 이를 시연할 수 있는 기업은 많지 않습니다. Vestas는 시연이 가능합니다. MATLAB 및 Simulink을 통해 모델 기반 설계를 사용하여 발전소 제어 시스템을 모델링하고 시뮬레이션한 다음 이러한 동일한 모델을 사용하여 시스템 수준 시뮬레이션과 프로덕션을 위한 C++ 코드를 생성할 수 있기 때문입니다.”
과제
Vestas의 엔지니어들은 발전소 제어 설계에 모델 기반 설계를 도입하기 전에는 기존 접근법을 사용했으며, 기존 접근법에서는 전력 엔지니어가 종이 문서로 된 사양과 설계 문서를 작성해서 소프트웨어 엔지니어에게 넘기면 소프트웨어 엔지니어가 개별 구성요소 또는 기능을 위한 코드를 수작업으로 작성했습니다. 전력 엔지니어는 PSCAD 소프트웨어를 사용하여 시뮬레이션을 실행했지만, 이러한 시뮬레이션은 소프트웨어 제어가 아닌 전력이 그 초점이었습니다. 이 시뮬레이션에는 제어 코드가 통합되지 않았으므로, 소프트웨어가 통합 및 배포된 후 PSCAD 시뮬레이션에 시스템 성능이 반영된다는 보장이 거의 없었습니다. Vestas는 전력 시스템 시뮬레이션이 제어 시스템에 부합하도록 보장하면서 수작업 코딩으로 인한 인적 실수의 가능성을 제거하고자 했습니다.
또한 Vestas는 유럽과 아시아의 5개국에 분산된 엔지니어링 팀이 동일한 프로젝트, 경우에 따라서는 동일한 모델에서 협업할 수 있기를 원했습니다. 지리적으로 분산된 이 팀은 모델에 버전 컨트롤을 적용하고, 빈번한 병합을 관리하고, 시뮬레이션 기반 테스트를 자동화해야 했습니다. Vestas는 이러한 요구사항을 충족하기 위해 CI와 함께 Jenkins™를 사용하고 모델링, 시뮬레이션, 코드 생성을 기반으로 하는 엔지니어링 워크플로에 CI 원칙을 통합하기로 결정했습니다.
솔루션
Vestas의 전력 시스템 엔지니어들은 경영진의 지원을 확보한 후 CI 및 모델 기반 설계를 MATLAB® 및 Simulink®와 결합하는 새로운 발전소 제어 설계 워크플로를 구축했습니다.
계통망 규약 변경이 제안되거나 고객이 새로운 기능 또는 구성요소를 요청하면 Vestas 엔지니어들은 일련의 공식적인 요구사항을 만듭니다. 요구사항을 기반으로, 한 그룹이 Simulink 및 Simulink Test™를 사용하여 새로운 기능을 검증하기 위해 사용될 테스트 케이스를 개발하고, 두 번째 그룹은 Simulink 및 Stateflow®에서 새로운 기능을 설계합니다.
이 두 번째 그룹의 엔지니어들은 폐루프 시뮬레이션을 위한 시스템 모델을 만들기 위해 발전소와의 연결 지점에서 전력망의 임피던스 특성과 동적 특성을 캡처하는 Simulink 모델과 제어 모델을 결합합니다. 엔지니어들은 다른 Vestas 그룹에서 독자적인 툴로 개발하여 DLL로 패키징하는 풍력 터빈 모델을 Simulink S-function을 사용하여 통합합니다.
엔지니어들은 이 시스템 모델을 사용하여 폐루프 시뮬레이션을 실행하고 MAAB(MathWorks Automotive Advisory Board) 가이드라인을 기반으로 하는 모델링 표준을 준수하는지 확인한 후 Git 리포지토리에 제어 모델을 체크인합니다. 모델 체크인을 수행하면 앞서 Simulink Test를 사용하여 개발된 테스트 케이스뿐만 아니라 전력 엔지니어가 만든 부가적인 시뮬레이션 기반 테스트와 추가적인 모델링 가이드라인 준수 검사를 실행하는 Jenkins 작업을 트리거합니다.
제어 모델이 모든 테스트와 검사를 통과하면 Jenkins가 Embedded Coder® 1를 호출하여 모델에서 C++ 코드를 생성합니다. 생성된 C++ 코드는 DLL로 컴파일되고, 이 DLL은 PSCAD에서 전체 발전소와 해당 제어 소프트웨어의 시뮬레이션을 실행하는 데 사용됩니다.
Vestas는 이러한 시뮬레이션을 사용하여 정상 조건에서 그리고 전압 강하, 진동 및 기타 교란이 있는 조건에서 전력망에 연결될 때 각각 발전소가 어떻게 작동할지를 송전 시스템 운영자에게 시연할 수 있습니다. 마지막으로, 생성된 코드는 타겟 산업 제어 시스템에서 테스트를 거친 후 프로덕션에 배포됩니다.
결과
- 신뢰성이 있고 문제 없는 코드 생성. “제어 시스템이 정상적으로 작동하지 않으면 벌금이 부과될 수 있습니다.” Nielsen의 설명입니다. “Simulink 및 Embedded Coder를 사용함으로써 우리는 생성한 코드를 신뢰할 수 있다는 사실을 금방 알 수 있었습니다. 실제로 아직 단 한 건의 문제도 발생하지 않았습니다.”
- 복수사업장 CI 워크플로 자동화. “전 세계에 걸쳐 수십 명의 엔지니어들이 동일한 모델에 대해 동시에 작업을 하며 이 과정에서 많은 병합이 이루어집니다." Nielsen의 설명입니다. "모델 기반 설계와 CI를 함께 사용하여 반복을 줄이고 테스트 공정을 자동화했습니다.”
- 하드웨어 종속 방지. “과거에는 PLC 플랫폼을 위한 사용자 지정 Structured Text를 작성하는 방식으로 제어기를 개발했으므로 해당 플랫폼에 대한 종속성이 높았습니다.” Nielsen의 설명입니다. “지금은 Simulink 모델에서 이식 가능한 C++ 코드를 생성할 수 있으므로 다른 산업용 제어 플랫폼을 유연하게 대안으로 사용할 수 있습니다.”
1 Jenkins 또는 기타 CI 시스템에서 Embedded Coder를 사용하려면 Client Access License가 필요할 수 있습니다.