我必須通過FTDI RS485連接器(具有通常的comport軟件接口)以1000000波特率在Mono中與設備進行通信。操作系統 - Linux(Ubuntu的... Mint13要特別),單聲道2.10.2。Mono Linux上使用串口的高波特率時的錯誤
首先,我在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上一切正常。
然後我退出蟒蛇,並嘗試使用單聲道與代碼:
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相同的代碼,它通信成功與設備,並收到同一消息與蟒蛇。
那麼單聲道上的SerialPort有什麼問題呢?我錯過了一些設置或配置嗎?
這些事件沒有實現,而且在寫入/讀取扁平字符串之前(MS.NET也是這樣,因爲它不允許自定義編碼),所以遇到問題 - 您是否嘗試寫入字節[]? – skolima
是的。我檢查過了。一切都很好。 – MajesticRa
然後,您需要查看https://github.com/mono/mono/blob/master/support/serial.c和https://github.com/mono/mono/tree/master/mcs /class/System/System.IO。端口,並嘗試自己修復文本編碼層,恐怕。 – skolima