> 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/deployment/hi/self-hosted/enterprise/deployment-manager/services/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 सेवा जोड़ते या संपादित करते समय, आप तीन प्रोटोकॉल में से एक चुनते हैं। प्रत्येक प्रोटोकॉल की अपनी कनेक्शन सेटिंग्स और टैग प्रारूप होता है।

<table data-header-hidden data-search="false"><thead><tr><th></th><th></th><th></th><th></th></tr></thead><tbody><tr><td>प्रोटोकॉल</td><td><code>PLC_DRIVER</code></td><td>PLC</td><td>डिफ़ॉल्ट पोर्ट</td></tr><tr><td>Allen-Bradley (EtherNet/IP)</td><td><code>allen_bradley</code></td><td>CompactLogix, ControlLogix, Micro800</td><td>44818</td></tr><tr><td>Modbus TCP</td><td><code>modbus</code></td><td>कोई भी Modbus TCP डिवाइस</td><td>502</td></tr><tr><td>Siemens S7</td><td><code>siemens_s7</code></td><td>S7-300, S7-400, S7-1200, S7-1500</td><td>102</td></tr></tbody></table>

{% 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` | बूलियन                      | `सत्य` / `असत्य`                |
| `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 एक गैर-ऋणात्मक पूर्णांक है।

| एरिया        | प्रकार(ों)      | पहुंच       | उदाहरण        |
| ------------ | --------------- | ----------- | ------------- |
| `कॉइल`       | 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               | डेटा ब्लॉक 1 में byte 0 का bit 0 |
| `DB1.DBW0`      | INT                | DB1 में 16-बिट word              |
| `DB1.DBD0`      | DINT या REAL       | DB1 में 32-बिट double-word       |
| `M0.0`          | BOOL               | Merker बिट                       |
| `I0.0` / `Q0.0` | BOOL               | प्रक्रिया इनपुट/आउटपुट बिट       |
| `MW0` / `MD0`   | INT / DINT या REAL | Merker word / double-word        |

S7-1200/1500 के लिए: TIA Portal में PUT/GET सक्षम करें और एक्सेस किए गए DBs पर optimized block access अक्षम करें।
{% endtab %}
{% endtabs %}

## वेब डैशबोर्ड

PLC Relay में टैग मानों की वास्तविक समय में निगरानी के लिए एक बिल्ट-इन वेब डैशबोर्ड शामिल है। सेवा चलने के बाद, इसे यहाँ एक्सेस करें `http://<device-ip>:8007`.

डैशबोर्ड पर यहाँ इंटरैक्टिव Swagger दस्तावेज़ीकरण भी होस्ट किया गया है `/docs` और यहाँ एक विज़ुअल कॉन्फ़िग बिल्डर भी है `/static/config-builder.html`.

## HTTP API

API HTTP के माध्यम से कॉन्फ़िगर किए गए टैग पढ़ता और लिखता है, इसलिए एक पाइपलाइन Allen-Bradley EtherNet/IP, Modbus TCP, या Siemens S7 से सीधे बात किए बिना PLC डेटा का आदान-प्रदान कर सकती है। Base URL है `http://<device-ip>:8007`और API में प्रमाणीकरण नहीं है। देखें [Services](/deployment/hi/self-hosted/enterprise/deployment-manager/services.md#using-the-apis) डिवाइस पर चलने वाली सभी सेवा APIs द्वारा साझा किए गए नियमों के लिए।

टैग सेवा के `PLC_TAGS` environment variable से आते हैं और API के माध्यम से बनाए या बदले नहीं जा सकते। केवल मान लिखे जा सकते हैं, और केवल उन टैगों के लिए जो लिखने योग्य के रूप में कॉन्फ़िगर किए गए हैं।

### स्टेटस कोड पर भरोसा करने से पहले पढ़ें

जो अनुरोध सेवा तक पहुँचता है लेकिन PLC पर विफल हो जाता है, वह लौटाता है `200`। बॉडी जाँचें:

* `/read` लौटाता है `value: null` के साथ `error` भरा हुआ।
* `/write` लौटाता है `success: false` के साथ `error` भरा हुआ।
* `/healthz` लौटाता है `plc_connected: false`.

वास्तविक `4xx` प्रतिक्रियाओं का अर्थ है कि अनुरोध स्वयं गलत था: `404` ऐसे टैग के लिए जो कॉन्फ़िगर नहीं है, `403` ऐसे टैग के लिए जो केवल-पठन के रूप में कॉन्फ़िगर है, `400` खाली batch या write batch में डुप्लिकेट टैग नाम के लिए, `422` ऐसे body या query parameter के लिए जो validation में विफल हो जाता है।

### स्वास्थ्य और सत्यापन

`/healthz` सक्रिय ड्राइवर, relay live में है या `लाइव` या `सिमुलेशन` मोड में है, और नवीनतम टैग सत्यापन सारांश भी रिपोर्ट करता है। सत्यापन प्रत्येक कॉन्फ़िगर किए गए टैग की PLC से तुलना करता है और उसे `ठीक`, `not_found`, `type_mismatch`या `not_validated`.

{% openapi src="/files/c6ff1f914db732e95f3408e8ce75ad7b55b93226" path="/healthz" method="get" %}
[edge-plc-relay.yaml](https://2297977984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-bc81a2258bd5eefa9b64b301eac0797c0f01e796%2Fedge-plc-relay.yaml?alt=media)
{% endopenapi %}

PLC प्रोग्राम परिवर्तन या पुनः कनेक्शन के बाद सत्यापन फिर से चलाएँ:

{% openapi src="/files/c6ff1f914db732e95f3408e8ce75ad7b55b93226" path="/validate" method="post" %}
[edge-plc-relay.yaml](https://2297977984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-bc81a2258bd5eefa9b64b301eac0797c0f01e796%2Fedge-plc-relay.yaml?alt=media)
{% endopenapi %}

### टैग परिभाषाएँ

टैग नाम सक्रिय ड्राइवर के प्रारूप में PLC पते होते हैं, जैसा कि [टैग नाम प्रारूप](#tag-name-formats).

{% openapi src="/files/c6ff1f914db732e95f3408e8ce75ad7b55b93226" path="/schema" method="get" %}
[edge-plc-relay.yaml](https://2297977984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-bc81a2258bd5eefa9b64b301eac0797c0f01e796%2Fedge-plc-relay.yaml?alt=media)
{% endopenapi %}

### मान पढ़ें और लिखें

```bash
curl "http://<device-ip>:8007/read?tag=Station1.CycleCount"

curl -X POST http://<device-ip>:8007/write \\
  -H "Content-Type: application/json" \\
  -d '{"name": "Station1.CycleCount", "value": 42}'
```

{% openapi src="/files/c6ff1f914db732e95f3408e8ce75ad7b55b93226" path="/all\_tags" method="get" %}
[edge-plc-relay.yaml](https://2297977984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-bc81a2258bd5eefa9b64b301eac0797c0f01e796%2Fedge-plc-relay.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/c6ff1f914db732e95f3408e8ce75ad7b55b93226" path="/read" method="get" %}
[edge-plc-relay.yaml](https://2297977984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-bc81a2258bd5eefa9b64b301eac0797c0f01e796%2Fedge-plc-relay.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/c6ff1f914db732e95f3408e8ce75ad7b55b93226" path="/write" method="post" %}
[edge-plc-relay.yaml](https://2297977984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-bc81a2258bd5eefa9b64b301eac0797c0f01e796%2Fedge-plc-relay.yaml?alt=media)
{% endopenapi %}

### बैच ऑपरेशंस

दोनों batch endpoints कुछ भी चलने से पहले एक इकाई के रूप में validation करते हैं, इसलिए कोई अज्ञात टैग पूरे अनुरोध को अस्वीकार कर देता है, partial results लौटाने के बजाय।

`/write_batch` ऐसे batch को भी अस्वीकार करता है जो एक ही टैग को दो बार नामित करता है, क्योंकि दोहराए गए नाम के लिए केवल अंतिम मान रखना पहले के writes को चुपचाप हटा देगा। `/read_batch` डुप्लिकेट स्वीकार करता है और आपके भेजने के क्रम में प्रत्येक entry के लिए एक परिणाम लौटाता है।

validation के बाद होने वाली PLC विफलताएँ write\_batch के results में प्रति entry रिपोर्ट की जाती हैं, साथ में `write_batch`का `results`के साथ `success_count` और `error_count` बैच का सारांश देते हैं।

```bash
curl -X POST http://<device-ip>:8007/read_batch \\
  -H "Content-Type: application/json" \\
  -d '{"tags": ["Station1.PartPresent", "Station1.CycleCount"]}'
```

{% openapi src="/files/c6ff1f914db732e95f3408e8ce75ad7b55b93226" path="/read\_batch" method="post" %}
[edge-plc-relay.yaml](https://2297977984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-bc81a2258bd5eefa9b64b301eac0797c0f01e796%2Fedge-plc-relay.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/c6ff1f914db732e95f3408e8ce75ad7b55b93226" path="/write\_batch" method="post" %}
[edge-plc-relay.yaml](https://2297977984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-bc81a2258bd5eefa9b64b301eac0797c0f01e796%2Fedge-plc-relay.yaml?alt=media)
{% endopenapi %}

## CLI

The `plc-cli` टूल टैग पढ़ने और लिखने के लिए एक इंटरैक्टिव टर्मिनल इंटरफ़ेस देता है। जब वेब डैशबोर्ड उपलब्ध न हो, तब डिबगिंग और त्वरित संचालन के लिए इसका उपयोग करें। यह कंटेनर के अंदर चलने वाला एक स्थानीय क्लाइंट है, जो उसी HTTP API के विरुद्ध काम करता है जिसका उपयोग डैशबोर्ड करता है।

```bash
docker exec -it plc-relay plc-cli
```

<table data-search="false"><thead><tr><th>कुंजी</th><th>क्रिया</th></tr></thead><tbody><tr><td><code>R</code></td><td>सभी टैग मान पढ़ें</td></tr><tr><td><code>T</code></td><td>सूची से चुने गए एक टैग को पढ़ें</td></tr><tr><td><code>W</code></td><td>लिखने योग्य टैगों में से चुने गए टैग को लिखें</td></tr><tr><td><code>S</code></td><td>टैग स्कीमा दिखाएँ</td></tr><tr><td><code>H</code></td><td>विस्तृत स्वास्थ्य स्थिति दिखाएँ</td></tr><tr><td><code>V</code></td><td>PLC के विरुद्ध टैग सत्यापन चलाएँ</td></tr><tr><td><code>Enter</code></td><td>प्रदर्शन ताज़ा करें</td></tr><tr><td><code>Q</code></td><td>बंद करें</td></tr></tbody></table>

## पर्यावरण चर

Configure modal इन्हें आपके लिए लिखता है। इन्हें सीधे तभी संपादित करें जब deployment हाथ से प्रबंधित किया गया हो। देखें [डिवाइस कॉन्फ़िगरेशन अपडेट करें](/deployment/hi/self-hosted/enterprise/deployment-manager/making-changes/update-device-configuration.md).

<table data-search="false"><thead><tr><th>चर</th><th>डिफ़ॉल्ट</th><th>विवरण</th></tr></thead><tbody><tr><td><code>PLC_DRIVER</code></td><td>कोई नहीं</td><td><code>allen_bradley</code>, <code>modbus</code>या <code>siemens_s7</code></td></tr><tr><td><code>PLC_IP</code></td><td>कोई नहीं</td><td>चुने गए ड्राइवर के प्रारूप में PLC पता</td></tr><tr><td><code>PLC_TAGS</code></td><td>कोई नहीं</td><td>JSON के रूप में टैग परिभाषाएँ। यहाँ स्थित कॉन्फ़िग बिल्डर <code>/static/config-builder.html</code> इसे जनरेट करता है</td></tr><tr><td><code>SIMULATION_MODE</code></td><td>बंद</td><td>वास्तविक PLC के बजाय इन-मेमोरी सिम्युलेटर का उपयोग करें</td></tr><tr><td><code>LOG_LEVEL</code></td><td><code>INFO</code></td><td>लॉगिंग की विस्तृतता: <code>DEBUG</code>, <code>INFO</code>, <code>WARNING</code>या <code>ERROR</code></td></tr></tbody></table>

ड्राइवर-विशिष्ट सेटिंग्स:

<table data-search="false"><thead><tr><th>ड्राइवर</th><th>चर</th><th>सीमा</th><th>डिफ़ॉल्ट</th></tr></thead><tbody><tr><td>Modbus</td><td><code>MODBUS_UNIT_ID</code></td><td>0 से 255</td><td><code>1</code></td></tr><tr><td>Modbus</td><td><code>MODBUS_WORD_ORDER</code></td><td><code>big</code> या <code>little</code></td><td><code>big</code></td></tr><tr><td>Siemens S7</td><td><code>S7_RACK</code></td><td>0 से 7</td><td><code>0</code></td></tr><tr><td>Siemens S7</td><td><code>S7_SLOT</code></td><td>0 से 31</td><td><code>1</code></td></tr></tbody></table>

## कनेक्शन मॉनिटरिंग

डिवाइस पृष्ठ पर वर्तमान कनेक्शन स्थिति, सक्रिय प्रोटोकॉल, और नवीनतम टैग मानों वाला एक लाइव PLC Relay स्थिति कार्ड दिखता है। जब relay PLC तक नहीं पहुँच पाता, तो कार्ड एक unreachable बैनर दिखाता है।

जब कोई relay कनेक्टिविटी खो दे, तब सूचना पाने के लिए डिवाइस के "Device Alerts" टैब से एक "PLC Disconnected" अलर्ट जोड़ें। देखें [डिवाइस अलर्ट सेट करें](/deployment/hi/self-hosted/enterprise/deployment-manager/setting-up/set-up-device-alerts.md).

## समस्या निवारण

| लक्षण                                | समाधान                                                                                                                        |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| "PLC कनेक्ट नहीं है" (Allen-Bradley) | PLC पता प्रारूप (IP/Slot) सत्यापित करें, देखें कि port 44818 पहुँच योग्य है                                                   |
| "PLC कनेक्ट नहीं है" (Modbus)        | IP/port (डिफ़ॉल्ट 502) जाँचें और पुष्टि करें कि Unit ID डिवाइस से मेल खाता है                                                 |
| "PLC कनेक्ट नहीं है" (Siemens S7)    | IP/port (डिफ़ॉल्ट 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 प्रोग्राम जाँचें (case-sensitive)                                                                     |
