{"id":559,"date":"2023-08-16T09:11:00","date_gmt":"2023-08-16T09:11:00","guid":{"rendered":"https:\/\/joseamaita.com\/en\/?p=559"},"modified":"2023-08-16T14:40:59","modified_gmt":"2023-08-16T14:40:59","slug":"opc-router-tutorial-simulator","status":"publish","type":"post","link":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/","title":{"rendered":"OPC Router Tutorial Simulator"},"content":{"rendered":"\n<p>Following the fifth part of the <a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial\/\">OPC Router tutorial<\/a>, I&#8217;m presenting how to build a process data simulator using a very basic Python application and the &#8220;CSV&#8221; object. Remember, we&#8217;re configuring and running a project for \u201cPap\u00edn\u201d, a fictional potato bread factory.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 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\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/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:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Why_an_OPC_Router_tutorial_with_a_Simulator\" >Why an OPC Router tutorial with a Simulator?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Prerequisites\" >Prerequisites<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Schematic_Diagram\" >Schematic Diagram<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Describing_your_Components\" >Describing your Components<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Master_dataset\" >Master dataset<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#SQL_Server_tables\" >SQL Server tables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#SQL_Server_view\" >SQL Server view<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Python_application\" >Python application<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Power_BI_dashboard\" >Power BI dashboard<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Working_with_OPC_Router_CSV_and_SQL_Server\" >Working with OPC Router, CSV and SQL Server<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Knowing_your_Plugins\" >Knowing your Plugins<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Knowing_your_Transfer_Objects\" >Knowing your Transfer Objects<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Checking_your_Plugins\" >Checking your Plugins<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Defining_and_Checking_your_Variables_in_OPC_Router\" >Defining and Checking your Variables in OPC Router<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Creating_your_Fifth_Template\" >Creating your Fifth Template<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Working_with_Instances_from_Templates\" >Working with Instances from Templates<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Create_Remaining_Templates\" >Create Remaining Templates<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Compile_Save_and_Publish_your_OPC_Router_Project_Configuration_with_CSV_and_a_Simulator\" >Compile, Save and Publish your OPC Router Project Configuration with CSV and a Simulator<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Run_the_Python_application\" >Run the Python application<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Inspect_CSV_Data_Structure\" >Inspect CSV Data Structure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Verify_OPC_Router_Data_Transfer_from_CSV_to_SQL_Server\" >Verify OPC Router Data Transfer from CSV to SQL Server<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Visualize_Simulated_Data_in_Power_BI\" >Visualize Simulated Data in Power BI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Check_State_and_Visualize_Online_Data_in_OPC_Router\" >Check State and Visualize Online Data in OPC Router<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#Control_OPC_Router_service\" >Control OPC Router service<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_an_OPC_Router_tutorial_with_a_Simulator\"><\/span>Why an OPC Router tutorial with a Simulator?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Because &#8220;learning by doing&#8221; with examples is fun. Also, this particular functionality can bring us an excellent use case: the ability to reproduce the behavior of a process by simulating real data, which it&#8217;s a great choice when we want to create or test algorithms that improve the performance of a plant. See below a list of posts that complete this tutorial:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial\/\"><\/a><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial\/\">Getting Started with OPC Router<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-sql\/\"><\/a><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-sql\/\">Connect an OPC DA server to Microsoft SQL Server<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-mqtt\/\"><\/a><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-mqtt\/\">Connect an MQTT data source to InfluxDB Cloud<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-calculator\/\"><\/a><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-calculator\/\">Perform multiple calculations within OPC Router<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-linux\/\"><\/a><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-linux\/\">Run an OPC Router application with Linux and Docker<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/\">Build a process data simulator with Python, CSV and OPC Router<\/a> (this post)<\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-rest\/\">Explore basic RESTful web services within OPC Router<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-telegram\/\">Build a Telegram basic interaction within OPC Router<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-sms\/\">Build an SMS basic interaction within OPC Router<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-whatsapp\/\">Build a WhatsApp basic interaction within OPC Router<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-teams\/\">Build a Teams basic interaction within OPC Router<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-backend\/\">Explore advanced RESTful web services within OPC Router<\/a><\/li><li><a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-portainer\/\">Run an OPC Router application with Portainer<\/a><\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Prerequisites\"><\/span>Prerequisites<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Firstly, you&#8217;ll need:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Microsoft Excel software \ud83e\uddee<\/li><li>Master dataset file from your real process data \ud83d\udcda<\/li><li>Microsoft SQL Server database \ud83e\uddf1<\/li><li>Power BI visualization tool \ud83d\udcc8<\/li><li>Python v3.8.9 or later \ud83d\udc0d<\/li><li>Python packages &#8220;pandas&#8221;, &#8220;xlrd&#8221; and &#8220;openpyxl&#8221; \ud83d\udce6<\/li><li>Schematic diagram \ud83d\udcdd<\/li><li><strong>OPC Router Config<\/strong> application \ud83d\udcbb<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Schematic_Diagram\"><\/span>Schematic Diagram<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>To illustrate this idea better, look at this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"426\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_059-1024x426.png\" alt=\"opc router tutorial simulator 1\" class=\"wp-image-1287\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_059-1024x426.png 1024w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_059-300x125.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_059-768x320.png 768w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_059.png 1062w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"613\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_060-1024x613.png\" alt=\"opc router tutorial simulator 2\" class=\"wp-image-1288\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_060-1024x613.png 1024w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_060-300x180.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_060-768x460.png 768w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_060.png 1128w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>At this instant, the requirement ask us to simulate time-series data from seven (7) process variables: <strong>MCurr<\/strong> (VSD motor current), <strong>MFreq<\/strong> (VSD motor frequency), <strong>MTorq<\/strong> (VSD motor torque), <strong>MPow<\/strong> (VSD motor power), <strong>MVolt<\/strong> (VSD motor voltage), <strong>MSpd<\/strong> (VSD motor speed) and <strong>AirP<\/strong> (line air pressure). Each variable must comply with the following data structure:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"391\" height=\"182\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_101.png\" alt=\"opc router tutorial simulator 3\" class=\"wp-image-524\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_101.png 391w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_101-300x140.png 300w\" sizes=\"auto, (max-width: 391px) 100vw, 391px\" \/><\/figure>\n\n\n\n<p>Following this, let&#8217;s see some sample time-series data from <strong>MPow<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"633\" height=\"555\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_063.png\" alt=\"opc router tutorial simulator 4\" class=\"wp-image-1304\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_063.png 633w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_063-300x263.png 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Describing_your_Components\"><\/span>Describing your Components<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Initially, let&#8217;s start with the description of every component of our application:<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Master_dataset\"><\/span>Master dataset<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>This is our main resource. We put here the real data we want to simulate. Every value of &#8220;cd_dataset&#8221; gives us a block of data by time. The data structure use fields &#8220;cd_dataset&#8221;, &#8220;cd_location1&#8221;, &#8220;cd_location2&#8221;, &#8220;cd_location3&#8221;, &#8220;cd_variable&#8221;, &#8220;qt_value&#8221; and &#8220;ds_quality_value&#8221;. Let&#8217;s see a sample of that file:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"732\" height=\"757\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_058.png\" alt=\"opc router tutorial simulator 5\" class=\"wp-image-1291\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_058.png 732w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_058-290x300.png 290w\" sizes=\"auto, (max-width: 732px) 100vw, 732px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SQL_Server_tables\"><\/span>SQL Server tables<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>This is the place where we store the simulated data, a table per variable. Use this SQL script to create the tables (if you haven&#8217;t created yet):<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>USE &#91;papinpbf19_db]\nGO\n\nSET ANSI_NULLS ON\nGO\n\nSET QUOTED_IDENTIFIER ON\nGO\n\nCREATE TABLE &#91;pv].&#91;tb_rv_vsd_motor_p](\n\t&#91;dt_timestamp] &#91;datetime2](0) NOT NULL,\n\t&#91;cd_location1] &#91;bigint] NOT NULL,\n\t&#91;cd_location2] &#91;bigint] NOT NULL,\n\t&#91;cd_location3] &#91;bigint] NOT NULL,\n\t&#91;cd_variable] &#91;bigint] NOT NULL,\n\t&#91;qt_value] &#91;decimal](18, 5) NULL,\n\t&#91;ds_quality_value] &#91;varchar](20) NULL,\n CONSTRAINT &#91;PK__tb_rv_vsd_motor_p] PRIMARY KEY CLUSTERED\n(\n\t&#91;dt_timestamp] ASC,\n\t&#91;cd_location3] ASC\n)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, \nIGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, \nALLOW_PAGE_LOCKS = ON) ON &#91;PRIMARY]\n) ON &#91;PRIMARY]\nGO<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>This is how the script looks in SQL Server Management Studio when creating a table for <strong>MPow<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"444\" height=\"429\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_013.png\" alt=\"opc router tutorial simulator 6\" class=\"wp-image-1249\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_013.png 444w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_013-300x290.png 300w\" sizes=\"auto, (max-width: 444px) 100vw, 444px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>After that, watch the seven (7) SQL Server tables:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"254\" height=\"255\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_014.png\" alt=\"opc router tutorial simulator 7\" class=\"wp-image-1312\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_014.png 254w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_014-150x150.png 150w\" sizes=\"auto, (max-width: 254px) 100vw, 254px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SQL_Server_view\"><\/span>SQL Server view<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>A SQL Server view will be necessary to visualize all variables in Power BI. Use this script to create it:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>USE &#91;papinpbf19_db]\nGO\n\nCREATE VIEW pv.vw_pln_history AS\n\nSELECT\ndt_timestamp,\ncd_location1,\ncd_location2,\ncd_location3,\ncd_variable,\nqt_value,\nds_quality_value\nFROM &#91;pv].&#91;tb_rv_vsd_motor_i]\n\nUNION\n\nSELECT\ndt_timestamp,\ncd_location1,\ncd_location2,\ncd_location3,\ncd_variable,\nqt_value,\nds_quality_value\nFROM &#91;pv].&#91;tb_rv_vsd_motor_f]\n\nUNION\n\nSELECT\ndt_timestamp,\ncd_location1,\ncd_location2,\ncd_location3,\ncd_variable,\nqt_value,\nds_quality_value\nFROM &#91;pv].&#91;tb_rv_vsd_motor_t]\n\nUNION\n\nSELECT\ndt_timestamp,\ncd_location1,\ncd_location2,\ncd_location3,\ncd_variable,\nqt_value,\nds_quality_value\nFROM &#91;pv].&#91;tb_rv_vsd_motor_p]\n\nUNION\n\nSELECT\ndt_timestamp,\ncd_location1,\ncd_location2,\ncd_location3,\ncd_variable,\nqt_value,\nds_quality_value\nFROM &#91;pv].&#91;tb_rv_vsd_motor_v]\n\nUNION\n\nSELECT\ndt_timestamp,\ncd_location1,\ncd_location2,\ncd_location3,\ncd_variable,\nqt_value,\nds_quality_value\nFROM &#91;pv].&#91;tb_rv_vsd_motor_s]\n\nUNION\n\nSELECT\ndt_timestamp,\ncd_location1,\ncd_location2,\ncd_location3,\ncd_variable,\nqt_value,\nds_quality_value\nFROM &#91;pv].&#91;tb_rv_line_air_pressure]\n\n--ORDER BY \n--dt_timestamp, \n--cd_location1, \n--cd_location2, \n--cd_location3, \n--cd_variable, \n--qt_value, \n--ds_quality_value DESC<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>This is how the script looks in SQL Server Management Studio:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"318\" height=\"673\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_015.png\" alt=\"opc router tutorial simulator 8\" class=\"wp-image-1264\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_015.png 318w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_015-142x300.png 142w\" sizes=\"auto, (max-width: 318px) 100vw, 318px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Python_application\"><\/span>Python application<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>A Python application has a critical role in the data injection, with a few clear goals in mind:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Read the master dataset Excel file.<\/li><li>Ask the user for the desired data update rate.<\/li><li>Ask the user where to begin and where to finish in the dataset.<\/li><li>Extract data blocks filtered by &#8220;cd_dataset&#8221;.<\/li><li>Extract data blocks filtered by &#8220;cd_variable&#8221;.<\/li><li>Create the structured CSV files, with a timestamp included.<\/li><li>Repeat the selected data sequence indefinitely.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-3 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env python3\n# Pap\u00edn\u00ae process data simulator from master dataset file\n\nimport pandas as pd\nimport time\n\nmaster_filename = \"master_dataset.xlsx\"\nindex_variable = 1\n\ndef main():\n    print('------------------------------------------------------')\n    print(' Pap\u00edn\u00ae Process Data Simulator from Master Dataset File ')\n    print('------------------------------------------------------')\n    print()\n    print(' Set actions (press &#91;Ctrl+C] to leave): ')\n    update_rate = int(input(\" 1. Please set update rate (in seconds): \"))\n    start_index = int(input(\" 2. Please set start index (starts at 1): \"))\n    end_index = int(input(\" 3. Please set end index: \"))\n    df1 = pd.read_excel(master_filename, dtype={'qt_value': float})\n    unique_rows = df1.cd_dataset.size\n    data_blocks = df1.cd_dataset.nunique()\n    number_variables = df1.cd_variable.nunique()\n    print()\n    print(f\"Unique rows: {unique_rows}\")\n    print(f\"Number of variables: {number_variables}\")\n    print()\n    print(\"Writing to 'temp_dataset_cd_variable_xx.csv' files... \")\n    print(\"Press &#91;Ctrl+C] to leave\\n\\n\")\n    while True:\n        try:\n            si = start_index\n            ei = end_index\n            nv = number_variables\n            iv = index_variable\n            while si &lt;= ei:\n                df2 = df1.query(\"cd_dataset == @si\")\n                for iv in range(index_variable, nv + 1):\n                    df3 = df2.query(\"cd_variable == @iv\")\n                    df4 = df3.rename(columns={'cd_dataset': 'dt_timestamp'})\n                    df4.dt_timestamp = df4.dt_timestamp.astype('datetime64&#91;ns]')\n                    t = time.time()\n                    df4.dt_timestamp = time.strftime(\n                                                     \"%Y-%m-%dT%H:%M:%S\", \n                                                     time.localtime(t))\n                    df4.to_csv(\n                    f\"temp_dataset_cd_variable_{iv}.csv\", \n                    index=None, \n                    header=True)\n                si += 1\n                time.sleep(update_rate)\n\n        except KeyboardInterrupt:\n            print(\"\\n\\nLeaving.\")\n            raise SystemExit(1)\n\t\t\t\nif __name__ == '__main__':\n    main()<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Power_BI_dashboard\"><\/span>Power BI dashboard<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>In short, this is the dashboard that allow us to visualize all variables by time:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"574\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_061-1024x574.png\" alt=\"opc router tutorial simulator 9\" class=\"wp-image-1296\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_061-1024x574.png 1024w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_061-300x168.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_061-768x430.png 768w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_061.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Working_with_OPC_Router_CSV_and_SQL_Server\"><\/span>Working with OPC Router, CSV and SQL Server<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Knowing_your_Plugins\"><\/span>Knowing your Plugins<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>To begin with, the configuration of <a href=\"https:\/\/www.opc-router.com\/\">OPC Router<\/a> starts with your licensed plugins. There are several categories such as &#8220;Cloud \/ IoT&#8221;, &#8220;Topfloor&#8221;, &#8220;Shopfloor&#8221;, &#8220;Storage&#8221;, &#8220;Advanced&#8221;, &#8220;Messaging&#8221; and &#8220;Printer&#8221;.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-4 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"289\" height=\"303\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_009.png\" alt=\"opc router tutorial simulator 10\" class=\"wp-image-275\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_009.png 289w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_009-286x300.png 286w\" sizes=\"auto, (max-width: 289px) 100vw, 289px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"291\" height=\"916\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_010.png\" alt=\"opc router tutorial simulator 11\" class=\"wp-image-276\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_010.png 291w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_010-95x300.png 95w\" sizes=\"auto, (max-width: 291px) 100vw, 291px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Make sure to notice <strong>MS SQL<\/strong>.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Knowing_your_Transfer_Objects\"><\/span>Knowing your Transfer Objects<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>At this point, we&#8217;re going to need three (3) transfer objects to solve our use case:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"265\" height=\"1011\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_06_001.png\" alt=\"opc router tutorial simulator 12\" class=\"wp-image-574\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_06_001.png 265w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_06_001-79x300.png 79w\" sizes=\"auto, (max-width: 265px) 100vw, 265px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Make sure to notice <strong>File trigger<\/strong>, <strong>CSV<\/strong> and <strong>Database<\/strong>.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Checking_your_Plugins\"><\/span>Checking your Plugins<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Following identification, OPC Router needs to configure every licensed plugin. Let&#8217;s check the plug in instance with <strong>MS SQL<\/strong> (double click on object):<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"301\" height=\"543\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_014.png\" alt=\"opc router tutorial simulator 13\" class=\"wp-image-287\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_014.png 301w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_014-166x300.png 166w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Then, check the local Microsoft SQL Server database storage and press the &#8220;Check connection&#8221; button to test connectivity.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"588\" height=\"551\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_016.png\" alt=\"opc router tutorial simulator 14\" class=\"wp-image-289\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_016.png 588w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_016-300x281.png 300w\" sizes=\"auto, (max-width: 588px) 100vw, 588px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"416\" height=\"405\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_017.png\" alt=\"opc router tutorial simulator 15\" class=\"wp-image-290\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_017.png 416w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_017-300x292.png 300w\" sizes=\"auto, (max-width: 416px) 100vw, 416px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Defining_and_Checking_your_Variables_in_OPC_Router\"><\/span>Defining and Checking your Variables in OPC Router<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Create the code (or check it, if it was done already) that identifies the seven (7) variables to simulate:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"429\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_006.png\" alt=\"opc router tutorial simulator 16\" class=\"wp-image-1242\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_006.png 472w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_006-300x273.png 300w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"429\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_007.png\" alt=\"opc router tutorial simulator 17\" class=\"wp-image-1243\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_007.png 472w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_007-300x273.png 300w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"429\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_008.png\" alt=\"opc router tutorial simulator 18\" class=\"wp-image-1244\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_008.png 472w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_008-300x273.png 300w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"429\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_009.png\" alt=\"opc router tutorial simulator 19\" class=\"wp-image-1245\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_009.png 472w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_009-300x273.png 300w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"429\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_010.png\" alt=\"opc router tutorial simulator 20\" class=\"wp-image-1246\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_010.png 472w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_010-300x273.png 300w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"429\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_011.png\" alt=\"opc router tutorial simulator 21\" class=\"wp-image-1247\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_011.png 472w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_011-300x273.png 300w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"429\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_012.png\" alt=\"opc router tutorial simulator 22\" class=\"wp-image-1248\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_012.png 472w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_012-300x273.png 300w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Creating_your_Fifth_Template\"><\/span>Creating your Fifth Template<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>In similar fashion to the fourth part of the tutorial, a template is the correct approach once again. Let&#8217;s create a new CSV template <strong>MCurr<\/strong> within CSV folder (VSD motor current):<\/li><\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-5 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"516\" height=\"552\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_016.png\" alt=\"opc router tutorial simulator 23\" class=\"wp-image-1259\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_016.png 516w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_016-280x300.png 280w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"337\" height=\"318\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_017.png\" alt=\"opc router tutorial simulator 24\" class=\"wp-image-1260\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_017.png 337w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_017-300x283.png 300w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Watch an empty design panel so you can start building your template:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"968\" height=\"411\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_018.png\" alt=\"opc router tutorial simulator 25\" class=\"wp-image-1266\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_018.png 968w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_018-300x127.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_018-768x326.png 768w\" sizes=\"auto, (max-width: 968px) 100vw, 968px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Insert the File trigger block:<\/li><\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-6 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"261\" height=\"1006\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_019.png\" alt=\"\" class=\"wp-image-1267\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_019.png 261w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_019-78x300.png 78w\" sizes=\"auto, (max-width: 261px) 100vw, 261px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"155\" height=\"65\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_020.png\" alt=\"\" class=\"wp-image-1268\"\/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Edit the <strong>File trigger<\/strong> block and make sure it looks like this:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"662\" height=\"539\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_025.png\" alt=\"\" class=\"wp-image-1269\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_025.png 662w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_025-300x244.png 300w\" sizes=\"auto, (max-width: 662px) 100vw, 662px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Confirm the configured <strong>File trigger<\/strong> block:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"407\" height=\"172\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_026.png\" alt=\"\" class=\"wp-image-1273\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_026.png 407w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_026-300x127.png 300w\" sizes=\"auto, (max-width: 407px) 100vw, 407px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Insert the <strong>CSV<\/strong> object:<\/li><\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"261\" height=\"1008\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_021.png\" alt=\"\" class=\"wp-image-1270\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_021.png 261w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_021-78x300.png 78w\" sizes=\"auto, (max-width: 261px) 100vw, 261px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"157\" height=\"68\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_022.png\" alt=\"\" class=\"wp-image-1271\"\/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Edit the <strong>CSV<\/strong> block and make sure it looks like this:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"614\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_027.png\" alt=\"\" class=\"wp-image-1272\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_027.png 720w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_027-300x256.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Confirm the configured <strong>CSV<\/strong> block:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"228\" height=\"355\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_028.png\" alt=\"\" class=\"wp-image-1274\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_028.png 228w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_028-193x300.png 193w\" sizes=\"auto, (max-width: 228px) 100vw, 228px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Insert the <strong>Database<\/strong> object:<\/li><\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"260\" height=\"994\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_023.png\" alt=\"\" class=\"wp-image-1276\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"157\" height=\"65\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_024.png\" alt=\"\" class=\"wp-image-1277\"\/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Edit the <strong>Database<\/strong> block and make sure it looks like this:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"645\" height=\"786\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_029.png\" alt=\"\" class=\"wp-image-1278\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_029.png 645w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_029-246x300.png 246w\" sizes=\"auto, (max-width: 645px) 100vw, 645px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Confirm the configured <strong>Database<\/strong> block:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"297\" height=\"279\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_030.png\" alt=\"\" class=\"wp-image-1280\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Make sure all transfer objects look like these:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"411\" height=\"809\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_036.png\" alt=\"\" class=\"wp-image-1281\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_036.png 411w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_036-152x300.png 152w\" sizes=\"auto, (max-width: 411px) 100vw, 411px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>At last, make sure to link blocks as shown here to complete your fifth template:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1016\" height=\"353\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_031.png\" alt=\"\" class=\"wp-image-1282\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_031.png 1016w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_031-300x104.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_031-768x267.png 768w\" sizes=\"auto, (max-width: 1016px) 100vw, 1016px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Additionally, create the connections folder &#8220;P_PBF19_SIM&#8221;:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"336\" height=\"319\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_033.png\" alt=\"\" class=\"wp-image-1339\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_033.png 336w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_033-300x285.png 300w\" sizes=\"auto, (max-width: 336px) 100vw, 336px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Working_with_Instances_from_Templates\"><\/span>Working with Instances from Templates<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>With your fifth template, a new instance is required now. Start creating it using the contextual menu:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"473\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_032.png\" alt=\"\" class=\"wp-image-1335\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_032.png 584w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_032-300x243.png 300w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"393\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_034.png\" alt=\"\" class=\"wp-image-1336\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_034.png 865w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_034-300x136.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_034-768x349.png 768w\" sizes=\"auto, (max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>At this time, check the new instance:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"336\" height=\"378\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_035.png\" alt=\"\" class=\"wp-image-1338\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_035.png 336w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_035-267x300.png 267w\" sizes=\"auto, (max-width: 336px) 100vw, 336px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Create_Remaining_Templates\"><\/span>Create Remaining Templates<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Copy and paste the recently created template to start creating them for the rest of the variables (<strong>MFreq<\/strong>, <strong>MTorq<\/strong>, <strong>MPow<\/strong>, <strong>MVolt<\/strong>, <strong>MSpd<\/strong> and <strong>AirP<\/strong>):<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1004\" height=\"360\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_037.png\" alt=\"\" class=\"wp-image-1341\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_037.png 1004w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_037-300x108.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_037-768x275.png 768w\" sizes=\"auto, (max-width: 1004px) 100vw, 1004px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1008\" height=\"364\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_038.png\" alt=\"\" class=\"wp-image-1342\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_038.png 1008w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_038-300x108.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_038-768x277.png 768w\" sizes=\"auto, (max-width: 1008px) 100vw, 1008px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1002\" height=\"362\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_039.png\" alt=\"\" class=\"wp-image-1343\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_039.png 1002w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_039-300x108.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_039-768x277.png 768w\" sizes=\"auto, (max-width: 1002px) 100vw, 1002px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"998\" height=\"359\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_040.png\" alt=\"\" class=\"wp-image-1344\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_040.png 998w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_040-300x108.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_040-768x276.png 768w\" sizes=\"auto, (max-width: 998px) 100vw, 998px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1002\" height=\"355\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_041.png\" alt=\"\" class=\"wp-image-1345\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_041.png 1002w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_041-300x106.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_041-768x272.png 768w\" sizes=\"auto, (max-width: 1002px) 100vw, 1002px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1001\" height=\"356\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_042.png\" alt=\"\" class=\"wp-image-1346\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_042.png 1001w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_042-300x107.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_042-768x273.png 768w\" sizes=\"auto, (max-width: 1001px) 100vw, 1001px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Without delay, make sure the CSV templates folder look like this:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"337\" height=\"441\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_043.png\" alt=\"\" class=\"wp-image-1347\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_043.png 337w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_043-229x300.png 229w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>For each template, create their respective connection:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"337\" height=\"432\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_044.png\" alt=\"\" class=\"wp-image-1349\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_044.png 337w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_044-234x300.png 234w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Compile_Save_and_Publish_your_OPC_Router_Project_Configuration_with_CSV_and_a_Simulator\"><\/span>Compile, Save and Publish your OPC Router Project Configuration with CSV and a Simulator<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>At this time, you need to compile, save and publish the connections you just created by clicking the &#8220;Go productive&#8221; button:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"337\" height=\"1007\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_045.png\" alt=\"\" class=\"wp-image-1350\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_045.png 337w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_045-100x300.png 100w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Meanwhile, the project is saved and published.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"673\" height=\"418\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_048.png\" alt=\"\" class=\"wp-image-1351\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_048.png 673w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_048-300x186.png 300w\" sizes=\"auto, (max-width: 673px) 100vw, 673px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"673\" height=\"418\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_049.png\" alt=\"\" class=\"wp-image-1352\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_049.png 673w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_049-300x186.png 300w\" sizes=\"auto, (max-width: 673px) 100vw, 673px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Press the &#8220;Yes&#8221; button to start the OPC Router service and run your application.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"673\" height=\"377\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_050.png\" alt=\"\" class=\"wp-image-1353\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_050.png 673w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_050-300x168.png 300w\" sizes=\"auto, (max-width: 673px) 100vw, 673px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Watch how the state of every connection changes until they are fully operational:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"337\" height=\"481\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_052.png\" alt=\"\" class=\"wp-image-1354\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_052.png 337w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_052-210x300.png 210w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"337\" height=\"486\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_053.png\" alt=\"\" class=\"wp-image-1355\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_053.png 337w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_053-208x300.png 208w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Run_the_Python_application\"><\/span>Run the Python application<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Open a terminal prompt, activate your virtual environment (if you&#8217;re using one) and run the following command:<\/li><\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>python p_datasim.py<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"685\" height=\"126\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_046.png\" alt=\"\" class=\"wp-image-1357\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_046.png 685w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_046-300x55.png 300w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>At this instant, set update rate (as 6 seconds), start index (as 1) and end index (as 3):<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"322\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_051.png\" alt=\"\" class=\"wp-image-1359\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_051.png 660w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_051-300x146.png 300w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Only if you want to terminate the simulation, press <strong>[Ctrl + C]<\/strong>.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"322\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_064.png\" alt=\"\" class=\"wp-image-1360\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_064.png 660w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_064-300x146.png 300w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Inspect_CSV_Data_Structure\"><\/span>Inspect CSV Data Structure<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>This is the data structure of the &#8220;temp_dataset_cd_variable_xx&#8221; CSV files that the Python application generates:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"97\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/08\/img_p_06_068.png\" alt=\"\" class=\"wp-image-1382\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/08\/img_p_06_068.png 727w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/08\/img_p_06_068-300x40.png 300w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Verify_OPC_Router_Data_Transfer_from_CSV_to_SQL_Server\"><\/span>Verify OPC Router Data Transfer from CSV to SQL Server<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Additionally, you can verify data transfer within the SQL Server by running SSMS on <strong>MFreq<\/strong> or the SQL view:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"626\" height=\"604\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_065.png\" alt=\"\" class=\"wp-image-1362\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_065.png 626w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_065-300x289.png 300w\" sizes=\"auto, (max-width: 626px) 100vw, 626px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Visualize_Simulated_Data_in_Power_BI\"><\/span>Visualize Simulated Data in Power BI<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Refresh the dashboard in order to get the most recent simulated data:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"574\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_062-1024x574.png\" alt=\"\" class=\"wp-image-1297\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_062-1024x574.png 1024w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_062-300x168.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_062-768x431.png 768w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_062.png 1279w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"788\" height=\"717\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_067.png\" alt=\"\" class=\"wp-image-1366\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_067.png 788w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_067-300x273.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_067-768x699.png 768w\" sizes=\"auto, (max-width: 788px) 100vw, 788px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Check_State_and_Visualize_Online_Data_in_OPC_Router\"><\/span>Check State and Visualize Online Data in OPC Router<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>At this point, you should notice an execution time visually (it&#8217;s 65.01 milliseconds in this example):<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"793\" height=\"411\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_055.png\" alt=\"\" class=\"wp-image-1371\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_055.png 793w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_055-300x155.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_055-768x398.png 768w\" sizes=\"auto, (max-width: 793px) 100vw, 793px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Finally, check all running connections here:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"337\" height=\"490\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_054.png\" alt=\"\" class=\"wp-image-1356\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_054.png 337w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_054-206x300.png 206w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Also, you can watch live values here:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"659\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_056-1024x659.png\" alt=\"\" class=\"wp-image-1372\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_056-1024x659.png 1024w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_056-300x193.png 300w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_056-768x495.png 768w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/07\/img_p_06_056.png 1320w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Control_OPC_Router_service\"><\/span>Control OPC Router service<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>You are able to start, stop or restart the OPC Router service when needed.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"432\" height=\"185\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_114.png\" alt=\"\" class=\"wp-image-553\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_114.png 432w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_114-300x128.png 300w\" sizes=\"auto, (max-width: 432px) 100vw, 432px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"380\" height=\"131\" src=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_093.png\" alt=\"\" class=\"wp-image-483\" srcset=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_093.png 380w, https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/05\/img_p_04_093-300x103.png 300w\" sizes=\"auto, (max-width: 380px) 100vw, 380px\" \/><\/figure>\n\n\n\n<p>Did you enjoy this OPC Router tutorial with a Simulator? I&#8217;d love to hear from you.<\/p>\n\n\n\n<p>Stay tuned and follow part 7 of this tutorial! \ud83d\ude0e<\/p>\n\n\n\n<p>For other articles like this one in English, click <a href=\"https:\/\/joseamaita.com\/en\/blog\/\">here<\/a>. To see them in Spanish, click <a href=\"https:\/\/joseamaita.com\/blog\/\">here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Following the fifth part of the OPC Router tutorial, I&#8217;m presenting how to build a process data simulator using a very basic Python application and the &#8220;CSV&#8221; object. Remember, we&#8217;re configuring and running a project for \u201cPap\u00edn\u201d, a fictional potato bread factory. Why an OPC Router tutorial with a Simulator? Because &#8220;learning by doing&#8221; with&hellip;&nbsp;<a href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/\" rel=\"bookmark\">Read More &raquo;<span class=\"screen-reader-text\">OPC Router Tutorial Simulator<\/span><\/a><\/p>\n<div class='heateor_sss_sharing_container heateor_sss_vertical_sharing heateor_sss_bottom_sharing' style='width:44px;left: -10px;top: 100px;-webkit-box-shadow:none;box-shadow:none;' data-heateor-sss-href='https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/posts\/559'><div class=\"heateor_sss_sharing_ul\"><a aria-label=\"Facebook\" class=\"heateor_sss_facebook\" href=\"https:\/\/www.facebook.com\/sharer\/sharer.php?u=https%3A%2F%2Fjoseamaita.com%2Fen%2Fwp-json%2Fwp%2Fv2%2Fposts%2F559\" title=\"Facebook\" rel=\"nofollow noopener\" target=\"_blank\" style=\"font-size:32px!important;box-shadow:none;display:inline-block;vertical-align:middle\"><span class=\"heateor_sss_svg\" style=\"background-color:#0765FE;width:40px;height:40px;margin:0;display:inline-block;opacity:1;float:left;font-size:32px;box-shadow:none;display:inline-block;font-size:16px;padding:0 4px;vertical-align:middle;background-repeat:repeat;overflow:hidden;padding:0;cursor:pointer;box-sizing:content-box\"><svg style=\"display:block;\" focusable=\"false\" aria-hidden=\"true\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 32 32\"><path fill=\"#fff\" d=\"M28 16c0-6.627-5.373-12-12-12S4 9.373 4 16c0 5.628 3.875 10.35 9.101 11.647v-7.98h-2.474V16H13.1v-1.58c0-4.085 1.849-5.978 5.859-5.978.76 0 2.072.15 2.608.298v3.325c-.283-.03-.775-.045-1.386-.045-1.967 0-2.728.745-2.728 2.683V16h3.92l-.673 3.667h-3.247v8.245C23.395 27.195 28 22.135 28 16Z\"><\/path><\/svg><\/span><\/a><a aria-label=\"Twitter\" class=\"heateor_sss_button_twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?text=joseamaita.com%20-%20The%20place%20where%20I%20make%20things%20happen.&url=https%3A%2F%2Fjoseamaita.com%2Fen%2Fwp-json%2Fwp%2Fv2%2Fposts%2F559\" title=\"Twitter\" rel=\"nofollow noopener\" target=\"_blank\" style=\"font-size:32px!important;box-shadow:none;display:inline-block;vertical-align:middle\"><span class=\"heateor_sss_svg heateor_sss_s__default heateor_sss_s_twitter\" style=\"background-color:#55acee;width:40px;height:40px;margin:0;display:inline-block;opacity:1;float:left;font-size:32px;box-shadow:none;display:inline-block;font-size:16px;padding:0 4px;vertical-align:middle;background-repeat:repeat;overflow:hidden;padding:0;cursor:pointer;box-sizing:content-box\"><svg style=\"display:block;\" focusable=\"false\" aria-hidden=\"true\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"100%\" height=\"100%\" viewBox=\"-4 -4 39 39\"><path d=\"M28 8.557a9.913 9.913 0 0 1-2.828.775 4.93 4.93 0 0 0 2.166-2.725 9.738 9.738 0 0 1-3.13 1.194 4.92 4.92 0 0 0-3.593-1.55 4.924 4.924 0 0 0-4.794 6.049c-4.09-.21-7.72-2.17-10.15-5.15a4.942 4.942 0 0 0-.665 2.477c0 1.71.87 3.214 2.19 4.1a4.968 4.968 0 0 1-2.23-.616v.06c0 2.39 1.7 4.38 3.952 4.83-.414.115-.85.174-1.297.174-.318 0-.626-.03-.928-.086a4.935 4.935 0 0 0 4.6 3.42 9.893 9.893 0 0 1-6.114 2.107c-.398 0-.79-.023-1.175-.068a13.953 13.953 0 0 0 7.55 2.213c9.056 0 14.01-7.507 14.01-14.013 0-.213-.005-.426-.015-.637.96-.695 1.795-1.56 2.455-2.55z\" fill=\"#fff\"><\/path><\/svg><\/span><\/a><a aria-label=\"Linkedin\" class=\"heateor_sss_button_linkedin\" href=\"https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=https%3A%2F%2Fjoseamaita.com%2Fen%2Fwp-json%2Fwp%2Fv2%2Fposts%2F559\" title=\"Linkedin\" rel=\"nofollow noopener\" target=\"_blank\" style=\"font-size:32px!important;box-shadow:none;display:inline-block;vertical-align:middle\"><span class=\"heateor_sss_svg heateor_sss_s__default heateor_sss_s_linkedin\" style=\"background-color:#0077b5;width:40px;height:40px;margin:0;display:inline-block;opacity:1;float:left;font-size:32px;box-shadow:none;display:inline-block;font-size:16px;padding:0 4px;vertical-align:middle;background-repeat:repeat;overflow:hidden;padding:0;cursor:pointer;box-sizing:content-box\"><svg style=\"display:block;\" focusable=\"false\" aria-hidden=\"true\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 32 32\"><path d=\"M6.227 12.61h4.19v13.48h-4.19V12.61zm2.095-6.7a2.43 2.43 0 0 1 0 4.86c-1.344 0-2.428-1.09-2.428-2.43s1.084-2.43 2.428-2.43m4.72 6.7h4.02v1.84h.058c.56-1.058 1.927-2.176 3.965-2.176 4.238 0 5.02 2.792 5.02 6.42v7.395h-4.183v-6.56c0-1.564-.03-3.574-2.178-3.574-2.18 0-2.514 1.7-2.514 3.46v6.668h-4.187V12.61z\" fill=\"#fff\"><\/path><\/svg><\/span><\/a><a aria-label=\"Whatsapp\" class=\"heateor_sss_whatsapp\" href=\"https:\/\/api.whatsapp.com\/send?text=joseamaita.com%20-%20The%20place%20where%20I%20make%20things%20happen.%20https%3A%2F%2Fjoseamaita.com%2Fen%2Fwp-json%2Fwp%2Fv2%2Fposts%2F559\" title=\"Whatsapp\" rel=\"nofollow noopener\" target=\"_blank\" style=\"font-size:32px!important;box-shadow:none;display:inline-block;vertical-align:middle\"><span class=\"heateor_sss_svg\" style=\"background-color:#55eb4c;width:40px;height:40px;margin:0;display:inline-block;opacity:1;float:left;font-size:32px;box-shadow:none;display:inline-block;font-size:16px;padding:0 4px;vertical-align:middle;background-repeat:repeat;overflow:hidden;padding:0;cursor:pointer;box-sizing:content-box\"><svg style=\"display:block;\" focusable=\"false\" aria-hidden=\"true\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"100%\" height=\"100%\" viewBox=\"-6 -5 40 40\"><path class=\"heateor_sss_svg_stroke heateor_sss_no_fill\" stroke=\"#fff\" stroke-width=\"2\" fill=\"none\" d=\"M 11.579798566743314 24.396926207859085 A 10 10 0 1 0 6.808479557110079 20.73576436351046\"><\/path><path d=\"M 7 19 l -1 6 l 6 -1\" class=\"heateor_sss_no_fill heateor_sss_svg_stroke\" stroke=\"#fff\" stroke-width=\"2\" fill=\"none\"><\/path><path d=\"M 10 10 q -1 8 8 11 c 5 -1 0 -6 -1 -3 q -4 -3 -5 -5 c 4 -2 -1 -5 -1 -4\" fill=\"#fff\"><\/path><\/svg><\/span><\/a><a aria-label=\"Telegram\" class=\"heateor_sss_button_telegram\" href=\"https:\/\/telegram.me\/share\/url?url=https%3A%2F%2Fjoseamaita.com%2Fen%2Fwp-json%2Fwp%2Fv2%2Fposts%2F559&text=joseamaita.com%20-%20The%20place%20where%20I%20make%20things%20happen.\" title=\"Telegram\" rel=\"nofollow noopener\" target=\"_blank\" style=\"font-size:32px!important;box-shadow:none;display:inline-block;vertical-align:middle\"><span class=\"heateor_sss_svg heateor_sss_s__default heateor_sss_s_telegram\" style=\"background-color:#3da5f1;width:40px;height:40px;margin:0;display:inline-block;opacity:1;float:left;font-size:32px;box-shadow:none;display:inline-block;font-size:16px;padding:0 4px;vertical-align:middle;background-repeat:repeat;overflow:hidden;padding:0;cursor:pointer;box-sizing:content-box\"><svg style=\"display:block;\" focusable=\"false\" aria-hidden=\"true\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 32 32\"><path fill=\"#fff\" d=\"M25.515 6.896L6.027 14.41c-1.33.534-1.322 1.276-.243 1.606l5 1.56 1.72 5.66c.226.625.115.873.77.873.506 0 .73-.235 1.012-.51l2.43-2.363 5.056 3.734c.93.514 1.602.25 1.834-.863l3.32-15.638c.338-1.363-.52-1.98-1.41-1.577z\"><\/path><\/svg><\/span><\/a><a aria-label=\"Reddit\" class=\"heateor_sss_button_reddit\" href=\"https:\/\/reddit.com\/submit?url=https%3A%2F%2Fjoseamaita.com%2Fen%2Fwp-json%2Fwp%2Fv2%2Fposts%2F559&title=joseamaita.com%20-%20The%20place%20where%20I%20make%20things%20happen.\" title=\"Reddit\" rel=\"nofollow noopener\" target=\"_blank\" style=\"font-size:32px!important;box-shadow:none;display:inline-block;vertical-align:middle\"><span class=\"heateor_sss_svg heateor_sss_s__default heateor_sss_s_reddit\" style=\"background-color:#ff5700;width:40px;height:40px;margin:0;display:inline-block;opacity:1;float:left;font-size:32px;box-shadow:none;display:inline-block;font-size:16px;padding:0 4px;vertical-align:middle;background-repeat:repeat;overflow:hidden;padding:0;cursor:pointer;box-sizing:content-box\"><svg style=\"display:block;\" focusable=\"false\" aria-hidden=\"true\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"100%\" height=\"100%\" viewBox=\"-3.5 -3.5 39 39\"><path d=\"M28.543 15.774a2.953 2.953 0 0 0-2.951-2.949 2.882 2.882 0 0 0-1.9.713 14.075 14.075 0 0 0-6.85-2.044l1.38-4.349 3.768.884a2.452 2.452 0 1 0 .24-1.176l-4.274-1a.6.6 0 0 0-.709.4l-1.659 5.224a14.314 14.314 0 0 0-7.316 2.029 2.908 2.908 0 0 0-1.872-.681 2.942 2.942 0 0 0-1.618 5.4 5.109 5.109 0 0 0-.062.765c0 4.158 5.037 7.541 11.229 7.541s11.22-3.383 11.22-7.541a5.2 5.2 0 0 0-.053-.706 2.963 2.963 0 0 0 1.427-2.51zm-18.008 1.88a1.753 1.753 0 0 1 1.73-1.74 1.73 1.73 0 0 1 1.709 1.74 1.709 1.709 0 0 1-1.709 1.711 1.733 1.733 0 0 1-1.73-1.711zm9.565 4.968a5.573 5.573 0 0 1-4.081 1.272h-.032a5.576 5.576 0 0 1-4.087-1.272.6.6 0 0 1 .844-.854 4.5 4.5 0 0 0 3.238.927h.032a4.5 4.5 0 0 0 3.237-.927.6.6 0 1 1 .844.854zm-.331-3.256a1.726 1.726 0 1 1 1.709-1.712 1.717 1.717 0 0 1-1.712 1.712z\" fill=\"#fff\"\/><\/svg><\/span><\/a><a class=\"heateor_sss_more\" aria-label=\"More\" title=\"More\" rel=\"nofollow noopener\" style=\"font-size: 32px!important;border:0;box-shadow:none;display:inline-block!important;font-size:16px;padding:0 4px;vertical-align: middle;display:inline;\" href=\"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/posts\/559\" onclick=\"event.preventDefault()\"><span class=\"heateor_sss_svg\" style=\"background-color:#ee8e2d;width:40px;height:40px;margin:0;display:inline-block!important;opacity:1;float:left;font-size:32px!important;box-shadow:none;display:inline-block;font-size:16px;padding:0 4px;vertical-align:middle;display:inline;background-repeat:repeat;overflow:hidden;padding:0;cursor:pointer;box-sizing:content-box;\" onclick=\"heateorSssMoreSharingPopup(this, 'https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/posts\/559', 'joseamaita.com%20-%20The%20place%20where%20I%20make%20things%20happen.', '' )\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" viewBox=\"-.3 0 32 32\" version=\"1.1\" width=\"100%\" height=\"100%\" style=\"display:block;\" xml:space=\"preserve\"><g><path fill=\"#fff\" d=\"M18 14V8h-4v6H8v4h6v6h4v-6h6v-4h-6z\" fill-rule=\"evenodd\"><\/path><\/g><\/svg><\/span><\/a><\/div><div class=\"heateorSssClear\"><\/div><\/div>","protected":false},"author":1,"featured_media":715,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[17,5,39,3,22,38,16],"tags":[24,25,23,40,28],"class_list":["post-559","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-transfer","category-english","category-excel","category-industrial-automation","category-opc-router","category-python","category-sql-server","tag-data-transfer","tag-industrial-automation","tag-opc-router","tag-python","tag-sql-server"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>OPC Router Tutorial Simulator - joseamaita.com<\/title>\n<meta name=\"description\" content=\"Following the fifth part of the OPC Router tutorial, I&#039;m presenting how to build a process data simulator using Python and the &quot;CSV&quot; object.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OPC Router Tutorial Simulator - joseamaita.com\" \/>\n<meta property=\"og:description\" content=\"Following the fifth part of the OPC Router tutorial, I&#039;m presenting how to build a process data simulator using Python and the &quot;CSV&quot; object.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/\" \/>\n<meta property=\"og:site_name\" content=\"joseamaita.com\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-16T09:11:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-16T14:40:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png\" \/>\n\t<meta property=\"og:image:width\" content=\"335\" \/>\n\t<meta property=\"og:image:height\" content=\"367\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jos\u00e9 Alberto Maita\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jos\u00e9 Alberto Maita\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/\"},\"author\":{\"name\":\"Jos\u00e9 Alberto Maita\",\"@id\":\"https:\/\/joseamaita.com\/en\/#\/schema\/person\/b53d49d3ddf8f348fed0d484b541b1a4\"},\"headline\":\"OPC Router Tutorial Simulator\",\"datePublished\":\"2023-08-16T09:11:00+00:00\",\"dateModified\":\"2023-08-16T14:40:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/\"},\"wordCount\":1231,\"image\":{\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png\",\"keywords\":[\"Data Transfer\",\"Industrial Automation\",\"OPC Router\",\"Python\",\"SQL Server\"],\"articleSection\":[\"Data Transfer\",\"English\",\"Excel\",\"Industrial Automation\",\"OPC Router\",\"Python\",\"SQL Server\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/\",\"url\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/\",\"name\":\"OPC Router Tutorial Simulator - joseamaita.com\",\"isPartOf\":{\"@id\":\"https:\/\/joseamaita.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png\",\"datePublished\":\"2023-08-16T09:11:00+00:00\",\"dateModified\":\"2023-08-16T14:40:59+00:00\",\"author\":{\"@id\":\"https:\/\/joseamaita.com\/en\/#\/schema\/person\/b53d49d3ddf8f348fed0d484b541b1a4\"},\"description\":\"Following the fifth part of the OPC Router tutorial, I'm presenting how to build a process data simulator using Python and the \\\"CSV\\\" object.\",\"breadcrumb\":{\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#primaryimage\",\"url\":\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png\",\"contentUrl\":\"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png\",\"width\":335,\"height\":367},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/joseamaita.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OPC Router Tutorial Simulator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/joseamaita.com\/en\/#website\",\"url\":\"https:\/\/joseamaita.com\/en\/\",\"name\":\"joseamaita.com\",\"description\":\"The place where I make things happen.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/joseamaita.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/joseamaita.com\/en\/#\/schema\/person\/b53d49d3ddf8f348fed0d484b541b1a4\",\"name\":\"Jos\u00e9 Alberto Maita\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/joseamaita.com\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dfc4d3fa06e5fa2aee2ef3834715e1b8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dfc4d3fa06e5fa2aee2ef3834715e1b8?s=96&d=mm&r=g\",\"caption\":\"Jos\u00e9 Alberto Maita\"},\"url\":\"https:\/\/joseamaita.com\/en\/author\/joseamaita\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OPC Router Tutorial Simulator - joseamaita.com","description":"Following the fifth part of the OPC Router tutorial, I'm presenting how to build a process data simulator using Python and the \"CSV\" object.","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:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/","og_locale":"en_US","og_type":"article","og_title":"OPC Router Tutorial Simulator - joseamaita.com","og_description":"Following the fifth part of the OPC Router tutorial, I'm presenting how to build a process data simulator using Python and the \"CSV\" object.","og_url":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/","og_site_name":"joseamaita.com","article_published_time":"2023-08-16T09:11:00+00:00","article_modified_time":"2023-08-16T14:40:59+00:00","og_image":[{"width":335,"height":367,"url":"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png","type":"image\/png"}],"author":"Jos\u00e9 Alberto Maita","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jos\u00e9 Alberto Maita","Est. reading time":"21 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#article","isPartOf":{"@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/"},"author":{"name":"Jos\u00e9 Alberto Maita","@id":"https:\/\/joseamaita.com\/en\/#\/schema\/person\/b53d49d3ddf8f348fed0d484b541b1a4"},"headline":"OPC Router Tutorial Simulator","datePublished":"2023-08-16T09:11:00+00:00","dateModified":"2023-08-16T14:40:59+00:00","mainEntityOfPage":{"@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/"},"wordCount":1231,"image":{"@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#primaryimage"},"thumbnailUrl":"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png","keywords":["Data Transfer","Industrial Automation","OPC Router","Python","SQL Server"],"articleSection":["Data Transfer","English","Excel","Industrial Automation","OPC Router","Python","SQL Server"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/","url":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/","name":"OPC Router Tutorial Simulator - joseamaita.com","isPartOf":{"@id":"https:\/\/joseamaita.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#primaryimage"},"image":{"@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#primaryimage"},"thumbnailUrl":"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png","datePublished":"2023-08-16T09:11:00+00:00","dateModified":"2023-08-16T14:40:59+00:00","author":{"@id":"https:\/\/joseamaita.com\/en\/#\/schema\/person\/b53d49d3ddf8f348fed0d484b541b1a4"},"description":"Following the fifth part of the OPC Router tutorial, I'm presenting how to build a process data simulator using Python and the \"CSV\" object.","breadcrumb":{"@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#primaryimage","url":"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png","contentUrl":"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png","width":335,"height":367},{"@type":"BreadcrumbList","@id":"https:\/\/joseamaita.com\/en\/opc-router-tutorial-simulator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/joseamaita.com\/en\/"},{"@type":"ListItem","position":2,"name":"OPC Router Tutorial Simulator"}]},{"@type":"WebSite","@id":"https:\/\/joseamaita.com\/en\/#website","url":"https:\/\/joseamaita.com\/en\/","name":"joseamaita.com","description":"The place where I make things happen.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/joseamaita.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/joseamaita.com\/en\/#\/schema\/person\/b53d49d3ddf8f348fed0d484b541b1a4","name":"Jos\u00e9 Alberto Maita","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/joseamaita.com\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dfc4d3fa06e5fa2aee2ef3834715e1b8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dfc4d3fa06e5fa2aee2ef3834715e1b8?s=96&d=mm&r=g","caption":"Jos\u00e9 Alberto Maita"},"url":"https:\/\/joseamaita.com\/en\/author\/joseamaita\/"}]}},"jetpack_featured_media_url":"https:\/\/joseamaita.com\/en\/wp-content\/uploads\/sites\/2\/2022\/06\/img_p_06_005.png","_links":{"self":[{"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/posts\/559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/comments?post=559"}],"version-history":[{"count":115,"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/posts\/559\/revisions"}],"predecessor-version":[{"id":2821,"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/posts\/559\/revisions\/2821"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/media\/715"}],"wp:attachment":[{"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/media?parent=559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/categories?post=559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/joseamaita.com\/en\/wp-json\/wp\/v2\/tags?post=559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}