- PR -

シリアル通信の問題

1
投稿者投稿内容
未記入
会議室デビュー日: 2004/12/10
投稿数: 4
投稿日時: 2004-12-10 15:58
RS232Cケーブルを使用したシリアル通信で、受信しているはずのデータをアプリケーションで取得できない問題が発生しています。
通信制御は下記にあるサンプルプログラムのようなごく普通のシンプルなもので、特別なことは何もしていません。
ボーレート・パリティ・データバイト・ストップビットのみデバイス固有の値(9600,e,7,2)を使用しています。
RS232CケーブルはRxD/TxD/CTSの3本の信号線のみ接続されている少々特殊なものを使用しています。

データ送信は正しく行われていて、デバイスが正しく動作していることもわかっています。
ところがデバイスからデータを送信しても、アプリケーションで受信できませんでした。
ちなみにハイパーターミナルや、フリーのポートモニタツールなどを使っても受信データを確認できませんでした。

WaitCommEventが返ってくるのは、EV_CTSが検知された場合のみ。それ以外(EV_RXCHARなど)は一切検知できていません。

2台のPCを接続してエミュレートしてみましたが、普通に動きました。
もっともケーブルは通常のものを使用しましたが。

何か設定に問題があるのでしょうか?

http://msdn.microsoft.com/library/en-us/devio/base/monitoring_communications_events.asp
まえせん
常連さん
会議室デビュー日: 2003/11/13
投稿数: 38
投稿日時: 2004-12-10 16:46
こんばんわ。
引用:

未記入さんの書き込み (2004-12-10 15:58) より:
データ送信は正しく行われていて、デバイスが正しく動作していることもわかっています。
ところがデバイスからデータを送信しても、アプリケーションで受信できませんでした。
ちなみにハイパーターミナルや、フリーのポートモニタツールなどを使っても受信データを確認できませんでした。


以上のことから考えると、ケーブル不良、特にRxDの接触不良という線が強いような
気がします。
ハイパーターミナル等で受信出来ていないのでアプリケーションでもだめでじょうね。

ロジアナとかオシロとかあれば調べられますが、まず、出来ればケーブルを交換て
検証したいですね。
未記入
会議室デビュー日: 2004/12/10
投稿数: 4
投稿日時: 2004-12-10 18:52
まえせんさん、レスありがとうございます。
RxDの結線が切れているかも知れないということで、
まずはそこを確認してみます。
組み込みシステムのため、配線が複雑なので、
可能性はあると思っています。

一つお聞きしていいですか?
仮にデータにエラーがあって、正常なデータとして受信できなかったとしても、
WaitCommEventにはエラーとして上がってくるはずですよね。EV_ERRのような形で。
それも来ないってことは、やはり何の信号も来てないってことなのかな?
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2004-12-10 23:09
本題とは少し外れるかも知れませんが、
秋月電子からRS232Cチェッカーという安価なキットが出ていました。
信号をパソコンに傍受させることでデータをモニターできます。
簡易的ではありますが、信号の状態も知ることができます。
最近は構内モデムやRS232Cを使う機会がほとんどありませんが、
RS232Cトラブルの切り分けに重宝しました。
まえせん
常連さん
会議室デビュー日: 2003/11/13
投稿数: 38
投稿日時: 2004-12-13 09:30
引用:

未記入さんの書き込み (2004-12-10 18:52) より:
仮にデータにエラーがあって、正常なデータとして受信できなかったとしても、
WaitCommEventにはエラーとして上がってくるはずですよね。EV_ERRのような形で。
それも来ないってことは、やはり何の信号も来てないってことなのかな?


調歩同期ですので、データの一部が欠損した場合はフレーミングエラーが発生すると
思います。
ただし、信号が1フレームのデータとしてある程度認識出来ないとエラーそのものも
出ないと思います。
今回、送信は出来ているとのことですので、速度等の設定は問題無い可能性が高いので
RxDに問題がありそうだと思いました。
他の方もおっしゃっていましたが、どうにか原因の切り分けが出来る方法があれば良い
のですが。
未記入
会議室デビュー日: 2004/12/10
投稿数: 4
投稿日時: 2004-12-13 10:42
引用:

まえせんさんの書き込み (2004-12-13 09:30) より:

ただし、信号が1フレームのデータとしてある程度認識出来ないとエラーそのものも出ないと思います。
今回、送信は出来ているとのことですので、速度等の設定は問題無い可能性が高いのでRxDに問題がありそうだと思いました。




エラーそのものが来ないようなケースというのは、たとえば信号が干渉して弱まっているとかいった物理的な要因でしょうか?

RxDに問題があるということですが、まだ厳密に調査はできていませんが、結線に問題がないとすれば可能性としてどのような事が考えられるでしょうか?

やっていることは昔から使用されている単純なシリアル通信であり、通常考えられる原因は一通り調査したつもりです。
WaitCommEventでRxDから何のイベントも受信できない、ReadFileで直接読み込みを試みても受信バッファは0バイトのまま。ハードウェアそのものに問題はない。
となると、やはり回線かマザーボード、COMポートそのものに原因があると考えるべきでしょうね。

質問ばかりで申し訳ありませんが、何か気付かれた点がありましたらご教授願います。
ソースを載せるべきかもしれませんが、本当にサンプルと何ら変わりませんので。
まえせん
常連さん
会議室デビュー日: 2003/11/13
投稿数: 38
投稿日時: 2004-12-13 14:45
引用:

未記入さんの書き込み (2004-12-13 10:42) より:
エラーそのものが来ないようなケースというのは、たとえば信号が干渉して弱まっているとかいった物理的な要因でしょうか?


そうです、物理的な原因と考えました。

フリーのポートモニタツールで受信出来なかったとのことですので、ソフトではなく
ハードの問題の可能性大とおもいますが、他の原因が思いついていないです。
RS232Cモニタやオシロの力を借りたいですね。
お力になれずに申し訳ないです。
未記入
会議室デビュー日: 2004/12/10
投稿数: 4
投稿日時: 2004-12-13 15:15
お騒がせしました。やはりケーブルの配線に問題がありました。
修復すると正常に動作いたしました。

まえせんさん、ひろしさん、お世話になりありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)