Friday, April 15, 2011

Driving DTR with System.IO.Ports.SerialPort in .NET

I have a sensor that uses RS232 over USB to receive commands from a PC and send data to the PC.

The sensor needs to be reset (using the DTR line) before a command can be sent to it.

I tried to use the built-in .net serial port, but it does not seem to drive the DTR line as expected. I am beginning to wonder if the DTREnable property actually drives the DTR pin, or if it only enables it during handshaking.

Other SerialPort implementations that I could find on the web also uses the Win32 API, but I find it very difficult to close the port with these implementations. If I step through code I can see it gets stuck on a WaitOne command.

Anyone know how to drive DTR with System.IO.Ports.SerialPort? Or know of a good component out there?

From stackoverflow
  • i wrote this to test DTR. it works as expected using my USB serialport adapter. i checked it by attaching the cable to my DataTracker (RS232 breakout box, with LED's). DTR does change.

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        SerialPort1.Close()
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SerialPort1.PortName = "COM5"
        SerialPort1.Open()
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SerialPort1.RtsEnable = True
    
        Debug.WriteLine("DTR +")
        System.Threading.Thread.Sleep(1000)
    
        SerialPort1.DtrEnable = True 'DTR -
        Debug.WriteLine("DTR -")
        System.Threading.Thread.Sleep(1000)
    
        SerialPort1.DtrEnable = False 'DTR +
        Debug.WriteLine("DTR +")
        System.Threading.Thread.Sleep(1000)
    
        SerialPort1.RtsEnable = False
    End Sub
    
    Ries : Thanks for the feedback. It must be something else that is keeping my sensor from responding then. I have to say the description attached to the DTREnabled property is not that clear. It says something to the effect of "Enables DTR during handshaking".
  • Check the pinout of the cable. It might be contributing to the problem.

    Cable Pinouts

    devstuff : Also be aware that some cheaper serial cables do not contain wires connected to all pins - some are only 3 wire (Rx, Tx, Ground) so DTR/CTS/etc. don't work.

0 comments:

Post a Comment