Blog Logo 블로그 주인장 필명: 노모
필요 시 부담 없이 메일주세요 ^^ ↓
Contact Email
카테고리
분류 전체보기 (127)
이 블로그는... (2)
(0)
먹을거 (9)
게임 (17)
지름 (9)
여행 (1)
정보 (57)
사진 (1)

Firefox Quantum 업데이트 이후 많은 부가기능이 사용할 수 없게 되었는데, 그 중 하나가 'Roomy bookmarks toolbar' 이다. 이 부가기능은 북마크 바의 형태를 개인화 할 수 있는 많은 기능을 제공했는데, 북마크 간격, 아이콘 사용 여부, 아이콘 크기, 폰트 크기 등을 일일히 개인화 할 수 있어서 많이 애용했다.


최근 Firefox의 사용 불가된 부가기능을 대체할 수 있는 것을 찾던 도중, userChrome.css 파일에 css 를 작성하여 북마크바를 비롯한 브라우저의 여러 부분을 커스터마이징 할 수 있다는 것을 알게되었다. Firefox Quantum 이전부터 가능했었던듯.


나는 북마크 바에 많은 북마크를 담아놓고 쓰기 때문에 북마크 바에 한 번에 많은 북마크가 표시되길 원한다.

이를 위해 ① 내가 직접 커스텀한 userChrome.css 가 적용된 Firefox, ② 기본 Firefox, ③ 기본 Chrome 의 북마크바를 비교해보았다.



기본 Firefox에 비해 아이콘 사이즈를 줄였고, 폰트 크기를 조금 더 작게했고, 북마크 간 여백을 줄여 더 많은 북마크를 북마크 바에 담았다.



Firefox 에 userChrome.css 적용

아래에서는 Firefox 에서 userChrome.css 를 작성 · 적용 하여 북마크 바의 북마크 간격을 더욱 조밀하게 할 수 있는 방법을 정리해보았다.

userChrome.css 를 적용하기 위해서는 Firefox의 profile 폴더에 chrome 이라는 폴더를 만들고 userChrome.css 파일을 생성해주어야 한다.


1. 아래의 이미지와 같이, 우측 상단의 메뉴 버튼을 누른뒤 '도움말'-'문제 해결 정보...' 를 누른다.



2. 그러면 아래의 이미지와 같은 화면이 나타날 것이다. '프로필 폴더'의 '폴더 열기' 버튼을 누르면 윈도우 탐색기가 자동으로 열린다.



3. 해당 폴더에 chrome 이라는 폴더가 없다면 새 폴더를 만든 뒤, 폴더의 이름을 chrome 이라고 변경해준다.


4. 빈 텍스트 파일을 생성하고 파일의 이름과 확장자를 userChrome.css 으로 변경한다. 최종적으로 아래와 같이 된다.



5. 해당 파일을 노트패드, 메모장과 같은 텍스트 편집기로 연 뒤 아래의 내용을 붙여넣기 후 저장한다.

아래의 css 코드는 북마크 바 내의 북마크간 간격, 폰트 크기, 아이콘 크기를 내 취향에 맞게 커스텀 한 것이다.

#personal-bookmarks {
    margin-left:0 !important;
    padding-left:0 !important;
}

#personal-bookmarks .bookmark-item {
    /* 북마크 아이템 여백 조절 */
    padding:0 2px 0 2px !important;
    margin:0 0 0 2px !important;
    /* 북마크 폰트 사이즈를 12px 로 강제함 */
    font-size:12px !important;
}

#personal-bookmarks .toolbarbutton-icon {
    /* 아이콘의 가로, 세로 사이즈를 13px 로 강제함 */
    height: 13px !important;
    width: 13px !important;
    /* 북마크 아이콘 여백 조절 */
    padding:0 2px 0 0 !important;
    margin:0 !important;
}

6. Firefox 를 재시작 한다.


아래에 첨부한 파일은 위 내용과 동일한 파일이므로, 위 과정이 귀찮다면 아래의 파일을 다운받아서 생성한 chrome 폴더에 집어넣으면 된다.


