VEXPLOR AAS Studio는 AASX 작성 · 검사부터 설비 값 수집과 MES · ERP · CMMS 연동까지 웹 화면 하나로 처리합니다
VEXPLOR AAS Studio handles AASX authoring, validation, live collection and MES, ERP and CMMS integration in one web app
설비 AASX를 올리면 규칙 43종이 어긋난 곳을 짚고, 고칠 수 있는 지적은 미리 보고 한 번에 고칩니다. 같은 서버가 IDTA Part 2 REST API로 AAS를 내주고, OPC UA · Modbus TCP · MQTT로 설비 값을 모으고, MES · ERP · CMMS에 사건(이벤트)과 설비 정보를 보냅니다.
Upload a machine's AASX: 43 rules show what breaks, and the fixable findings are repaired in one step after a preview. The same server serves the AAS over the IDTA Part 2 REST API, collects machine values over OPC UA, Modbus TCP and MQTT, and sends events and equipment data to MES, ERP and CMMS.
제조 IT · OT 엔지니어, MES · ERP · CMMS 연동 담당, AAS 제출을 준비하는 기업이 직접 설치해 쓰는 오픈소스입니다.
Built for manufacturing IT/OT engineers, MES · ERP · CMMS integrators and teams preparing AAS submissions — self-hosted.
체험 서버 상태를 확인하는 중입니다.Checking the trial server.데모 계정 demo / 0629 — 새 창으로 열립니다. 체험 서버는 시연용입니다.Demo account demo / 0629 — opens in a new tab. The trial server is for demonstration.체험 서버가 지금 응답하지 않습니다. 「시작하기」 절의 Docker 명령으로 내 컴퓨터에서 실행할 수 있습니다.The trial server is not responding right now. The Docker commands in "Get started" run it on your own machine.
43
검사 규칙lint rules
19
자동 고치기 규칙auto-fix rules
V3.0
AAS 메타모델AAS metamodel
3
수집 규약 OPC UA · Modbus TCP · MQTTcollection protocols: OPC UA · Modbus TCP · MQTT
왜 만들었나Why
AAS 표준은 갖춰졌습니다. VEXPLOR AAS Studio는 그 표준을 공장 설비에 연결합니다
The AAS standard is in place. VEXPLOR AAS Studio connects it to the machines on the floor
현장에서 부딪히는 일What people hit
근거Evidence
여기서는Here
이미 돌고 있는 설비 · PLC에 붙이기Attaching to machines and PLCs that already run
근거EvidenceAAS 10년 연구 리뷰(IEEE Access, 2025)가 기존 시스템 통합을 도입을 늦추는 핵심 과제로 꼽음A review of ten years of AAS research (IEEE Access, 2025) names legacy integration as a key challenge holding back adoption
여기서는HereAAS 안의 AID대로 OPC UA · Modbus TCP · MQTT에서 값을 모읍니다. 공장 PC에 두는 원격 수집기는 밖으로만 보내고, PLC 프로그램은 고치지 않습니다Collects from OPC UA, Modbus TCP and MQTT per the AID in the AAS. The remote collector on a factory PC sends outward only, and PLC programs are not changed
AAS를 손으로 만드는 부담Building an AAS by hand
근거Evidence도구 없이 만들면 모든 단계가 수작업이라는 연구(Sensors, 2021) · 기존 공장 도입이 제한적인 주된 이유로 수작업과 전문지식을 든 연구(Fraunhofer IOSB-INA, 2025)Without tooling every step is manual (Sensors, 2021); manual effort and expertise are the main reason brownfield adoption is limited (Fraunhofer IOSB-INA, 2025)
여기서는Here다 채운 견본에서 출발하고, 규칙 43종이 짚고 19종은 자동으로 고칩니다Start from a filled sample; 43 rules point out problems and 19 fix them automatically
일마다 나뉜 도구One tool per job
근거Evidence공개 도구는 편집기 · 서버 · 라이브러리로 나뉘고, 현장 값 수집은 설정 파일로 직접 맞춤(각 도구 공개 문서)Open tools split into editors, servers and libraries; field collection is mapped by hand in config files (each tool's public docs)
여기서는Here열기 · 고치기 · 검사 · 표준 API · 값 수집 · OPC UA 내주기를 브라우저 한 화면에서Open, edit, check, standard API, value collection and OPC UA publishing in one browser screen
AAS를 실제 라인에 적용한 사례(Bosch Rexroth 등)도 있습니다. 그 사례들도 기계를 바꿀 때마다 통합에 몇 달이 걸린다고 적습니다. 근거와 원문 목록(2026-10-18 확인): 왜 만들었나 — 근거. 위 도구 · 기관과 제휴하거나 그 소스를 쓴 것이 아닙니다.
There are real line deployments (Bosch Rexroth and others). They too report that integration can take months whenever machines change. Evidence and sources (checked 2026-10-18): Why it exists — evidence. Not affiliated with, or derived from, the tools and bodies above.
표준 검증을 모두 통과한 AASX도 제출처 검증기의 사업 규칙(semanticId 허용 목록 · 필수 서브모델 · 패키지 구조)에서 떨어질 수 있습니다. VEXPLOR AAS Studio는 그 규칙을 제출 전에 미리 검사합니다. 최종 합격 판정은 제출처 검증기가 합니다.
An AASX can pass every standard check and still fail the receiving validator's business rules (semantic-ID allow-lists, mandatory submodels, package structure). VEXPLOR AAS Studio checks those rules before you submit. The receiving validator remains the only authority on acceptance.
기능Features
VEXPLOR AAS Studio의 기능 6가지 — 그림은 모두 실제 화면입니다
Six things VEXPLOR AAS Studio does — every picture is a real screen
01작성 · 트리Author & tree
트리 화면은 AASX 구조를 펼쳐 보여 주고, 사용자는 그 화면에서 바로 값을 고칩니다
The tree shows the whole AASX, and you edit values in place
AASX(JSON · XML)를 열어 AAS → 서브모델 → 요소 순서로 봅니다Open AASX (JSON or XML) and browse AAS → submodel → element
값 · 요소 · 서브모델 · ConceptDescription을 고치고, 값 표나 CSV 설비 대장으로 여러 값을 한 번에 채웁니다Edit values, elements, submodels and concept descriptions; fill many values at once from a value table or a CSV equipment list
한 번에 되돌리고, 서브모델을 지난 시점으로 복원합니다One-step undo, and restore a submodel to an earlier point
파일이 없으면 「견본으로 시작하기」가 다 채운 설비 1종과 공정 구성을 엽니다No file yet? "Start with a sample" opens a fully filled machine and a process structure
02검사 · 자동 고치기Findings & auto-fix
규칙 43종이 어긋난 곳을 짚고, 고치기 전에 바뀔 값을 먼저 보여 줍니다
43 rules point to what breaks and show each change before it applies
패키지 구조(L1) · 메타모델 제약(L2) · 제출처 사업 규칙(L3)으로 나눠 검사합니다Three layers: package structure (L1), metamodel constraints (L2), submission business rules (L3)
위반 · 경고 · 참고로 나누고, 왜 틀렸는지와 고치는 법을 함께 적습니다Errors, warnings and notes, each with the reason and how to fix it
고칠 수 있는 지적(규칙 19종)은 전 / 후를 보고 체크한 것만 반영합니다. 바꾼 내용은 이관 대장에 남습니다Fixable findings (19 rules) show before / after; only the checked ones apply, and every relocation is recorded
03현장 값 수집Live collection
서버가 AAS 안의 AID대로 설비 값을 모으고, 설비마다 하루 상태를 그립니다
The server collects machine values by the AID inside the AAS and draws each machine's day
OPC UA · Modbus TCP · MQTT — 주소는 AAS 안의 AID(IDTA 02017) 서브모델이 정합니다OPC UA, Modbus TCP and MQTT, addressed by the AID submodel (IDTA 02017) inside the AAS
값마다 받는 중 · 끊김 · 값 없음을 보여 줍니다Each value shows whether it is live, stale or missing
설비마다 하루 상태 막대(가동 · 정지 · 알람)를 그립니다Each machine gets a daily status bar (running · stopped · alarm)
실물 PLC가 없으면 도구 안의 가상 PLC로 바로 시험합니다No PLC at hand? Test with the virtual PLC built into the tool
막대는 가상 PLC(시뮬레이션)의 하루입니다. 이 페이지를 위해 채운 시연 기록이며 실제 설비 데이터가 아닙니다.The bar shows a day of the virtual PLC (simulation) — demo data filled in for this page, not a real machine.
04표준 APIStandard API
다른 시스템은 IDTA Part 2 REST API로 이 서버의 AAS를 읽어 갑니다
Other systems read the AAS held here through the IDTA Part 2 REST API
globalAssetId로 셸을 찾고, 레지스트리 디스크립터에 적힌 주소로 서브모델을 읽습니다Look up a shell by globalAssetId, then read submodels at the endpoint in its registry descriptor
node scripts/part2-coverage.mjs가 명세의 OpenAPI와 구현을 대조해 정확한 범위를 출력합니다node scripts/part2-coverage.mjs compares the implementation with the specification's OpenAPI files
# 셸 찾기 (globalAssetId)
GET /api/v3.0/lookup/shells?assetIds=<base64url>
# 파일별 Part 2 기준 주소
GET /packages/{packageId}/api/v3.0/shells
GET /packages/{packageId}/api/v3.0/submodels/{id}# find the shell (globalAssetId)
GET /api/v3.0/lookup/shells?assetIds=<base64url>
# Part 2 base path per file
GET /packages/{packageId}/api/v3.0/shells
GET /packages/{packageId}/api/v3.0/submodels/{id}
05제출 번들 · 결과서Bundle & report
공정 묶음은 제출용 레퍼런스 번들과 검증 결과서로 나갑니다
A process grouping exports as a submission bundle and a validation report
회사 → 라인 → 공정 → 설비 → 부품 계층으로 설비를 묶습니다Group machines as company → line → process → equipment → part
레퍼런스 번들 ZIP 하나에 모델 · 첨부 · 사전 점검 결과를 담고, bundle-manifest.json에 파일마다 SHA256을 적습니다One reference-bundle ZIP with models, attachments and pre-check results; bundle-manifest.json records a SHA256 per file
검증 결과서는 HTML이라 인쇄하면 그대로 PDF가 됩니다The validation report is HTML and prints straight to PDF
New in 2.0: MES, ERP and CMMS receive equipment events and master data
읽어 가는 주소(pull feed) — 모든 변경과 가동 사건을 CloudEvents 1.0으로 순서대로 내주고, 원하는 번호부터 다시 읽을 수 있습니다Pull feed — every model change and runtime event as CloudEvents 1.0, totally ordered, resumable from any cursor
서명 웹훅 — HMAC-SHA256 서명, 실패하면 다시 보내고 끝내 실패한 건은 따로 남깁니다Signed webhooks — HMAC-SHA256 signatures, retries, and dead letters kept for replay
MQTT — 같은 사건을 토픽으로 보내고, 설비마다 현재 상태를 retained로 둡니다MQTT — the same events on topics, with each machine's current state retained
판정 규칙 — 수집한 값으로 가동 상태 · 알람 · 계수기 · 한계값 사건을 만듭니다Runtime rules — state, alarm, counter and threshold events from collected values
내보내기 — 설비 마스터 · BOM · 공정 계층 · 보전 계획 · 문서 목록을 JSON · CSV로Exports — equipment master, BOM, hierarchy, maintenance plan and documents as JSON or CSV
외부 번호 — ERP · MES · CMMS 번호는 AASX 안이 아니라 옆에 따로 보관합니다External references — ERP, MES and CMMS numbers are kept next to the AASX, not inside it
연동은 INTEGRATIONS=on으로 켭니다(기본은 꺼짐). PostgreSQL에서 구독을 만들려면 AAS_SECRET_KEY도 필요합니다. 체험 서버에서는 항상 꺼져 있습니다.
Integrations are off by default — turn them on with INTEGRATIONS=on. Creating subscriptions on PostgreSQL also needs AAS_SECRET_KEY. They are always off on the trial server.
VEXPLOR AAS Studio는 2.3 ~ 2.7에서 원격 수집 · 원클릭 연결 · 공장 서버 설치 · 태그 힌트를 더했습니다
VEXPLOR AAS Studio 2.3 – 2.7 add remote collection, one-click connect, a factory server install and tag hints
기능Feature
판Release
내용Detail
원격 수집기 원클릭 연결One-click remote collector
판Release2.7.0
내용Detail설정 → 원격 수집기 → 「+ 수집기 연결」 — 서버 주소와 읽을 목록을 확인하고 단추 하나를 누르면 공장 Linux PC에 붙여 넣을 명령 한 줄이 나옵니다. 그 한 줄이 내려받기 · 해시 대조 · 설치 · 등록 · 승인까지 끝내고, 화면은 공장 PC가 붙는 순간 「받는 중」으로 바뀝니다Settings → Remote collectors → "+ Connect a collector": check the server address and the read list, press one button, and you get one line to paste on the factory Linux PC. It downloads, checks the hash, installs, registers and approves; the screen turns to "Receiving" the moment the PC connects
VEXPLOR Edge 별도 오픈소스VEXPLOR Edge, its own open source
판Release2.7.0
내용Detail원격 수집기가 자기 저장소 waceinc/vexplor-edge(Apache-2.0)에서 자기 판 1.0.0으로 나옵니다The remote collector ships from its own repository waceinc/vexplor-edge (Apache-2.0) with its own version 1.0.0
수집 칸 자동 갱신Collect pane refreshes itself
판Release2.7.0
내용Detail수집 연결이 있는 파일을 열어 두면 값이 10초마다 들어오고, 원격 수집기 값이 오는 동안 「받는 중」으로 나옵니다With a file that has a collection link open, values come in every 10 s and show "Receiving" while a remote collector sends them
Logic Studio 연계 안내Logic Studio guide
판Release2.6.0
내용Detail앱의 「? 도움말 → VEXPLOR Logic Studio에서 쓰기」와 안내 문서(국 · 영)가 생겼습니다. 검사를 마친 AASX를 내려받아 Logic Studio Cloud 설비 화면에 끌어 놓으면 설비 대장이 됩니다 — 설치도 변환도 없습니다In-app help (? Help → Use it in VEXPLOR Logic Studio) and a guide in English and Korean: download the checked AASX, drop it on Logic Studio Cloud's equipment screen, and it becomes the equipment register — nothing to install or convert
태그 힌트Tag hints
판Release2.5.0
내용Detail읽을 목록의 태그마다 그 값이 속한 모델 요소의 semanticId, 제안 역할(가동 상태 · 카운터 · 알람 · 계량 · 설비 상태 · 품질), 같은 파일 TechnicalData의 한계값(예: SettingForce에 MaxSettingForce 80)이 붙습니다. 받는 쪽이 역할과 SPC 규격 한계를 미리 채우고 사람이 확인합니다. 힌트가 바뀌어도 현장에 다시 승인을 묻지 않습니다Each read-list tag names the semanticId of the model element its value belongs to, a suggested role (state · counter · alarm · meter · condition · quality) and limits from the same file's TechnicalData (e.g. MaxSettingForce 80 for SettingForce). A receiver pre-fills roles and SPC limits and a person confirms. Changed hints never ask a site to approve again
원격 수집기 (VEXPLOR Edge)Remote collector (VEXPLOR Edge)
판Release2.3.0
내용Detail공장 PC에는 수집 프로그램 하나만 둡니다. PLC는 읽기만 하고 값은 밖으로만 보냅니다. Linux x64 · arm64 (Windows는 추후)One collection program on the factory PC. It only reads the PLC and only sends values out. Linux x64 · arm64 (Windows later)
바뀐 값만 보내기Send changes only
판Release2.4.0
내용DetailOPC UA 구독과 불감대(deadband)로 변한 값만 보냅니다. 태그 6개 · 1초 · 5분 실측 283 KB → 88 KBOPC UA subscriptions with a deadband send only values that changed. Measured 6 tags · 1 s · 5 min: 283 KB → 88 KB
끊긴 동안 쌓인 값Values from an outage
판Release2.3.0
내용Detail통신이 끊긴 동안 읽은 값을 오래된 것부터 다시 보내고, 보내지 못한 묶음은 최대 30일(설정값) 보관합니다Values read while the link was down are sent oldest first; unsent batches are kept up to 30 days (configurable)
공장 서버 한 번에 설치Factory server install
판Release2.4.0
내용DetailLinux 서버 1대에 AAS Studio · 데이터베이스 · 원격 수집기를 명령 하나로 설치하고, 재부팅 뒤 스스로 다시 올라옵니다. 설치 묶음은 공개 릴리스가 아니라 직접 전달합니다One command puts AAS Studio, the database and the remote collector on one Linux server, and it comes back after a reboot. Install bundles are handed over directly, not attached to public releases
수집값 압축 · 집계Compression · aggregates
판Release2.4.0
내용DetailTimescaleDB Community Edition에서 7일 지난 값을 압축하고 1분 · 1시간 집계를 만듭니다. 태그 1,000개 · 1초 · 1시간 실측 1,099 MB → 50 MBWith TimescaleDB Community Edition, values older than 7 days are compressed and 1-minute · 1-hour aggregates are built. Measured 1,000 tags · 1 s · 1 h: 1,099 MB → 50 MB
서버 없이 읽을 목록 만들기Read list without a server
판Release2.3.0
내용Detail라이브러리 @aas/bundle의 aidReadList가 AASX 안의 AID에서 수집기가 읽을 태그 목록을 바로 만듭니다aidReadList in the @aas/bundle library turns the AID inside an AASX into the tag list a collector reads
여기서 만들고 검사한 AASX는 VEXPLOR Logic Studio Cloud 설비 화면에 끌어 놓으면 설비 대장이 됩니다 — 기종(Type)과 설비(Instance)를 나눠 받고, 같은 파일을 다시 놓으면 바뀌는 것이 없습니다. 원격 수집기가 Logic Studio Cloud로도 값을 보내는 연결은 준비 중이며 지금은 제공하지 않습니다.
AASX files authored and checked here become the equipment register when dropped on the equipment screen of VEXPLOR Logic Studio Cloud — Type and Instance files are imported separately, and dropping the same file again changes nothing. Sending live values from the remote collector to Logic Studio Cloud is in preparation and not offered yet.
Docker Compose 또는 Node.js 22 이상에서 소스로 실행합니다. 외부 클라우드가 필요 없습니다.Docker Compose, or from source on Node.js 22 or later. No external cloud is involved.
저장소Storage
공유 운영은 PostgreSQL, 혼자 쓸 때는 데이터 폴더 하나에 저장합니다.PostgreSQL for shared use, or a single data folder for one person.
계정 · 역할Accounts & roles
관리자 · 편집자 · 열람자. 누가 무엇을 고쳤는지 변경 이력에 남습니다.Admin, editor, viewer — with an audit trail of who changed what.
어디에서 열리나Who can reach it
소스로 실행하고 계정도 API 키도 없으면 127.0.0.1에서만 열립니다. Docker 예시는 .env.example의 AAS_ALLOW_OPEN=1 때문에 같은 망에 열리므로, 띄운 직후 첫 관리자를 만들고 앞단에 HTTPS를 둡니다.Run from source with neither accounts nor an API key and it listens on 127.0.0.1 only. The Docker example opens it to your network (AAS_ALLOW_OPEN=1 in .env.example), so create the first administrator right after start and put HTTPS in front.
OPC UA 서버OPC UA server
기본은 꺼짐. 켜면 웹 계정으로 로그인하고 Sign · SignAndEncrypt만 받습니다. 익명 접속은 없고, 클라이언트 인증서는 관리자가 한 번 신뢰해 줍니다.Off by default. When on, clients sign in with a web account over Sign or SignAndEncrypt; no anonymous sessions, and an administrator trusts each client certificate once.
개인 작업 공간Private workspaces
AAS_WORKSPACE=private로 사람마다 자기가 올린 파일만 봅니다.AAS_WORKSPACE=private shows each person only what they uploaded.
로그인 보호Sign-in protection
비밀번호는 scrypt 해시만 저장하고, 5회 실패하면 5분 잠급니다. 쿠키는 HttpOnly · SameSite=Strict입니다.Only scrypt hashes are stored; five failures lock the account for five minutes. Cookies are HttpOnly and SameSite=Strict.
밖으로 나가는 연결Outbound connections
웹훅 · MQTT는 루프백 · 메타데이터 주소를 거부하고, 사설망은 허용 목록에 적은 곳만 갑니다. 서명 비밀값은 AES-256-GCM으로 봉합니다.Webhooks and MQTT refuse loopback and metadata addresses; private networks only when listed. Signing secrets are sealed with AES-256-GCM.
한계Limits
VEXPLOR AAS Studio가 하지 않는 일과 알려진 제약
What VEXPLOR AAS Studio does not do, and known limitations
합격 판정은 제출처 검증기가 합니다. 이 도구는 제출 전 사전 점검입니다.The receiving validator decides acceptance. This tool is a pre-check.
MES · ERP · CMMS에 쓰지 않고, 설비에 명령하지 않고, OEE 숫자를 계산하지 않습니다(재료가 되는 시간과 계수만 줍니다).It never writes into MES, ERP or CMMS, never commands machines and never computes an OEE number (it gives the time and counter inputs).
기본은 공유입니다. 로그인한 사람은 같은 파일을 봅니다. 개인 모드에서도 관리자와 API 키는 모든 파일을 봅니다.Shared by default: everyone who signs in sees the same files. Even in private mode, administrators and API keys see everything.
세션은 서버 메모리에 있습니다. 서버를 다시 켜면 모두 로그아웃되고, 서버 1대를 전제로 합니다.Sessions live in server memory: a restart signs everyone out, and one server instance is assumed.
메일을 보내지 않습니다. 비밀번호를 잊으면 관리자가 다시 정합니다.No e-mail is sent. If someone forgets a password, an administrator resets it.
연동 구독은 서버 전체 범위입니다. 한 고객의 자료가 다른 시스템에 가면 안 될 때는 구독을 파일 단위로 좁힙니다.Integration subscriptions cover the whole server; narrow a subscription to its files when one customer's data must not reach another system.
AAS 메타모델은 V3.0에 고정돼 있고 3.1로 자동 전환하지 않습니다. Part 2 API는 위 범위만 구현돼 있습니다.The AAS metamodel is pinned to V3.0 and not auto-upgraded to 3.1. The Part 2 API covers the operations listed above.
git clone https://github.com/waceinc/vexplor-aas.git && cd vexplor-aas
cp .env.example .env
sed -i.bak "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$(openssl rand -hex 16)/" .env
docker compose up -d --build
셋째 줄은 비어 있는 데이터베이스 비밀번호(POSTGRES_PASSWORD)를 무작위 값으로 채웁니다. 이 값이 비어 있으면 Docker가 시작하지 않습니다.
Line three fills the empty database password (POSTGRES_PASSWORD) with a random value — Docker refuses to start while it is empty.
브라우저에서 http://localhost:8080을 열고 설정 → 첫 관리자 만들기로 들어갑니다. 이 서버는 같은 망에 열려 있어(AAS_ALLOW_OPEN=1) 첫 관리자를 만들 때 설치 코드를 묻습니다. 코드는 docker compose logs app | grep "설치 코드"로 찾습니다. 첫 관리자를 만들기 전까지는 같은 망의 누구나 이 서버를 열 수 있습니다.
Open http://localhost:8080 and go to Settings → Create the first administrator. The server is open to your network (AAS_ALLOW_OPEN=1), so it asks for a setup code, printed in the startup log: docker compose logs app | grep "설치 코드" (or grep "setup code" with AAS_LANG=en in .env). Until the first administrator exists, anyone on the network can open it.
체험 서버 상태를 확인하는 중입니다.Checking the trial server.데모 계정 demo / 0629 — 새 창으로 열립니다. 체험 서버는 시연용입니다.Demo account demo / 0629 — opens in a new tab. The trial server is for demonstration.체험 서버가 지금 응답하지 않습니다. 이 절의 Docker 명령으로 내 컴퓨터에서 실행할 수 있습니다.The trial server is not responding right now. Use the Docker commands in this section to run it on your own machine.
데모는 로그인할 때마다 빈 작업 공간이 따로 생기고, 한동안 쓰지 않은 파일은 지워집니다. 운영자가 볼 수 있으므로 기밀 자료는 올리지 마십시오.
Each demo sign-in gets its own empty workspace, and idle files are deleted. The operator can see them — keep confidential data on your own server.