c# - 如何从串口读取设备数据

标签 c# wpf

我有一台设备在 COM 端口上发送数据,比如在 COM13 上。现在我想读取该数据并将其显示在 RichTextBox 或任何文本控件中。

我在 IO 和 IO.Ports 的帮助下编写了应用程序,但 comport.DataRecived 事件没有触发,即使设备正在该端口上发送数据也是如此。

我有一些软件,我在上面定义了端口号,它成功地显示了数据,这确保我正在端口上接收数据,但我无法接收。

有什么方法可以读取数据吗?

comm.Parity = cboParity.Text;//None
comm.StopBits = cboStop.Text;//One
comm.DataBits = cboData.Text;//8
comm.BaudRate = cboBaud.Text;//9600
comm.DisplayWindow = rtbDisplay;//Null
comm.PortName = "COM13";
comm.OpenPort();

cmdOpen.Enabled = false;
cmdClose.Enabled = true;
cmdSend.Enabled = true;

public bool OpenPort()
{
    if (comPort.IsOpen)
    {
        comPort.Close();
    }

    comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
    comPort.PortName = _portName;
    comPort.Open();return true;
}

最佳答案

这通常是由于串口配置错误造成的。仅仅打开一个串口并等待一些数据进来是不够的。你还必须设置allSerialPort.Properties。为您想要的连接设置正确的值。

一些常见的是 BaudRateDataBitsParity,但要真正确保您必须设置所有这些。甚至像 RtsEnableReadTimeout 这样的东西。

您必须全部设置,因为配置状态将从端口本身保存。因此,如果一个应用程序打开这样一个端口,对配置进行一些更改并关闭它,那么打开该端口的下一个应用程序将从该配置开始,直到它更改它。

更新

似乎是我从这里看不到的问题。 ;-))

我能给你的唯一建议是使用 Monitor tool ,以便更好地了解您的其他应用程序的真正作用以及在线上发生的情况。此外,您可以设置 two virtual com ports在一台机器上测试读取和写入(甚至在同一应用程序中),以便更好地控制何时发送哪些数据。

关于c# - 如何从串口读取设备数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764484/

相关文章:

wpf - WPF 验证中的 ValidatesOnNotifyDataErrors 与 ValidatesOnDataErrors 和 NotifyOnValidationError 之间有什么区别?

c# - 使用 Microsoft 的 Visual UI Automation 验证

c# - 使用一个 DBContext 在 Entity Framework 中执行多个 Linq 到实体查询仅连接一次到数据库

c# - 加密和解密密码的最佳实践? (C#/.NET)

c# - 如何从 Excel 的 DataTable 中删除空行?

c# - .NET 桌面应用程序方法的良好实时显示性能和输入处理

WPF插件创建UI策略

c# - 如何在 C# 中以编程方式保存用户使用 CTRL-C 复制到剪贴板的 Outlook 电子邮件附件(例如 PDF)

c# - .NET 的 STEP/EXPRESS 工具

c# - DataAdapter.Update() 性能