我必须通过 FTDI RS485 连接器(具有通常的 comport 软件接口)以 1000000 波特率在 Mono 中与设备通信。操作系统 - Linux(Ubuntu ... Mint13 特别是),单声道 2.10.2。
首先我在 Linux 上运行简单的 python 测试程序:
>> import serial
>> ser = serial.Serial("/dev/ttyUSB0",1000000, timeout=0.5)
>> ser.write(":DCS3FF8;") # Some message to the device with crc
>> ser.readall()
':CDS P0 M0 E0 L1 S07B3B;' #This is the correct response from the device
>> print ser
Serial<id=0x2ce71d0, open=True>(port='/dev/ttyUSB0', baudrate=1000000, bytesize=8, parity='N', stopbits=1, timeout=0.5, xonxoff=False, rtscts=False, dsrdtr=False)
设备正确响应。一切正常。这表明在 Linux 上一切运行良好。
然后我退出 python 并尝试将 Mono 与代码一起使用:
var serialPort = new SerialPort();
serialPort.PortName = "/dev/ttyUSB0";
serialPort.BaudRate = 1000000;
serialPort.Open();
serialPort.Write(":DCS3FF8;");
Thread.Sleep(150);
Console.WriteLine("BytesToRead: '{0}'", serialPort.BytesToRead);
Console.WriteLine("Existing : '{0}'", serialPort.ReadExisting());
使用命令编译并运行它:
dmcs serial_try.cs && mono serial_try.exe
并得到 TimeoutException,serialPort.BytesToRead 为 0。同时我看到连接器的两个灯都在闪烁(有东西正在传输)。
当我在 Windows 上的 .NET 上运行相同的代码时,它成功地与设备通信并接收到与 python 相同的消息。
那么单声道上的 SerialPort 有什么好处呢?我错过了一些设置或配置吗?