deemesh

unified CNC interface

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

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

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

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

내 애플리케이션

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

직접 호출
HTTP

deemesh-sdk

내 애플리케이션에 내장

deemesh-hub

단독 실행 서버

데이터 모델

주소 + 필터

Fanuc

FOCAS2

Siemens

OPC-UA

Mitsubishi Electric

EZSocket

Heidenhain

HEIDENHAIN DNC

두 길 모두 같은 데이터 모델로 모이고, 통로와 주소 체계의 차이는 그 아래에서 흡수됩니다.

값에서 주소 찾기

조작반에 보이는 값이 어느 주소인지 눌러서 확인하세요. 실제 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 서버 + 관리 화면

실행하면 기본 설정으로 바로 뜹니다. 브라우저로 관리 화면을 열고 처음 실행 때 만들어진 관리 코드로 로그인해 장비의 IP와 프로토콜을 더하면 됩니다. 주소 카탈로그 화면에는 지원하는 주소 전체가 어느 프로토콜에서 읽고 쓰는지와 함께 트리로 나오고, 주소를 골라 그 자리에서 읽기(GET)를 실행해 볼 수 있습니다. 쓰기(POST)는 장비마다 켜야 열리며 처음에는 꺼져 있습니다. Windows에서는 서비스로 설치하는 설치 프로그램도 제공합니다.

이런 경우에 코드를 쓰지 않고 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 전용)
nc_dnc_heidenhainHeidenhain CNC (HEIDENHAIN DNC: TNC7·TNC 640·TNC 620·TNC 320·TNC 128, Windows 전용)

현재 지원하는 것은 이 네 가지이며, 프로토콜은 앞으로 추가됩니다. 같은 주소라도 제어기에 따라 읽기·쓰기 지원이 다를 수 있어, 주소 카탈로그에 주소마다 어느 프로토콜에서 되는지 적혀 있습니다.

장비 측 전제조건

내려받기 전에 확인하세요. 모두 deemesh가 제공할 수 있는 것이 아니고 deemesh의 설정도 아닙니다. 장비와 그 제조사 쪽에 있는 것입니다.

Fanuc
Fanuc의 FOCAS2 라이브러리가 필요합니다. Windows는 fwlib32.dll / fwlib64.dll(제품에 따라 FOCAS32.dll / FOCAS64.dll), Linux는 64비트 라이브러리(예: libfwlib64.so.1.0.5, 받은 파일 이름은 다를 수 있음)입니다. 이 파일들은 Fanuc 라이선스 대상이라 deemesh에 동봉되지 않습니다. Fanuc에서 별도로 입수해야 합니다. 라이브러리에 든 함수도 제품마다 달라서, 없는 함수가 필요한 쓰기는 실패하고 오류 문구에 그 함수 이름이 나옵니다.
Siemens
장비에 OPC-UA 서버 옵션(SINUMERIK OPC-UA, 별도 구매 옵션)이 라이선스·활성화되어 있어야 합니다. 옵션이 없으면 연결되지 않습니다. 지원 기능은 SINUMERIK 840D sl로 테스트되었으며, 828D는 테스트하지 않아 일부 주소를 쓸 수 없을 수 있습니다.
Mitsubishi Electric
deemesh가 구동되는 Windows PC에 Mitsubishi Electric의 EZSocket(모델명 FCSB1224W100)이 설치되어 있어야 합니다. Mitsubishi Electric에서 별도로 구매·설치하며 deemesh에 동봉되지 않습니다. 장비의 제어기 시리즈는 system_type 설정에 적습니다.
Heidenhain
deemesh가 구동되는 Windows PC에 HEIDENHAIN DNC가 설치되어 있어야 하고, 제어기에는 소프트웨어 옵션 18(HEIDENHAIN DNC)이 켜져 있어야 합니다. HEIDENHAIN DNC는 Heidenhain에서 별도로 입수하며 deemesh에 동봉되지 않습니다. 설정에는 제어기 기종(system_type)을 적거나, PC의 HEIDENHAIN DNC에 등록한 연결 이름(connection_name)을 적습니다. 암호화된 연결은 등록한 연결로만 됩니다. 등록하지 않으면 제어기 포트 19003으로 암호화 없이 연결하고, 제어기가 이벤트를 알리러 PC로 되짚어 들어오므로 PC 방화벽이 그 연결을 허용해야 합니다. TNC7 프로그래밍 스테이션(시뮬레이터)으로 테스트되었습니다.

다운로드

deemesh는 프리웨어입니다. SDK와 HUB는 버전을 각각 따로 매기므로 필요한 것의 최신 릴리스를 받으세요.

GitHub 릴리스 열기

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