- Jelina 개요
- CommBridge
- 데이터 수집
Modbus-TCP 수집
설명: 일반적인 전송 매체에 따라 Modbus는 시리얼 포트 또는 네트워크 포트(광섬유 포함)를 통해 전송할 수 있습니다. RTU는 시리얼 통신에, TCP는 네트워크 포트(이더넷 통신)에 해당합니다. Modbus 통신 프로토콜은 마스터 장치와 슬레이브 장치 간 통신 절차를 따릅니다. 엣지 게이트웨이의 Modbus 드라이버는 Master 클라이언트【마스터】(마스터 장치)로 작동하며, 능동적으로 Modbus 슬레이브 장치에 조회 메시지를 전송합니다. 그러면 Modbus 슬레이브 장치가 받은 내용에 따라 응답 메시지를 준비하여 게이트웨이로 반환합니다.
1. 노드 생성
섹션 제목: “1. 노드 생성”(1) CommBridge 페이지의 【스마트 트윈】으로 이동한 후 왼쪽에서 【장치 연결】로 전환합니다.

(2) Modbus 클라이언트【마스터】, 데이터 처리 및 MQTT 업로드 플러그인을 차례로 플러그인 작업 영역에 끌어 놓아 세 개의 노드를 생성합니다.

(3) 세 노드를 차례로 연결합니다. 연결 순서는 Modbus 클라이언트【마스터】 → 데이터 처리 → MQTT 업로드입니다.

2. 구성 생성
섹션 제목: “2. 구성 생성”프로토콜로
Modbus-TCP선택
(1) Modbus 클라이언트【마스터】를 두 번 클릭하고 【구성 추가】 버튼을 클릭합니다.

(2) 연결 설정을 입력하고 【다음】을 클릭합니다.

(3) 【그룹 추가】를 클릭하고 그룹 정보를 입력한 후 【확인】을 클릭합니다.

(4) 【데이터 추가】를 클릭하고 데이터 포인트 정보를 입력한 후 【확인】을 클릭합니다.

(5) 【완료】를 클릭하여 수집 구성을 추가합니다.

(6) 구성의 스위치를 켜고 【저장】을 클릭합니다.

3. 결과 확인
섹션 제목: “3. 결과 확인”(1) 【장치 연결】의 【배포】 버튼을 클릭하여 배포합니다.

(2) 【스마트 트윈】으로 전환한 후 Modbus 클라이언트【마스터】 노드 위로 마우스를 이동하면 노드 정보 목록이 표시됩니다.

(3) 구성을 클릭하여 해당 구성의 각 그룹에 속한 데이터 포인트의 실시간 데이터와 이력 데이터를 확인합니다.
수집(처리 전):

처리 후(데이터 처리 플러그인에서 구성 확인):

4. 데이터 쓰기
섹션 제목: “4. 데이터 쓰기”데이터 포인트의 읽기/쓰기 모드가
rw또는wo이고 데이터가 정상적으로 수집될 때만 데이터를 변경할 수 있습니다.
(1) 개별 데이터의 【쓰기】 버튼을 클릭하고 데이터를 설정한 후 【확인】을 클릭합니다.

(2) 이력 데이터를 확인합니다.

