RS-232C通信 – プログラミング – Home

通知
すべてクリア

[解決済] RS-232C通信


ゴンタ
 ゴンタ
(@ゴンタ)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

Windows2000 C#.NET を使用して、RS-232Cの送受信を行いたいと実験しております。

//RS-232C初期化
axMSComm1._CommPort = 1;
axMSComm1.Settings = 9600,N,8,1;
axMSComm1.InputLen = 4;
axMSComm1.PortOpen = true;

//送信
string st;
st = 1234;
axMSComm1.Output = st;

//受信
string st;
if(axMSComm1.InputLen > 0)
{
st = (string)axMSComm1.Input;
label3.Text = st;
}


引用未解決
トピックタグ
ゴンタ
 ゴンタ
(@ゴンタ)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

送信ミスをしてしまいました。 申し訳ありません。 再度、送ります。
Windows2000、C#.NETでRS-232C通信を行いたいと思っております。

フォ-ムにMSComm(電話マ-クのコントロ-ル)を貼り付けて、以下のコ-ドで
動作確認をしましたが、送信は問題ないのですが、受信がうまくいきません。
どなたか、心当たりのある方は宜しくご教授の程、御願いします。

//RS-232C初期化
axMSComm1._CommPort = 1;
axMSComm1.Settings = 9600,N,8,1;
axMSComm1.InputLen = 4;
axMSComm1.PortOpen = true;

//送信OK
string st;
st = 12345;
axMSComm1.Output = st;

//受信NG(stはNULLです???)
string st;
if(axMSComm1.InputLen > 0)
{
  st = (string)axMSComm1.Input;
}


返信引用
重
 重
(@重)
ゲスト
結合: 24年前
投稿: 84
 

MSCommは使った事がないので的はずれかもしれませんが・・・
> if(axMSComm1.InputLen > 0)
> {
>   st = (string)axMSComm1.Input;
> }
この部分をループにしないといけないのでは?
これではデータ受信前に終了してしまうのでは無いでしょうか。


返信引用
ゴンタ
 ゴンタ
(@ゴンタ)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

重さん、回答ありがとうございます。
ソ-スコ-ドの表現がはっきりせず、誤解を招いてしまったようです。
申し訳ありません。
RS-232C初期化、送信、受信の3コ-ドは、それぞれ3のボタン押下のイベントに
割り当て記述しています。
1のボタン--->RS-232C初期化
2のボタン--->送信
3のボタン--->受信
以上の様になっております。
最初に1のボタン押下--->初期化OK
次に2のボタン---->送信OK
最後のRS-232C接続されたPCからデ-タを受信後、3のボタン押下---->受信NG
以上の流れで確認しております。
質問内容が明確でなく申し訳ありませんでした。
宜しく御願い致します。


返信引用
ゴンタ
 ゴンタ
(@ゴンタ)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

その後、時間があるときにコツコツとこの問題を突っついておりました。
VBでも同じ状態になると思いますが、MSCOMのプロパティで
RTSEnable----->true に設定し、受信可能となりました。
(通常のクロスケ-ブルの配線では、この設定が必要。)
VBでも同じ経験をしたのですが、C#で頭が混乱してしまいました。
お騒がせしました。
また、宜しく御願い致します。


返信引用
ゴンタ
 ゴンタ
(@ゴンタ)
ゲスト
結合: 23年前
投稿: 23
Topic starter  

受信プログラムに誤りがありますので、修正しておきます。

//RS-232C初期化
axMSComm1._CommPort = 1;
axMSComm1.Settings = 9600,N,8,1;
axMSComm1.InputLen = 0;
axMSComm1.PortOpen = true;

//送信OK
string st;
st = 12345;
axMSComm1.Output = st;

//受信OK
string st;
if(axMSComm1.InbufferCount > 0)
{
  st = axMSComm1.Input.ToString();
}

以上です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました