SerialPort.Open() gives Exception for set_DtrEnable



我正在测试一个程序,该程序应该通过串行端口连接到一些硬件。我建立了一个"赝品"。硬件能够复制真实的。然后我尝试使用tty0tty(我在Ubuntu上)设置一些本地端口连接,它给了我这个:

(/dev/pts/1) <=> (/dev/pts/2)

然而,当我试图在我的测试程序上打开端口时,像这样:

var port = new ConcreteSerialPort("/dev/pts/2", 9600, Parity.None, 8, StopBits.One);
port.Open();

(ConcreteSerialPort只是一个抽象,但所有的调用直接到一个真正的SerialPort。)我得到了这个异常:

Error : System.IO.IOException: Invalid argument
at System.IO.Ports.SerialStream.set_DtrEnable(Boolean value)
at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)

我已经试过了:

  • 创建sudo chmod 777/dev/pto/2
  • 添加端口。DtrEnable = true;端口。RtsEnable = true;

所以,经过一番研究,我似乎需要使用tty0tt0模块内的程序。我进入tty0tty/模块,然后我在一个终端(安装内核头后工作)。然后,从安装说明:sudo insmod tty0tty。Ko(同样来自模块文件夹)。这创建了/dev/tnt*(*是一个从0到7的数字),根据我的理解,创建连续端口之间的连接(0与1,2与3…)。

当我用tnt0和tnt1启动我的测试程序时,它工作了,连接建立了,我甚至可以做一些调用。

我仍然有错误,但因为它是一个测试程序,我不确定它是否来自我的代码或端口。另外,我不知道如何配置这些端口。

最新更新