【问题标题】:RS232 library for .net core.net 核心的 RS232 库
【发布时间】:2017-04-03 01:23:12
【问题描述】:

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

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

还有其他选择吗?

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

【问题讨论】:

标签: serial-port nuget visual-studio-code .net-core ports


【解决方案1】:

我设法为 netstandard1.5 编译了https://github.com/jcurl/SerialPortStream,并进行了一些小的修改。

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

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

【讨论】:

  • 谢谢。我会试一试,看看会发生什么
  • 仅供参考:我刚刚使用 SerialPortStream 2.1.2 库在 Windows 10 和 Raspbian 上启动并运行了一个基本的串行应用程序。我使用 dotnet 2.0 和 Visual Studio Code 构建了这个简单的应用程序。看起来效果不错!
【解决方案2】:

这在 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 的内容。您可能还必须在 Linux 机器上以 Root/SU 身份运行您的应用,不幸的是,这正是 Linux 多用户安全性的本质。

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 2016-11-10
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2017-07-13
    相关资源
    最近更新 更多