2011-12-28 10 views
2

シリアルポートからデータを読み取ろうとしています。私はUSBアダプタを使用するとき、私はsendtではなく迷惑メールを受け取ります。USBポートから読み取ると奇妙なデータ

私は期待して何

0001 C0 23:33:41.9114 00 
0001 C1 23:34:17.8207 00 
0001 RT 00:00:35.90 00 
n0002 
0002 C0 23:34:32.8372 00 
0002 C1 23:42:36.2617 00 
0002 RT 00:08:03.42 00 
n0003 
0003 C0 23:42:44.3947 00 

USBシリアルポートを介して接続されたとき、私は($ 00は0x3F ...)何を得る

003F003F783F003F003F003F003F003F 
003F003F003F003F003F3F3F3F003F00 
3F3F78003F003F003F003F003F780000 
3F003F783F003F003F003F003F003F00 
3F003F003F003F003F3F3F3F003F003F 
3F78003F003F00 

はまた、私が使用している場合(通常のSERIALPORTで取得)それを接続するパテは、USBシリアルポート経由でも正しいtexteを表示します。

ここで間違いがありますか?どのようにしてパテは壊れたデータを「修正」しますか?

編集:

SerialPort p = new SerialPort(Conf.Value("ExternalClockPort"), int.Parse(Conf.Value("ExternalClockBaud")), Parity.None, 8, StopBits.Two); 
p.Handshake = Handshake.RequestToSend; 
p.Open(); 
byte[] buffer = new byte[512]; 
String command = ""; 
while (!Done) 
{ 
    int cnt = p.Read(buffer, 0, buffer.Length); 
    File.AppendAllText(this.appDataDirectory + "ExternalClock.log", ASCIIEncoding.ASCII.GetString(buffer, 0, cnt)); 
    command = ExternalClock.parseCommand(command + ASCIIEncoding.ASCII.GetString(buffer, 0, cnt)); 
} 
+0

シリアルポートからの読み取りに使用するコードを示してください。いくつかのエンコーディングセットでReadLineを使用していますか? –

+0

リーディングコードが追加されました。私はASCIIエンコーディングを使用します。問題は、異なるシリアルポートで異なる動作をすることです。 – klundby

+0

あなたが間違ったボーレート/シリアルポート設定を使用しているようです。 – Jan

答えて

1

OKを読み取るために使用されるコードを追加しましたので、あなたは、イベントDataRecievedを登録し、それからポートデータを読む必要があります。また、ポートの初期化値が正しいことを確認してください。

_sp = new SerialPort(Conf.Value("ExternalClockPort"), int.Parse(Conf.Value("ExternalClockBaud")), Parity.None, 8, StopBits.Two); 
_sp.DataReceived += new SerialDataReceivedEventHandler(Port_DataReceived); 
_sp.Open(); 


private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    int totalBytes = _sp.BytesToRead; 
    byte[] buffer = new byte[totalBytes]; 
    _sp.Read(buffer, 0, totalBytes); 
} 
+0

私は独自のスレッドでこれを行うので、p.Read()ブロックが問題になりません。 datareceivedイベントはデータで何かをしますか? – klundby

+0

データだけでは何もしません。ポートがデータを受信する準備ができたら通知します。いつでもポートからデータを読み取ることはできません。イベントを使用する必要があります。 –

+0

JavaにはSerialPort事前定義クラスはありませんか? Java Wahtでこのタスクを達成するには、私は何をする必要がありますか?提案してください。 – kgsharathkumar

関連する問題