<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Matias Paterlini : .NET</title><link>http://weblogs.asp.net/paterlinimatias/archive/tags/.NET/default.aspx</link><description>Tags: .NET</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Working with USB to Serial port adapter on .NET</title><link>http://weblogs.asp.net/paterlinimatias/archive/2008/01/16/working-with-usb-to-serial-port-adapter-on-net.aspx</link><pubDate>Wed, 16 Jan 2008 17:56:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5609911</guid><dc:creator>paterlinimatias</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/paterlinimatias/rsscomments.aspx?PostID=5609911</wfw:commentRss><comments>http://weblogs.asp.net/paterlinimatias/archive/2008/01/16/working-with-usb-to-serial-port-adapter-on-net.aspx#comments</comments><description>&lt;p&gt;&lt;font size="-1"&gt;&lt;b&gt;You can't&lt;/b&gt; solve a &lt;b&gt;problem&lt;/b&gt; with the same kind of thinking that created it. — &lt;b&gt;Albert Einstein&lt;/b&gt; (1879-1955)&lt;/font&gt; &lt;br&gt;&lt;/p&gt;&lt;p&gt;Yesterday I spent a lot of time trying to get a speed radar to work on my .NET application. Every test was giving us diferent results. We made hundreds of tests, but every time we thought we found the problem, then the results of the test changed again.&lt;/p&gt;&lt;p&gt;So If you're working with USB to Serial ports using some devices (like a Decatur speed radar in my case), and you're getting some difficulties, there are some things that you can do to isolate the problem&lt;/p&gt;&lt;p&gt;&lt;b&gt;FIRST OF ALL:&lt;/b&gt; Test the application on a computer that has a serial port, and connect the device directly without the USB to SERIAL adapter.&lt;br&gt;&lt;/p&gt;&lt;p&gt;If the problem is sitll in there, well, you should check the power of the device, or some kind of bug in the program.&lt;/p&gt;&lt;p&gt;&lt;b&gt;BUT&lt;/b&gt; if the problem is gone, there are two things that you should know.&lt;/p&gt;&lt;p&gt;&amp;nbsp; 1) For some reason, some adapters can add some caracters like "\r" right before or after the content that is sent from the device.&lt;/p&gt;&lt;blockquote&gt;So, as a rule, every time you make a ReadLine through a Serial port connection you should trim the data received.&lt;p&gt;Example:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt; String data = sp.ReadLine().Trim();&amp;nbsp;&amp;nbsp;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // (Where sp is the serial port connection)&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;b&gt;&amp;nbsp; sp.ReadExisting();&lt;/b&gt;&lt;br&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;2) Some devices can connect with different baud speeds, but after
the tests, we came to the conclusion that In spite of using the same model of devices, some of them should be connected with
different baud Speeds. &lt;b&gt;So, How do we know which speed we should use? we just keep testing! :).&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; When you connect to a serial port with a baud speed that is not the one that likes to the device, probably it will let you open the port without any error, warning or exception, but once you're connected, if you try to make a sp.ReadLine() it will throw an Exception like System.TimeOutException (then you know you're probably working on a wrong baud speed).&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SO, What do we do? ...well, you can try something like this&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;b&gt;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String data = sp.ReadLine().Trim();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp.ReadExisting();&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp; &amp;nbsp;  // Here you process the information received.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (TimeoutException tex)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String p = tex.Message;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  // here you close the connection, and open it again with a different baud speed&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (sp.IsOpen)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp.Close();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sp.BaudRate == 9600)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp.BaudRate = 115200;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sp.BaudRate = 9600;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sp.Open();&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception exc)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp; Debug.WriteLine(exc.Message);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Any comments, questions and suggestions, fell free to contact me at: paterlinimatias (at) gmail (dot) com&lt;br&gt;&lt;/p&gt;&lt;p&gt;Hope That Helps A Little!!!&lt;/p&gt;&lt;p&gt;Matias Paterlini&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5609911" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/WPF/default.aspx">WPF</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Vista/default.aspx">Vista</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Infocard/default.aspx">Infocard</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Commerce+Server/default.aspx">Commerce Server</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/WinFX/default.aspx">WinFX</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/.NET+FAQ/default.aspx">.NET FAQ</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Atlas/default.aspx">Atlas</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Web+Services/default.aspx">Web Services</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Agile/default.aspx">Agile</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/CLR/default.aspx">CLR</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Biztalk/default.aspx">Biztalk</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/BCL/default.aspx">BCL</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Avalon/default.aspx">Avalon</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/WWF/default.aspx">WWF</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Content+Management+Server/default.aspx">Content Management Server</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Sharepoint/default.aspx">Sharepoint</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Mobile/default.aspx">Mobile</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/IIS/default.aspx">IIS</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Crossbow/default.aspx">Crossbow</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/paterlinimatias/archive/tags/SQL+Server/default.aspx">SQL Server</category></item></channel></rss>