deemesh
unified CNC interface
지원하는 CNC 장비 어디서나 같은 주소로 읽고 쓰는 인터페이스
현장에서는 같은 값이 서로 다른 통로 뒤에 있습니다. 어떤 제어기는 FOCAS2, 어떤 제어기는 OPC-UA, 또 어떤 제어기는 EZSocket으로 열려 있고, 프로토콜이 같다고 끝나는 것도 아닙니다. 둘 다 OPC-UA를 지원해도 데이터 모델이 달라서 축 위치를 담은 노드가 서로 다릅니다. 한 대를 붙이려면 그 통로와 주소 체계를 함께 익혀야 하고, 다음 장비에서 다시 시작하게 됩니다.
deemesh(디메시)는 그 위에 인터페이스 하나를 얹습니다. 제어기가 Fanuc이든 Siemens든 Mitsubishi Electric이든 같은 명령 구조로 축 좌표·알람·프로그램·공구 보정을 읽고, 쓰기를 지원하는 주소는 같은 구조로 씁니다. 주소 하나는 지원하는 어느 장비에서나 같은 것을 뜻하고, 이 차이는 그 아래에서 흡수됩니다.
이 명령 구조를 데이터 모델이라 부릅니다. 데이터 모델은 주소(address)와 필터(filter)로 이루어집니다. 무엇을 읽고 쓸지는 주소가 정하고, 그중 어느 것인지는 필터가 정합니다.
내 애플리케이션
브라우저 · 사용자 프로그램
deemesh-sdk
내 애플리케이션에 내장
deemesh-hub
단독 실행 서버
데이터 모델
주소 + 필터
Fanuc
FOCAS2
Siemens
OPC-UA
Mitsubishi Electric
EZSocket
값에서 주소 찾기
조작반에 보이는 값이 어느 주소인지 눌러서 확인하세요. 실제 HMI 화면을 옮겨 놓은 것으로, 값을 하나 고르면 그 값을 가져오는 주소와 필터가 그대로 나옵니다.
HMI 화면에서 주소 찾기채널 1의 X축(axis=1) 기계 좌표를 읽는 요청
READ /machine/channel/axis/machinePosition?machine=1&channel=1&axis=1주소
필터
주소는 모두 /machine으로 시작합니다. 데이터 모델의 뿌리가 장비 한 대라서, 노란색으로 표시한 machine 필터는 그 뿌리에서 어느 장비인지를 고르는 것입니다. 여러 장비를 함께 다루는 deemesh-hub에서 쓰고, deemesh-sdk에서는 필요 없습니다.
경로 중간의 channel·axis는 그대로 같은 이름의 필터가 됩니다. 주소만 보면 필요한 필터를 알 수 있습니다.
응답은 항상 같은 형식입니다
{"status":0,"value":123.456}명령 문법과 전체 주소 목록은 패키지 안 문서와 주소 카탈로그에 있습니다. 주소 카탈로그 열기
SDK와 HUB
같은 주소 체계를 두 가지 형태로 내놓습니다. 코드를 쓰지 않고 5분 만에 확인해 보려면 deemesh-hub(디메시 허브)입니다.
deemesh-sdk
응용에 내장
네이티브 라이브러리(.dll / .so)와 C 헤더입니다. 표준 C ABI라서 각 언어가 이미 가진 방식으로 그대로 부릅니다. C#은 P/Invoke, Python은 표준 라이브러리인 ctypes, Rust는 extern "C"를 씁니다. 설치할 래퍼가 없습니다.
이런 경우에 장비 통신을 자기 응용 안에 들여놓아야 할 때
deemesh-hub
단독 HTTP 서버 + 관리 화면
config.json에 장비 주소와 프로토콜을 적고 실행하면 됩니다. 브라우저로 관리 화면을 열면 그 장비가 내놓는 주소 전체가 트리로 보이고, 주소를 골라 그 자리에서 읽기(GET)와 쓰기(POST)를 실행해 볼 수 있습니다.
이런 경우에 코드를 쓰지 않고 HTTP로 다루고 싶을 때, 또는 먼저 확인해 보고 싶을 때

지원 범위
| 프로토콜 식별자 | 장비 |
|---|---|
| nc_focas2_fanuc | Fanuc CNC (FOCAS2: Windows·Linux, 이더넷 전용) |
| nc_opcua_siemens | Siemens SINUMERIK CNC (OPC-UA) |
| nc_ezsocket_mitsubishi | Mitsubishi Electric CNC (EZSocket: M800/M700 시리즈, 밀링·선반, Windows 전용) |
현재 지원하는 것은 이 세 가지이며, 프로토콜은 앞으로 추가됩니다.
장비 측 전제조건
내려받기 전에 확인하세요. 모두 deemesh가 제공할 수 있는 것이 아니고 deemesh의 설정도 아닙니다. 장비와 그 제조사 쪽에 있는 것입니다.
- Fanuc
- Fanuc의 FOCAS2 라이브러리가 필요합니다. Windows는 fwlib32.dll / fwlib64.dll, Linux는 libfocas64.so입니다. 이 파일들은 Fanuc 라이선스 대상이라 deemesh에 동봉되지 않습니다. Fanuc에서 별도로 입수해야 합니다.
- Siemens
- 장비에 OPC-UA 서버 옵션(SINUMERIK OPC-UA, 별도 구매 옵션)이 라이선스·활성화되어 있어야 합니다. 옵션이 없으면 연결되지 않습니다. 지원 기능은 SINUMERIK 840D sl로 테스트되었으며, 828D는 테스트가 제한적이라 일부 주소를 쓸 수 없을 수 있습니다.
- Mitsubishi Electric
- deemesh가 구동되는 Windows PC에 Mitsubishi Electric의 EZSocket(모델명 FCSB1224W000)이 설치되어 있어야 합니다. Mitsubishi Electric에서 별도로 구매·설치하며 deemesh에 동봉되지 않습니다. 장비의 제어기 시리즈는 system_type 설정에 적습니다.
다운로드
deemesh는 프리웨어입니다. SDK와 HUB는 버전을 각각 따로 매기므로 필요한 것의 최신 릴리스를 받으세요.
GitHub 릴리스 열기