0

私の職場では、シリアル ポートを介してサーバーにデータを供給するコール データ レコーダ (CDR) があります。私が理解しているように、これからの良いデータは、行われたすべての通話の記録であり、もちろんそれはお金の支出に結びついています.

私が理解しているように、サーバーのシリアル ポートは、9600 ボー、8 ビット、パリティなし、1 ストップ ビットでデータを受け入れるように設定されていました。9600 ボー、7 ビット、パリティなし、1 ストップ ビットでデータを受け入れるように設定することを目的としていました。

その設定は現在修正されていますが、ファイルは通常、メモ帳のような単純なもので読み取ることができますが、現在判読できない CDR からの大量のデータがあります。

私の質問は、A. 読み取り可能なデータを回復することさえ可能かどうか、および B. どのようにこれを達成できるか (C# に関しては理想的ですが、必須ではありません) です。データをビット単位まで直接デコードし、読み取り可能な形式に再エンコードすることを考えていましたが、関連する実際の形式について確信が持てないことに気付きました (たとえば、限られた調査の結果、 7ビット、パリティなし、1ストップビットのデータは「真のASCII」と見なされると信じていますが、その有効性については確信が持てません)。

以前に寄せられた質問の多くは、コードでのシリアル ポートの処理に関するものです。この受信データを読み取り可能な形式に変換できるかどうか知りたいと思います。

4

1 に答える 1

1

データを復元する方法はないと思います。サーバー上の UART はおそらく多くの「フレーム エラー」を検出し、その結果、ハードウェア レベルで少なくとも一部のデータを既に破棄しています。

ただし、シリアル ラインのフレーム フォーマットを参照することをお勧めします (例:ここ)。それは決して複雑ではありませんが、あなたの問題に関して、私が見ている課題は次のとおりです。

各フレームは、1 つのスタート ビット、n データ ビット、オプションでパリティ ビット、1 つまたは複数のストップ ビットで構成されます。

そのため、UART が 8 ビット フレーム予期し、各フレームの後に送信されるストップ ビットが 1 つしかない場合、同期が取れなくなります。

  1. フレーム長に関係なく UART がスタートビットを検出し、
  2. UART は、構成されているのと同じ数のデータ ビット (この場合は 8) を読み取りますが、送信者は 7 ビットしか送信しません。
  3. 送信側は、受信側が 8 ビット フレームの最後のデータ ビットと誤って解釈するストップ ビットでフレームを終了します。
  4. ここで、受信側はストップ ビットが表示されることを期待していますが、送信側はおそらく次のスタート ビットを送信して送信を続けます。

スタート ビットが論理 0 でストップ ビットが論理 1 であるため、UART はほとんどのフレームでフレーム エラーを検出し、「壊れた」フレームのデータをアプリケーションに提供する場合と提供しない場合があります。

ただし、いずれの場合でも、受信側は実際のデータの一部のビットを制御ビット、つまり開始ビットまたは停止ビットとして解釈し、これらのビットは後で確実に失われます。

送信側がフレームごとに少なくとも2 つのストップ ビットを送信するように構成されている場合、受信したデータは 8 番目の「データ」ビットをトリミングするだけで簡単に回復できます。これは実際には最初に送信されたストップ ビットであり、とにかく常に 1 になります。 .

于 2013-06-13T14:03:44.387 に答える