{"id":27870,"date":"2025-08-21T11:47:43","date_gmt":"2025-08-21T18:47:43","guid":{"rendered":"https:\/\/tdengine.com\/?p=27870"},"modified":"2025-09-08T16:32:32","modified_gmt":"2025-09-08T23:32:32","slug":"tdengine-idmp-in-action-industrial-boilers-and-kepware","status":"publish","type":"post","link":"https:\/\/tdengine.com\/tdengine-idmp-in-action-industrial-boilers-and-kepware\/","title":{"rendered":"TDengine IDMP in Action: Industrial Boilers with Kepware"},"content":{"rendered":"\n<p>This article uses an industrial boiler system monitoring scenario as an example to explain how you can collect critical metrics in KEPServerEX, ingest them into TDengine TSDB, and then build an asset model in TDengine IDMP. KEPServerEX is deployed locally while TDengine is deployed as TDengine Cloud, a fully managed cloud service.<\/p>\n\n\n\n<p>Industrial boilers are key equipment in many industries, providing the necessary heat and steam for processes such as power generation, chemical production, metallurgy, and paper manufacturing. A boiler outage, whether for maintenance or due to malfunction, can cause costly downtime and production stoppages. In this example, we simulate a factory with two boilers, but more can be added as needed. Leveraging AI, TDengine can automatically generate visual dashboards and real-time analytics, enabling you to set up an efficient, intelligent monitoring system for critical industrial equipment in just minutes.<\/p>\n\n\n\n<img decoding=\"async\" width=\"4008\" height=\"767\" class=\"gb-media-ba44f615\" alt=\"\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag.png?strip=all&sharp=1\" title=\"kep-scen-diag\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag.png?strip=all&amp;sharp=1 4008w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag-300x57.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag-1024x196.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag-768x147.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag-1536x294.png?strip=all&amp;sharp=1 1536w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag-2048x392.png?strip=all&amp;sharp=1 2048w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag.png?strip=all&amp;sharp=1&amp;w=1603 1603w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag.png?strip=all&amp;sharp=1&amp;w=2404 2404w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag.png?strip=all&amp;sharp=1&amp;w=3206 3206w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag.png?strip=all&amp;sharp=1&amp;w=450 450w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/kep-scen-diag.png?strip=all&amp;sharp=1&amp;w=1920 1920w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/>\n\n\n\n<h2 class=\"gb-text\">Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install KEPServerEx on your local machine. You can obtain a free demo version from <a href=\"https:\/\/www.ptc.com\/en\/products\/kepware\/kepserverex\/demo-download\" rel=\"noopener\">PTC Kepware<\/a>.<\/li>\n\n\n\n<li>Download the sample dataset from <a href=\"https:\/\/www.kaggle.com\/datasets\/nikitamanaenkov\/time-series-of-industrial-boiler-operations\/data\" rel=\"noopener\">Kaggle<\/a>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"gb-text\">Register for TDengine Cloud<\/h2>\n\n\n\n<ol>\n<li>\n<p>In a web browser, access <a href=\"https:\/\/cloud.tdengine.com\">TDengine Cloud<\/a> and enter your email address and organization.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Click <strong>Get Confirmation Code<\/strong> and enter the confirmation code you received in your email.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Click <strong>Sign Up for TDengine Cloud<\/strong>.<\/p>\n<\/li>\n\n\n\n<li>\n<p>On the page displayed, enter your name and set a password. Then click <strong>Continue<\/strong>.<\/p>\n<\/li>\n\n\n\n<li>\n<p>In the dialog box displayed, choose <strong>IDMP (Industrial Data Managment Platform)<\/strong>.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Enter names for your TDengine IDMP and TDengine TSDB instances. The names must be different.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Retain the default values for the other settings and click <strong>Create<\/strong>.<br>Your instances are created and started. This may take several minutes.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Choose any sample scenario and click <strong>Confirm<\/strong>. This data will not be used in this demonstration.<\/p>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"gb-text\">KEPServer Configuration<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In your system, create a new 32-bit ODBC data source named <strong>CSV_Boiler<\/strong>.\n<ul class=\"wp-block-list\">\n<li>Select the driver <strong>Microsoft Text Driver (*.txt; *.csv)<\/strong>.<\/li>\n\n\n\n<li>Point it to the directory where the sample dataset files are located.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>In KEPServerEX, add a new channel named <kbd>Boiler Room<\/kbd>.\n<ul class=\"wp-block-list\">\n<li>Select the <strong>Advanced Simulator<\/strong> driver.<\/li>\n\n\n\n<li>Under <strong>Data Source<\/strong>, choose <strong>CSV_Boiler<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Add a device named <strong>Boiler1<\/strong>, select the dataset <strong>data.csv<\/strong>, and set <strong>Record Selection Interval<\/strong> to <strong>5000 ms<\/strong>.<\/li>\n\n\n\n<li>Repeat the same process to add a device named <strong>Boiler2<\/strong> with dataset <strong>data_Autoreg.csv<\/strong>.<\/li>\n\n\n\n<li>In <strong>Runtime<\/strong> \u2192 <strong>Connect<\/strong>, connect to the runtime.<\/li>\n\n\n\n<li>Click on the <strong>Boiler1<\/strong> and <strong>Boiler2<\/strong> devices, and you\u2019ll see that the tags (data points) have been automatically generated.<\/li>\n\n\n\n<li>Go to <strong>Tools \u2192 Launch OPC Quick Client<\/strong> to verify whether the data is being correctly simulated and generated.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"gb-text\">Create a Database in TDengine TSDB<\/h3>\n\n\n\n<ol>\n<li>\n<p>In your browser, access <a href=\"https:\/\/tsdb.tdengine.com\">tsdb.tdengine.com<\/a> to view your TDengine TSDB instance in TDengine Cloud.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Create a database to store the sample data.<\/p>\n\n\n\n<img decoding=\"async\" width=\"1365\" height=\"632\" class=\"gb-media-e9a5450d\" alt=\"\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/boiler-01.png?strip=all&sharp=1\" title=\"boiler-01\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/boiler-01.png?strip=all&amp;sharp=1 1365w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/boiler-01-300x139.png?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/boiler-01-1024x474.png?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/boiler-01-768x356.png?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/boiler-01.png?strip=all&amp;sharp=1&amp;w=546 546w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/boiler-01.png?strip=all&amp;sharp=1&amp;w=819 819w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/boiler-01.png?strip=all&amp;sharp=1&amp;w=1092 1092w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/boiler-01.png?strip=all&amp;sharp=1&amp;w=450 450w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/>\n\n\n\n<ol class=\"gb-element-31a43742\">\n<li>\n<p>In the main menu on the left, click <strong>Explorer<\/strong>. Then click the + (Create Database) button next to <strong>Databases<\/strong>.<\/p>\n<\/li>\n\n\n\n<li>\n<p>In the <strong>Name<\/strong> field, enter <code class=\"\" data-line=\"\">db_boiler<\/code>. Retain the default values for all other settings.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Click <strong>Create<\/strong>.<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"gb-text\">Create a Data Ingestion Task<\/h3>\n\n\n\n<ol>\n<li>\n<p>In the main menu on the left, open <strong>Data In<\/strong> and click <strong>Add Data Source<\/strong>.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Configure basic information as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Name:<\/strong> Enter a unique name for the data ingestion task.<\/li>\n\n\n\n<li><strong>Type:<\/strong> Select <strong>OPC-UA<\/strong>.<\/li>\n\n\n\n<li><strong>Agent:<\/strong> Click <strong>Create New Agent<\/strong> and follow the steps shown on screen to install the agent on the machine running KEPServerEX.<\/li>\n\n\n\n<li><strong>Target:<\/strong> Select the <code class=\"\" data-line=\"\">db_boiler<\/code> database.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\n<p>Configure the connection information as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Server Endpoint:<\/strong> Enter the IP address of the machine running taosX-Agent with port 49320.<\/li>\n\n\n\n<li>Leave all other fields in this section blank.<\/li>\n<\/ul>\n\n\n\n<p>Then click <strong>Check Connection<\/strong> to ensure that your connection to the OPC server is configured correctly.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Under <strong>Data Sets<\/strong>, select <strong>Data Points<\/strong> and enter the following configuration:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Root node ID:<\/strong> Enter <code class=\"\" data-line=\"\">ns=2;s=Boiler Room<\/code>.<\/li>\n\n\n\n<li><strong>Super Table Name:<\/strong> Enter <code class=\"\" data-line=\"\">opc_boilers<\/code>.<\/li>\n\n\n\n<li><strong>Table Name:<\/strong> Enter <code class=\"\" data-line=\"\">t_{id}<\/code>.<\/li>\n\n\n\n<li><strong>Collect Mode:<\/strong> Select <strong>observe<\/strong>.<\/li>\n\n\n\n<li><strong>Collect interval:<\/strong> Enter <code class=\"\" data-line=\"\">5<\/code>.<\/li>\n\n\n\n<li><strong>Point Update Mode:<\/strong> Select <strong>update<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\n<p>At the bottom of the page, click <strong>Add<\/strong> to create the data ingestion task.<\/p>\n<\/li>\n\n\n\n<li>\n<p>On the <strong>Explorer<\/strong> page, you can now see that the simulated boiler data is being ingested.<\/p>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"gb-text\"><strong>Create an Element Template in TDengine IDMP<\/strong><\/h3>\n\n\n\n<p>Log in to your IDMP instance, create an element template and elements, and load the data from TDengine TSDB into TDengine IDMP.<\/p>\n\n\n\n<p>First, create the element template:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>Libraries &gt; Element Template &gt; New Element Template<\/strong>.<\/li>\n\n\n\n<li>For <strong>Template Name<\/strong>, enter <strong>Air Duct System<\/strong>.<\/li>\n\n\n\n<li>Set <strong>Element Naming Pattern<\/strong> to <code class=\"\" data-line=\"\">${Template#name}<\/code>.<\/li>\n\n\n\n<li>Click <strong>Save<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>Next, switch to the <strong>Element Template \u2192 Air Duct System \u2192 Attribute Template<\/strong> panel in the upper right corner:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click <strong>New Attribute Template<\/strong>.<\/li>\n\n\n\n<li>For <strong>Name<\/strong>, enter <strong>Return Air Chamber Flow (Right)<\/strong>.<\/li>\n\n\n\n<li>Set <strong>Value Type<\/strong> to <strong>Double<\/strong>.<\/li>\n\n\n\n<li>Set <strong>Display Digits<\/strong> to <strong>2<\/strong>.<\/li>\n\n\n\n<li>For <strong>UOM Class<\/strong>, select <strong>Volume Flow Rate<\/strong>.<\/li>\n\n\n\n<li>For <strong>Default UOM<\/strong> and <strong>Display UOM<\/strong>, select <strong>cubic meter per hour<\/strong>.<\/li>\n\n\n\n<li>For <strong>Data Reference Type<\/strong>, choose <strong>TDengine Metric<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>In the pop-up <strong>Data Reference Expression<\/strong> dialog, fill in the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Connection<\/strong>: <code class=\"\" data-line=\"\">boiler-tsdb<\/code><\/li>\n\n\n\n<li><strong>Database<\/strong>: <code class=\"\" data-line=\"\">db_boiler<\/code><\/li>\n\n\n\n<li><strong>Source Table Name Pattern<\/strong>: <code class=\"\" data-line=\"\">t_Boiler Room_Boiler${KEYWORD1}_${Template#name}_Return Air Chamber Flow (Right)<\/code><\/li>\n\n\n\n<li><strong>Column<\/strong>: <code class=\"\" data-line=\"\">val<\/code><\/li>\n<\/ul>\n\n\n\n<p>When you first add <code class=\"\" data-line=\"\">${KEYWORD1}<\/code>, the system will prompt <strong>Please enter keyword description<\/strong>.<\/p>\n\n\n\n<p>Notes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The placeholder string <strong>KEYWORD<\/strong> is valid only within the specific element template. If the same KEYWORD is used multiple times within the same template, it only needs to be created once.<\/li>\n\n\n\n<li>If a manually created element template uses a KEYWORD, you must click <strong>+<\/strong> to explicitly create it; if the template is created by copying an existing element template, this step is not necessary.<\/li>\n<\/ul>\n\n\n\n<p>Copy the property template <strong>Return Air Chamber Flow (Right)<\/strong>, paste it, and edit it to create another property template <strong>Return Air Chamber Flow (Left)<\/strong>.<\/p>\n\n\n\n<p>Using the same method, create all seven element templates.<\/p>\n\n\n\n<p>Notes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Property templates can be copied and pasted across different element templates, but each element template must have its own <strong>KEYWORD<\/strong> defined.<\/li>\n\n\n\n<li>IDMP comes with a variety of built-in measurement units. If you need additional units, you can extend them via <strong>Libraries &gt; UOM<\/strong>. <\/li>\n<\/ul>\n\n\n\n<h3 class=\"gb-text\">Create the Asset Model<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>Explorer \u2192 Elements<\/strong> and build the hierarchy step by step:\n<ul class=\"wp-block-list\">\n<li><strong>Plant<\/strong> \u2192 <strong>Boiler Room<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>In the <strong>Boiler Room<\/strong> element, create two new child elements: <strong>Boiler1<\/strong> and <strong>Boiler2<\/strong>.<\/li>\n\n\n\n<li>Select the <strong>Boiler1<\/strong> element, click <strong>New Child Element<\/strong>, choose the template <strong>Air Duct System<\/strong>, and set <strong>KEYWORD1<\/strong> to <code class=\"\" data-line=\"\">1<\/code>.<\/li>\n<\/ol>\n\n\n\n<p>Following the same steps, use different element templates to create all child elements for <strong>Boiler1<\/strong> and <strong>Boiler2<\/strong>.<\/p>\n\n\n\n<p>In the <strong>Explorer<\/strong>, IDMP will automatically display the monitoring parameters of each unit in a tree structure, based on the path information from the asset model.<\/p>\n\n\n\n<h3 class=\"gb-text\">Try AI-Generated Dashboards<\/h3>\n\n\n\n<ol>\n<li>\n<p>In the sidebar, select <strong>Plant<\/strong> > <strong>Boiler Room<\/strong> > <strong>Boiler1<\/strong> > <strong>Air Duct System<\/strong>.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Open the <strong>Panels<\/strong> page on this element to see AI recommendations.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Click <strong>Generate<\/strong> on a panel that you want to try. Once the panel is generated, click <strong>View<\/strong> to open it.<\/p>\n<\/li>\n\n\n\n<li>\n<p>On the details page, you can view the panel or click Edit to make changes. When you edit a panel, you can select <strong>Advanced<\/strong> to view the SQL statement used to create the panel.<\/p>\n<\/li>\n\n\n\n<li>\n<p>When you have finished modifying the panel, click <strong>Save<\/strong> to add it to the element.<\/p>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"gb-text\">Try AI-Generated Analysis<\/h3>\n\n\n\n<ol>\n<li>\n<p>In the sidebar, select <strong>Plant<\/strong> > <strong>Boiler Room<\/strong> > <strong>Boiler1<\/strong> > <strong>Air Duct System<\/strong>.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Open the <strong>Analyses<\/strong> page on this element to see AI recommendations.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Click one of the suggested questions to generate a real-time analysis task.<\/p>\n<\/li>\n\n\n\n<li>\n<p>On the details page, you can view the configuration for the real-time analysis task and make changes as needed. When you have finished, click <strong>Save<\/strong>.<\/p>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"gb-text\">Summary<\/h2>\n\n\n\n<p>In this solution, the combination of TDengine TSDB and TDengine IDMP offers four key benefits:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Rapid asset modeling with a \u201csingle-column model\u201d<\/strong> \u2013 TDengine IDMP integrates seamlessly with TDengine TSDB. Data from critical industrial equipment such as boilers is often written into TSDB in a single-column model, which IDMP can quickly use to build asset models. The monitored objects are then displayed in a tree structure, making equipment assets clear at a glance.<\/li>\n\n\n\n<li><strong>Autonomous insight delivery<\/strong> \u2013 No configuration in TDengine, no scripts, no queries required. Based on the collected data, IDMP automatically recognizes the industrial boiler monitoring scenario and recommends dashboards and real-time alerts, keeping the boiler system\u2019s operating status fully under control.<\/li>\n\n\n\n<li><strong>Natural language analytics<\/strong> \u2013 No SQL or scripting needed. Simply describe the data analysis or dashboard you want in natural language, and IDMP will create it for you\u2014bringing the barrier to data visualization and analysis down to zero.<\/li>\n\n\n\n<li><strong>Automatic onboarding of new monitored equipment<\/strong> \u2013 When a new device or piece of equipment is added, simply configure KEPServer. No further setup or operations are needed in TDengine; the equipment will be automatically added to the monitoring scope, saving significant manual effort.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>This article uses an industrial boiler system monitoring scenario as an example to explain how you can collect critical metrics in KEPServerEX and use them in TDengine.<\/p>\n","protected":false},"author":102,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[21],"tags":[],"ppma_author":[181],"class_list":["post-27870","post","type-post","status-publish","format-standard","hentry","category-engineering"],"authors":[{"term_id":181,"user_id":102,"is_guest":0,"slug":"tdengine-team","display_name":"TDengine Team","avatar_url":{"url":"https:\/\/tdengine.com\/wp-content\/uploads\/29.03-01-tdengine.png","url2x":"https:\/\/tdengine.com\/wp-content\/uploads\/29.03-01-tdengine.png"},"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts\/27870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/users\/102"}],"replies":[{"embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/comments?post=27870"}],"version-history":[{"count":4,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts\/27870\/revisions"}],"predecessor-version":[{"id":28156,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts\/27870\/revisions\/28156"}],"wp:attachment":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/media?parent=27870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/categories?post=27870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/tags?post=27870"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/ppma_author?post=27870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}