.net 核心的 RS232 库

RS232 library for .net core

我们正在开发 .Net Core 应用程序,其中一个应用程序需要访问串口。

当我了解到 System.IO.Ports 不会在 .Net Core 中实现时,我一直在寻找一个提供该功能的 nuget 库,但找不到与 .net core 兼容的库(VS Code正在显示一条错误消息)。

还有其他选择吗?

更新:我发现官方 SerialPort API 正在考虑移植到 .Net Core(参见 https://github.com/dotnet/corefx/issues/984

我设法通过一些小的修改为 netstandard1.5 编译 https://github.com/jcurl/SerialPortStream

查看拉取请求:https://github.com/jcurl/SerialPortStream/pull/13

实验性 nuget 包:https://www.nuget.org/packages/SerialPortStreamCore/2.1.0

2021 年完全跨平台。

只需使用命令行或您的 IDE 安装 NuGet:“System.IO.Ports”

以下示例是一个 .NET 5 控制台模式程序,它编译并适用于 Linux 和 Windows。

using System;
using System.IO.Ports;

namespace PipelinesTest
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Reading a GPS Device on COM3");

      SerialPort _port = new SerialPort("COM3", 4800, Parity.None, 8, StopBits.One);

      _port.DataReceived += PortOnDataReceived;
      _port.Open();
      
      Console.WriteLine("Press Return to Exit");
      Console.ReadLine();

      _port.Close();
      _port.DataReceived -= PortOnDataReceived;
      
      Console.WriteLine("Ended");
    }

    private static void PortOnDataReceived(object sender, SerialDataReceivedEventArgs e)
    {
      SerialPort port = sender as SerialPort;
      var line = port.ReadLine();
      Console.WriteLine(line);
    }
  }
}

注意:我应该在第一次回答这个问题时提到,您需要将上面构造函数中的“COM3”更改为类似“/dev/ttys0”或类似 Linux 的内容。您 可能 还必须 运行 您的应用程序作为 Root/SU 在 Linux 机器上,这正是 Linux 的本质不幸的是多用户安全。