> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/roboflow/roboflow-ko/deploy/device-manager/plc-relay.md).

# PLC Relay

PLC Relay는 PLC 태그를 읽고 쓰기 위한 HTTP API를 제공하는 엣지 컨테이너 서비스입니다. Deployment Manager UI에서 프로토콜을 선택하고, 연결 세부 정보를 입력하고, 태그를 정의하여 구성합니다.

{% hint style="info" %}
PLC Relay는 Enterprise 고객에게만 제공됩니다. [Roboflow 영업팀에 문의하세요](https://roboflow.com/sales) 자세히 알아보세요.
{% endhint %}

## 지원되는 프로토콜

PLC Relay 서비스를 추가하거나 편집할 때 세 가지 프로토콜 중 하나를 선택합니다. 각 프로토콜은 고유한 연결 설정과 태그 형식을 가집니다.

| 프로토콜                       | PLC                                  | 기본 포트 |
| -------------------------- | ------------------------------------ | ----- |
| Allen-Bradley(EtherNet/IP) | CompactLogix, ControlLogix, Micro800 | 44818 |
| Modbus TCP                 | 모든 Modbus TCP 장치                     | 502   |
| Siemens S7                 | S7-300, S7-400, S7-1200, S7-1500     | 102   |

{% hint style="warning" %}
프로토콜을 전환하면 구성된 태그가 모두 지워집니다. 태그 주소 형식은 프로토콜 간에 호환되지 않기 때문입니다. UI는 변경을 적용하기 전에 확인을 요청합니다.
{% endhint %}

## 연결 설정

### PLC 주소

주소 형식은 선택한 프로토콜에 따라 달라집니다:

* **Allen-Bradley:** IP 또는 호스트 이름, 뒤에 선택적으로 `/slot` (예: `192.168.1.100/0`) 또는 전체 CIP 라우팅 경로.
* **Modbus TCP:** IP 또는 호스트 이름, 선택적으로 `:port` (예: `192.168.1.100:502`). 또한 32비트 값에 대해 Unit ID(0-255)와 Word Order(big 또는 little)도 필요합니다.
* **Siemens S7:** IP 또는 호스트 이름, 선택적으로 `:port` (예: `192.168.1.100:102`). 또한 Rack(0-7)과 Slot(0-31)도 필요합니다.

### 시뮬레이션 모드

활성화하면, PLC Relay는 실제 PLC에 연결하는 대신 메모리 내 시뮬레이터를 사용합니다. 모든 API 작업은 정상적으로 작동하지만 값은 메모리에 저장됩니다. 하드웨어 없이 테스트할 때 유용합니다.

## 태그 구성

태그는 API를 통해 액세스할 수 있는 PLC 데이터 포인트를 정의합니다. 각 태그에는 이름, 데이터 유형, 쓰기 가능 여부 플래그, 그리고 선택적 설명이 있습니다.

### 데이터 유형

| 유형     | 설명            | 범위                              |
| ------ | ------------- | ------------------------------- |
| `BOOL` | 불리언           | `true` / `false`                |
| `INT`  | 16비트 부호 있는 정수 | -32,768 \~ 32,767               |
| `DINT` | 32비트 부호 있는 정수 | -2,147,483,648 \~ 2,147,483,647 |
| `REAL` | 32비트 부동 소수점   | IEEE 754                        |

### 태그 이름 형식

{% tabs %}
{% tab title="Allen-Bradley" %}
태그 이름은 PLC 프로그램과 일치하며 대소문자를 구분합니다.

| 스타일          | 예시                            |
| ------------ | ----------------------------- |
| 단순           | `TagName`                     |
| 프로그램 범위      | `Program:MainProgram.TagName` |
| 배열 요소        | `TagName[0]`                  |
| UDT 멤버       | `MyUDT.Member`                |
| {% endtab %} |                               |

{% tab title="Modbus TCP" %}
형식: `{area}:{address}` 여기서 address는 0 이상의 정수입니다.

| 영역           | 유형              | Access | 예시            |
| ------------ | --------------- | ------ | ------------- |
| `코일`         | BOOL            | 쓰기 가능  | `coil:0`      |
| `디스크리트`      | BOOL            | 읽기 전용  | `discrete:5`  |
| `홀딩`         | INT, DINT, REAL | 쓰기 가능  | `holding:100` |
| `입력`         | INT, DINT, REAL | 읽기 전용  | `input:200`   |
| {% endtab %} |                 |        |               |

{% tab title="Siemens S7" %}
데이터 블록 형식: `DB{n}.DB[XWD]{byte}[.{bit}]`

영역 형식: `[MIQEA][WD]?{byte}[.{bit}]`

| 주소              | 유형                 | 설명                          |
| --------------- | ------------------ | --------------------------- |
| `DB1.DBX0.0`    | BOOL               | Data Block 1의 byte 0의 bit 0 |
| `DB1.DBW0`      | INT                | DB1의 16비트 워드                |
| `DB1.DBD0`      | DINT 또는 REAL       | DB1의 32비트 더블 워드             |
| `M0.0`          | BOOL               | Merker 비트                   |
| `I0.0` / `Q0.0` | BOOL               | 프로세스 입력/출력 비트               |
| `MW0` / `MD0`   | INT / DINT 또는 REAL | Merker 워드 / 더블 워드           |

S7-1200/1500의 경우: TIA Portal에서 PUT/GET을 활성화하고 접근하는 DB의 optimized block access를 비활성화하세요.
{% endtab %}
{% endtabs %}

## Web Dashboard 및 REST API

PLC Relay에는 태그 값을 실시간으로 모니터링할 수 있는 기본 제공 Web Dashboard가 포함되어 있습니다. 서비스가 실행되면 다음에서 접속하세요: `http://<device-ip>:8007`.

Dashboard에는 다음 위치에 대화형 Swagger 문서도 있습니다: `/docs` 그리고 다음 위치에 시각적 config builder도 있습니다: `/static/config-builder.html`.

### API 엔드포인트

| 메서드  | 경로               | 설명                     |
| ---- | ---------------- | ---------------------- |
| GET  | `/healthz`       | 연결 및 검증 상태를 확인하는 상태 점검 |
| GET  | `/all_tags`      | 모든 태그의 현재 값을 읽기        |
| GET  | `/read?tag=name` | 이름으로 단일 태그 읽기          |
| POST | `/write`         | 단일 태그 쓰기               |
| POST | `/read_batch`    | 여러 태그를 한 번에 읽기         |
| POST | `/write_batch`   | 여러 태그를 한 번에 쓰기         |
| GET  | `/schema`        | 모든 태그 정의 가져오기          |
| POST | `/validate`      | PLC에 대해 태그 검증을 다시 실행   |

## 문제 해결

| 증상                                 | 해결 방법                                                                                               |
| ---------------------------------- | --------------------------------------------------------------------------------------------------- |
| "PLC not connected"(Allen-Bradley) | PLC 주소 형식(IP/Slot)을 확인하고, 포트 44818에 도달 가능한지 확인하세요                                                   |
| "PLC not connected"(Modbus)        | IP/포트(기본 502)를 확인하고 Unit ID가 장치와 일치하는지 확인하세요                                                        |
| "PLC not connected"(Siemens S7)    | IP/포트(기본 102), rack, slot 값을 확인하세요. S7-1200/1500의 경우 PUT/GET을 활성화하고 optimized block access를 비활성화하세요 |
| "Function refused"(Siemens S7)     | TIA Portal에서 PUT/GET이 비활성화되어 있거나 대상 DB에서 optimized block access가 활성화되어 있습니다                         |
| REAL 값이 깨진 값으로 읽힘(Modbus)          | 반대 Word Order(big와 little)를 시도하세요                                                                   |
| 검증 결과 NOT\_FOUND가 표시됨              | PLC 프로그램에서 정확한 태그 이름(대소문자 구분)을 확인하세요                                                                |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.roboflow.com/roboflow/roboflow-ko/deploy/device-manager/plc-relay.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
