2009-03-20 10 views
3

私は、USB経由でRS232を使用してPCからコマンドを受け取り、データをPCに送信するセンサーを持っています。.NETでSystem.IO.Ports.SerialPortを使用してDTRを駆動する

センサを送信する前にセンサをリセットする必要があります(DTR回線を使用)。

組み込みの.netシリアルポートを使用しようとしましたが、期待通りにDTR回線を駆動していないようです。私はDTREnableプロパティが実際にDTRピンを駆動するのか、それともハンドシェイク中にのみイネーブルにするのか不思議に思っています。

ウェブ上にあるその他のSerialPort実装でもWin32 APIが使用されていますが、これらの実装ではポートを閉じるのが非常に難しいと感じています。私がコードをステップ実行すると、WaitOneコマンドで突っついているのがわかります。

誰でも、DTRをSystem.IO.Ports.SerialPortで駆動する方法を知っていますか?そこに良いコンポーネントがあるのか​​知っていますか?

答えて

4

DTRをテストするためにこれを書いています。それは私のUSBシリアルポートアダプタを使用して期待どおりに動作します。私はDataTracker(RS232ブレイクアウトボックス、LED付き)にケーブルを接続してチェックしました。 DTRが変化します。

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 
+0

フィードバックに感謝します。私のセンサーが応答しないようにしなければなりません。私はDTREnabledプロパティに添付されている説明がはっきりしていないと言わなければなりません。 「ハンドシェイク中にDTRを有効にする」という効果があります。 – Ries

0

ケーブルのピン配列を確認してください。問題に寄与している可能性があります。

Cable Pinouts

+0

また、より安価なシリアルケーブルの中には、すべてのピンに接続されたワイヤが含まれていないものもあります(DTR/CTS /などの3線式(Rx、Tx、Ground)動作しません。 – devstuff

関連する問題