<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Plantformance</title>
    <description>The latest articles on DEV Community by Plantformance (plantformance).</description>
    <link>https://dev.to/plantformance</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F16109%2Fa5f0a5ec-d744-4737-a33e-540f2f0c72da.png</url>
      <title>DEV Community: Plantformance</title>
      <link>https://dev.to/plantformance</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/plantformance"/>
    <language>en</language>
    <item>
      <title>Why Ignition Perspective can't see your barcode scanner (and three ways around it)</title>
      <dc:creator>Noa Vernick</dc:creator>
      <pubDate>Sat, 14 Nov 2026 10:46:52 +0000</pubDate>
      <link>https://dev.to/plantformance/why-ignition-perspective-cant-see-your-barcode-scanner-and-three-ways-around-it-45hg</link>
      <guid>https://dev.to/plantformance/why-ignition-perspective-cant-see-your-barcode-scanner-and-three-ways-around-it-45hg</guid>
      <description>&lt;p&gt;If you have built a Perspective screen for a warehouse or a packing line, you have probably hit this wall. The operator plugs a USB barcode scanner or a serial scale into the terminal, and the Perspective session has no idea it exists.&lt;/p&gt;

&lt;p&gt;That is not a bug. Perspective runs in a web browser (or the Perspective Workstation app, which wraps one), and browsers are sandboxed on purpose. A web page cannot open COM3, read a file from the local disk or send raw data to a label printer. The gateway, meanwhile, runs on a server somewhere else and has no access to the terminal's hardware either. So the device sits in the middle with nobody able to talk to it.&lt;/p&gt;

&lt;p&gt;Here are the approaches we have seen teams use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Keyboard wedge mode.&lt;/strong&gt;&lt;br&gt;
Many USB scanners can act as a keyboard. Put the focus in a text field and the scan arrives as typed characters, usually followed by Enter. It is free and works today. The downsides: it only works for devices that can pretend to be keyboards, it depends on the right field having focus, and an operator who taps elsewhere mid-scan gets the barcode typed into the wrong place. Scales, serial PLC links and printers do not fit this model at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A small local service you write yourself.&lt;/strong&gt;&lt;br&gt;
Some teams write a little program on each terminal that reads the serial port and posts values to the gateway, for example through a web endpoint or a database table. This gives you full control. It also gives you a new piece of software to install, update, secure and support on every terminal, and every team ends up writing a slightly different one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. A gateway module plus an OS-level agent.&lt;/strong&gt;&lt;br&gt;
This is the route we took. Our &lt;a href="https://plantformance.com/modules/host-agent-module" rel="noopener noreferrer"&gt;Host Agent module&lt;/a&gt; is two parts: a module on the Ignition Gateway and a lightweight service on the terminal's operating system (Windows, Linux or macOS). The agent pairs with the gateway using a zero-trust pairing step, and from then on Perspective can reach local files, serial ports, printers, barcode scanners and scales through gateway scripting functions and tag providers. To your project, a scale reading looks like a tag.&lt;/p&gt;

&lt;p&gt;What we like about the third approach is that it keeps the logic where Ignition developers already work: in gateway scripts and tags, not in a separate codebase on every PC. It runs on Ignition 8.1 and 8.3, and there is a free two-hour trial that resets, which is enough to wire up one scanner and see if it fits your setup.&lt;/p&gt;

&lt;p&gt;Whichever route you pick, three things save trouble later:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decide which terminal "owns" which device and write it down. Shared devices cause the strangest bugs.&lt;/li&gt;
&lt;li&gt;Handle the device being absent. Unplugged scanners are the normal case, not the edge case.&lt;/li&gt;
&lt;li&gt;Log every read on the gateway side, so you can answer "what did the scale say at 14:02?" without walking to the line.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hardware access is a small part of a project on paper and a large part of the support calls afterwards. It is worth choosing the approach deliberately.&lt;/p&gt;

</description>
      <category>ignition</category>
      <category>scada</category>
      <category>iot</category>
      <category>python</category>
    </item>
  </channel>
</rss>
