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

标签 .net hardware serial-port components

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

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

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

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

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

最佳答案

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

关于.net - 在 .NET 中使用 System.IO.Ports.SerialPort 驱动 DTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666805/

相关文章:

hardware - 构建 CPU 所需的最少晶体管数量是多少?

php - PHP 中的非 ASCII 字符?

java - 使用串行端口的 CANopen PDO

c# - "wwwroot"文件夹中的某些文件未在 ASP.NET Core web 部署中发布

c# - 父进程和子进程关系

objective-c - 在 Cocoa 中查找处理器类型是 PPC 还是 Intel 的最佳方法是什么? (我必须使用碳吗?)

assembly - 从COM抓取流量

c# - 如何使条件等于两个字符串

c# - NHibernate 存储库

debugging - JTAG 如何用作调试器?