{"slug": "integrate-roboflow-with-opc-ua", "title": "Integrate Roboflow with OPC UA", "summary": "Roboflow released a guide for integrating its computer vision workflows with OPC UA servers, enabling detection data to be written as live tags accessible to PLCs, SCADA, and dashboards. The process requires a Roboflow Enterprise plan and involves configuring an inference server with enterprise blocks, setting up destination tags on an OPC UA server, and using a Property Definition block to convert predictions into single values for each tag. The integration allows vision detections to function alongside other plant sensors in industrial automation systems.", "body_md": "This guide shows how to push [Roboflow Workflow](https://roboflow.com/workflows/build?ref=blog.roboflow.com) detections to an [OPC UA](https://en.wikipedia.org/wiki/OPC_Unified_Architecture?ref=blog.roboflow.com) server, making them available as live tags to dashboards, [PLCs](https://blog.roboflow.com/programmable-logic-controller/), and [SCADA](https://blog.roboflow.com/what-is-scada/) platforms alongside any other plant sensor.\n\n## Prerequisites\n\n**Roboflow Enterprise plan**— the OPC UA Writer Sink is enterprise-only** Docker Desktop****An existing OPC UA server**— Ignition, Kepware, or any standards-compliant server. (No server yet? Roboflow's edge devices ship with a built-in OPC UA server you can use for testing, covered in Step 2.)\n\n## Step 1: Start the inference server with enterprise blocks enabled\n\nEnterprise blocks (including the OPC UA Writer Sink) aren’t loaded by default. Without this step, the block shows “Server Configuration Required” in the workflow editor and never runs.\n\n```\n# 1. Create and activate a virtual environment\npython -m venv venv\nsource venv/bin/activate\n\n# 2. Install inference (pulls enterprise blocks + dependencies)\npip install inference\n\n# 3. Create .env with the critical flag\necho \"LOAD_ENTERPRISE_BLOCKS=True\" > .env\n\n# 4. Launch the inference server\ninference server start -e .env\n```\n\nThe `inference server start`\n\ncommand auto-detects your hardware and pulls the matching image: CPU on most laptops, GPU when CUDA is available (Jetson, NVIDIA-equipped server).\n\n## Step 2: Configure folders and tags on your OPC UA server\n\nBefore the workflow can write anything, the destination tags need to exist on your OPC UA server. Use the server’s native interface to create them:\n\n**Ignition**— open Designer, navigate to your tag provider, right-click → New Tag. Default port:`62541`\n\n.**Kepware**— use the Configuration tool to add tags under a channel/device** Other servers**— follow your vendor’s documentation\n\nCollect three pieces of info you’ll need in Step 4:\n\n- The\n**endpoint URL**(e.g.,`opc.tcp://<server-host>:62541`\n\n) - The\n**namespace**(URI string or numeric index) - The\n**NodeId format** the server uses. String-based NodeIds (Ignition-style) require`Node Lookup Mode: direct`\n\nin the workflow block.\n\nThe data type on each tag must match the Value Type field on the workflow block.\n\n### Alternative: use Roboflow’s built-in OPC UA server\n\nIf you don’t have an OPC UA server already, Roboflow’s edge devices ship with one you can add as a managed service. This path requires the Roboflow **Deployment Manager**, which is an Enterprise feature. On a [Roboflow-managed edge device](https://docs.roboflow.com/deploy/device-manager/setting-up/add-a-device?ref=blog.roboflow.com):\n\n- From the device dashboard, click\n**Add Service**→ select** OPC UA Server**→ submit - On the OPC UA Server card that appears, click\n**Configure** - Note the\n**Namespace URI**(defaults to`http://opcua.roboflow.run`\n\n) **+ Add Folder**, then**+ Add Tag** inside it (set the data type to match what the workflow will write)- Click\n**Save Configuration**\n\nUse the endpoint URL on the card (`opc.tcp://<device-ip>:4840/opcua/server`\n\n) in your workflow.\n\n## Step 3: Build the workflow\n\nImage input → Model → (Optional Filter) → Property Definition → OPC UA Writer Sink\n\nThe **Property Definition** block reduces predictions to a single value that OPC UA can store, like a count or a boolean. Each value gets its own OPC UA Writer Sink block: one block per tag.\n\n**Tag names must match exactly.** Folder, tag name, casing, and separators all matter. A mismatch (e.g., person_present vs Person_present, or / when the server expects .) returns BadNoMatch and silently drops the write.\n\n## Step 4: Configure the OPC UA Writer Sink block\n\n| Field | Value |\n|---|---|\nURL |\nURL of the OPC UA server to which data will be written. |\nNamespace |\nThe OPC UA namespace URI or index used to locate objects and variables. For Roboflow's built-in OPC UA server: `http://opcua.roboflow.run` . |\nObject Name |\nFor Ignition / string-NodeId servers: the bracketed parent path (e.g., `[Sample_Tags]/Production` ). For Roboflow's built-in OPC UA server: the full `folder.tag` path (e.g., `production.defect_count` ). |\nVariable Name |\nThe name of the variable within the target object to be updated. For Ignition / string-NodeId servers: the tag name. For Roboflow's built-in OPC UA server: empty (the full path went in Object Name). |\nValue |\nThe value to be written to the target variable on the OPC UA server. `$steps.<property_definition_step>.output` |\nValue Type |\nThe type of the value to be written to the target variable on the OPC UA server. Must match the tag's declared type on the server. Supported types: `Boolean` , `Double` , `Float` , `Int16` , `Int32` , `Int64` , `Integer` (Int64 alias), `SByte` , `String` , `UInt16` , `UInt32` , `UInt64` . |\nNode Lookup Mode |\nMethod to locate the OPC UA node: `hierarchical` uses path navigation, `direct` uses NodeId strings (for Ignition-style string-based tags). |\nCooldown Seconds |\nThe minimum number of seconds to wait between consecutive updates to the OPC UA server. |\n\nKeep **Fire And Forget** off (`False`\n\n) while you're setting things up. It surfaces real errors in the `error_status`\n\noutput. Turn it on for production.\n\n## Step 5: Deploy and verify\n\nIn the workflow editor, click **Deploy → Local Server**, enter `http://localhost:9001`\n\n(or your inference server's address), and click **Connect**. Run an image through the deployed workflow, or if you're on a Roboflow edge device, point a camera stream at it from the device dashboard.\n\nRun the workflow against a test image. If everything is wired correctly:\n\n- The OPC UA Writer Sink block's\n`error_status`\n\noutput is`False`\n\n- Its message output says the write succeeded\n- The tag value updates on your OPC UA server, visible in Ignition Designer, any OPC UA client, or the Roboflow device dashboard (if using the built-in server)\n\n**Testing constraints**\n\n**The inference server must have network access to your OPC UA server.** If they’re on different networks, bridge them via SSH tunneling or Tailscale before testing.**For testing, the easiest setup is running inference on the same network as your OPC UA server**\n\n**Cite this Post**\n\nUse the following entry to cite this post in your research:\n\n[Kevin Seyedan](/author/kevin/). (May 21, 2026).\nIntegrate Roboflow with OPC UA. Roboflow Blog: https://blog.roboflow.com/roboflow-opc-ua-integration/", "url": "https://wpnews.pro/news/integrate-roboflow-with-opc-ua", "canonical_source": "https://blog.roboflow.com/roboflow-opc-ua-integration/", "published_at": "2026-05-21 15:18:55+00:00", "updated_at": "2026-05-29 13:02:57.397030+00:00", "lang": "en", "topics": ["computer-vision", "artificial-intelligence", "machine-learning", "ai-infrastructure", "robotics"], "entities": ["Roboflow", "OPC UA", "Docker Desktop", "Ignition", "Kepware", "SCADA", "PLC", "NVIDIA"], "alternates": {"html": "https://wpnews.pro/news/integrate-roboflow-with-opc-ua", "markdown": "https://wpnews.pro/news/integrate-roboflow-with-opc-ua.md", "text": "https://wpnews.pro/news/integrate-roboflow-with-opc-ua.txt", "jsonld": "https://wpnews.pro/news/integrate-roboflow-with-opc-ua.jsonld"}}