OPC UA सर्वर
डिवाइस डेटा को OPC UA tags के रूप में प्रदर्शित करें जिन्हें PLCs, SCADA systems, और अन्य औद्योगिक clients पढ़ और लिख सकते हैं।
OPC UA (Open Platform Communications Unified Architecture) एक औद्योगिक संचार प्रोटोकॉल है जो डिवाइसों, PLCs, और SCADA प्रणालियों के बीच डेटा का आदान-प्रदान करता है। OPC UA Server एक एज कंटेनर सेवा है जो डिवाइस पर टैग प्रकाशित करती है ताकि औद्योगिक क्लाइंट inference results पढ़ सकें और मान वापस लिख सकें।
आप Deployment Manager Configuration टैब से टैग, फ़ोल्डर, और सर्वर सेटिंग्स परिभाषित करते हैं, फिर अपने OPC UA क्लाइंट को डिवाइस की ओर इंगित करते हैं।
कनेक्शन विवरण
बदलें <device-ip> को Deployment Manager में डिवाइस पेज पर दिखाए गए IP पते से बदलें।
OPC UA एंडपॉइंट
opc.tcp://<device-ip>:4840/opcua/server
वेब UI और REST API
http://<device-ip>:8092
4840
OPC UA बाइनरी
औद्योगिक क्लाइंट कनेक्शन (PLCs, SCADA)
8092
HTTP
वेब UI, REST API, दस्तावेज़ीकरण
कॉन्फ़िगरेशन स्रोत
Configure मोडल के शीर्ष पर मौजूद "Configuration Source" टॉगल नियंत्रित करता है कि टैग और फ़ोल्डर कॉन्फ़िगरेशन कहाँ से आता है। डिवाइस पर एक समय में केवल एक ही स्रोत सक्रिय रहता है।
"Web UI"
OPCUA_CONFIG
जब आप मोडल में ही टैग, फ़ोल्डर, और सर्वर सेटिंग्स को इनलाइन परिभाषित करना चाहते हैं। यह डिफ़ॉल्ट है।
"File"
OPCUA_CONFIG_FILE
कॉन्फ़िगरेशन किसी environment variable के लिए बहुत बड़ा है, जैसे हजारों टैग वाला deployment। सर्वर को डिवाइस पर किसी पथ की ओर इंगित करें (उदा.: /data/opcua-config.json).
"File" मोड में सर्वर स्टार्टअप पर सत्यापित करता है कि फ़ाइल मौजूद है, पढ़ने योग्य है, और खाली नहीं है, और यदि इनमें से कोई भी सच नहीं है तो एक स्पष्ट log entry के साथ शुरू होने में विफल रहता है। OPCUA_CONFIG_FILE से अधिक प्राथमिकता रखता है OPCUA_CONFIG.
स्रोत बदलते समय, मोडल खुला रहने पर इनलाइन मान और फ़ाइल पथ दोनों बने रहते हैं। सेव करने पर, जिस स्रोत को आपने नहीं चुना था उसे साफ़ कर दिया जाता है, इसलिए दोनों में से ठीक एक variable सेट रहता है। "File" मोड में service card इनलाइन टैग सूची के स्थान पर कॉन्फ़िगर किया गया फ़ाइल पथ दिखाती है।
सर्वर सेटिंग्स
"Server Name"
सर्वर instance के लिए मानव-पठनीय नाम, जो नेटवर्क ब्राउज़ करने वाले क्लाइंट्स को दिखता है।
"Namespace URI"
टैग जिनके अंतर्गत पंजीकृत होते हैं, उस सर्वर namespace की पहचान करने वाला अद्वितीय URI। डिफ़ॉल्ट रूप से http://opcua.roboflow.run.
"Max Sessions"
एक साथ कितने OPC UA क्लाइंट जुड़े रह सकते हैं। डिफ़ॉल्ट रूप से 200.
हर क्लाइंट एक सत्र रखता है, जिसमें प्रत्येक inference pod द्वारा टैग लिखना और प्रत्येक SCADA कनेक्शन शामिल है। किसी crashed client का सत्र तभी मुक्त होता है जब सर्वर उसका टाइमआउट कर देता है, इसलिए व्यस्त साइट पर live clients की तुलना में अधिक sessions हो सकते हैं। जब सीमा पहुँच जाती है, आगे के क्लाइंट्स को BadTooManySessions के साथ अस्वीकार कर दिया जाता है और उनके टैग अपडेट होना बंद हो जाते हैं। यदि कोई साइट डिफ़ॉल्ट से अधिक concurrent clients चलाती है, तो मान बढ़ाएँ। मोडल में इसे सेट करने पर यह server config में लिखा जाता है, और OPCUA_MAX_SESSIONS हाथ से प्रबंधित deployments के लिए इसे प्रति डिवाइस ओवरराइड कर सकता है। BadTooManySessions और उनके टैग अपडेट होना बंद हो जाते हैं। यदि कोई साइट डिफ़ॉल्ट से अधिक concurrent clients चलाती है, तो मान बढ़ाएँ। मोडल में इसे सेट करने पर यह server config में लिखा जाता है, और OPCUA_MAX_SESSIONS हाथ से प्रबंधित deployments के लिए इसे प्रति डिवाइस ओवरराइड कर सकता है।
फ़ोल्डर और टैग
फ़ोल्डर टैग्स को एक पदानुक्रम में व्यवस्थित करते हैं। प्रत्येक फ़ोल्डर का एक नाम और एक वैकल्पिक विवरण होता है, और OPC UA address space में एक node के रूप में दिखाई देता है ताकि क्लाइंट्स टैग्स को ब्राउज़ और खोज सकें। कोई टैग किसी फ़ोल्डर से संबंधित हो सकता है या root स्तर पर रह सकता है।
टैग उन डेटा बिंदुओं को परिभाषित करते हैं जिन्हें सर्वर एक्सपोज़ करता है। प्रत्येक टैग में ये फ़ील्ड होते हैं:
"Display Name"
OPC UA क्लाइंट्स को दिखने वाला मानव-पठनीय नाम।
"Browse Name"
address space में उपयोग किया जाने वाला प्रोग्रामेटिक पहचानकर्ता। Display name से जनरेट किया जाता है।
"Data Type"
टैग में मौजूद मान का प्रकार।
"Access Level"
क्या टैग ReadWrite या ReadOnly.
"Folder"
टैग किस फ़ोल्डर से संबंधित है, या यदि असाइन नहीं है तो Root।
"Initial Value"
सर्वर शुरू होने पर प्रारंभिक मान। डेटा प्रकार के विरुद्ध सत्यापित किया जाता है।
"Description"
टैग किस काम के लिए है, उसका वैकल्पिक लेबल।
डेटा प्रकार
बूलियन
सही या गलत
true
Int32
32-बिट साइन किया हुआ पूर्णांक
42
फ़्लोट
32-बिट फ़्लोटिंग-पॉइंट
3.14
डबल
64-बिट फ़्लोटिंग-पॉइंट
3.14159265359
स्ट्रिंग
UTF-8 पाठ
चल रहा है
DateTime
ISO 8601 समय-मुद्रा
2024-01-15T10:30:00Z
ये वे प्रकार हैं जो Configure मोडल प्रदान करता है। हाथ से लिखी गई कॉन्फ़िगरेशन फ़ाइल भी Int16, UInt16, और UInt32, का उपयोग कर सकती है, जिन्हें सर्वर स्वीकार करता है।
एक्सेस स्तर
ReadWrite टैग्स को OPC UA क्लाइंट्स के साथ-साथ REST API, CLI, और वेब UI द्वारा पढ़ा और लिखा जा सकता है। इन्हें कंट्रोल आउटपुट, सेटपॉइंट, और उपयोगकर्ता द्वारा समायोज्य मानों के लिए उपयोग करें।
ReadOnly टैग OPC UA क्लाइंट के लेखन को BadNotWritableके साथ अस्वीकार करते हैं। REST API, CLI, और वेब UI फिर भी access level की परवाह किए बिना मान अपडेट कर सकते हैं, इसलिए ReadOnly सेंसर मानों, गणना किए गए आउटपुट, और उस system status के लिए उपयोग करें जिसे केवल डिवाइस को उत्पन्न करना चाहिए।
वैकल्पिक बाधाएँ
संख्यात्मक प्रकार "Min Value" और "Max Value" का समर्थन करते हैं ताकि अनुमत सीमा को सीमित किया जा सके, साथ ही वर्णनात्मक इकाई लेबल के लिए "Engineering Units" भी (उदा.: °C, PSI, RPM)। String प्रकार वर्णों की संख्या सीमित करने के लिए "Max Length" का समर्थन करते हैं।
प्रमाणीकरण
सर्वर डिफ़ॉल्ट रूप से SecurityPolicy None का उपयोग करते हुए anonymous connections की अनुमति देता है। प्रत्येक क्लाइंट से username और password की आवश्यकता के लिए Configure modal में "Require authentication" चालू करें।
जब टॉगल चालू हो, तो आपको username और password दोनों देने होंगे। पासवर्ड bcrypt से hash किया जाता है इससे पहले कि उसे संग्रहीत किया जाए, इसलिए मूल पासवर्ड कभी सहेजा नहीं जाता और बाद में पुनः प्राप्त नहीं किया जा सकता। मौजूदा सर्वर पर पासवर्ड बदलने के लिए, Configure modal में नया पासवर्ड दर्ज करें, या वर्तमान पासवर्ड बनाए रखने के लिए फ़ील्ड खाली छोड़ दें। टॉगल बंद करने पर anonymous access बहाल हो जाता है।
क्रेडेंशियल्स दो environment variables के रूप में संग्रहीत होते हैं, जिन्हें या तो साथ-साथ सेट होना चाहिए या दोनों को अनसेट छोड़ा जाना चाहिए:
OPCUA_USERNAME
क्लाइंट प्रमाणीकरण के लिए सादा-पाठ username।
OPCUA_PASSWORD_HASH
10 salt rounds पर पासवर्ड का bcrypt hash, जो शुरू होता है $2b$10$.
टैग रिपोर्टिंग
सर्वर निर्धारित समय पर अपने टैग Roboflow को रिपोर्ट कर सकता है, ताकि आप साइट विज़िट के बिना देख सकें कि वह क्या सर्व करता है। इसे Configure modal के "Tag Reporting" सेक्शन में सेट करें।
"Send periodic tag reports"
रिपोर्टिंग को चालू या बंद करता है। डिफ़ॉल्ट रूप से चालू।
"Include tag values"
प्रत्येक टैग का वर्तमान मान भेजता है। केवल टैग counts भेजने के लिए इसे बंद करें। डिफ़ॉल्ट रूप से चालू।
"Reporting Interval"
रिपोर्टों के बीच सेकंड। डिफ़ॉल्ट 60।
सेटिंग्स environment variables के रूप में संग्रहीत होती हैं, जिन्हें सर्वर स्टार्टअप पर पढ़ता है:
OPCUA_SNAPSHOT_INTERVAL_SECONDS
60
रिपोर्टों के बीच सेकंड। 0 रिपोर्टिंग बंद करता है।
OPCUA_SNAPSHOT_INCLUDE_VALUES
true
false केवल टैग counts भेजता है।
OPCUA_SNAPSHOT_TTL_SECONDS
व्युत्पन्न
कोई रिपोर्ट कितनी देर तक वर्तमान रहती है। Modal इसे interval से व्युत्पन्न करता है और हर बार सेव करने पर इसे फिर से लिखता है।
सर्वर जिस मान को स्वीकार नहीं करता वह डिफ़ॉल्ट पर वापस जाने के बजाय रिपोर्टिंग बंद कर देता है, इसलिए एक टाइपो रिपोर्टों को रोक देता है। डिवाइस पेज ऐसे डिवाइस को not reporting के रूप में दिखाता है।
यदि इनमें से कोई भी variable reference द्वारा सेट है ({$ref}), तो modal रिपोर्टिंग को संपादित नहीं कर सकता और सेव करने पर इसे जैसा है वैसा ही छोड़ देता है। फॉर्म से रिपोर्टिंग प्रबंधित करने के लिए reference को literal value से बदलें।
निगरानी
डिवाइस पेज एक लाइव OPC UA स्थिति कार्ड दिखाता है जिसमें जुड़े हुए क्लाइंट्स की संख्या, "Max Sessions" के मुकाबले उपयोग में सत्र, और सबसे हाल की टैग रिपोर्ट शामिल होती है। टैग रिपोर्टिंग से पुराने इमेज पर मौजूद डिवाइस रिपोर्ट के स्थान पर यह बताता है।
जब सर्वर session cap तक पहुँचकर नए क्लाइंट्स को अस्वीकार करता है, तो कार्ड एक बैनर दिखाता है जिसमें session count, cap, और कितने क्लाइंट्स अस्वीकार किए गए थे, यह बताया जाता है। इसके बारे में ईमेल पाने के लिए, डिवाइस के "Device Alerts" टैब से एक "OPC UA Refusing Clients" अलर्ट जोड़ें और पहले कितने मिनट तक अस्वीकृतियाँ होने दें, यह सेट करें। देखें डिवाइस अलर्ट सेट करें.
वेब इंटरफ़ेस
सर्वर पर एक वेब इंटरफ़ेस उपलब्ध है: http://<device-ip>:8092.
डैशबोर्ड
/
सभी कॉन्फ़िगर किए गए टैग उनके वर्तमान मानों के साथ, हर 2 सेकंड में रिफ़्रेश होते हैं। किसी भी टैग का मान उसके access level की परवाह किए बिना, एक edit dialog के माध्यम से संपादित किया जा सकता है।
दस्तावेज़ीकरण
/docs.html
सर्वर गाइड, कॉन्फ़िगरेशन फ़ॉर्मेट संदर्भ, और समस्या-समाधान नोट्स।
API एक्सप्लोरर
/api/docs
एंडपॉइंट्स का परीक्षण करने और अनुरोध तथा प्रतिक्रिया schema देखने के लिए इंटरैक्टिव Swagger UI।
HTTP API
REST API टैग मानों और सर्वर जानकारी तक प्रोग्रामेटिक पहुँच देता है। सभी एंडपॉइंट JSON लौटाते हैं। बेस URL है http://<device-ip>:8092/api. देखें सेवाएँ डिवाइस पर मौजूद सभी सेवा APIs द्वारा साझा किए गए नियमों के लिए।
टैग संरचना रनटाइम पर अपरिवर्तनीय होती है। टैग और फ़ोल्डर आते हैं OPCUA_CONFIG environment variable से, या उस फ़ाइल से जिसका नाम OPCUA_CONFIG_FILE बड़ी कॉन्फ़िगरेशनों के लिए, और इस API के माध्यम से बनाए, बदले, या हटाए नहीं जा सकते। केवल मान लिखे जा सकते हैं।
टैग मान पढ़ें और लिखें
accessLevel OPC UA प्रोटोकॉल को नियंत्रित करता है, इस API को नहीं। जिस टैग को चिह्नित किया गया है ReadOnly OPC UA क्लाइंट्स से लिखने के अनुरोधों को BadNotWritable के साथ अस्वीकार करता है, लेकिन यहाँ अभी भी लिखा जा सकता है, जिससे एक pipeline sensor value प्रकाशित करती है जिसे औद्योगिक क्लाइंट्स को केवल उपभोग करना चाहिए।
Returns all configured tags with their current values.
List of tags with current values
GET /api/tags HTTP/1.1
Host: device-ip:8092
Accept: */*
List of tags with current values
{
"tags": [
{
"id": "text",
"nodeId": "text",
"displayName": "text",
"dataType": "Boolean",
"accessLevel": "ReadOnly",
"currentValue": true,
"lastUpdated": "2026-01-01T00:00:00.000Z",
"folder": "text"
}
]
}Returns a single tag with its current value.
Tag ID
Tag with current value
Tag not found
GET /api/tags/{id} HTTP/1.1
Host: device-ip:8092
Accept: */*
{
"tag": {
"id": "text",
"nodeId": "text",
"displayName": "text",
"dataType": "Boolean",
"accessLevel": "ReadOnly",
"currentValue": true,
"lastUpdated": "2026-01-01T00:00:00.000Z",
"folder": "text"
}
}Updates the value of a tag. Tags with accessLevel: "ReadOnly" reject writes over the OPC UA protocol but remain writable through this endpoint.
Tag ID
New value to set
Updated tag with new value
Missing value, unknown tag, type mismatch, or constraint violation. Note that an unknown tag returns 400 here, not 404. Use GET /tags/{id}, which returns 404, to tell an unknown tag from a bad value.
PUT /api/tags/{id}/value HTTP/1.1
Host: device-ip:8092
Content-Type: application/json
Accept: */*
Content-Length: 14
{
"value": true
}{
"tag": {
"id": "text",
"nodeId": "text",
"displayName": "text",
"dataType": "Boolean",
"accessLevel": "ReadOnly",
"currentValue": true,
"lastUpdated": "2026-01-01T00:00:00.000Z",
"folder": "text"
}
}लिखने का अनुरोध 400 के साथ अस्वीकार किया जाता है जब मान अनुपस्थित हो, प्रकार टैग के dataTypeसे मेल न खाता हो, या वह कॉन्फ़िगर किए गए minValue, maxValue, या maxLengthसे बाहर हो। ऐसे टैग पर लिखना जो मौजूद नहीं है, यह भी लौटाता है 400, न कि 404. GET /tags/{id} वापस देता है 404, इसलिए यदि आपको किसी अज्ञात टैग को एक गलत मान से अलग करना हो तो इसका उपयोग करें।
कॉन्फ़िगरेशन एंडपॉइंट्स
चल रहे कॉन्फ़िगरेशन के केवल-पठन दृश्य, जो लिखने से पहले टैग IDs और उनकी बाधाएँ खोजने के लिए उपयोगी हैं।
Returns the complete server configuration, including server settings, folders, and tag definitions. Read-only.
Full configuration
Configuration version
GET /api/config HTTP/1.1
Host: device-ip:8092
Accept: */*
Full configuration
{
"version": 1,
"server": {
"port": 1,
"namespace": "text",
"serverName": "text",
"maxSessions": 1
},
"folders": [
{
"id": "text",
"name": "text",
"description": "text"
}
],
"tags": [
{
"id": "text",
"nodeId": "text",
"browseName": "text",
"displayName": "text",
"description": "text",
"dataType": "Boolean",
"folderId": "text",
"accessLevel": "ReadOnly",
"initialValue": true,
"engineeringUnits": "text",
"minValue": 1,
"maxValue": 1,
"maxLength": 1
}
]
}सत्र और स्वास्थ्य
एक बार maxSessions तक पहुँच जाता है, तो आगे के क्लाइंट्स को BadTooManySessions, इसलिए तुलना करें sessionCount को maxSessions अतिरिक्त गुंजाइश के लिए।
एक 200 से /subscriptions शून्य सत्र सूची के साथ और maxSessions का अनुपस्थित होना दर्शाता है कि OPC UA सर्वर चल नहीं रहा है। इसे warm-up के बजाय outage मानें: यदि एंडपॉइंट बिल्कुल भी जवाब देता है, तो startup पहले ही पूरा हो चुका है या विफल हो चुका है। इसके साथ पुष्टि करें /health, जो रिपोर्ट करता है status: "unhealthy" और opcuaServer: "stopped".
maxSessions उस स्थिति में शून्य के बजाय अनुपस्थित रहता है ताकि कोई consumer जो गणना करता है maxSessions - sessionCount किसी अज्ञात सीमा को पूर्ण सीमा के रूप में न पढ़े।
Returns the connected OPC UA clients and the tags each one is monitoring. Compare sessionCount against maxSessions for headroom before clients start being refused with BadTooManySessions.
A 200 with a zeroed session list and maxSessions omitted means the OPC UA server is not running. Treat it as an outage rather than a warm-up and confirm with /health. maxSessions is omitted rather than zeroed so a consumer computing maxSessions - sessionCount does not read an unknown cap as a full one.
Sessions and their subscriptions
Number of active sessions
Configured maximum concurrent sessions, for headroom against sessionCount. Omitted when the OPC UA server is not running.
Total number of subscriptions across all sessions
GET /api/subscriptions HTTP/1.1
Host: device-ip:8092
Accept: */*
Sessions and their subscriptions
{
"sessionCount": 1,
"maxSessions": 1,
"subscriptionCount": 1,
"sessions": [
{
"sessionId": "text",
"sessionName": "text",
"clientDescription": "text",
"connectedAt": "2026-01-01T00:00:00.000Z",
"lastContactTime": "2026-01-01T00:00:00.000Z",
"subscriptionCount": 1,
"subscriptions": [
{
"subscriptionId": 1,
"publishingInterval": 1,
"monitoredItemCount": 1,
"monitoredItems": [
{
"nodeId": "text",
"displayName": "text",
"samplingInterval": 1
}
]
}
]
}
]
}/health लौटाता है 200 चाहे OPC UA server चल रहा हो या नहीं। जाँचें status और opcuaServer status code के बजाय।
Returns the health status of the OPC UA server and API.
Health status. Returns 200 even when the OPC UA server is stopped, with status set to unhealthy.
Overall server health status
OPC UA server status
Server uptime in seconds
Number of configured tags
Why the OPC UA server is not running. Present only when opcuaServer is "stopped".
GET /api/health HTTP/1.1
Host: device-ip:8092
Accept: */*
Health status. Returns 200 even when the OPC UA server is stopped, with status set to unhealthy.
{
"status": "healthy",
"opcuaServer": "running",
"uptime": 3600,
"tagCount": 5
}CLI
यह opcua-cli टूल डिबगिंग, scripting, और त्वरित टैग operations के लिए सर्वर तक terminal पहुँच देता है जब वेब UI उपलब्ध न हो।
सूची, ls
वर्तमान मानों के साथ सभी टैग सूचीबद्ध करें
read <tag>
किसी विशिष्ट टैग मान को पढ़ें
write <tag> <value>
किसी टैग में मान लिखें
status
सर्वर स्वास्थ्य और अपटाइम दिखाएँ
clients
जुड़े हुए OPC UA क्लाइंट्स की सूची बनाएं
clients --detailed
सब्सक्रिप्शन विवरण के साथ क्लाइंट्स की सूची बनाएं
export
कॉन्फ़िगरेशन को JSON के रूप में निर्यात करें
लॉगिंग
सेट करें LOG_LEVEL service पर verbosity नियंत्रित करने के लिए। देखें डिवाइस कॉन्फ़िगरेशन अपडेट करें कि सेवा environment variables कहाँ संपादित करने हैं, और डिवाइस लॉग देखें आउटपुट पढ़ने के लिए।
DEBUG
विस्तृत निदान जानकारी
INFO
सामान्य संचालन संदेश (डिफ़ॉल्ट)
WARN
संभावित समस्याएँ जो संचालन नहीं रोकतीं
ERROR
ऐसी त्रुटियाँ जो कार्यक्षमता को प्रभावित करती हैं
मान case-insensitive होते हैं, और कोई अपरिचित मान वापस गिरता है INFO.
अंतिम अपडेट
क्या यह उपयोगी था?