<?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>Contact and Coil &#187; Automation</title>
	<atom:link href="http://www.contactandcoil.com/category/automation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.contactandcoil.com</link>
	<description>Nearly In Control</description>
	<lastBuildDate>Sat, 04 Feb 2012 21:00:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>OWI-535 Robot Arm with USB Controller from C# and .NET</title>
		<link>http://www.contactandcoil.com/automation/home-automation/owi-535-robot-arm-with-usb-controller-from-c-and-net/</link>
		<comments>http://www.contactandcoil.com/automation/home-automation/owi-535-robot-arm-with-usb-controller-from-c-and-net/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 21:00:46 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[libusbdotnet]]></category>
		<category><![CDATA[owi-535]]></category>
		<category><![CDATA[robot-arm]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=1014</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/home-automation/owi-535-robot-arm-with-usb-controller-from-c-and-net/' addthis:title='OWI-535 Robot Arm with USB Controller from C# and .NET '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>I got the OWI-535 &#8220;Robot Arm Edge&#8221; 5-Axis robot arm and USB Controller add-on for Christmas: The robot arm comes as a kit that you assemble yourself, and my 3 year old and I had lots of fun putting it together (it helped to have some tiny fingers around, honestly). It comes with a manual [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/home-automation/owi-535-robot-arm-with-usb-controller-from-c-and-net/' addthis:title='OWI-535 Robot Arm with USB Controller from C# and .NET ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/home-automation/owi-535-robot-arm-with-usb-controller-from-c-and-net/' addthis:title='OWI-535 Robot Arm with USB Controller from C# and .NET '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>I got the OWI-535 &#8220;Robot Arm Edge&#8221; 5-Axis robot arm and USB Controller add-on for Christmas:</p>
<p><center><br />
<iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=moms4mom00-20&#038;o=1&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=B0017OFRCY" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=moms4mom00-20&#038;o=1&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=B0028MBWS2" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><br />
</center></p>
<p>The robot arm comes as a kit that you assemble yourself, and my 3 year old and I had lots of fun putting it together (it helped to have some tiny fingers around, honestly).  It comes with a manual controller that allows you to rotate all 4 joints, plus the gripper.  It&#8217;s fun to play around with, but let&#8217;s be honest, everyone wants to hook it up to their computer.</p>
<p>Unfortunately the software that comes with the USB controller works on Windows 7, but &#8220;32-bit only&#8221;.  That was a little annoying, but hey, I didn&#8217;t really want to stick with their canned software anyway.  I figured I would see if I could get it to work from C#.  I was surprised to find a great site by Dr. Andrew Davison in Thailand who wrote some Java code as part of his site for his book <a href="http://fivedots.coe.psu.ac.th/~ad/jg" onclick="pageTracker._trackPageview('/outgoing/fivedots.coe.psu.ac.th/_ad/jg?referer=');">Killer Game Programming in Java</a> (chapter <a href="http://fivedots.coe.psu.ac.th/~ad/jg/nui06/index.html" onclick="pageTracker._trackPageview('/outgoing/fivedots.coe.psu.ac.th/_ad/jg/nui06/index.html?referer=');">NUI-6 Controlling a Robot Arm</a>, which doesn&#8217;t appear in the book).  Surprisingly he went as far as to do the inverse kinematic equations so you can give the arm a set of X,Y,Z co-ordinates (in mm) in &#8220;world frame&#8221; and it will calculate all the join angles to get to that location, and then used timed moves to get the arm into that position.</p>
<p>His Java library uses libusb-win32, and that library has a .NET equivalent called <a href="http://sourceforge.net/projects/libusbdotnet/" onclick="pageTracker._trackPageview('/outgoing/sourceforge.net/projects/libusbdotnet/?referer=');">LibUsbDotNet</a>.  The API&#8217;s don&#8217;t appear to be the same, but thankfully I managed to find a thread on SourceForge about <a href="http://sourceforge.net/apps/phpbb/libusbdotnet/viewtopic.php?f=3&#038;t=75" onclick="pageTracker._trackPageview('/outgoing/sourceforge.net/apps/phpbb/libusbdotnet/viewtopic.php?f=3_038_t=75&amp;referer=');">controlling the OWI-535 using LibUsbDotNet</a>.  So, over the course of a couple of nights, after the kids went to bed, I ported Dr. Davison&#8217;s Java code over to C# (quite easy actually) and replaced the libusb-win32 calls with LibUsbDotNet API calls.  It worked!</p>
<p>Here is the .NET solution that I wrote called <a href='http://www.contactandcoil.com/wp-content/uploads/TestOwi535.zip'>TestOwi535</a>.  I used Visual C# 2010 Express Edition to write it, so that&#8217;s free.  Also, you <i>must download and install LibUsbDotNet first and run the USB InfWizard first to generate a .inf file (you have to do this with the robot arm plugged in and turned on), and then use that .inf file to install LibUsbDotNet as the driver</i> (technically you&#8217;re installing libusb-win32 as the driver and LibUsbDotNet is just the C# wrapper).</p>
<p>If you right click on the C# project in the solution explorer, you&#8217;ll find 3 options for startup object: MainClass is the original code I found in the SourceForge thread, but it&#8217;s just proof of concept code and only moves one joint in one direction for a second.  The ArmCommunicator class is an interactive console application that allows you to move all joints (and control the gripper and light) by typing in keyboard commands.  Finally the RobotArm class is the full inverse kinematics thing.  In the last case, make sure you start with the arm at the zero position (base pointing away from the battery compartment, and all joints in-line straight up in the air, gripper pointing directly up, and gripper open).  It will do a move to the table, to the front right of the arm, close the gripper, and then move back to zero and open the gripper.</p>
<p>Unfortunately that&#8217;s where you start to see the obvious deficiency of the arm: it has no position feedback.  That means even though it tracks its position in the code, the physical position eventually drifts away from the internal position tracking, and the arm eventually doesn&#8217;t know where it is (it&#8217;s just using timed moves).  One of the biggest areas where you could improve it is to change the joint rates so that it knows that the joints move faster when going down than when going up.</p>
<p>Still, it&#8217;s a neat little toy for the price.  I&#8217;m going to start hunting around for a way to add joint position feedback, as that would really improve the performance.  I also want to rewrite a new module from the ground up that allows concurrent joint moves (this one only moves one joint at a time).  Ideally you want to control this thing in &#8220;gripper frame&#8221; instead of &#8220;world frame&#8221;.</p>
<p>Happy hacking!</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/home-automation/owi-535-robot-arm-with-usb-controller-from-c-and-net/' addthis:title='OWI-535 Robot Arm with USB Controller from C# and .NET ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/home-automation/owi-535-robot-arm-with-usb-controller-from-c-and-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Psychology of Automation</title>
		<link>http://www.contactandcoil.com/automation/industrial-automation/the-psychology-of-automation/</link>
		<comments>http://www.contactandcoil.com/automation/industrial-automation/the-psychology-of-automation/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 03:04:51 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[Industrial Automation]]></category>
		<category><![CDATA[motivation]]></category>
		<category><![CDATA[quality]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=1011</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/the-psychology-of-automation/' addthis:title='The Psychology of Automation '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>It&#8217;s easy to overlook the power of human motivation in automation systems. I&#8217;m going to assume you don&#8217;t work in a lights-out factory. That&#8217;s pretty rare. Almost all automation systems interact with people on a regular basis, and even though we have high fidelity control over our automation processes, people are notoriously difficult to predict, [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/the-psychology-of-automation/' addthis:title='The Psychology of Automation ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/the-psychology-of-automation/' addthis:title='The Psychology of Automation '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>It&#8217;s easy to overlook the power of human motivation in automation systems.</p>
<p>I&#8217;m going to assume you don&#8217;t work in a lights-out factory.  That&#8217;s pretty rare.  Almost all automation systems interact with people on a regular basis, and even though we have high fidelity control over our automation processes, people are notoriously difficult to predict, let alone control.</p>
<p>For instance, consider a process with a reject station.  Finished parts are measured and parts that don&#8217;t meet specification are diverted down a chute.  Good parts continue down the line.</p>
<p>Question: how big do you make the reject bin?  Naively you might want to make it as big as possible so the operator doesn&#8217;t have to waste time emptying it.  Unfortunately that means it&#8217;s just as easy to make bad parts as it is to make good parts.  You&#8217;d be better off to make the reject chute only hold 3 parts, and put a full sensor on the chute that throws a fault and stops the machine when it&#8217;s fully.  Then it&#8217;ll be a pain in the ass to make bad parts, and the operator will have a lot more motivation to do something about it.  While you&#8217;re at it, put the reject chute on the other side of the machine so they have to walk around the machine to empty it.</p>
<p>Consider a machine with an e-stop button.  It&#8217;s a big red button with a mushroom head that&#8217;s supposed to be easy to hit.  However, I&#8217;ve seen a lot of machines where the consequence of hitting that button was major downtime because the part tracking got screwed up or the machine just didn&#8217;t recover gracefully.  I once watched a pallet get bumped out of the track and it was riding along the rail of the conveyor.  I hit the e-stop just before it was about to damage some equipment.  I was scolded for my efforts: &#8220;never hit the e-stop,&#8221; he said.  That&#8217;s the wrong motivation.  You <i>want</i> operators to press the button when they see something wrong, so make it easy to recover.</p>
<p>Consider an inventory tracking system.  You want people to record stuff they&#8217;ve consumed, and what cost account they&#8217;ve consumed it against.  What motivation does a person standing there with a bolt in their hand have to look up that bolt in your inventory system and mark it consumed?  Very little.  What if you lock the door to the store room and make them request an item before you unlock the door?  That&#8217;ll help, but chances are some people who don&#8217;t know exactly what they want will click the first item on the list, and just go in and browse.  What if you make the inventory storage system so convoluted that the only way to find an item is to look up the storage location in the computer?  Well, that might work (until your inventory system breaks).</p>
<p>Like water, people tend to take the easiest path down hill.  You&#8217;re better off digging a channel where you want it to go than expecting it to get there under its own power.  Use gravity to your advantage.  Make it harder to do things the wrong way and easier to do things the right way.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/the-psychology-of-automation/' addthis:title='The Psychology of Automation ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/industrial-automation/the-psychology-of-automation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Safe(r) Data Collection from a PLC</title>
		<link>http://www.contactandcoil.com/automation/industrial-automation/safer-data-collection-from-a-plc/</link>
		<comments>http://www.contactandcoil.com/automation/industrial-automation/safer-data-collection-from-a-plc/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 16:45:22 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[Industrial Automation]]></category>
		<category><![CDATA[data-collection]]></category>
		<category><![CDATA[plc]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=995</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/safer-data-collection-from-a-plc/' addthis:title='Safe(r) Data Collection from a PLC '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>There&#8217;s been a lot of discussion recently about the dangers of connecting automation equipment to networks, and yet there are significant pressures to do so. Of course, I don&#8217;t ever think that you should take a PLC and put it on an internet accessible IP address, but it&#8217;s certainly common practice to connect industrial automation [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/safer-data-collection-from-a-plc/' addthis:title='Safe(r) Data Collection from a PLC ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/safer-data-collection-from-a-plc/' addthis:title='Safe(r) Data Collection from a PLC '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>There&#8217;s been a lot of discussion recently about <a href="http://www.contactandcoil.com/automation/industrial-automation/finding-internet-connected-industrial-automation-devices/">the dangers of connecting automation equipment to networks</a>, and yet there are significant pressures to do so.  Of course, I don&#8217;t ever think that you should take a PLC and put it on an internet accessible IP address, but it&#8217;s certainly common practice to connect industrial automation equipment to internal LANs to facilitate data collection.  People in the front office need to push production planning information down to the production floor, and they need real-time data on what&#8217;s going on (not to mention for historical data logging, historians, etc.).</p>
<p>It&#8217;s all too common to throw a PLC on the same network as your front office, and I&#8217;ve seen it blow up.  What happens is something invariably goes wrong on the office network (someone plugs two ports together on the switch in the boardroom, or someone brings in an infected music player and plugs it in, or the DNS server at head-office goes down and the local DNS doesn&#8217;t work correctly&#8230; I&#8217;ve seen a lot).  However, you want your machines to keep going when this happens.</p>
<p>This is all made worse now that (a) industrial automation equipment is more commonly based on off-the-shelf commodity hardware and software (e.g. windows PCs) and (b) the people writing malware can actually spell PLC now.  Up to this point there&#8217;s been some form of security through obscurity.</p>
<p>If you have a local IT staff that&#8217;s on the ball, you really should be getting them to handle the network layout.  On the other hand, if you&#8217;re in a small facility with limited resources, there&#8217;s a lot you can do by making some simple design choices that will go a long way towards improving the reliability and security of your systems.</p>
<p>Most automation cells now come with an Ethernet switch already built-in.  Typically this is an industrial spec. DIN-rail mounted one.  It&#8217;s not fancy, but it&#8217;s supposed to survive in a panel.  These Ethernet switches are there to connect your PLC to your HMI, and increasingly to connect your PLC to Ethernet-based I/O like Ethernet/IP, etc.  The common (and wrong) thing to do is to drop a network cable from your plant network to your panel and plug it right into this Ethernet switch.  This creates some technical problems right off the bat:</p>
<p>The automation devices typically have fixed IP addresses (I personally prefer this because it means these devices aren&#8217;t dependent upon an external DNS or DHCP server &#8211; two less dependencies are good).  Chances are that these IP addresses won&#8217;t work on your plant network, so you have to manage those IPs at the plant level.  You&#8217;re opening yourself up to someone with the wrong IP on their laptop pouncing on your PLC&#8217;s IP address, and then bam, your machine is down.</p>
<p>A much better way is to place some kind of Router with <a href="http://en.wikipedia.org/wiki/Network_address_translation" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Network_address_translation?referer=');">NAT</a> between the plant network and the machine&#8217;s Ethernet Switch:</p>
<p><a href="http://www.contactandcoil.com/wp-content/uploads/Safer-PLC-Data-Collection.png"><img src="http://www.contactandcoil.com/wp-content/uploads/Safer-PLC-Data-Collection.png" alt="" title="Safe(r) PLC Data Collection" width="491" height="360" class="aligncenter size-full wp-image-996" /></a></p>
<p>Now if you&#8217;re just a little manufacturer with two machines out back and your data-collection link isn&#8217;t critical, you can probably get away with one of those home routers from Best Buy that you&#8217;d use to connect your laptop and your desktop at home to your cable modem.  Note that it <i>doesn&#8217;t</i> need to be wireless, and you&#8217;re probably better off if it isn&#8217;t.  The way you hook it up is to connect the Internet (Uplink) port on the router to the plant network and run a cable from one of the ports on the LAN side to the existing Ethernet switch in the machine.  If your data needs to be a bit more reliable, consider buying some kind of Cisco router with NAT capability (but you&#8217;ll be going from the $50 range to many hundreds of dollars &#8211; your choice).</p>
<p>Now, when you configure it, you want to make sure that you turn off the port forwarding function, the DMZ function, disallow remote administration, and block all anonymous internet traffic (these should be default settings, but it&#8217;s good to check).  Also, make sure the router&#8217;s local IP address doesn&#8217;t conflict with the PLC&#8217;s and HMI&#8217;s, and make sure they have the same subnet.  Typically you&#8217;ll want to either turn off DHCP on the local side, or limit it to a range that won&#8217;t conflict with the fixed IPs.  DHCP is handy when you connect your laptop to the programming port.  Now what you&#8217;ve done is made it somewhat invisible from the plant side.  Some piece of malware scanning for devices on your plant network should just see a black hole.</p>
<p>Now on the PLC side, you can now <i>initiate</i> a connection to the data collection server even though the data collection server can&#8217;t connect to the PLC (in the same way that your home computer can connect to Google, but Google can&#8217;t get to your PC &#8211; theoretically).  Note that a piece of malware on your data collection server or on one of the routers/switches in your plant network <i>could</i> intercept this communication, and own your PLC, but at least you&#8217;ve significantly reduced the surface area of attack.  Not perfect, but reasonable at this time, depending on the sensitivity of your equipment.  I&#8217;m assuming you&#8217;re not enriching uranium or providing drinking water to my community.</p>
<p>(I&#8217;m going to be talking specifically about Allen-Bradley products now &#8211; sorry.)  </p>
<p>So how do you get the data from the PLC to the data collection server?  In the old days you&#8217;d have some software on the server like RSSQL, and it used a product like RSLinx Enterprise and as far as I know, it initiated the connection to the PLC.  That won&#8217;t work in this case.  Sometimes you&#8217;d throw an OPC server in there, and have some kind of historian that would log tags to a database.  That OPC server, obviously, needs to be able to initiate a connection to the PLC.  To use a router with NAT, you&#8217;d need to port-forward from the router to the PLC (or to the OPC server if it was inside the machine network).  That&#8217;s undoing a lot of our protection.</p>
<p>What you need to do is initiate the connection from the PLC, and have the Data Collection computer act as a Server.  One way to do this is with a 3rd party Ethernet card, like this <a href="http://www.prosoft-technology.com/content/view/full/5682" onclick="pageTracker._trackPageview('/outgoing/www.prosoft-technology.com/content/view/full/5682?referer=');">MVI56-GEC card from Prosoft for the ControlLogix line</a>.  I have used that in the past to connect to a server, but it involves a lot of ugly PLC coding.  It&#8217;s your only option if you have to conform to someone else&#8217;s protocol though.  </p>
<p>If you just want to write data directly into a SQL database, there are 3rd party products that will let you do this (basically a SQL Server connector card).</p>
<p>But there is an option without buying any new hardware.  The ControlLogix/CompactLogix lines can send Unsolicited CIP messages, and you can find products that can receive these messages in the PC world, like <a href="http://ingeardrivers.com/netlogix/netlogix.htm" onclick="pageTracker._trackPageview('/outgoing/ingeardrivers.com/netlogix/netlogix.htm?referer=');">CimQuest&#8217;s NET.LOGIX product</a>.  It can act as a server and receive data directly from the PLC &#8211; either individual tags, or even arrays of UDTs.  The code on both ends is relatively simple, so all you have to pay for is the NET.LOGIX runtime license, which is cheaper than the hardware alternatives.  Note that you can also do this with PLC5 and SLC500 devices, though there&#8217;s some more effort involved.</p>
<p>I hope that&#8217;s enlightening.  This is by no means a perfect solution, but it&#8217;s reasonable for now.  It doesn&#8217;t plug the laptop hole (the programming laptop is probably still your #1 vector for malware to get into your machine network).  It&#8217;s susceptible to man-in-the-middle attacks between the router and the data collection server.  It&#8217;s susceptible to exploitable bugs in the router&#8217;s firmware.  Beware and use your own judgement.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/safer-data-collection-from-a-plc/' addthis:title='Safe(r) Data Collection from a PLC ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/industrial-automation/safer-data-collection-from-a-plc/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Internet Facing Water Management Infrastructure in Texas Exploited Easily</title>
		<link>http://www.contactandcoil.com/automation/industrial-automation/internet-facing-water-management-infrastructure-in-texas-exploited-easily/</link>
		<comments>http://www.contactandcoil.com/automation/industrial-automation/internet-facing-water-management-infrastructure-in-texas-exploited-easily/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 17:22:59 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[Industrial Automation]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=974</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/internet-facing-water-management-infrastructure-in-texas-exploited-easily/' addthis:title='Internet Facing Water Management Infrastructure in Texas Exploited Easily '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Completing the trilogy of ICS-security related blog posts, a hacker recently demonstrated how easy it was to find and log in to an internet-facing SCADA system using for water management in a town in Texas. From the article on threatpost: The hacker, using the handle &#8220;pr0f&#8221; took credit for a remote compromise of supervisory control [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/internet-facing-water-management-infrastructure-in-texas-exploited-easily/' addthis:title='Internet Facing Water Management Infrastructure in Texas Exploited Easily ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/internet-facing-water-management-infrastructure-in-texas-exploited-easily/' addthis:title='Internet Facing Water Management Infrastructure in Texas Exploited Easily '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Completing the trilogy of ICS-security related blog posts, a hacker recently demonstrated how easy it was to find and log in to an internet-facing SCADA system using for water management in a town in Texas.  From the <a href="https://threatpost.com/en_us/blogs/hacker-says-texas-town-used-three-digit-password-secure-internet-facing-scada-system-112011" onclick="pageTracker._trackPageview('/outgoing/threatpost.com/en_us/blogs/hacker-says-texas-town-used-three-digit-password-secure-internet-facing-scada-system-112011?referer=');">article on threatpost</a>:</p>
<p><i>The hacker, using the handle &#8220;pr0f&#8221; took credit for a remote compromise of supervisory control and data acquisition (SCADA) systems used by South Houston, a community in Harris County, Texas. Communicating from an e-mail address tied to a Romanian domain, the hacker told Threatpost that he discovered the vulnerable system using a scanner that looks for the online fingerprints of SCADA systems. He said South Houston had an instance of the Siemens Simatic human machine interface (HMI) software that was accessible from the Internet and that was protected with an easy-to-hack, three character password.</i></p>
<p>For those of us who design, build, and deploy systems like this, let&#8217;s ask ourselves what would happen if a serious incident happened and significant equipment damage was done, or worst case, people were seriously injured or killed.  Don&#8217;t you think the people who worked on the system would end up in court (if not in criminal court, then at least in civil court)?</p>
<p>When in doubt, don&#8217;t sit these things directly on the internet.  There are lots of secure remote access products available (Google for &#8220;VPN&#8221;).  It&#8217;s worth it.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/internet-facing-water-management-infrastructure-in-texas-exploited-easily/' addthis:title='Internet Facing Water Management Infrastructure in Texas Exploited Easily ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/industrial-automation/internet-facing-water-management-infrastructure-in-texas-exploited-easily/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Public Water Control System Attacked</title>
		<link>http://www.contactandcoil.com/automation/industrial-automation/public-water-control-system-attacked/</link>
		<comments>http://www.contactandcoil.com/automation/industrial-automation/public-water-control-system-attacked/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 03:57:47 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[Industrial Automation]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=971</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/public-water-control-system-attacked/' addthis:title='Public Water Control System Attacked '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Joe Weiss recently reported on the possible hacking of a public water SCADA system, apparently in Illinois. This attack, if it was an attack, caused damage to a pump by turning it on and off repeatedly. It seems obvious that this situation is going to be repeating itself more and more. If you&#8217;re a company [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/public-water-control-system-attacked/' addthis:title='Public Water Control System Attacked ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/public-water-control-system-attacked/' addthis:title='Public Water Control System Attacked '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Joe Weiss recently <a href="http://community.controlglobal.com/content/water-system-hack-%E2%80%93-system-broken" onclick="pageTracker._trackPageview('/outgoing/community.controlglobal.com/content/water-system-hack-_E2_80_93-system-broken?referer=');">reported</a> on the possible hacking of a public water SCADA system, apparently in <a href="http://www.cnn.com/2011/11/18/us/cyber-attack-investigation/index.html" onclick="pageTracker._trackPageview('/outgoing/www.cnn.com/2011/11/18/us/cyber-attack-investigation/index.html?referer=');">Illinois</a>.  This attack, if it was an attack, caused damage to a pump by turning it on and off repeatedly.</p>
<p>It seems obvious that this situation is going to be repeating itself more and more.  If you&#8217;re a company with industrial control systems, or you provide control system services, now&#8217;s a great time to start thinking about your control system security strategy.  Do you have the necessary skills on staff?  If not, where are you going to source them from?</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/public-water-control-system-attacked/' addthis:title='Public Water Control System Attacked ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/industrial-automation/public-water-control-system-attacked/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Finding Internet-Connected Industrial Automation Devices</title>
		<link>http://www.contactandcoil.com/automation/industrial-automation/finding-internet-connected-industrial-automation-devices/</link>
		<comments>http://www.contactandcoil.com/automation/industrial-automation/finding-internet-connected-industrial-automation-devices/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 02:13:32 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[Industrial Automation]]></category>
		<category><![CDATA[plc]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=965</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/finding-internet-connected-industrial-automation-devices/' addthis:title='Finding Internet-Connected Industrial Automation Devices '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>I think most people in our industry realize you shouldn&#8217;t connect industrial automation devices to the internet, but just in case you happen to think otherwise, here&#8217;s a quick explanation why (this is old news, by the way). You may believe that things connected to the internet are relatively anonymous. There&#8217;s no web page linking [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/finding-internet-connected-industrial-automation-devices/' addthis:title='Finding Internet-Connected Industrial Automation Devices ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/finding-internet-connected-industrial-automation-devices/' addthis:title='Finding Internet-Connected Industrial Automation Devices '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>I think most people in our industry realize you shouldn&#8217;t connect industrial automation devices to the internet, but just in case you happen to think otherwise, here&#8217;s a quick explanation why (this is old news, by the way).</p>
<p>You may believe that things connected to the internet are relatively anonymous.  There&#8217;s no web page linking to them, so how is Google going to find them, right?  </p>
<p>It turns out it&#8217;s relatively easy to find devices connected to the internet, and it&#8217;s kind of like the old movie <a href="http://www.imdb.com/title/tt0086567/" onclick="pageTracker._trackPageview('/outgoing/www.imdb.com/title/tt0086567/?referer=');">WarGames</a> where the lead character, played by Matthew Broderick, programmed his computer to dial every phone number in a specific block (555-0001, 555-0002, etc.) and record any where a modem answered.  That was called &#8220;war-dialing&#8221;.  In the age of the internet, you just start connecting to common port numbers (web servers are on port 80, etc.) on one IP address at a time, and logging what you find.  This is called port-scanning.</p>
<p>It turns out that you don&#8217;t even have to do this yourself.  One free service called <a href="http://www.shodanhq.com" onclick="pageTracker._trackPageview('/outgoing/www.shodanhq.com?referer=');">SHODAN</a> does this for you, and records everything it finds at the common port numbers (web servers, FTP servers, SSH daemons, etc.) and lets you search it just like Google.  It turns out that (a) most modern industrial equipment is including embedded web servers and/or FTP servers to allow remote maintenance, and (b) most web servers or FTP servers respond with some kind of unique &#8220;banner&#8221; when you connect to them, announcing who or what they are.</p>
<p>So, if you don&#8217;t believe that you shouldn&#8217;t be putting industrial automation equipment on the internet, here&#8217;s a little experiment you can run:</p>
<ol>
<li>Take a ControlLogix with an ENBT card and hook it directly to the internet, so it has a real IP address.</li>
<li>Wait a couple of days.</li>
<li>See if your IP address shows up on <a href="http://www.shodanhq.com/search?q=rockwell+automation" onclick="pageTracker._trackPageview('/outgoing/www.shodanhq.com/search?q=rockwell+automation&amp;referer=');">this SHODAN search page</a>.</li>
</ol>
<p>You could try the same thing with a <a href="http://www.shodanhq.com/search?q=Modicon+M340" onclick="pageTracker._trackPageview('/outgoing/www.shodanhq.com/search?q=Modicon+M340&amp;referer=');">Modicon M340</a>.</p>
<p>This <a href="http://www.shodanhq.com/search?q=Phoenix-Contact%2F1.02+%28powered+by+SpiderControl+TM%29" onclick="pageTracker._trackPageview('/outgoing/www.shodanhq.com/search?q=Phoenix-Contact_2F1.02+_28powered+by+SpiderControl+TM_29&amp;referer=');">query for Phoenix Contact</a> devices is particularly scary, as <a href="http://108.67.117.163/" onclick="pageTracker._trackPageview('/outgoing/108.67.117.163/?referer=');">one of the links is a wind turbine</a>! I was a bit scared once I opened it (it opens a publicly accessible Java applet that&#8217;s updating all the data in real-time), so I closed it.  There was no password or anything required to open the page.  At least the button that says &#8220;PLC Config.&#8221; appeared to be grayed out.  Let&#8217;s hope that means it&#8217;s protected by some kind of password&#8230; and that it&#8217;s hardened better than every single major corporation&#8217;s website was this year.</p>
<p>Just want to say thanks to <a href="http://www.digitalbond.com/" onclick="pageTracker._trackPageview('/outgoing/www.digitalbond.com/?referer=');">DigitalBond</a> for pointing out this <a href="http://www.shodanhq.com/search?q=%2FBroadWeb" onclick="pageTracker._trackPageview('/outgoing/www.shodanhq.com/search?q=_2FBroadWeb&amp;referer=');">SHODAN search</a> for all Advantech/Broadwin WebAccess deployments around the world too.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/finding-internet-connected-industrial-automation-devices/' addthis:title='Finding Internet-Connected Industrial Automation Devices ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/industrial-automation/finding-internet-connected-industrial-automation-devices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Control System Security Dilemmas</title>
		<link>http://www.contactandcoil.com/automation/industrial-automation/control-system-security-dilemmas/</link>
		<comments>http://www.contactandcoil.com/automation/industrial-automation/control-system-security-dilemmas/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 01:59:08 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[Industrial Automation]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=958</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/control-system-security-dilemmas/' addthis:title='Control System Security Dilemmas '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>It&#8217;s fascinating to watch what&#8217;s unfolding in the Industrial Control System Security front these days. Digital Bond&#8217;s SCADA Security Portal is as entertaining as any (thanks to ArchestrAnaut for pointing it out for me). A brief recap: Stuxnet makes news even in the mainstream press Siemens shrugs it off and does absolutely nothing about it [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/control-system-security-dilemmas/' addthis:title='Control System Security Dilemmas ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/control-system-security-dilemmas/' addthis:title='Control System Security Dilemmas '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>It&#8217;s fascinating to watch what&#8217;s unfolding in the Industrial Control System Security front these days.  <a href="http://www.digitalbond.com/" onclick="pageTracker._trackPageview('/outgoing/www.digitalbond.com/?referer=');">Digital Bond&#8217;s SCADA Security Portal</a> is as entertaining as any (thanks to <a href="http://archestranaut.avidsolutionsinc.com/" onclick="pageTracker._trackPageview('/outgoing/archestranaut.avidsolutionsinc.com/?referer=');">ArchestrAnaut</a> for pointing it out for me).</p>
<p>A brief recap:</p>
<ul>
<li>Stuxnet makes news even in the mainstream press</li>
<li>Siemens shrugs it off and does absolutely nothing about it</li>
<li>Security researchers, smelling smoke, start poking around PLC security and find it completely lacking</li>
<li>Details about wide open backdoors inserted into common PLC hardware has now been published online</li>
</ul>
<p>Things are not moving in a positive direction either.  Those security &#8220;researchers&#8221;, many of whom seem to be selling security solutions, are digging up ways to compromise PLCs and they&#8217;re posting all that information online.  Now if this forces automation vendors to stop looking the other way and start taking security seriously, then I think it can only be a good move in the long term, but you have to admit it feels a little like a tire salesman throwing roofing nails on the road in front of his store.</p>
<p>All of this makes you wonder, what&#8217;s a small manufacturer to do?  As always, businesses need to weigh the risks and the costs and act accordingly.  This isn&#8217;t easy for the decision makers.  On one side there&#8217;s enormous pressure to network all of the systems together to facilitate the fast flow of information between the ERP, MES, and Plant Floor layers, but on the other side, every interconnection increases the risk of catastrophic failure.  I&#8217;ve personally seen Windows worms take down automation networks.  In the next few years I&#8217;m certain we&#8217;re going to see worms that can jump from PLC to PLC and probably ones that can cross from Windows to PLC and back.</p>
<p>Properly segregating networks and then managing them is a big IT project.  That means it needs scarce resources, and those resources aren&#8217;t making money for the company.  Big manufacturers have enough cash flow (and have been bitten enough times) that they can allocate resources for this kind of project, but small manufacturers are a different story.</p>
<p>Small companies generally lack the specialists needed to implement such systems.  Almost by definition, generalists serve in small companies and specialists gravitate towards large companies.  Small companies can only implement commodity solutions (unless it&#8217;s part of their core business strength).  That means that while we&#8217;re all worried about what might happen if a major utility or top tier manufacturer gets hit with an automation security breach, the fact is it&#8217;s more likely that small manufacturers will be the first ones hit by a fast-spreading generalized threat.  The economic impact could be just as large&#8230; those small manufacturers are feeding parts up the supply chain, and in this just-in-time environment it doesn&#8217;t take much to cause a major interruption. </p>
<p>What&#8217;s the solution?</p>
<p>Short of the automation vendors waking up and making secure products, we need better (and less expensive) tools for securely connecting our PLCs.  I hate to say it, but you can&#8217;t implement modern control systems without knowing the basics of network security, VLANs, and access control.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/control-system-security-dilemmas/' addthis:title='Control System Security Dilemmas ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/industrial-automation/control-system-security-dilemmas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Outdoor G-Scale Garden Railroad: Detecting the Trains</title>
		<link>http://www.contactandcoil.com/automation/home-automation/outdoor-g-scale-garden-railroad-detecting-the-trains/</link>
		<comments>http://www.contactandcoil.com/automation/home-automation/outdoor-g-scale-garden-railroad-detecting-the-trains/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 02:09:20 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[block-occupancy-detector]]></category>
		<category><![CDATA[g-scale]]></category>
		<category><![CDATA[garden-railroad]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=933</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/home-automation/outdoor-g-scale-garden-railroad-detecting-the-trains/' addthis:title='Outdoor G-Scale Garden Railroad: Detecting the Trains '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>A little while ago I told you about an ongoing project to automate my parents&#8217; G-Scale outdoor model railroad. Today I&#8217;m going to add a bit more detail about the solution: specifically, how do you sense the location of the trains? Layout The layout is broken into 3 lines: a &#8220;Figure 8&#8243; line, a &#8220;Point-to-Point&#8221; [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/home-automation/outdoor-g-scale-garden-railroad-detecting-the-trains/' addthis:title='Outdoor G-Scale Garden Railroad: Detecting the Trains ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/home-automation/outdoor-g-scale-garden-railroad-detecting-the-trains/' addthis:title='Outdoor G-Scale Garden Railroad: Detecting the Trains '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>A little while ago I told you about an ongoing project to <a href="http://www.contactandcoil.com/automation/home-automation/sneak-peak-outdoor-model-railroad-automation/">automate my parents&#8217; G-Scale outdoor model railroad</a>.  Today I&#8217;m going to add a bit more detail about the solution: specifically, how do you sense the location of the trains?</p>
<h2>Layout</h2>
<p>The layout is broken into 3 lines: a &#8220;Figure 8&#8243; line, a &#8220;Point-to-Point&#8221; line, and a &#8220;Main Line&#8221;, which has various track switches, sidings, etc.  The interesting thing about the Figure 8 and Point-to-Point lines is that they cross, and one of the goals is to prevent trains from colliding.</p>
<p>Some other goals include:</p>
<ul>
<li>The point-to-point should start at one station, move to the other station, stopping out of site for a while.  It should stop at each end-station for an adjustable period of time, and return.</li>
<li>The Point-to-Point and Figure 8 lines have uphill and downhill sections, so the speed needs to be varied in these sections.</li>
<li>The Figure 8 line has two programmable stops, but the train shouldn&#8217;t necessarily stop at both stops every time.</li>
<li>We want to run multiple trains on the main line.  Some will be stopped on a siding while others are running, and then they will switch.</li>
<li>All tracks need the ability to be manually operated.</li>
</ul>
<div id="attachment_942" class="wp-caption aligncenter" style="width: 410px"><img src="http://www.contactandcoil.com/wp-content/uploads/Stans-Speed-Shop.jpg" alt="" title="Stan&#039;s Speed Shop" width="400" height="270" class="size-full wp-image-942" /><p class="wp-caption-text">The Figure 8 Line from behind &quot;Stan&#039;s Speed Shop&quot;</p></div>
<h2>Power</h2>
<p>All existing locomotives in the system use &#8220;track power&#8221; (DC voltage applied across the two rails of the track).  The voltage applied to the track is applied to the motors in the locomotives, and this controls the speed.</p>
<p>There are some advantages to this: it allows you to run &#8220;stock&#8221; (unmodified) engines, and it&#8217;s compatible if someone wants to bring over a &#8220;guest&#8221; engine (either a track powered or battery powered model).  It&#8217;s also compatible with &#8220;DCC&#8221; controlled locomotives which, as I understand it, are backwards compatible with track powered systems.</p>
<h2>Control?</h2>
<p>Whether you use a PLC or a PC for control, being able to control the voltage to a track (to control a motor speed) is pretty much a solved problem, so let&#8217;s assume we can do that for now.  The main problem is location sensing.  In order to tell the locomotives to stop, wait, start, etc., you need to know where they are.</p>
<p>Your first thought, as a controls engineer, is some kind of proximity sensor.  Unfortunately there are some significant problems with this:</p>
<ul>
<li>Metal-sensing proxes are expensive, and the locomotives are mostly plastic.  We&#8217;re trying to avoid retrofitting all locomotives here.  You might be able to sense the wheels.</li>
<li>Photo-sensitive (infrared) detectors, either retro-reflective or thru-beam type, are popular on indoor layouts, but they apparently don&#8217;t work well outdoors because sunlight floods them with infrared.</li>
<li>Reed switches are popular, but you need to fit all your engines with magnets, and they are a bit flaky.  Magnets and reed switches actually work well if you have the magnet on the track, and the reed switch mounted to the engine, in order to trigger whistles, etc., but even then they&#8217;re not 100% reliable, in our experience.</li>
<li>All proximity detection strategies require you to run two wires to every sensor, which is a lot of extra wiring.  Remember, there are lots of little critters running around these layouts, and they tend to gnaw on wires.  Fewer wires is better.</li>
<li>Having sensors out in the layout itself means you&#8217;re exposing electrical equipment to an outdoor environment.  At least you can take the locomotives in at night, but the sensors have to live out there year-long.  I&#8217;m a bit concerned by that thought.</li>
</ul>
<h2>Solution: Block Occupancy Detection</h2>
<p>The solution we found was a technique called &#8220;block occupancy detection.&#8221;  This is a fairly common method of detection in some layouts.  A couple of years ago, I built a simple controller that solved the crossing detection problem between the Figure 8 and Point-to-Point lines using block detection to know where the trains were.  It worked great, so we decided to use it for the entire system.</p>
<p>Here&#8217;s how it works: you divide up your track layout into &#8220;blocks&#8221;.  Blocks can be any size, but they are typically anywhere from about 4 feet long, up to the length of a train, or a bit more.  One rail on the line is &#8220;common&#8221; and isn&#8217;t broken up.  The other rail is the one you cut into electrically isolated sections.</p>
<p>So, the wire from the common side of your speed controller goes directly to the common rail, as it did before.  However, you have to split the &#8220;hot&#8221; side of your speed controller into as many circuits as you have blocks.  Each block is fed from a separate circuit, which means you have to run a &#8220;home run&#8221; wire from each block back to your power supply.</p>
<p>Then, the &#8220;block occupancy detection&#8221; circuit is wired in <i>series</i> with each block circuit (between the speed controller and the block).  Here&#8217;s what one block detection circuit looks like:</p>
<p><a href="http://www.contactandcoil.com/wp-content/uploads/One-Block-Occupancy-Detector.png"><img src="http://www.contactandcoil.com/wp-content/uploads/One-Block-Occupancy-Detector-300x219.png" alt="" title="One Block Occupancy Detector" width="300" height="219" class="aligncenter size-medium wp-image-934" /></a></p>
<p>This is an interesting circuit.  On the left you can see a bridge rectifier, with the + and &#8211; terminals curiously shorted out.  This is a hacked use of the device.  All we really care about is that we want to create a voltage drop across the device when current is flowing through the wire to that block.  One diode creates a voltage drop of 0.6 to 0.7 V, and the way we&#8217;ve wired it, whether the speed controller is in forward or reverse, the current always has to take a path through two forward-biased diodes.  That means, when current is flowing to the block (i.e. there&#8217;s an engine in that block) then we get a voltage drop of 1.2 to 1.4 V across this device (or -1.2 to -1.4 V if it&#8217;s in reverse).  A standard bridge rectifier is just a handy component to use because it&#8217;s readily available in high current ratings for a couple of dollars each.</p>
<p>We&#8217;re using that constant voltage to drive the input side of an LTV-824 opto-isolator chip.  Notice that it&#8217;s a bi-directional opto-isolator, so it works in forward or reverse too.  On the output side of the opto-isolator, we can run that directly into a PLC input (the input we&#8217;re working with here is sourcing and has a pull-up resistor built-in).</p>
<p>If you&#8217;re using a regular straight-DC analog controller, that&#8217;s all you need, but in this case we&#8217;re using a pulse-width-modulated (PWM) speed controller.  That means the PLC input is actually pulsing on and off many times a second, and if you&#8217;re at a slow speed (low duty cycle), then the PLC may not pick up the signal during it&#8217;s I/O scan.  For that reason, I found that sticking a 1 uF capacitor across the output will hold the PLC input voltage low long enough for it to be detected quite reliably.  This, of course, depends on your pull-up resistor, so a little bigger capacitor might work better too.</p>
<h2>Filtering in the PLC</h2>
<p>This worked quite well, but needed a bit of filtering of the signal in the PLC.  The input isn&#8217;t always on 100% while the locomotive is in the block, so once a block is latched as &#8220;occupied&#8221;, I use a 1-second timer of not seeing the input on before I decide that the block is clear.  </p>
<p>I also have to see an adjacent block occupied before I clear a block.  That solves the problem of &#8220;remembering&#8221; where an engine is when it stops on the track and there&#8217;s no longer any current flowing to that block.</p>
<p>Of course, this means you can end up with &#8220;ghosts&#8221; (occupied blocks that are no longer truly occupied because someone picked up a locomotive and physically moved it).  I provided some &#8220;ghost-buster&#8221; screens where you can go in and manually clear occupied blocks in that case.</p>
<h2>Pros and Cons</h2>
<p>I like this solution for several reasons: all the electronics are at the control panel, not out in the field (except the wires to each block, and the track itself).  Also, the components for one block detector are relatively inexpensive, and we&#8217;re working on a bit of a budget here (it is a hobby, after all).  I think reliability and simplicity also fall into the Pro column.  As long as you can get a locomotive to move on a segment of track (the track needs cleaning from time to time), then the PLC should be able to detect it.  You don&#8217;t need to deal with dirty photo-detectors or extra sensor wires.  The same wire that carries the current to the block carries the signal that the block is occupied.</p>
<p>On the other hand, there are some negatives.  This system, as designed, has 21 different blocks, which means 21 home-run wires, buried in the ground, in addition to the commons (plus the track switch wires, but that&#8217;s a story for another post).  Also on the negative side, you don&#8217;t get 100% accurate position sensing.  Actually, you get pretty accurate sensing at the edges of the blocks (you&#8217;re pretty sure you know where the locomotive is the moment is crosses from one block to the next), but you&#8217;re not sure where it is in the middle of the block.</p>
<p>You do have to make other compromises in the track system.  There are some accessories (like lighted end-stops) that draw power from the track.  This current draw makes that particular block show up as occupied all the time.  You either have to modify the accessory to use battery power, or you have to run extra wires to that accessory.</p>
<p>You also have to take the length of train into account.  You know which blocks are occupied by current-drawing locomotives and cars (like lighted observation cars and caboose&#8217;s), but not every car draws power.  Your design and control system needs to take into account whether or not your train will occupy more than one block at once, and whether the end of the train will be detected.  This is most important when trying to run multiple trains on one track, where you want the back train to avoid running into the end of the first train.</p>
<h2>Next</h2>
<p>I hope that&#8217;s been educational.  <img src='http://www.contactandcoil.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   I&#8217;m still not done programming the PLC, and I&#8217;m waiting for a component to arrive for the throttle controller right now.  I&#8217;ll post more information over the next few weeks.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/home-automation/outdoor-g-scale-garden-railroad-detecting-the-trains/' addthis:title='Outdoor G-Scale Garden Railroad: Detecting the Trains ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/home-automation/outdoor-g-scale-garden-railroad-detecting-the-trains/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sometimes it&#8217;s Better to Repeat Yourself</title>
		<link>http://www.contactandcoil.com/automation/industrial-automation/sometimes-its-better-to-repeat-yourself/</link>
		<comments>http://www.contactandcoil.com/automation/industrial-automation/sometimes-its-better-to-repeat-yourself/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 16:56:04 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[Industrial Automation]]></category>
		<category><![CDATA[dry-principle]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=924</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/sometimes-its-better-to-repeat-yourself/' addthis:title='Sometimes it&#8217;s Better to Repeat Yourself '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>In programming, we have a principle called Don&#8217;t Repeat Yourself (DRY). It&#8217;s a very important idea, and I&#8217;d argue that most of the advances in programming environments over the years have been in support of this principle and its related principle, Once and Only Once (OAOO). Unfortunately, like every &#8220;principle&#8221;, it eventually takes on the [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/sometimes-its-better-to-repeat-yourself/' addthis:title='Sometimes it&#8217;s Better to Repeat Yourself ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/industrial-automation/sometimes-its-better-to-repeat-yourself/' addthis:title='Sometimes it&#8217;s Better to Repeat Yourself '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>In programming, we have a principle called <a href="http://c2.com/cgi/wiki?DontRepeatYourself" onclick="pageTracker._trackPageview('/outgoing/c2.com/cgi/wiki?DontRepeatYourself&amp;referer=');">Don&#8217;t Repeat Yourself</a> (DRY).  It&#8217;s a very important idea, and I&#8217;d argue that most of the advances in programming environments over the years have been in support of this principle and its related principle, <a href="http://c2.com/xp/OnceAndOnlyOnce.html" onclick="pageTracker._trackPageview('/outgoing/c2.com/xp/OnceAndOnlyOnce.html?referer=');">Once and Only Once</a> (OAOO).</p>
<p>Unfortunately, like every &#8220;principle&#8221;, it eventually takes on the level of dogma, and the people spouting it sometimes forget why it exists.  These principles aren&#8217;t ends in themselves; they&#8217;re not self-justified.  They are general principles to follow, but only when they support the end-goal of solving problems in more efficient, and more maintainable ways.</p>
<p>Let me give you a very simplified example of how it can be carried to far.  Consider the following declarations in C#:</p>
<p>const int MOTOR_1_START_TIMEOUT_MS = 5000;<br />
const int MOTOR_2_START_TIMEOUT_MS = 5000;</p>
<p>Consider that I could write:</p>
<p>const int MOTOR_1_START_TIMEOUT_MS = 5000;<br />
const int MOTOR_2_START_TIMEOUT_MS = MOTOR_1_START_TIMEOUT_MS;</p>
<p>or&#8230;</p>
<p>const int MASTER_MOTOR_TIMEOUT_MS = 5000;<br />
const int MOTOR_1_START_TIMEOUT_MS = MASTER_MOTOR_TIMEOUT_MS;<br />
const int MOTOR_2_START_TIMEOUT_MS = MASTER_MOTOR_TIMEOUT_MS;</p>
<p>Notice that all 3 versions accomplish the same end-result, but they are semantically different.  The first version means that the two motors have independent timeout values, and they&#8217;re just co-incidentally the same.  The second says, &#8220;motor 2&#8242;s timeout <strong>must</strong> be the same as motor 1&#8242;s timeout.&#8221;  The third says that both motors must have the same timeout.</p>
<p>In my opinion, any of these three versions <i>might</i> be correct for various systems involving two motors.  However, if you follow the DRY principle without thinking about it, you&#8217;ll assert that the first version is incorrect.  In fact they&#8217;d probably say the only correct version should be:</p>
<p>const int MOTOR_TIMEOUT_MS = 5000;</p>
<p>(&#8230;ignoring, for the moment, that it should probably be a configurable value rather than a constant.)</p>
<p>Why does this simple example matter?  Consider the case of a PLC-based control system with 10 motors.  Let&#8217;s say at the start that all the motors, and all the drives running them, are identical.  If you&#8217;re familiar with my philosophy of PLC programming, you know that my default solution for this would be to have 10 ladder logic routines, each called MOTOR_01, MOTOR_02, etc.  Each routine would basically be a copy.  That really doesn&#8217;t follow the DRY principle, does it?  Certainly no, not at face value.</p>
<p>You might not believe it, but I get the occasional &#8220;hate mail&#8221; to my blog&#8217;s email address because of some of my technical opinions here.  The most recent one, comically, referred to me (and all PLC programmers for that matter) as &#8220;dinosaurs&#8221;.  I&#8217;m not sure what the rest of the message said, because if you can&#8217;t be polite, I&#8217;m not going to bother listening to you.  However, I believe it&#8217;s this flagrant violation of things like the DRY principle that really rubs traditional PC programmers the wrong way when you start to talk about the principles of PLC programming.</p>
<p>Of course, my views about PLC programming are just that &#8211; general principles that need to be evaluated in the light of each and every project.  I&#8217;m just asserting that <i>most</i> of the time you should be following a principle of a one-to-one mapping between ladder logic and real-world hardware.  That doesn&#8217;t mean it&#8217;s an unbreakable rule.</p>
<p>Going back to the 10 motor example, the way you structure your program should be based on a decision you make about anticipated future changes to the system.  </p>
<p>If you write one generic routine for controlling a motor, and you call it 10 times, you&#8217;re saying, &#8220;I always expect all 10 of these motors to behave in an identical way for all of the future.&#8221;  Of course, you can allow variations, but you have to do that by passing in parameters for each instance.  You have to be explicit about what can vary.  Adding new parameters is typically a harder task than just modifying one of the 10 existing motor routines when you need to change the behavior of one motor.</p>
<p>On the other hand, if you follow my principle of 10 motor routines for 10 motors, you&#8217;re saying, &#8220;I expect that we&#8217;ll rarely need to make a sweeping change to all 10 motor control routines, but that we <i>are</i> likely to modify one or two routines to make them perform differently than the others.&#8221;  I personally believe this is usually closer to the truth.  As a system ages, perhaps one motor drive will blow, and you can&#8217;t buy the original drive anymore, so you have to replace it with a new one that has different control signals.  That&#8217;s a fairly typical scenario, in my experience.  Also, even though you might have 10 identical drives and motors, the process may or may not be identical for each motor.  They may perform vastly different functions, and it&#8217;s likely that you&#8217;ll want to change just one or two of them to access more advanced features of the drive when you refine the process.  Of course, I also like that with a one-to-one mapping in a PLC, troubleshooting becomes much easier because with online monitoring you can see each control routine executing just for that motor.  You can make temporary changes just to one motor routine to bypass a faulted drive, or to do a million other changes that you&#8217;ll never be able to predict when you&#8217;re writing the logic.  </p>
<p>The fact is, we&#8217;re physically limited by the number of drives we have.  The amount of time it takes to make a change to all 10 motor control routines is tiny compared to how long it takes to make physical changes to 10 drives.  This effort scales with the size of the system.  In PC programming, you can have a system with millions, even billions, of objects, but in the PLC world, you&#8217;re limited by physical reality.  The consequences of repeating yourself aren&#8217;t always as great, and you need to take that into account, and weigh it against your other goals.</p>
<p>That doesn&#8217;t mean I can&#8217;t imagine a case where you really want to assert that the motors all have to operate identically, all of the time, forever in the future.  There are systems with load sharing drives where the system wouldn&#8217;t operate if you mismatched the drives or motors.  That&#8217;s a design decision <i>you</i> have to make.  Principles are only there for guidance, but they are not absolute rules, and they shouldn&#8217;t be treated that way.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/industrial-automation/sometimes-its-better-to-repeat-yourself/' addthis:title='Sometimes it&#8217;s Better to Repeat Yourself ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/industrial-automation/sometimes-its-better-to-repeat-yourself/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sneak Peak: Outdoor Model Railroad Automation</title>
		<link>http://www.contactandcoil.com/automation/home-automation/sneak-peak-outdoor-model-railroad-automation/</link>
		<comments>http://www.contactandcoil.com/automation/home-automation/sneak-peak-outdoor-model-railroad-automation/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 02:36:00 +0000</pubDate>
		<dc:creator>Scott Whitlock</dc:creator>
				<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[g-scale]]></category>
		<category><![CDATA[garden-railroad]]></category>

		<guid isPermaLink="false">http://www.contactandcoil.com/?p=914</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/home-automation/sneak-peak-outdoor-model-railroad-automation/' addthis:title='Sneak Peak: Outdoor Model Railroad Automation '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Several years ago my parents decided they were going to build a Garden Railroad in their back yard. It&#8217;s been an ongoing hobby project since then, and it&#8217;s been growing substantially every year: This is &#8220;G Scale&#8221; (around 1:22.5 scale) outdoor model railroading. It&#8217;s really a combination of three things: model railroading, building miniatures, and [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/home-automation/sneak-peak-outdoor-model-railroad-automation/' addthis:title='Sneak Peak: Outdoor Model Railroad Automation ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.contactandcoil.com/automation/home-automation/sneak-peak-outdoor-model-railroad-automation/' addthis:title='Sneak Peak: Outdoor Model Railroad Automation '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Several years ago my parents decided they were going to build a <a href="http://en.wikipedia.org/wiki/Garden_railway" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Garden_railway?referer=');">Garden Railroad</a> in their back yard.  It&#8217;s been an ongoing hobby project since then, and it&#8217;s been growing substantially every year:</p>
<div id="attachment_915" class="wp-caption aligncenter" style="width: 410px"><img src="http://www.contactandcoil.com/wp-content/uploads/10.jpg" alt="" title="Garden Railway" width="400" height="300" class="size-full wp-image-915" /><p class="wp-caption-text">West Station on the Point to Point Line</p></div>
<p>This is &#8220;G Scale&#8221; (around 1:22.5 scale) outdoor model railroading.  It&#8217;s really a combination of three things: model railroading, building miniatures, and gardening.  This recent weekend was the local club&#8217;s open-house day, and I was invited along to see many of the layouts.  Each layout kind of emphasizes its own focus: some are more focused on gardening, others on the miniatures, etc.</p>
<p>Anyone who does anything remotely related to computers knows that every relative you have thinks you know everything there is to know about computers, and you&#8217;re destined to spend the rest of your family holidays removing spyware and running <a href="http://www.piriform.com/CCLEANER" onclick="pageTracker._trackPageview('/outgoing/www.piriform.com/CCLEANER?referer=');">ccleaner</a> on their computers, not to mention reassuring them that it&#8217;s OK to reboot the computer to see if the problem goes away.</p>
<p>Being in industrial automation, though, you never get people asking you to automate something; it&#8217;s just a little bit too abstract for most people to grasp.  However, when your parents get themselves a model train set, they may not know exactly what you do for a living, but they certainly know that if you can program conveyors, robots, and cranes, you should be able to figure out how to make their trains do what they want them to do.  Automatically.</p>
<p>Of course, as a control systems guy, you can&#8217;t look at your parents&#8217; 24V model train set and not think about how you&#8217;d hook up a PLC to it.  Especially when they offer to finance the project.</p>
<p>I&#8217;m happy to report that we&#8217;re progressing well.  The goal is to have it running in fully automatic mode before the end of the month.  I&#8217;ll post some pictures, hopefully some videos, and some technical information about how it was accomplished.  Stay tuned.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.contactandcoil.com/automation/home-automation/sneak-peak-outdoor-model-railroad-automation/' addthis:title='Sneak Peak: Outdoor Model Railroad Automation ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.contactandcoil.com/automation/home-automation/sneak-peak-outdoor-model-railroad-automation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

