MIDAS Gen API with Python

MIDAS Gen API with Python

기본적인 사용법을 익히는 차원에서 Guide의 내용은 모두 따라하기 해 보시길 권장합니다.

 

이 문서는 Python에서 MIDAS Gen API를 작동시키기 위한 메뉴얼입니다.

1. Python 개발환경 설정

1.1 설치파일

설치파일은 파이썬 공식 웹사이트에서 내려받습니다.

Welcome to Python.org

Python 공식 웹사이트

* 윈도우 이외에 OS 환경을 위한 여러 설치파일을 확인할 수 있습니다.

 

1.2 파이썬 설치

Python을 설치합니다.

Python 설치화면

아래 편집기는 더 편리한 Python 개발환경을 제공합니다.

Recommended Code Editors for Python

(본 설명서는 Visual Studio Code를 사용하여 작성되었습니다.)

 

1.3 추가 모듈 설치

Python에 Request 모듈을 설치 해야, MIDAS/Gen API를 제어할 수 있습니다.

Request 모듈은 다음과 같이 설치가 가능합니다.

 

Request 모듈 설치(Visiul Studio Code)

프로그램 하단의 터미널 창이 보이지 않는다면, Menu-Terminal-New Terminal 을 이용하여, Terminal 창을 실행합니다. 아래 텍스트를 터미널 창에 붙여 넣은 후, Enter를 눌러줍니다.

 

py -3 -m pip install requests

 

Request 모듈 설치 완료

 

2. Python을 이용하여 MIDAS/Gen API 작동해보기

간단한 예제를 통해 동작 방식을 살펴봅니다.

예제를 위한 Gen 해석파일은 아래 test.mgb를 참고하세요.

2.1 MIDAS/Gen API 실행하기

API와 통신하기 위한 Gen은 다음과 같이 실행 가능합니다.

Gen API 실행하기
  • Python Code

import subprocess import time p = subprocess.Popen([r"C:\\midas\\API\\MidasGen.exe", "/API"]) ## wait until midas api process ready time.sleep(10)

MIDAS/Gen 실행 파일의 경로는 각자 사용자에 맞게 수정하여 사용합니다.

파일 경로에 \\사용함에 주의!!

 

2.2 MIDAS/Gen API 문서 열기

MIDAS/Gen을 실행 시킨 후 이미 작성된 문서를 여는 동작을 실행해보겠습니다.

문서 열기
  • Python Code

import requests Gen_API_URL = "http://127.0.0.1:10024" ## DOC.OPEN requests.post(Gen_API_URL + "/doc/open", json={"Argument":"C:\\midas\\api\\model\\test.mgb"})

MIDAS/Gen 파일의 경로는 각자 사용자에 맞게 수정하여 사용합니다.

URL 주소는 API 를 통한 MIDAS/Gen 실행시 동작하는 APIServer.exe에서 확인할 수 있습니다.

APIServer 창

 

2.3 MIDAS/Gen API 해석 실행

불러온 MIDAS/Gen 파일의 해석을 실행해 보겠습니다.

해석 실행
  • Python Code

import requests Gen_API_URL = "http://127.0.0.1:10024" ## DOC.ANAL requests.post(Gen_API_URL + "/doc/anal", json={})

 

3. 작동 가능한 명령어

3.1 DOC 명령어

DOC 명령어는 document 관련 명령어로 주로 문서를 생성/열기/닫기 등의 동작을 제어합니다.

 

  • 문서 열기 : “/doc/open”

import requests #String = MGB file path (ex : "C:\\Python\\Example.mgb") requests.post("http://127.0.0.1:10024/doc/open", json={"Argument":String})

 

  • 새 문서 열기 : “/doc/new”

import requests requests.post("http://127.0.0.1:10024/doc/new", json={})

 

  • 문서 닫기 : “/doc/close”

import requests requests.post("http://127.0.0.1:10024/doc/close", json={})

 

  • 해석 실행 : “/doc/anal”

import requests requests.post("http://127.0.0.1:10024/doc/anal", json={})

 

  • 문서 저장 : “/doc/save”

import requests requests.post("http://127.0.0.1:10024/doc/save", json={})

 

  • 새 이름으로 저장 : “/doc/saveas”

import requests #String = MGB file path (ex : "C:\\Python\\Example.mgb") requests.post("http://127.0.0.1:10024/doc/saveas", json={"Argument":String})

 

  • Json 데이터 Import : “/doc/import”

import requests #String = Json file path (ex : "C:\\Python\\Example.json") requests.post("http://127.0.0.1:10024/doc/import", json={"Argument":String})

 

  • Json 데이터 Export : “/doc/export”

import requests #String = Json file path (ex : "C:\\Python\\Example.json") requests.post("http://127.0.0.1:10024/doc/export", json={"Argument":String})

 

3.2 DB 명령어

DB 명령어는 데이터 이름에 대한 요청입니다. 각각의 데이터 이름에 대하여 GET/POST/PUT/DELETE 메소드가 구현되어 있습니다.

 

  • GET DB Method : 열려진 문서의 데이터를 조회합니다.

 

