<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Siemens PLC Archives | DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/category/manufacturing-automation-intelligence/siemens-plc/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Fri, 04 Sep 2026 14:07:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>

<image>
	<url>https://static.dmcinfo.com/wp-content/uploads/2025/04/site-icon-150x150.png</url>
	<title>Siemens PLC Archives | DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Getting Started with the Siemens Modbus Extended Library for TIA Portal</title>
		<link>https://static.dmcinfo.com/blog/44660/siemens-modbus-extended-library-for-tia-portal/</link>
		
		<dc:creator><![CDATA[Noam Ayalon]]></dc:creator>
		<pubDate>Thu, 28 May 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Siemens Open Library]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=44660</guid>

					<description><![CDATA[<p>The rexhip Modbus library–part of the Siemens Open Library–is an open-source extension to the base Modbus functions included in TIA Portal. It provides user-friendly Modbus master function blocks (FBs) for both TCP and RTU applications, as well as a host of pre-configured device profiles called “station blocks” (SBs), which include all the necessary queries to [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/44660/siemens-modbus-extended-library-for-tia-portal/">Getting Started with the Siemens Modbus Extended Library for TIA Portal</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The rexhip Modbus library–part of the Siemens Open Library–is an open-source extension to the base Modbus functions included in TIA Portal. It provides user-friendly Modbus master function blocks (FBs) for both TCP and RTU applications, as well as a host of pre-configured device profiles called “station blocks” (SBs), which include all the necessary queries to communicate with various common hardware. This guide will cover how to set up Modbus communications in TIA Portal using this library and the tools it provides for troubleshooting.</p>



<p class="wp-block-paragraph">This guide focuses on using the rexhip library, not on general Modbus theory. Topics such as Modicon addressing details, data length inference, byte/word ordering, concurrency limits, and protocol-level RTU vs TCP differences are intentionally omitted where they are handled internally by the library or are covered in standard Modbus documentation.</p>



<h2 class="wp-block-heading" id="h-the-mb-query-function-block">The “mb_query” Function Block</h2>



<h3 class="wp-block-heading" id="h-concept">Concept</h3>



<p class="wp-block-paragraph">The mb_query FB defines a Modbus request that gets sent by a Modbus master FB. Each defined query gets passed into the master block, where it is automatically handled one at a time. Queries can be defined independent of Station Blocks (SBs), but are often defined within SBs because of their improved diagnostic and troubleshooting features. We will cover this more in-depth later.</p>



<h3 class="wp-block-heading" id="h-mb-query-fb-input-parameters">mb_query FB Input Parameters</h3>



<p class="wp-block-paragraph">The following parameters are passed into mb_query to define a query:</p>



<p class="wp-block-paragraph"><strong>mb_addr: </strong>Modbus device address (slave address/unit identifier)</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)"><strong>mode: </strong>This is the Modbus function code. The following are pre-defined tags in mb_query for the supported function codes:</p>



<p class="has-text-align-center wp-block-paragraph"><em>Table 1: mb_query Modes</em></p>



<figure class="wp-block-table aligncenter" style="padding-bottom:var(--wp--preset--spacing--40)"><table class="has-fixed-layout"><tbody><tr><td><strong>Struct</strong></td><td><strong>Tag(Mode)</strong></td><td><strong>Type</strong></td><td><strong>Modbus Function Code</strong></td></tr><tr><td>Read</td><td>“discrete_output”</td><td>Coil</td><td>01</td></tr><tr><td>Read</td><td>“discrete_input”</td><td>Discrete Input</td><td>02</td></tr><tr><td>Read</td><td>“holding_reg”</td><td>Register</td><td>03</td></tr><tr><td>Read</td><td>“input_reg”</td><td>Register</td><td>04</td></tr><tr><td>Write</td><td>“single_discrete_output”</td><td>Coil</td><td>05</td></tr><tr><td>Write</td><td>“single_holding_reg”</td><td>Register</td><td>06</td></tr><tr><td>Write</td><td>“discrete_output”</td><td>Coil</td><td>15</td></tr><tr><td>Write</td><td>“holding_reg”</td><td>Register</td><td>16</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>data_addr:</strong> This is the starting address of the desired data within the Modbus data area. The rexhip library uses zero-based addressing.</p>



<p class="wp-block-paragraph"><strong>Note:</strong> Some Modbus devices display registers as one-based, so if values are off by one register, this is probably why.</p>



<p class="wp-block-paragraph" style="padding-top:0;padding-bottom:var(--wp--preset--spacing--40)">data_addr does not refer to values such as 40001, which are often found on datasheets.</p>



<p class="has-text-align-center wp-block-paragraph"><em>Table 2: data_addr Examples</em></p>



<figure style="padding-bottom:var(--wp--preset--spacing--40)" class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Datasheet Notation</strong></td><td><strong>Operation and Data Type</strong></td><td><strong>Function Code (mode)</strong></td><td><strong>data_addr</strong></td></tr><tr><td>00001</td><td>Read Coil</td><td>01</td><td>0</td></tr><tr><td>00025</td><td>Write Multiple Coils</td><td>15</td><td>24</td></tr><tr><td>30020</td><td>Read Input Register</td><td>04</td><td>19</td></tr><tr><td>40005</td><td>Write Single Holding Register</td><td>06</td><td>4</td></tr><tr><td>40256</td><td>Write Multiple Holding Registers</td><td>16</td><td>255</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>dara_ptr:</strong> This is an Input/Output where the data that will be sent or received is stored. It can be any data type, including arrays and UDTs.</p>



<p class="wp-block-paragraph"><span style="margin: 0px;padding: 0px"><strong>data_len:&nbsp;</strong>This is the length of the data in the query &#8211; the number of either bits or 16-bit registers for coils/holding registers, respectively, that will be read/written, starting at data_addr</span>.</p>



<p class="wp-block-paragraph">This is an optional, generally discouraged parameter to specify; it will be automatically calculated from the length of data_ptr by default.</p>



<p class="wp-block-paragraph">If you want to override the automatic calculation, assign data_len to the desired length, and then set it back to automatic after the mb_query function call using <code>#mb_query.data_len :=&nbsp; #mb_query.c.auto_len</code></p>



<h3 class="wp-block-heading" id="h-modicon-addressing-convention">Modicon Addressing Convention</h3>



<p class="wp-block-paragraph" style="padding-top:0;padding-bottom:var(--wp--preset--spacing--40)">The rexhip library supports the Modicon convention for data addressing with the following static tags in <strong>mb_query</strong> to be used when declaring the mode of the query:</p>



<p class="has-text-align-center wp-block-paragraph"><em>Table 3: Modicon Convention Modes</em></p>



<figure style="padding-bottom:var(--wp--preset--spacing--40)" class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Struct</strong></td><td><strong>Tag (Mode)</strong></td><td><strong>Modbus Function Codes</strong></td></tr><tr><td>Mode</td><td>&#8220;read&#8221;</td><td>01, 02, 03, 04</td></tr><tr><td>Mode</td><td>&#8220;write_single&#8221;</td><td>05, 06</td></tr><tr><td>Mode</td><td>&#8220;write&#8221;</td><td>15, 16</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">When using one of the above modes, data_addr declarations take the form found on datasheets (e.g., 40005).</p>



<h3 class="wp-block-heading" id="h-examples-of-mb-query-calls">Examples of mb_query Calls</h3>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">The following is an example of&nbsp;mb_query&nbsp;function calls&nbsp;modified&nbsp;from one of the station blocks included in the&nbsp;rexhip&nbsp;library.&nbsp;In this scenario, three queries are being configured, two of which read input registers and one of which reads holding registers.&nbsp;</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img fetchpriority="high" decoding="async" width="643" height="513" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-1.png" alt="Image showing a Siemens TIA Portal programming environment, specifically focusing on the interface and Structured Control Language (SCL) code for a Modbus TCP or RTU communication block." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44661" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;width:500px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-1.png 643w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-1-300x239.png 300w" sizes="(max-width: 643px) 100vw, 643px" /><figcaption class="wp-element-caption"><em>Figure 1: mb_query Function Call Example 1</em></figcaption></figure>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">The following example shows an mb_query function call used to configure a request that writes multiple values to Modbus holding registers. The values are consolidated into an array, which is then passed to mb_query as a single data_ptr. The first array value will be written to the register at data_addr, the second value will be written to the register at data_addr + 1, and so on.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border is-style-default"><img decoding="async" width="431" height="374" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-2.png" alt="Image showing a Siemens TIA Portal interface, specifically a Function Block (FB) or Function (FC) being programmed in Structured Control Language (SCL)." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44662" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:1.1524312077035448;object-fit:cover;width:500px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-2.png 431w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-2-300x260.png 300w" sizes="(max-width: 431px) 100vw, 431px" /><figcaption class="wp-element-caption"><em>Figure 2: mb_query Function Call Example 2</em></figcaption></figure>



<h3 class="wp-block-heading" id="h-the-mb-query-bits-function-block">The “mb_query_bits” Function Block</h3>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">The mb_query FB is designed to process data in bytes, so any queried booleans must total to whole bytes. If the number of queried bits does not equal complete bytes, either query a Boolean array with a length divisible by 8 (leaving unused bits as needed) or use the mb_query_bits FB instead.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="393" height="86" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-3.png" alt="Image of a code snippet written in Structured Text (ST)." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44663" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:4.334309839738067;object-fit:cover;width:500px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-3.png 393w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-3-300x66.png 300w" sizes="(max-width: 393px) 100vw, 393px" /><figcaption class="wp-element-caption"><em>Figure 3: mb_query_bits Function Call Example</em></figcaption></figure>



<h2 class="wp-block-heading" id="h-station-blocks">Station Blocks</h2>



<h3 class="wp-block-heading" id="h-concept-0">Concept</h3>



<p class="wp-block-paragraph">SBs group queries together, so the master block treats them as belonging to the same Modbus device. Device-level execution context is helpful for both tracking device communication and handling query timeouts.</p>



<p class="wp-block-paragraph">If a device encounters communication errors, queries inside the SB can be skipped together with occasional retries, while other devices keep running.</p>



<p class="wp-block-paragraph">This prevents one problematic device from interfering with the entire bus. Also, it is easy to set up multiple devices of the same type by creating multiple instances of the SB.</p>



<h3 class="wp-block-heading" id="h-implementation">Implementation</h3>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--20)">SBs contain an SB header and footer, which are functions included in the rexhip library. The header marks the start of the SB, and all mb_query calls that follow it are tagged as belonging to that device. The footer closes the station context. Both the header and the footer take an mb_query instance and a tag of type mb_station_block_udt as arguments.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="532" height="523" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-4.png" alt="Image showing a Siemens TIA Portal environment with a Structured Control Language (SCL) block designed to control Auma actuators via Modbus RTU." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44664" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;width:500px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-4.png 532w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-4-300x295.png 300w" sizes="(max-width: 532px) 100vw, 532px" /><figcaption class="wp-element-caption"><em>Figure 4: Station Block Example</em></figcaption></figure>



<p class="wp-block-paragraph">As previously mentioned, there are many pre-configured SBs in the rexhip library, as well as the header and footer functions that allow the creation of custom SBs.</p>



<h3 class="wp-block-heading" id="h-the-station-block-udt">The Station Block UDT</h3>



<p class="wp-block-paragraph">The tag of type mb_station_block_udt in an SB provides useful information and configuration options for a device’s queries and is one of the primary reasons to use SBs.</p>



<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="312" height="475" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-5.png" alt="Image displaying a User Defined Data Type (UDT) in Siemens TIA Portal." class="wp-image-44665" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-5.png 312w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-5-197x300.png 197w" sizes="(max-width: 312px) 100vw, 312px" /><figcaption class="wp-element-caption"><em>Figure 5: Station Block UDT Contents</em></figcaption></figure>



<h3 class="wp-block-heading" id="h-configuration-conf">Configuration (conf):</h3>



<ul class="wp-block-list">
<li><strong>skip_code:</strong> Both the station block header and footer immediately return, preventing all query scheduling, execution, and result handling for that station.</li>



<li style="padding-bottom:var(--wp--preset--spacing--30)"><strong>disable:</strong> Soft stop for the SB handled by the footer, allowing the station to complete its normal end-of-cycle logic before it stops participating further.</li>
</ul>



<p class="has-text-align-center wp-block-paragraph"><em>Table 4: skip_code vs disable functionality</em></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td></td><td><strong>skip_code</strong></td><td><strong>disable</strong></td></tr><tr><td><strong>Checked in header</strong></td><td>Yes</td><td>No</td></tr><tr><td><strong>Checked in footer</strong></td><td>Yes</td><td>Yes</td></tr><tr><td><strong>Stops header logic</strong></td><td>Yes</td><td>No</td></tr><tr><td><strong>Stops footer logic</strong></td><td>Yes</td><td>No</td></tr><tr><td><strong>Allows logging</strong></td><td>No</td><td>Yes</td></tr><tr><td><strong>Allows graceful finish</strong></td><td>No</td><td>Yes</td></tr><tr><td><strong>Typical intent</strong></td><td>Hard kill</td><td>Controlled stop</td></tr></tbody></table></figure>



<ul class="wp-block-list">
<li style="padding-top:var(--wp--preset--spacing--40)"><strong>read_only:</strong> Only allows read queries to be executed.</li>



<li><strong>max_comm_error</strong>: The number of consecutive communications faults that must occur before a communication error is thrown.</li>



<li><strong>exec_x_quries:</strong> The number of queries in the SB to be executed in each loop.</li>
</ul>



<p class="wp-block-paragraph">The “out” struct provides information about the station’s current operational status rather than historical data.</p>



<ul class="wp-block-list">
<li><span style="margin: 0px;padding: 0px"><strong>error:</strong>&nbsp;General error flag which stays true until all queries in the SB complete successfully&nbsp;in one cycle</span>.</li>



<li><strong>error_comm: </strong>True if consecutive communication errors exceed max_comm_error.</li>



<li><strong>finish:</strong> True for one scan when the SB passes execution to the next device.</li>
</ul>



<p class="wp-block-paragraph">The “log” struct provides historical, cumulative data about query execution and error conditions for diagnostics and analysis.</p>



<ul class="wp-block-list">
<li><strong>connected_time:</strong> Timestamp of when a device last regained communication.</li>



<li><strong>disconnected_time:</strong> Timestamp of when a device last lost communication.</li>



<li><strong>done_cnt:</strong> The number of successful queries.</li>



<li><strong>error_comm_cnt:</strong> The number of communication errors.</li>



<li><strong>error_exception_cnt:</strong> The number of non-communication-related errors.</li>



<li><strong>error_status:</strong> The error status code of the most recent failed query.</li>



<li><strong>error_data_addr:</strong> The data address associated with the most recent failed query.</li>
</ul>



<p class="wp-block-paragraph">The “z” struct is used for the internal workings of the rexhip functions and is not intended for logic, diagnostics, or configuration.</p>



<h3 class="wp-block-heading" id="h-station-block-troubleshooting-tools">Station Block Troubleshooting Tools</h3>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">The&nbsp;mb_station_block_udt&nbsp;“log”&nbsp;struct&nbsp;allows engineers to quickly&nbsp;identify&nbsp;communication issues and respond appropriately. The following&nbsp;examples&nbsp;demonstrate&nbsp;how it&nbsp;could&nbsp;be used to&nbsp;troubleshoot&nbsp;faulty&nbsp;device communications.&nbsp;</p>



<p class="has-text-align-center wp-block-paragraph"><em>Table 5: Example &#8220;log&#8221; Struct Use Cases</em></p>



<figure style="padding-bottom:var(--wp--preset--spacing--30)" class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Tag</strong></td><td><strong>Use Cases</strong></td></tr><tr><td><strong>connected_time</strong></td><td>Identifying if a device is repeatedly dropping and reconnecting.</td></tr><tr><td><strong>disconnected_time</strong></td><td>Identifying if a device is repeatedly dropping and reconnecting.<br>Correlating communication loss with external events, such as equipment being powered down.</td></tr><tr><td><strong>done_cnt</strong></td><td>Confirming the device is completing successful queries.<br>Estimating how quickly queries are being completed.</td></tr><tr><td><strong>error_comm_cnt</strong></td><td>Confirming the device is attempting to communicate.<br>Identifying errors as communication errors.</td></tr><tr><td><strong>error_exception_cnt</strong></td><td>Confirming the device is attempting to communicate.<br>Identifying errors as non-communication Modbus exceptions.</td></tr><tr><td><strong>error_status</strong></td><td>Identifying the specific type of error affecting a device.</td></tr><tr><td><strong>error_data_addr</strong></td><td>Identifying the exact misconfigured register/coil causing errors.</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-modbus-rtu-setup" style="padding-top:var(--wp--preset--spacing--30)">Modbus RTU Setup</h2>



<h3 class="wp-block-heading" id="h-the-modbus-master-block">The Modbus Master Block</h3>



<p class="wp-block-paragraph">The rexhip library includes two RTU master function blocks, mb_master_1200_ctrl and mb_master_1500_ctrl, for Siemens 1200 and 1500 PLCs, respectively. This guide will use a 1200-series PLC as an example. The 1500-series master block includes an additional operating_mode input that is mapped to the operating mode of the underlying comm_load instruction.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">The master control block takes inputs for the hardware ID and baud rate, and an input/output of type mb_query. In the instance data of the master block, the static struct “conf” contains the parity, retries, timeout gain, and timeout offset parameters.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="513" height="550" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-6.png" alt="Image displaying a function block (FB) configuration for a Modbus master communication setup in Siemens TIA Portal." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44670" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;width:500px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-6.png 513w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-6-280x300.png 280w" sizes="(max-width: 513px) 100vw, 513px" /><figcaption class="wp-element-caption"><em>Figure 6: Modbus Master Block Call Example</em></figcaption></figure>



<h3 class="wp-block-heading" id="h-timeout">Timeout</h3>



<p class="wp-block-paragraph">The timeout is automatically calculated as follows:</p>



<p class="wp-block-paragraph"><em>Timeout = (total bits transmitted ÷ baud rate ) x timeout gain + timeout offset</em></p>



<p class="wp-block-paragraph">The result is clamped to 5 ms ≤ result ≤ 65 s.</p>



<p class="wp-block-paragraph">This calculation scales the timeout based on the amount of information being transmitted. Setting gain = 0 disables auto-calculation and uses the offset as a fixed timeout.</p>



<h3 class="wp-block-heading" id="h-integrating-queries-with-the-master-block">Integrating Queries with the Master Block</h3>



<p class="wp-block-paragraph">Below is an example of one way to load queries into a Modbus master block using station blocks.</p>



<p class="wp-block-paragraph">This example will use the fbModbus function block shown above, and its instance memory data block “instance_fbModbus.” It will also use two pre-configured station blocks from the rexhip library–AUMA Valve and ABB AquaMaster 3 flowmeter.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="461" height="409" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-7.png" alt="Image displaying a function block (FB) configuration for a Modbus master communication setup in Siemens TIA Portal." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44672" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:1.1254528189076074;width:455px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-7.png 461w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-7-300x266.png 300w" sizes="(max-width: 461px) 100vw, 461px" /><figcaption class="wp-element-caption"><em>Figure 7: AUMA Valve Station Block</em></figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image alignleft size-full is-resized has-custom-border"><img decoding="async" width="476" height="374" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-8.png" alt="Image of a code snippet for a Siemens PLC (S7-1200/1500) using a custom library to interface with an ABB AquaMaster 3 Electromagnetic Flowmeter via Modbus RTU or TCP." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44673" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:1.2685827552031714;width:510px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-8.png 476w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-8-300x236.png 300w" sizes="(max-width: 476px) 100vw, 476px" /><figcaption class="wp-element-caption"><em>Figure 8: ABB AquaMaster 3 Station Block</em></figcaption></figure>
</div>
</div>



<p class="wp-block-paragraph">OB1 (Main) will call fbModbus, which holds the Modbus master block, and fbDevices, which holds the station blocks.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">This example system will have three valves and two flowmeters, so three valve station blocks and two flowmeter station blocks are called in fbDevices. Each one is given a unique Modbus address, and mb_query is set to “instance_fbModbus.mb_query” for all five devices.</p>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="278" height="491" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-9.png" alt="Image of two networks of Ladder Logic programming within the TIA Portal software environment" class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44674" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-9.png 278w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-9-170x300.png 170w" sizes="(max-width: 278px) 100vw, 278px" /><figcaption class="wp-element-caption"><em>Figure 9: FB Calls in OB1</em></figcaption></figure>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="1166" height="725" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-10.png" alt="Screenshot showing the configuration of a Function Block (FB) in Siemens TIA Portal, specifically focusing on an array of device instances being called in a ladder logic program." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44675" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-10.png 1166w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-10-300x187.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-10-1024x637.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-10-768x478.png 768w" sizes="(max-width: 1166px) 100vw, 1166px" /><figcaption class="wp-element-caption"><em>Figure 10: fbDevices</em></figcaption></figure>
</div>
</div>



<h3 class="wp-block-heading" id="h-the-path-of-the-query">The Path of the Query</h3>



<ol class="wp-block-list">
<li>The query starts in an SB where it is configured, and is then passed out of the SB.</li>



<li>It is then passed to fbModbus&#8217;s instance data block via fbDevices<em>.</em></li>



<li>It then gets loaded into the Modbus master block.</li>
</ol>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">Each query loaded into the master block is automatically placed in a queue and handled one at a time by the master block.</p>



<div class="wp-block-columns are-vertically-aligned-bottom is-layout-flex wp-container-core-columns-is-layout-48049e16 wp-block-columns-is-layout-flex" style="padding-top:var(--wp--preset--spacing--30)">
<div class="wp-block-column is-vertically-aligned-bottom is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="513" height="678" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-11.png" alt="Selected code snippet shows a Modbus write instruction being executed within a Siemens TIA Portal environment." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44676" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:0.7585678376555699;width:334px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-11.png 513w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-11-227x300.png 227w" sizes="(max-width: 513px) 100vw, 513px" /><figcaption class="wp-element-caption"><em>Figure 11: mb_query Definition in Station Block</em></figcaption></figure>
</div>



<div class="wp-block-column is-vertically-aligned-bottom is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="757" height="484" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-12.png" alt="Image illustrates the mapping of a Static variable from a Function Block instance to an input parameter of another Function Block in a Siemens TIA Portal environment." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44677" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-12.png 757w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-12-300x192.png 300w" sizes="(max-width: 757px) 100vw, 757px" /><figcaption class="wp-element-caption"><em>Figure 12: mb_query Transferred to &#8220;instance_fbModbus&#8221;</em></figcaption></figure>
</div>



<div class="wp-block-column is-vertically-aligned-bottom is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="513" height="559" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-13.png" alt="Siemens S7-1200 PLC function block showing the mb_master_1200_ctrl configured for Modbus RTU communication, with a static mb_query variable mapped to the control block and constants defining RS485 port and baud rate." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44678" style="border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-13.png 513w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-13-275x300.png 275w" sizes="(max-width: 513px) 100vw, 513px" /><figcaption class="wp-element-caption"><em>Figure 13: mb_query Arrives at Master Block</em></figcaption></figure>
</div>
</div>



<h3 class="wp-block-heading" id="h-modbus-tcp-client-setup">Modbus TCP Client Setup</h3>



<p class="wp-block-paragraph">The rexhip library provides a wrapper for the Modbus TCP client function native to TIA Portal, mb_tcp_ctrl (which may be called mb_client_ctrl depending on the library version). The library does not provide a wrapper for the Modbus TCP server function, so if configuring a server, use the native TIA Portal function MB_SERVER.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">The mb_tcp_ctrl block takes inputs for the hardware interface, connection ID (should match the server connection ID), server IP address, TCP port, timeout, and an input/output of mb_query. Below is an example of an mb_tcp_ctrl block call.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border" style="margin-top:var(--wp--preset--spacing--40);margin-bottom:var(--wp--preset--spacing--40)"><img decoding="async" width="441" height="251" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-14.png" alt="The block shown is a Function Block (FB9) named &quot;mb_tcp_ctrl&quot;, which is designed to manage Modbus TCP client communications within a Siemens TIA Portal environment." class="has-border-color wp-image-44679" style="border-color:#eeeeee;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:1.7391090024031055;object-fit:cover;width:500px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-14.png 441w, https://static.dmcinfo.com/wp-content/uploads/2026/05/siemens-modbus-extended-library-image-14-300x171.png 300w" sizes="(max-width: 441px) 100vw, 441px" /><figcaption class="wp-element-caption"><em>Figure 14: Modbus TCP Client Block Call Example</em></figcaption></figure>



<p class="wp-block-paragraph">Queries are loaded into the TCP control block in the exact same way as the RTU control blocks, and query statuses can similarly be monitored in the instance memory of SBs.</p>



<h2 class="wp-block-heading" id="h-conclusion">Conclusion</h2>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">The rexhip Modbus library provides a structured, consistent way to set up and manage Modbus RTU and TCP communications in TIA Portal. Using standard function blocks and station blocks simplifies configuration, improves readability, and makes troubleshooting easier across a wide range of devices. This approach helps engineers spend less time dealing with protocol details and more time building reliable, maintainable automation systems.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step">Planning a new automation project or controls upgrade?</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">DMC delivers <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/">Manufacturing Automation</a> and <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/">PLC Programming</a> solutions that help reduce downtime and improve accuracy on the factory floor.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/44660/siemens-modbus-extended-library-for-tia-portal/">Getting Started with the Siemens Modbus Extended Library for TIA Portal</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Commission a WinCC Unified Comfort Panel</title>
		<link>https://static.dmcinfo.com/blog/44303/wincc-unified-comfort-panel-commissioning-settings/</link>
		
		<dc:creator><![CDATA[Jackson Seida]]></dc:creator>
		<pubDate>Wed, 20 May 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Siemens]]></category>
		<category><![CDATA[Siemens HMI]]></category>
		<category><![CDATA[WinCC Comfort]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=44303</guid>

					<description><![CDATA[<p>Commissioning a WinCC Unified Comfort Panel is one of the last and most critical steps in completing an HMI project. A smooth commissioning process ensures secure communication, reliable runtime behavior, and a system prepared for long-term operation. In this guide, we walk through the essential steps for downloading, configuring, and commissioning a WinCC Unified Comfort [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/44303/wincc-unified-comfort-panel-commissioning-settings/">How to Commission a WinCC Unified Comfort Panel</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Commissioning a WinCC Unified Comfort Panel is one of the last and most critical steps in completing an HMI project. A smooth commissioning process ensures secure communication, reliable runtime behavior, and a system prepared for long-term operation.<a></a></p>



<p class="wp-block-paragraph">In this guide, we walk through the essential steps for downloading, configuring, and commissioning a WinCC Unified Comfort Panel using Siemens TIA Portal. You will learn how to set network parameters, configure users and security, enable encrypted transfers, and successfully load your project to the device. As <a href="https://static.dmcinfo.com/blog/16495/setting-up-basic-user-profiles-and-login-for-wincc-unified-runtime/">Siemens Solutions Partners</a>, we also provide tips for common commissioning tasks to save time and prevent headaches in the field.</p>



<p class="wp-block-paragraph">All example screenshots were captured using TIA Portal V20 and an MTP700 Unified Comfort Panel (6AV2 128-3GB06-0AX1), but the same concepts apply across the WinCC Unified Comfort Panel family.<a id="_msocom_1"></a></p>



<h2 id="h-pre-requisites" class="wp-block-heading">Pre-requisites</h2>



<p class="wp-block-paragraph">Before you begin commissioning, your system must meet certain prerequisites. For instance, your TIA Portal project must be set up with the appropriate hardware, network connections, and screens developed, and your WinCC Unified Comfort Panel must be powered on. Here is how you download your project and commission your WinCC Unified Comfort Panel.</p>



<h2 id="h-change-ip-address" class="wp-block-heading">Change IP Address</h2>



<p class="wp-block-paragraph">On the WinCC Unified Comfort Panel, go to <strong>Network and Internet</strong>, then <strong>Network settings</strong>. Here, select the port you wish to set the IP address for, then select <strong>Specify an IP address</strong>. Enter your desired IP address and subnet mask and click the <strong>Set IP address</strong> button.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border" style="margin-top:var(--wp--preset--spacing--60);margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="801" height="479" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-1.png" alt="The network settings configuration screen for a Siemens SIMATIC HMI Unified Comfort panel displaying an IP address and Subnet mask." class="has-border-color wp-image-44316" style="border-color:#dfe6ee;border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:1.6179264636263215;object-fit:cover;width:798px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-1.png 801w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-1-300x179.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-1-768x459.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></figure>



<h2 id="h-configure-users" class="wp-block-heading">Configure Users</h2>



<p class="wp-block-paragraph">To configure users, go to <strong>“Security settings” > “Users and roles”</strong> in the TIA Portal project tree. From there, create an administrator user, set a password, and assign it all roles. Feel free to learn more about Users and roles, by <a href="https://static.dmcinfo.com/blog/16495/setting-up-basic-user-profiles-and-login-for-wincc-unified-runtime/" type="link" id="https://static.dmcinfo.com/blog/16495/setting-up-basic-user-profiles-and-login-for-wincc-unified-runtime/">seeing a previous guide</a> about setting up basic user profiles for WinCC Unified Runtime.</p>



<figure class="wp-block-image aligncenter size-full is-resized" style="margin-top:var(--wp--preset--spacing--60);margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="1919" height="1038" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-2.png" alt="Siemens TIA Portal V20 user management configuration screen for a Unified Comfort Panel showing create password dialogue box." class="wp-image-44317" style="aspect-ratio:1.8487790131335864;width:1174px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-2.png 1919w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-2-300x162.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-2-1024x554.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-2-768x415.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-2-1536x831.png 1536w" sizes="(max-width: 1919px) 100vw, 1919px" /></figure>



<h2 id="h-configure-encrypted-transfer" class="wp-block-heading">Configure Encrypted Transfer</h2>



<p class="wp-block-paragraph">An encrypted transfer ensures secure download of project files to your WinCC Unified Comfort Panel. On the panel, navigate to <strong>Service and commissioning &gt; Transfer</strong>. Enable the <strong>Enable transfer</strong> checkbox and create a password.</p>



<p class="wp-block-paragraph">In TIA Portal, go to <strong>Runtime settings</strong> under your HMI. In the <strong>General</strong> section, enable the <strong>Activate encrypted transfer</strong> checkbox and enter the same password that you created on your WinCC Unified Comfort Panel.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border" style="margin-top:var(--wp--preset--spacing--60);margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="801" height="479" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-3.png" alt="This screen is from the Siemens SIMATIC HMI Unified Comfort panel's Service and Commissioning menu with a red box around 'Enable transfer' and a password field." class="has-border-color wp-image-44318" style="border-color:#dfe6ee;border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;width:800px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-3.png 801w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-3-300x179.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-3-768x459.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></figure>



<h2 id="h-download-to-the-unified-comfort-panel" class="wp-block-heading">Download to the Unified Comfort Panel</h2>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">Finally, it is time to download your developed screens and configured TIA Portal project to the WinCC Unified Comfort Panel. To do so, click on your HMI in the Project tree, then click the <strong>Download</strong> button in the toolbar. This opens the <strong>Extended download to device</strong> window.</p>



<figure class="wp-block-image aligncenter size-full is-resized" style="margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="1919" height="1040" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-4.png" alt="The General runtime settings for a Siemens SIMATIC HMI Unified Comfort Panel within the TIA Portal engineering software." class="wp-image-44319" style="aspect-ratio:1.8450605075257283;width:1146px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-4.png 1919w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-4-300x163.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-4-1024x555.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-4-768x416.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-4-1536x832.png 1536w" sizes="(max-width: 1919px) 100vw, 1919px" /></figure>



<p class="wp-block-paragraph" style="padding-top:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40)">From here, set the <strong>Type of PG/PC Interface</strong> to PN/IE, and the <strong>PG/PC Interface</strong> to your network adapter, and click <strong>Start search</strong>. If you do not see your device, you can see all compatible devices by selecting the drop-down menu above the table of possible target devices and choosing <strong>Show all compatible devices</strong>. When you see your HMI appear in the table, select it and click <strong>Load</strong>.</p>



<figure class="wp-block-image aligncenter size-full is-resized" style="margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="1919" height="1040" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-5.png" alt="Siemens TIA Portal software interface during an &quot;Extended download to device&quot; operation." class="wp-image-44320" style="width:1164px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-5.png 1919w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-5-300x163.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-5-1024x555.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-5-768x416.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-5-1536x832.png 1536w" sizes="(max-width: 1919px) 100vw, 1919px" /></figure>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">In the <strong>Load preview</strong> window, select <strong>Full download</strong> and click <strong>Load</strong>. Check to ensure that the option to download all users and authentication settings is selected. If successful, you should then see your TIA Portal screens loaded onto the WinCC Unified Comfort Panel!</p>



<figure class="wp-block-image aligncenter size-full is-resized" style="margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="790" height="469" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-6.png" alt="Load Preview dialog box in Siemens TIA Portal software, showing the steps required to transfer a project to an HMI device." class="wp-image-44321" style="width:800px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-6.png 790w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-6-300x178.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-6-768x456.png 768w" sizes="(max-width: 790px) 100vw, 790px" /></figure>



<h2 id="h-trusting-the-plc-communication-certificate" class="wp-block-heading">Trusting the PLC Communication Certificate</h2>



<p class="wp-block-paragraph">By default, the <strong>Only allow secure PG/PC and HMI communication</strong> setting in your TIA Portal project for your PLC is enabled. Enabling this means that during the download of your TIA Portal Project to the PLC and HMI, a PLC communication certificate will be automatically generated and transferred to your WinCC Unified Comfort Panel. But this PLC communication certificate needs to be trusted by completing the following steps.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">Go to <strong>Security&gt;Certificates</strong> on the WinCC Unified Comfort Panel. In the <strong>Certificate store</strong> dropdown menu, <strong>select Other Certificates</strong>. Here you should see your certificate, and press <strong>Trust</strong>. Then, restart the HMI runtime software.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border" style="margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="801" height="479" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-7.png" alt="Security &gt; Certificates section of a Siemens SIMATIC HMI Unified Comfort Panel configuration screen with 'Other Certificates' selected form a Certificates dropdown menu," class="has-border-color wp-image-44322" style="border-color:#dfe6ee;border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;width:800px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-7.png 801w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-7-300x179.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-7-768x459.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></figure>



<h2 id="h-additional-settings-to-apply-to-your-hmi-panel" class="wp-block-heading">Additional Settings to Apply to Your HMI Panel</h2>



<p class="wp-block-paragraph">Beyond core commissioning steps, there are a handful of additional settings that can be helpful for further improving system reliability and maintainability. While they aren&#8217;t required for every project, these settings are commonly used to help reduce downtime, manage system access, and recover information and settings in the event of outages or reboots. Consider the settings below as they apply to your unique project requirements. Storage Device Set Up</p>



<h3 id="h-storage-device-set-up" class="wp-block-heading">Storage Device Set Up</h3>



<p class="wp-block-paragraph">When commissioning a WinCC Unified Comfort Panel, it is often recommended to activate the <strong>Automatic Backup</strong> option. This will ensure that the HMI device&#8217;s data is backed up to the storage device. If the WinCC Unified Comfort Panel becomes inoperable, you can simply purchase a replacement and insert it into the new HMI to resume operation.</p>



<p class="wp-block-paragraph">To do this, slot in a SIMATIC HMI Memory (SD) Card into the X50&nbsp;SYSTEM slot of the Unified Comfort Panel. Note, the system memory card of the comfort panel must be a SIMATIC HMI Memory Card.</p>



<p class="wp-block-paragraph">Slotting in the storage device will cause a <strong>System memory card plugged</strong> dialog window to pop up. Click <strong>OK</strong>. This takes you to the settings <strong>Service and Commissioning/ Automatic Backup</strong> screen.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--20)">Here, click the <strong>Start</strong> button, and <strong>OK</strong> in the <strong>Start automatic backup</strong> dialog window to activate Automatic Backups. Once preparation is complete, the <strong>Status</strong> box will display automatic backup active.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border" style="margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="801" height="479" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-8.png" alt="Automatic backup status with the 'Start' button highlighted." class="has-border-color wp-image-44323" style="border-color:#dfe6ee;border-width:2px;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;width:800px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-8.png 801w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-8-300x179.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-8-768x459.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></figure>



<h3 id="h-restrict-control-panel-access" class="wp-block-heading"><strong>Restrict Control Panel Access</strong></h3>



<p class="wp-block-paragraph">To limit access to certain system settings, go to <strong>Security</strong> and <strong>Control panel access</strong> on the WinCC Unified Comfort Panel and click the checkbox to <strong>Enable password protection for control panel</strong>. This option requires a user with proper access to log in to use the WinCC Control panel, reducing the risk of accidental or unauthorized changes.</p>



<h3 id="h-automatic-runtime-start" class="wp-block-heading"><strong>Automatic Runtime Start</strong></h3>



<p class="wp-block-paragraph">To set a delay time before the automatic start of a project, click the icon with a wrench and a play button. This will open the Runtime Properties page. Locate the <strong>Automatic runtime start</strong> section and select a time from the &#8220;Waiting time(s)&#8221; dropdown menu. This is a very helpful setting to allow for some time before the automatic start to access the control panel.</p>



<h3 id="h-enable-smart-server-access" class="wp-block-heading">Enable Smart Server Access</h3>



<p class="wp-block-paragraph">Enabling <strong>Smart Server Access</strong> allows VNC access to the WinCC Unified Comfort Panel.</p>



<p class="wp-block-paragraph">To enable<strong> this setting</strong> in TIA Portal, go to <strong>Runtime settings</strong>, &gt; <strong>Remote Access</strong>, &gt; &nbsp;<strong>Smart Server</strong>. Click the <strong>Enable Smart Server</strong> checkbox. You must then configure unique passwords for each User1 and User2.</p>



<p class="wp-block-paragraph">If you wish to allow a user with that password to access the WinCC Unified Comfort Panel, click the <strong>Authorize User# for remote access to the panel</strong> checkbox. Upon your next download, the <strong>Smart Server</strong> will be enabled on the WinCC Unified Comfort Panel.</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="1919" height="1045" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-9-1.png" alt="WinCC Unified Sm@rtServer configuration settings for a Siemens SIMATIC HMI Unified Comfort Panel with user password fields highlighted." class="wp-image-44370" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-9-1.png 1919w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-9-1-300x163.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-9-1-1024x558.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-9-1-768x418.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/05/wincc-unified-comort-image-9-1-1536x836.png 1536w" sizes="(max-width: 1919px) 100vw, 1919px" /></figure>



<h3 id="h-firmware-updates" class="wp-block-heading"><strong>Firmware updates</strong></h3>



<p class="wp-block-paragraph">Depending on the panel and the version of TIA Portal you are using, you may need to update the device firmware prior to commissioning. If this is the case, follow these steps:</p>



<ol style="padding-top:0;padding-right:var(--wp--preset--spacing--60);padding-bottom:0;padding-left:var(--wp--preset--spacing--60)" class="wp-block-list">
<li style="padding-top:0;padding-bottom:var(--wp--preset--spacing--40)">It can be helpful to connect to the maintenance port on the HMI (PN-X2).</li>



<li style="padding-top:0;padding-bottom:var(--wp--preset--spacing--40)">Right-click the HMI in the Project Tree while the device is offline. Go to HMI device maintenance and select Update operating system.</li>



<li>TIA Portal will now prompt you to connect to the HMI via ethernet. Enter the IP address of the PN-X2 port. A pop-up with a progress bar should appear on the HMI, and a pop-up will appear on TIA Portal stating the firmware is being transferred.</li>
</ol>



<h3 id="h-date-and-time" class="wp-block-heading"><strong>Date and time</strong></h3>



<p class="wp-block-paragraph">Operators can also set a date and time on their panel by clicking the world icon in the sidebar menu. This will open the <strong>Language, Region and Formats/Date and time</strong> UI, allowing you to set your local date and time.</p>



<h2 id="h-synchronizing-time" class="wp-block-heading">Synchronizing Time</h2>



<p class="wp-block-paragraph">If the clocks between the HMI and PLC are not synchronized, HMI communication may be limited or blocked. If the HMI still cannot read tags from the PLC after following the steps above, first ensure the correct time zone is selected for the PLC. Then check the clock on the PLC through Online and Diagnostics. Under <strong>Functions &gt; Set Time</strong>, select <strong>Take from PG/PC Interface</strong> to synchronize the PLC with your PC.</p>



<h2 id="h-conclusion" class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Commissioning a WinCC Unified Comfort Panel is about more than getting screens to load. Proper network configuration, security settings, and runtime behavior all play a critical role in building a reliable, maintainable HMI system. By taking the time to configure encrypted transfers, user access, certificates, and startup behavior correctly, you set your system up for long-term success in the field.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--60)">Whether you are bringing a new HMI online, modernizing an existing system, or troubleshooting communication and security challenges, we can support you at any stage of the project. Partner with DMC to streamline your Siemens automation efforts and commission your systems with confidence.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step">Need help with an upcoming project? DMC can help you take the next step.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Move your next project forward with DMC&#8217;s <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/">Automation</a> experts to commission your next <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/siemens-simatic-wincc-programming/">HMI project</a> and design reliable systems that scale your operations.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/44303/wincc-unified-comfort-panel-commissioning-settings/">How to Commission a WinCC Unified Comfort Panel</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Library for Basic Processes (LBP) for Beginners, Part 1: Siemens PLCs</title>
		<link>https://static.dmcinfo.com/blog/42185/the-library-for-basic-processes-lbp-for-beginners-part-1-siemens-plcs/</link>
		
		<dc:creator><![CDATA[DMC]]></dc:creator>
		<pubDate>Fri, 20 Mar 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=42185</guid>

					<description><![CDATA[<p>Libraries are the basic building blocks of any large project, and their main value lies in their&#160;modularity&#160;and reusability by developers.&#160;A good library handles the repetitive, low-level work and exposes it through a clean, straightforward interface. A great library goes a step further: it stays flexible as requirements change, and&#160;it’s&#160;still easy for operators of all technical [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/42185/the-library-for-basic-processes-lbp-for-beginners-part-1-siemens-plcs/">The Library for Basic Processes (LBP) for Beginners, Part 1: Siemens PLCs</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Libraries are the basic building blocks of any large project, and their main value lies in their&nbsp;modularity&nbsp;and reusability by developers.&nbsp;A good library handles the repetitive, low-level work and exposes it through a clean, straightforward interface. A great library goes a step further: it stays flexible as requirements change, and&nbsp;it’s&nbsp;still easy for operators of all technical backgrounds to use&nbsp;through the&nbsp;human-machine interface (HMI). At DMC,&nbsp;we’re&nbsp;a little biased towards the&nbsp;<a href="https://openplclibrary.com/" target="_blank" rel="noreferrer noopener">Open PLC Library</a>&nbsp;(we helped develop it!), but there are plenty of great alternatives that deserve the spotlight as well.&nbsp;</p>



<p class="wp-block-paragraph">This blog will be a supplement for the&nbsp;<a href="https://support.industry.siemens.com/cs/document/109749508/library-of-basic-processes-(lbp)-v2-8-?dti=0&amp;lc=en-US" target="_blank" rel="noreferrer noopener">basic documentation</a>&nbsp;for the Siemens Library of Basic Processes (LBP), and this article will address some beginner coding tips for Programmable Logic Controllers (PLCs).&nbsp;In particular, we’ll&nbsp;be discussing three critical library blocks &#8211;&nbsp;<em>LBP_OpDig</em>,&nbsp;<em>LBP_AnaRead</em>, and&nbsp;<em>LBP_Vlv</em>.&nbsp;</p>



<p class="wp-block-paragraph">Be on the lookout for later installments, where we tackle the associated HMI elements.&nbsp;</p>



<h2 id="h-what-s-nbsp-in-the-lbp" class="wp-block-heading">What’s&nbsp;in the LBP?</h2>



<p class="wp-block-paragraph">The Library of Basic Processes&nbsp;(LBP)&nbsp;supports the integration of basic hardware on a PLC program and simplifies visualization on an HMI. It&nbsp;contains&nbsp;23 pre-built Function Blocks&nbsp;(FBs)&nbsp;for typical hardware modules, including counters, PID controllers, analog and digital&nbsp;inputs, valves, and motors. </p>



<p class="wp-block-paragraph">Function blocks are built robustly using structured text (SCL), and users can quickly create multiple instances of the same block and easily apply them throughout their project. When instantiated, every Function Block creates an associated Data Block&nbsp;(DB)&nbsp;that holds status information such as the real-time state of the module, fault conditions, and operational values. It also&nbsp;contains&nbsp;input and output parameters for controlling the module, including setpoints, feedback, and control variables. The DB&#8217;s design ensures smooth interfacing with HMI faceplates by organizing the data in a structured format that aligns with the visualization elements.&nbsp;</p>



<h2 id="h-what-are-the-hardware-and-software-requirements-for-the-lbp" class="wp-block-heading">What are the Hardware and Software Requirements for the LBP?</h2>



<p class="wp-block-paragraph">First, make sure that your project is configured to handle the LBP. The LBP is compatible with the S7-1200, S7-1200 F, S7-1500, and S7-1500 F family of controllers. For visualization, the LBP works on all Comfort Panels and Unified Comfort Panels. If you intend to simulate a program on your development computer, S7-PLCSIM versions 14 and beyond are compatible.&nbsp;&nbsp;<br>&nbsp;<br>On a software level,&nbsp;you’ll&nbsp;need TIA Portal V19 or above for development. Additionally, for developing the HMI,&nbsp;you’ll&nbsp;need one of the following WinCC versions, or any later versions:&nbsp;</p>



<ul class="wp-block-list">
<li>WinCC Comfort/Advanced V17&nbsp;</li>



<li>WinCC Runtime Advanced V17&nbsp;</li>



<li>WinCC Professional and Runtime Professional V19&nbsp;</li>



<li>WinCC V8&nbsp;</li>



<li>WinCC Open Architecture 3.19&nbsp;</li>



<li>WinCC Unified V18&nbsp;</li>
</ul>



<h2 id="h-lbp-opdig-nbsp-digital-value-processing" class="wp-block-heading">LBP_OpDig&nbsp;&#8211; Digital Value Processing</h2>



<p class="wp-block-paragraph">The first signal that&nbsp;we’re&nbsp;tackling is the Digital Output (DO). As the name would suggest, hardware that only has DO signals&nbsp;don’t&nbsp;have inputs, but depend on internal logic to decide when they are active. Examples include status LEDs, alarm buzzers, or really any components that quickly convey critical system information to operators. This is the simplest of our LBP blocks, and a good place to start.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="368" height="99" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-1.png" alt="Siemens LBP_OpDig Function Block diagram" class="wp-image-42222" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-1.png 368w, https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-1-300x81.png 300w" sizes="(max-width: 368px) 100vw, 368px" /><figcaption class="wp-element-caption"><em>Figure 1: LBP_OpDig Function Block</em></figcaption></figure>



<h3 id="h-inputs" class="wp-block-heading">Inputs</h3>



<p class="wp-block-paragraph">The&nbsp;<em>identName</em>&nbsp;input is where&nbsp;you’ll&nbsp;be putting the real-world name for this module, such as “Green LED.” During HMI configuration, you will be able to call this value and display it as the title on the associated HMI faceplate.&nbsp;</p>



<p class="wp-block-paragraph"><strong>Warning:</strong>&nbsp;<strong>If&nbsp;you’re&nbsp;intending to implement language translations, the&nbsp;</strong><strong><em>identName</em></strong><strong>&nbsp;string&nbsp;can’t&nbsp;be passed into a&nbsp;</strong><a href="https://support.industry.siemens.com/cs/mdm/109011420?c=71980915979&amp;dl=ru&amp;lc=en-CL" target="_blank" rel="noreferrer noopener"><strong>text list</strong></a><strong>, which is the conventional method for dynamizing translations. This marks one of the main pitfalls of the LBP, so keep this in mind before going down the rabbit hole.</strong>&nbsp;</p>



<p class="wp-block-paragraph">The&nbsp;<em>indOn</em>&nbsp;bool is where&nbsp;you’ll&nbsp;attach the internal logic that&nbsp;determines&nbsp;whether our output should be activated. In our example of the Green LED above, this could be as simple as checking if our system is in the Run state with a simple logic gate and passing the true value into the input.&nbsp;</p>



<p class="wp-block-paragraph">The&nbsp;<em>panels</em>&nbsp;input/output is a handy feature that lets us simplify our connection between the PLC and any HMIs that we plan&nbsp;on adding&nbsp;to the system. The LBP has a handy datatype called the&nbsp;<em>LBP_typeMultiplex</em>&nbsp;that&nbsp;contains&nbsp;all the possible tags that we might pass to an HMI and&nbsp;neatly packages&nbsp;them,&nbsp;so we&nbsp;don’t&nbsp;have to worry about it. All that we have to do is go to our LBP library within the project, open the&nbsp;<em>PanelsBlock</em>, and add as many&nbsp;<em>LBP_typeMultiplex</em>&nbsp;array entries to the&nbsp;<em>Panels</em>&nbsp;array as we have HMIs.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">See Figure 2:&nbsp;<em>PanelsBlock</em>&nbsp;DB Interface below for an example where we have two HMIs.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="467" height="263" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-2.png" alt="PanelsBlock DB Interface" class="wp-image-42223" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-2.png 467w, https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-2-300x169.png 300w" sizes="(max-width: 467px) 100vw, 467px" /><figcaption class="wp-element-caption"><em>Figure 2: PanelsBlock DB Interface</em></figcaption></figure>



<p class="wp-block-paragraph">After configuring this, just link &#8220;<em>PanelsBlock</em>&#8220;.<em>Panels</em>&nbsp;to the&nbsp;<em>panels</em>&nbsp;input/output on your&nbsp;<em>LBP_OpDig</em>&nbsp;block. Note that every LBP block will need this&nbsp;<em>panels</em>&nbsp;link configured, but you only need to complete the&nbsp;initial&nbsp;setup once.&nbsp;</p>



<h3 id="h-outputs" class="wp-block-heading">Outputs</h3>



<p class="wp-block-paragraph"><em>ENO</em>&nbsp;is the Enable Output Bool. It is true when the block successfully executes, which should&nbsp;be always.&nbsp;</p>



<p class="wp-block-paragraph">The&nbsp;<em>On</em>&nbsp;Bool is self-explanatory. When the DO is on, this output is on.&nbsp;</p>



<h2 id="h-lbp-anaread-nbsp-analog-value-processing" class="wp-block-heading">LBP_AnaRead&nbsp;– Analog Value Processing</h2>



<p class="wp-block-paragraph">The&nbsp;<em>LBP_AnaRead</em>&nbsp;block is another critical block that processes raw analog sensor data and applies necessary scaling to output a value that is meaningful to the end user. Examples are&nbsp;numerous&nbsp;and include pressure, temperature, and moisture sensors.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="356" height="248" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-3.png" alt="Siemens LBP_AnaRead Function Block diagram" class="wp-image-42224" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-3.png 356w, https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-3-300x209.png 300w" sizes="(max-width: 356px) 100vw, 356px" /><figcaption class="wp-element-caption"><em>Figure 3: LBP_AnaRead Function Block</em></figcaption></figure>



<h3 id="h-inputs-0" class="wp-block-heading">Inputs</h3>



<ul class="wp-block-list">
<li>We treat the&nbsp;<em>identName</em>&nbsp;and&nbsp;<em>panels</em>&nbsp;inputs&nbsp;identically to our&nbsp;previous&nbsp;example.&nbsp;</li>



<li>The&nbsp;<em>mode</em>&nbsp;input is critical to appropriately scaling our raw values. There are&nbsp;currently&nbsp;8 available modes of processing the data:&nbsp;
<ul class="wp-block-list">
<li><strong>Mode 0</strong>&nbsp;changes the output to the&nbsp;<em>valueAlt</em>&nbsp;input blindly without any calculations. This is helpful for override situations or simulation testing.&nbsp;</li>



<li><strong>Mode 1</strong>&nbsp;is for Unipolar data. We&nbsp;want&nbsp;to use this mode when the raw value input is bounded between 0 and a positive number.&nbsp;</li>



<li><strong>Mode 2</strong>&nbsp;is for Bipolar data&nbsp;when the raw data can range from a negative to a positive value.&nbsp;</li>



<li><strong>Modes 3&nbsp;through 7&nbsp;</strong>apply a multiplier of .1, .01, 1, 10, and 100 (respectively) to the raw value. This is for when your raw data is off by only a couple&nbsp;of&nbsp;orders of magnitude. A good example is if you have a voltage reading between 0V&nbsp;and +10V, and&nbsp;you want the output reading to be a percentage; you can employ mode 6 for an easy conversion.&nbsp;</li>
</ul>
</li>



<li><em>rangeBegin</em>&nbsp;and&nbsp;<em>rangeEnd</em>&nbsp;dictate the range of the processed output. They are only relevant when using the unipolar and bipolar interpolation modes.&nbsp;</li>



<li><em>limitAH</em>,&nbsp;<em>limitWH</em>,&nbsp;<em>limitWL</em>, and&nbsp;<em>limitAL</em>&nbsp;represent the thresholds at which an alarm and/or warning is triggered for the module.&nbsp;
<ul class="wp-block-list">
<li>These thresholds are not dynamically adjustable. For scenarios like system initialization or shutdown, where alarms might not be needed, external logic is&nbsp;required&nbsp;to suppress or manage these conditions.&nbsp;</li>



<li>Disabling alarms outright is tricky. While setting thresholds outside the expected range can work, it is not always considered best practice, as it may lead to&nbsp;unexpected edge case behavior.&nbsp;</li>



<li>If you find yourself in need of dynamic alarms, one potential solution could be to create a wrapper for the&nbsp;<em>LBP_AnaRead</em>&nbsp;block, which can take logic in a similar fashion to the&nbsp;<em>LBP_OpDig</em>&nbsp;block above to write to an internal&nbsp;<em>LBP_AnaRead</em>&nbsp;block and change the thresholds accordingly. This is most easily&nbsp;accomplished&nbsp;when you configure your system as a&nbsp;<a href="https://static.dmcinfo.com/latest-thinking/blog/id/9950/finite-and-almost-infinite-state-machines" target="_blank" rel="noreferrer noopener">state machine</a>, since you can just use simple logic checks for a desired state.&nbsp;</li>
</ul>
</li>



<li>The&nbsp;<em>timeout</em>&nbsp;and&nbsp;<em>hysteresis</em>&nbsp;parameters dictate how long a threshold can be violated before triggering an error, and numerically how far back into the ‘safe’ range a value must go before resetting alarms. These parameters help reduce false alarms caused by noisy signals near threshold limits.&nbsp;</li>



<li><em>valueAlt</em>, as mentioned before, is an override value that ignores any processing steps. What goes in, typically via manual HMI override, is what comes out and is used for future processing.&nbsp;</li>
</ul>



<h3 id="h-outputs-0" class="wp-block-heading">Outputs</h3>



<ul class="wp-block-list">
<li><em>AH</em>,&nbsp;<em>WH</em>,&nbsp;<em>WL</em>, and&nbsp;<em>AL</em>&nbsp;are Booleans that are true when any of the respective alarms or warnings are active. They stand for Alarm High, Warning High, Warning Low, and Alarm Low, respectively, and are analogous to another typical convention of High&nbsp;High, High, Low, and Low&nbsp;Low&nbsp;alarms. Alarms usually place the system into a faulted state,&nbsp;whereas&nbsp;warning simply&nbsp;write&nbsp;messages to the terminal while continuing normal operation. These errors are&nbsp;very helpful&nbsp;during early testing and simulation because they help developers quickly visualize and debug error logic.</li>



<li><em>ErrorHigh</em>&nbsp;and&nbsp;<em>ErrorLow</em>&nbsp;signal whether the processed output is outside of the&nbsp;<em>rangeBegin</em>&nbsp;and&nbsp;<em>rangeEnd</em>&nbsp;inputs. Typically,&nbsp;it’s&nbsp;best to consider these errors to be of the same level of severity as an alarm, as it typically&nbsp;indicates&nbsp;a hardware&nbsp;malfunction&nbsp;and the system should fault out.&nbsp;</li>



<li>The&nbsp;<em>value</em>&nbsp;output, of course, is our post-processed value.&nbsp;It’s&nbsp;the value that shows up on our HMI and is used for future calculations throughout our project.&nbsp;</li>
</ul>



<h2 id="h-lbp-vlv-nbsp-simple-valve" class="wp-block-heading">LBP_Vlv&nbsp;– Simple Valve</h2>



<p class="wp-block-paragraph">The final library block that&nbsp;we’re&nbsp;covering is the&nbsp;<em>LBP_Vlv</em>, used for ‘simple’ valves that only take digital inputs for open and close. There are other function blocks for Analog Valves and 3-way valves, but&nbsp;we’ll&nbsp;only be tackling this one. The valve differs from our other library blocks because it can be operated in four ways: automatic mode, where commands occur according to a programmed sequence; in manual mode, where a user on the HMI can override the current valve command; local mode, where an in-person operator can send a command that overrides all others; and repair mode, where all controls and error messages are disabled.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="377" height="308" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-4.png" alt="Siemens LBP_Vlv Function Block diagram" class="wp-image-42225" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-4.png 377w, https://static.dmcinfo.com/wp-content/uploads/2026/03/Siemens-LBP-4-300x245.png 300w" sizes="(max-width: 377px) 100vw, 377px" /><figcaption class="wp-element-caption"><em>Figure 4: LBP_Vlv Function Block</em></figcaption></figure>



<h3 id="h-inputs-1" class="wp-block-heading">Inputs</h3>



<p class="wp-block-paragraph">The&nbsp;<em>identName</em>&nbsp;and&nbsp;<em>panels</em>&nbsp;inputs&nbsp;function identically to&nbsp;previous&nbsp;examples. The remaining inputs fall into a few main categories.&nbsp;</p>



<h4 id="h-feedback-inputs" class="wp-block-heading">Feedback Inputs</h4>



<ul class="wp-block-list">
<li><em>indClosed</em>&nbsp;and&nbsp;<em>indOpened</em>&nbsp;
<ul class="wp-block-list">
<li>These Boolean inputs provide feedback on the valve&#8217;s current position.&nbsp;</li>



<li>If both inputs are simultaneously true (indicating&nbsp;conflicting feedback) or the feedback&nbsp;doesn&#8217;t&nbsp;match the command within the specified timeout, the valve enters a faulted state. This robust error detection ensures the valve&nbsp;operates&nbsp;as expected in real-world systems.&nbsp;</li>
</ul>
</li>
</ul>



<h4 id="h-system-override-inputs" class="wp-block-heading">System Override Inputs</h4>



<p class="wp-block-paragraph">These inputs handle external conditions or system states that can influence valve behavior.&nbsp;</p>



<ul class="wp-block-list">
<li><em>indTripOk</em>&nbsp;
<ul class="wp-block-list">
<li>Indicates whether the emergency stop (e-stop) has been triggered.&nbsp;</li>



<li><strong>True</strong>: The system&nbsp;is functioning&nbsp;normally.&nbsp;</li>



<li><strong>False</strong>: The e-stop has been tripped.&nbsp;</li>



<li>Use Cases:&nbsp;
<ul class="wp-block-list">
<li>To stop valve operation&nbsp;immediately&nbsp;upon e-stop activation, wire the e-stop to this input.&nbsp;</li>



<li>If the valve should&nbsp;participate&nbsp;in a shutdown procedure instead of entering an error state, pass&nbsp;<strong>True</strong>&nbsp;to bypass this condition.&nbsp;</li>
</ul>
</li>
</ul>
</li>



<li><em>indErr</em>&nbsp;and&nbsp;<em>indWarn</em>
<ul class="wp-block-list">
<li>External Boolean signals&nbsp;indicating&nbsp;error or warning states for the valve.&nbsp;</li>



<li><strong>True</strong>: Triggers error or warning behavior in the valve.&nbsp;</li>



<li><strong>False</strong>: Ignores external errors or warnings, leaving handling to other parts of the code.&nbsp;</li>
</ul>
</li>



<li><em>indInterlock</em>&nbsp;
<ul class="wp-block-list">
<li><strong>True</strong>: Prevents the valve from opening, even if commanded to do so.&nbsp;</li>



<li>To invert behavior (prevent closing instead of opening), set&nbsp;<em>lockClose</em>&nbsp;to&nbsp;<strong>True</strong>.&nbsp;</li>
</ul>
</li>
</ul>



<h4 id="h-mode-specific-inputs" class="wp-block-heading">Mode-Specific Inputs</h4>



<ul class="wp-block-list">
<li><em>indRepair</em>&nbsp;
<ul class="wp-block-list">
<li>Activates repair mode, disabling all controls and error messages.&nbsp;</li>



<li>Useful for maintenance or troubleshooting.&nbsp;</li>
</ul>
</li>



<li><em>indLocal</em>
<ul class="wp-block-list">
<li>Activates local mode, allowing an in-person operator to control the valve directly.&nbsp;</li>



<li>When active, the&nbsp;<em>cmdLocOpen</em>&nbsp;input overrides all other commands.&nbsp;</li>
</ul>
</li>



<li><em>cmdAut</em>&nbsp;and&nbsp;<em>cmdAutoOpen</em>&nbsp;
<ul class="wp-block-list">
<li><em>cmdAut</em>: Activates automatic mode.&nbsp;</li>



<li><em>cmdAutoOpen</em>:&nbsp;Determines&nbsp;whether the valve should open (True) or closed (False) during automatic operation.&nbsp;</li>



<li>This is used for typical&nbsp;programmed&nbsp;sequences.&nbsp;</li>
</ul>
</li>
</ul>



<h4 id="h-control-and-reset" class="wp-block-heading">Control and Reset</h4>



<ul class="wp-block-list">
<li><em>cmdReset</em>&nbsp;
<ul class="wp-block-list">
<li>Used to reset the valve after it enters an error state.&nbsp;</li>



<li>Must be pulsed to&nbsp;<strong>True</strong>&nbsp;to clear errors and resume normal operation.&nbsp;</li>



<li>Typically wired up to either a physical button and/or a button on the HMI.&nbsp;</li>
</ul>
</li>



<li><em>timeout</em>
<ul class="wp-block-list">
<li>The timeout duration for two main types of errors:&nbsp;
<ul class="wp-block-list">
<li>Timeout errors, where&nbsp;<em>indClosed</em>&nbsp;or&nbsp;<em>indOpened</em>&nbsp;does not become true after being sent the&nbsp;appropriate command&nbsp;</li>



<li>Plausibility errors, where the valve reports true values for both&nbsp;<em>indClosed</em>&nbsp;and&nbsp;<em>indOpened</em>&nbsp;</li>
</ul>
</li>



<li>This value being greater than zero helps avoid nuisance errors caused by brief mismatches or delays in feedback.&nbsp;</li>
</ul>
</li>
</ul>



<h3 id="h-outputs-1" class="wp-block-heading">Outputs</h3>



<ul class="wp-block-list">
<li>The&nbsp;<em>close</em>&nbsp;and&nbsp;<em>open</em>&nbsp;outputs are how commands are sent to our hardware. If a given valve is normally (i.e.&nbsp;default state) closed, link the&nbsp;<em>open</em>&nbsp;output to its Q address. If your valve is normally open, link your valve to the&nbsp;<em>close</em>&nbsp;output.&nbsp;</li>



<li><em>collectError</em>,&nbsp;<em>collectWarning</em>, and&nbsp;<em>collectMaintenance</em>&nbsp;signal that the valve is reporting an error, warning, or call for maintenance, respectively. You can ignore&nbsp;<em>collectWarning</em>&nbsp;since the basic valves&nbsp;don’t&nbsp;throw warnings (this was&nbsp;likely included&nbsp;for consistency among the library).&nbsp;</li>



<li><em>modeAut</em>&nbsp;is a feedback status bool—a True value signals that the valve is in Auto mode.&nbsp;</li>



<li><em>reset</em>&nbsp;is another feedback status bool&nbsp;indicating&nbsp;if the reset input is active.&nbsp;</li>



<li><em>intError</em>&nbsp;returns a Word datatype to&nbsp;indicate&nbsp;what error is thrown.&nbsp;</li>
</ul>



<h3 id="h-note-on-simulating-the-nbsp-lbp-vlv-nbsp-block" class="wp-block-heading">Note on Simulating the&nbsp;LBP_Vlv&nbsp;block</h3>



<p class="wp-block-paragraph">Despite being&nbsp;a common practice&nbsp;during offline development, the&nbsp;<strong><em>LBP_Vlv</em></strong><strong>&nbsp;block does not have any built-in simulation support</strong>. If you want to&nbsp;validate&nbsp;your project’s state logic via simulation,&nbsp;you’ll&nbsp;need to create an external function.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">The easiest method is to create a function block (let’s&nbsp;call it&nbsp;<em>Vlv_Sim</em>) that, for a given valve, takes the input that you would normally link to your&nbsp;<em>cmdAutoOpen</em>&nbsp;and overrides the feedback values accordingly. It’s advisable to add a&nbsp;<a href="https://static.dmcinfo.com/latest-thinking/blog/id/8862/troubleshooting-your-siemens-simatic-s7-1200-timers">TON</a>&nbsp;timer before these overrides to avoid race conditions&nbsp;and&nbsp;to give yourself some time to breathe between steps so that you can see what’s actually occurring in your code.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Once&nbsp;you’ve&nbsp;created this simulation block, at the top of your Main code, create another block that&nbsp;contains&nbsp;an instance of your&nbsp;<em>Vlv_Sim</em>&nbsp;for each valve in your system. Create a global variable to enable this simulation&nbsp;block, and&nbsp;you’re&nbsp;good to go.&nbsp;</p>



<h2 id="h-next-steps" class="wp-block-heading">Next Steps</h2>



<p class="wp-block-paragraph">With this,&nbsp;we’ve&nbsp;covered the most basic steps to instantiate three&nbsp;very common&nbsp;function blocks using the Siemens Library of Basic Processes. Next,&nbsp;we’ll&nbsp;look to connect the dots between the PLC and the HMI. Stay tuned for Part 2 of this&nbsp;series, where&nbsp;we’ll&nbsp;take the information stored on our LBP Data Blocks and link them to pre-built faceplates, neatly displaying our data and making it easy to digest for our end users.&nbsp;&nbsp;</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Accelerate Siemens controls development with support from DMC.</strong></h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">DMC can help implement Siemens LBP, TIA Portal, WinCC, and S7-1200/S7-1500 solutions to streamline your next <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> project. Learn more about our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/" data-type="page" data-id="441">PLC programming</a> capabilities.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/42185/the-library-for-basic-processes-lbp-for-beginners-part-1-siemens-plcs/">The Library for Basic Processes (LBP) for Beginners, Part 1: Siemens PLCs</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bridging the Embedded World and Siemens PLCs with an ESP32-P4 and Arduino </title>
		<link>https://static.dmcinfo.com/blog/41222/bridging-the-embedded-world-and-siemens-plcs-with-an-esp32-p4-and-arduino/</link>
		
		<dc:creator><![CDATA[DMC]]></dc:creator>
		<pubDate>Wed, 18 Feb 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Embedded Development & Programming]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=41222</guid>

					<description><![CDATA[<p>Industrial-embedded integration matters today because modern factories increasingly rely on&#160;external&#160;embedded systems for real‑time monitoring&#160;and&#160;automation.&#160;Embedded systems are becoming companions&#160;to PLCs, unlocking capabilities that traditional control architectures alone&#160;may struggle to&#160;deliver while reducing system costs.&#160; To illustrate how&#160;the industrial and embedded&#160;worlds can work together,&#160;I&#160;built a simple demo that connects an ESP32-based device directly to a Siemens PLC using [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/41222/bridging-the-embedded-world-and-siemens-plcs-with-an-esp32-p4-and-arduino/">Bridging the Embedded World and Siemens PLCs with an ESP32-P4 and Arduino </a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Industrial-embedded integration matters today because modern factories increasingly rely on&nbsp;external&nbsp;embedded systems for real‑time monitoring&nbsp;and&nbsp;automation.&nbsp;Embedded systems are becoming companions&nbsp;to PLCs, unlocking capabilities that traditional control architectures alone&nbsp;may struggle to&nbsp;deliver while reducing system costs.&nbsp;</p>



<p class="wp-block-paragraph">To illustrate how&nbsp;the industrial and embedded&nbsp;worlds can work together,&nbsp;I&nbsp;built a simple demo that connects an ESP32-based device directly to a Siemens PLC using the native&nbsp;Siemens&nbsp;S7 protocol.&nbsp;</p>



<p class="wp-block-paragraph">The result is&nbsp;an&nbsp;Ethernet-connected embedded system that reads PLC&nbsp;inputs&nbsp;in real time and uses that data to drive&nbsp;an&nbsp;RGB LED&nbsp;Pixels Strip:&nbsp;no gateways, no HMIs,&nbsp;and&nbsp;no middleware.</p>



<h2 id="h-demo-overview" class="wp-block-heading">Demo Overview</h2>



<p class="wp-block-paragraph">The&nbsp;demo&nbsp;is&nbsp;intentionally&nbsp;simple.&nbsp;I am using&nbsp;our PLC lab&nbsp;setup with&nbsp;a few&nbsp;switches&nbsp;and&nbsp;buttons&nbsp;connected to the PLC&nbsp;to&nbsp;control a standard RGB LED Pixels Strip&nbsp;connected to an ESP32-P4&nbsp;dev kit.&nbsp;The&nbsp;block diagram&nbsp;of the system is&nbsp;presented below.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="1388" height="158" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-1.png" alt="" class="wp-image-41254" style="width:1200px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-1.png 1388w, https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-1-300x34.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-1-1024x117.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-1-768x87.png 768w" sizes="(max-width: 1388px) 100vw, 1388px" /></figure>



<p class="wp-block-paragraph">Here is a picture of the complete setup below:</p>



<figure class="wp-block-image size-full is-resized has-custom-border"><img decoding="async" width="420" height="810" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-2.png" alt="" class="wp-image-41255" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:0.5185225598777893;object-fit:cover;width:300px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-2.png 420w, https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-2-156x300.png 156w" sizes="(max-width: 420px) 100vw, 420px" /></figure>



<h2 id="h-plc-nbsp-logic-and-configuration" class="wp-block-heading">PLC&nbsp;Logic and Configuration</h2>



<p class="wp-block-paragraph">There are&nbsp;two&nbsp;external switches and&nbsp;two&nbsp;buttons attached to the&nbsp;PLC.&nbsp;Each input is mapped to a location in the PLC data block. The PLC program updates this data block continuously based on the&nbsp;switches/buttons&#8217;&nbsp;state.&nbsp;</p>



<p class="wp-block-paragraph">The PLC exposes&nbsp;this&nbsp;data block&nbsp;that&nbsp;contains&nbsp;the state of four inputs:&nbsp;</p>



<ul class="wp-block-list">
<li>Two switches&nbsp;
<ul class="wp-block-list">
<li>DB1.DBX0.0: switch 1 &#8211; on/off&nbsp;</li>



<li>DB1.DBX0.1: switch 2 &#8211; chase effect on/off&nbsp;</li>
</ul>
</li>



<li>Two momentary push buttons&nbsp;
<ul class="wp-block-list">
<li>DB1.DBX0.2: push button 1 &#8211; color green&nbsp;</li>



<li>DB1.DBX0.3: push button 2 (normally closed) &#8211; color red&nbsp;</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">The PLC&nbsp;should&nbsp;be&nbsp;configured to allow&nbsp;Siemens&nbsp;S7&nbsp;PUT/GET&nbsp;communication.&nbsp;S7&nbsp;is a native PLC protocol that allows external devices to read and write PLC memory areas over Ethernet. Unlike fieldbus protocols, S7 PUT/GET provides direct access to PLC data blocks, making it well-suited for lightweight integrations.&nbsp;</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">In this demo, the ESP32 acts as an S7 client, connecting directly to the PLC and&nbsp;periodically&nbsp;reading&nbsp;the&nbsp;data block&nbsp;DB1. No custom function blocks&nbsp;or&nbsp;other&nbsp;logic are&nbsp;required&nbsp;on the PLC side.&nbsp;For embedded devices, this protocol&nbsp;could&nbsp;provide&nbsp;a simple way&nbsp;to exchange data with a Siemens PLC while keeping the PLC logic minimal.</p>



<p class="wp-block-paragraph">There are a few&nbsp;important settings that&nbsp;need&nbsp;to be enabled on the PLC side&nbsp;for the S7 protocol to work properly:</p>



<p class="wp-block-paragraph"><strong>1.</strong> <strong>Disable optimized block access.</strong>&nbsp;The data block used for communication (DB1 in this demo) must have&nbsp;optimized&nbsp;block access disabled. This allows the&nbsp;S7 protocol&nbsp;to address&nbsp;data in the data block&nbsp;using absolute addresses such as DB1.DBX0.0&nbsp;</p>



<figure class="wp-block-image size-full is-resized has-custom-border" style="margin-bottom:var(--wp--preset--spacing--50)"><img decoding="async" width="985" height="651" src="https://static.dmcinfo.com/wp-content/uploads/2026/02/esp32-p4-and-arduino-image-3.jpg.png" alt="" class="wp-image-45081" style="border-width:1px;aspect-ratio:1.5130855509126897;object-fit:cover;width:745px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/02/esp32-p4-and-arduino-image-3.jpg.png 985w, https://static.dmcinfo.com/wp-content/uploads/2026/02/esp32-p4-and-arduino-image-3.jpg-300x198.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/02/esp32-p4-and-arduino-image-3.jpg-768x508.png 768w" sizes="(max-width: 985px) 100vw, 985px" /></figure>



<p class="wp-block-paragraph"><strong>2.</strong> <strong>Enable PUT/GET communication.</strong>&nbsp;In the PLC&nbsp;Protection &amp; Security&nbsp;tab,&nbsp;enable PUT/GET communication.</p>



<figure class="wp-block-image size-full is-resized has-custom-border" style="margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="1047" height="430" src="https://static.dmcinfo.com/wp-content/uploads/2026/02/esp32-p4-and-arduino-image-4.jpg.png" alt="S7 PLC interface" class="wp-image-45082" style="border-width:1px;aspect-ratio:2.426131716938471;width:745px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/02/esp32-p4-and-arduino-image-4.jpg.png 1047w, https://static.dmcinfo.com/wp-content/uploads/2026/02/esp32-p4-and-arduino-image-4.jpg-300x123.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/02/esp32-p4-and-arduino-image-4.jpg-1024x421.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/02/esp32-p4-and-arduino-image-4.jpg-768x315.png 768w" sizes="(max-width: 1047px) 100vw, 1047px" /></figure>



<h2 id="h-esp32-p4-nbsp-firmware" class="wp-block-heading">ESP32-P4&nbsp;Firmware</h2>



<p class="wp-block-paragraph" id="h-esp32-p4-firmware">The ESP32-P4 is the latest addition to&nbsp;Espressif’s&nbsp;popular line of embedded controllers, designed for high-performance industrial and IoT applications. The official ESP32-P4 development kit provides a&nbsp;great&nbsp;platform for rapid prototyping.&nbsp;</p>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-4a4cdd03 wp-block-columns-is-layout-flex" style="padding-bottom:var(--wp--preset--spacing--40)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full has-custom-border"><img decoding="async" width="400" height="225" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-dev-kit-opening.gif" alt="" class="wp-image-41281" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px"/></figure>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">For this demo, I selected the ESP32-P4 dev kit largely because it is new and it has native Ethernet support, allowing us to connect directly to the PLC without external adapters. This made setup straightforward, letting us focus on demonstrating seamless communication between embedded and industrial systems.</p>



<p class="wp-block-paragraph">&nbsp;&nbsp;The ESP32-P4 dev kit is configured in the Arduino IDE using Espressif&#8217;s official board support package. I am using largely default settings, but here is a screenshot of the dev kit configuration in Arduino IDE for reference.</p>
</div>
</div>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">To handle Siemens S7 communication on the ESP32,&nbsp;I am&nbsp;using&nbsp;<em>Settimino</em>, an&nbsp;open-source library.&nbsp;Settimino&nbsp;implements a lightweight S7 client that allows Arduino-compatible devices to communicate directly with Siemens PLCs over Ethernet/S7 protocol.&nbsp;In this demo, the library is used&nbsp;to&nbsp;periodically&nbsp;read&nbsp;a PLC data block and decode&nbsp;individual bits corresponding to physical switches and buttons.</p>



<p class="wp-block-paragraph">There is a&nbsp;commonly available&nbsp;“WS2812”&nbsp;RGB LED pixel strip&nbsp;connected&nbsp;to the ESP32 dev kit GPIO pin.&nbsp;The firmware changes the LED strip color and triggers a chase effect&nbsp;based on the state of the buttons/switches.</p>



<ul class="wp-block-list">
<li>ESP32-P4 runs an Arduino-based sketch that:</li>



<li>Initializes the Ethernet interface&nbsp;</li>



<li>Connects to the PLC over&nbsp;S7&nbsp;</li>



<li>Reads the data block&nbsp;DB1</li>



<li>Decodes individual bits corresponding to switches and buttons&nbsp;</li>



<li>Updates the&nbsp;RGB LED&nbsp;Pixel&nbsp;Strip based on the buttons/switches&nbsp;&nbsp;&nbsp;</li>
</ul>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="300" height="445" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-6.png" alt="" class="wp-image-41260" style="aspect-ratio:0.6741675635130288;width:300px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-6.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/01/ESP32-P4-and-Arduino-6-202x300.png 202w" sizes="(max-width: 300px) 100vw, 300px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">The ESP32 acts as a read-only S7 client in this demo, which keeps the PLC configuration simple and&nbsp;the&nbsp;data&nbsp;safe.&nbsp;This pattern is especially useful when&nbsp;the PLC should remain the system authority&nbsp;and the embedded device is purely a consumer,&nbsp;reading the data&nbsp;and not affecting the logic PLC is doing.&nbsp;Although the same approach can easily be extended to write data back to the PLC if required.&nbsp;</p>



<h2 id="h-takeaway-nbsp" class="wp-block-heading">Takeaway&nbsp;</h2>



<p class="wp-block-paragraph">This demo shows how a modern embedded platform like the ESP32 can integrate cleanly into a Siemens PLC environment using the S7 protocol&nbsp;without&nbsp;gateways, just straightforward Ethernet communication.&nbsp;</p>



<p class="wp-block-paragraph">For industrial products, this approach opens the door to&nbsp;smarter peripherals&nbsp;and&nbsp;better visualization&nbsp;at&nbsp;a&nbsp;potentially lower system cost.&nbsp;All while keeping the PLC program simple&nbsp;and maintainable.&nbsp;</p>



<p class="wp-block-paragraph">It is worth noting that Siemens S7 PUT/GET protocol is very insecure because it does not implement any encryption or authentication mechanism. So, it should only be used with caution and strictly on isolated networks to avoid unintended access to the PLC or other security risks.</p>



<p class="wp-block-paragraph">You can also <a href="https://youtube.com/shorts/jVgtWxaeaJE" type="link" id="https://youtube.com/shorts/jVgtWxaeaJE">watch a short video</a> overview of the demo.</p>



<p class="wp-block-paragraph">The full Arduino source code and PLC project are available on <a href="https://github.com/boriz/ESP32_to_SiemensS7" target="_blank" rel="noreferrer noopener">GitHub</a>.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Ready to connect the embedded and industrial worlds?</strong></h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">DMC can help develop solutions that combine <a href="https://static.dmcinfo.com/our-work/category/service/manufacturing-automation-and-intelligence/siemens-plc/" data-type="work_category" data-id="682">Siemens PLCs</a>, ESP32 platforms, and real-time industrial communications. Learn more about our our <a href="https://static.dmcinfo.com/services/embedded-development-and-embedded-programming/" data-type="page" data-id="431">Embedded</a> capabilities for your next project.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/41222/bridging-the-embedded-world-and-siemens-plcs-with-an-esp32-p4-and-arduino/">Bridging the Embedded World and Siemens PLCs with an ESP32-P4 and Arduino </a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>A Beginner’s Guide to Scripting in Siemens WinCC Unified for Advanced HMI Control</title>
		<link>https://static.dmcinfo.com/blog/40902/siemens-wincc-unified-scripting/</link>
		
		<dc:creator><![CDATA[Jared Ross]]></dc:creator>
		<pubDate>Wed, 04 Feb 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=40902</guid>

					<description><![CDATA[<p>Industrial automation projects are always specialized&#160;in&#160;their application and industry, making flexibility and adaptability necessary in all forms of programming.&#160;This extends not just to PLC controls, but to the HMI screens and devices that operators interact with regularly. Sometimes, the&#160;built-in&#160;functions of an HMI platform&#160;are not enough to&#160;accomplish&#160;the desired goal.&#160;When creating HMI screens for Unified Basic Panels [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/40902/siemens-wincc-unified-scripting/">A Beginner’s Guide to Scripting in Siemens WinCC Unified for Advanced HMI Control</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Industrial automation projects are always specialized&nbsp;in&nbsp;their application and industry, making flexibility and adaptability necessary in all forms of programming.&nbsp;This extends not just to PLC controls, but to the HMI screens and devices that operators interact with regularly.</p>



<p class="wp-block-paragraph">Sometimes, the&nbsp;built-in&nbsp;functions of an HMI platform&nbsp;are not enough to&nbsp;accomplish&nbsp;the desired goal.&nbsp;When creating HMI screens for Unified Basic Panels or Unified Comfort Panels, the use of scripting within components can allow for&nbsp;additional&nbsp;functionality not found in the basic properties of components. </p>



<p class="wp-block-paragraph">Scripts can allow for more information to be displayed without the addition of PLC logic,&nbsp;such as mathematical expressions involving more than one tag.&nbsp;Scripts can also be used as functions triggered by an event, such as a button press on the HMI. Siemens scripting uses JavaScript and object-oriented principles to allow engineers more flexibility by using an established language for ease of implementation.&nbsp;This blog reviews the basics of WinCC Unified Scripting.&nbsp;</p>



<h2 id="h-accessing-scripts-global-modules-and-functions-nbsp" class="wp-block-heading">Accessing Scripts – Global Modules and Functions&nbsp;</h2>



<p class="wp-block-paragraph">When developing an HMI program, scripts can be created for use in a variety of ways.&nbsp;To do so, first drill down&nbsp;to&nbsp;the “Scripts” folder in the project tree under the HMI device in your project. From there, select “Add a new global module” to create a container for one or more global functions. Once the global module is created, select “Add a new&nbsp;global&nbsp;function”,&nbsp;which will open the script editor.&nbsp;From here, users can create their&nbsp;own custom&nbsp;functions.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="440" height="384" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-1.png" alt="Siemens WinCC Unified scripting interface" class="wp-image-40925" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-1.png 440w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-1-300x262.png 300w" sizes="(max-width: 440px) 100vw, 440px" /></figure>



<h2 id="h-triggering-global-functions-nbsp" class="wp-block-heading">Triggering Global Functions&nbsp;</h2>



<p class="wp-block-paragraph">Once a global function is created within a global module, it can be called in a variety of ways. One method is&nbsp;utilizing&nbsp;the “Scheduled Tasks” feature, which allows a function to run based on a specified condition. </p>



<p class="wp-block-paragraph">For example, to run the script “Function” when the HMI tag “eStopPressed” changes value, a scheduled task must be created. Once it is created, the default trigger&nbsp;option&nbsp;is “Tags,” which&nbsp;triggers on&nbsp;the value change of an HMI tag.&nbsp;Other trigger options include cycle times ranging from 500ms to one year, as well as alarms.&nbsp;Note that selecting a short&nbsp;cycle&nbsp;time can cause overloads, and that a function triggered by a tag cannot write to the trigger tag.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="283" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-2.png" alt="Siemens WinCC Unified scripting interface" class="wp-image-40927" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-2.png 900w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-2-300x94.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-2-768x241.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="273" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-3.png" alt="Siemens WinCC Unified scripting interface" class="wp-image-40928" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-3.png 900w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-3-300x91.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-3-768x233.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph">Once an HMI tag is selected, select the “Events” tab under the task to select the function to run upon trigger. Click the dropdown under the name column to open the menu as&nbsp;shown, and&nbsp;scroll to the bottom to find “Script functions”&gt;”Global&nbsp;module”&gt;”Global&nbsp;module.Function.”</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="432" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-4.png" alt="Siemens WinCC Unified scripting interface" class="wp-image-40929" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-4.png 900w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-4-300x144.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-4-768x369.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph">Once a function is selected, choose parameter values to&nbsp;input to&nbsp;the function for this specific run case. These parameters can be several data types, which can be selected using the dropdown in the “Value” column.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="256" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-5.png" alt="Siemens WinCC Unified scripting interface" class="wp-image-40930" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-5.png 900w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-5-300x85.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-5-768x218.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<h2 id="h-accessing-scripts-hmi-components-nbsp" class="wp-block-heading">Accessing Scripts – HMI Components&nbsp;</h2>



<p class="wp-block-paragraph">HMI components have two main ways to&nbsp;utilize&nbsp;scripts: Events and Dynamic Properties.&nbsp;To have an HMI event trigger a script, first navigate to the HMI&nbsp;component&nbsp;and then to the “Events” tab. Select the preferred trigger event, then click the button shown below to convert the function list to a script.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="155" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-6-2.png" alt="Siemens WinCC Unified scripting interface" class="wp-image-40933" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-6-2.png 900w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-6-2-300x52.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-6-2-768x132.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph">To use a script to define a&nbsp;component&nbsp;property, first navigate to the&nbsp;component&nbsp;in question and to “Properties.”&nbsp;In the “Dynamization” column, use the dropdown to&nbsp;select Script. This will open a script editor to allow for control of the desired property.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="200" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-7.png" alt="Siemens WinCC Unified scripting interface" class="wp-image-40934" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-7.png 900w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-7-300x67.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-7-768x171.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="165" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-8.png" alt="" class="wp-image-40935" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-8.png 900w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-8-300x55.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-8-768x141.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph">The variable “value” refers to the state of the property scripting for. For example, if I created a script that resulted in “value = 5” for width, the&nbsp;component&nbsp;would&nbsp;display with&nbsp;a width of five pixels.&nbsp;Additional&nbsp;code should always be written between the declaration of the “value” variable and the return.&nbsp;&nbsp;</p>



<h2 id="h-script-tools-nbsp" class="wp-block-heading">Script Tools&nbsp;</h2>



<p class="wp-block-paragraph">Siemens offers a few helpful tools as part of the script editor to make it easier to create working code. Some of these tools exist as buttons on the script editor, and some are built-in features, such as:&nbsp;</p>



<ul class="wp-block-list">
<li>Syntax highlighting&nbsp;</li>



<li>Snippets (code templates)&nbsp;</li>



<li>System functions&nbsp;</li>



<li>Referencing HMI objects&nbsp;</li>



<li>Tooltips&nbsp;</li>



<li>Autocomplete&nbsp;</li>



<li>Error marking and correction&nbsp;</li>



<li>Find and replace&nbsp;</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="448" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-9.png" alt="Siemens WinCC Unified scripting interface" class="wp-image-40936" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-9.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-9-300x215.png 300w" sizes="(max-width: 624px) 100vw, 624px" /><figcaption class="wp-element-caption"><em>Credit: <a href="https://docs.tia.siemens.cloud/r/en-us/v20/runtime-scripting-rt-unified/scripts-editor-rt-unified/structure-of-the-scripts-editor-rt-unified" target="_blank" rel="noreferrer noopener">Siemens</a></em></figcaption></figure>



<h2 id="h-snippets-nbsp" class="wp-block-heading">Snippets&nbsp;</h2>



<p class="wp-block-paragraph">Scripting in WinCC Unified&nbsp;component&nbsp;properties includes pre-built sections of code called “Snippets,”&nbsp;which are meant to&nbsp;accomplish&nbsp;a specific, common function without building the script from scratch. </p>



<p class="wp-block-paragraph">To access snippets,&nbsp;right-click within the script editor to open the menu. From there, you can drill into the HMI Runtime or Logic snippets. HMI Runtime snippets include functions such as opening a faceplate as a pop-up window, writing parameter sets to the PLC, and user management options. Logic snippets include basic structure for if-else statements, for-loops, and more.&nbsp;</p>



<p class="wp-block-paragraph">Once a snippet is added, review the code block and add or change the items inside to accurately reflect your project.&nbsp;For advanced users, it is possible to <a href="https://cache.industry.siemens.com/dl/files/399/109813399/att_1306993/v3/109813399_Unified_SnippetCreator_en_V2_0.pdf" type="link" id="https://cache.industry.siemens.com/dl/files/399/109813399/att_1306993/v3/109813399_Unified_SnippetCreator_en_V2_0.pdf">create custom snippets following these steps</a>.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="748" height="522" src="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-10.png" alt="Siemens WinCC Unified scripting interface" class="wp-image-40939" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-10.png 748w, https://static.dmcinfo.com/wp-content/uploads/2026/01/Siemens-Scripting-10-300x209.png 300w" sizes="(max-width: 748px) 100vw, 748px" /></figure>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step">Have an Upcoming Project? DMC Can Help You Take the Next Step.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">DMC&#8217;s <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> experts can help extend WinCC Unified for your operator-focused needs. Learn more about our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/siemens-simatic-wincc-programming/" data-type="page" data-id="500">Siemens SIMATIC WinCC</a> solutions and get started today!</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/40902/siemens-wincc-unified-scripting/">A Beginner’s Guide to Scripting in Siemens WinCC Unified for Advanced HMI Control</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Siemens MQTT Setup with AWS IoT Core</title>
		<link>https://static.dmcinfo.com/blog/40387/siemens-mqtt-setup-with-aws-iot-core/</link>
		
		<dc:creator><![CDATA[Jiasen Zhang]]></dc:creator>
		<pubDate>Mon, 22 Dec 2025 15:00:00 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=40387</guid>

					<description><![CDATA[<p>As technology advances and security standards improve, clients in the automation industry are transitioning to newer communications standards for both future-proofing and improved plant security.&#160;This blog covers the implementation of the MQTT standard, which is known for being simple, secure, and lightweight, with the AWS IoT Core service and the Siemens LMQTT library. The primary [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/40387/siemens-mqtt-setup-with-aws-iot-core/">Siemens MQTT Setup with AWS IoT Core</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">As technology advances and security standards improve, clients in the automation industry are transitioning to newer communications standards for both future-proofing and improved plant security.&nbsp;This blog covers the implementation of the MQTT standard, which is known for being simple, secure, and lightweight, with the AWS IoT Core service and the Siemens LMQTT library. The primary goal of this blog is to provide a centralized resource to demystify the setup process.</p>



<p class="wp-block-paragraph"><em>Note: This blog uses a Siemens S71214 G2 PLC and TIA Portal V20 Update 3, with version 2.3.0 the Siemens “Libraries for Communication”.</em></p>



<h2 id="h-why-certificates" class="wp-block-heading">Why Certificates?</h2>



<p class="wp-block-paragraph">Instead of user credentials, which can be easily compromised, the industry is slowly shifting towards more secure certificate-based security. Certificates are authorized and signed by a “Certificate Authority” (CA) and come with a public and private key.</p>



<p class="wp-block-paragraph">A public key is shared openly to encrypt data or verify signatures, while the private key is stored locally by the certificate owner to decrypt data and create signatures, enabling secure communications.</p>



<p class="wp-block-paragraph">Typically, an MQTT connection is secured through TLS and leverages a unique certificate per device. Devices can share the same certificate, but if one of the certificates is compromised, all devices will need to have their certificates updated.</p>



<h3 id="h-what-s-the-catch" class="wp-block-heading">What&#8217;s the Catch?</h3>



<p class="wp-block-paragraph">One way that certificates are more secure is that they have limited lifespans. Each certificate has a specified time frame (usually a decade or more, up to a limit) where it is valid. Upon expiration, communications relying on the certificate will fail until a new certificate is signed by the CA and manually rotated on the device. For Siemens PLCs, this is a manual process that requires a hardware download and downtime.</p>



<p class="wp-block-paragraph">A similar lifespan issue arises for the CA. The current Amazon Root CA 1 at the time of writing expires January 2038 and has a lifespan of 10-20 years.</p>



<p class="wp-block-paragraph">However, AWS helps with mitigating this issue by allowing users to remotely monitor and even revoke certificates.</p>



<h2 id="h-configuring-aws-iot-core" class="wp-block-heading">Configuring AWS IoT Core</h2>



<p class="wp-block-paragraph">In AWS IoT Core, every device is registered as a Thing and has associated certificates to secure the communications and “Policies” to determine the permissions a certificate is allowed to have. Before the PLC can communicate with AWS, it must first be configured in the IoT Core with at least one of each (Thing, Certificate, Policy).</p>



<p class="wp-block-paragraph"><em>Note: It is possible to use user credentials with AWS, but this is less secure and requires the configuration of a custom authorizer and downloading the Amazon Root Certificate to the PLC. More information can be found here: </em><a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html"><em>Use API Gateway Lambda authorizers &#8211; Amazon API Gateway</em></a><em>.</em></p>



<h3 id="h-creating-a-thing" class="wp-block-heading">Creating a Thing</h3>



<p class="wp-block-paragraph">A Thing can be created under the “Manage &gt; All devices &gt; Things” menu. Creating a Thing will prompt the user to assign a certificate and a policy. In this example, an auto-generated AWS certificate was used.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="482" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-thing1-1024x482.png" alt="creating a thing" class="wp-image-40423" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-thing1-1024x482.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-thing1-300x141.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-thing1-768x361.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-thing1.png 1048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 id="h-creating-a-policy" class="wp-block-heading">Creating a Policy</h3>



<p class="wp-block-paragraph">As part of the steps to create a Thing, you can also create a Policy. Policies are used to Allow/Deny actions that a device can perform when connected using the attached certificate. A policy can be reused across multiple certificates, and a certificate can have multiple attached policies, allowing for flexible configuration.</p>



<p class="wp-block-paragraph">For testing basic communications and setup, it is recommended that an unrestricted policy be used to allow all policy actions and resources to be accessed (notated by the wildcard character, *). Policies can be updated at any time to remotely modify the permissions of any device.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="684" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-policy2-1024x684.png" alt="Creating a Policy" class="wp-image-40424" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-policy2-1024x684.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-policy2-300x200.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-policy2-768x513.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-policy2.png 1056w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><em>Note: For more information regarding policy configuration, see </em><a href="https://docs.aws.amazon.com/iot/latest/developerguide/example-iot-policies.html"><em>AWS IoT Core policy examples &#8211; AWS IoT Core</em></a><em>.</em></p>



<h3 id="h-creating-your-certificates" class="wp-block-heading">Creating your Certificates</h3>



<p class="wp-block-paragraph">Once a Thing has been created, a pop-up will appear with download links to the generated certificates. Click the “Download All” button to download a copy of the certificate, keys, and root CA certificates. Don’t close the dialog box without downloading a copy of the certificate and keys, as this is the only time they are available for security reasons!</p>



<figure class="wp-block-image size-full"><img decoding="async" width="610" height="862" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-certificates3.png" alt="creating certificates " class="wp-image-40425" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-certificates3.png 610w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-certificates3-212x300.png 212w" sizes="(max-width: 610px) 100vw, 610px" /></figure>



<h2 id="h-configuring-the-siemens-plc" class="wp-block-heading">Configuring the Siemens PLC</h2>



<p class="wp-block-paragraph">Configuring the PLC to communicate via MQTT requires 3 steps. First, the LMQTT library must be added to the project and configured for the connection. Next, project security must be enabled to allow the user to access the “Certificate Manager” and import the certificates to the project.</p>



<p class="wp-block-paragraph"><em>Note: More information and a detailed guide of each step can be found here: </em><a href="https://support.industry.siemens.com/cs/ww/en/view/109748872"><em>Use the SIMATIC controller as an MQTT client &#8211; ID: 109748872 &#8211; Industry Support Siemens</em></a><em>.</em></p>



<h3 id="h-adding-the-library-to-the-project" class="wp-block-heading">Adding the Library to the Project</h3>



<p class="wp-block-paragraph">The LMQTT Library and documentation can be found as part of the communications library here: <a href="https://support.industry.siemens.com/cs/document/109780503/simatic-s7-1500-s7-1200-libraries-for-communication-(lcommsuite)?dti=0&amp;lc=en-CO">SIMATIC S7-1500/S7-1200 Libraries for Communication (LCommSuite) &#8211; ID: 109780503 &#8211; Industry Support Siemens</a></p>



<p class="wp-block-paragraph">After downloading the Siemens Libraries for Communication, unzip the file and move the resulting folder to a permanent location. Then, import the “Libraries_Comm_Controller.al20” as a global library into your project.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="309" height="252" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/adding-the-library-to-the-project.png" alt="Adding the library to the project" class="wp-image-40398" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/adding-the-library-to-the-project.png 309w, https://static.dmcinfo.com/wp-content/uploads/2025/12/adding-the-library-to-the-project-300x245.png 300w" sizes="(max-width: 309px) 100vw, 309px" /></figure>



<p class="wp-block-paragraph">The communications library will then appear. For this blog, only the LMQTT library objects are used. Drag and drop the “LMQTT_Client” object from the Global Library into the “Program blocks” folder of your PLC. All dependencies will automatically be imported into the project along with the library block.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="352" height="310" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/library-block.png" alt="library block" class="wp-image-40402" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/library-block.png 352w, https://static.dmcinfo.com/wp-content/uploads/2025/12/library-block-300x264.png 300w" sizes="(max-width: 352px) 100vw, 352px" /></figure>



<h3 id="h-creating-a-data-block" class="wp-block-heading"><em>Creating a Data Block</em></h3>



<p class="wp-block-paragraph">Next, create a Global Data Block to hold the tag values of the LMQTT Client. This can be done by expanding the “Program blocks” folder in the Project tree and clicking “Add new block”. From the dialog box, select “Data Block”, name the block, and choose “Global DB”.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="530" height="459" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-data-block.png" alt="creating a data block" class="wp-image-40403" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-data-block.png 530w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-a-data-block-300x260.png 300w" sizes="(max-width: 530px) 100vw, 530px" /></figure>



<p class="wp-block-paragraph">The Data Block used by our example project is shown below. Some notes on our implementation:</p>



<ul class="wp-block-list">
<li>Outgoing and Received message have a constant defining the length of the message byte-array.</li>



<li>The error struct is used to log a history of errors and record the status of the system and are not mandatory.</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="477" height="616" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/dbmqtt.png" alt="dbMQTT" class="wp-image-40404" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/dbmqtt.png 477w, https://static.dmcinfo.com/wp-content/uploads/2025/12/dbmqtt-232x300.png 232w" sizes="(max-width: 477px) 100vw, 477px" /></figure>



<h3 id="h-configuring-connection-parameters" class="wp-block-heading"><em>Configuring Connection Parameters</em></h3>



<p class="wp-block-paragraph">The connection parameters in our example are configured as follows:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="164" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/configuring-connection-parameters.png" alt="Configuring connection parameters" class="wp-image-40405" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/configuring-connection-parameters.png 624w, https://static.dmcinfo.com/wp-content/uploads/2025/12/configuring-connection-parameters-300x79.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">Some notes on our configuration:</p>



<ul class="wp-block-list">
<li>“hwId” is best left as 0, as this will allow the library to select a suitable hardware interface automatically. To specify it directly, Hardware IDs can be found by going to the “Device Configuration &gt; Properties &gt; System constants” tab of your PLC.</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="608" height="295" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/configuration-notes.png" alt="Configuration notes" class="wp-image-40406" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/configuration-notes.png 608w, https://static.dmcinfo.com/wp-content/uploads/2025/12/configuration-notes-300x146.png 300w" sizes="(max-width: 608px) 100vw, 608px" /></figure>



<ul class="wp-block-list">
<li>“connId” must be unique for each connected device.</li>



<li>“broker” will be your unique AWS IoT Data Endpoint. This can be found in the AWS Portal under the “Settings” menu.</li>



<li>“port” for our application will be 8883 (certificate authenticated pub/sub). A list of standard AWS ports are found here: <a href="https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html">Device communication protocols &#8211; AWS IoT Core</a>.</li>



<li>The “tls” settings enable encryption. The important settings here are that the broker certificate and client certificate numbers match the certificates in the Certificate Manager (covered later in the blog).</li>
</ul>



<h3 id="h-connecting-the-lmqtt-client-function-block" class="wp-block-heading"><em>Connecting the LMQTT Client Function Block</em></h3>



<p class="wp-block-paragraph">An instance of the LMQTT Client function block can be created by dragging an instance of “LMQTT_Client” into any LAD block on the PLC and linking the corresponding tags in the database. An example of how the tags can be linked is shown below:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="680" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/connecting-the-lmgtt-client-function-block.png" alt="connecting the LMGTT client function block" class="wp-image-40407" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/connecting-the-lmgtt-client-function-block.png 624w, https://static.dmcinfo.com/wp-content/uploads/2025/12/connecting-the-lmgtt-client-function-block-275x300.png 275w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<h3 id="h-enabling-project-security-amp-importing-certificates" class="wp-block-heading">Enabling Project Security &amp; Importing Certificates</h3>



<p class="wp-block-paragraph">To enable project security, navigate to the PLC’s “Properties &gt; General &gt; Certificate manager” menu and enable the “Use global security settings for certificate manager” setting.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="388" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/certificate-manager.png" alt="certificate manager" class="wp-image-40408" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/certificate-manager.png 624w, https://static.dmcinfo.com/wp-content/uploads/2025/12/certificate-manager-300x187.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">Next, enable project security by navigating in the Project Tree to “Security settings &gt; Settings &gt; Project protection” and password-protect the program. This is necessary to enable the project “Certificate manager” menu under “Security Settings &gt; Security features.”</p>



<p class="wp-block-paragraph">Before the certificate is imported into TIA Portal, the AWS client certificate and private key must be merged using a text editor. This can be done by opening both the *.pem certificate and the private.key file and pasting the private key in the line below the certificate. After doing so, your certificate file should look like the one below:</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="777" height="1024" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/root-certificates12-777x1024.png" alt="Root certificates" class="wp-image-40418" style="width:491px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/root-certificates12-777x1024.png 777w, https://static.dmcinfo.com/wp-content/uploads/2025/12/root-certificates12-228x300.png 228w, https://static.dmcinfo.com/wp-content/uploads/2025/12/root-certificates12-768x1012.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/root-certificates12.png 1021w" sizes="(max-width: 777px) 100vw, 777px" /></figure>



<p class="wp-block-paragraph">To import a certificate, navigate to the “Trusted Certificates and root certificates” menu in the project “Certificate Manager”, right-click the table and select import. The two files that will be needed are the:</p>



<ol class="wp-block-list">
<li>Amazon Root CA1 (SHA-256)</li>



<li>AWS IoT Certificate (Modified with key appended to certificate)</li>
</ol>



<p class="wp-block-paragraph">Once complete, the two certificates should appear as follows:</p>



<ul class="wp-block-list">
<li>The ID of the “Amazon Root CA 1” MUST correspond to the “brokerCert” in the connection parameters.</li>



<li>The ID of the “AWS IoT Certificate” MUST correspond to the “clientCert” in the connection parameters.</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="946" height="84" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/trusted-certificates13.png" alt="trusted certificates" class="wp-image-40419" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/trusted-certificates13.png 946w, https://static.dmcinfo.com/wp-content/uploads/2025/12/trusted-certificates13-300x27.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/trusted-certificates13-768x68.png 768w" sizes="(max-width: 946px) 100vw, 946px" /></figure>



<p class="wp-block-paragraph">Next, return to the PLC “Properties &gt; Certificate manager” and add the IoT Certificate under “Device certificates” and the Root CA1 certificate as a “Certificates of partner device.”</p>



<p class="wp-block-paragraph">Finally, the IP, gateway, and time settings of the PLC need to be configured before downloading to the PLC.</p>



<h2 id="h-operation-of-lmqtt-client" class="wp-block-heading">Operation of LMQTT Client</h2>



<p class="wp-block-paragraph">The LMQTT Client can be directly controlled by monitoring the runtime values of the Data Block. To start a connection, bring the “connect” input on the Client high and wait for the block to connect.</p>



<p class="wp-block-paragraph">The status of the block can be seen by monitoring the “output &gt; diagnostics &gt; status” tag. A tag value of 16#7004 indicates a successful connection.</p>



<p class="wp-block-paragraph">The publish/subscribe/unsubscribe signals are level-triggered, and only a single command is allowed to be active at any given moment, or else an error will occur.</p>



<p class="wp-block-paragraph">A message can be published to a topic by setting the topic, populating the byte array and setting the data length, and setting the “publish” control signal. Any MQTT client subscribed to the same topic and connected to the AWS Endpoint will be able to see your published message.</p>



<h2 id="h-troubleshooting-common-errors" class="wp-block-heading">Troubleshooting Common Errors</h2>



<p class="wp-block-paragraph"><em>Note: An additional guide accompanying the LMQTT library is the </em><a href="https://support.industry.siemens.com/cs/document/109772284/cloud-connection-%E2%80%93-simple-and-secure-with-simatic-s7-1200-s7-1500?dti=0&amp;lc=en-WW"><em>Cloud connection – simple and secure with SIMATIC S7-1200/S7-1500 &#8211; ID: 109772284 &#8211; Industry Siemens Support</em></a><em> by Siemens, which provides more detail about configuring an AWS broker and setting up the PLC project from scratch.</em></p>



<h3 id="h-the-lmqtt-client-is-timing-out-when-trying-to-connect" class="wp-block-heading">The LMQTT Client is timing out when trying to connect</h3>



<p class="wp-block-paragraph">This is most likely caused by an incorrect connection parameter or improper network configuration on the PLC. Some steps to try to remedy this error:</p>



<ol class="wp-block-list">
<li>Check that the AWS IoT Data Endpoint is pingable from the device network.</li>
</ol>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="415" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/aws-iot-data-endpoint14-1024x415.png" alt="AWS IoT data end point" class="wp-image-40420" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/aws-iot-data-endpoint14-1024x415.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/12/aws-iot-data-endpoint14-300x122.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/aws-iot-data-endpoint14-768x311.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/aws-iot-data-endpoint14.png 1236w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ol class="wp-block-list">
<li>A known issue of older versions of the LMQTT library is that the broker string needed to be terminated with a period, but this is resolved in current versions of the library.</li>



<li>Check your PLC network configuration. Since the PLC needs an internet connection to reach the AWS Endpoint, the correct router address is mandatory. To find the router address, run a “ipconfig” command in Command Prompt and look for the “Gateway” setting for your network adapter while connected to the PLC network.</li>
</ol>



<figure class="wp-block-image size-full"><img decoding="async" width="689" height="175" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/profient-interface15.png" alt="profinet interface" class="wp-image-40421" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/profient-interface15.png 689w, https://static.dmcinfo.com/wp-content/uploads/2025/12/profient-interface15-300x76.png 300w" sizes="(max-width: 689px) 100vw, 689px" /></figure>



<p class="wp-block-paragraph">The DNS server might not be properly configured. This will prevent the PLC from resolving the Endpoint. DNS servers can be configured in the PLC “Properties &gt; Advanced Configuration” menu. The DNS addresses can be your router gateway or a trusted server such as Google (8.8.8.8).</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="217" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/advanced-configuration16-1024x217.png" alt="advanced configuration" class="wp-image-40422" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/advanced-configuration16-1024x217.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/12/advanced-configuration16-300x64.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/advanced-configuration16-768x163.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/advanced-configuration16.png 1126w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 id="h-the-lmqtt-client-is-stuck-in-a-reconnection-loop" class="wp-block-heading">The LMQTT Client is stuck in a reconnection loop</h3>



<p class="wp-block-paragraph">A connection loop is a sign that the certificate authentication or AWS policy is configured incorrectly. Ensure that the certificate is set up properly and that the Client block is not attempting to connect with a denied Publish topic for the Will topic for the active AWS Policy.</p>



<h3 id="h-i-want-to-test-my-mqtt-connection-without-the-plc" class="wp-block-heading">I want to test my MQTT connection without the PLC</h3>



<p class="wp-block-paragraph">There are many free downloadable MQTT clients that can be set up on your computer, such as MQTTx or MQTT Explorer.</p>



<h2 id="h-conclusion" class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Although the setup process is more complex than traditional methods, secure MQTT communications from a PLC to the cloud can allow remote communications that would cause security risks with traditional methods. At its core, MQTT is a secure and lightweight protocol that is versatile and can suit the needs of hobbyists and industry alike.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Connect Siemens PLC Data to the Cloud with MQTT</strong></h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Learn more about our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> expertise in <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/" data-type="page" data-id="444">Siemens</a> PLC Programming, MQTT, and AWS to deliver real-time operational data from the plant floor to enterprise systems.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/40387/siemens-mqtt-setup-with-aws-iot-core/">Siemens MQTT Setup with AWS IoT Core</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Using The Siemens Extended Modbus Library</title>
		<link>https://static.dmcinfo.com/blog/39393/using-the-siemens-extended-modbus-library/</link>
		
		<dc:creator><![CDATA[DMC]]></dc:creator>
		<pubDate>Tue, 11 Nov 2025 13:00:00 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=39393</guid>

					<description><![CDATA[<p>The Extended Modbus Library was developed by Ola Bjørnli and published on GitHub. It has since been incorporated into the Siemens Open Library, which is maintained by DMC.&#160; This library extends and simplifies the built-in Modbus functionality within Siemens TIA Portal, giving developers a more flexible and user-friendly way to work with Modbus devices. Ola [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/39393/using-the-siemens-extended-modbus-library/">Using The Siemens Extended Modbus Library</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The Extended Modbus Library was developed by Ola Bjørnli and published on <a href="https://github.com/rexhip/rexhip" target="_blank" rel="noreferrer noopener">GitHub</a>. It has since been incorporated into the <a href="https://openplclibrary.com/" target="_blank" rel="noreferrer noopener">Siemens Open Library</a>, which is maintained by DMC.&nbsp;</p>



<p class="wp-block-paragraph">This library extends and simplifies the built-in Modbus functionality within Siemens TIA Portal, giving developers a more flexible and user-friendly way to work with Modbus devices. Ola Bjørnli’s provided examples and documentation, found on GitHub, do a great job breaking down how to use the library.&nbsp;</p>



<h2 id="h-how-the-extended-modbus-library-works-with-modbus-tcp-nbsp" class="wp-block-heading">How the Extended Modbus Library Works With Modbus TCP&nbsp;</h2>



<p class="wp-block-paragraph">Here is an example of how to set up a Modbus TCP client.&nbsp;</p>



<h3 id="h-block-interface-nbsp" class="wp-block-heading">Block Interface&nbsp;</h3>



<p class="wp-block-paragraph">To maximize reusability, we have set up our inputs to include:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Connection ID &#8211;</strong> Unique identifier for each Modbus Client instance&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>Hardware interface</strong> <strong>– </strong>The hardware interface to which the Modbus Server is networked&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>TCP port –</strong> Typically 502&nbsp;&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>IP address – </strong>The IP address of the Modbus Sever&nbsp;</li>
</ul>



<p class="wp-block-paragraph">This allows the block to be reused for multiple field devices, provided they have the same Modbus interface.&nbsp;</p>



<p class="wp-block-paragraph">The static data elements are:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>mb_query – </strong>This is used to define the Modbus queries; one instance can be reused multiple times&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>mb_tcp_ctrl – </strong>The function block that establishes connection runs and sequences queries&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>mb_delay_between_queries – </strong>Spaces out queries to avoid overloading the server&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li><strong>modbusRegisters &#8211;&nbsp;</strong> A custom UDT containing the data to be read from and written to the Modbus server.&nbsp;</li>
</ul>



<p class="wp-block-paragraph">The only constant we have defined is the clientNumber, which is the station address. This is usually 0 or 255.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="828" height="480" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-01.png" alt="Modbus TCP interface" class="wp-image-39443" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-01.png 828w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-01-300x174.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-01-768x445.png 768w" sizes="(max-width: 828px) 100vw, 828px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="450" height="250" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-02.png" alt="Modbus TCP interface" class="wp-image-39445" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-02.png 450w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-02-300x167.png 300w" sizes="(max-width: 450px) 100vw, 450px" /></figure>



<h3 id="h-the-code-nbsp" class="wp-block-heading">The Code&nbsp;</h3>



<p class="wp-block-paragraph">This is taken almost exactly from Ola Bjørnli’s example, but it is broken up so we can walk through each step.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">The initial setup is straightforward:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Call the mb_tcp_ctrl block</strong>&nbsp;&nbsp;
<ul class="wp-block-list">
<li>Map in the interface, connection ID, IP address, and TCP defined in inputs</li>



<li>Set your timeout to whatever is needed for your application&nbsp;&nbsp;</li>



<li>Point mb_query to mb_query we set in the static memory&nbsp;</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li><strong>Call mb_delay_between_queries</strong>&nbsp;&nbsp;
<ul class="wp-block-list">
<li>Tie in the same mb_query from static memory&nbsp;</li>



<li>Set the delay needed for your application&nbsp;</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="632" height="264" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-03.png" alt="Modbus TCP code" class="wp-image-39446" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-03.png 632w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-03-300x125.png 300w" sizes="(max-width: 632px) 100vw, 632px" /></figure>



<p class="wp-block-paragraph">After this initial setup, we need to build our queries. First, looking at the read queries, below are reads for all four types of Modbus registers. Again, the Extended Modbus Library makes this very straightforward:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Call mb_query </strong>for each query you want to run; there is no limit&nbsp;
<ul class="wp-block-list">
<li>data_addr corresponds to the register of the address you are trying to read from&nbsp;</li>



<li>Data_ptr should point to where you want the data to be stored in&nbsp;
<ul class="wp-block-list">
<li>Here we have a custom UDT in the static memory, this can either be an array of data points or to an individual point&nbsp;</li>
</ul>
</li>



<li>Mb_addr is the station address we defined as a constant earlier&nbsp;</li>



<li>Mode is used to tell the query what kind of operation we are performing&nbsp;
<ul class="wp-block-list">
<li>These modes are defined as constants within the static memory of the mb_query we are calling&nbsp;</li>
</ul>
</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="830" height="508" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-04.png" alt="Modbus TCP code" class="wp-image-39447" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-04.png 830w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-04-300x184.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-04-768x470.png 768w" sizes="(max-width: 830px) 100vw, 830px" /></figure>



<p class="wp-block-paragraph">To write to either the output coils or the analog output holding registers, you set up your query calls as shown below. The only difference is that mode is pointed to the “c.write” struct in mb_query instead of “c.read”, and the data_ptr points to the data on your PLC that you want to write to the Modbus device.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="732" height="262" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-05.png" alt="Modbus TCP code" class="wp-image-39448" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-05.png 732w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-05-300x107.png 300w" sizes="(max-width: 732px) 100vw, 732px" /></figure>



<p class="wp-block-paragraph">With just these three sections, your code can read and write to any register on a Modbus TCP device!&nbsp;</p>



<h2 id="h-how-it-works-with-modbus-rtu-nbsp" class="wp-block-heading">How It Works With Modbus RTU&nbsp;</h2>



<p class="wp-block-paragraph">Using this library, the code to connect to a Modbus RTU device is almost the exact same as a Modbus TCP device.&nbsp; The only difference is:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Call mb_rtu1200_ctrl or mb_rtu1500_ctrl </strong>instead of mb_tcp_ctrl&nbsp;
<ul class="wp-block-list">
<li>Choose the FB that matches your PLC&nbsp;</li>



<li>hardware_id should be connected to the port your device is connected to&nbsp;</li>



<li>buad_rate should be set to match your RTU device’s baud rate&nbsp;</li>



<li>operating mode should be set based on the table shown below taken from the Siemens information system&nbsp;</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="568" height="158" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-06.png" alt="Modbus TCP code" class="wp-image-39449" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-06.png 568w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-06-300x83.png 300w" sizes="(max-width: 568px) 100vw, 568px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="936" height="114" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-07.png" alt="Modbus TCP code" class="wp-image-39450" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-07.png 936w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-07-300x37.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-07-768x94.png 768w" sizes="(max-width: 936px) 100vw, 936px" /></figure>



<h2 id="h-tips-tricks-and-troubleshooting" class="wp-block-heading">Tips, Tricks, and Troubleshooting</h2>



<h3 id="h-fun-with-pointers-nbsp" class="wp-block-heading">Fun With Pointers&nbsp;</h3>



<p class="wp-block-paragraph">When passing data to and from mb_query as shown above, the data is passed by a pointer. The function block then finds the start and the length of the data you pass in, meaning the data types passed in do not matter. For example, you don’t need to just have 16-bit integers used to read from input registers.</p>



<p class="wp-block-paragraph">This is especially useful when:&nbsp;</p>



<ul class="wp-block-list">
<li>Multiple statuses are bitmapped into a single register&nbsp;
<ul class="wp-block-list">
<li>Can automatically splice it into 16 bools&nbsp;</li>
</ul>
</li>



<li>A 32-bit datapoint is passed out over two registers&nbsp;
<ul class="wp-block-list">
<li>For example, this can be passed into a single real</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">These can be handled with custom UDTs, like the one shown below. You must ensure proper alignment with the actual register indexes and account for byte-swapping as needed.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="816" height="548" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-08.png" alt="Modbus TCP interface" class="wp-image-39451" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-08.png 816w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-08-300x201.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-08-768x516.png 768w" sizes="(max-width: 816px) 100vw, 816px" /></figure>



<h3 id="h-queries-less-than-16-bit" class="wp-block-heading">Queries Less Than 16-Bit</h3>



<p class="wp-block-paragraph">If reading fewer than 16 bits (for example, discrete inputs or outputs), use mb_query_bits. While the standard mb_query may still work in some instances, this function is the recommended route to read smaller datasets.&nbsp;</p>



<h3 id="h-troubleshooting-overview" class="wp-block-heading">Troubleshooting Overview</h3>



<p class="wp-block-paragraph">The extended Modbus Library uses the Siemens communication blocks (TCON,&nbsp; TDISCON, TSEND, TRECEIVE), meaning you can leverage their error codes for troubleshooting.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Within your function block’s instance memory:&nbsp;</p>



<ul class="wp-block-list">
<li>Navigate within your “ctrl” block and open “MB_CLIENT” to view error codes&nbsp;</li>



<li>You can dig into the individual T-blocks as needed&nbsp;</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="936" height="808" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-09-1.png" alt="Modbus TCP interface" class="wp-image-39454" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-09-1.png 936w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-09-1-300x259.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/10/Modbus-TCP-09-1-768x663.png 768w" sizes="(max-width: 936px) 100vw, 936px" /></figure>



<h3 id="h-troubleshooting-queries-nbsp" class="wp-block-heading">Troubleshooting Queries&nbsp;</h3>



<p class="wp-block-paragraph">It is important to note that each query is executed independently, and if a query fails from a configuration issue, an invalid register, or anything else, it will be skipped, and the next query will be executed.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">The error codes for that query will only be displayed until the next query is run. To debug:&nbsp;</p>



<ul class="wp-block-list">
<li>Comment out all but one query at a time&nbsp;</li>



<li>Troubleshoot until no errors are present and the data is being populated or sent as expected </li>
</ul>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Simplify Modbus Integration in Siemens TIA Porta</strong>l.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Learn more about our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> capabilities for reusable Modbus TCP and RTU communications for your <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/" data-type="page" data-id="444">Siemens PLC</a> projects.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/39393/using-the-siemens-extended-modbus-library/">Using The Siemens Extended Modbus Library</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WinCC Unified: Automatic Data Logging to a Network Drive</title>
		<link>https://static.dmcinfo.com/blog/15721/wincc-unified-automatic-data-logging-to-a-network-drive/</link>
		
		<dc:creator><![CDATA[Andy Reese]]></dc:creator>
		<pubDate>Tue, 04 Feb 2025 16:25:10 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/15721/wincc-unified-automatic-data-logging-to-a-network-drive/</guid>

					<description><![CDATA[<p>Saving data logs locally to an HMI (Human Machine Interface) is a convenient way to store important run data. With WinCC Unified it is easy to take this one step further, and store data to a network drive. This means that your data can be automatically moved from the HMI to a more accessible and [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/15721/wincc-unified-automatic-data-logging-to-a-network-drive/">WinCC Unified: Automatic Data Logging to a Network Drive</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Saving data logs locally to an HMI (Human Machine Interface) is a convenient way to store important run data. With WinCC Unified it is easy to take this one step further, and store data to a network drive. This means that your data can be automatically moved from the HMI to a more accessible and potentially safer location. It also adds a layer of redundancy, making data loss less likely.</p>



<p class="wp-block-paragraph">This article will walk through all the basics you need to set up automatic data logging on your Unified panel and have the files copied to a network drive.&nbsp;</p>



<h2 id="h-step-1-configure-the-local-media" class="wp-block-heading">Step 1: Configure the Local Media</h2>



<p class="wp-block-paragraph">The first step is to ensure that you have local storage media configured and accessible for the HMI to use. &nbsp;</p>



<p class="wp-block-paragraph"><img decoding="async" alt="WinCC Unified runtime settings" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/wincc-unified-runtime-settings.png"><br>
<em>Figure 1: Runtime settings / Storage System&nbsp;</em></p>



<p class="wp-block-paragraph">Once you have added your Unified Panel to your TIA Portal project, navigate to the “Runtime settings” located within the project tree. &nbsp;</p>



<p class="wp-block-paragraph">In the window that appears, select “Storage system”. Here you can configure the physical media location where files will be saved. On this panel, there is one SD slot, and two USB slots to select from.&nbsp;</p>



<p class="wp-block-paragraph">The logic in the demo will assume you are using SD-X51, although any will work. Once the SD card is physically installed to the HMI, navigate to “media/simatic/X51” within its file explorer to ensure the card is properly installed and detected. We are now ready to configure data logs for local storage on the HMI.&nbsp;</p>



<h2 id="h-step-2-nbsp-create-the-data-logs-nbsp" class="wp-block-heading">Step 2: &nbsp;Create the Data Logs&nbsp;</h2>



<p class="wp-block-paragraph">If your goal is to cyclically log a PLC tag, the easiest way will be to use the built-in logging capabilities of your Unified Panel. &nbsp;</p>



<p class="wp-block-paragraph">Once you have linked the PLC Tag(s) that you would like to log to a corresponding HMI tag, navigate to “Logs” in your Unified panel’s project tree. In the window that opens, select “&lt;Add new&gt;,” and create a name for your data log, and configure it as needed. &nbsp;</p>



<p class="wp-block-paragraph"><img decoding="async" alt="Data logging area in TIA Portal" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/data-logging-area-tia-portal.png"><br>
<em>Figure 2: Add Data Logging Area in TIA Portal</em></p>



<h2 id="h-step-3-configure-the-network-drive-nbsp" class="wp-block-heading">Step 3: Configure the Network Drive&nbsp;</h2>



<p class="wp-block-paragraph"><strong>Note: If you simply want to create data logs locally on the HMI, you can skip this step.</strong>&nbsp;</p>



<p class="wp-block-paragraph">Once you have identified the network drive you would like to save your data logs to, you will need to configure the panel so you can access it. &nbsp;</p>



<p class="wp-block-paragraph">On your Unified panel, navigate to the network icon, select “Network Drive”, and click “Add.&#8221;</p>



<p class="wp-block-paragraph"><img decoding="async" alt="Configured Network Drive Displays “Connected” on the Unified Panel" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/wincc-unified-panel-configured.png"><br>
<em>Figure 3: Configured Network Drive Displays “Connected” on the Unified Panel (not in runtime)&nbsp;</em></p>



<p class="wp-block-paragraph">You will need to enter in the Network Path, username, and password for your network drive here. The path should be something like “//192.168.XXX.XXX/MyNetworkDrivePath.” &nbsp;</p>



<p class="wp-block-paragraph">Once the correct information is entered, the status should read “Connected.&#8221; Now you are all set to create some logic that will automatically move your data to this drive.&nbsp;</p>



<h2 id="h-nbsp-step-4-select-tags-to-log-nbsp" class="wp-block-heading">&nbsp;Step 4: Select Tags to Log&nbsp;</h2>



<p class="wp-block-paragraph">Now we have to add the specific tag we would like to log, to our newly created log.</p>



<p class="wp-block-paragraph"><img decoding="async" alt="data log in tia portal" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/tia-portal-data-log.png"><em>Figure 4: Select tag to add to Data Log in TIA Portal</em></p>



<p class="wp-block-paragraph">Navigate to your HMI tags (or the specific tag table which your tag is within) and select the tag you want to log.&nbsp;In the bottom bar, select “Logging tags.”&nbsp;Within this menu, select “&lt;Add new&gt;.&#8221;&nbsp;The name can be anything and the process tag will automatically populate with the tag name. In the data log column find the data log you created. The logging mode will be cyclic for this demonstration.</p>



<p class="wp-block-paragraph">Now, you must set the cycle time for the log.</p>



<p class="wp-block-paragraph"><img decoding="async" alt="Set cycle time in TIA Portal" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/tia-portal-cycle-time_1.png"><br>
<em>Figure 5: Set cycle time in TIA Portal</em></p>



<p class="wp-block-paragraph">From the same window, navigate to the properties of logging tag you just added. Select Cycle, and set the cycle time to your desired frequency.</p>



<h2 id="h-step-5-convert-database-file-into-csv-files-optional" class="wp-block-heading">Step 5: Convert database file into .csv files (Optional)</h2>



<p class="wp-block-paragraph">At this point, you have set up everything you need to create a database with your tag logged cyclically locally on the HMI. If you would like to stop at this point you can, although you will need a DB browser for SQLite to open and review your files. &nbsp;</p>



<p class="wp-block-paragraph">If you would like to be able to open your files in excel, follow this step.&nbsp;</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">JavaScript</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>export async function ConvertToCSV() { // Please note, the format of a file path is device and operating system specific. // You need to adapt the given path to your environment. // Example for a Unified Comfort device (Linux OS): /home/user1/data.dat // Example for a Unified PC-based device (MS Windows OS): C:\Users\Public\data.dat

let timeStamp = new Date().toLocaleDateString().replace(/&#91;/&#93;/g, "_"); 
let path = "/media/simatic/X51/LoggedTag" + timeStamp +".csv";
let delimiter = ','; 
let start = new Date(); 
let end = new Date(start.getTime() - 246060*1000);
let tag = HMIRuntime.TagLogging.LoggedTags("Example_Data_Log:Logging_LogTest");
let tagValue = tag.Read(start, end, 0); 
let csvData = "Timestamp:" + delimiter + "Tag Name:" + delimiter + "Value:" + "\n";
tagValue.then((loggedTagResult) => { 
let error = loggedTagResult.Error; 
let tagArray = loggedTagResult.Values;

for (let loggedTag of tagArray){
csvData += new Date(loggedTag.TimeStamp) + delimiter + "TestValue" + delimiter + loggedTag.Value + delimiter  + "\n";
}

HMIRuntime.FileSystem.WriteFile(path, csvData, "utf8").then( 
function() { 
HMIRuntime.Trace("Write file finished successfully"); 
}).catch(function(errCode) { 
HMIRuntime.Trace("Write failed, Error: " + errCode); 
});
}).catch ((errCode)=> { 
HMIRuntime.Trace("Read failed, Error: " + errCode); 
});
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">export</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">async</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">ConvertToCSV</span><span style="color: #D4D4D4">() { </span><span style="color: #6A9955">// Please note, the format of a file path is device and operating system specific. // You need to adapt the given path to your environment. // Example for a Unified Comfort device (Linux OS): /home/user1/data.dat // Example for a Unified PC-based device (MS Windows OS): C:\Users\Public\data.dat</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">timeStamp</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Date</span><span style="color: #D4D4D4">().</span><span style="color: #DCDCAA">toLocaleDateString</span><span style="color: #D4D4D4">().</span><span style="color: #DCDCAA">replace</span><span style="color: #D4D4D4">(</span><span style="color: #D16969">/</span><span style="color: #CE9178">&#91;</span><span style="color: #D16969">/</span><span style="color: #CE9178">&#93;</span><span style="color: #D16969">/</span><span style="color: #569CD6">g</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;_&quot;</span><span style="color: #D4D4D4">); </span></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">path</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;/media/simatic/X51/LoggedTag&quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">timeStamp</span><span style="color: #D4D4D4"> +</span><span style="color: #CE9178">&quot;.csv&quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">delimiter</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&apos;,&apos;</span><span style="color: #D4D4D4">; </span></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">start</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Date</span><span style="color: #D4D4D4">(); </span></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">end</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Date</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">start</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">getTime</span><span style="color: #D4D4D4">() - </span><span style="color: #B5CEA8">246060</span><span style="color: #D4D4D4">*</span><span style="color: #B5CEA8">1000</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">tag</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">HMIRuntime</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">TagLogging</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">LoggedTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Example_Data_Log:Logging_LogTest&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">tagValue</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">tag</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Read</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">start</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">end</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">); </span></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">csvData</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;Timestamp:&quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">delimiter</span><span style="color: #D4D4D4"> + </span><span style="color: #CE9178">&quot;Tag Name:&quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">delimiter</span><span style="color: #D4D4D4"> + </span><span style="color: #CE9178">&quot;Value:&quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #CE9178">&quot;</span><span style="color: #D7BA7D">\n</span><span style="color: #CE9178">&quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #9CDCFE">tagValue</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">then</span><span style="color: #D4D4D4">((</span><span style="color: #9CDCFE">loggedTagResult</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">=&gt;</span><span style="color: #D4D4D4"> { </span></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">error</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">loggedTagResult</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Error</span><span style="color: #D4D4D4">; </span></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">tagArray</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">loggedTagResult</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Values</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> (</span><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">loggedTag</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">of</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">tagArray</span><span style="color: #D4D4D4">){</span></span>
<span class="line"><span style="color: #9CDCFE">csvData</span><span style="color: #D4D4D4"> += </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Date</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">loggedTag</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">TimeStamp</span><span style="color: #D4D4D4">) + </span><span style="color: #9CDCFE">delimiter</span><span style="color: #D4D4D4"> + </span><span style="color: #CE9178">&quot;TestValue&quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">delimiter</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">loggedTag</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">delimiter</span><span style="color: #D4D4D4">  + </span><span style="color: #CE9178">&quot;</span><span style="color: #D7BA7D">\n</span><span style="color: #CE9178">&quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">HMIRuntime</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">FileSystem</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">WriteFile</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">path</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">csvData</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;utf8&quot;</span><span style="color: #D4D4D4">).</span><span style="color: #DCDCAA">then</span><span style="color: #D4D4D4">( </span></span>
<span class="line"><span style="color: #569CD6">function</span><span style="color: #D4D4D4">() { </span></span>
<span class="line"><span style="color: #9CDCFE">HMIRuntime</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Trace</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Write file finished successfully&quot;</span><span style="color: #D4D4D4">); </span></span>
<span class="line"><span style="color: #D4D4D4">}).</span><span style="color: #DCDCAA">catch</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">function</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">errCode</span><span style="color: #D4D4D4">) { </span></span>
<span class="line"><span style="color: #9CDCFE">HMIRuntime</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Trace</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Write failed, Error: &quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">errCode</span><span style="color: #D4D4D4">); </span></span>
<span class="line"><span style="color: #D4D4D4">});</span></span>
<span class="line"><span style="color: #D4D4D4">}).</span><span style="color: #DCDCAA">catch</span><span style="color: #D4D4D4"> ((</span><span style="color: #9CDCFE">errCode</span><span style="color: #D4D4D4">)</span><span style="color: #569CD6">=&gt;</span><span style="color: #D4D4D4"> { </span></span>
<span class="line"><span style="color: #9CDCFE">HMIRuntime</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Trace</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Read failed, Error: &quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">errCode</span><span style="color: #D4D4D4">); </span></span>
<span class="line"><span style="color: #D4D4D4">});</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



<p class="wp-block-paragraph"><img decoding="async" alt="Example convert to .csv logic" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/convert-to-_csv-logic.png"><em>Figure 6: Example convert to .csv logic</em></p>



<p class="wp-block-paragraph">To do this you can copy the logic shown in figure 6. The yellow boxes are areas you will want to change. From top to bottom these yellow boxes are:&nbsp;</p>



<ol class="wp-block-list">
<li>File path where your data logs will be saved</li>



<li>Length of time to pull from database file (ms)</li>



<li>The data log, and tag within that log you are adding to a csv in the format (“DataLog:LoggingTag”)</li>



<li>The column header for your tag names</li>



<li>The name of your tag or process value for your csv file</li>
</ol>



<p class="wp-block-paragraph">The script above simply pulls the last 24 hours of the database file we created previously, adds it to a .csv file, and then saves to the local HMI media. You have the option to change how far back this script will pull when called&nbsp;by changing the in value second yellow box. &nbsp;</p>



<p class="wp-block-paragraph">Now you must call this script. There are a few ways to do this but the simplest would be to create a scheduled task.&nbsp;</p>



<p class="wp-block-paragraph"><img decoding="async" alt="Create and configure scheduled task" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/configure-scheduled-task.png"><em>Figure 7: Create and configure scheduled task</em></p>



<p class="wp-block-paragraph">To create a scheduled task, navigate to the scheduled tasks section in the project tree. Add a new scheduled task then&nbsp;configure the trigger cycle.</p>



<p class="wp-block-paragraph">In this case, our task is triggered once per day&nbsp;and you can specify at which time in the properties of the task.</p>



<p class="wp-block-paragraph"><img decoding="async" alt="Call script within scheduled task" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/call-script-scheduled-task.png"><br>
<em>Figure 8: Call script within scheduled task</em></p>



<p class="wp-block-paragraph">Now that you have created your scheduled task, you need to call the ConvertToCSV script.&nbsp;You do this by navigating to the events of your scheduled task and selecting “&lt;Add function&gt;” then add your script.</p>



<p class="wp-block-paragraph">At this point, you have done everything you need to automatically log your data locally to the HMI as a .csv file.&nbsp;</p>



<h2 id="h-step-7-copy-logs-to-the-network-drive" class="wp-block-heading">Step 7: Copy Logs to the Network Drive</h2>



<p class="wp-block-paragraph"><strong>Note: this must be done in Portal V18, with V18 or later firmware on your comfort panel. Automatically copying data to a network drive does not work in V17 and earlier, although it will work manually (called via a pushbutton or other HMI interaction).&nbsp;</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">JavaScript</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>let fileTransferCommand = "-s " + localfilepath + " -d /net/mount/Data/ -o";
 
  function exportLevel() {
    HMIRuntime.Device.SysFct.StartProgram("/opt/siemens/App_Restriction/copy.sh", fileTransferCommand, 0, true, undefined);
  }</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">fileTransferCommand</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;-s &quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">localfilepath</span><span style="color: #D4D4D4"> + </span><span style="color: #CE9178">&quot; -d /net/mount/Data/ -o&quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">exportLevel</span><span style="color: #D4D4D4">() {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">HMIRuntime</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Device</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">SysFct</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">StartProgram</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;/opt/siemens/App_Restriction/copy.sh&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">fileTransferCommand</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">, </span><span style="color: #569CD6">undefined</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span></code></pre></div>



<p class="wp-block-paragraph"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/network-drive-function-call.png"><br>
<em>Figure 9: Copy to Network Drive Function Call</em></p>



<p class="wp-block-paragraph">If you would like to have your files automatically copied to the network drive you set up earlier, simply copy the logic above and append it at the bottom of the ConvertToCSV script written earlier. &nbsp;</p>



<p class="wp-block-paragraph">The two yellow boxes must be configured as follows (left to right)</p>



<ul class="wp-block-list">
<li>The exact file path you locally saved your data file (including the filename)</li>



<li>The exact file path you would like to save the file to (this always starts with /net/mount/Data)</li>
</ul>



<p class="wp-block-paragraph">Congratulations, you now have data automatically being transferred to your network drive.&nbsp;</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Automate WinCC Unified Data Logging and Storage</strong>.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Learn more about our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> solutions for HMI data logging, CSV conversion, and automated network-drive transfers with <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/siemens-simatic-wincc-programming/" data-type="page" data-id="500">Siemens WinCC Unified</a>.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/15721/wincc-unified-automatic-data-logging-to-a-network-drive/">WinCC Unified: Automatic Data Logging to a Network Drive</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMC Updates Siemens Open Library with SIMATIC WinCC Unified</title>
		<link>https://static.dmcinfo.com/blog/15754/dmc-updates-siemens-open-library-with-simatic-wincc-unified/</link>
		
		<dc:creator><![CDATA[DMC]]></dc:creator>
		<pubDate>Thu, 16 Jan 2025 12:53:34 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Unified]]></category>
		<category><![CDATA[WinCC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/15754/dmc-updates-siemens-open-library-with-simatic-wincc-unified/</guid>

					<description><![CDATA[<p>DMC recently updated the Siemens Open Library, which was updated to include SIMATIC WinCC Unified support. The free, open-source Siemens Open Library was developed by DMC in partnership with Siemens as a development resource for the Siemens community. It has been downloaded more than 12,000 times. &#160; The Siemens Open Library is a tool in [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/15754/dmc-updates-siemens-open-library-with-simatic-wincc-unified/">DMC Updates Siemens Open Library with SIMATIC WinCC Unified</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">DMC recently updated the <a href="https://openplclibrary.com/#latest-versions" target="_blank">Siemens Open Library</a>, which was updated to include SIMATIC WinCC Unified support. The free, open-source Siemens Open Library was developed by DMC in partnership with Siemens as a development resource for the Siemens community. It has been downloaded more than 12,000 times. &nbsp;</p>



<p class="wp-block-paragraph">The Siemens Open Library is a tool in helping industrial companies face the opportunities and challenges of modernization. DMC added HMI elements and faceplates for Siemens SIMATIC WinCC Unified, an integrated visualization system, to the code library to help users improve the digitalization and transparency of their industrial machines and operations.&nbsp;</p>



<p class="wp-block-paragraph">“From the start, our goal has been to help standardize and accelerate Siemens PLC and HMI development among integrators, OEMs, and end-users when modernizing their automation and control systems and solutions,” said Nick Shea, DMC Senior Director, Automation.&nbsp;</p>



<p class="wp-block-paragraph"><img decoding="async" alt="Device Faceplates in the Siemens Open Library" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Siemens-Open-Library-IconFaceplates.png"><br>
<em>Device Faceplates in the Siemens Open Library</em></p>



<h2 id="h-what-is-wincc-unified-nbsp" class="wp-block-heading">What is WinCC Unified?&nbsp;</h2>



<p class="wp-block-paragraph">WinCC Unified is a visualization system that links data from production’s operational technology (OT) with IT enterprise intelligence systems and other parallel PC applications running at the control system layer. This data is displayed in a holistic operating concept offering transparency across operations.&nbsp;</p>



<p class="wp-block-paragraph">DMC decided to upgrade the Siemens Open Library after Siemens released its SIMATIC WinCC Unified System in 2022 as part of TIA Portal v16. The library is now updated for TIA Portal V18 and V19.&nbsp;</p>



<p class="wp-block-paragraph">“With WinCC Unified’s feature-rich Javascript functions, the Library is much more usable for future-proofing PLC and HMI automation capabilities,” said Carl Remler, DMC Senior Project Engineer. “It also makes cross-platform development much easier and faster by enabling the programming of lightweight and maintenance-free HTML5 web clients.”&nbsp;</p>



<p class="wp-block-paragraph">According to Remler, “WinCC Unified enables a near object-oriented engineering approach to designing and configuring production lines and processes. This means engineers can define the characteristics of plant assets just once and reuse them as instances in hierarchically structured operations.”&nbsp;</p>



<p class="wp-block-paragraph"><img decoding="async" alt="WinCC Unified folder in the Siemens Open Library" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Siemens-Open-Library-WinccUnifiedFolder.png"><br>
<em>WinCC Unified folder in the Siemens Open Library</em></p>



<h2 class="wp-block-heading" aria-level="2" paraeid="{da00c237-1381-4cac-87e8-c60f2e0dcff4}{223}" paraid="1809092165" role="heading">Advantages of WinCC in the Siemens Open Library&nbsp;</h2>



<p class="wp-block-paragraph"><p paraeid="{da00c237-1381-4cac-87e8-c60f2e0dcff4}{235}" paraid="819162968">SIMATIC WinCC Unified brings three key advantages to the Siemens Open Library.&nbsp;</p></p>



<ul class="wp-block-list" role="list">
 

<li aria-setsize="-1" data-aria-level="1" data-aria-posinset="0" data-font="Aptos" data-leveltext="•" data-list-defn-props="{&quot;134224900&quot;:false,&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-listid="2" role="listitem">
 

<p class="wp-block-paragraph" paraeid="{da00c237-1381-4cac-87e8-c60f2e0dcff4}{247}" paraid="1290887047"><strong>Single visualization system &nbsp;</strong><br />
 Featuring open interfaces with continuous scalability, WinCC Unified can scale for all use cases. It can provide HMIs for control panels on machines or for complex solutions where PCs communicate via API with third-party OT and IT systems.&nbsp;</p>


 </li>


</ul>



<ul class="wp-block-list" role="list">
 

<li aria-setsize="-1" data-aria-level="1" data-aria-posinset="1" data-font="Aptos" data-leveltext="•" data-list-defn-props="{&quot;134224900&quot;:false,&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-listid="2" role="listitem">
 

<p class="wp-block-paragraph" paraeid="{65bc113e-958f-404a-9810-9d141bd87ed1}{26}" paraid="2030722330"><strong>Future-proofing applications&nbsp;</strong><br />
 Whether they&rsquo;re used onsite or remotely, WinCC Unified offers functionality across all HMI platforms. Using the latest technology like HTML5, JavaScript and SVG, WinCC Unified powers HMI platforms from tablets to machine control panels to system PCs.&nbsp;</p>


 </li>


</ul>



<ul class="wp-block-list" role="list">
 

<li aria-setsize="-1" data-aria-level="1" data-aria-posinset="2" data-font="Aptos" data-leveltext="•" data-list-defn-props="{&quot;134224900&quot;:false,&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;•&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-listid="2" role="listitem">
 

<p class="wp-block-paragraph" paraeid="{65bc113e-958f-404a-9810-9d141bd87ed1}{40}" paraid="1321501536"><strong>Consistent usability &nbsp;</strong><br />
 WinCC Unified delivers faster and easier training for engineers and operators by using the same controls across all platforms. This simplifies engineering and ensures the best user experience.&nbsp;</p>


 </li>


</ul>



<p class="wp-block-paragraph"><p paraeid="{65bc113e-958f-404a-9810-9d141bd87ed1}{40}" paraid="1321501536"><img decoding="async" alt="Pump, Motor, and Tank Graphics in the Siemens Open Library" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Siemens-Open-Library-Pump-Graphics.png"><br>
<em>Pump, Motor, and Tank Graphics in the Siemens Open Library</em></p></p>



<p class="wp-block-paragraph"><p paraeid="{65bc113e-958f-404a-9810-9d141bd87ed1}{40}" paraid="1321501536">Other benefits that DMC has found using WinCC Unified include easier script debugging and modernized out-of-the-box styles. Additionally, the &#8220;openFaceplateInPopup&#8221; function automatically creates faceplate popups during runtime to speed up development and improve project organization. &nbsp;</p></p>



<p class="wp-block-paragraph"><p paraeid="{65bc113e-958f-404a-9810-9d141bd87ed1}{40}" paraid="1321501536"><img decoding="async" alt="Hopper level bar" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Siemens-Open-Library-HopperLevelBar.png">&nbsp;<img decoding="async" alt="VFD pop up" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Siemens-Open-Library-VFDPopup.png"><br>
<em>Left: hopper level bar; Right: VFD pop-up</em></p></p>



<p class="wp-block-paragraph"><p paraeid="{65bc113e-958f-404a-9810-9d141bd87ed1}{40}" paraid="1321501536"><img decoding="async" alt="Opening the Siemens Open Library in TIA Portal V19" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Siemens-Open-Library-V19.png"><br>
<em>Opening the Siemens Open Library in TIA Portal V19</em></p></p>



<p class="wp-block-paragraph">DMC looks forward to more opportunities help users modernize their industrial plants and operations using the Siemens Open Library and WinCC Unified. According to Shea, “With all the many advanced capabilities WinCC Unified provides DMC, we can expand our creative horizons on keeping our customers competitive and profitable today and futureproofing them with the flexibility and scalability they need for [tomorrow].”&nbsp;</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Accelerate Siemens HMI Development with Open, Reusable Tools</strong></h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Learn more about our capabilities in <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> for standardizing PLC and HMI development with the Siemens Open Library and <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/siemens-simatic-wincc-programming/" data-type="page" data-id="500">SIMATIC WinCC</a> Unified.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/15754/dmc-updates-siemens-open-library-with-simatic-wincc-unified/">DMC Updates Siemens Open Library with SIMATIC WinCC Unified</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Join DMC at Manufacturing in America 2024</title>
		<link>https://static.dmcinfo.com/blog/15981/join-dmc-at-manufacturing-in-america-2024/</link>
		
		<dc:creator><![CDATA[Andy Femminineo]]></dc:creator>
		<pubDate>Tue, 17 Sep 2024 08:27:59 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/15981/join-dmc-at-manufacturing-in-america-2024/</guid>

					<description><![CDATA[<p>DMC is excited to participate at this year’s Manufacturing in America conference on September 25, 2024 at Ford Field in Detroit, Michigan.&#160; MiA is an annual conference held by Siemens and Electro-Matic. The two-day conference comprises educational seminars, technical exhibits, and networking opportunities for tech integrators and engineers in more than 15 industries. MiA 2024 [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/15981/join-dmc-at-manufacturing-in-america-2024/">Join DMC at Manufacturing in America 2024</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">DMC is excited to participate at this year’s Manufacturing in America conference on <strong>September 25</strong>, 2024 at Ford Field in Detroit, Michigan.&nbsp;</p>



<p class="wp-block-paragraph">MiA is an annual conference held by Siemens and Electro-Matic. The two-day conference comprises educational seminars, technical exhibits, and networking opportunities for tech integrators and engineers in more than 15 industries.</p>



<p class="wp-block-paragraph">MiA 2024 is free to attend, but it requires registration.</p>



<h2 id="h-serving-up-drinks-with-drinkbot" class="wp-block-heading">Serving up Drinks with DrinkBot</h2>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/dmc-drink-bot-2018_1.jpg" alt="DMC's DrinkBot"/></figure>



<p class="wp-block-paragraph">Once again DMC will be serving up drinks with <a href="https://static.dmcinfo.com/latest-thinking/blog/id/9580/dmc-engineers-serve-up-a-siemens-s7-powered-drinkbot">DrinkBot</a>, an automatic drink-dispensing machine showcasing a variety of Siemens and factory automation technologies.&nbsp;<br>
<br>
Come find DMC and see DrinkBot in action at <strong>Booth 401</strong> on the South Side of Adams St. Concourse.&nbsp;</p>



<h2 id="h-dmc-and-siemens" class="wp-block-heading">DMC and Siemens</h2>



<p class="wp-block-paragraph">DMC is a Siemens Solution Partner, showcasing our strong partnership with Siemens and highlighting our ability to deliver high-quality technical solutions. In addition to our status as a Solution Partner, for years DMC has had the greatest number of Siemens S7 certified engineers in North America. <br> <br> DMC has over 200 engineers distributed across 15 offices in all corners of the United States. Our breadth and depth of technical capabilities, in addition to our geographic distribution, allow DMC to take on a wide variety of projects, ranging from one-day service calls, to months-long projects involving extensive system design, development, and commissioning. </p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step">Meet DMC&#8217;s Automation Experts at Manufacturing in America.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Learn more about DMC&#8217;s <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" id="420">Manufacturing &amp; Automation</a> expertise at Manufacturing in America, and see how our <a href="https://static.dmcinfo.com/about/partners/siemens-platinum-solution-partner/" id="867">Siemens partnership</a> can help advance your next project.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/15981/join-dmc-at-manufacturing-in-america-2024/">Join DMC at Manufacturing in America 2024</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
