Node-RED
Node-RED란?
Node-RED는 시각적 편집기를 통해 데이터를 처리하고, 장치 간의 연결을 쉽게 설정할 수 있는 오픈 소스 툴입니다. 주로 IoT(사물 인터넷) 애플리케이션에서 사용되며, 다양한 프로토콜과 API를 연결하여 복잡한 데이터 흐름을 손쉽게 구성할 수 있습니다.
주요 장점
- 시각적 편집기: 코딩 없이 드래그 앤 드롭 방식으로 데이터 흐름을 구성할 수 있습니다.
- 다양한 노드 지원: HTTP, MQTT, Modbus 등 다양한 프로토콜을 지원하는 노드가 제공됩니다.
- 확장성: 커뮤니티에서 제공하는 다양한 노드를 추가로 설치하여 기능을 확장할 수 있습니다.
- 실시간 데이터 처리: 실시간으로 데이터를 수집하고 처리하여 즉각적인 반응을 제공할 수 있습니다.
Nzdata에서는 Node-RED가 기본으로 탑재되어 제공되며, Node-RED가 지원하는 다양한 산업용 프로토콜을 통해 손쉽게 데이터 수집할 수 있습니다.
지원 프로토콜
Node-RED는 산업 자동화 및 통신을 위한 강력한 플랫폼으로, 기본적으로 Modbus, OPC UA, Ethernet/IP, Melsec, RTDE, S7, FINS와 같은 주요 프로토콜을 지원합니다. 이러한 프로토콜은 Node-RED에 기본적으로 탑재되어 배포되며, 사용자는 손쉽게 다양한 장비와의 통신을 설정할 수 있습니다. 또한, 다른 프로토콜이나 추가 기능이 필요한 경우에도 다양한 노드 패키지를 설치하여 확장할 수 있어, Node-RED의 유연성을 최대한 활용할 수 있습니다.
Modbus
- Modbus는 산업 자동화에서 널리 사용되는 통신 프로토콜로, 원래 PLC(Programmable Logic Controller)와 같은 산업용 장치 간의 데이터 교환을 위해 개발되었습니다. Modbus는 주로 직렬 통신 방식(RS-232, RS-485)과 이더넷(TCP/IP)을 통해 사용됩니다. Modbus는 마스터-슬레이브 또는 클라이언트-서버 모델을 사용하여 데이터를 주고받습니다.
OPC UA
- OPC UA (Open Platform Communications Unified Architecture)는 플랫폼 독립적이고 확장 가능한 산업용 통신 프로토콜입니다. 이 프로토콜은 제조 장비, 엔터프라이즈 관리 시스템, 데이터 분석 도구 등 다양한 시스템 간의 데이터 교환을 지원합니다. OPC UA는 보안이 강화된 상 태에서 데이터를 모델링하고 전송할 수 있어, 현대적인 스마트 공장이나 IoT(사물인터넷) 환경에서 널리 사용됩니다.
Ethernet/IP
- Ethernet/IP (EtherNet/Industrial Protocol)는 CIP(Common Industrial Protocol) 표준에 기반한 산업용 네트워킹 프로토콜입니다. 이 프로토콜은 Allen-Bradley와 Rockwell Automation에서 개발된 PLC와 같은 장비와의 통신에 자주 사용됩니다. Ethernet/IP는 이더넷을 사용하여 실시간 데이터 전송을 수행하며, 고속 통신과 여러 장치 간의 네트워크 동기화에 적합합니다.
MELSEC
- MELSEC는 Mitsubishi Electric에서 개발한 PLC(프로그래머블 로직 컨트롤러) 시리즈와 통신하기 위해 사용되는 프로토콜입니다. MELSEC 프로토콜은 다양한 버전으로 제공되며, 각기 다른 통신 방법(직렬 통신, 이더넷 등)을 지원합니다. Mitsubishi PLC는 다양한 산업 자동화 환경에서 사용되며, MELSEC 프로토콜은 이러한 장비와 데이터를 교환하기 위해 필수적입니다.
RTDE
- RTDE (Real-Time Data Exchange)는 Universal Robot(유니버설 로봇)에서 제공하는 실시간 데이터 교환 프로토콜입니다. RTDE는 로봇의 상태, 센서 데이터, 제어 명령 등을 실시간으로 전송하고 수신하는 데 사용됩니다. 이 프로토콜은 Universal Robot의 협동 로봇(cobot)과의 통합을 쉽게 하여 로봇 작업을 실시간으로 모니터링하고 제어할 수 있게 합니다.
S7
- S7는 Siemens의 PLC 제품군과 통신하기 위한 프로토콜입니다. 이 프로토콜은 주로 Siemens S7 시리즈 PLC와의 통신에 사용되며, S7 프로토콜을 통해 PLC의 메모리 영역에 접근하고 데이터를 읽거나 쓸 수 있습니다. 이 프로토콜은 산업 자동화 시스템에서 널리 사용되며, Node-RED와 같은 플랫폼에서 Siemens 장비와의 통합을 용이하게 합니다.
FINS
- FINS (Factory Interface Network Service)는 OMRON의 산업용 장비와 통신하기 위한 프로토콜입니다. 이 프로토콜은 OMRON PLC 및 기타 제어 장치 간의 데이터 전송을 위해 사용됩니다. FINS는 주로 공장 자동화 및 제어 시스템에서 사용되며, 직렬 통신 및 이더넷 기반의 네트워킹을 지원합니다. 이를 통해 OMRON 장비와의 원활한 데이터 교환이 가능합니다.
기타
- Node-RED는 다양한 프로토콜을 지원하며, 사용자가 필요한 프로토콜을 추가로 설치하여 사용할 수 있습니다. 이를 통해 다양한 산업용 장비와의 통신을 설정하고 데이터를 처리할 수 있습니다. 추가적인 프로토콜에 대한 정보는 Node-RED 공식 웹사이트나 커뮤니티를 통해 확인할 수 있습니다. 또한, 추가적인 도움이 필요할 경우 잉클 기술 지원팀에 문의할 수 있습니다.
Node-RED 사용 방법
도구 > 수집 > Node-RED 웹사이트 링크를 클릭하여 Node-RED 웹사이트에 접속할 수 있습니다.
이 섹션에서는 Node-RED의 기본 사용 방법과 Modbus 예제를 통해 실습할 수
있는 방법을 설명합니다.
1. Node-RED 인터페이스 이해하기
Node-RED의 인터페이스는 다음과 같습니다:
- 노드 팔레트 (좌측): 사용 가능한 노드 목록을 표시합니다.
- 작업 공간 (중앙): 노드를 배치하고 흐름을 구성하는 공간입니다.
- 정보 및 디버그창 (우측): 선택한 노드에 대한 정보 및 로그를 표시합니다.
2. 노드 추가하기
- 노드 팔레트에서 원하는 노드를 드래그하여 작업 공간에 배치합니다.
- 노드를 클릭하여 세부 설정을 합니다.
3. 노드 연결하기
- 노드의 포트를 클릭하여 다른 노드의 포트로 드래그하면 노드 간에 연결선을 생성할 수 있습니다.
- 흐름의 시작점부터 끝점까지 노드를 연결하여 데이터를 처리하는 과정을 구성합니다.
4. 노드 설정하기
- 각 노드를 더블 클릭하여 설정 창을 엽니다.
- 필요한 설정 값을 입력하고 저장 버튼을 클릭합니다.
5. 흐름 배포하기
- 모든 노드와 연결이 완료되면 우측 상단의 배포하기 버튼을 클릭하여 흐름을 배포합니다.
Modbus 예제
1. Modbus-read 노드
- Modbus-read 노드: Modbus 프로토콜을 통해 데이터를 수신 합니다. (주의 : function node와 연결시 우측 상단 접점과 연결 합니다.)
2. function 노드
- function 노드: 수신한 Modbus 데이터에 timestamp, 데이터 이름 설정 등을 하여 Nzdata에 전달 할 수 있는 형태로 변환 합니다.
- 속성 > 코드: function 노드에서는 javascript 코드로 데이터를 수정 변경 할 수 있는 환경을 제공 합니다. 아래 예제 코드를 활용 하여 데이터 이름 정도의 변경 만으로 Nzdata에 바로 연결 할 수 있습니다.
// 현재 시간을 밀리초 단위로 가져오는 JavaScript의 Date 객체 생성
var currentTimeInMillis = new Date().getTime(); // getTime() 메서드는 1970년 1월 1일부터 현재까지의 밀리초를 반환합니다.
// 밀리초를 초로 변환
var currentTimeInSeconds = currentTimeInMillis / 1000; // 밀리초를 1000으로 나누어 초로 변환합니다.
// 사용자가 정의한 이름들을 담은 배열
var userDefinedNames = [
"temperature",
"humidity",
// 이곳에 데이터 이름을 수정,추가 하세요
];
// 새로운 객체 생성
var newObject = {};
// timestamp를 먼저 추가
newObject.timestamp = currentTimeInSeconds;
// msg.payload가 배열인지 확인
if (Array.isArray(msg.payload)) {
// 배열의 길이를 확인하여 반복문으로 데이터 추가
for (var i = 0; i < msg.payload.length; i++) {
// 배열의 요소가 사용자가 지정한 경우, 그 이름을 사용하여 키 생성
if (i < userDefinedNames.length) {
var key = userDefinedNames[i];
} else {
// 사용자가 지정한 이름이 없는 경우 "key*" 형식의 이름 사용
var key = "key*" + (i + 1 - userDefinedNames.length);
}
// msg.payload의 i번째 요소를 가져와서 newObject에 추가
newObject[key] = msg.payload[i];
}
} else {
console.log("msg.payload는 배열이 아닙니다.");
}
// 수정된 newObject를 msg.payload로 설정
msg.payload = newObject;
// 수정된 msg 객체 반환
return msg;
3. json 노드
- json 노드: function 노드에서 변환된 데이터를 json형태로 출력하기 위한 노드 입니다.
4. mqtt out 노드
- mqtt out 노드: mqtt 브로커에 접속하여 메세지를 발생하는 노드로, Nzdata가 만든 mqtt 브로커에 json형태로 데이터를 전달하는 역할을 합니다.
5. debug 노드
- debug 노드: 데이터를 전달하는 기능상의 역할은 하지 않지만, 전달할 데이터를 확인하는 목적으로 사용 합니다.
이 섹션에서는 Node-RED의 기본 사용 방법과 Modbus 예제를 통해 실습할 수 있는 방법을 설명했습니다. Node-RED를 활용하여 다양한 데이터 소스를 연결하고, 데이터를 효율적으로 처리할 수 있습니다.