userChrome.css


여기까지 하면 Firefox 의 북마크 바의 북마크 간격이 조밀해지는 것을 볼 수 있다.


북마크 바의 북마크 간격을 조절하는 것 외에 더욱 다양한 예시는 다음의 링크(https://www.userchrome.org/what-is-userchrome-css.html) 에서 볼 수 있다. 북마크 바를 여러 줄로 만들 수도 있고, 탭 버튼의 위치나 주소 표시줄의 위치를 바꾸고, 메뉴의 생김새와 간격을 개인화 할 수 있다.



Leave a comment

Userscript 를 이용해 커스텀 CSS를 적용하는 몇 가지 방법을 정리해보았다. Chrome의 Tampermonkey 확장기능과 Firefox의 Violentmonkey 확장기능을 기준으로 작성하였다.


1. GM_addStyle 함수의 사용

GM_addStyle 함수는 입력 인자로 적은 text 를 css 로 추가해주는 함수이다. 사용 전 메타 블록에 @grant GM_addStyle을 추가해주어야 한다. GM_addStyle 에 대한 설명은 다음의 링크를 참고 (https://sourceforge.net/p/greasemonkey/wiki/GM_addStyle/)


예시1

// ==UserScript==
// @name         MyUserscriptName
// @namespace    myNamespace
// @version      0.0.1
// @description  Description
// @author       You
// @include      *
// @grant        GM_addStyle
// ==/UserScript==

GM_addStyle(`
  @import url('https://fonts.googleapis.com/css?family=Noto+Sans+KR:400,900');
  body { font-family: 'Noto Sans KR', serif !important; font-weight:400 !important;}
`);

css의 import 규칙을 이용해 구글 웹폰트 적용을 위한 외부 css 파일을 불러오고, 해당 웹폰트를 적용하는 예시이다.


위의 예시에서 나름 유용한 부분은 GM_addStyle 함수를 이용할 때 ', " 가 아닌 ` 로 css 텍스트를 묶으면 줄바꿈이 자유로워 코드 작성이 매우 편해진다는 부분이다. ES6에 Template_literals 라고 새로 생긴 것이라고 하는데 어차피 UserScript 를 적용할 브라우저는 Chrome, Firefox 등의 최신 브라우저일 것이므로 마음껏 쓰고있다. 만약 ` 를 쓰지 않으면 아래와 같이 해주어야 한다.


예시2

// ==UserScript==
// @name         MyUserscriptName
// @namespace    myNamespace
// @version      0.0.1
// @description  Description
// @author       You
// @include      *
// @grant        GM_addStyle
// ==/UserScript==
/*jshint multistr: true */

GM_addStyle("\
  @import url('https://fonts.googleapis.com/css?family=Noto+Sans+KR:400,900');\
  body { font-family: 'Noto Sans KR', serif !important; font-weight:400 !important;}\
");

당연히 예시 1의 방법이 더 편하다.

만약 적용이 되지 않고 콘솔창에 GM_addStyle 이 존재하지 않는 함수라고 뜬다면 greasemonkey 버전 간 호환 문제일 가능성이 크다. 다른 확장기능을 사용하거나, 메타 블록에 아래의 두 줄을 추가하자.

// @require     https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
// @grant       GM.addStyle


다만 css 내에서 import 규칙을 사용하는 경우… 커스텀 CSS를 적용하려는 웹사이트는 당연히 내가 만든게 아닐 확률이 높고, 처음부터 css 의 import 규칙을 이용하려고 디자인된게 아니다보니 웹사이트에 따라 import 규칙이 종종 씹히는 경우가 있다. 이럴 때는 아래의 방법들을 사용하면 편하다.



2. @resource 규칙 사용하여 외부 css 파일 불러오기

메타 블록에 resource 규칙을 사용한다. resource 규칙을 이용하면 css 파일 뿐만 아니라 이미지 파일 등 다양한 외부 파일을 참고할 수 있다. resource 에 대한 설명은 다음의 링크를 참고(https://wiki.greasespot.net/Metadata_Block#.40resource). 


해당 경로에 있는 파일을 불러오기 위해 GM_getResourceText 와 같은 함수를 함께 사용해주어야 하며, 자세한 설명은 아래의 예시로 대체한다.


예시

// ==UserScript==
// @name         MyUserscriptName
// @namespace    myNamespace
// @version      0.0.1
// @description  Description
// @author       You
// @include      *
// @grant        GM_addStyle
// @grant        GM_getResourceText
// @resource     my_CSS    https://fonts.googleapis.com/css?family=Noto+Sans+KR:400,900
// ==/UserScript==

var my_FONT = GM_getResourceText('my_CSS');
GM_addStyle(my_FONT);
GM_addStyle("body {font-family: 'Noto Sans KR', serif; font-weight:400;}");

3. head 에 append 하기

head 에 스크립트를 append 하는 방법이다.


예시

// ==UserScript==
// @name         MyUserscriptName
// @namespace    myNamespace
// @version      0.0.1
// @description  Description
// @author       You
// @include      *
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
// ==/UserScript==

var cssText = `
  
  
`;

$('head').append(cssText); 

앞선 두 방법은 userscript 확장 기능의 종류나 업데이트에 따라 아주 간혹 적용이 안 되는 경우가 있었다. 하지만 이렇게 head에 스크립트를 바로 삽입하는 경우는 아직까지 실패해본 경험이 없다. 즉 확장기능/브라우저별 호환성이 가장 좋은 방법이라고 개인적으로 생각한다.


다만 run-at(https://wiki.greasespot.net/Metadata_Block#.40run-at) 을 무엇으로 선언하느냐, head에 스크립트를 삽입하는 코드를 어떤 위치에 선언하느냐($(document).ready 등)에 따라 앞선 두 방법보다 아주 미세하게 느린 느낌을 받았다. 경우에 따라 세가지 방법을 잘 조합해서 쓰면 된다.



그 외

$('body').css('fontSize','14px') 와 같은 방법으로도 가능. CSS를 적용할 요소가 많지 않을 때 쓸 수 있지만, 동적으로 생기는 요소의 경우 요소가 생긴 뒤에 이와 같은 코드가 실행되어야 한다는 제약이 있다.

Leave a comment

지난 2018년 6월 30일부터 7월 4일까지(원래 계획은 7월 6일까지였지만 중간에 귀국했다.) 일본 도쿄로 여행을 다녀왔다.

지금이 아니면 다시 언제 이런 여행을 갈 수 있을까 라는 생각에, 출발하기 2주 전 즉흥적으로 결정한 여행이었다.


여행 준비

여행 계획 짜기 - 각자 꼭 가고싶은 곳을 정해놓고, 나머지 일정은 상황에 맞춰 유동적으로 결정하기로 했다.

자세한 여행 일정은 추후 이어질 글에 소개.

항공편 예약 / 숙소 예약 / 여행자 보험 가입

투어팁스라는 웹사이트에서 세계 여러곳의 가이드북과 맵북을 제공하는데, 유용한 정보가 많으니 다운받아 스마트폰에 넣어가면 좋다.


출발 항공편

한국 인천-일본 도쿄(하네다) 여정의 피치항공 항공편을 이용하기로 했다.

22시 35분 출발 - 현지 0시 55분 도착인 일정으로, 일명 밤도깨비 항공편 이라고 불린다.

가격은 잡다한 비용을 포함해 1인당 15,854엔이다.

피치항공에 밤도깨비 항공편이라고 해도 예약을 늦게하다보니 종종 특가로 나오는 항공편만큼 저렴하지는 않았다.




밤도깨비 항공편을 고른 이유는 개인 일정상 당일 오후 6시에 이후에 떠날 수 밖에 없던 상황이기도 하고, 해당 항공편이 늦은 시간이라는 이유로 저렴한데다 아직 젊어서 충분히 해당 일정을 감당할 수 있을 거라는 생각 때문이었다.


그래도 다음에는 어지간하면 피치항공의 밤도깨비 항공편을 이용하지 않을거다. 이유는,

  1. 면세점에서 느긋하게 쇼핑할 수가 없다.
    피치항공은 탑승권 발부 시간이 정해져있고 타이트하다. 그래서 미리 출국 심사를 받을 수가 없다. 밤도깨비 항공편의 경우 탑승권을 받고 출국 심사를 마치면 거의 9시에 가까운 시간이 된다. 대부분의 면세점 매장들은 저녁 9시 30분에 닫으므로, 라운지에서 식사를 하거나 느긋하게 쇼핑하기가 어렵다. (인천공항 면세점의 일부 매장만 24시간 운영한다.) 사전에 인터넷 면세점을 이용하면 해결되는 문제이기는 하다.
  2. 이륙이 약 20분~30분 지연됐다. - 20분 늦게 착륙했다. ← 가장 큰 이유!! 
    피치항공이 자주 지연된다는 이야기는 들었지만 내가 탈 항공편이 지연될줄은 몰랐다. 다른 항공편이야 조금 지연되어도 공항을 빠져나가는데 전혀 문제가 없다. 하지만 밤도깨비 항공편의 경우 이륙이 조금만 지연되어도 일본 현지 공항을 빠져나가는 버스를 제 시간에 타지 못할 수 있고, 이로인해 계획했던 일정이 시작부터 꼬일 수가 있다. (혹은 비싼 비용을 지불하고 택시를 이용하여 공항을 빠져나가야 한다.)

돌아오는 항공편은 중간에 일정이 바뀌어서 급하게 진에어 항공편을 예약해 이용했는데 훨씬 자리가 넓었다. 또 진에어의 경우 간단한 간식을 주었는데 피치항공은 아무것도 없었다. 항공권 가격은 탑승 요일과 시간이 달랐기에 비교하기는 어렵다. (이러한 것들은 비행 시간이 얼마 되지 않는 만큼 내가 항공편을 선택할 때 중요한 기준이 되지는 않지만, 그래도 나름의 차이점이므로 적어봤다.)



하네다 공항-숙소 이동 계획

밤도깨비 비행기를 이용할 시 도착 당일 새벽에 숙박 or 즐길 수 있는 여러가지 액티비티를 미리 알아보아야 한다. 새벽 1시를 넘어가면 하네다 공항에서 도심까지 나가는 이동편이 택시, 일부 리무진 버스, 사전 예약한 대절 승합차와 같은 것 밖에 없을 정도로 이동편이 매우 제한적이다. 아무런 계획 없이 느긋하게 갔다가는 비싼 택시비를 내고 시내로 나가야 하거나 공항에 갇힐 수밖에 없다.


밤도깨비 항공편을 이용하는 탑승자들을 위해 피치항공 홈페이지에서 다양한 여행 플랜과 이동편의 정보를 제공하니 확인해보면 좋다.

https://www.flypeach.com/destination/haneda/tokyo_midnight_trip/kr/?www_pc_ko-kr_mini_banner_07



종합해보면 아래와 같은 플랜들이 있었다.

  1. 오오에도 온천으로 이동한다.
    온천욕을 즐기고 수면실에서 잠깐 잘 수 있다. 입장료는 인당 4천엔 수준. 식사는 온천 내 상가에서 가능하나 도착한 시간에 대부분의 상가는 폐점한다. 아침 식사 시간에 일부 매장이 오픈하므로 돈을 내고 조식을 먹을 수 있고, 오전 9시에 퇴실해야 한다. 내부가 이쁘고 깔끔하며, 입실 시 유카타로 갈아입어야 하는데 이쁘다. 이동을 위한 오오에도 온천행 버스는 하나투어에서 사전에 예약하는게 좋다. 비행기가 지연되는 특수한 경우 온천가는 버스를 못 탈 수도 있다고 한다.
  2. 헤이와지마 온천으로 이동한다.
    온천욕을 즐기고 수면실에서 잠깐 잘 수 있다. 무료 조식이 제공되고 퇴실은 오전 10시 까지이다. 표는 피치항공 기내에서 구매하는 것이 저렴하다. 기내에서 구매 시 버스 비용 포함 이용요금은 3500엔→3300엔으로 할인받아 이용할 수 있다. 항공기에서 내린 후 헤이와지마 온천행 버스를 타고 이동하게 되는데, 역시 비행기가 지연되면 못탈 수도 있다.
  3. 공항에서 노숙
  4. 시가지로 이동하여 관광 즐기기.
    공항 버스/사전에 대절한 승합차/택시를 이용하여 시가지로 이동하여 관광을 즐긴다. 이후 호텔 체크인이 가능한 시간까지 버틴 뒤 호텔에서 휴식.
  5. 하네다 공항 퍼스트 캐빈 캡슐 호텔에서 숙박한다.
    비용은 호텔 숙박 비용 인당 5만-7만원. 제1여객터미널까지 이동하는 택시비 1만-1만5천원 정도이다. 사전에 예약해야한다.
  6. 6/30에 체크인하는 조건으로 에어비엔비 이용하여 숙소 예약.
    사전에 예약하지 않으면 방이 없다. 새벽 입실이다보니 이전날 체크인하는 조건으로 예약하고, 늦게 체크인 가능한지를 확인해야 한다. 공항에서 픽업해주는 서비스를 제공하는 숙소도 있다고 한다.
  7. 6/30에 체크인하는 조건으로 호텔에 숙박하기.
    24시간 프런트 데스크를 운영하는 곳을 찾아 숙박하기. 역시 이전날 체크인하는 조건으로 예약하고, 사전에 늦게 체크인 할 것이라는 메시지를 호텔측에 남기는 것이 좋다.

동행자가 도착한 첫날은 쉬고싶어해서 공항 노숙같은 몸이 피곤한 일정은 고르지 않았다. 비행기가 지연될 수 있으므로 온천으로 이동하는 일정은 제외했는데 결론적으로 잘 한 선택이었다. 하네다 공항에 위치한 캡슐 호텔을 이용하거나, 에어비엔비를 이용해 숙박하려는 경우 미~리 예약을 해야한다. 2주 전에 예약하려고 하니 두 경우 모두 적절한 자리가 없었다.


최종적으로 공항에 도착하여 바로 24시간 프런트 데스크를 운영하는 호텔로 이동하는 일정을 계획했다.



다음편에 계속...



이 장소를 Daum지도에서 확인해보세요.
아시아 일본 | 도쿄
도움말 Daum 지도
Leave a comment

Firefox로 바이두 웹 등에서 파일 다운 시 이름 깨지는 문제 해결해주는 확장 기능

https://addons.mozilla.org/en-US/firefox/addon/download-filename-encoding/

Leave a comment

1D 툴과 Modelica language 맛보기

Posted 2018.10.07 17:26, Filed under: 정보/Modelica

Mass-Spring (MK) 시스템

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


출처: http://nomo.asia/338 [SU의 블로그]

아래는 다양한 방법으로 간단한 진동문제를 풀어보면서, (Modelica 언어 기반) 1D 해석 툴의 장점에 대해 알아보고자 한다.


문제

강성 계수 k, 댐핑 계수 c를 가지는 선형 스프링이 있다. 이 스프링이 초기에 변형이 되지 않은 상태에서, 한쪽 끝은 고정된 벽에, 한쪽 끝은 질량이 m인 강체에 연결되어 있다. 강체는 1D 운동을 한다고 가정하자. 초기 위치 x0, 초기 속도 v0 일 때 0초부터 10초까지 강체의 위치 x(t)를 구하여라. (m=10, c=10, k=100, 초기 위치 x0=0, 초기 속도 v0=1)



풀이

1. 이론적 풀이

가장 먼저 운동방정식을 세우자.



기계과 학부 2~3학년 때 배우는 아주 간단한 MCK System에 대한 자유진동문제이지만 손으로 풀어본지는 너무 오래되어서 책을 다시 펴보았다 -_-;; General Solution 만 적었고 유도 과정은 생략하였다.


Response of free vibration



wn : undamped natural frequency

wd : damped natural frequency



2. MATLAB language 을 이용한 풀이(이론적 풀이를 바탕으로)

위에서 이론적으로 유도한 수식을 모든 공대인에게 친숙한 MATLAB language 을 이용하여 계산해보자. 작성한 코드는 아래와 같다.


clear all
m = 10;
c = 10;
k = 100;
x0 = 0;
v0 = 1;

t0 = 0;
tf = 10;
step = 1000;

wn=sqrt(k/m);
zeta=c/(2*wn*m);
wd=wn*sqrt(1-zeta^2);
A=sqrt((v0+zeta*wn*x0)^2+(x0*wd)^2)/wd;
pi=atan((x0*wd)/(v0+zeta*wn*x0));

sol = zeros(step+1,2);
tstep=(tf-t0)/step;
sol(:,1) = t0:tstep:tf;

for i=1:1:step
    t=sol(i,1);
    sol(i,2) = A*exp(-zeta*wn*t)*sin(wd*t+pi);
end

plot(sol(:,1),sol(:,2))
xlabel('time');
ylabel('x(t)');


구한 응답은 아래와 같다.



위와 같은 풀이를 한 이유는, 만약 어떠한 시스템이 주어졌을 때, 이론적 풀이가 가능한 경우 MATLAB 등의 언어를 이용하여 문제를 풀 수 있다는 것을 보여주고자 한 것이다.



3. MATLAB Simulink 를 이용한 풀이

MATLAB Simulink 를 이용하면, 이론적 풀이 방법을 몰라도 운동방정식만 세울 줄 알면 문제를 풀 수 있다.

운동방정식을 가속도에 대해 정리하면 아래와 같다.



위 식을 바탕으로 한 MATLAB Simulink 시스템을 구성하면 문제를 풀 수 있다. 이 때, 폐루프를 어떻게 구성할지를 잘 생각해주어야 한다. 익숙한 사람은 쉬울 수 있으나, 그렇지 않은 사람은 시스템이 복잡할 때 어려움을 느낄 수도 있다.


실행한 결과는 아래와 같다.




이론과 동일한 결과를 얻었다.

즉, MATLAB Simulink 와 같은 프로그램을 이용하여 일종의 제어기를 구성하면 이론적 풀이 방법을 몰라도 문제를 풀 수 있다. 다만 제어기를 구성하는 것은 직접 해야한다.



4. Modelica language를 이용한 풀이

1D 툴을 이용한 풀이를 하기 전, 이해를 돕기 위하여 Modelica language를 이용한 풀이 방법에 대해 설명하고자 한다. Modelica language를 이용하여 동일한 문제를 풀기 위한 코드를 작성하면 아래와 같다. (혹시라도 Simscape language 를 본 적이 있는 사람이라면 비슷한 형태임을 알 수 있을 것이다.)
model example_1d_modelica
  Real m = 10;          // Mass
  Real c = 10;          // Damping coefficient
  Real k = 100;         // Spring coefficient
  Real x(start=0);      // Position (unknown)
  Real dx(start=1);     // Velocity (unknown)
  Real ddx;             // Acceleration (unknown)

equation
  m*ddx+c*dx+k*x=0;     // eq. 1 (from equation of motion)
  dx = der(x);          // eq. 2 (from pos.-velo. relation)
  ddx = der(dx);        // eq. 3 (from velo.-acc. relation)

end example_1d_modelica;


Modelica language 의 경우, 식들의 관계를 정의하여 미지수 개수만큼의 식을 만들면 자동으로 풀린다.

위의 코드에서 m, c, k 는 상수이다.

우리가 구하고 싶은 미지수는 세 개 x(pos), dx(velo.), ddx(acc.) 이다. 따라서 식을 세 개 만들어야 한다.

위의 Modelica code 에서 눈여겨봐야 할 부분은 equation 아래의 세 줄이다.

운동 방정식으로부터 식 1번을 얻는다.

위치를 미분하면 속도라는 단순한 관계식으로부터 식 2번을 얻는다. (der 은 미분한다는 의미이다)

속도를 미분하면 가속도이므로, 역시 간단하게 식 3번을 얻는다.


Modelica language 의 경우 좌우변의 구분이 따로 필요하지 않으므로 식 1번과 같이 적을 수 있다. (Modelica language 를 처음 공부할 때 어떤 블록에서 0=x''+x'+... 와 같은 equation이 있었는데, 좌변에 0이 있길래 도대체 이게 무엇인지 한참을 고민하다 결국 이해를 하지 못했었던 경험이 있다^^;;)


식 세 개, 미지수 세 개 이므로 풀 수 있다. 물론 푸는 것은 프로그램이 수치적인 기법을 이용하여 자동으로 해준다.


결과는 아래와 같다.



역시 동일한 결과를 얻었다.


Modelica language 를 이용한 풀이의 경우, 문제를 이론적으로 풀이할 줄 모르더라도, 운동방정식을 세울 줄 알고 미지수 만큼의 식을 만들어줄 수 있으면(보통 쉬운 편이다) 문제를 풀 수 있다.



5. Modelica language 툴 기반, 1D 모델링 기법을 이용한 풀이

사실 위에서 Modelica language 를 이용하여 풀이한 방법을 실제 사용자가 쓰는 경우는 숙련자가 아닌 이상 드물다(다만 대부분의 툴들이 수식입력기를 제공하고, 이를 통해 수식을 입력하면 자동으로 Modelica language를 기반으로한 모델을 생성해준다).


모든 Modelica language 기반 1D 소프트웨어는, 블록의 그림만 봐도 어떤 시스템인지를 알 수 있는, 간단하고 직관적인 스케마틱 모델링 방법을 제공한다(MATLAB Simscape 와 모델링 방식이 똑같다). 이 방법을 사용하면 주어진 문제를 아주 쉽고 직관적으로 푸는 것이 가능하다.


OpenModelica 라는 오픈소스 툴을 이용하여 같은 문제를 풀이해보고자 한다. 아래의 그림을 보자.



문제를 풀이하기 위한 스케마틱 모델링을 마친 상황이다. 블록의 모양만 봐도 어떤 시스템인지 대략 알 수 있고, 폐루프나 제어기를 구성하는 것은 필요없다.


툴은 블록을 드래그해서 생성할 때마다, 선(connect) 을 각 블록의 커넥터에 연결할 때 마다 Modelica language 를 기반으로 한 식을 자동으로 대신 세워준다. 전처리기가 해주는 역할은 딱 거기까지이다. 그 이후는 Modelica language 로 풀 때와 동일한 방식으로 문제가 풀린다.


결과는 아래와 같다.



Modelica language 를 직접 작성하여 푼 것과 블록을 이용한 모델링 방법의 결과는 완전히 동일하다.

1D 모델링을 이용한 방법의 경우에는 운동 방정식을 구성할 줄 몰라도, 문제를 이론적으로 풀 줄 몰라도, 제어기를 구성할 줄 몰라도 라이브러리를 활용하는 간단한 방법만 안다면 문제를 풀 수 있다.


무엇보다 다른 방법은 모델의 사이즈가 커지거나 복잡해지면 운동방정식을 도출하거나 코딩하는데 난이도가 급격하게 증가하는데 반해, 1D 모델링의 방법은 그런 과정이 필요 없으므로 모델의 배치만 잘 해준다면 아주 빠르고 직관적으로 모델링을 할 수 있다.


(참고로 1D 모델링 툴에서도 Gain, Sum, Integral 등 다양한 블록들을 제공하므로, MATLAB Simulink 에서 구성한 것과 동일한 폐루프를 구성하여 문제를 풀 수는 있다. 그렇지만 그렇게 문제를 풀 이유는 없다.)



6. 다물체 동역학 해석 프로그램 DAFUL 을 이용한 해석

위 풀이의 결과가 정말 맞는지 상용 다물체 동역학 해석툴인 DAFUL 을 이용하여 검증해보았다.


참고로 DAFUL 에는 인위 감쇠에 해당하는 Numerical damping 이란 것이 있으므로 결과에 의도하지 않은 감쇠효과가 작용할 수 있다. Numerical damping 은 원래 고주파 진동에 선택적으로 작용하여 해석 속도를 높이기 위한 용도지만, 그렇다고 저주파에 댐핑효과가 먹지 않는 것은 아니다. 단순히 크기만 달라지는 것이 아니라 위상도 일부 달라진다.


따라서 DAFUL을 이용하여 analytical 한 결과나 인위 감쇠가 없는 1D 툴과의 solution 을 비교할 때는 DAFUL 의 해석 Step size를 많이 낮추어 Numerical damping 의 효과를 감소시켜야 정확히 비교할 수 있다.




해석 결과



역시 동일한 결과를 얻었다.



정리

공학 문제를 풀기 위해서 어떤 방법이 제일 좋은가? 라는 질문에 어느 방법이 좋다, 나쁘다, 라고 하기에는 각각의 방법에 장단점이 있다. 자신의 연구실/회사가 기존에 사용하던 툴이 있다면, 해당 툴과의 관계도 생각해야한다. 자신의 문제에 대한 프로그램의 최적화 정도, 문제 풀이에 적합한 라이브러리 보유 여부 또한 중요하다.


1D 툴의 장점은 모델링 방법이 간단하고, 시간을 절약할 수 있으며, 직관적이며, 비록 라이브러리에 의존되기는 하지만, 전기, 전자, 유공압, 동역학 등 다양한 물리계를 한 프로그램 내에서 다룰 수 있고, 모델의 재사용성이 매우 높다는 점이다.


단점은 어떠한 문제를 푸는데 최적화된 다른 툴에 비해 동일한 모델을 구성하였을 때 해석 속도가 상대적으로 느릴 수 있으며, 시각화(Visualization)가 제한되고, 문제를 풀 수 있는 자유도에 한계가 있고, Geometry 를 반영하기 어렵고, 라이브러리에 대한 의존도가 높다는 점이다.


또한 요즘 3D 기반 상용툴은 시스템에 대한 이론을 제대로 이해하지 못한 사람도 작동 원리만 알면 해석을 할 수 있도록 쉬운 사용을 강조하지만 (FEM, BEAM 이론 등 구조물 변형에 대한 이론을 몰라도 구조해석을 할 수 있고, 오리피스, 파이프 유동 등 유체역학에 대해 몰라도 유동해석을 할 수 있다), 1D 툴은 등가화를 해야하는 경우가 많아서 모델링 할 시스템에 관한 이론을 충분히 이해하고 있어야 모델링과 해석이 가능한 편이다. 대신 1D 툴의 경우 상용 툴을 기준으로 많은 예제 모델을 보유, 제공하니 예제 모델을 적당히 변형&조합해서 쓰면 된다.


종합하면 1D 툴은 초기 설계 단계에서 저자유도 모델을 구성하고, 다양한 설계인자를 바꿔가며 설계방법론을 적용, 설계를 개선하고 설계 인자에 대한 영향도 평가를 하기 좋은 툴이다.


그리고 Modelica 언어의 장점은 오픈소스 라는 점이다. 물론 Modelica 를 기반으로 한 다양한 상용 툴도 존재하지만, OpenModelica 라는 오픈소스 툴은 1D 툴의 사용법을 익히기 충분한 툴이다. 누구나 재미있게 가지고 놀 수 있다.


'정보 > Modelica' 카테고리의 다른 글

1D 툴과 Modelica language 맛보기  (1) 2018.10.07
인과적 언어와 비인과적 언어  (0) 2017.11.24
Modelica Language 강좌  (1) 2017.07.09
  1. # emma rose 2018.11.22 02:49 신고 Delete Reply

    빠른 답변을 원하시거나, 도움이 필요하신 경우 블로그 우측 상단의 이메일로 연락주시길 바랍니다. 티스토리에 로그인 후 댓글을 남기실 경우 답글이 달렸을 때 알람을 받으실 수 있습니다.

Leave a comment
≪ Previous : 1 : 2 : 3 : 4 : 5 : 6 : ··· : 26 : Next ≫