> 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 범위   | `Program:MainProgram.TagName` |
| 배열 요소        | `TagName[0]`                  |
| UDT 멤버       | `MyUDT.Member`                |
| {% endtab %} |                               |

{% tab title="Modbus TCP" %}
형식: `{area}:{address}` 여기서 address는 음수가 아닌 정수입니다.

| 영역           | 유형              | 접근    | 예시            |
| ------------ | --------------- | ----- | ------------- |
| `coil`       | BOOL            | 쓰기 가능 | `coil:0`      |
| `discrete`   | BOOL            | 읽기 전용 | `discrete:5`  |
| `holding`    | INT, DINT, REAL | 쓰기 가능 | `holding:100` |
| `input`      | INT, DINT, REAL | 읽기 전용 | `input:200`   |
| {% endtab %} |                 |       |               |

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

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

| 주소              | 유형                 | 설명                    |
| --------------- | ------------------ | --------------------- |
| `DB1.DBX0.0`    | BOOL               | 데이터 블록 1의 바이트 0의 비트 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에서 최적화된 블록 액세스를 비활성화하세요.
{% 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을 활성화하고 최적화된 블록 액세스를 비활성화하세요 |
| "Function refused" (Siemens S7)     | TIA Portal에서 PUT/GET이 비활성화되어 있거나 대상 DB에서 최적화된 블록 액세스가 활성화되어 있음                            |
| REAL 값이 쓰레기로 읽힘(Modbus)             | 반대쪽 Word Order(big vs. 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:

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

The question should be specific, self-contained, and written in natural language.
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.
