Вопрос

У меня есть датчик, который использует RS232 через USB для получения команд от ПК и отправки данных на ПК.

Датчик необходимо сбросить (с помощью линии DTR), прежде чем на него можно будет отправить команду.

Я пытался использовать встроенный последовательный порт .net, но, похоже, он не управляет линией DTR должным образом.Я начинаю задаваться вопросом, действительно ли свойство DTREnable управляет выводом DTR или оно включает его только во время установления связи.

Другие реализации SerialPort, которые я смог найти в Интернете, также используют API Win32, но мне очень сложно закрыть порт с помощью этих реализаций.Если я пройдусь по коду, я увижу, что он застревает в команде WaitOne.

Кто-нибудь знает, как управлять DTR с помощью System.IO.Ports.SerialPort?Или знаете какой-нибудь хороший компонент?

Это было полезно?

Решение

я написал это, чтобы проверить DTR.он работает, как и ожидалось, с использованием моего адаптера последовательного порта USB.Я проверил это, подключив кабель к моему DataTracker (коммутационная коробка RS232 со светодиодами).ДТР меняется.

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

Другие советы

Проверьте распиновку кабеля.Возможно, это усугубляет проблему.

Распиновка кабеля

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top