{"id":11022,"date":"2022-03-24T13:08:55","date_gmt":"2022-03-24T13:08:55","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=11022"},"modified":"2025-11-25T10:47:03","modified_gmt":"2025-11-25T10:47:03","slug":"opc-ua","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/help\/opc-ua","title":{"rendered":"OPC UA: the communication protocol for industrial automation applications"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-right-text counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#What-is-OPC-UA\" >What is OPC UA?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#Connecting-with-imperix-controllers-over-OPC-UA\" >Connecting with imperix controllers over OPC UA<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#Connecting-to-the-OPC-UA-server\" >Connecting to the OPC UA server<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#Imperix-system-variables\" >Imperix system variables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#Imperix-methods\" >Imperix methods<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#User-created-OPC-UA-variables\" >User-created OPC UA variables<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#Going-further\" >Going further<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#Making-an-OPC-UA-GUI-client-using-MATLAB\" >Making an OPC UA GUI client using MATLAB<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#Making-an-OPC-UA-GUI-client-using-C\" >Making an OPC UA GUI client using C++<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\/#Making-an-OPC-UA-GUI-client-using-Python\" >Making an OPC UA GUI client using Python<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<p>Imperix relies on the increasingly popular <strong>OPC UA<\/strong> industrial protocol to interact with programmable controllers remotely. To do so, <a href=\"https:\/\/imperix.com\/products\/power-electronic-controllers\/\">imperix controllers<\/a> (or the TPI8032) embed an OPC UA server to communicate with <a href=\"https:\/\/imperix.com\/software\/cockpit\/\">Cockpit<\/a>. A key benefit of employing an open standard such as OPC UA is that is also permits data visualization and command transmission via <strong>third-party client applications<\/strong>.<\/p>\n\n\n\n<p>This page provides guidance for users seeking to implement a custom OPC UA client to connect with the embedded OPC UA server in imperix controllers.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"390\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/OPC-UA-BBox-1.png\" alt=\"OPC UA communication link between a client and a B-Box controller\" class=\"wp-image-12120\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/OPC-UA-BBox-1.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/OPC-UA-BBox-1-300x114.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/OPC-UA-BBox-1-768x293.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-is-opc-ua\"><span class=\"ez-toc-section\" id=\"What-is-OPC-UA\"><\/span>What is OPC UA?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>OPC Unified Architecture (UA) is an open communication standard developed by the <a href=\"https:\/\/opcfoundation.org\/about\/opc-technologies\/opc-ua\/\" target=\"_blank\" rel=\"noreferrer noopener\">OPC Foundation<\/a> targeting industrial automation. This Ethernet-based protocol allows clients to remotely control OPC UA compatible devices from various vendors. OPC UA is designed to be a secure industrial communication and supports signed and encrypted communication as well as user authentication. <\/p>\n\n\n\n<p>Thanks to the openness of OPC UA, a multitude of resources and libraries are available online, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.unified-automation.com\/solutions.html\">Official tools and SDK from Unified Automation<\/a>: High Perf C99, ANSI C, C++, .NET C#, Java, Delphi <\/li>\n\n\n\n<li><a href=\"https:\/\/fr.mathworks.com\/products\/industrial-communication.html\">MATLAB Industrial Communication Toolbox<\/a>, also covered in <a href=\"https:\/\/imperix.com\/doc\/implementation\/opc-ua-toolbox-for-matlab-and-simulink\">PN178<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/open62541.org\/\">open62541<\/a>: open-source C implementation<\/li>\n\n\n\n<li><a href=\"https:\/\/node-opcua.github.io\/\">NodeOPCUA<\/a>: Javascript or Typescript for NodeJS<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/FreeOpcUa\">Freeopcua Python<\/a>: with a simple <a href=\"https:\/\/github.com\/FreeOpcUa\/opcua-client-gui\">GUI client example<\/a> made using PyQT 5<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-monitoring-an-imperix-controller-using-opc-ua\"><span class=\"ez-toc-section\" id=\"Connecting-with-imperix-controllers-over-OPC-UA\"><\/span>Connecting with imperix controllers over OPC UA<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><a href=\"https:\/\/imperix.com\/software\/cockpit\">Cockpit<\/a> uses OPC UA for most of the communication with the programmable controllers. More specifically:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The controller, acting as an OPC UA <strong>server<\/strong>, publishes a list of accessible variables (R\/W).<\/li>\n\n\n\n<li>The software (or PLC), acting as an OPC UA <strong>client<\/strong>, subscribes to updates (at a selectable refresh rate) of those variables. The client can also write new values onto variables whenever permitted.<\/li>\n<\/ul>\n\n\n\n<p>All global variables present in a given control code\/model are automatically published as accessible objects by the OPC UA server. Therefore, third-party clients may perform the same actions as Cockpit, including:<\/p>\n\n\n\n<ul id=\"block-c0b283ec-7704-400c-88dd-49acbe154d60\" class=\"wp-block-list\">\n<li>Read and write the user variables (<a href=\"https:\/\/imperix.com\/doc\/software\/probe-variable\">probe<\/a> and <a href=\"https:\/\/imperix.com\/doc\/software\/tunable-parameter\">tunable parameters<\/a>) at a frequency up to 100 Hz<\/li>\n\n\n\n<li>Enable or disable the PWM outputs<\/li>\n\n\n\n<li>Get the device status (is the code running, did a fault occur, what is the CPU load, etc)<\/li>\n\n\n\n<li>Read the generated log messages<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"780\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/OPC-UA_server.png\" alt=\"OPC UA enables different clients to interact with a B-Box controller\" class=\"wp-image-12119\" style=\"width:757px;height:576px\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/OPC-UA_server.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/OPC-UA_server-300x229.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/OPC-UA_server-768x585.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">OPC UA enables different clients to interact with a B-Box controller<\/figcaption><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\"><a href=\"https:\/\/imperix.com\/software\/cockpit\/\">Cockpit<\/a> handles the transfer of large files or buffers (e.g. <strong>scope data<\/strong> or binaries) over regular TCP\/IP traffic instead of OPC UA. These functionalities are threfore not available from third-party clients.<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-connecting-to-the-imperix-opc-ua-server\"><span class=\"ez-toc-section\" id=\"Connecting-to-the-OPC-UA-server\"><\/span>Connecting to the OPC UA server<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Imperix uses the default OPC UA port 4840, meaning that the OPC UA endpoint URL to connect to a controller is <strong><code>opc.tcp:\/\/&lt;IP-ADDRESS&gt;:4840<\/code><\/strong><\/p>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">Screenshots from the OPC UA client <a href=\"https:\/\/www.unified-automation.com\/products\/development-tools\/uaexpert.html\">UaExpert<\/a> will be used as a reference, however, the explanations apply to any other client.<\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"589\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/image-1.png\" alt=\"\" class=\"wp-image-11121\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/image-1.png 451w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/image-1-230x300.png 230w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><figcaption class=\"wp-element-caption\">Connecting to athe OPA UA server of an imperix controller using UaExpert<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-imperix-system-variables\"><span class=\"ez-toc-section\" id=\"Imperix-system-variables\"><\/span>Imperix system variables<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The following documents the read-only &#8220;system&#8221; OPC UA node variables that provide configuration and status information about the target. These system node variables are stored in the namespace 1 and are available at all times (contrary to user code variables described later).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"323\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/image-22-1024x323.png\" alt=\"\" class=\"wp-image-11705\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/image-22-1024x323.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/image-22-300x95.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/image-22-768x242.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/image-22.png 1390w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">OPA UA server variables displayed in UaExpert<\/figcaption><\/figure>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">Certain variables remain undocumented as they are designed for exclusive use by Cockpit.<\/div>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td><strong>Name<\/strong>                          <\/td><td><strong>Datatype<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><tr><td><code>ACG license<\/code><\/td><td>String<\/td><td>The loaded ACG license status<\/td><\/tr><tr><td><code>CPP license<\/code><\/td><td>String<\/td><td>The loaded CPP license status<\/td><\/tr><tr><td><code>CPU load [%]<\/code><\/td><td>Float<\/td><td>User CPU load. Returns 0 when the user code is stopped<\/td><\/tr><tr><td><code>Controller<\/code><\/td><td>String<\/td><td>Returns &#8220;B-Board&#8221; or &#8220;B-Box&#8221;<\/td><\/tr><tr><td><code>Core state<\/code><\/td><td>String<\/td><td>&#8220;Offline&#8221;: The user code is stopped<br>&#8220;Blocked&#8221;, &#8220;Operating&#8221; or &#8220;Fault&#8221; when the user code is running<\/td><\/tr><tr><td><code>Dynamic IP<\/code><\/td><td>String<\/td><td>The automatically assigned IP address<\/td><\/tr><tr><td><code>Hostname<\/code><\/td><td>String<\/td><td>The device hostname<\/td><\/tr><tr><td><code>Loaded code MD5<\/code><\/td><td>String<\/td><td>The MD5 hash of the loaded user code file<\/td><\/tr><tr><td><code>Loaded code date<\/code><\/td><td>String<\/td><td>The last modification date of the loaded user code file<\/td><\/tr><tr><td><code>Loaded code name<\/code><\/td><td>String<\/td><td>The name of the loaded user code file<\/td><\/tr><tr><td><code>Logs BBOS<\/code><\/td><td>String<\/td><td>Returns the log messages generated by the user code system (BBOS). It uses the following format:<br><code>[severity][timestamp]Message<\/code><br>For instance:<br><code>[I][1648114327359324364]User code started (BBOS v3.7 build 2203211046)<\/code><\/td><\/tr><tr><td><code>MAC address<\/code><\/td><td>String<\/td><td>The device&#8217;s MAC address<\/td><\/tr><tr><td><code>Static IP<\/code><\/td><td>String<\/td><td>The default static IP. It is always 192.168.222.22<\/td><\/tr><tr><td><code>Static IP 2<\/code><\/td><td>String<\/td><td>The user-configured static IP<\/td><\/tr><tr><td><code>Status<\/code><\/td><td>String<\/td><td>Display status similar to the B-Box screen.<br>&#8220;Initializing&#8230;&#8221;, &#8220;Discovering&#8230;&#8221; or &#8220;Synchronizing&#8230;&#8221;: the device is in its starting phase<br>&#8220;Ready.&#8221;: the user code can be started<br>&#8220;Starting&#8230;&#8221;: the user code is being started<br>&#8220;Running.&#8221;: a user code is running <br>All other messages are error messages<\/td><\/tr><tr><td><code>Temperature<\/code><\/td><td>Float<\/td><td>The chip temperature in degrees Celsius<\/td><\/tr><tr><td><code>User CPU state<\/code><\/td><td>String<\/td><td>&#8220;Running&#8221; or &#8220;Offline&#8221;<\/td><\/tr><tr><td><code>User log<\/code><\/td><td>String<\/td><td>Returns the user-created log messages generated using the LOG block. It uses the following format:<br>[severity][timestamp]Message<\/td><\/tr><tr><td><code>Version<\/code><\/td><td>String<\/td><td>The firmware version of the device<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-imperix-methods\"><span class=\"ez-toc-section\" id=\"Imperix-methods\"><\/span>Imperix methods<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The subsequent methods enable user interaction with the target, specifically to initiate code execution and enable PWM outputs, or to modify system parameters (such as the hostname and IP address).<\/p>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">Certain variables remain undocumented as they are designed for exclusive use by Cockpit.<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td><strong>Method name<\/strong>                                   <\/td><td><\/td><td><strong>Argument<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><tr><td><code>Change hostname<\/code><\/td><td><\/td><td>new hostname<\/td><td>Change the target hostname<\/td><\/tr><tr><td><code>Change static IP 2<\/code><\/td><td><\/td><td>new static IP<\/td><td>Change the target static IP 2. The static IP 1 is always 192.168.222.22<\/td><\/tr><tr><td><code>Enable outputs<br><\/code><\/td><td><\/td><td>N\/A<\/td><td>Enable the PWM outputs<\/td><\/tr><tr><td><code>Disable outputs<\/code><\/td><td><\/td><td>N\/A<\/td><td>Disable the PWM outputs<\/td><\/tr><tr><td><code>Set DAC<\/code><\/td><td><\/td><td>&lt;variable name&gt;, &lt;DAC channel&gt;, &lt;device ID&gt;, &lt;gain&gt;, &lt;offset&gt;<\/td><td>Connect a user variable to an analog output of the target, similar to the DAC module of Cockpit<\/td><\/tr><tr><td><code>Start code<br><\/code><\/td><td><\/td><td>N\/A<\/td><td>Start the loaded user code.<\/td><\/tr><tr><td><code>Stop code<\/code><\/td><td><\/td><td>N\/A<\/td><td>Stop the loaded user code.<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-user-created-opc-ua-variables\"><span class=\"ez-toc-section\" id=\"User-created-OPC-UA-variables\"><\/span>User-created OPC UA variables<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>When a user code is started, an OPC UA variable is created for each <a href=\"https:\/\/imperix.com\/doc\/software\/probe-variable\">probe variable<\/a> and <a href=\"https:\/\/imperix.com\/doc\/software\/tunable-parameter\">tunable parameter<\/a> present in the user model (Simulink, PLECS or C++). These variables are stored in the namespace index 2.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"286\" height=\"124\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/04\/image-37.png\" alt=\"Probe connected to an ADC acquisition block\" class=\"wp-image-11884\"\/><figcaption class=\"wp-element-caption\">The probe &#8220;Vdc&#8221; is connected to the output of an ADC block<\/figcaption><\/figure>\n<\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"933\" height=\"87\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/image-2.png\" alt=\"\" class=\"wp-image-11135\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/image-2.png 933w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/image-2-300x28.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/image-2-768x72.png 768w\" sizes=\"auto, (max-width: 933px) 100vw, 933px\" \/><figcaption class=\"wp-element-caption\">The probe &#8220;Vdc&#8221; of the user model is available as an OPC UA variable (UaExpert)<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-going-further\"><span class=\"ez-toc-section\" id=\"Going-further\"><\/span>Going further<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-making-an-opc-ua-gui-client-using-matlab\"><span class=\"ez-toc-section\" id=\"Making-an-OPC-UA-GUI-client-using-MATLAB\"><\/span>Making an OPC UA GUI client using MATLAB<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>To use MATLAB as an OPC UA client, users should consult the <a href=\"https:\/\/imperix.com\/doc\/implementation\/opc-ua-toolbox-for-matlab-and-simulink\">Industrial Communication Toolbox<\/a> article. This Add-On may be combined with MATLAB App Designer to build an GUI for imperix power converters such as the one shown in the illustration on this page.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-making-an-opc-ua-gui-client-using-c\"><span class=\"ez-toc-section\" id=\"Making-an-OPC-UA-GUI-client-using-C\"><\/span>Making an OPC UA GUI client using C++<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>To go on the completely free-of-cost route, imperix recommends checking out the C library <a href=\"https:\/\/open62541.org\/\">open62541<\/a> and using a C++ framework such as <a href=\"https:\/\/www.qt.io\/\">Qt<\/a> or <a href=\"https:\/\/www.wxwidgets.org\/\">wxWidgets<\/a> in order to build a GUI.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-making-an-opc-ua-gui-client-using-python\"><span class=\"ez-toc-section\" id=\"Making-an-OPC-UA-GUI-client-using-Python\"><\/span>Making an OPC UA GUI client using Python<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>To stay on the free and open-source route, developing a client using Python is also possible thanks to <a href=\"https:\/\/github.com\/FreeOpcUa\">Freeopcua<\/a>. A GUI can be built quite easily using the popular Python package <a href=\"https:\/\/docs.python.org\/3\/library\/tkinter.html\">tkinter<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">Ethernet is not the only way to communicate with the imperix controllers. <a href=\"https:\/\/imperix.com\/doc\/help\/real-time-communication-protocols\">PN202<\/a> provides detailed information on the various supported real time communication protocols.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Imperix relies on the increasingly popular OPC UA industrial protocol to interact with programmable controllers remotely. To do so, imperix controllers (or the TPI8032) embed&#8230;<\/p>\n","protected":false},"author":4,"featured_media":12133,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[3],"tags":[],"software-environments":[105,103,104],"provided-results":[],"related-products":[50,31,32,92,166,51,110],"guidedreadings":[],"tutorials":[],"user-manuals":[139],"coauthors":[70],"class_list":["post-11022","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-help","software-environments-c-plus-plus","software-environments-matlab","software-environments-plecs","related-products-acg-sdk","related-products-b-board-pro","related-products-b-box-rcp","related-products-b-box-micro","related-products-b-box-rcp-3-0","related-products-cpp-sdk","related-products-tpi","user-manuals-b-board-pro"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>OPC UA communication for industrial automation - imperix<\/title>\n<meta name=\"description\" content=\"The increasingly popular OPC UA industrial protocol is used to remotely control and monitor its power electronic controllers over Ethernet.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/imperix.com\/doc\/help\/opc-ua\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OPC UA communication for industrial automation - imperix\" \/>\n<meta property=\"og:description\" content=\"The increasingly popular OPC UA industrial protocol is used to remotely control and monitor its power electronic controllers over Ethernet.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/help\/opc-ua\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-24T13:08:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-25T10:47:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/3_2_ratio_PN177.png\" \/>\n\t<meta property=\"og:image:width\" content=\"450\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Beno\u00eet Steinmann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Beno\u00eet Steinmann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua\"},\"author\":{\"name\":\"Beno\u00eet Steinmann\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/a69a3bda75b05d0923cc76d7268cc94f\"},\"headline\":\"OPC UA: the communication protocol for industrial automation applications\",\"datePublished\":\"2022-03-24T13:08:55+00:00\",\"dateModified\":\"2025-11-25T10:47:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua\"},\"wordCount\":1090,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/3_2_ratio_PN177.png\",\"articleSection\":[\"Product notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua\",\"name\":\"OPC UA communication for industrial automation - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/3_2_ratio_PN177.png\",\"datePublished\":\"2022-03-24T13:08:55+00:00\",\"dateModified\":\"2025-11-25T10:47:03+00:00\",\"description\":\"The increasingly popular OPC UA industrial protocol is used to remotely control and monitor its power electronic controllers over Ethernet.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/3_2_ratio_PN177.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/3_2_ratio_PN177.png\",\"width\":450,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/opc-ua#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Knowledge base\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Product notes\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/category\\\/help\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"OPC UA: the communication protocol for industrial automation applications\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"name\":\"imperix\",\"description\":\"power electronics\",\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/imperix.com\\\/doc\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\",\"name\":\"imperix\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"width\":350,\"height\":120,\"caption\":\"imperix\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/a69a3bda75b05d0923cc76d7268cc94f\",\"name\":\"Beno\u00eet Steinmann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/22a9252907f853f91d07b143dfcc84f6ec0cc31f6b72408b503a7026eed5b109?s=96&d=mm&r=g3b3f3d8e66019ebcb2848094940b98c0\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/22a9252907f853f91d07b143dfcc84f6ec0cc31f6b72408b503a7026eed5b109?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/22a9252907f853f91d07b143dfcc84f6ec0cc31f6b72408b503a7026eed5b109?s=96&d=mm&r=g\",\"caption\":\"Beno\u00eet Steinmann\"},\"description\":\"Benoit is an embedded systems expert and the leader of software and firmware developments at imperix. On the knowledge base, he is the author of numerous software reference documents.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/benoit-steinmann\\\/\"],\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/steinmann\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OPC UA communication for industrial automation - imperix","description":"The increasingly popular OPC UA industrial protocol is used to remotely control and monitor its power electronic controllers over Ethernet.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/imperix.com\/doc\/help\/opc-ua","og_locale":"en_US","og_type":"article","og_title":"OPC UA communication for industrial automation - imperix","og_description":"The increasingly popular OPC UA industrial protocol is used to remotely control and monitor its power electronic controllers over Ethernet.","og_url":"https:\/\/imperix.com\/doc\/help\/opc-ua","og_site_name":"imperix","article_published_time":"2022-03-24T13:08:55+00:00","article_modified_time":"2025-11-25T10:47:03+00:00","og_image":[{"width":450,"height":300,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/3_2_ratio_PN177.png","type":"image\/png"}],"author":"Beno\u00eet Steinmann","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Beno\u00eet Steinmann","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/help\/opc-ua#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/help\/opc-ua"},"author":{"name":"Beno\u00eet Steinmann","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/a69a3bda75b05d0923cc76d7268cc94f"},"headline":"OPC UA: the communication protocol for industrial automation applications","datePublished":"2022-03-24T13:08:55+00:00","dateModified":"2025-11-25T10:47:03+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/opc-ua"},"wordCount":1090,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/opc-ua#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/3_2_ratio_PN177.png","articleSection":["Product notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/help\/opc-ua#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/help\/opc-ua","url":"https:\/\/imperix.com\/doc\/help\/opc-ua","name":"OPC UA communication for industrial automation - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/opc-ua#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/opc-ua#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/3_2_ratio_PN177.png","datePublished":"2022-03-24T13:08:55+00:00","dateModified":"2025-11-25T10:47:03+00:00","description":"The increasingly popular OPC UA industrial protocol is used to remotely control and monitor its power electronic controllers over Ethernet.","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/help\/opc-ua#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/help\/opc-ua"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/help\/opc-ua#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/3_2_ratio_PN177.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2022\/03\/3_2_ratio_PN177.png","width":450,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/help\/opc-ua#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Knowledge base","item":"https:\/\/imperix.com\/doc\/"},{"@type":"ListItem","position":2,"name":"Product notes","item":"https:\/\/imperix.com\/doc\/category\/help"},{"@type":"ListItem","position":3,"name":"OPC UA: the communication protocol for industrial automation applications"}]},{"@type":"WebSite","@id":"https:\/\/imperix.com\/doc\/#website","url":"https:\/\/imperix.com\/doc\/","name":"imperix","description":"power electronics","publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/imperix.com\/doc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/imperix.com\/doc\/#organization","name":"imperix","url":"https:\/\/imperix.com\/doc\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","width":350,"height":120,"caption":"imperix"},"image":{"@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/a69a3bda75b05d0923cc76d7268cc94f","name":"Beno\u00eet Steinmann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/22a9252907f853f91d07b143dfcc84f6ec0cc31f6b72408b503a7026eed5b109?s=96&d=mm&r=g3b3f3d8e66019ebcb2848094940b98c0","url":"https:\/\/secure.gravatar.com\/avatar\/22a9252907f853f91d07b143dfcc84f6ec0cc31f6b72408b503a7026eed5b109?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/22a9252907f853f91d07b143dfcc84f6ec0cc31f6b72408b503a7026eed5b109?s=96&d=mm&r=g","caption":"Beno\u00eet Steinmann"},"description":"Benoit is an embedded systems expert and the leader of software and firmware developments at imperix. On the knowledge base, he is the author of numerous software reference documents.","sameAs":["https:\/\/www.linkedin.com\/in\/benoit-steinmann\/"],"url":"https:\/\/imperix.com\/doc\/author\/steinmann"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/11022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=11022"}],"version-history":[{"count":120,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/11022\/revisions"}],"predecessor-version":[{"id":37457,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/11022\/revisions\/37457"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/12133"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=11022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=11022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=11022"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=11022"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=11022"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=11022"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=11022"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=11022"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=11022"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=11022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}