Управление DTR с помощью System.IO.Ports.SerialPort в .NET
-
21-08-2019 - |
Вопрос
У меня есть датчик, который использует 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
Другие советы
Проверьте распиновку кабеля.Возможно, это усугубляет проблему.