在 .NET 中使用 System.IO.Ports.SerialPort 驱动 DTR

发布于 2024-07-16 02:58:58 字数 364 浏览 6 评论 0原文

我有一个传感器,它使用 USB 上的 RS232 接收来自 PC 的命令并向 PC 发送数据。

在向传感器发送命令之前,需要重置传感器(使用 DTR 线)。

我尝试使用内置的.net串行端口,但它似乎没有按预期驱动DTR线。 我开始怀疑 DTREnable 属性是否真正驱动 DTR 引脚,或者它是否仅在握手期间启用它。

我在网上找到的其他 SerialPort 实现也使用 Win32 API,但我发现使用这些实现关闭端口非常困难。 如果我单步执行代码,我可以看到它卡在 WaitOne 命令上。

有人知道如何使用 System.IO.Ports.SerialPort 驱动 DTR 吗? 或者知道那里有什么好的组件吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

把梦留给海 2024-07-23 02:58:58

我写这个是为了测试 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

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
又爬满兰若 2024-07-23 02:58:58

检查电缆的引脚排列。 这可能是导致问题的原因之一。

电缆引脚排列

Check the pinout of the cable. It might be contributing to the problem.

Cable Pinouts

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文