예제1: 다음 예제 코드는 열어진 문서로부터 모든 Node 정보를 불러와 , 특정한 Node 정보를 출력합니다.

GET DB method 예제1(Node)
import requests import json Gen_API_URL = "http://127.0.0.1:10024" ## GET /DB/NODE (All Node) get_data=requests.get(Gen_API_URL + "/db/node").text get_data=json.loads(get_data) # Input Node Number which you want to know print(get_data['NODE']['2'])

 

예제2: 다음 예제 코드는 열어진 문서로부터 특정한 Node 번호의 정보만 불러옵니다.

GET DB method 예제2 (Node)
import requests Gen_API_URL = "http://127.0.0.1:10024" ## GET /DB/NODE get_data=requests.get(Gen_API_URL + "/db/node/3").text print(get_data)

 

 

  • POST DB Method : 열려진 문서의 데이터를 추가합니다. 이미 Key가 있을 경우 실패합니다.

 

다음 예제는 열어진 문서에 특정 Node를 추가하고, Node 정보를 불러와 출력하는 예제입니다. (999번 노드 추가)

POST DB method 예제 (Node)
import requests import json Gen_API_URL = "http://127.0.0.1:10024" ## POST /DB/NODE requests.post(Gen_API_URL + "/db/node",json={"Assign":{"999":{"X":0,"Y":10.0,"Z":0}}}) ## GET /DB/NODE get_data=requests.get(Gen_API_URL + "/db/node").text get_data=json.loads(get_data) print(get_data['NODE']['999'])

 

 

  • PUT DB Method : 열려진 문서의 데이터를 변경합니다. 존재하지 않는 key에 대한 요청 시 실패합니다.

 

다음 예제는 특정 노드의 좌표를 변경하는 예제입니다. (999번 노드 좌표 변경)

PUT DB method 예제 (Node)
import requests Gen_API_URL = "http://127.0.0.1:10024" ## GET /DB/NODE get_data=requests.get(Gen_API_URL + "/db/node/999").text print(get_data) ## PUT /DB/NODE requests.put(Gen_API_URL + "/db/node",json={"Assign":{"999":{"X":0,"Y":20.0,"Z":0}}}) ## GET /DB/NODE get_data=requests.get(Gen_API_URL + "/db/node/999").text print(get_data)

 

 

  • DELETE DB Method : 열려진 문서의 데이터를 삭제합니다. 존재하지 않는 Key에 대한 요청 시 실패합니다.

 

예제1 : 특정 Node를 삭제하고, 삭제된 Node의 정보를 출력합니다. (999번 노드 삭제)

DELETE DB method 예제1 (Node)
import requests Gen_API_URL = "http://127.0.0.1:10024" ## DELETE /DB/NODE Delete_Data=requests.delete(Gen_API_URL + "/db/node/999").text print(Delete_Data)

 

 

3.3 POST 명령어

POST는 명령어는 해석 실행 후 후처리 관련한 명령어입니다.

 

  • 반드시 해석이 수행된 이후에 실행 가능합니다.

  • 결과 테이블 요청 : “/post/table”

예제1 : 다음 예제는 열려진 문서에서 해석 결과를 가져와 Json 포맷으로 저장하는 예제입니다.

POST method 실행 예제1 (Table)
저장된 결과값 (Json 형식)
import requests Gen_API_URL = "http://127.0.0.1:10024" ## DOC.ANAL requests.post(Gen_API_URL + "/doc/anal", json={}) ## POST /POST/TABLE requests.post(Gen_API_URL + "/post/table",json={ "Argument": { "EXPORT_PATH": "C:\\midas\\api\\model\\Beamforce.json", "TABLE_TYPE": "beam force", "UNIT": { "FORCE": "KN", "DIST": "M", "HEAT": "CAL", "TEMP": "C" }, "NODE_ELEMS": { "TO": "1 to 10" }, "LOAD_CASE_NAMES": [ "DL(ST)", "LL(ST)", "Ex(ST)", "Ey(ST)" ], "PARTS": [ "Part I", "Part J" ] } })

 

 

3.4 VIEW 명령어

VIEW 명령어는 이미지에 관련한 명령어입니다.

 

  • Diagram 요청 : “/view/capture”

Diagram을 요청하고, 원하는 경로에 저장하는 예제입니다.

POST VIEW method 예제 (Beam Shear Diagram iamge Capture)
import requests import json Gen_API_URL = "http://127.0.0.1:10024" ## POST /VIEW/CAPTURE requests.post(Gen_API_URL + "/view/capture",json = { "Argument":{ "UFIG_LIST": [ { "IS_PRE_MODE": false, "VIEW_HORIZONTAL": 45, "VIEW_VERTICAL": 30, "POST_DISP_OPT": { "PRINT_VALUE": true, "VALUE_DECIMAL_PT": 1, "PRINT_LEGEND": true, "LEGEND_DECIMAL_PT": 1 }, "OUTPUT_PATH": "C:\\midas\\api\\model\\Shear-Z.jpg", "LOADCASE_MINMAX": "ALL", "LOADCASE_TYPE": "ST", "LOADCASE_NAME": "DL", "CURRENTMODE": 6, "RESULT_COMP": 2, } ] } })