C# Windows和Linux上串行端口的区别-.NET/Mono

C# Windows和Linux上串行端口的区别-.NET/Mono,c#,linux,windows,mono,serial-port,C#,Linux,Windows,Mono,Serial Port,我正在开发一个c#.NET程序,最终将在Linux上运行Mono。我正在使用Visual Studio 2017在Windows 10上进行C#开发。准备好后,我将把它转移到运行最新Mono(5.4)的Linux(Ubuntu用于测试,Yocto用于测试和部署) 在应用程序中,我使用来自System.IO.ports的2个COM端口。没什么特别的。这些端口用于控制外部硬件。COM端口目前通过USB-to-RS-232适配器 comDevice = new SerialPort(); if (i

我正在开发一个c#.NET程序,最终将在Linux上运行Mono。我正在使用Visual Studio 2017在Windows 10上进行C#开发。准备好后,我将把它转移到运行最新Mono(5.4)的Linux(Ubuntu用于测试,Yocto用于测试和部署)

在应用程序中,我使用来自System.IO.ports的2个COM端口。没什么特别的。这些端口用于控制外部硬件。COM端口目前通过USB-to-RS-232适配器

comDevice = new SerialPort();

if (isWindows())
{
    //- Windows
    comDevice.PortName = "COM15";
}
else
{
    //- Linux
    comDevice.PortName = "/dev/ttyUSB0";
}

comDevice.BaudRate = 19200;
comDevice.DataBits = 8;
comDevice.Parity = Parity.None;
comDevice.StopBits = StopBits.One;
comDevice.Handshake = Handshake.None;
comDevice.ReadBufferSize = 1024;
没什么特别的。非常基本的端口设置

当我将设备连接到Linux(Ubuntu14.04 LTS)上并使用终端程序(PuTTY)时,一切都如预期的那样工作。对于其中一个设备,我可以发出2个命令:

  • “O”-打开设备
  • “C”-关闭设备
当我打开时,设备会以“O'OK”响应。当我关掉它时,我看到“好”。当我发出命令使设备执行某些操作时,它会返回我预期的读数:

  • “D”-执行编程事件
…设备发出嘟嘟声,响应返回“D'23.215^0131”

在Windows中,“O”和“C”命令在PuTTY和我的代码中似乎工作得很好。但是,当我发出“D”命令时,在设备发出嘟嘟声后,我得到了“D”。在我的代码、PuTTY或我在Windows 10中尝试过的任何COM程序中都不会返回额外的数据

我不相信这是RTS/CTS的事情。我看不出这些线路连接在适配器上。我确实让我的应用程序在我的日志文件中转储它们的状态,以防万一

我想我可能错了,但闻起来Linux COM端口正在自动“做一些事情”,而Windows端口正在等待我手动完成。我想知道是否有其他人使用COM端口做过Windows/Linux Mono工作,可能知道一些我不知道的事情


如果有人能给我指出一个正确的方向,告诉我在Windows中哪些属性可能是Linux/Mono的默认属性,这会有很大帮助。

这是关于您的程序的问题,还是PuTTY为什么在两个平台上看到不同的东西?a列和B列各有一点:)PuTTY的讨论更像是我试图弄清楚为什么代码根据要求的内容表现出不同的行为。Windows和Linux串行端口的默认状态之间存在某种差异。如果我能得到一些关于这个的信息,我也许能弄明白。哦!缺少设备上的控制线路:(需要将其拉高。这样做了,现在工作正常。感谢您考虑我的问题。