[python] Handling AASX file with python / READ

songmoana·2024년 2월 1일

How to handle AASX file with python (Asset Administration Shell)

  • Title : Python을 활용한 AASX 파일 리딩 및 JSON 형태 반환
  • Package : basyx-python-sdk (for AAS v/3/)
  • package : pyi40aas

1. basyx 패키지 install

$pip install basyx-python-sdk

2. Adapter class 생성 및 필요한 method 구현

import json as js
from io import BytesIO
from fastapi import HTTPException

from basyx.aas import model
from basyx.aas.adapter import aasx, json

from config import logger

class AASXAdapter:

    def read_aasx(self, aasx_file):
        new_object_store: model.DictObjectStore[model.Identifiable] = (model.DictObjectStore()) # for adding elements
        new_file_store = aasx.DictSupplementaryFileContainer()

        # Read aasx file
        try:
            with aasx.AASXReader(BytesIO(aasx_file)) as f:
                f.read_into(object_store=new_object_store, file_store=new_file_store)
        except Exception as e:
            logger.error(e)
            raise HTTPException(status_code=501, detail="Invalid AASX File") # custom exception

        # Transform to json
        data = json.object_store_to_json(new_object_store)
        data = js.loads(data)
        return data

Error

  1. basyx README 에 있는 튜토리얼대로 AASX 파일을 생성하여 테스트했을 때는 문제가 없었으나 이전에 AASX explorer로 생성된 파일을 읽는데 origin-relations 관련 에러 발생
# 기존 explorer로 생성된 파일
http://www.admin-shell.io/aasx/relationships/aasx-origin
http://www.admin-shell.io/aas/2/0

# 튜토리얼 따라 생성한 파일
http://admin-shell.io/aasx/relationships/aasx-origin
https://admin-shell.io/aas/3/0 (버전으로 짐작)
  1. 두 파일의 .rels파일을 비교해봤을 때 url 형식과 전차이가 나는 것을 확인할 수 있었다.
    -> 파일을 직접 수정하여 url 형식을 임시로 변경하여 파일을 열었으나 버전 차이로 인한 에러가 발생.
    -> basyx 패키지 이전에 상용되었던 pyi40aas 사용하기로 결정.

1. git clone pyi40aas package

$git clone https://git.rwth-aachen.de/acplt/pyi40aas.git

2. 패키지 커스텀
필요한 json 구조에 맞춰 내부 코드 수정

  • read_aas_xml_file_into method 하위의 함수 대부분 커스텀 필요
  • assetAdministrationShell, submodel contents 만 필요하므로 필요없는 부분은 효율을 위해 주석처리

3. 정상 작동 확인

profile
옹모아나 - 개발백과

0개의 댓글