{"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 class=\"wp-block-paragraph\">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_83 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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-8f761849 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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-8f761849 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">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-8f761849 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 class=\"wp-block-paragraph\">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-8f761849 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-8f761849 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-8f761849 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-8f761849 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-8f761849 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-8f761849 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 class=\"wp-block-paragraph\">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 class=\"wp-block-paragraph\">Did you enjoy this OPC Router tutorial with a Simulator? I&#8217;d love to hear from you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stay tuned and follow part 7 of this tutorial! \ud83d\ude0e<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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","protected":false},"author":1,"featured_media":715,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"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 v27.6 - 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\":1245,\"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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6353d5db3662253e6d2b5cd3e64c2934727e1bbd3fc9b7a909b7dffd8d9abcab?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6353d5db3662253e6d2b5cd3e64c2934727e1bbd3fc9b7a909b7dffd8d9abcab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6353d5db3662253e6d2b5cd3e64c2934727e1bbd3fc9b7a909b7dffd8d9abcab?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":1245,"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:\/\/secure.gravatar.com\/avatar\/6353d5db3662253e6d2b5cd3e64c2934727e1bbd3fc9b7a909b7dffd8d9abcab?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6353d5db3662253e6d2b5cd3e64c2934727e1bbd3fc9b7a909b7dffd8d9abcab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6353d5db3662253e6d2b5cd3e64c2934727e1bbd3fc9b7a909b7dffd8d9abcab?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}]}}