deemesh

unified CNC interface

지원하는 CNC 장비 어디서나 같은 주소로 읽고 쓰는 인터페이스

현장에서는 같은 값이 서로 다른 통로 뒤에 있습니다. 어떤 제어기는 FOCAS2, 어떤 제어기는 OPC-UA, 또 어떤 제어기는 EZSocket으로 열려 있고, 프로토콜이 같다고 끝나는 것도 아닙니다. 둘 다 OPC-UA를 지원해도 데이터 모델이 달라서 축 위치를 담은 노드가 서로 다릅니다. 한 대를 붙이려면 그 통로와 주소 체계를 함께 익혀야 하고, 다음 장비에서 다시 시작하게 됩니다.

deemesh(디메시)는 그 위에 인터페이스 하나를 얹습니다. 제어기가 Fanuc이든 Siemens든 Mitsubishi Electric이든 같은 명령 구조로 축 좌표·알람·프로그램·공구 보정을 읽고, 쓰기를 지원하는 주소는 같은 구조로 씁니다. 주소 하나는 지원하는 어느 장비에서나 같은 것을 뜻하고, 이 차이는 그 아래에서 흡수됩니다.

이 명령 구조를 데이터 모델이라 부릅니다. 데이터 모델은 주소(address)와 필터(filter)로 이루어집니다. 무엇을 읽고 쓸지는 주소가 정하고, 그중 어느 것인지는 필터가 정합니다.

내 애플리케이션

브라우저 · 사용자 프로그램

직접 호출
HTTP

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로 다루고 싶을 때, 또는 먼저 확인해 보고 싶을 때

deemesh-hub의 관리 화면. 왼쪽 트리에서 주소를 고르면 오른쪽에 타입·읽기 쓰기 지원 여부·필터와 설명이 나오고, 그 자리에서 GET을 눌러 값을 읽어 볼 수 있습니다.
deemesh-hub의 관리 화면. 왼쪽 트리에서 주소를 고르면 오른쪽에 타입·읽기 쓰기 지원 여부·필터와 설명이 나오고, 그 자리에서 GET을 눌러 값을 읽어 볼 수 있습니다.

지원 범위

프로토콜 식별자장비
nc_focas2_fanucFanuc CNC (FOCAS2: Windows·Linux, 이더넷 전용)
nc_opcua_siemensSiemens SINUMERIK CNC (OPC-UA)
nc_ezsocket_mitsubishiMitsubishi 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 릴리스 열기

FANUC, FOCAS, SIEMENS, SINUMERIK, Mitsubishi Electric, EZSocket, OPC-UA를 비롯해 여기에 적힌 제품·회사 이름은 각 소유자의 상표 또는 등록상표이며, 통신 대상 장비와 인터페이스를 가리키기 위해서만 썼습니다. deemesh는 독립된 프로젝트로 이들 회사와 제휴·후원·보증 관계가 없으며, 이들의 소프트웨어를 배포하지 않습니다.