2009-03-20 9 views
3

J'ai un capteur qui utilise RS232 via USB pour recevoir des commandes d'un PC et envoyer des données au PC.Piloter DTR avec System.IO.Ports.SerialPort dans .NET

Le capteur doit être réinitialisé (à l'aide de la ligne DTR) avant qu'une commande puisse lui être envoyée.

J'ai essayé d'utiliser le port série .net intégré, mais il ne semble pas piloter la ligne DTR comme prévu. Je commence à me demander si la propriété DTREnable entraîne réellement la broche DTR, ou si elle ne l'active que lors de l'établissement d'une liaison.

D'autres implémentations SerialPort que j'ai pu trouver sur le web utilisent également l'API Win32, mais je trouve très difficile de fermer le port avec ces implémentations. Si je parcours le code, je peux le voir coincé sur une commande WaitOne.

Quelqu'un sait comment conduire DTR avec System.IO.Ports.SerialPort? Ou connaissez-vous un bon composant là-bas? Je l'ai écrit pour tester DTR

Répondre

4

cela fonctionne comme prévu en utilisant mon adaptateur USB serialport. Je l'ai vérifié en attachant le câble à mon DataTracker (boîte de dérivation RS232, avec LED). DTR 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 
+0

Merci pour vos commentaires. Ce doit être quelque chose d'autre qui empêche mon capteur de répondre alors. Je dois dire que la description attachée à la propriété DTREnabled n'est pas si claire. Il dit quelque chose à l'effet de "Active DTR pendant handshaking". – Ries

0

Vérifiez le brochage du câble. Cela pourrait contribuer au problème.

Cable Pinouts

+0

Sachez également que certains câbles série moins chers ne contiennent pas de fils connectés à toutes les broches - certains sont à 3 fils (Rx, Tx, Ground), donc DTR/CTS/etc. ne fonctionne pas. – devstuff