- 締切済み
PCと機器のシリアル通信について
現在、PCとある機器でシリアル通信を行うための プログラムを作成しています。 開発環境はVisual C++ 2008 Express Editionで、 serialportクラスを使って作成しています。 その機器のマニュアルには、 PCからENQを送信する前に機器からPCに対して DRチェック(通信可チェック) という記述がありました。 これはRS232Cケーブルをつなげば、 自動でやってくれるものなのでしょうか? それともPC、あるいは機器側で何かしなければならないのでしょうか? わかる方、ご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- abaca
- ベストアンサー率40% (43/106)
シリアルデバッグツール2というフリーソフトがあります。 ダウンロードして解凍してSerialDebug2.exeをダブルクリックすると起動します。 まず設定で通信パラメータを設定してください。 ENQボタンを押すと0x05と表示されるので、送信ボタンを押すと送信されます。 下の窓に05と表示されたはずです。さらにその下に何か表示されれば応答があったということです。 このソフトでやったときは応答があるならば自分のプログラムに問題があることになります。 そうでなければケーブルとか通信の設定とか、相手の機器とかの問題であるということがわかります。大抵はストレートケーブルだと思いますが、クロスケーブルが必要な機器もあります。 右の方にDTRとかRTSなどと表示されています。これらをクリックすると対応する信号ラインのON/OFFが切り替わります。これらの信号線が通信に影響するかどうか調べてください。それから設定のフロー制御も影響しているかもしれません。 まずはこのソフトでENQを送って応答がある状態にしてください。
- abaca
- ベストアンサー率40% (43/106)
>ENQを送信する前に機器からPCに対して >DRチェック(通信可チェック) 「ENQを送信する前にDR(DSR)信号を見て機器が有効である事を確認せよ。」という意味だとおもいます。 自動的にはやってくれないのでserialportクラスのDsrHoldingプロパティーを確認する必要があると思います。 自分はVisualStudioを使っていないので後は調べてください。 おおよその形としては次のようになると思います。 if (serialport.DsrHolding ) { seralport.Write(ENQ); その後の処理 }else { Message("機器の準備が出来ていません"); }
お礼
ご回答ありがとうございます。 DsrHoldingプロパティですが、確認してみると、trueとなっておりました。 その上でENQを送信しているのですが、応答がありません。 機器のマニュアルには、バイナリデータ列を扱うと記述されていたので、 byte型の配列を作り、ENQ信号として0x05をWriteメソッドにて送信しています。 この送り方そのものが間違っているのでしょうか?
お礼
お返事が遅くなってしまい、大変申し訳ありません。 今、教えて頂いたソフトを使って実験しているのですが、 やはり機器からの応答はありません。 ケーブルの結線方法もマニュアルやネットを参考にしながら、 色々試しているのですが、全く進捗がありません。 ご意見を頂いているのに誠に申し訳ありません。