5. 설정 설명
섹션 제목: “5. 설정 설명”연결 설정
섹션 제목: “연결 설정”| 매개변수 | 설명 | 형식 | 예 |
|---|---|---|---|
| 구성 이름 | 사용자가 지정하는 구성 이름 | 필수 | 슬레이브 수집 |
| 프로토콜 | Modbus 프로토콜 | Modbus TCP, Modbus RTU | Modbus TCP |
| 동기 수집 | 동기 수집 여부, Yes 또는 No | Yes, No | YES |
| 수집 주기 | 데이터 읽기 폴링 주기로, 구성 내 각 그룹이 레지스터를 읽는 시간 간격 | 숫자, 범위: (100,2147483647] | 2000 |
| 수집 유효 시간 | 그룹의 모든 데이터 포인트를 지정 시간 내에 수집해야 하며, 그렇지 않으면 해당 그룹 데이터를 버립니다. 이 시간에는 프레임 지연이 포함됩니다. | 숫자, 범위: (0, 수집 주기] | 1000 |
| 제한 시간 | 구성 내 각 그룹의 개별 데이터 수집에 허용되는 시간으로, 초과하면 해당 읽기 데이터를 버림 | 숫자, 범위: (0, 수집 주기] | 1000 |
| 최대 일괄 레지스터 수 | 연속 데이터 포인트를 일괄 수집할 때의 최대 레지스터 수 | 자연수, 범위: [1,120] | 120 |
| 프레임 지연 | 두 수집 사이의 최소 간격이며 기본값은 0입니다. 수집 제한 시간 초과가 자주 발생하면 적절히 늘리고, 그렇지 않으면 변경할 필요가 없습니다. | 단위: 밀리초, 숫자, 범위: [0, 2147483647] | 0 |
| 쓰기 프레임 지연 | 데이터 쓰기 시 추가 대기 시간입니다. 쓰기 작업이 느린 일부 장치에서 설정하며, 0은 추가 지연이 없음을 의미합니다. | 단위: 밀리초, 숫자, 범위: [0, 2147483647] | 0 |
| 레지스터 쓰기 기능 코드 | 홀딩 레지스터 쓰기에 사용할 기능 코드 설정 | Auto, 06, 10, 아래 설명 참조 | Auto |
| 변경 기반 수집 | 데이터 수집 방식입니다. No: 변경 기반 수집을 사용하지 않음, SingleData: 변경된 데이터 포인트만 전송, WholeGroup: 그룹 내 데이터가 하나라도 변경되면 그룹 전체 전송 | No, SingleData, WholeGroup | SingleData |
| 변경 기반 수집 재설정 시간 | 데이터가 이 시간 이상 변경되지 않으면 데이터 제출을 강제로 한 번 트리거합니다. 0이면 트리거하지 않습니다. | 단위: 초, 숫자, 범위: (0, 2147483647] | 0 |
| 실패 시 백오프 | 수집 실패 후 백오프 비율에 따라 다음 수집까지의 시간을 늘리며, 최대 수집 주기 × 최대 백오프 비율을 넘지 않음 | Yes, No, 아래 설명 참조 | Yes |
| 백오프 비율 | 실패 시 시간 증가 비율로, 0보다 크고 1이 아니어야 함 | 숫자 | 2 |
| 최대 백오프 비율 | 최대 대기 시간 비율로, 이 비율에 도달하면 더 이상 증가하지 않음 | 숫자 | 16 |
동기 수집:
- “Yes”는 구성 전체의 그룹에 수집 주기, 제한 시간 및 수집 유효 시간을 통합 설정한다는 의미입니다. 구성 내 모든 데이터 포인트에 적용됩니다.
- “No”는 각 그룹이 수집 주기, 제한 시간 및 수집 유효 시간을 개별 설정한다는 의미입니다.
레지스터 쓰기 기능 코드: Auto는 레지스터 하나를 쓸 때 06, 여러 개를 쓸 때 10을 사용합니다. 06은 모든 레지스터 쓰기에 06을, 10은 모든 레지스터 쓰기에 10을 사용합니다.
실패 시 백오프: 예를 들어 수집 주기가 1초, 백오프 비율이 2, 최대 백오프 비율이 16이면 계속 실패할 때 대기 시간은 1s, 2s, 4s, 8s, 16s가 됩니다. 마찬가지로 수집 주기가 10초, 백오프 비율이 0.5, 최대 백오프 비율이 0.1이면 대기 시간은 10s, 5s, 2.5s, 1.25s가 됩니다. 수집에 한 번 성공하면 초기 기본 수집 주기로 복귀합니다.
백오프 비율이 1보다 크면 최대 백오프 비율은 백오프 비율보다 커야 하며, 1보다 작으면 최대 백오프 비율은 백오프 비율보다 작아야 합니다.
그룹 추가
섹션 제목: “그룹 추가”| 매개변수 | 설명 | 형식 | 예 |
|---|---|---|---|
| 그룹 이름 | 사용자가 지정하는 그룹 이름 | 필수 | 그룹 1 |
| Slave ID | Modbus 장치 주소로, 수집 대상 장치의 슬레이브 주소 | 숫자, 범위: (0,255] | 1 |
| IP | Modbus 장치 IP 주소 | 점으로 구분된 10진수 주소 입력 | 172.21.78.157 |
| 포트 | Modbus 장치 포트 번호, 기본값 502 | 숫자, 범위: (0,65535] | 502 |
| 수집 주기 | 데이터 읽기 폴링 주기로, 개별 그룹이 레지스터를 읽는 시간 간격 | 숫자, 범위: (100,2147483647] | 2000 |
| 수집 유효 시간 | 개별 그룹의 모든 데이터 포인트를 수집해야 하는 유효 시간입니다. 이 시간 내에 그룹의 모든 데이터 포인트를 읽지 못하면 그룹 전체 데이터를 버립니다. | 숫자, 범위: (0, 수집 주기] | 1000 |
| 제한 시간 | 개별 그룹의 각 데이터 수집에 허용되는 시간으로, 초과하면 해당 읽기 데이터를 버림 | 숫자, 범위: (0, 수집 주기] | 1000 |
참고: 연결 설정의 동기 수집이 No인 경우, 그룹 내 모든 데이터 포인트에 적용됩니다. Modbus는 한 번에 읽을 수 있는 레지스터 수가 제한됩니다. Holding Register와 Input Register는 연속된 레지스터 포인트를 한 번에 최대 120개, Discrete와 Coils는 최대 2000개 읽을 수 있습니다.
데이터 추가
섹션 제목: “데이터 추가”| 매개변수 | 조건 | 설명 | 형식 | 예 |
|---|---|---|---|---|
| 데이터 별칭 | 동일 그룹 내에서 고유한 데이터 포인트 이름 | 필수, 숫자나 밑줄로 시작할 수 없고 공백을 포함할 수 없음 | M | |
| 주소 | 레지스터 주소로, 동일 그룹 내에서 중복될 수 없음 | 레지스터 주소로, 동일 그룹 내에서 중복될 수 없음 | 숫자, 범위: (0,2147483647) | 0 |
| 레지스터 유형 | Modbus 연산 코드 | Holding Register, Input Register, Discrete, Coils, 아래 설명 참조 | Holding Register | |
| 데이터 유형 | 레지스터 유형에 따라 결정 | 레지스터 데이터의 원본 유형 | uint16, int16, uint32, int32, float, boolean, combine, string, hex string, 아래 설명 참조 | uint16 |
| 바이트 순서 | 레지스터 유형과 데이터 유형에 따라 결정 | 1바이트를 초과하는 데이터 유형의 메모리 저장 순서 | AB, BA, ABCD, CDAB, BADC, DCBA, 아래 설명 참조 | AB |
| 레지스터 수 | 레지스터 유형과 데이터 유형에 따라 결정 | 해당 데이터 유형에 사용하는 레지스터 수 | 아래 설명 참조 | 1 |
| 읽기/쓰기 모드 | 레지스터 유형에 따라 결정 | ro(읽기 전용), rw(읽기/쓰기), wo(쓰기 전용) 지원 | ro, rw, wo | ro |
| 계산 | 사용자가 데이터 별칭을 기반으로 정의하는 수식 | {M}/10 | ||
| 오프셋 | 데이터 유형이 bit | 바이트 순서를 조정한 후 상위 비트에서 하위 비트 방향으로 계산한 bit 오프셋 | 숫자, 범위: [0,15] |
예를 들어 온도 속성을 디버깅할 때 장치의 온도 속성 주소가 1이면 레지스터 주소를 1로 설정할 수 있습니다.
- 레지스터 유형이 Discrete 또는 Coils이면 기본 데이터 유형은 boolean입니다.
- 데이터 유형이 uint16, int16, combine이면 바이트 순서로 AB, BA를 선택할 수 있습니다. uint32, int32, float이면 ABCD, CDAB, BADC, DCBA를 선택할 수 있습니다. 다른 데이터 유형에는 바이트 순서가 없습니다.
- 레지스터 유형이 Discrete 또는 Coils이면 기본 레지스터 수는 1입니다. 데이터 유형이 uint16, int16, boolean이면 기본값은 1이고, uint32, int32, float이면 기본값은 2입니다. combine이면 1 또는 2를 선택할 수 있고, string, hex string이면 직접 입력할 수 있습니다.
16비트 순서:
- AB: 1워드 레지스터로, 상위 워드가 앞에 있고 하위 워드가 뒤에 있으며 워드 내에서는 상위 바이트가 앞에, 하위 바이트가 뒤에 있습니다(빅 엔디언).
- BA: 1워드 레지스터로, 상위 워드가 앞에 있고 하위 워드가 뒤에 있으며 워드 내에서는 하위 바이트가 앞에, 상위 바이트가 뒤에 있습니다(리틀 엔디언).
32비트 순서:
- ABCD: 2워드 레지스터로, 상위 워드가 앞에 있고 하위 워드가 뒤에 있으며 워드 내에서는 상위 바이트가 앞에, 하위 바이트가 뒤에 있습니다(빅 엔디언).
- BADC: 2워드 레지스터로, 상위 워드가 앞에 있고 하위 워드가 뒤에 있으며 워드 내에서는 하위 바이트가 앞에, 상위 바이트가 뒤에 있습니다(빅 엔디언 바이트 교환).
- CDAB: 2워드 레지스터로, 하위 워드가 앞에 있고 상위 워드가 뒤에 있으며 워드 내에서는 상위 바이트가 앞에, 하위 바이트가 뒤에 있습니다(리틀 엔디언 바이트 교환).
- DCBA: 2워드 레지스터로, 하위 워드가 앞에 있고 상위 워드가 뒤에 있으며 워드 내에서는 하위 바이트가 앞에, 상위 바이트가 뒤에 있습니다(리틀 엔디언).
6. Modbus 프로토콜 관련 매개변수 설명
섹션 제목: “6. Modbus 프로토콜 관련 매개변수 설명”레지스터 유형에 따라 데이터 유형, 레지스터 수 및 읽기/쓰기 모드가 결정됩니다.
레지스터 유형 소개
섹션 제목: “레지스터 유형 소개”0x, 1x, 3x, 4x는 Modbus 프로토콜에서 정의한 주소 범위입니다.
| 레지스터 유형 | 이름 | 레지스터 PLC 주소 | 레지스터 프로토콜 주소 | 읽기/쓰기 상태 | 설명 |
|---|---|---|---|---|---|
| Holding Register | 홀딩 레지스터(4x) | 40001-49999 | 0000H-FFFFH | 읽기/쓰기, 읽기: 0x03, 쓰기: 0x06 | 출력 또는 저장 매개변수로, 컨트롤러 실행 중 설정하는 일부 매개변수 |
| Input Register | 입력 레지스터(3x) | 30001-39999 | 0000H-FFFFH | 읽기 전용, 0x04 | 컨트롤러 실행 중 외부 장치에서 얻는 입력 매개변수 |
| Discrete | 이산 입력 상태(1x) | 10001-19999 | 0000H-FFFFH | 읽기 전용, 0x02 | 외부 설정으로 입력 상태가 변경되는 입력 포트 |
| Coils | 코일 상태(0x) | 00001-09999 | 0000H-FFFFH | 읽기/쓰기, 읽기: 0x01, 단일 코일 쓰기: 0x05, 다중 코일 쓰기: 0x0F | 출력 상태를 설정하고 해당 비트의 출력 상태를 읽을 수 있는 출력 포트 |
데이터 유형 소개
섹션 제목: “데이터 유형 소개”데이터 유형은 원본 데이터 유형, 레지스터 내 상위/하위 바이트 교환 및 레지스터 순서 교환의 세 요소로 결정됩니다. 각 문자는 1바이트를 나타냅니다.
- 원본 데이터 유형: uint16, int16, uint32, int32, float, boolean, combine, string, hex string.
- 레지스터 내 상위/하위 바이트 교환: 레지스터의 16비트 데이터에서 앞뒤 8비트를 교환합니다. 16bit에는 정순(AB)과 역순(BA)만 있으며, 상위 우선은 정순, 하위 우선은 역순입니다.
- 레지스터 순서 교환: 32비트 데이터에서 16비트 단위를 교환합니다(예: ABCD와 CDAB).
원본 데이터 유형 설명:
| 이름 | 설명 | 레지스터 수 |
|---|---|---|
| uint16 | 16비트 부호 없는 정수 | 1 |
| int16 | 16비트 부호 있는 정수 | 1 |
| uint32 | 32비트 부호 없는 정수 | 2 |
| int32 | 32비트 부호 있는 정수 | 2 |
| float | 32비트 부동소수점 | 2 |
| combine | 1、2 | |
| boolean | 불리언 값 | 1 |
| string | ASCII 문자열 | 사용자 정의 가능 |
| hex string | 16진수 문자열 | 사용자 정의 가능 |
상위/하위 순서 설명:
| 속성값 | 설명 |
|---|---|
| AB | 2바이트 레지스터로, 상위 바이트가 앞에 있고 하위 바이트가 뒤에 있음(정순) |
| BA | 2바이트 레지스터로, 하위 바이트가 앞에 있고 상위 바이트가 뒤에 있음(역순) |
| ABCD | 2워드 레지스터로, 상위 워드가 앞에 있고 하위 워드가 뒤에 있으며 워드 내에서는 상위 바이트가 앞에, 하위 바이트가 뒤에 있음(빅 엔디언) |
| BADC | 2워드 레지스터로, 상위 워드가 앞에 있고 하위 워드가 뒤에 있으며 워드 내에서는 하위 바이트가 앞에, 상위 바이트가 뒤에 있음(빅 엔디언 바이트 교환) |
| CDAB | 2워드 레지스터로, 하위 워드가 앞에 있고 상위 워드가 뒤에 있으며 워드 내에서는 상위 바이트가 앞에, 하위 바이트가 뒤에 있음(리틀 엔디언 바이트 교환) |
| DCBA | 2워드 레지스터로, 하위 워드가 앞에 있고 상위 워드가 뒤에 있으며 워드 내에서는 하위 바이트가 앞에, 상위 바이트가 뒤에 있음(리틀 엔디언) |