<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Factorytech on Blog | Jonas Neubert</title><link>https://blog.jonasneubert.com/tags/factorytech/</link><description>Recent content in Factorytech on Blog | Jonas Neubert</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 25 Jan 2026 07:53:29 +0000</lastBuildDate><atom:link href="https://blog.jonasneubert.com/tags/factorytech/index.xml" rel="self" type="application/rss+xml"/><item><title>The Best Python Packages for Reading Barcodes</title><link>https://blog.jonasneubert.com/2022/09/30/the-best-python-packages-for-reading-barcodes/</link><pubDate>Fri, 30 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2022/09/30/the-best-python-packages-for-reading-barcodes/</guid><description>&lt;p>Three years ago I published a blog post on &lt;a href="https://blog.jonasneubert.com/2019/01/23/barcode-generation-python/">how to &lt;em>generate&lt;/em> barcodes using Python&lt;/a>. It&amp;rsquo;s one of the most visited posts on the blog! Occasionally a reader emails to ask: &amp;ldquo;But what if I want to &lt;em>read&lt;/em>/&lt;em>decode&lt;/em>/&lt;em>scan&lt;/em>&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup> a barcode, not write it?&amp;rdquo;&lt;/p>
&lt;p>Here is the answer:&lt;/p>
&lt;h2 id="dont-use-python-for-barcode-decoding">Don&amp;rsquo;t use Python for Barcode Decoding!&lt;/h2>
&lt;p>You really shouldn&amp;rsquo;t be using pure Python to decode barcodes from images or videos or, worse, from camera streams.&lt;/p></description></item><item><title>Using pymodbus to communicate with a PLC</title><link>https://blog.jonasneubert.com/2019/11/02/using-pymodbus-to-communicate-with-a-plc/</link><pubDate>Sat, 02 Nov 2019 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2019/11/02/using-pymodbus-to-communicate-with-a-plc/</guid><description>&lt;p>&lt;em>This post is part 4 of &lt;a href="https://blog.jonasneubert.com/2019/10/27/what-is-a-plc-and-how-do-i-talk-python-to-it/">a series&lt;/a> covering material I presented in a &lt;a href="https://jonasneubert.com/talks/python2019.html">talk at PyCon 2019&lt;/a>.&lt;/em>&lt;/p>
&lt;p>In the previous parts of this series, I covered &lt;a href="https://blog.jonasneubert.com/2019/10/28/what-is-a-programmable-logic-controller/">what a PLC is&lt;/a>, and &lt;a href="https://blog.jonasneubert.com/2019/10/29/ladder-logic/">how PLCs are programmed&lt;/a>.
In industry, the Python developer is usually not involved in the purchasing, installing, and programming of a PLC.
If you find yourself working with PLCs in academia or for a hobby project, you might actually be the one doing these things yourself.
Either way, I assume that you somehow found yourself with a programmed PLC and now want to connect to it using Python.&lt;/p></description></item><item><title>Ladder Logic‽</title><link>https://blog.jonasneubert.com/2019/10/29/ladder-logic/</link><pubDate>Tue, 29 Oct 2019 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2019/10/29/ladder-logic/</guid><description>&lt;p>&lt;em>This post is part 3 of &lt;a href="https://blog.jonasneubert.com/2019/10/27/what-is-a-plc-and-how-do-i-talk-python-to-it/">a series&lt;/a> covering material I presented in a &lt;a href="https://jonasneubert.com/talks/python2019.html">talk at PyCon 2019&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Most software engineers are used to writing text-based code using a text editor &lt;a href="https://en.wikipedia.org/wiki/Editor_war">of their choice&lt;/a>.
Things work a little bit differently in the world of PLCs.
To program a Programmable Logic Controller (PLC), you can&amp;rsquo;t just open up your favorite text editor and start typing away PLC code.
First, PLC logic isn&amp;rsquo;t programmed in text (exceptions apply, see below).
Second, you can&amp;rsquo;t use your favorite programming software; instead you will be using the one programming software that the vendor of your PLC provides.&lt;/p></description></item><item><title>What is a Programmable Logic Controller?</title><link>https://blog.jonasneubert.com/2019/10/28/what-is-a-programmable-logic-controller/</link><pubDate>Mon, 28 Oct 2019 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2019/10/28/what-is-a-programmable-logic-controller/</guid><description>&lt;p>&lt;em>This post is part 2 of &lt;a href="https://blog.jonasneubert.com/2019/10/27/what-is-a-plc-and-how-do-i-talk-python-to-it/">a series&lt;/a> covering material I presented in a &lt;a href="https://jonasneubert.com/talks/python2019.html">talk at PyCon 2019&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I have prepared three different conference talks about PLCs for Python programmers.
Annoyingly, you can&amp;rsquo;t assume that every Python programmer knows what a PLC is, so I always have to sacrifice a few minutes of my time slot&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup> to convey the basics before diving into my actual topic.
This blog post is the content I have settled on for those first five minutes of my talks.&lt;/p></description></item><item><title>What is a PLC and how do I talk Python to it?</title><link>https://blog.jonasneubert.com/2019/10/27/what-is-a-plc-and-how-do-i-talk-python-to-it/</link><pubDate>Sun, 27 Oct 2019 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2019/10/27/what-is-a-plc-and-how-do-i-talk-python-to-it/</guid><description>&lt;p>&lt;em>This post is part 1 of a series. Scroll down for a table of contents.&lt;/em>&lt;/p>
&lt;p>If you&amp;rsquo;ve found your way to this blog, chances are you already know that I&amp;rsquo;ve given a few conference talks about using Python in automation.
You are right now reading the blog post version of content I presented at PyCon 2019.
I started my talk there by answering the question:
&lt;strong>Why do I keep talking about this topic?&lt;/strong>&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p></description></item><item><title>List of PLC brands and products</title><link>https://blog.jonasneubert.com/2019/04/27/list-of-plc-brand-names-and-products/</link><pubDate>Sat, 27 Apr 2019 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2019/04/27/list-of-plc-brand-names-and-products/</guid><description>&lt;p>tl;dr: &lt;a href="https://docs.google.com/spreadsheets/d/15R6rOn6HexPPkxQu_sHcqVbk_W1myLeLFAvGkUWLZfw/edit?usp=sharing">Here&amp;rsquo;s the link to the spreadsheet&lt;/a>.&lt;/p>
&lt;p>I&amp;rsquo;ve been thinking about Programmable Logic Controllers (PLC) again recently, not least because I am preparing &lt;a href="https://us.pycon.org/2019/schedule/presentation/237/">a conference talk&lt;/a> about them. While putting together the presentation I thought to myself &amp;ldquo;Why not make a list of PLC products out there, I wonder how many there are‽&amp;rdquo;&lt;/p>
&lt;p>Turns out, there are quite a few! After three evenings of research I had a spreadsheet of 144 product lines. That number shouldn&amp;rsquo;t be a surprise given that this is a 50-year-old technology that is ubiquitous in factories, infrastructure, and machinery.&lt;/p></description></item><item><title>The Best Python Packages for Generating Barcodes</title><link>https://blog.jonasneubert.com/2019/01/23/barcode-generation-python/</link><pubDate>Wed, 23 Jan 2019 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2019/01/23/barcode-generation-python/</guid><description>&lt;p>Barcodes are a cheap and ubiquitous way to add machine-readable information to an object. I think of barcodes as the real-world equivalent of browser cookies: For example, when you arrive at airport departures, the airline hands you a boarding pass with a barcode (the cookie). From that point onward you&amp;rsquo;re asked to show your barcode at every interaction: at security, the duty-free shop, and the boarding gate. And just like the information stored in browser cookies, the information in barcodes isn&amp;rsquo;t in plain sight but easily made visible.&lt;/p></description></item><item><title>PyCon 2017 Talk</title><link>https://blog.jonasneubert.com/2017/06/10/pycon-2017-video/</link><pubDate>Sat, 10 Jun 2017 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2017/06/10/pycon-2017-video/</guid><description>&lt;iframe width="853" height="480" src="https://www.youtube-nocookie.com/embed/cEyVfiix1Lw?rel=0" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;p>The PyCon talk which I&amp;rsquo;ve been preparing for with steadily increasing stress levels since February happened three weeks ago at PyCon 2017 in Portland. Time to post a quick retrospective!&lt;/p>
&lt;p>The recording of the talk is up &lt;a href="https://www.youtube.com/watch?v=cEyVfiix1Lw">on Youtube&lt;/a>. Huge props to the PyCon organizers for posting all talk recordings publicly every year. This year the videos were up less than 24 hours after the talk!&lt;/p>
&lt;p>I also put together &lt;a href="https://gist.github.com/jonemo/b276f6fb1d5b189ffbcae3569b999b36#file-presentation-md">Github Gist with links and notes&lt;/a> to go along with the talk, and the slide deck is up &lt;a href="https://speakerdeck.com/jonemo/factory-automation-with-python-pycon-2017">on Speakerdeck&lt;/a> (although the slide deck only covers what was on screen for half of the talk, the other half consisting of the demo).&lt;/p></description></item><item><title>PyCon Talk Progress Update: Hindsight is 80/20</title><link>https://blog.jonasneubert.com/2017/04/27/hindsight-is-80-20/</link><pubDate>Thu, 27 Apr 2017 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2017/04/27/hindsight-is-80-20/</guid><description>&lt;p>The high level update on my PyCon talk prep is that I&amp;rsquo;m currently making the transition from making steady deliberate progress to a more panic-driven hair-on-fire style of working. Three weeks from today this thing better works&amp;ndash;on stage, and in Portland.&lt;/p>
&lt;p>On a more technical level, the status is that I have a working prototype of my demo and am confident that I can construct a good talk narrative around it. Here&amp;rsquo;s what the prototype currently looks like (cat for scale):&lt;/p></description></item><item><title>PyCon Talk Progress Update: What needs to be in a Robotics Demo?</title><link>https://blog.jonasneubert.com/2017/03/13/whats-in-a-robotics-demo/</link><pubDate>Mon, 13 Mar 2017 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2017/03/13/whats-in-a-robotics-demo/</guid><description>&lt;p>It&amp;rsquo;s been a month since &lt;a href="https://blog.jonasneubert.com/2017/02/12/tap-tap-tap/">my factory automation talk got accepted into PyCon&lt;/a>. If you&amp;rsquo;ve been following along by means of this blog you&amp;rsquo;ve seen that I &lt;a href="https://blog.jonasneubert.com/2017/02/26/intro-to-barcode-readers/">bought a barcode reader on Ebay&lt;/a>, &lt;a href="https://blog.jonasneubert.com/2017/03/06/ms3-serial-adapter/">made an adapter for it&lt;/a> and wasted some time figuring out &lt;a href="https://blog.jonasneubert.com/2017/03/07/serial-to-usb-on-mac/">how to do Serial-to-USB on a Mac&lt;/a>.&lt;/p>
&lt;p>Barcode readers are cool stuff, but when you promised a factory automation demo, reading a few barcodes doesn&amp;rsquo;t really cut it. The same goes for a lot of other automation equipment like pushers, shakers, label printers and so on: It might technically be factory automation, but nobody comes to PyCon to see tech that contains fewer transistors than the blender in their kitchen at home.&lt;/p></description></item><item><title>One simple trick for USB-to-Serial on MacOS X</title><link>https://blog.jonasneubert.com/2017/03/07/one-simple-trick-usb-to-serial-macos-x/</link><pubDate>Tue, 07 Mar 2017 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2017/03/07/one-simple-trick-usb-to-serial-macos-x/</guid><description>&lt;p>Call me a Luddite if you wish, but I lament the lack of serial ports in modern laptops.&lt;/p>
&lt;p>My relationship with USB-to-Serial cables has been one of disappointments, crashed computers, and garbled data. The one I pulled out of a drawer this week randomly flipped the most significant bit of every character. How do I know this? Because I wasted three long nights debugging the problem.&lt;/p>
&lt;p>But I&amp;rsquo;m a changed person now because I learned this one amazing trick for making USB-to-Serial &lt;em>just work&lt;/em> on macOS:&lt;/p></description></item><item><title>MS3 Adapter for Serial Port and Power</title><link>https://blog.jonasneubert.com/2017/03/06/ms3-serial-adapter/</link><pubDate>Mon, 06 Mar 2017 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2017/03/06/ms3-serial-adapter/</guid><description>&lt;p>In last week&amp;rsquo;s post
&lt;a href="https://blog.jonasneubert.com/2017/02/26/intro-to-barcode-readers/">about barcode readers&lt;/a>
I mentioned that I purchased an &lt;a href="http://www.microscan.com/en-us/products/laser-barcode-scanners/ms-3-compact-laser-barcode-scanner">MS3 from Microscan&lt;/a> for my PyCon demo.
What I had forgotten from last time I worked with the MS3 is that the pin-out of cable attached to the barcode reader is not just a DB9 (nine pin) serial port connector but a DB15 (VGA style) plug.
Those extra pins are used for sending power to the device and to accommodate a few extra features, namely trigger and reset inputs.&lt;/p></description></item><item><title>Intro to Barcode Readers</title><link>https://blog.jonasneubert.com/2017/02/26/intro-to-barcode-readers/</link><pubDate>Sun, 26 Feb 2017 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2017/02/26/intro-to-barcode-readers/</guid><description>&lt;p>If you read &lt;a href="https://blog.jonasneubert.com/2017/02/12/tap-tap-tap/">last week&amp;rsquo;s blog post&lt;/a> you already know that I&amp;rsquo;ve got three months to put together a physical demo for a &lt;a href="https://us.pycon.org/2017/schedule/presentation/747/">PyCon talk about factory automation&lt;/a>. This post is the first in a series of progress updates.&lt;/p>
&lt;p>In robotics and automation, the smallest realistic demo has three parts: Sensing, control, and actuation. I spent Week 1 selecting and bargain hunting for an industrial barcode reader to cover the &lt;em>sensing&lt;/em> part of the demo. As I went along I wrote up my notes as an &amp;ldquo;Introduction to Barcode Readers&amp;rdquo;; if you only want to know what I ended up buying, scroll down to the end!&lt;/p></description></item><item><title>Tap, Tap, Tap</title><link>https://blog.jonasneubert.com/2017/02/12/tap-tap-tap/</link><pubDate>Sun, 12 Feb 2017 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2017/02/12/tap-tap-tap/</guid><description>&lt;p>&amp;hellip; is this thing still on?&lt;/p>
&lt;p>Besides &lt;a href="http://manufacturingporn.com/archive">that Tumblr blog where I collect factory flicks on a NSFW domain&lt;/a>, I haven&amp;rsquo;t produced much written content for public consumption over the past three years. Looks like they even shut down Google Reader because this blog dried up!&lt;/p>
&lt;p>But things are about to change! Here&amp;rsquo;s the plan:&lt;/p>
&lt;p>My talk proposal for &lt;a href="https://us.pycon.org/2017/">PyCon 2017&lt;/a> just got accepted (via a detour through the backup talks list). The title that my &lt;a href="http://www.cppasiapacific.com/content/Look%20Inside/4278.pdf">pressure prompted&lt;/a> brain came up with a few hours before the submission deadline:&lt;/p></description></item></channel></rss>