NOMO.asia

Modelica Language 강좌

Posted 2017. 7. 9. 04:10, Filed under: 엔지니어링/Modelica

Modelica 언어를 기반으로 하는 Dymola, SimulationX 같은 툴을 사용할 때 워낙 GUI가 잘 되어있어서 Modelica 언어 자체를 다룰 일은 별로 없다. 그러나 예전에 필요에 의해 Modelica language를 기반으로 하는 툴의 단순한 사용 뿐만 아니라 랭귀지 자체에 대하여 나름 깊고 넓게 공부할 수 밖에 없었던 적이 있다. 구글에서 영문 키워드로 검색해도 원하는 결과가 잘 나오지 않아서, 따로 알려주는 사람도 없이 Modelica standard library를 뜯어보고 Try and Error 로 고생해가며 배웠다. 그걸 그대로 썩히기는 아쉬워서 시간 날 때마다 이 블로그에 정리해보고자 한다.


이 글은 목차 겸 개요에 해당하며, 꾸준히 추가 및 수정될 예정이었으나....

Last update : 2019-04-15

1. Modelica language?

  • 오픈소스(Open Source) - 무료이고 모든 구조가 공개되어 있다.
  • 객체 지향(Object-Oriented) - 하나의 모델이 다시 수 많은 세부 모델, 함수, 틀 등 포함하고 있다. 코드의 재사용성이 뛰어나고 상속이 잘 활용되고 유지보수가 쉽다.
  • 하이 레벨(High Level) - 사람이 사용하는 언어에 가까울 수록 고급 언어, 하이레벨 언어라고 표현한다. 공학 문제를 풀이할 때 수식의 형태를 그대로 사용할 수 있고, 별도의 메모리 관리가 필요없으며, 배열 연산 등 다양한 편의기능을 제공한다는 점에서 하이레벨 언어이다.
  • 비인과적(Acausal) 언어 - [인과적 언어와 비인과적 언어]

Simulation program based on Modelica language

  • 개인적 툴 선호도: Dymola>>>>SimulationX>>MapleSim>>>OpenModelica
  • 언급된 모든 툴은 모델리카 언어를 기반으로 함.
  • 하지만 각 툴간 라이브러리는 사실상 호환이 되지 않는다고 보는 것이 편하다.
    예) 다른 블록과 연결 불가능 한 자체 라이브러리 사용 시
         DLL 파일 연동 시 (각 툴마다 연동 방법이 다르므로 오류 발생)
         기능 확장을 위해 Modelica 언어가 아닌 자체적으로 추가한 코드 사용 (SimulationX iti_parameter, Maplesim prove 등)
  • 심지어 같은 툴 내에서도 버전 차에 의해 호환이 되지 않는 경우도 많.다.
    예) 버전업이 되면서 문법 체크가 엄격해져 기존에 사용하던 라이브러리가 사용 불가
         의존 관계에 있는 (기본) 라이브러리가 상위 버전에서 변경되어 호환 불가

2. OpenModelica

  • GUI 형태로 된 Modelica 언어 기반 오픈소스 해석도구
  • 장점: (GUI 형태 모델링 ↔ Modelica 코드 직접 수정)이 자유롭다.
            무료!
  • 단점: 3D Visualization이 매우 불편함 --> 최근에 많이 개선되었지만, 상용툴에 비하면 부족하다.
            불안정 - 알 수 없는 원인으로 프로그램이 종료되거나 모델링한 파일이 날아가는 경우가 자주 발생
  • 1D 툴을 별도의 비용 지불 없이 체험해보고 싶은 사람에게 좋다.


예제 모델에 대한 설명은 주로 OpenModelica 를 통해 진행할 예정이다.

툴 자체의 완성도는 떨어지지만 코드의 직접 수정이 편해서 Modelica language 자체를 이해하기 좋다.


3. OpenModelica(1D Tool) 맛보기

Mass-Damper-Spring (MCK) 시스템

  • Analytical 해석
    • Dynamics 이론를 바탕으로 한 수식 및 결과
  • OpenModelica Signal 이용한 해석
    • 각 Signal 블록 설명 및 모델링
    • Postprocessor 다루는 법
    • 결과 확인
  • OpenModelica 1D Mechanical block 이용한 해석
    • 1D Mechanical 블록 설명 및 모델링
    • 결과 확인
  • OpenModelica MBD 이용한 해석
    • MBD 블록 설명 및 모델링
    • 결과 확인
    • 3D Visualization 방법
  • 동역학 해석툴 이용한 검증
    • 결과 확인

Modelica code 이용한 MK 시스템 해석

  • 기본 Modelica code 구조 설명
  • MK 시스템 모델링

Modelica code 이용한 수학 문제 풀이

  • 배열 다루기
  • function 과 model 의 차이
  • for, while
  • 기본 수학 함수 설명
  • 수학문제 풀이 및 결과 검증

Subsystem 만들기

  • 블록 선택하여 Subsystem 구성하기
  • 파라미터 설정
  • 입출력 인터페이스 설정
  • 아이콘 설정
  • 그 외

4. Modelica code 분석

  • OpenModelica Signal 블록 사용 시 생성되는 Modelica code 분석
    • 상속
    • in, out connector
  • OpenModelica 1D Mechanical 블록 사용 시 생성되는 Modelica code 분석
    • flow
    • connector
  • OpenModelica MBD 블록 사용 시 생성되는 Modelica code 분석
    • connector

5. Modelica library 구조 분석

  • Signal block 구조
  • 1D Mechanical 구조
  • MBD 구조
  • + Planar Mechanics

그 외(챕터 구상 필요)

기구학 예제 - 4절링크, 슬라이더 크랭크 모델링 및 검증

자동제어 - 인버티드 실린더 모델링 및 검증

PID


MBD 부싱 모델링 및 검증

OpenModelica 퍼포먼스 확인

모델링 방법에 따른 퍼포먼스 확인(Full code vs Block modeling)


유압해석


라이브러리 로드하기

라이브러리 구조

라이브러리 만들기

사용자 편의를 위한 각종 트릭


솔버 설정

디버그 설정


C file 연동

DLL 연동

C file export

FMI

Simulink 연동