<?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>Wenjing Deng, Author at DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/author/wenjingd/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Fri, 04 Sep 2026 20:02:57 +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>Wenjing Deng, Author at DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Triggering Gateway File Syncs for Ignition 8.3 Using Git Hooks</title>
		<link>https://static.dmcinfo.com/blog/44721/ignition-8-3-gateway-file-sync-git/</link>
		
		<dc:creator><![CDATA[Wenjing Deng]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 23:00:00 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Ignition]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[SCADA]]></category>
		<category><![CDATA[Workflows]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=44721</guid>

					<description><![CDATA[<p>Ignition 8.3’s file-based project structure makes it much easier to use standard Git workflows with SCADA projects. Project resources can now be version-controlled directly as files, which makes branch switching, pull requests, and external editing more practical. This also enables patterns&#160;such as&#160;using symbolic links to share project resources across environments. One issue that arises with [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/44721/ignition-8-3-gateway-file-sync-git/">Triggering Gateway File Syncs for Ignition 8.3 Using Git Hooks</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ignition 8.3’s file-based project structure makes it much easier to use standard Git workflows with SCADA projects. Project resources can now be version-controlled directly as files, which makes branch switching, pull requests, and external editing more practical. This also enables patterns&nbsp;such as&nbsp;<a href="https://static.dmcinfo.com/blog/44390/symbolic-links-shared-ignition-project-libraries/">using symbolic links</a> to share project resources across environments.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">One issue that arises with this workflow is that Ignition does not always immediately detect file changes made outside the Designer. After checking out a branch, merging changes, or pulling updates, the gateway will still need a manual file scan from the Gateway before the latest project or configuration files are reflected.</p>



<p class="wp-block-paragraph">To make development workflows smoother for our projects at DMC, we created a script that uses the Ignition 8.3 Gateway API endpoints to trigger project and configuration file scans. By integrating this script into Git hooks, file scans can run automatically after branch checkouts or merges, eliminating the need to manually navigate to the Gateway webpage and trigger them each time (fig1 and fig2). Additionally, developers can manually run the script from Bash or the command line to trigger file scans on demand.</p>



<p class="wp-block-paragraph">In this blog, we have provided a sample script and .env file, and we will walk you through the steps to set this up.</p>



<figure class="wp-block-image aligncenter size-full has-custom-border"><img fetchpriority="high" decoding="async" width="1429" height="277" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-1.png" alt="Screenshot of the &quot;Platform Overview&quot; page in the Ignition Gateway UI." class="has-border-color has-custom-light-blue-border-color wp-image-44728" 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/ignition-8.3.-git-workflow-image-1.png 1429w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-1-300x58.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-1-1024x198.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-1-768x149.png 768w" sizes="(max-width: 1429px) 100vw, 1429px" /><figcaption class="wp-element-caption"><em>Figure 1: Platform File System Scan Button</em></figcaption></figure>



<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="1427" height="334" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-2.png" alt="Screenshot of the Projects section of Ignition." class="has-border-color has-custom-light-blue-border-color wp-image-44729" 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/ignition-8.3.-git-workflow-image-2.png 1427w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-2-300x70.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-2-1024x240.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-2-768x180.png 768w" sizes="(max-width: 1427px) 100vw, 1427px" /><figcaption class="wp-element-caption"><em>Figure 2: Project File System Scan Button</em></figcaption></figure>



<h2 id="h-why-this-step-matters" class="wp-block-heading">Why This Step Matters</h2>



<p class="wp-block-paragraph">There are a variety of reasons why automating this step is both important and beneficial. This automation reduces friction in the development workflow, reducing some of the common sources of errors and delays while improving team-wide consistency and clarity. By using Git hooks to automate file syncing in Ignition, developers avoid repeated trips to the Gateway UI and reduce mental load.</p>



<p class="wp-block-paragraph">By adding automated file scans into the development workflow, teams can make Ignition 8.3 development feel more like regular software development, where Git-based practices like branching, merging, and pull requests fit naturally into SCADA projects.</p>



<h2 id="h-set-up-gateway-api-key" class="wp-block-heading">Set Up Gateway API Key</h2>



<p class="wp-block-paragraph">In order to access the API endpoint, we need to set up an API key in the Gateway. Follow <a href="https://www.docs.inductiveautomation.com/docs/8.3/platform/security/api-keys" target="_blank" rel="noreferrer noopener">Ignition’s manual</a> for this.</p>



<p class="wp-block-paragraph">By default, Ignition requires API keys to be used over secure HTTPS connections. Since this script commonly runs against local development Gateways using standard HTTP, the Require secure connections for API Keys setting must be disabled for the requests to succeed.</p>



<p class="wp-block-paragraph">Make sure to copy the ENTIRE api key. We will add it to the <em><strong>.env</strong></em> file in the next section.</p>



<h2 id="h-repo-and-environment-variables-set-up" class="wp-block-heading">Repo and Environment Variables Set Up</h2>



<p class="wp-block-paragraph">Copy the example script (included in the section below) into your desired location in your repo. For example, in this repo, we have put it at the following location and called it <strong>gateway_scan.py</strong>.</p>



<p class="wp-block-paragraph">Path: <em><strong>ignition-docker-8-3\scripts\gateway_scan</strong></em></p>



<figure class="wp-block-image size-full has-custom-border"><img decoding="async" width="1798" height="453" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-4.png" alt="Screenshot of a file explorer window displaying a Python source file named gateway_scan.py." class="wp-image-44730" 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/ignition-8.3.-git-workflow-image-4.png 1798w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-4-300x76.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-4-1024x258.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-4-768x193.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3.-git-workflow-image-4-1536x387.png 1536w" sizes="(max-width: 1798px) 100vw, 1798px" /></figure>



<p class="wp-block-paragraph">Next, add the following variables to your .env file:</p>



<p class="wp-block-paragraph"><strong><em>GATEWAY_IP= (your gateway’s IP address)</em><br><em>HTTP_PORT = (your gateway’s port)</em><br><em>GATEWAY_API_TOKEN=(your generated API token for the gateway)</em></strong></p>



<p class="wp-block-paragraph">The example script looks for these variables; if they are already in your <strong>.env</strong> and are named differently, open the example script and do a find-and-replace to update the variable names.</p>



<h2 id="h-git-hook-set-up" class="wp-block-heading">Git Hook Set Up</h2>



<p class="wp-block-paragraph">Git hooks let us automatically run scripts when certain Git actions occur. For this workflow, we typically set up Git hooks to run the gateway_scan.py script after branch checkouts and merges.</p>



<p class="wp-block-paragraph">This means that when a developer switches branches, pulls changes, or merges updates, the Gateway file scan can run automatically without having to open the Gateway webpage and manually trigger it.</p>



<p class="wp-block-paragraph">To set this up, create two files in the <strong>.git/hooks</strong> folder:</p>



<p class="wp-block-paragraph"><em><strong>.git/hooks/post-checkout<br>.git/hooks/post-merge</strong></em></p>



<p class="wp-block-paragraph">Paste the following code into both files:</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">C</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>#!/bin/sh

# Move to the root of the git repository
cd "$(git rev-parse --show-toplevel)" || exit 1

# Run file scan script
py scripts/gateway_scan/gateway_scan.py</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: #D4D4D4">#!/bin/sh</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4"># Move to the root of the git repository</span></span>
<span class="line"><span style="color: #D4D4D4">cd </span><span style="color: #CE9178">&quot;$(git rev-parse --show-toplevel)&quot;</span><span style="color: #D4D4D4"> || exit </span><span style="color: #B5CEA8">1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4"># Run file scan script</span></span>
<span class="line"><span style="color: #D4D4D4">py scripts/gateway_scan/gateway_scan.py</span></span></code></pre></div>



<p class="wp-block-paragraph">The post-checkout hook runs after switching branches. The post-merge hook runs after a merge, which also commonly happens when pulling new changes from the remote repository.</p>



<p class="wp-block-paragraph">The first command moves the terminal to the root of the Git repository. This helps ensure the script runs from the correct location, even if Git triggers the hook from within the repository.</p>



<p class="wp-block-paragraph">The second command runs the Gateway scan script:</p>



<p class="wp-block-paragraph"><em><strong>py scripts/gateway_scan/gateway_scan.py</strong></em></p>



<p class="wp-block-paragraph">Developers can also run this command manually from Bash or the command line whenever they want to trigger a Gateway file scan on demand.</p>



<p class="wp-block-paragraph">If the repository contains multiple gateways you want to automatically file scan for, add a separate set of environment variables for each gateway in the <strong>.env file</strong>, create an API key for each gateway, and then update the <strong>gateway_scan.py</strong> script following the comments, so the script knows which gateways to scan.</p>



<h2 id="h-example-script-amp-env-file" class="wp-block-heading">Example Script &amp; env. File</h2>



<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(3 * 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">Python</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>#------------------Gateway Scan Trigger Script Example------------------
"""
Run script to trigger file scans for gateways.
"""
import os
from pathlib import Path
from urllib import error, request

REQUEST_TIMEOUT_SECONDS = 5

print("Syncing Ignition Gateway...", flush=True)


def load_env_file(env_path):
	"""
	Load simple KEY=value pairs from a .env file without third-party dependencies.
	"""
	if not env_path.exists():
		return

	for line in env_path.read_text(encoding="utf-8").splitlines():
		line = line.strip()

		if not line or line.startswith("#") or "=" not in line:
			continue

		key, value = line.split("=", 1)
		os.environ.setdefault(key.strip(), value.strip().strip("\"'"))


# Read in .env file
load_env_file(Path(__file__).resolve().parents&#91;2&#93; / ".env")

# Grab environment variables
# TODO: VERIFY YOUR .ENV FILE HAS THESE VARIABLES SET CORRECTLY
# CREATE ADDITIONAL ENVIRONMENT VARIABLES FOR ADDITIONAL GATEWAYS IF NEEDED
# BY COPYING THE FOLLOWING FORMAT
GATEWAY_PORT = os.getenv("HTTP_PORT_IGN")
GATEWAY_IP = os.getenv("GATEWAY_IP")
GATEWAY_API_TOKEN = os.getenv("GATEWAY_API_TOKEN")

# TODO: ADD ADDITIONAL GATEWAYS HERE IF NEEDED!
gateways = {
	"Ignition": {"ip": GATEWAY_IP, "port": GATEWAY_PORT, "token": GATEWAY_API_TOKEN}
	# Additional gateways can be added here in the same format
}

actions = &#91;"projects", "config"&#93;

def post_scan_request(url, headers):
	"""
	Post a gateway scan request and return the HTTP status code.
	"""
	req = request.Request(url, headers=headers, method="POST")

	with request.urlopen(req, timeout=REQUEST_TIMEOUT_SECONDS) as response:
		return response.status


def trigger_scans():
	"""
	Trigger scans on the specified gateways.
	"""
	for name, config in gateways.items():
		ip = config&#91;"ip"&#93;
		token = config&#91;"token"&#93;
		port = config&#91;"port"&#93;

		if not ip or not token or not port:
			var_name = "ip address" if not ip else "API token" if not token else "Port"
			print(f"Skipping {name}: Missing environment variable '{var_name}'.")
			continue

		headers = {
			"X-Ignition-API-Token": f"{token}"
		}

		for action in actions:
			# Ignition uses the final path segment to choose the scan type
			url = f""

			try:
				status_code = post_scan_request(url, headers)

				if status_code == 200:
					print(f"Success: File Scan {name} {action}")
				else:
					print(f"Failed: File Scan {name} {action} (Status: {status_code})")
			except TimeoutError:
				print(f"Timeout: {name} took too long to respond.")
			except error.HTTPError as err:
				print(f"Failed: File Scan {name} {action} (Status: {err.code})")
			except error.URLError as err:
				print(f"Connection Error: Could not reach {name} at {ip}. ({err.reason})")


if __name__ == "__main__":
	trigger_scans()

# ---------------------.env file example for one gateway--------------------
# HTTP_PORT_IGN= "your gateway's port"
# GATEWAY_IP= "your gateway's IP address"
# GATEWAY_API_TOKEN= "your gateway's API token"</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: #6A9955">#------------------Gateway Scan Trigger Script Example------------------</span></span>
<span class="line"><span style="color: #CE9178">&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #CE9178">Run script to trigger file scans for gateways.</span></span>
<span class="line"><span style="color: #CE9178">&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> os</span></span>
<span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> pathlib </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> Path</span></span>
<span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> urllib </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> error, request</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">REQUEST_TIMEOUT_SECONDS = </span><span style="color: #B5CEA8">5</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Syncing Ignition Gateway...&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">flush</span><span style="color: #D4D4D4">=</span><span style="color: #569CD6">True</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">load_env_file</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">env_path</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #CE9178">&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #CE9178">	Load simple KEY=value pairs from a .env file without third-party dependencies.</span></span>
<span class="line"><span style="color: #CE9178">	&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> env_path.exists():</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #C586C0">return</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> line </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> env_path.read_text(</span><span style="color: #9CDCFE">encoding</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;utf-8&quot;</span><span style="color: #D4D4D4">).splitlines():</span></span>
<span class="line"><span style="color: #D4D4D4">		line = line.strip()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> line </span><span style="color: #569CD6">or</span><span style="color: #D4D4D4"> line.startswith(</span><span style="color: #CE9178">&quot;#&quot;</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">or</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;=&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">in</span><span style="color: #D4D4D4"> line:</span></span>
<span class="line"><span style="color: #D4D4D4">			</span><span style="color: #C586C0">continue</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">		key, value = line.split(</span><span style="color: #CE9178">&quot;=&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">		os.environ.setdefault(key.strip(), value.strip().strip(</span><span style="color: #CE9178">&quot;</span><span style="color: #D7BA7D">\&quot;</span><span style="color: #CE9178">&apos;&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Read in .env file</span></span>
<span class="line"><span style="color: #D4D4D4">load_env_file(Path(</span><span style="color: #9CDCFE">__file__</span><span style="color: #D4D4D4">).resolve().parents&#91;</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4">&#93; / </span><span style="color: #CE9178">&quot;.env&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Grab environment variables</span></span>
<span class="line"><span style="color: #6A9955"># </span><span style="color: #569CD6">TODO</span><span style="color: #6A9955">: VERIFY YOUR .ENV FILE HAS THESE VARIABLES SET CORRECTLY</span></span>
<span class="line"><span style="color: #6A9955"># CREATE ADDITIONAL ENVIRONMENT VARIABLES FOR ADDITIONAL GATEWAYS IF NEEDED</span></span>
<span class="line"><span style="color: #6A9955"># BY COPYING THE FOLLOWING FORMAT</span></span>
<span class="line"><span style="color: #D4D4D4">GATEWAY_PORT = os.getenv(</span><span style="color: #CE9178">&quot;HTTP_PORT_IGN&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">GATEWAY_IP = os.getenv(</span><span style="color: #CE9178">&quot;GATEWAY_IP&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">GATEWAY_API_TOKEN = os.getenv(</span><span style="color: #CE9178">&quot;GATEWAY_API_TOKEN&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># </span><span style="color: #569CD6">TODO</span><span style="color: #6A9955">: ADD ADDITIONAL GATEWAYS HERE IF NEEDED!</span></span>
<span class="line"><span style="color: #D4D4D4">gateways = {</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #CE9178">&quot;Ignition&quot;</span><span style="color: #D4D4D4">: {</span><span style="color: #CE9178">&quot;ip&quot;</span><span style="color: #D4D4D4">: GATEWAY_IP, </span><span style="color: #CE9178">&quot;port&quot;</span><span style="color: #D4D4D4">: GATEWAY_PORT, </span><span style="color: #CE9178">&quot;token&quot;</span><span style="color: #D4D4D4">: GATEWAY_API_TOKEN}</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #6A9955"># Additional gateways can be added here in the same format</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">actions = &#91;</span><span style="color: #CE9178">&quot;projects&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;config&quot;</span><span style="color: #D4D4D4">&#93;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">post_scan_request</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">url</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">headers</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #CE9178">&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #CE9178">	Post a gateway scan request and return the HTTP status code.</span></span>
<span class="line"><span style="color: #CE9178">	&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">	req = request.Request(url, </span><span style="color: #9CDCFE">headers</span><span style="color: #D4D4D4">=headers, </span><span style="color: #9CDCFE">method</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;POST&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">with</span><span style="color: #D4D4D4"> request.urlopen(req, </span><span style="color: #9CDCFE">timeout</span><span style="color: #D4D4D4">=REQUEST_TIMEOUT_SECONDS) </span><span style="color: #C586C0">as</span><span style="color: #D4D4D4"> response:</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> response.status</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">trigger_scans</span><span style="color: #D4D4D4">():</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #CE9178">&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #CE9178">	Trigger scans on the specified gateways.</span></span>
<span class="line"><span style="color: #CE9178">	&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> name, config </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> gateways.items():</span></span>
<span class="line"><span style="color: #D4D4D4">		ip = config&#91;</span><span style="color: #CE9178">&quot;ip&quot;</span><span style="color: #D4D4D4">&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">		token = config&#91;</span><span style="color: #CE9178">&quot;token&quot;</span><span style="color: #D4D4D4">&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">		port = config&#91;</span><span style="color: #CE9178">&quot;port&quot;</span><span style="color: #D4D4D4">&#93;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> ip </span><span style="color: #569CD6">or</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> token </span><span style="color: #569CD6">or</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> port:</span></span>
<span class="line"><span style="color: #D4D4D4">			var_name = </span><span style="color: #CE9178">&quot;ip address&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> ip </span><span style="color: #C586C0">else</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;API token&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> token </span><span style="color: #C586C0">else</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Port&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">			</span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Skipping </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">name</span><span style="color: #569CD6">}</span><span style="color: #CE9178">: Missing environment variable &apos;</span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">var_name</span><span style="color: #569CD6">}</span><span style="color: #CE9178">&apos;.&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">			</span><span style="color: #C586C0">continue</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">		headers = {</span></span>
<span class="line"><span style="color: #D4D4D4">			</span><span style="color: #CE9178">&quot;X-Ignition-API-Token&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;</span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">token</span><span style="color: #569CD6">}</span><span style="color: #CE9178">&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">		}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> action </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> actions:</span></span>
<span class="line"><span style="color: #D4D4D4">			</span><span style="color: #6A9955"># Ignition uses the final path segment to choose the scan type</span></span>
<span class="line"><span style="color: #D4D4D4">			url = </span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;http://</span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">ip</span><span style="color: #569CD6">}</span><span style="color: #CE9178">:</span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">port</span><span style="color: #569CD6">}</span><span style="color: #CE9178">/data/api/v1/scan/</span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">action</span><span style="color: #569CD6">}</span><span style="color: #CE9178">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">			</span><span style="color: #C586C0">try</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">				status_code = post_scan_request(url, headers)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">				</span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> status_code == </span><span style="color: #B5CEA8">200</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">					</span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Success: File Scan </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">name</span><span style="color: #569CD6">}</span><span style="color: #CE9178"> </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">action</span><span style="color: #569CD6">}</span><span style="color: #CE9178">&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">				</span><span style="color: #C586C0">else</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">					</span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Failed: File Scan </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">name</span><span style="color: #569CD6">}</span><span style="color: #CE9178"> </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">action</span><span style="color: #569CD6">}</span><span style="color: #CE9178"> (Status: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">status_code</span><span style="color: #569CD6">}</span><span style="color: #CE9178">)&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">			</span><span style="color: #C586C0">except</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">TimeoutError</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">				</span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Timeout: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">name</span><span style="color: #569CD6">}</span><span style="color: #CE9178"> took too long to respond.&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">			</span><span style="color: #C586C0">except</span><span style="color: #D4D4D4"> error.HTTPError </span><span style="color: #C586C0">as</span><span style="color: #D4D4D4"> err:</span></span>
<span class="line"><span style="color: #D4D4D4">				</span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Failed: File Scan </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">name</span><span style="color: #569CD6">}</span><span style="color: #CE9178"> </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">action</span><span style="color: #569CD6">}</span><span style="color: #CE9178"> (Status: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">err.code</span><span style="color: #569CD6">}</span><span style="color: #CE9178">)&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">			</span><span style="color: #C586C0">except</span><span style="color: #D4D4D4"> error.URLError </span><span style="color: #C586C0">as</span><span style="color: #D4D4D4"> err:</span></span>
<span class="line"><span style="color: #D4D4D4">				</span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Connection Error: Could not reach </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">name</span><span style="color: #569CD6">}</span><span style="color: #CE9178"> at </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">ip</span><span style="color: #569CD6">}</span><span style="color: #CE9178">. (</span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">err.reason</span><span style="color: #569CD6">}</span><span style="color: #CE9178">)&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">__name__</span><span style="color: #D4D4D4"> == </span><span style="color: #CE9178">&quot;__main__&quot;</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">	trigger_scans()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># ---------------------.env file example for one gateway--------------------</span></span>
<span class="line"><span style="color: #6A9955"># HTTP_PORT_IGN= &quot;your gateway&apos;s port&quot;</span></span>
<span class="line"><span style="color: #6A9955"># GATEWAY_IP= &quot;your gateway&apos;s IP address&quot;</span></span>
<span class="line"><span style="color: #6A9955"># GATEWAY_API_TOKEN= &quot;your gateway&apos;s API token&quot;</span></span></code></pre></div>



<h2 id="h-conclusion" class="wp-block-heading" style="padding-top:var(--wp--preset--spacing--40)">Conclusion</h2>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">Automating file syncs in Ignition 8.3 is a simple configuration change that can deliver meaningful improvements to your development workflow. By reducing manual steps and ensuring the Gateway always reflects the latest project state, teams can work more efficiently and with greater confidence. For engineers using Git to manage their Ignition projects, this approach unlocks the full benefits of modern version control while keeping SCADA development reliable and consistent.</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>Starting an Ignition project? DMC can help you take the next step.</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">Find out more about our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" target="_blank" rel="noreferrer noopener">Manufacturing Automation</a> and <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/" target="_blank" rel="noreferrer noopener">SCADA programming</a> solutions and reach out to an expert 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 class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/44721/ignition-8-3-gateway-file-sync-git/">Triggering Gateway File Syncs for Ignition 8.3 Using Git Hooks</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Setting Up Symbolic Links for Shared Project Libraries Across Ignition 8.3 Gateways</title>
		<link>https://static.dmcinfo.com/blog/44390/symbolic-links-shared-ignition-project-libraries/</link>
		
		<dc:creator><![CDATA[Wenjing Deng]]></dc:creator>
		<pubDate>Fri, 15 May 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[Ignition]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[ignition]]></category>
		<category><![CDATA[Libraries]]></category>
		<category><![CDATA[Workflows]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=44390</guid>

					<description><![CDATA[<p>Ignition 8.3’s file-based project structure makes it practical to treat gateway resources as standard source-controlled assets, allowing teams to track changes in Git, review diffs, and modify certain files directly outside of the Designer when needed. This level of transparency and control significantly improves the development workflow. In a recent Ignition 8.3 project, we had [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/44390/symbolic-links-shared-ignition-project-libraries/">Setting Up Symbolic Links for Shared Project Libraries Across Ignition 8.3 Gateways</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ignition 8.3’s file-based project structure makes it practical to treat gateway resources as standard source-controlled assets, allowing teams to track changes in Git, review diffs, and modify certain files directly outside of the Designer when needed. This level of transparency and control significantly improves the development workflow.</p>



<p class="wp-block-paragraph">In a recent Ignition 8.3 project, we had two gateways in a single Git repository that needed to share library elements. While 8.3 enables a more Git-centric workflow, it does not provide a built-in mechanism to keep shared resources synchronized across multiple gateways. Without an automatic way to manage this, shared libraries can quickly drift and become difficult to maintain.</p>



<p class="wp-block-paragraph">We addressed this by creating symbolic links from each gateway’s library folders to a shared “source of truth” directory. A <strong>symbolic link</strong> (symlink) is a special file that points to another file or folder—like a shortcut at the filesystem level. When you access it, the system transparently redirects you to the target location. This approach allows both gateways to reference the same underlying files while still fitting cleanly into a Git-based workflow, making it a simple, low-friction way to keep shared resources consistent.</p>



<p class="wp-block-paragraph">This blog walks through how to set up shared libraries between two Ignition gateways in a single Git repository using symlinks on Windows, helping you avoid duplication and keep shared code synchronized in one place.</p>



<p class="wp-block-paragraph">With this setup, any time a symlinked file is modified in a Designer and saved, it’s immediately overwritten in the shared “source of truth” location. After changes are made and tested in one gateway project’s Designer, the files can be committed and pushed to the repo as usual.</p>



<p class="wp-block-paragraph">We’ll walk through setting up a shared script library folder as an example. You can use the same pattern to share views, styles, and additional files as needed for your project.</p>



<h2 class="wp-block-heading" id="h-what-are-symbolic-links">What are Symbolic Links?</h2>



<p class="wp-block-paragraph">A symbolic link, often referred to as a <strong>symlink</strong>, is a reference point in a filesystem that points one file or folder to another location. Instead of duplicating the files, a symlink acts as a pointer. When an application accesses the symlinked path, the operating system (OS) redirects it to the target destination.</p>



<p class="wp-block-paragraph">In Ignition 8.3, a symlinked folder behaves exactly like a project directory. Associated scripts, views, and resources load as one would expect; however, the actual files live somewhere else in the filesystem.</p>



<h2 class="wp-block-heading" id="h-sample-repository-structure">Sample Repository Structure</h2>



<p class="wp-block-paragraph">Here is a visual representation of what the structure would look like after the symlinks are set up. The file structure for <strong>gateway1</strong> and <strong>gateway2</strong> down to script-python is default to ignition. You will have to create the “shared” folder location and structure manually in your repo, and you can organize it anyway you want.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--50)"><strong>repo/<br>└── gateways/<br>&nbsp; &nbsp;├── shared/<br>&nbsp; &nbsp;│ &nbsp; └── script-python/<br>&nbsp; &nbsp;│ &nbsp; &nbsp; &nbsp; └── library/ (real files live here for this example)<br>&nbsp; &nbsp;│<br>&nbsp; &nbsp;├── gateway1/<br>&nbsp; &nbsp;│ &nbsp; └── projects/<br>&nbsp; &nbsp;│ &nbsp; &nbsp; &nbsp; └── project1/<br>&nbsp; &nbsp;│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; └── ignition/<br>&nbsp; &nbsp;│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; └── script-python/<br>&nbsp; &nbsp;│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; └── library/ -&gt; symlink to ../../../../../shared/script-python/library<br>&nbsp; &nbsp;│<br>&nbsp; &nbsp;└── gateway2/<br>&nbsp; &nbsp; &nbsp; &nbsp;└── projects/<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;└── project2/<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;└── ignition/<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;└── script-python/<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;└── library/ -&gt; symlink to ../../../../../shared/script-python/library</strong></p>



<h2 class="wp-block-heading" id="h-setup-steps-for-windows">Setup Steps for Windows</h2>



<p class="wp-block-paragraph">Before creating any symbolic links, complete the following one-time setup steps. <strong>Every developer working with this repository must perform these steps on their local machine</strong>. Skipping them can result in broken links when the repo is cloned or checked out.</p>



<h3 class="wp-block-heading" id="h-prerequisites">Prerequisites</h3>



<p class="wp-block-paragraph"><strong>1. Enable Git symlink support</strong></p>



<p class="wp-block-paragraph">By default, Git on Windows may treat symlinks as plain text files. This setting ensures symlinks are created and checked out correctly.</p>



<p class="wp-block-paragraph">Run the following command in <strong>Git Bash</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">C</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>git config --global core.symlinks true</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: #D4D4D4">git config --global core.symlinks </span><span style="color: #569CD6">true</span></span></code></pre></div>



<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="1082" height="209" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-1.png" alt="Open command window with Git command to enable the use of symbolic links across all repositories on a machine." class="wp-image-44460" 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/ignition-8.3-symlinks-image-1.png 1082w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-1-300x58.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-1-1024x198.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-1-768x148.png 768w" sizes="(max-width: 1082px) 100vw, 1082px" /></figure>



<p class="wp-block-paragraph"><strong>2. Enable Windows Developer Mode</strong></p>



<p class="wp-block-paragraph">Developer Mode<strong> </strong>allows non-admin users to create symbolic links without permission-related issues.</p>



<p class="wp-block-paragraph"><strong>Settings &gt; Privacy &amp; Security &gt; For Developers &gt; Developer Mode</strong></p>



<p class="wp-block-paragraph">Turn Developer Mode <strong>on</strong>.</p>



<p class="wp-block-paragraph"><strong>3. Restart your computer</strong></p>



<p class="wp-block-paragraph">Restarting your computer ensures Developer Mode is fully applied before creating symlinks.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="624" height="387" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-2.png" alt="Advanced system settings in Windows, specifically highlighting options for developers and terminal management." class="wp-image-44414" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:1.6124476361460203;width:624px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-2.png 624w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-2-300x186.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<h2 class="wp-block-heading" id="h-initial-creation-of-symbolic-links">Initial Creation of Symbolic Links</h2>



<p class="wp-block-paragraph">Follow the steps below to set up the initial symlinks for the <code>script-python</code> library folder in our example. The same approach can be used for other shared resources.</p>



<h3 class="wp-block-heading" id="h-gateway-1"><strong>Gateway 1:</strong></h3>



<p class="wp-block-paragraph"><strong>1. Open Command Prompt as an Administrator</strong></p>



<p class="wp-block-paragraph"><strong>2. Navigate to the target directory for your symbolic links</strong></p>



<p class="wp-block-paragraph" style="padding-top:0;padding-bottom:var(--wp--preset--spacing--40)">Move to the directory where the symlink will live in <strong>Gateway 1</strong>: <em><strong>cd gateways\gateway1\projects\project1\ignition\script-python</strong></em></p>



<figure class="wp-block-image aligncenter size-large is-resized has-custom-border" style="margin-top:0;margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="1024" height="129" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-3-1024x129.png" alt="Administrator: Command Prompt window active in a specific directory path." class="wp-image-44417" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:7.9392168322618355;object-fit:cover;width:691px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-3-1024x129.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-3-300x38.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-3-768x97.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-3.png 1444w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph" style="padding-top:0;padding-bottom:var(--wp--preset--spacing--40)"><strong>3. Move any existing library files:</strong></p>



<p class="wp-block-paragraph" style="padding-top:0;padding-bottom:var(--wp--preset--spacing--40)">If you already have files in the library folder and/or the library folder exists, move the entire library folder to the shared directory<span style="box-sizing: border-box; margin: 0px; padding: 0px;">&nbsp;at&nbsp;<em><strong>gateways/shared/script-python</strong></em></span>. If not, skip this step.</p>



<p class="wp-block-paragraph" style="padding-top:0;padding-bottom:var(--wp--preset--spacing--40)">If you leave the library folder here: <em><strong>\gateways\gateway1\projects\project1\ignition\script-python</strong>. </em>The following error will occur because Windows cannot create a link where a directory already exists:</p>



<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-top:0;margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="2306" height="161" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-4.png" alt="The error message &quot;Cannot create a file when that file already exists&quot; indicates that a symbolic link or file named library already exists in the destination directory." class="wp-image-44419" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;aspect-ratio:14.424507658643327" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-4.png 2306w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-4-300x21.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-4-1024x71.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-4-768x54.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-4-1536x107.png 1536w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-4-2048x143.png 2048w" sizes="(max-width: 2306px) 100vw, 2306px" /></figure>



<p class="wp-block-paragraph" style="padding-top:0;padding-bottom:var(--wp--preset--spacing--40)"><strong>4. Create the symbolic link</strong></p>



<p class="wp-block-paragraph" style="padding-top:0;padding-bottom:0">Run the command below to create the symlink linked to the actual files in the shared location:</p>



<p class="wp-block-paragraph"><em><strong>mklink /D library &#8230;&#8230;&#8230;.\shared\script-python\library</strong></em></p>



<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-top:var(--wp--preset--spacing--40);margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="2325" height="293" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-5.png" alt="GIT command used to successfully create a symbolic link to a folder." class="wp-image-44421" 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/ignition-8.3-symlinks-image-5.png 2325w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-5-300x38.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-5-1024x129.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-5-768x97.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-5-1536x194.png 1536w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-5-2048x258.png 2048w" sizes="(max-width: 2325px) 100vw, 2325px" /></figure>



<p class="wp-block-paragraph"><strong>5. Verify the symlink was created successfully</strong></p>



<p class="wp-block-paragraph">Verify the link has been created by running the command <em>dir</em> at the symlink location in the command prompt. If the symlink was created correctly, then you should see it in your output.</p>



<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-top:var(--wp--preset--spacing--40);margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="1950" height="499" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-6-1-e1778267616906.png" alt="A [dir] command output shows a directory listing in a Windows Command Prompt, highlighting a symbolic link." class="wp-image-44422" 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/ignition-8.3-symlinks-image-6-1-e1778267616906.png 1950w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-6-1-e1778267616906-300x77.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-6-1-e1778267616906-1024x262.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-6-1-e1778267616906-768x197.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-6-1-e1778267616906-1536x393.png 1536w" sizes="(max-width: 1950px) 100vw, 1950px" /></figure>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">In addition, you can visually verify that the folder was created correctly in File Explorer by looking for the arrow icon in the bottom left. When you double-click into this symlinked folder, it will take you to the location it is linked to.</p>



<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-top:var(--wp--preset--spacing--30);margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="650" height="271" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/Picture12.png" alt="Windows 11 File Explorer window for a directory named script-python." class="wp-image-44431" 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/Picture12.png 650w, https://static.dmcinfo.com/wp-content/uploads/2026/05/Picture12-300x125.png 300w" sizes="(max-width: 650px) 100vw, 650px" /></figure>



<h3 class="wp-block-heading" id="h-gateway-2">Gateway 2</h3>



<p class="wp-block-paragraph">Repeat the same steps for <strong>Gateway 2</strong>, adjusting the path as needed:</p>



<p class="wp-block-paragraph"><em><strong>cd gateways\gateway2\projects\project2\ignition\script-python</strong></em></p>



<p class="wp-block-paragraph">Create the symlink pointing to the same library location.</p>



<p class="wp-block-paragraph">Once both gateways are linked, the shared library folder is ready for use. Any changes made through one gateway’s <strong>Ignition Designer</strong> will be written directly to the shared directory and can be committed to Git as usual.</p>



<h2 class="wp-block-heading" id="h-ignition-designer-gateway-refresh-and-test">Ignition Designer/Gateway Refresh and Test</h2>



<p class="wp-block-paragraph">After creating the symbolic links, the final step is to confirm that Ignition detects and uses the shared files properly. Because Ignition doesn’t automatically reload filesystem changes, users must manually initiate file and project scans to update each gateway.</p>



<p class="wp-block-paragraph"><strong>1. Close all open Ignition Designer sessions</strong></p>



<p class="wp-block-paragraph">Closing active sessions of Designer resolves any potential validation interference caused by cached projects.</p>



<p class="wp-block-paragraph"><strong>2. Trigger file and project scans on both Gateways</strong></p>



<p class="wp-block-paragraph">On each gateway, run the following:</p>



<ul class="wp-block-list">
<li>Platform → Overview →<strong> Scan File System</strong></li>



<li>Platform → System → Projects → <strong>Scan Projects</strong></li>
</ul>



<p class="wp-block-paragraph"><strong>3. Open Ignition Designer for Gateway 1</strong></p>



<ul class="wp-block-list">
<li>Create a new script or modify an existing script in the share library.</li>



<li>Save the changes.</li>
</ul>



<p class="wp-block-paragraph"><strong>4. Refresh Gateway 2</strong></p>



<ul class="wp-block-list">
<li style="padding-bottom:var(--wp--preset--spacing--40)">From the <strong>Gateway 2</strong> web UI, trigger both the file system scan and project scan again.</li>
</ul>



<p class="wp-block-paragraph"><strong>5. Open Ignition Developer for Gateway 2</strong></p>



<ul class="wp-block-list">
<li style="padding-bottom:var(--wp--preset--spacing--40)">Open Ignition Developer for the second Gateway and verify that the adjustments are present.</li>
</ul>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="1124" height="218" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-8.png" alt="Platform File Scan button in Ignition 8.3" class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44424" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;width:1200px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-8.png 1124w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-8-300x58.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-8-1024x199.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-8-768x149.png 768w" sizes="(max-width: 1124px) 100vw, 1124px" /><figcaption class="wp-element-caption">Platform File Scan Button</figcaption></figure>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="1128" height="265" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-9.png" alt="Project File Scan button in Ignition 8.3" class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44426" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;width:1200px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-9.png 1128w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-9-300x70.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-9-1024x241.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/ignition-8.3-symlinks-image-9-768x180.png 768w" sizes="(max-width: 1128px) 100vw, 1128px" /><figcaption class="wp-element-caption">Project File Scan Button</figcaption></figure>



<p class="wp-block-paragraph">Now the library symlinks are set up and ready for use. If the changes appear as expected, the symbolic link configuration is working correctly, and both gateways are pulling from the same shared source of truth. Once validated, follow your project&#8217;s specific git workflow to push these changes to your repository.</p>



<h2 class="wp-block-heading" id="h-final-thoughts-and-best-practices">Final Thoughts and Best Practices</h2>



<p class="wp-block-paragraph">It&#8217;s important to keep in mind that whenever a file in the gateway filesystem is changed, the gateway doesn’t automatically update to reflect those changes. You will need to perform two file scans for the latest changes to be reflected. The screenshots below show where to trigger these scans.</p>



<p class="wp-block-paragraph">At some point during testing, you may need to view/test a library file in both gateways. In this scenario, it is important to regularly perform the above file and project scans, as changes are being made and saved. Below is an example of a possible order of operations:</p>



<ol class="wp-block-list">
<li>Make changes to library file in <strong>Gateway 1</strong> project designer.</li>



<li>Save changes to library file in <strong>Gateway 1</strong> project designer.</li>



<li>Open <strong>Gateway 2</strong> webpage UI.</li>



<li>Press <strong>Scan File System</strong> on both <strong>Platform</strong> <strong>&gt; Overview</strong> page and <strong>Platform &gt; System &gt; Projects</strong> page for <strong>Gateway 2</strong>.</li>



<li>Open a fresh designer session of <strong>Gateway 2’s</strong> project to view latest changes.</li>
</ol>



<p class="wp-block-paragraph">Keep in mind that if changes are made in both gateways to the same library object, the last place it was saved will be the effective, latest state of the file. In the above example, if a change is made in <strong>Gateway 2’s</strong> project designer session and saved there, <strong>Gateway 1</strong> would have stale library files internally, requiring file scans to refresh them.</p>



<p class="wp-block-paragraph">To avoid accidentally overwriting changes, the best practice is to separate work into separate commits and modify a given shared file from only one gateway at a time.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">Finally, make sure the other developers run through the setup steps on their machines to avoid accidentally breaking any symbolic links during initial setup.</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 your next automation 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">Get expert <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/">Automation</a> engineering and <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-programming/">Ignition Programming</a> solutions from DMC. Talk with an Ignition expert 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 class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/44390/symbolic-links-shared-ignition-project-libraries/">Setting Up Symbolic Links for Shared Project Libraries Across Ignition 8.3 Gateways</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Memory Manipulation Tips For Mitsubishi PLCs using GxWorks3 </title>
		<link>https://static.dmcinfo.com/blog/40570/memory-manipulation-tips-for-mitsubishi-plcs-using-gxworks3/</link>
		
		<dc:creator><![CDATA[Wenjing Deng]]></dc:creator>
		<pubDate>Thu, 15 Jan 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=40570</guid>

					<description><![CDATA[<p>After working&#160;with GxWorks3&#160;on several&#160;projects,&#160;I learned a few things about&#160;managing memory&#160;that were&#160;very helpful.&#160;I hope&#160;my tips on the following topics will help others as well when working&#160;with GxWorks3. Retained Memory It is straightforward to set&#160;non-device assigned labels such as local labels within a program or a global label that&#160;doesn’t&#160;have a device assignment&#160;to&#160;retain&#160;memory. Locate the label and within [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/40570/memory-manipulation-tips-for-mitsubishi-plcs-using-gxworks3/">Memory Manipulation Tips For Mitsubishi PLCs using GxWorks3 </a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">After working&nbsp;with GxWorks3&nbsp;on several&nbsp;projects,&nbsp;I learned a few things about&nbsp;managing memory&nbsp;that were&nbsp;very helpful.&nbsp;I hope&nbsp;my tips on the following topics will help others as well when working&nbsp;with GxWorks3.</p>



<ol start="1" class="wp-block-list">
<li>How to set&nbsp;up&nbsp;retained&nbsp;memory for local labels, global labels&nbsp;with no device assignment,&nbsp;and&nbsp;global labels&nbsp;with device assignment&nbsp;</li>
</ol>



<ol start="2" class="wp-block-list">
<li>Adjusting&nbsp;the&nbsp;allotted device memory if you run out of a certain type of device memory&nbsp;</li>
</ol>



<ol start="3" class="wp-block-list">
<li>Minimizing&nbsp;program memory&nbsp;</li>
</ol>



<h2 id="h-retained-memory" class="wp-block-heading">Retained Memory</h2>



<p class="wp-block-paragraph">It is straightforward to set&nbsp;non-device assigned labels such as local labels within a program or a global label that&nbsp;doesn’t&nbsp;have a device assignment&nbsp;to&nbsp;retain&nbsp;memory. Locate the label and within the class drop down select ‘VAR_RETAIN’&nbsp;or ‘VAR_GLOBAL_RETAIN’&nbsp;as shown below for the two types of labels.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="56" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-1.png" alt="GxWorks3 Local Program Label" class="wp-image-40578" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-1.png 624w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-1-300x27.png 300w" sizes="(max-width: 624px) 100vw, 624px" /><figcaption class="wp-element-caption"><em>Figure 1: Local Program Label</em></figcaption></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="52" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-2.png" alt="GxWorks3 Unassigned Global Label" class="wp-image-40580" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-2.png 624w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-2-300x25.png 300w" sizes="(max-width: 624px) 100vw, 624px" /><figcaption class="wp-element-caption"><em>Figure 2: Unassigned Global Label</em></figcaption></figure>



<p class="wp-block-paragraph">It takes a couple of extra steps to set a device&nbsp;assigned&nbsp;global label to&nbsp;retain.&nbsp;After you have decided on which device you want to use to assign to your label, you can assign the device to the label as normal, then select ‘VAR_GLOBAL_RETAIN.’</p>



<p class="wp-block-paragraph">In the example&nbsp;below, I have assigned&nbsp;a trend array to a device section starting at&nbsp;D12000&nbsp;up to D12399.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="900" height="388" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-3.png" alt="GxWorks3 Tag Device Assignments" class="wp-image-40581" style="width:600px" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-3.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-3-300x129.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-3-768x331.png 768w" sizes="(max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption"><em>Figure 3: Tag Device Assignments</em></figcaption></figure>



<p class="wp-block-paragraph">Next, the D memory registers D12000-D12399 must be&nbsp;designated&nbsp;as&nbsp;retain&nbsp;memory in the ‘Device/Label Memory Area Detailed Setting’ area. To navigate here using the navigation tree,&nbsp;double-click&nbsp;on&nbsp;‘Parameter’ -&gt; ‘CPU Parameter’ -&gt; ‘Memory/Device Setting’ -&gt; ‘Device/Label Memory Area Setting’ -&gt; ‘&lt;Detailed Settings&gt;.’&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="564" height="334" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-4.png" alt="GxWorks3 Device/Label Memory Area Detailed Settings" class="wp-image-40582" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-4.png 564w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-4-300x178.png 300w" sizes="(max-width: 564px) 100vw, 564px" /><figcaption class="wp-element-caption"><em>Figure 4: Device/Label Memory Area Detailed Settings</em></figcaption></figure>



<p class="wp-block-paragraph">This will display the window shown below.</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="900" height="676" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-5.png" alt="GxWorks3 Setting Devices to Retain Memory" class="wp-image-40583" style="width:600px" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-5.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-5-300x225.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-5-768x577.png 768w" sizes="(max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption"><em>Figure 5: Setting Devices to Retain Memory</em></figcaption></figure>



<p class="wp-block-paragraph">From here,&nbsp;double-click on&nbsp;any of&nbsp;the cells&nbsp;circled in the screenshot above.&nbsp;This&nbsp;will&nbsp;open&nbsp;the Latch Range Setting, where we will&nbsp;set&nbsp;what memory registers should be&nbsp;retained&nbsp;or latched.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="590" height="650" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-6.png" alt="GxWorks3 Latch Range Setting Screen" class="wp-image-40584" style="width:400px" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-6.png 590w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-6-272x300.png 272w" sizes="(max-width: 590px) 100vw, 590px" /><figcaption class="wp-element-caption"><em>Figure 6.1: Latch Range Setting Screen</em></figcaption></figure>



<p class="wp-block-paragraph">Here,&nbsp;we can see that I have a couple of ranges set for both M and D registers including the range D12000-D12999 to include the trend array from our example. After you have set the ranges you need for your project, press ‘OK’ and then you are done.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Note, if you assign global labels that are not set to&nbsp;retain&nbsp;registers you defined in the Latch Range Setting or vice versa, you will receive&nbsp;a&nbsp;compile error reminding you to correct this.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="55" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-6-2.png" alt="GxWorks3 Latch Range Setting Compile Error" class="wp-image-40585" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-6-2.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-6-2-300x18.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-6-2-768x47.png 768w" sizes="(max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption"><em>Figure 6.2: Latch Range Setting Compile Error</em></figcaption></figure>



<h2 id="h-adjusting-device-memory-allotment-size" class="wp-block-heading">Adjusting Device Memory Allotment Size</h2>



<p class="wp-block-paragraph">Depending on the size of your PLC memory and the size of your project, there&nbsp;are times when you might run out of a particular device type. In this situation, if you are unable to upgrade your PLC memory, you can&nbsp;attempt&nbsp;to reallocate your device types if there are some device memory types that you are not using.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">To do this, navigate to the Device/Label Memory Area Setting Detail Settings screen as mentioned in the section above. Starting in the navigation tree, double-click on ‘Parameter’ -&gt; ‘CPU Parameter’ -&gt; ‘Memory/Device Setting’ -&gt; ‘Device/Label Memory Area Setting’ -&gt; ‘&lt;Detailed Settings&gt;.’&nbsp;</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="880" height="1024" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-7-880x1024.png" alt="GxWorks3 Reallocating Device Points" class="wp-image-40587" style="width:600px" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-7-880x1024.png 880w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-7-258x300.png 258w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-7-768x893.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-7.png 900w" sizes="(max-width: 880px) 100vw, 880px" /><figcaption class="wp-element-caption"><em>Figure 7: Reallocating Device Points</em></figcaption></figure>



<p class="wp-block-paragraph">Under the&nbsp;Device/Points column is where&nbsp;you can see the&nbsp;amount&nbsp;of points&nbsp;allocated&nbsp;to a given device. For example, for the D device, there are 20k points&nbsp;allocated&nbsp;which means the range of usable D devices spans from D0 – D20000. You can&nbsp;modify&nbsp;these allocations as needed&nbsp;as long as&nbsp;the total&nbsp;adds up&nbsp;to the ‘Total Device’ at the bottom as that is the limit of the PLC. After you are done, click on the ‘Check’ button at the bottom&nbsp;to&nbsp;verify that your new allocations are ok.&nbsp;&nbsp;</p>



<h2 id="h-minimizing-program-memory" class="wp-block-heading">Minimizing Program Memory</h2>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="900" height="272" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-8.png" alt="GxWorks3 Almost Out of Program Memory" class="wp-image-40589" style="width:600px" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-8.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-8-300x91.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-8-768x232.png 768w" sizes="(max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption"><em>Figure 8: Almost Out of Program Memory</em></figcaption></figure>



<p class="wp-block-paragraph">The screenshot above was from&nbsp;a previous&nbsp;Mitsubishi GxWorks3 PLC project where we almost ran out of program memory. Since upgrading the PLC memory was not an option, we had to&nbsp;consider&nbsp;other ways to save memory.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">For this project, we were programming from scratch and adhering to DMC’s&nbsp;best practices by using named Global Labels and UDTs for maximum code clarity and ease of maintenance.&nbsp;However, we discovered that&nbsp;moving data directly between UDTs&nbsp;using its symbolic name&nbsp;used&nbsp;a lot of program memory compared to directly&nbsp;manipulating the data using its device memory address. In the screenshots below you can see the massive difference in program steps used between using the symbolic name vs. the direct device address in rung 17.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="900" height="269" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-9.png" alt="GxWorks3 Using symbolic name, 881 steps used" class="wp-image-40590" style="width:800px" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-9.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-9-300x90.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-9-768x230.png 768w" sizes="(max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption"><em>Figure 9: Using symbolic name, 881 steps used</em></figcaption></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="152" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-10.png" alt="GxWorks3 Using memory address, 79 steps used" class="wp-image-40591" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-10.png 624w, https://static.dmcinfo.com/wp-content/uploads/2025/12/GxWorks3-tips-10-300x73.png 300w" sizes="(max-width: 624px) 100vw, 624px" /><figcaption class="wp-element-caption"><em>Figure 10: Using memory address, 79 steps used</em></figcaption></figure>



<p class="wp-block-paragraph">Due to the project hardware constraints, we had to sacrifice some&nbsp;code readability&nbsp;to fit the entire program within the allotted memory available. We used the instructions, BMOV (Transferring 16 – bit block data) and BLKMOV (Transferring n-bit data) on some of the bigger data transfers to help us achieve this. In the&nbsp;end,&nbsp;we were able to fit our program&nbsp;onto&nbsp;the PLC.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">I hope that you find these tips for setting up retained memory, adjusting the allotted device memory, and minimizing program memory helpful when working with GxWorks3.&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>Need expertise in GX Works3 and Mitsubishi automation systems?</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">See how DMC&#8217;s <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> experts use GX Works3 memory manipulation techniques and more about our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/mitsubishi-plc-programming-and-automation-services/" data-type="page" data-id="463">Mitsubishi PLC</a> programming 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/40570/memory-manipulation-tips-for-mitsubishi-plcs-using-gxworks3/">Memory Manipulation Tips For Mitsubishi PLCs using GxWorks3 </a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>A Quick Start Guide to Robot Programming with RCX-Studio 2020</title>
		<link>https://static.dmcinfo.com/blog/39521/a-quick-start-guide-to-robot-programming-with-rcx-studio-2020/</link>
		
		<dc:creator><![CDATA[Wenjing Deng]]></dc:creator>
		<pubDate>Wed, 12 Nov 2025 13:00:00 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=39521</guid>

					<description><![CDATA[<p>RCX-Studio 2020 is the required environment for configuring, teaching, and managing Yamaha robots.&#160;&#160; If your current automation project requires the use of the Yamaha RCX-Studio 2020 software for the RCX3 Series controllers, this guide is designed to minimize your ramp-up time. This blog assumes you have a general understanding of robot programming and Robot-PLC integration [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/39521/a-quick-start-guide-to-robot-programming-with-rcx-studio-2020/">A Quick Start Guide to Robot Programming with RCX-Studio 2020</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">RCX-Studio 2020 is the required environment for configuring, teaching, and managing Yamaha robots.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">If your current automation project requires the use of the Yamaha RCX-Studio 2020 software for the RCX3 Series controllers, this guide is designed to minimize your ramp-up time. This blog assumes you have a general understanding of robot programming and Robot-PLC integration knowledge. It is not designed to be a comprehensive guide on robot programming or to go through every single feature of Yamaha robots. We will cover the essential topics: connecting to the controller, defining IO, defining/teaching points, building a basic routine, and jogging so you can quickly move to development and commissioning your robot program.&nbsp;&nbsp;</p>



<h2 id="h-important" class="wp-block-heading">Important</h2>



<p class="wp-block-paragraph">RCX-Studio 2020 is free to download. However, to create, save, archive, and deploy custom programs to a controller, you will need a USB license dongle directly plugged into your PC.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">This link from Yamaha’s website includes the <a href="https://global.yamaha-motor.com/business/robot/lineup/controller/rcx340/rcx-studiopro" target="_blank" rel="noreferrer noopener">download link</a> for RCX-Studio and information on the USB license dongle.</p>



<h2 id="h-starting-a-project-file-structure-overview" class="wp-block-heading">Starting a Project (File Structure Overview)</h2>



<p class="wp-block-paragraph">This is the initial screen upon opening up the software.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="472" height="316" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-01.png" alt="RCX-Studio 2020 display window" class="wp-image-39641" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-01.png 472w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-01-300x201.png 300w" sizes="(max-width: 472px) 100vw, 472px" /></figure>



<p class="wp-block-paragraph">The files under the folder ‘Controller’ are unarchived robot files. When opened, these can be used directly to go online with the robot controller and jog and monitor the robot. The files under the folder ‘File’ with the .all extension are archived files and are generally used for source control. These files require a USB license key to open and edit. You can’t go online with the robot controller and jog/monitor the robot with an .all file but you can view the program contents.&nbsp;&nbsp;</p>



<h3 id="h-starting-with-no-reference-file-backing-up-from-controller" class="wp-block-heading">Starting With No Reference File/Backing up From Controller</h3>



<p class="wp-block-paragraph">If starting from scratch, create a new Controller file by double-clicking on ‘New Controller.’ The following window will appear.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="400" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-02.png" alt="RCX-Studio 2020 display window" class="wp-image-39642" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-02.png 624w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-02-300x192.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p class="wp-block-paragraph">Give your new controller a name. Then, you can select between starting in offline mode or online mode. To work offline with no existing robot program, you can either select a robot model number to add or start with a file with no existing robot if you just want to work on development and do not have an exact model number yet. &nbsp;</p>



<p class="wp-block-paragraph">To start in online mode, you need to be physically connected to a controller either by Ethernet cable or RS232 cable. You will need either the IP address or the RS232C connection information for the controller. You can pull all the data currently on the controller with this method.&nbsp;&nbsp;&nbsp;</p>



<h3 id="h-working-with-a-all-file" class="wp-block-heading">Working With a .All File</h3>



<p class="wp-block-paragraph">To convert an archived .all file to a regular robot program file, click on ‘Tool’ in the tool ribbon, then in the drop-down menu, click on ‘Data Transfer…’&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="388" height="274" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-03.png" alt="RCX-Studio 2020 display window" class="wp-image-39643" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-03.png 388w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-03-300x212.png 300w" sizes="(max-width: 388px) 100vw, 388px" /></figure>



<p class="wp-block-paragraph">Next, in the source file section of the window, select ‘File’ and browse for the location of your .all file. Then, make sure all the data is checked in the ‘Transfer Data’ area, and make sure the boxes directly below are all unchecked. &nbsp;</p>



<p class="wp-block-paragraph">Specifically, if you are looking to download the file back onto the existing robot after making programming changes, DO NOT SKIP the ‘Robot Specific Parameters’ as these include encoder hardware information and other hardware setup information important to the specific robot, which are set up at the factory. In almost all cases, you would want to transfer all the data. Otherwise, there is a risk of OVERWRITING this data on the controller when you download your updated program file to the controller if you didn’t originally transfer it to the controller file. &nbsp;</p>



<p class="wp-block-paragraph">After that, select a blank controller file that you want to put the data in or create a new controller file to store the data, then press ‘OK’.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="376" height="476" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-04.png" alt="RCX-Studio 2020 display window" class="wp-image-39645" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-04.png 376w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-04-237x300.png 237w" sizes="(max-width: 376px) 100vw, 376px" /></figure>



<h2 id="h-program-overview" class="wp-block-heading">Program Overview</h2>



<p class="wp-block-paragraph">For the remainder of this guide, we will review programming and commissioning with the controller file interface. Here is a general overview of the important components of the controller file UI.&nbsp;</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="1024" height="630" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-05-1024x630.png" alt="RCX-Studio 2020 display window" class="wp-image-39646" style="width:900px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-05-1024x630.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-05-300x185.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-05-768x473.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-05-1536x945.png 1536w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-05.png 1560w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Next, we will shift our focus to the ‘Window Tree’. Through the window tree, you can navigate to all the main functions needed for programming and commissioning the robot. We will go through a couple of important items here to get you started.&nbsp;</p>



<h3 id="h-operation-folder" class="wp-block-heading">Operation Folder</h3>



<p class="wp-block-paragraph">This folder includes the following items: Servo, Origin(All), Origin(Selected Robot), Jog, and Point Trace, which are all important for initial commissioning.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="370" height="296" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-06.png" alt="RCX-Studio 2020 display window" class="wp-image-39647" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-06.png 370w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-06-300x240.png 300w" sizes="(max-width: 370px) 100vw, 370px" /></figure>



<h4 id="h-servo" class="wp-block-heading">Servo</h4>



<p class="wp-block-paragraph">Double-clicking on ‘Servo’ brings up the following window.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="260" height="386" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-07.png" alt="RCX-Studio 2020 display window" class="wp-image-39648" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-07.png 260w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-07-202x300.png 202w" sizes="(max-width: 260px) 100vw, 260px" /></figure>



<p class="wp-block-paragraph">Here you can manually turn on and off motor power and free servos for each individual axis. This can be useful if you need to turn off power to manually move the robot by hand during commissioning.&nbsp;&nbsp;</p>



<h4 id="h-origin-all-and-origin-selected-robot" class="wp-block-heading">Origin(All) and Origin(Selected Robot)</h4>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="391" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-08.png" alt="RCX-Studio 2020 display window" class="wp-image-39649" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-08.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-08-300x130.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-08-768x334.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph">Sending a robot to origin will command the robot to move to the origin position of the encoder set at the factory and not a custom user “home” location. This does not need to be done regularly. It only needs to be done if the servos lose track of their current position. &nbsp;</p>



<p class="wp-block-paragraph">Typically, controllers will come with special <a href="https://shop.yrginc.com/ER-17-50-KCA-M53G0-01/" target="_blank" rel="noreferrer noopener">batteries</a> installed to ensure these positions are always remembered, even when the main power supply is off. Since these are factory settings, when there is a need to send the robot to origin, be aware of any objects surrounding the robot to prevent collisions, as it will move each axis directly to the origin location, disregarding any programmed moves.&nbsp;&nbsp;</p>



<h4 id="h-jog" class="wp-block-heading">Jog</h4>



<figure class="wp-block-image size-full"><img decoding="async" width="330" height="696" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-09.png" alt="RCX-Studio 2020 display window" class="wp-image-39650" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-09.png 330w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-09-142x300.png 142w" sizes="(max-width: 330px) 100vw, 330px" /></figure>



<p class="wp-block-paragraph">The jog window is key for teaching positions and commissioning. Here you can select between three jog modes in the ‘Unit’ drop-down: ‘pulse’, ‘mm,’ and ‘tool’, and the buttons will change accordingly to those options. The ‘mm’ setting is millimeters in Cartesian coordinates and is the simplest one to use for general jogging purposes. You can adjust the jogging speed in percentage units and the jogging distance with the ‘Inch Dist.’ field. After changing the value, press &#8220;set&#8221; to apply it. If it hasn’t been set, the value will be highlighted red.&nbsp;&nbsp;&nbsp;</p>



<h4 id="h-point-trace" class="wp-block-heading">Point Trace</h4>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="260" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-10.png" alt="RCX-Studio 2020 display window" class="wp-image-39651" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-10.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-10-300x87.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-10-768x222.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph">The point trace window is used for verifying motions between points that are safe and optimizing robot pathing. Here you can select the type of move (linear, arc, joint), the movement speed, and the point number you want to move to. You can also only move selected joints to a particular point. Press “Trace” to start moving to the current selected point. &nbsp;</p>



<h3 id="h-program-folder" class="wp-block-heading">Program Folder</h3>



<p class="wp-block-paragraph">This is where your main robot program and subroutine/functions will live.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="370" height="410" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-11.png" alt="RCX-Studio 2020 display window" class="wp-image-39652" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-11.png 370w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-11-271x300.png 271w" sizes="(max-width: 370px) 100vw, 370px" /></figure>



<p class="wp-block-paragraph">Double-click ‘New Program’ to create a new program. You can choose from starting with an empty file or one of the templates included. The paper icon with the ‘M’ indicates that it is your main program and will begin executing when you start the robot. To adjust the main program, right-click on the program you want to change to the main and click ‘Setting Main Program’.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="516" height="320" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-12.png" alt="RCX-Studio 2020 display window" class="wp-image-39653" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-12.png 516w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-12-300x186.png 300w" sizes="(max-width: 516px) 100vw, 516px" /></figure>



<p class="wp-block-paragraph">Below is the programming window for a given program. Here you can start, stop, and step through your program. You can also reset the program and have it execute again from the top. When online, clicking on the yellow ‘Exec Line’ button will toggle the view to follow which line is currently being executed.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="138" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-13.png" alt="RCX-Studio 2020 display window" class="wp-image-39654" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-13.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-13-300x46.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-13-768x118.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph">For specific programming syntax information, refer to the <a href="https://www.yrginc.com/Catalog/PDF/CurrentManuals/CONTROLLER_E/RCX-PRO_E_V5.02.pdf" target="_blank" rel="noreferrer noopener">Programming Manual</a>. The remaining items in the program folder are not essential to review in a quick start guide, so we will move on.&nbsp;&nbsp;</p>



<h3 id="h-coordinate-system-folder" class="wp-block-heading">Coordinate System Folder</h3>



<p class="wp-block-paragraph">This is where your point definitions are stored. Double-click on ‘Point’ to bring up the Point window.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="384" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-14.png" alt="RCX-Studio 2020 display window" class="wp-image-39655" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-14.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-14-300x128.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-14-768x328.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph">In RCX-Studio, points can be referenced in the program as the point number, ex. P5, or their Name, ex. ‘NavHome’. Refer to the manual mentioned in the programming section for the exact syntax. </p>



<p class="wp-block-paragraph">The Point window is also where you can teach and modify points manually. To teach a point, move the robot to the point you’d like to teach and then click on a point number where you would like to save the data and press ‘Teach(mm)’ to teach with Cartesian data or ‘Teach(pls)’ with encoder pulse data. You can manually modify any saved point by clicking on the cell with data you’d like to modify, changing the data, and then pressing ‘Enter’ on your keyboard. You can also add any additional helpful comments in the ‘Comment’ column.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">The remaining items in the Coordinate System folder are not essential to review in a quick start guide, so we will move on.&nbsp;&nbsp;&nbsp;</p>



<h3 id="h-parameter-folder" class="wp-block-heading">Parameter Folder</h3>



<p class="wp-block-paragraph">The parameter folder holds robot-specific hardware settings and general settings related to the specific selected robot.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="380" height="456" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-15.png" alt="RCX-Studio 2020 display window" class="wp-image-39656" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-15.png 380w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-15-250x300.png 250w" sizes="(max-width: 380px) 100vw, 380px" /></figure>



<p class="wp-block-paragraph">These are the ‘Robot Specific Parameters’ mentioned earlier in the guide to not skip during the data transfer. &nbsp;</p>



<p class="wp-block-paragraph">In the Controller window, note that there are some execution and program settings that you can modify. Click on them to display their descriptions. &nbsp;</p>



<p class="wp-block-paragraph">You can view which option communication boards are installed in your controller to communicate with the PLC. Locate them in the Board Enable/Parameter windows under the Option drop-down.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="671" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-16.png" alt="RCX-Studio 2020 display window" class="wp-image-39657" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-16.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-16-300x224.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-16-768x573.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="395" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-17.png" alt="RCX-Studio 2020 display window" class="wp-image-39658" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-17.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-17-300x132.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-17-768x337.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="272" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-18.png" alt="RCX-Studio 2020 display window" class="wp-image-39659" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-18.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-18-300x91.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-18-768x232.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<h3 id="h-system-folder" class="wp-block-heading">System Folder</h3>



<p class="wp-block-paragraph">The system folder includes a couple of troubleshooting items that are helpful during commissioning, including ‘Warning History’ and ‘Alarm History’. You can also click on ‘System Check’ to see if the overall system is ok.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="336" height="210" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-19.png" alt="" class="wp-image-39660" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-19.png 336w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-19-300x188.png 300w" sizes="(max-width: 336px) 100vw, 336px" /></figure>



<h3 id="h-monitor-folder" class="wp-block-heading">Monitor Folder</h3>



<p class="wp-block-paragraph">This folder is very important for commissioning, as it contains access to all monitoring windows for the robot’s current position and the controller IO. We will only focus on the main ones DI, DO, SI, SO, SIW, and SOW. We will also review a couple of significant IO points in this section.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="360" height="510" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-20.png" alt="RCX-Studio 2020 display window" class="wp-image-39661" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-20.png 360w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-20-212x300.png 212w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<h4 id="h-current-position" class="wp-block-heading">Current Position</h4>



<p class="wp-block-paragraph">Clicking on ‘Current Position’ will open the current position window, where you can view the robot’s current position in Cartesian coordinates and encoder pulse values.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="112" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-21.png" alt="RCX-Studio 2020 display window" class="wp-image-39662" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-21.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-21-300x37.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-21-768x96.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<h4 id="h-di-do" class="wp-block-heading">DI/DO</h4>



<p class="wp-block-paragraph">These windows show the current state and available digital inputs and outputs going to the controller. A bright green LED means it is on/true, and a dark green LED means it is off/false.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="554" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-22-1024x554.png" alt="RCX-Studio 2020 display window" class="wp-image-39663" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-22-1024x554.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-22-300x162.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-22-768x415.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-22-1536x831.png 1536w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-22.png 1646w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Within a program, you can reference these points using the system name (e.g., DO0(0)) or a user-given name if allowed.&nbsp;&nbsp;</p>



<h4 id="h-si-so" class="wp-block-heading">SI/SO</h4>



<p class="wp-block-paragraph">These are IO points coming over Ethernet or other communication protocols based on the optional communication boards installed in your controller. These are typically used to communicate with the PLC.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Here is the default list of SI:&nbsp;</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="256" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-23-1024x256.png" alt="RCX-Studio 2020 display window" class="wp-image-39664" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-23-1024x256.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-23-300x75.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-23-768x192.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-23-1536x384.png 1536w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-23.png 1560w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The first 16 bits are reserved and have a dedicated purpose based on their comments. A couple of important ones include the following:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li>SI0(0) – E-Stop input for the robot, ON= E-Stop OK&nbsp;</li>



<li>SI0(1) – Command to turn on robot servos&nbsp;</li>



<li>SI0(6) – Stop robot program execution, OFF = Stop Active, ON = Stop Inactive&nbsp;</li>



<li>SI1(2) – Start automatic robot program execution&nbsp;</li>



<li>SI1(5) – Resets the robot program and forces it to execute from the first line (useful for recovery during handshakes)&nbsp;</li>



<li>SI1(6) – Robot controller alarm reset for any controller alarms&nbsp;</li>
</ul>



<p class="wp-block-paragraph">The remaining can be named and used for custom functionality.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Here is the default list of SO:&nbsp;</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="276" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-24-1024x276.png" alt="RCX-Studio 2020 display window" class="wp-image-39665" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-24-1024x276.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-24-300x81.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-24-768x207.png 768w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-24-1536x414.png 1536w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-24.png 1560w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The first 16 bits are reserved and are used to report a status based on their comments. The remaining can be named and used for custom functionality.&nbsp;&nbsp;</p>



<h4 id="h-siw-sow" class="wp-block-heading">SIW/SOW</h4>



<p class="wp-block-paragraph">These are registers used to send words between the robot controller and the PLC. These cannot be renamed by the user. You can display their values in Hex or Dec with the radio buttons at the top. You can reference these IO in the robot program using their system name (e.g., SIW(0), SIW(4)). You can find more information on programming syntax in the programming manual linked above in the Programming Folder section.&nbsp;&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="916" height="480" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-25.png" alt="RCX-Studio 2020 display window" class="wp-image-39666" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-25.png 916w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-25-300x157.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-25-768x402.png 768w" sizes="(max-width: 916px) 100vw, 916px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="890" height="446" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-26.png" alt="RCX-Studio 2020 display window" class="wp-image-39667" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-26.png 890w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-26-300x150.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/RCX-Studio-2020-26-768x385.png 768w" sizes="(max-width: 890px) 100vw, 890px" /></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"><strong>Elevate Your Next Robot Programming Project.</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">From robot programming to full system integration, we deliver custom <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/robotics-engineering/" data-type="page" data-id="524">robotics</a> solutions. Learn more on how DMC&#8217;s <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" id="420">Automation</a> experts can help get you started.</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/39521/a-quick-start-guide-to-robot-programming-with-rcx-studio-2020/">A Quick Start Guide to Robot Programming with RCX-Studio 2020</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Setting Up Basic User Profiles and Login for WinCC Unified Runtime</title>
		<link>https://static.dmcinfo.com/blog/16495/setting-up-basic-user-profiles-and-login-for-wincc-unified-runtime/</link>
		
		<dc:creator><![CDATA[Wenjing Deng]]></dc:creator>
		<pubDate>Tue, 26 Mar 2024 18:31:39 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Siemens]]></category>
		<category><![CDATA[WinCC Unified]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/16495/setting-up-basic-user-profiles-and-login-for-wincc-unified-runtime/</guid>

					<description><![CDATA[<p>In today&#8217;s digital era, ensuring the security of your industrial automation systems is crucial. User login systems play a vital security role&#160;by controlling who can access sensitive data and manage processes. Siemens TIA Portal V18 and WinCC Unified offer effective solutions for setting up user logins, increasing the safety of your operations as a result. [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/16495/setting-up-basic-user-profiles-and-login-for-wincc-unified-runtime/">Setting Up Basic User Profiles and Login for WinCC Unified Runtime</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In today&#8217;s digital era, ensuring the security of your <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence">industrial automation systems</a> is crucial. User login systems play a vital security role&nbsp;by controlling who can access sensitive data and manage processes.</p>



<p class="wp-block-paragraph">Siemens TIA Portal V18 and WinCC Unified offer effective solutions for setting up user logins, increasing the safety of your operations as a result. In this guide, we’ll walk you through the process of adding local users, runtime rights, and protecting your HMI features in a few simple steps.</p>



<h2 id="h-setting-up-users-and-rights" class="wp-block-heading">Setting Up Users and Rights</h2>



<p class="wp-block-paragraph">The first step is to set up the user profiles for your project. You can set specific rules for password complexity under ‘Security settings’ &gt; ‘Settings.’</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/security-settings_1.png" alt="security settings window"/></figure>



<p class="wp-block-paragraph">Next, navigate to ‘Security settings’ and then to ‘Users and roles.’</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/users-and-roles_1.png" alt=""/></figure>



<p class="wp-block-paragraph">In the ‘Users’ tab you can create a new local user profile. To do this, you will need to click on ‘&lt;Add New User&gt;’ and then ‘Add new local user.’&nbsp;Next, you can enter in a ‘User name’ and ‘Password.’ Here you can also define a timeout, which will automatically log the user out after a certain amount of time. This is also where you will assign roles to each listed user, but we&#8217;ll&nbsp;return to this after setting up some roles.</p>



<h2 id="h-assigning-roles-nbsp" class="wp-block-heading">Assigning Roles&nbsp;</h2>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/users-and-roles-window-2_1.png" alt="Users and roles settings "/></figure>



<p class="wp-block-paragraph">Next, let’s go over ‘Roles’ and ‘Rights.’&nbsp;Each role is comprised of a set of selected rights. ‘Runtime rights’ are what we will reference while programming protected or user restricted features on the HMI.</p>



<p class="wp-block-paragraph">To create and name your own custom rights, navigate to the ‘Roles’ tab and then to the ‘User-specific runtime rights.’&nbsp;Here you can create new rights with custom names and descriptions.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/user-specific-runtime-rights_1.png" alt="user specific runtime rights settings window"/></figure>



<p class="wp-block-paragraph">As an example, I have created 4 levels of rights and users as shown above: ‘Admin,’&nbsp;‘Maintenance,’&nbsp;’Technician,’ and ‘Operator.’&nbsp;Admin will have the highest level of rights, followed by Maintenance, then Technician, and finally Operator with the lowest level of rights.</p>



<p class="wp-block-paragraph">To set up the roles for our example setup, return to the ‘Runtime rights’ tab, and then click on ‘Operator’ in the Roles window. This screen will show the HMIs and PLCs available in the project.</p>



<p class="wp-block-paragraph">For this example, we will set up the runtime rights for the WinCC Unified SCADA device by clicking on the drop down, selecting the device, and then selecting the custom runtime right we created earlier: ‘Operator Rights.’&nbsp;Since ‘Operator’ has the lowest level of rights, we will only check ‘Operator Rights’ for the ‘Operator’ role.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/operator-rights_1.png" alt="Settings window with 'operator rights' and 'lab hmi' underlined in red"/></figure>



<p class="wp-block-paragraph">For the other 3 roles, we will assign the rights as shown below:</p>



<p class="wp-block-paragraph"><strong>Technician</strong> – Operator Rights, Technician Rights</p>



<p class="wp-block-paragraph"><strong>Maintenance</strong> – Operator Rights, Technician Rights, Maintenance Rights</p>



<p class="wp-block-paragraph"><strong>Admin </strong>– Operator Rights, Technician Rights, Maintenance Rights, Admin Rights</p>



<p class="wp-block-paragraph">When set up this way, a feature that needs to be protected by a user login can be sorted according to the permission hierarchy rules we defined earlier.</p>



<p class="wp-block-paragraph">The ‘Admin’ user can access anything protected by one of our custom rights, but the ‘Operator’ user can only access those protected by ‘Operator Rights.’&nbsp;There are&nbsp;many other system defined rights available in which you can also assign to your custom roles if needed.</p>



<h2 id="h-creating-user-restricted-hmi-features" class="wp-block-heading">Creating User-Restricted HMI Features</h2>



<p class="wp-block-paragraph">Next, we will go through how to reference these roles while programming protected features on the HMI. In the example below, we want to restrict the ability to interact with the I/O Field to the Admin user. Navigate to the ‘Security’ dropdown and select ‘Admin Rights’ for the Authorization field.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/io-field-admin-rights_1.png" alt="IO field settings window with 'Admin Rights' circled in red"/></figure>



<p class="wp-block-paragraph">This will limit interaction with this IO Field to the Admin user only. If you wanted a different level of access, you could choose from any of the other rights available to tailor the access to your needs. This setting is available for most other objects available in WinCC Unified. For anything that you want to restrict with a user login, you can set an Authorization level here.</p>



<h2 id="h-downloading-user-information-to-hmi" class="wp-block-heading">Downloading User information to HMI</h2>



<p class="wp-block-paragraph">After you’ve made user or role changes it is important to set the dropdown below to &#8216;Reset to start values.&#8217;&nbsp;This ensures that your changes get updated in runtime.</p>



<p class="wp-block-paragraph">&nbsp;</p>



<p class="wp-block-paragraph">That’s it! Your basic user login setup is complete. By following the steps outlined in this guide, you can establish user authentication mechanisms tailored to your equipment’s requirements.</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>Control HMI Access with WinCC Unified User Roles</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">Explore 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/hmi-and-scada-programming/wincc-7-programming/" data-type="page" data-id="518">WinCC Programming</a> user profiles, role-based permissions, and protected HMI functionality.</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/16495/setting-up-basic-user-profiles-and-login-for-wincc-unified-runtime/">Setting Up Basic User Profiles and Login for WinCC Unified Runtime</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Integrating Mitsubishi GX Works3 with Ignition Using the Ignition Mitsubishi TCP Driver</title>
		<link>https://static.dmcinfo.com/blog/16599/integrating-mitsubishi-gx-works3-with-ignition-using-the-ignition-mitsubishi-tcp-driver/</link>
		
		<dc:creator><![CDATA[Wenjing Deng]]></dc:creator>
		<pubDate>Tue, 13 Feb 2024 09:22:48 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Ignition]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[ignition]]></category>
		<category><![CDATA[Mitsubishi GX Works3]]></category>
		<category><![CDATA[Mitsubishi PLC]]></category>
		<category><![CDATA[Mitsubishi TCP Driver]]></category>
		<category><![CDATA[SCADA System]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/16599/integrating-mitsubishi-gx-works3-with-ignition-using-the-ignition-mitsubishi-tcp-driver/</guid>

					<description><![CDATA[<p>Mitsubishi GX Works3 is a platform for programming Mitsubishi PLCs,&#160;and it is possible to directly integrate the PLC&#8217;s tags into Ignition with the recent release of the Ignition Mitsubishi driver. Ignition offers native support for Mitsubishi devices through its new Mitsubishi TCP Driver, allowing direct communication between the PLC and the SCADA system. Ignition has [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/16599/integrating-mitsubishi-gx-works3-with-ignition-using-the-ignition-mitsubishi-tcp-driver/">Integrating Mitsubishi GX Works3 with Ignition Using the Ignition Mitsubishi TCP Driver</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Mitsubishi GX Works3 is a platform for programming Mitsubishi PLCs,&nbsp;and it is possible to directly integrate the PLC&#8217;s tags into Ignition with the recent release of the Ignition Mitsubishi driver.</p>



<p class="wp-block-paragraph">Ignition offers native support for Mitsubishi devices through its new Mitsubishi TCP Driver, allowing direct communication between the PLC and the SCADA system. Ignition has a <a href="https://docs.inductiveautomation.com/docs/8.1/ignition-modules/opc-ua/opc-ua-drivers/mitsubishi-tcp-driver" target="_blank">published guide</a> for setting up connection from the Ignition side.&nbsp;</p>



<p class="wp-block-paragraph">In this blog we will focus on the configuration of a Mitsubishi PLC project in Gx Works3 to connect to an Ignition server as well as some basic troubleshooting tips. Additionally, we will go over the concept of a useful tool DMC developed DMC&nbsp;to quickly convert assigned labels within global label lists to Ignition addresses in a .csv file and that can be directly imported into the Ignition Gateway.&nbsp;</p>



<h2 id="h-configuring-a-mitsubishi-plc-for-connecting-with-ignition" class="wp-block-heading">Configuring a Mitsubishi PLC for Connecting With Ignition:</h2>



<p class="wp-block-paragraph">After you’ve added your PLC to a Gx Works3 project, navigate to the Module Parameter of your PLC.&nbsp;</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">In the “Own Node Settings,”&nbsp;first make sure your PLC is on the same network as your Ignition Gateway, and then make the following changes:</p>



<ol class="wp-block-list">
<li>Enable/Disable Online Change &gt; Enable All (SLMP)</li>



<li>Communication Data Code &gt; Binary</li>
</ol>



<p class="wp-block-paragraph">Then press “Apply” at the bottom right corner.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" alt="Own Node Settings Enable All Binary" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/own-node-settings-enable-all-binary-2.png" width="900px" /></figure>



<p class="wp-block-paragraph">Next, double click on the “&lt;Detailed Settings&gt;.”</p>



<figure class="wp-block-image"><img decoding="async" alt="Own Node Settings Detailed Settings " src="https://static.dmcinfo.com/wp-content/uploads/2025/05/own-node-settings-detailed-settings-3.png" width="900px" /></figure>



<p class="wp-block-paragraph">A new window will pop-up labeled “Ethernet Configuration.”&nbsp;Navigate to the right of the window and click on “Ethernet Device (General).”&nbsp;Next, click and drag a “SLMP Connection Module” to the table portion of the window. A new SLMP Connection Module will be added.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" alt="Ethernet Configuration Built-in Ethernet Port" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/ethernet-configuration-built-in-ethernet-port-4.png" width="900px" /></figure>



<p class="wp-block-paragraph">Set the Protocol to “TCP” and then set the Port Number to the same port number that was chosen in the Ignition Mitsubishi Driver.&nbsp;</p>



<p class="wp-block-paragraph">Press “Close with Reflecting the Setting” at tool bar located at the top of the window. Finally, write the new configuration changes to the PLC and do a power cycle.</p>



<h2 id="h-troubleshooting-connection-issues-nbsp" class="wp-block-heading">Troubleshooting Connection Issues:&nbsp;</h2>



<p class="wp-block-paragraph">In the tool bar at the top, navigate to “Diagnostics” &gt; “Ethernet Diagnostics” to troubleshoot any connection issues. Here you can see any error codes or statuses. You need to be connected to the PLC to use this.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" alt="Module Parameter Ethernet Diagnostics" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/module-parameter-ethernet-diagnostics-5.png" width="900px" /></figure>



<h2 id="h-converting-gx-works3-global-label-lists-to-ignition-addresses-nbsp" class="wp-block-heading">Converting Gx Works3 Global Label Lists to Ignition Addresses:&nbsp;</h2>



<p class="wp-block-paragraph">Quick reminder that, for your tags to be seen by your Ignition project, they need to have device assignments. Here is an example where the labels are assigned to D devices:&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" alt="Assign Device Label" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/assign-device-lable-6-sanitized.png" width="900px" /></figure>



<p class="wp-block-paragraph">For the Ignition side, you can find the formatting for these addresses in the “Determining Addresses” section in the Ignition document linked at the top of this blog.</p>



<figure class="wp-block-image"><img decoding="async" alt="Determining Addresses Section in the Ignition document " src="https://static.dmcinfo.com/wp-content/uploads/2025/05/determining-addresses-8.png" width="900px" /></figure>



<p class="wp-block-paragraph">If your project has a lot of tags, it can be worthwhile&nbsp;to create an automated script/program to convert the label list exports from Gx Works3 to Ignition addresses and compile them into one .csv file to import into the Mitsubishi driver on the Ignition gateway. This will be much faster than manually adding in one tag at a time.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" alt="Device Connections/Mitsubishi PLC Load Configuration" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/device-connections-mitsubishi-plc-load-configuration-7-sanitized.png" width="900px" /></figure>



<p class="wp-block-paragraph">You can choose to use one .csv file to keep track of all your PLC tags or append new .csv files each time you add new tags.&nbsp;</p>



<p class="wp-block-paragraph">On a recent DMC project, we designed a <a href="/services/application-development/pc-application-development/python-development-services">Python</a> tool to help us automate this task. Our Python tool would read the exported .xml files from Gx Works3, pull out the tag names, data types, and assigned device numbers, and then use that information to construct the Ignition addresses.&nbsp;</p>



<p class="wp-block-paragraph">Our tool was&nbsp;custom made for a particular&nbsp;project, but here is the overall workflow for our tool for guidance&nbsp;if you are looking to create your own:</p>



<ol class="wp-block-list">
<li>Right click on HMI tag lists from Gx Works3 project and export as XML.</li>
</ol>



<p class="wp-block-paragraph"><p style="text-align: center;" width="657px"></p></p>



<p class="wp-block-paragraph"><p style="margin-left: 40px;">2 . Move them into the designated folder where our Python script is accessing unprocessed tag lists.</p></p>



<p class="wp-block-paragraph"><p style="margin-left: 40px;">3. Run Python script.</p></p>



<p class="wp-block-paragraph"><p style="margin-left: 40px;">4. Grab converted .csv file and import (without appending) into Mitsubishi Driver in Ignition gateway.</p></p>



<p class="wp-block-paragraph"><p style="margin-left: 40px;">5. Repeat process if new tags/lists were added to the unprocessed tag folder.</p></p>



<p class="wp-block-paragraph">In this project, we changed the mapping for our tags often during development due to changing scope/issues we were encountering. It was beneficial for us to re-run our Python conversion script on all the .xml HMI tag list files and import a new converted .csv file each time instead of appending an additional file. It was easier to keep track of changes and to update any tag mappings that might have changed as we just needed to export and overwrite the same tag list in the unprocessed tag list folder.&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>Connect Mitsubishi PLCs Directly to Ignition</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">Explore our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> expertise in Mitsubishi GX Works3, Ignition SCADA and TCP driver configuration. Learn more about our capabilities with <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/" data-type="page" data-id="441">PLC programming</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/16599/integrating-mitsubishi-gx-works3-with-ignition-using-the-ignition-mitsubishi-tcp-driver/">Integrating Mitsubishi GX Works3 with Ignition Using the Ignition Mitsubishi TCP Driver</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Starting a Project in GX Works3: A Beginner&#8217;s Guide</title>
		<link>https://static.dmcinfo.com/blog/16810/starting-a-project-in-gx-works3-a-beginners-guide/</link>
		
		<dc:creator><![CDATA[Wenjing Deng]]></dc:creator>
		<pubDate>Mon, 08 Jan 2024 13:14:24 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Mitsubishi PLC]]></category>
		<category><![CDATA[PLC Programming]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/16810/starting-a-project-in-gx-works3-a-beginners-guide/</guid>

					<description><![CDATA[<p>Embarking on a new project can be both exhilarating and overwhelming, especially when diving into the realm of programmable logic controllers (PLCs). If you&#8217;ve chosen GX Works3 as your development environment, you&#8217;re in for a treat. In this blog, we&#8217;ll guide you through the initial steps of starting a project in GX Works3, from installation [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/16810/starting-a-project-in-gx-works3-a-beginners-guide/">Starting a Project in GX Works3: A Beginner&#8217;s Guide</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Embarking on a new project can be both exhilarating and overwhelming, especially when diving into the realm of programmable logic controllers (PLCs).</p>



<p class="wp-block-paragraph">If you&#8217;ve chosen GX Works3 as your development environment, you&#8217;re in for a treat. In this blog, we&#8217;ll guide you through the initial steps of starting a project in GX Works3, from installation to writing your first program, setting you on the path to automation success!</p>



<p class="wp-block-paragraph"><u><a id="Table of Contents" name="Table of Contents"></a>Table of Contents:</u></p>



<ol class="wp-block-list">
<li><a href="#1. Installation">Installation</a></li>



<li><a href="#2. Importing CSP/CSPP Files for Devices">Importing CSP/CSPP Files for Devices</a></li>



<li><a href="#3. Creating a New Project">Creating a New Project</a></li>



<li><a href="#4. Navigating the Interface">Navigating the Interface</a></li>



<li><a href="#5. Hardware Configuration">Hardware Configuration</a></li>



<li><a href="#6. Writing Your First Program">Writing Your First Program</a></li>



<li><a href="#7. Simulation and Debugging">Simulation and Debugging</a></li>



<li><a href="#8. Final Thoughts">Final Thoughts</a></li>
</ol>



<h2 id="h-1-installation" class="wp-block-heading"><u><a id="1. Installation" name="1. Installation"></a>1. Installation</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<h5 id="h-system-requirements" class="wp-block-heading">System Requirements</h5>



<p class="wp-block-paragraph">Before installing GX Works3, make sure that your system meets the following requirements:</p>



<ul class="wp-block-list">
<li>Windows 7 or later</li>



<li>At least 2 GB RAM</li>



<li>5 GB of free disk space</li>
</ul>



<p class="wp-block-paragraph"><strong>Before you can dive into creating a project, ensure that GX Works3 is installed on your system. Follow the installation wizard&#8217;s prompts&nbsp;and, once complete, launch the software.</strong></p>



<h2 id="h-2-importing-csp-cspp-files-for-devices" class="wp-block-heading"><u><a id="2. Importing CSP/CSPP Files for Devices" name="2. Importing CSP/CSPP Files for Devices"></a>2. Importing CSP/CSPP Files for Devices</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">CSP/CSPP files are the Mitsubishi equivalent of ‘EDS’ files (like in Rockwell). These files are usually provided on the device manufacturers website.</p>



<p class="wp-block-paragraph">Open GX Works3. <strong>Do not open a project. If you have a project open, you must close it.</strong></p>



<p class="wp-block-paragraph">In the top menu bar, click “Tool,”&nbsp;then “Profile Management,” and then “Register.”&nbsp;Select the files you want to import and then “Register.”</p>



<figure class="wp-block-image"><img decoding="async" alt="MELSOFT GX Works3 Profile Mangement" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-1-profile-management.png" width="900px" /></figure>



<h2 id="h-3-creating-a-new-project" class="wp-block-heading"><u><a id="3. Creating a New Project" name="3. Creating a New Project"></a>3. Creating a New Project</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<h5 id="h-steps-to-create-a-new-project" class="wp-block-heading">Steps to Create a New Project</h5>



<p class="wp-block-paragraph">Click on “File” and then “New Project,”&nbsp;or on the icon circled below:</p>



<figure class="wp-block-image"><img decoding="async" alt="MELSOFT GX Works3 Navigation" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-2-navigation.png" width="900px" /></figure>



<p class="wp-block-paragraph">Choose the type and series of PLC you&#8217;re using. In our project we used an R08SF. <strong>Most of the programming will be done in ladder, so leave the Program Language as “Ladder.”</strong></p>



<figure class="wp-block-image"><img decoding="async" alt="New Series R08SF" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-3-new-series-type.png" width="900px" /></figure>



<p class="wp-block-paragraph">Name your project and select a storage location.</p>



<p class="wp-block-paragraph">Click “Finish.”</p>



<p class="wp-block-paragraph">Next, you will be prompted to set up a new user.</p>



<p class="wp-block-paragraph">You will need to re-enter your chosen username and password every time you open the program and when you go online with the PLC to read or write for the first time in an online session, so choose your username and password wisely.</p>



<p class="wp-block-paragraph">Note: You can go back to change this later if needed.</p>



<p class="wp-block-paragraph">After this, you will be prompted to name your project. Then, your new project will open.</p>



<figure class="wp-block-image"><img decoding="async" alt="Add New User" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-4-add-new-user.png" width="900px" /></figure>



<h2 id="h-4-navigating-the-interface" class="wp-block-heading"><u><a id="4. Navigating the Interface" name="4. Navigating the Interface"></a>4. Navigating the Interface</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">Here are some important areas of the GX Works3 interface:</p>



<h5 id="h-navigation" class="wp-block-heading">Navigation</h5>



<p class="wp-block-paragraph">This is where you&#8217;ll find all the elements related to your project&nbsp;such as programs, function blocks, devices, labels (AKA Tags), and parameters (for hardware configuration).</p>



<p class="wp-block-paragraph"><p style="text-align: center;" width="500px"></p></p>



<h5 id="h-workspace" class="wp-block-heading">Workspace</h5>



<p class="wp-block-paragraph">This is where you&#8217;ll write and edit your code</p>



<figure class="wp-block-image"><img decoding="async" alt="2 Step Write 1 Workspace" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-6-2-step-write-1.png" width="900px" /></figure>



<h5 id="h-output-window" class="wp-block-heading">Output Window</h5>



<p class="wp-block-paragraph">This window shows the output of compile-time or run-time actions. There are some other tabs here that are helpful for online debugging, but we will look at those later on.</p>



<figure class="wp-block-image"><img decoding="async" alt="Output" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-7-output.png" width="900px" /></figure>



<h2 id="h-5-hardware-configuration" class="wp-block-heading"><u><a id="5. Hardware Configuration" name="5. Hardware Configuration"></a>5. Hardware Configuration</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<h5 id="h-adding-devices-and-modules" class="wp-block-heading">Adding Devices and Modules</h5>



<p class="wp-block-paragraph">To add devices and modules:</p>



<p class="wp-block-paragraph">Right-click on the “Module Information” under Parameter in the Navigation.</p>



<p class="wp-block-paragraph">Next, select “Add Module,” and choose the specific device or module you&#8217;re working with.</p>



<p class="wp-block-paragraph">It is ok to leave&nbsp;“Start I/O No. Specification” as “Not Set” if you want GX Works3 to handle assigning these values automatically based on slot number.</p>



<p class="wp-block-paragraph">If there are specific values you want a module to start at, you can choose &#8216;set&#8217; and pick your Start I/O.</p>



<p class="wp-block-paragraph"><p style="text-align: center;">&nbsp;</p></p>



<p class="wp-block-paragraph">For this example project, we will choose a digital input card RX42C4 in slot 1 and a digital output card RY42PT1P in slot 2 to start.</p>



<p class="wp-block-paragraph">In addition, the R08SFCPU requires an&nbsp;R6SFM, a&nbsp;safety function module, which we will put in slot 0 here.</p>



<h3 id="h-plc-configuration-and-setup" class="wp-block-heading">PLC Configuration and Setup</h3>



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



<p class="wp-block-paragraph">Double click on “Module Parameter” under R08SFCPU or your chosen PLC series. This will open the screen below:</p>



<figure class="wp-block-image"><img decoding="async" alt="Setting Item Explanation" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-10-setting-item-explanation.png" width="900px" /></figure>



<p class="wp-block-paragraph">Here you can set the IP Address information for your PLC. Press “Apply” on the bottom right side of the screen to save.</p>



<h4 id="h-cpu-module-operation-setting-at-error-detection" class="wp-block-heading">CPU Module Operation Setting at Error Detection</h4>



<p class="wp-block-paragraph">While debugging programs later, if any of your programs encounter an operation error (ex. array index out of bounds, invalid function input data when using direct addresses), the PLC will default to a “stop” error state: which requires a full reset of the PLC to clear (sometimes includes a power cycle if there is a safety module involved).</p>



<p class="wp-block-paragraph">This can be very annoying when debugging and testing code; however, there is a setting that you can change that allows the PLC to continue running with the operation error allowing you to track down the error, make an adjustment, and continue testing.</p>



<p class="wp-block-paragraph">Double click on CPU Parameter under R08SFCPU or your chosen PLC series. This will pull up the parameter window.</p>



<p class="wp-block-paragraph">In the “Setting Item List,”&nbsp;click on “RAS Setting,” and then navigate to the “Operation Error” line item in the window on the right.<br>
&nbsp;<br>
The default setting is “Stop.”&nbsp;Click on the drop down and change it to “Continue” to prevent the PLC from stopping. Click “Apply” on the bottom right corner before exiting this tab.</p>



<figure class="wp-block-image"><img decoding="async" alt="Setting Item List" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-11-setting-item-list.png" width="900px" /></figure>



<p class="wp-block-paragraph">There are a couple of other types of execution errors here that can also be set to “Continue”&nbsp;if desired. After testing and debugging, remember to switch these settings back to “stop.”</p>



<h5 id="h-timer-setup" class="wp-block-heading">Timer Setup</h5>



<p class="wp-block-paragraph">Double click on CPU Parameter under R08SFCPU or your chosen PLC series. This will pull up the parameter window.</p>



<p class="wp-block-paragraph">In the “Setting Item List,”&nbsp;click on the “Operation Related Setting.”</p>



<p class="wp-block-paragraph">This will pull up the “Timer Limit Setting,” which controls the units that each of the three timer instructions:&nbsp;OUTL, OUTH, and OUTHS.&nbsp;</p>



<p class="wp-block-paragraph">Note: We typically set one of these to 1ms, so it is easier to keep track of how long timers are.</p>



<figure class="wp-block-image"><img decoding="async" alt="CPU Parameter" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-12-cpu-parameter.png" width="900px" /></figure>



<figure class="wp-block-image"><img decoding="async" alt="Point OUT OUTH OUTHS" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-13-out-outh-ouths.png" width="900px" /></figure>



<h4 id="h-labels-data-types-and-memory-address-mapping" class="wp-block-heading">Labels, Data Types, and Memory Address Mapping</h4>



<p class="wp-block-paragraph">Labels are what you use for your program variables. They can be defined locally in a program or function and only accessible in that particular program or function, or they can be defined globally and accessed anywhere.&nbsp;</p>



<p class="wp-block-paragraph">They are equivalent to “tags” in a Rockwell PLC.</p>



<p class="wp-block-paragraph"><strong>You can create multiple global label lists with different names, but there is no way to differentiate which global label list a global label is defined in. Each program/function can only have one local label list.</strong></p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Here is a helpful table showing the available data types for labels:</p>



<figure class="wp-block-image"><img decoding="async" alt="Data Type Description Value Range" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-15-data-type-description-value-range.png" width="900px" /></figure>



<p class="wp-block-paragraph">In Gx Works3, you can choose to assign memory addresses to your labels explicitly or let Gx Works automatically assign them when converting your program.</p>



<p class="wp-block-paragraph"><br>
Below are the commonly used memory addresses available in Gx Works3:</p>



<ul class="wp-block-list">
<li>X: Input
 
 
<ul class="wp-block-list">
<li>Inputs coming to the PLC through any devices or modules will be mapped to the X device addresses.</li>
</ul>
</li>



<li>Y: Outputs
 
 
<ul class="wp-block-list">
<li>Outputs being sent&nbsp;from the PLC to any devices will be mapped through the Y device addresses.</li>
</ul>
</li>



<li>M: Internal Relay
 
 
<ul class="wp-block-list">
<li>These are bits internal to the PLC. These are similar to memory bits in a Siemens PLC.</li>
</ul>
</li>



<li>D: Internal Word
 
 
<ul class="wp-block-list">
<li>These are words internal to the PLC.</li>
</ul>
</li>
</ul>



<figure class="wp-block-image"><img decoding="async" alt="Setting Item Device" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Mitsubishi-16-setting-item-device.png" width="900px" /></figure>



<p class="wp-block-paragraph">Although you can reference device addresses directly in your program as normally open/closed contacts, outputs, etc., <strong>it is best practice to define helpfully named labels and use those in your program instead.</strong></p>



<p class="wp-block-paragraph">This makes it significantly easier to read and follow along whether you are revisiting your program at a later date or if another programmer is helping review your program.</p>



<figure class="wp-block-image"><img decoding="async" alt="Filter Output 1 Input 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Mitsubishi-17-filter-output-1-input-1.png" width="900px" /></figure>



<p class="wp-block-paragraph"><strong>One more thing to keep in mind is that, if you do wish to assign device addresses to any of your labels, you will need to keep track of how many registers each data type will take up.</strong></p>



<p class="wp-block-paragraph">For example, if you assign a float/real label a device address of D1000, since a float is 32 bits long, it will take up registers D1000 and D1001. Gx Works3 will not tell you explicitly that this is happening, so it is up to you to keep track and avoid&nbsp;unintentionally double assigning device addresses.</p>



<h2 id="h-6-writing-your-first-program" class="wp-block-heading"><u><a id="6. Writing Your First Program" name="6. Writing Your First Program"></a>6. Writing Your First Program</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">Now that you&#8217;re familiar with the interface, it’s time to write some code.</p>



<p class="wp-block-paragraph">First, we can start by adding a normal scan program.</p>



<p class="wp-block-paragraph">Note: We also have the option of adding other types of programs, if desired, such as&nbsp;‘Initial,’&nbsp;‘Fixed Scan,’&nbsp;‘Event,’&nbsp;etc. Right clicking on any of the other options under the ‘Program’ tree will allow you to add new data to those types of programs.</p>



<p class="wp-block-paragraph">In this blog we’ll cover the basics of ladder since that is the most frequently used.</p>



<p class="wp-block-paragraph">Right-click on the “MAIN” under the “SCAN” dropdown in the Navigation and select “Add New Data.”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">A “New Data” window will pop up. Here you can name your program and choose the language (ladder, ST, SFC, FBD/LD).</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">This will open the Local Label list and Program Body for the new program. You can define any program specific labels in the Local Label List before starting to write the program.</p>



<p class="wp-block-paragraph">Alternatively, you can define your labels as your program as well. If you enter in label name that isn’t defined, it will open the dialogue window below, and you can choose to define it.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">If you have an undefined tag, it will be gray instead of pink.</p>



<figure class="wp-block-image"><img decoding="async" alt="Prog 1 PRG 1 LD" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-21-prog-1-prg-ld.png" width="900px" /></figure>



<p class="wp-block-paragraph">Next, to start writing your program, navigate to the “ProgramBody.”&nbsp;Make sure to set the drop down on the top left to “Write:”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">The “Read” option will not allow editing, and you cannot copy lines of code in “Read” mode either. “Write Mntr” and “Read Mntr” are for monitoring the program while online with the PLC.</p>



<p class="wp-block-paragraph">There are some display options that can be set to make the ladder editor easier to read. Click on “Tool” &gt; “Options.”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Next, click on “Ladder Editor:”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Here are some settings that I think are helpful to have on; these will display any comments you add to labels or any comments you add to your ladder rungs.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">One other setting that is useful to have on is the “Wrapping Ladder Display.”&nbsp;This will wrap a long label name and show the whole name.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">To start writing logic, you can double click on a cell or select a cell and just start typing a label name or instruction. The drop down here shows the type of basic instruction&nbsp;you can assign to a cell.</p>



<p class="wp-block-paragraph">Note: If you don’t choose anything, it will default to a normally open contact.</p>



<figure class="wp-block-image"><img decoding="async" alt="Prog 1 Input 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-27-prog-1-input-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">The easiest way to program is to type out the instruction and labels for each cell and then press enter.</p>



<p class="wp-block-paragraph">Typically, the syntax is: Instruction Input1 Input2 …. Here is an example for a move instruction&nbsp;where an integer value 1 is moved into iCount. Here I typed: MOV K1 iCount.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Each instruction might have different inputs.&nbsp;If you need details, you can right click and select&nbsp;“Open Instruction Help.”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Here are some basic, commonly used shortcuts and instructions:</p>



<p class="wp-block-paragraph">F5: NO<br>
F6: NC<br>
F7: OUT</p>



<p class="wp-block-paragraph">Set: latch a Boolean</p>



<p class="wp-block-paragraph">RST: unlatch a Boolean</p>



<p class="wp-block-paragraph">Unlike Siemens and Rockwell, Gx Works3 requires different versions of instructions when using different data types. Here are some examples:</p>



<p class="wp-block-paragraph">=, &gt;=, &lt;=, &lt;&gt;, Instructions for comparing 16-bit data.</p>



<p class="wp-block-paragraph">+, -, *, /, Instructions for basic math with 16-bit data.</p>



<p class="wp-block-paragraph">MOV, to transfer 16-bit data.</p>



<p class="wp-block-paragraph">D=, D&gt;=, D&lt;=, D&lt;&gt;, Instructions for comparing 32-bit data.</p>



<p class="wp-block-paragraph">D+, D-, D*, D/, Instructions for basic math with 32-bit data.</p>



<p class="wp-block-paragraph">DMOV, to transfer 32-bit data.</p>



<p class="wp-block-paragraph">E=, E&gt;=, E&lt;=, E&lt;&gt;, Instructions for comparing single precision real numbers</p>



<p class="wp-block-paragraph">E+, E-, E*, E/, Instructions for basic math with single precision real numbers</p>



<p class="wp-block-paragraph">EMOV, to transfer single precision real numbers.</p>



<p class="wp-block-paragraph">ED=, ED&gt;=, ED&lt;=, ED&lt;&gt;, Instructions for comparing double precision real numbers</p>



<p class="wp-block-paragraph">ED+, ED-, ED*, ED/, Instructions for basic math with double precision real numbers</p>



<p class="wp-block-paragraph">EDMOV, to move double precision real numbers.</p>



<p class="wp-block-paragraph">$+, to concatenate strings.</p>



<p class="wp-block-paragraph">$MOV to transfer character strings.</p>



<p class="wp-block-paragraph">Next, we will go over basic timers.</p>



<p class="wp-block-paragraph">Earlier in this blog we set timer units in the CPU parameters. The instructions for each of the timers are OUT, OUTH, and OUTHS.</p>



<p class="wp-block-paragraph">These timers will run based on what was set earlier. OUT is the instruction for a normal output coil, but, when the first input is a label of type “Timer” and the second input is a 16-bit unsigned integer, this instruction behaves as a timer. Here is an example of how this would look like:</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">This timer is enabled when Input1 goes high and starts counting to 100*10ms (default setting).&nbsp;When the time is reached, the label Timer1 can be used directly as a contact and will go high turning on Output1.</p>



<figure class="wp-block-image"><img decoding="async" alt="Input 1 Timer 1 OUTH" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-31-input-1-timer-1-outh-.png" width="900px" /></figure>



<p class="wp-block-paragraph">Finally, we will cover how to comment in Gx Works3.</p>



<p class="wp-block-paragraph">The&nbsp;three icons below can be toggled on and off. When toggled on, double clicking on a rung or a cell will pull up a window where you can add a comment.<br>
&nbsp;<br>
The leftmost icon allows you to comment on your labels (you can also do this in the label lists), the middle icon is for commenting an entire rung, and the last one will add a comment to an output.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Adding comments to entire rungs is the most useful.</p>



<p class="wp-block-paragraph">If you check “Display in Navigation Window,”&nbsp;text you write here will become subtitles in the Navigation window:&nbsp;which can be helpful for organizing your code.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">You can add multiple comments above a rung, like this:</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<h2 id="h-7-simulation-and-debugging" class="wp-block-heading"><u><a id="7. Simulation and Debugging" name="7. Simulation and Debugging"></a>7. Simulation and Debugging</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">This section will focus on how to simulate a PLC and go online to test your program.</p>



<p class="wp-block-paragraph">We have created a basic sample program. <strong>Anything that hasn’t been compiled yet will show up as gray in the ladder editor and red in the Navigation window.</strong></p>



<figure class="wp-block-image"><img decoding="async" alt="iCount timer 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-35-icount-timer-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">To check and compile code, click on “Convert,”&nbsp;then press the “Convert(B).”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Alternatively, you can click the convert button in the tool bar shown below.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">If there are no errors in the code, after converting, the rungs in the ladder editor will turn white, and the titles in the Navigation will also turn white. If there are any errors, they will be displayed in the Output Window.</p>



<figure class="wp-block-image"><img decoding="async" alt="Input Trigger iCount Timer 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-38-input-trigger-icourt-timer-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">Next, click on the “Start Simulation” icon to start a PLC simulation. The button immediately to the right is “Stop Simulation” and will end the simulated PLC.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">The first time you start a simulation, the program will automatically write to the simulation PLC. It will open the window below. which is the simulated PLC.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Now, you can switch to “Read Mntr” or “Write Mntr” to test your programs live.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">If you make a change to your program, you will need to write these changes to the PLC. If you only changed your program, you could&nbsp;do an online change by pressing the icon below.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">If you make a change to any Structured Data Types or Parameters, you will have to rebuild/recompile your project and then do a full download. To do a download, press the red arrow icon shown below. It will open a window where you can select exactly what you want to write to the PLC.</p>



<figure class="wp-block-image"><img decoding="async" alt="Online Data Operation" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-43-online-data-operation.png" width="900px" /></figure>



<p class="wp-block-paragraph"><strong>If you have multiple people working on the same PLC, anytime someone writes a change to the PLC, all other people will need to read from the PLC to obtain that change. It doesn’t automatically update. To read from the PLC, press the blue arrow button shown below. It will open a window where you can choose what you want to read.</strong></p>



<figure class="wp-block-image"><img decoding="async" alt="Online Data Operation R08SF" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-44-online-data-operation-r08sf.png" width="900px" /></figure>



<h4 id="h-basic-debugging-and-troubleshooting" class="wp-block-heading">Basic debugging and troubleshooting</h4>



<p class="wp-block-paragraph">The last part of this blog will go over some debugging and troubleshooting tools in Gx Works3.</p>



<p class="wp-block-paragraph">After going online with the PLC and monitoring your selected program, the ladder editor will display the values in any referenced labels, and any contacts that are true will be colored blue.</p>



<p class="wp-block-paragraph">In our sample program here, Input1 is true and iCount = 1.</p>



<figure class="wp-block-image"><img decoding="async" alt="Setting 2" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-45-setting-2.png" width="900px" /></figure>



<p class="wp-block-paragraph">There are two main ways to modify labels.</p>



<p class="wp-block-paragraph">For a Boolean, you can right click on the label, go to “Debug,” then click on “Modify Value.”&nbsp;This will flip the value of the Boolean.</p>



<figure class="wp-block-image"><img decoding="async" alt="Debug" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-46-debug.png" width="900px" /></figure>



<p class="wp-block-paragraph">The other way to modify labels is to right click, go to “Register to Watch Window” and then add the label to a watch window of your choice. The selected watch window will open.</p>



<figure class="wp-block-image"><img decoding="async" alt="Register to Watch Window" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-47-watch-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">If no values are being displayed on the watch window, you can right-click on a label in the watch window and click “Start Watching.”</p>



<p class="wp-block-paragraph">You can monitor and modify any label values in the watch window. After entering in the desired value, press “Enter” on your keyboard to confirm the value modification.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">To cross reference a tag, right click on the tag and click on “Cross Reference.”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">The cross-reference window will open and show all instances of the label.</p>



<figure class="wp-block-image"><img decoding="async" alt="Cross Reference 1 Reset 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-50-cross-reference-1-reset-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">One important thing to note is that&nbsp;no matter what value is present at a certain index in an array, the GX Works3 ladder editor will show that it is -1. To see its actual value, you can use a watch window.</p>



<p class="wp-block-paragraph">In the example below, IntArray[Index] should equal 2, but the value shown in the ladder editor is -1.</p>



<figure class="wp-block-image"><img decoding="async" alt="Watch 1 Watching" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-51-watch-1-watching.png" width="900px" /></figure>



<p class="wp-block-paragraph">The icons shown below near the top right corner show the statuses of the PLC.</p>



<p class="wp-block-paragraph"><strong>If there are any errors, there will be a yellow exclamation mark present. To check on any PLC or module errors, clicking on the check mark will bring up the&nbsp;diagnostic window below.</strong></p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">One last useful tool for debugging is the Device/Buffer Memory Batch Monitor which can be accessed by pressing the icon below:</p>



<figure class="wp-block-image"><img decoding="async" alt="PRG Monitoring 66" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-53-prg-monitoring-66.png" width="900px" /></figure>



<p class="wp-block-paragraph">Here you can type a device name (ex. D10, or X100) or buffer memory unit and monitor the bits at those places in memory.</p>



<figure class="wp-block-image"><img decoding="async" alt="Device Buffer Memory Batch Monitoring" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-54-device-buffer-memory-batch-monitoring.png" width="900px" /></figure>



<p class="wp-block-paragraph"><strong>After you are done with simulating your program, make sure to stop the simulation before connecting to a real PLC.</strong></p>



<p class="wp-block-paragraph">To get connected with a real PLC, start off by pinging the PLC IP address using command prompt. After that is successful, press the icon shown below:</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">This will open the following window:</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Double click on “Ethernet Board” to specify your adapter and hit OK.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Double click on “PLC Module.”</p>



<p class="wp-block-paragraph"><strong>The first time you connect to the PLC, you will have to connect through the ethernet port directly on the PLC to write an IP address to the PLC.&nbsp;</strong></p>



<p class="wp-block-paragraph">Choose “Ethernet Port Direct Connection.”</p>



<p class="wp-block-paragraph">If you have connected to the PLC before, set the IP address already, and are now connected through an ethernet switch, click on “Connection via HUB” and enter in the IP address of the PLC. Next, press “OK.”</p>



<figure class="wp-block-image"><img decoding="async" alt="PLC side I/F Detailed Setting of PLC Module" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-58-plc-side-if-detailed-setting-of-plc-module.png" width="741px" /></figure>



<p class="wp-block-paragraph">Next, click on “Connection Channel List.”</p>



<p class="wp-block-paragraph">There are many different routes to connect to the PLC, the most common is “19 Ethernet Board Communication PLC Module Connection.”</p>



<p class="wp-block-paragraph">If you have a different network topology, you may need to choose a different setting here. Selecting different options will change the graphic shown to help illustrate the topology. After choosing your setting, click “OK.”</p>



<figure class="wp-block-image"><img decoding="async" alt="Connection Channel List" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-59-connection-channel-list.png" width="900px" /></figure>



<p class="wp-block-paragraph">Finally, we can test our connection to the PLC by clicking on “Connection Test.”&nbsp;A dialog box will show up to display whether&nbsp;the connection is successful or not.</p>



<p class="wp-block-paragraph">If this is the first time you are connecting to a fresh PLC, make sure to write your entire project to the PLC to set the IP address of the PLC for future connections.</p>



<h2 id="h-8-final-thoughts" class="wp-block-heading"><u><a id="8. Final Thoughts" name="8. Final Thoughts"></a>8. Final Thoughts</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">GX Works3 provides an integrated environment for developing and managing automation projects. While navigating and programming in GX Works3 may present challenges, mastering its key functionalities and insights can significantly alleviate the frustration, paving the way for a smoother and more efficient experience in harnessing its power for industrial automation.</p>



<p class="wp-block-paragraph">Happy programming!</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>Start Programming Mitsubishi PLCs with GX Works3</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">Explore 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/mitsubishi-plc-programming-and-automation-services/" data-type="page" data-id="463">Mitsubishi PLC programming</a> with GX Works3 project setup, hardware configuration, ladder logic, simulation, and PLC debugging.</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/16810/starting-a-project-in-gx-works3-a-beginners-guide/">Starting a Project in GX Works3: A Beginner&#8217;s Guide</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
