PLC 주소 입력 — 프로토콜별 완전 가이드
태그 등록 화면에서 가장 많이 헷갈리는 PLC 주소 와 데이터 타입 / format 을 프로토콜별로 한 곳에 정리한 레퍼런스 입니다. 각 PLC 별 자세한 가이드는 PLC 종류별 가이드 의 해당 페이지로 링크됩니다.
1. 공통 — 등록 폼의 4 필드
태그 등록 화면 (태그 등록) 에서 PLC 주소와 함께 적는 4 필드:
| 필드 | 의미 | 예 |
|---|---|---|
| PLC 주소 | 드라이버가 PLC 에 보낼 원시 주소 | D00309 (LS), D100 (Melsec), DB1.DBW0 (S7) |
| 데이터 타입 | Java/JS 가 받을 타입 | Integer / Long / Float / Double / String / Boolean |
| format (형식 보조) | 같은 주소를 다르게 해석하는 옵션 | DW / UI / REAL / STR[10] / BIN[3] 등 |
| 계산식 (fomula) | read 후 적용할 산술식 | ${VALUE}*0.1 / sqrt(${VALUE}) |
💡 format 이 핵심: PLC 의 같은 주소도 16-bit / 32-bit / 실수 / 문자열 / 비트로 해석이 갈립니다. format 을 비워두면 16-bit signed integer 로 가정 (대부분 드라이버 default).
2. LS XGT (XGI / XBC / XBM) — LS 드라이버
메모리 영역
| 글자 | 영역 | 자주 쓰는 |
|---|---|---|
D | Data Register | ✅ 데이터 (가장 흔함) |
M | Memory (비트) | ✅ 상태 비트 |
K | Keep Relay (비휘발) | ✅ 정전 보존 |
F | Flag | 시스템 비트 |
T | Timer | 타이머 현재값 |
C | Counter | 카운터 현재값 |
R | File Register | (시리즈 따라) |
P | I/O | 외부 입출력 |
표기 예
| PLC 의 값 | 데이터 타입 | format | 주소 예 | 비고 |
|---|---|---|---|---|
| 16-bit signed | Integer | (비움) | D00309 | default |
| 16-bit unsigned | Integer | UI 또는 UW | D00300 | 0–65535 |
| 32-bit signed | Integer | DW | D00600 | D00600~D00601 |
| 32-bit unsigned | Long | UDW 또는 DUW | D00690 | 0–4_294_967_295 |
| 64-bit signed | Long | (비움 + dt=Long) | D00700 | D00700~D00703 |
| 32-bit float | Float | REAL | D00450 | IEEE 754 |
| 64-bit double | Double | LREAL | D00500 | IEEE 754 |
| 비트 (M/K/F/T/C/P) | Boolean | (비움) | M02704 | 비트 영역 |
| 워드의 N 번 비트 | Boolean | BIN[N] | D00309 (BIN[3]) | 3번 비트 |
| 문자열 N 워드 (= 2N 글자) | String | STR[N] | D00500 (STR[10]) | low-byte-first |
| Byte | Integer | B 또는 UB | D00100 | 1 바이트 |
상세: LS 산전
3. 미쓰비시 MELSEC (Q / L / iQ-R) — MELSEC 드라이버
메모리 영역
드라이버가 읽고 쓸 수 있는 디바이스는 아래가 전부입니다.
| 글자 | 영역 | 단위 | 자주 쓰는 |
|---|---|---|---|
D | Data Register | 워드 | ✅ 가장 흔함 |
M | Internal Relay | 비트 | ✅ |
B | Link Relay | 비트 | ✅ |
X / Y | Input / Output | 비트 | I/O |
W | Link Register | 워드 | |
R | File Register | 워드 | |
T / C | Timer / Counter | 워드 | 현재값 |
L | Latch Relay | 비트 | |
F | Annunciator | 비트 | 경보 |
V | Edge Relay | 비트 | |
S | Step Relay | 비트 | |
Z | Index Register | 워드 |
SD · SM · ZR 은 읽을 수 없습니다시스템 디바이스(SD / SM)와 확장 파일 레지스터(ZR)는 이 드라이버가 지원하지 않습니다.
태그에 등록해도 읽기가 실패합니다. 시스템 상태값이 필요하면 PLC 프로그램에서
D 영역으로 복사한 뒤 그 주소를 읽으세요.
표기 예
| 데이터 | 타입 | format | 주소 예 |
|---|---|---|---|
| 16-bit signed | Integer | (비움) | D100 |
| 16-bit unsigned | Integer | UW | D100 |
| 32-bit signed | Integer | DW | D100 (D100~D101) |
| 32-bit unsigned | Long | UDW | D100 |
| 32-bit float | Float | REAL | D100 |
| 비트 | Boolean | (비움) | M100, B0010 |
| 문자열 | String | STR[N] | D200 (N 워드) |
⚠ 컨트롤러 타입 (
controller-type) 옵션이 등록 폼에 있음 — Q/L 시리즈와 iQ-R 의 디바이스 코드 가 달라서. 잘못 설정하면Wrong device code.
상세: 미쓰비시 MELSEC
4. 지멘스 S7 (S7-300 / 400 / 1200 / 1500) — S7 드라이버
메모리 영역
| 영역 | 표기 | 의미 |
|---|---|---|
| DB (Data Block) | DB<n>.DB<X>0 | 가장 흔함 — 사용자 정의 데이터 블록 |
| M (Merker) | M<X>0 | 내부 메모리 |
| I (Input) | I<X>0 또는 E<X>0 | 입력 |
| Q (Output) | Q<X>0 또는 A<X>0 | 출력 |
| C / T | C0 / T0 | Counter / Timer |
<X> = 데이터 폭:
B= Byte (8-bit)W= Word (16-bit)D= DWord (32-bit, 정수 또는 float)X<bit>= 비트 (예:M0.3)
표기 예
| 데이터 | 타입 | format | 주소 예 |
|---|---|---|---|
| 16-bit signed | Integer | (비움) | DB1.DBW0 |
| 32-bit signed | Integer | DW | DB1.DBD0 |
| 32-bit float | Float | REAL | DB1.DBD4 |
| 비트 | Boolean | (비움) | DB1.DBX0.0 (DB1 의 byte 0 의 비트 0) |
| 문자열 | String | STR[N] | DB1.DBB0 (S7 STRING 헤더 포함) |
⚠
rack / slot옵션 — TIA Portal 에서 PLC 의 Rack / Slot 번호 (보통 0/1 또는 0/2). 잘못되면 connection refused.
상세: 지멘스 S7
5. Modbus TCP — MODBUS 드라이버
영역 / 함수 코드
| 영역 | 함수 코드 | 비트/워드 | 표기 |
|---|---|---|---|
| Coil | FC1 / FC5 / FC15 | 비트 | coil:<n> |
| Discrete Input | FC2 | 비트 (read-only) | discrete-input:<n> |
| Holding Register | FC3 / FC6 / FC16 | 워드 | holding-register:<n> |
| Input Register | FC4 | 워드 (read-only) | input-register:<n> |
표기 예
| 데이터 | 타입 | format | 주소 예 |
|---|---|---|---|
| 16-bit signed | Integer | (비움) | holding-register:1 |
| 16-bit unsigned | Integer | UI | holding-register:1 |
| 32-bit signed | Integer | DW | holding-register:1 (HR1+HR2) |
| 32-bit float | Float | REAL | holding-register:1 |
| 32-bit float (byte-swap) | Float | REAL_BS | (드라이버 옵션 따라) |
| 비트 | Boolean | (비움) | coil:5 |
| 입력 비트 (read-only) | Boolean | (비움) | discrete-input:0 |
벤더마다 다릅니다 (Modbus 슬레이브의 시작 번호). 게이트웨이의 MODBUS 드라이버는 입력 그대로 PDU 로 보내므로, 슬레이브 매뉴얼의 PDU 주소 를 직접 적으세요.
상세: Modbus TCP
6. OPC-UA — OPCUA 드라이버
NodeId 표기
OPC-UA 는 NodeId 로 식별 — 표준 형식:
ns=<NamespaceIndex>;s=<StringId>
ns=<NamespaceIndex>;i=<NumericId>
ns=<NamespaceIndex>;g=<GuidId>
ns=<NamespaceIndex>;b=<ByteStringId>
표기 예
| 서버 | NodeId | 비고 |
|---|---|---|
| Kepware | ns=2;s=Channel1.Device1.Tag1 | 채널.디바이스.태그 |
| Ignition | ns=1;s=[default]Tag1/Sub | 태그 경로 |
| PlantPulse 자체 OPC-UA 서버 | ns=2;s=SITE_00001.OPC_00303.TAG_TEST_00042 | site.opc.tag |
| 숫자형 ID | ns=2;i=1234 | 숫자 ID |
데이터 타입
OPC-UA 는 서버가 자체적으로 타입을 가짐 — 게이트웨이의 데이터 타입 / format 은 해석 힌트 로만 사용. 일반적으로:
| 서버 노드 타입 | 등록 시 | format |
|---|---|---|
Int16 / Int32 / Int64 | Integer / Long | (비움) |
Float / Double | Float / Double | (비움) |
Boolean | Boolean | (비움) |
String | String | (비움) |
상세: OPC-UA
7. AB EtherNet/IP / Logix — EIP / LOGIX 드라이버
표기 (Logix 태그명 기반 — Symbol Addressing)
ControlLogix / CompactLogix 는 태그 이름 으로 직접 접근:
| 데이터 | 타입 | format | 주소 예 |
|---|---|---|---|
| DINT | Integer | DW | MyTag |
| INT | Integer | (비움) | Pump.Speed |
| REAL | Float | REAL | Tank.Level |
| BOOL | Boolean | (비움) | Motor.Run |
| STRING | String | (Logix STRING 구조체) | Recipe.Name |
| 배열 | (스칼라) | (비움) | Array[5] (인덱스 직접) |
표기 (PLC-5 / SLC-500 — Logical Addressing)
AB-ETH 카드는 다른 폼:
| 데이터 | 주소 예 |
|---|---|
| Word | N7:0 (file 7, element 0) |
| Float | F8:0 |
| Bit | B3:0/0 |
backplane / slot옵션 — PLC 가 어느 슬롯에 있는지.1(CPU) 가 흔함.
상세: AB EtherNet/IP
8. HTTP 푸시 — HTTP 드라이버 (역방향)
게이트웨이가 PLC 에 read 안 함 — 외부에서 게이트웨이로 push 하는 모드.
| 표기 | 의미 |
|---|---|
<영역>/<키> | 자유 식별자 — 외부가 보내는 path 와 매칭 |
POST body 예시:
{ "tag_id": "TAG_OUTDOOR_TEMP", "value": "23.4" }
format / 데이터 타입 은 단순 보관 메타. PLC 주소 는 임의 키 — 외부가 어떤 키로 push 하는지에 따라 자유 명명.
상세: HTTP 푸시
9. Motor Sense — MOTOR_SENSE 드라이버 (OPC-UA 경유)
KOPENS 모터센스 디바이스를 OPC-UA 로 받음. 자산(asset) 단위로 자동 검색.
| 종류 | 자동 채워지는 PLC 주소 |
|---|---|
| HEALTH INDEX | <ASSET_ID>.health.<metric> |
| SIGNAL | <ASSET_ID>.signal.<metric> |
수동 입력은 일반적으로 안 함 — 자산 자동 검색이 됨.
상세: 모터센스
10. OMRON FINS — FINS 드라이버
메모리 영역
| 글자 | 영역 |
|---|---|
D | DM (Data Memory) — 가장 흔함 |
H | Holding Relay |
W | Work Area |
A | Auxiliary |
T / C | Timer / Counter |
CIO | Core I/O |
표기 예
| 데이터 | 타입 | format | 주소 예 |
|---|---|---|---|
| 16-bit signed | Integer | (비움) | D100 |
| 32-bit signed | Integer | DW | D100 |
| Float | Float | REAL | D100 |
| 비트 | Boolean | (비움) | H0.05 (워드 0 의 비트 5) |
Network/Node/Unit 옵션 — FINS 헤더의 라우팅 정보 (
SA1/DA1등). PLC 매뉴얼 따라 설정.
11. PANASONIC MEWTOCOL — MEWTOCOL 드라이버
메모리 영역
| 글자 | 영역 |
|---|---|
DT | Data Register |
R | Internal Relay |
X / Y | Input / Output |
T / C | Timer / Counter |
표기 예
| 데이터 | 타입 | format | 주소 예 |
|---|---|---|---|
| 16-bit signed | Integer | (비움) | DT0 |
| 32-bit signed | Integer | DW | DT0 |
| 비트 | Boolean | (비움) | R0.0 |
12. FATEK FACON — FATEK 드라이버
메모리 영역
| 글자 | 영역 |
|---|---|
R | Register (Word) |
M / Y / X | Memory / Output / Input (Bit) |
D | Discrete |
표기 예
| 데이터 | 타입 | format | 주소 예 |
|---|---|---|---|
| 16-bit signed | Integer | (비움) | R0 |
| 비트 | Boolean | (비움) | M0, Y10 |
13. GE SRTP — GE 드라이버
메모리 영역 (GE Fanuc / Emerson PACSystems)
| 글자 | 영역 |
|---|---|
R | Register |
AI / AQ | Analog Input / Output |
I / Q | Discrete Input / Output |
M | Internal |
표기 예
| 데이터 | 타입 | format | 주소 예 |
|---|---|---|---|
| 16-bit signed | Integer | (비움) | R1 |
| 32-bit signed | Integer | DW | R1 |
| Float | Float | REAL | R1 |
| Discrete | Boolean | (비움) | I1 |
14. EMERSON DELTAV — DELTAV 드라이버 (예정)
DeltaV 의 DST (Data Service Tag) 또는 I/O reference 표기:
| 표기 | 의미 |
|---|---|
MODULE/PARAMETER.FIELD | 예: MOD01/AI1.PV |
정식 드라이버 구현 전 — OPC-UA 또는 OPC-DA 게이트웨이 (Kepware) 경유 권장.
15. AB EtherNet (PLC-5 / SLC-500) — AB-ETH 드라이버
7. EIP / Logix 의 PLC-5/SLC-500 표기 절 그대로:
| 영역 | 표기 |
|---|---|
| Word | N7:0 |
| Float | F8:0 |
| Bit | B3:0/0 |
| Output | O:0/0 |
| Input | I:0/0 |
16. Beckhoff TwinCAT/ADS — ADS 드라이버 (예정)
TwinCAT 변수명 표기 (Symbol-based):
| 데이터 | 표기 예 |
|---|---|
| Variable | MAIN.PumpSpeed |
| Array | MAIN.Tanks[5].Level |
| Struct | GVL.Recipe.Name |
NetID + Port (보통
851for PLC1) 추가 옵션.
17. PROFINET — PROFINET 드라이버 (예정)
Siemens / 일반 Profinet IO 의 Slot/Subslot 기반 표기:
| 표기 | 의미 |
|---|---|
<slot>/<subslot>/<index> | 예: 1/1/0 |
실시간 제어 프로토콜 — 게이트웨이는 비실시간 read 만 지원 예정.
18. CANopen — CANOPEN 드라이버 (예정)
CANopen 의 OD (Object Dictionary) 표기:
| 표기 | 의미 |
|---|---|
<index>:<sub> | 예: 0x6041:0 (Statusword) |
CAN-bus 인터페이스 카드 (USB-CAN / PCIe-CAN) 필요.
19. BACnet/IP — BACNET 드라이버 (예정)
BACnet object 표기:
| 표기 | 의미 |
|---|---|
<object-type>:<instance>.<property> | 예: analog-input:1.present-value |
| Object types | analog-input / analog-output / analog-value / binary-input / binary-output / binary-value / multi-state-* |
빌딩 자동화 / HVAC / 조명 도메인.
20. KNXnet/IP — KNXNET 드라이버 (예정)
KNX Group Address (3-level) 표기:
| 표기 | 의미 |
|---|---|
<main>/<middle>/<sub> | 예: 1/0/5 (조명 채널 5) |
| DPT (Data Point Type) | DPT_Switch / DPT_Value_Temp 등 |
빌딩 자동화 표준 (EU 위주).
21. Open Protocol (Atlas Copco) — OP 드라이버
체결 (스크류드라이버 / 토크 컨트롤러) 결과 메시지 기반:
| 표기 | 의미 |
|---|---|
MID:<msg-id>.<param> | 예: MID:0061.tightening_id (체결 결과 ID) |
| Common MIDs | 0001(조인 통신) / 0030(파라미터 셋) / 0061(체결 결과) |
라인 체결 / 조립 공정에 특화 — PLC 가 아닌 컨트롤러 와 연동.
22. format 옵션 — 모든 드라이버 통합 표
자주 등록 폼의 형식 보조 칸에 적는 값들. 드라이버마다 지원 다름:
| format | 의미 | 지원 드라이버 |
|---|---|---|
| (비움) | 16-bit signed integer (대부분 default) | 모두 |
B | 8-bit signed byte | LS / Melsec |
UB | 8-bit unsigned byte | LS / Melsec |
UI / UW / UWORD | 16-bit unsigned word | LS / Melsec / Modbus |
DW | 32-bit signed dword | LS / Melsec / S7 / Modbus / EIP / Logix |
UDW / DUW / UDWORD | 32-bit unsigned dword | LS / Melsec / Modbus |
UL | 64-bit unsigned long | LS |
REAL | 32-bit float (IEEE 754) | 모두 |
LREAL | 64-bit double | LS / S7 |
STR[N] | N 워드 / N 바이트 문자열 | LS (워드) / Melsec / S7 / Modbus |
BIN[N] | 워드의 N 번째 비트 추출 | LS |
X 또는 BIT | 비트 (Boolean 동의어) | LS / Modbus |
옵션이 정확히 일치 안 하면 대소문자 무시 + 공백 제거 로 매칭.
dw/Dw/D W모두DW로 인식.
23. 자주 빠지는 함정 — 모든 드라이버 공통
| 증상 | 원인 / 해결 |
|---|---|
| 32-bit 값이 완전히 다른 숫자 | format 비움 → 16-bit 으로 해석. DW 또는 REAL 명시 |
| 실수가 0 또는 NaN | byte order (endianness) 문제. REAL_BS (byte-swap) 또는 fomula swap32 시도 |
| 비트가 항상 false | 워드 영역 (D) 에 비트 표기 — 비트 영역 (M/B/coil:) 또는 BIN[N] 사용 |
| 문자열 글자 깨짐 | low-byte-first vs high-byte-first 차이. LS 는 자동 처리, S7 STRING 은 헤더 포함 — STR[N] 길이 정확히 |
Wrong device code (Melsec) | controller-type 가 Q/L vs iQ-R 잘못 설정. 폼에서 변경 후 OPC 재시작 |
BadTypeMismatch (OPC-UA) | 등록한 데이터 타입이 서버 노드 타입과 다름. 서버 측 타입과 일치시킴 |
connection refused (S7) | rack / slot 잘못. TIA Portal 에서 정확한 값 확인 |
| 모든 태그 read 0 | 주소 영역은 OK 인데 PLC 가 그 주소를 내보내지 않음. PLC 프로그램에서 그 메모리에 값 쓰는 로직 점검 |
24. 더 알아보기
- 등록 절차 (시작 전 준비 + 단계별): 새 PLC 연결 추가
- 태그 등록 (단건/CSV): 태그 등록
- 등록 후 모니터링: 연결 목록 / 태그 목록
- 각 PLC 별 상세: PLC 종류별 가이드
- 드라이버 동작 내부: 고급 → 드라이버 기술 레퍼런스