1000000ボーレートでFTDIRS485コネクタ(通常のcomportソフトウェアインターフェイスを備えています)を介してデバイスとMonoで通信する必要があります。OS-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と同じメッセージを受信します。
では、モノラルのシリアルポートの欠点は何ですか?設定や設定が足りませんか?