Delphiで232Cを使って、
パソコンどうしで、データの送受信をして
パソコンを制御したいのですが、どのようにすれば良いのでしょうか?
宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

亀レスなので、ご覧になっているかどうか不安ですが...



参考URLのTurboPower Asyncはいかがでしょうか?私はメインで使っています。RS232Cでつないだ先のディスプレイ制御の意味が難しいですが、端末画面という意味ならこのコンポーネントは使えます。ちなみに英語サイトでマニュアルもサンプルプログラムも英語ですが、インストール手順は丁寧に書かれています。

参考URL:http://sourceforge.net/projects/tpapro/
    • good
    • 0

Delphiのバージョンはいくつですか?


とりあえず、参考URLなどのページで通信コンポーネントなどをダウンロードして使うのが手っ取り早いです。
市販のOCXなども使えます。
良くあるところでは文化オリエント社のとか・・・

参考URL:http://home1.infonia.ne.jp/~delphian/delphi/

この回答への補足

ご解答ありがとうございます。
バージョンはDelphi4です。
早速教えていただいたURLやその他で検索し、コンポーネント等
見つけましたが、どれが良いのやら…(初心者な者ですいません)。
RS-232Cでつないだ先のディスプレイを制御したいのですが、
おすすめのものがありましたら、教えてください。

補足日時:2001/04/13 23:15
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVisualC++でRS232C経由のデータの送受信方法

仕事でVisualC++でプログラムを作っているのですが、VC++は初心者なので解からない事がいっぱいです。
今作っているプログラムは、VisualC++でRS232Cを使って送られてくるデータをダイアログのエディットボックスに表示するというプログラムなんですけど、どうやってデータを受取るのかまたそのデータをどうやって表示するのかがまったく解からない状態です。
解かる方は教えて下さい。
よろしくお願いします。

Aベストアンサー

>具体的な例が無いのでよかったら良い例を教えて下さい。

これでどうでしょうか?
http://mozu.mes.titech.ac.jp/staff/doi/program/hirohome_j.html

>それとエディットボックスに表示する方法も教えて下さい。
http://forums.belution.com/ja/vc/000/003/72.shtml

QRS232Cの制御について詳しく書かれている書籍

RS232Cに接続された機械(Robot)をパソコンで制御するプログラムを書きたいのですが、それにあたり、シリアルポートの制御を主として記述している参考書(書籍)を探しています。
書店などでプログラミング教書を探しても、RS232に関して触れられている本はほとんど無く、あったとしても紹介程度のものです。
プログラミングソフトはVisualStudioExpressEditionsシリーズを予定しています。無料なので....
現時点で扱える言語はCとBASICだけです。
良い参考書があれば、VBやC#、C++等にもチャレンジしてみる意欲はあります。

何か、ハードウェア開発者(と言っても、今回はシリアルポート制御ですが..)でも理解できそうな比較的新しい書籍がありましたら、教えていただけると助かります。

Aベストアンサー

Visual C# 2005 ですが、解説は丁寧ですから役に立つと思います。
http://www.robotsfx.com/robot/robohow/RoboHow60/RoboHow60.html
マイクロソフトによるVBの例
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/SeriaPort/

本だとこの手の本ですかね。古いですから、VB2005じゃないです。
http://www.cqpub.co.jp/hanbai/books/36/36421.htm
アマゾンで探すと関連書籍が出てきますが、読んでみないと使える本は分かりません。
http://www.amazon.co.jp/VB%E3%81%A8%E8%A3%BD%E4%BD%9C%E3%81%A7%E5%AD%A6%E3%81%B6%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AE%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E5%BF%9C%E7%94%A8%E5%B7%A5%E4%BD%9C%E2%80%95PC%E3%81%AE%E3%83%91%E3%83%A9%E3%83%AC%E3%83%AB-%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%BB%E3%83%9D%E3%83%BC%E3%83%88%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9FIO%E5%88%B6%E5%BE%A1%E3%81%AE%E5%AE%9F%E9%9A%9B-%E3%83%88%E3%83%A9%E6%8A%80Beginners-%E6%B8%A1%E8%BE%BA-%E6%98%8E%E7%A6%8E/dp/4789836428

必要ないかもしれませんが、RS232Cの基本知識。
http://www.nahitech.com/nahitafu/mame/mame5/rs232c.html

Visual C# 2005 ですが、解説は丁寧ですから役に立つと思います。
http://www.robotsfx.com/robot/robohow/RoboHow60/RoboHow60.html
マイクロソフトによるVBの例
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/SeriaPort/

本だとこの手の本ですかね。古いですから、VB2005じゃないです。
http://www.cqpub.co.jp/hanbai/books/36/36421.htm
アマゾンで探すと関連書籍が出てきますが、読んでみないと使える本は分かりません。
http://www.amazon.co.jp/VB%E3%81%A8%E8%A3%BD%E4%BD%9C%E3...続きを読む

QあるオシロスコープをRS232-Cにより制御(サンプルプログラム)

KENWOOD CS4135 40MHzのオシロスコープをRS-232CでN88BASICにより制御したいのですが、コマンド、予約語などがさっぱりわかりません。サンプルプログラムの載っているURLなど、ご存知の方どうかお願いします。オシロの種類が違っていても結構です。
ただ、N88BASICで書いてあるのをお願いします。

Aベストアンサー

回答では有りません。
 カタログを見ると、CS4135には、RS232Cのインターフェースを取り付けられないようですが。
 CS5370Pには、IF-20Rと言うオプションが用意されているようですが?。
http://www.kenwoodtmi.co.jp/product/index.html

参考URL:http://www.kenwoodtmi.co.jp/product/index.html

QC#にてCTI。RS232Cの受信と送信について。

C#でCTI機能の実現を目指しております。
プログラムは以下サイトからDLして改造しています。
http://tmp.junkbox.info/e14.html
しかし、エラーが頻発し原因不明です。

構成、仕様としては、
アロハPC1という機械から電話番号データを受信しPCに受け渡し。
・データを受け取る(ここは問題なし)
データ形式は
STX(02H)、着信日時(月日曜時分9桁)、電話番号(20桁)、ETX(03H)
として送られてきます。
例) 1214112050457771111
・正常データの場合はACK(06H)を返信(これをしない場合1秒後に同データが再送される)
・データ整形
・データ表示
というような形にしたいのです。

上記サイトのプログラムをアロハPC1に合わせて通信できるようにした状態ですと、例のような生データが問題なく表示されます。
これを以下のようにしてみましたが、エラーが出てしまいます。
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
// 受信文字列の取得
string receivedData = "";
string moji = "";
string moji2 = "";
try
{
receivedData = this.serialPort1.ReadExisting();
receivedData = receivedData.Replace(this.serialPort1.NewLine, "\r\n");

string[] week = { "(日)", "(月)", "(火)", "(水)", "(木)", "(金)", "(土)" };

string stx = receivedData.Substring(0, 1);
string etx = receivedData.Substring(30, 1);

// ACKを返す。
byte[] ack_data = new byte[1];
ack_data[0] = 06;
serialPort1.Write(ack_data,0,1);

string data_m = receivedData.Substring(1, 2);
string data_d = receivedData.Substring(3, 2);
string w = receivedData.Substring(5, 1);
int w2 = int.Parse(w);
string data_w = week[w2];
string data_h = receivedData.Substring(6, 2);
string data_i = receivedData.Substring(8, 2);

moji2 = receivedData.Substring(10, 20);
// スペースを痴漢
moji2 = moji2.Replace(" ", "");

moji = data_m + "月" + data_d + "日" + data_w + data_h + "時" + data_i + "分 ";
if (moji2 == "P")
{
moji = moji + "着信番号非通知\n";
}
else if (moji2 == "O")
{
moji = moji + "着信番号提供地域外\n";
}
else if (moji2 == "C")
{
moji = moji + "公衆電話\n";
}
else
{
moji = moji + moji2 + "\n";
}

}
catch (Exception ex)
{
moji = ex.Message;
}

// richTextBox側のスレッドに AddRecievedDataメソッドのポインタを渡して、
// 受信文字列を追加させる
AddRecievedDataDelegate add = new AddRecievedDataDelegate(AddRecievedData);
this.richTextBox1.Invoke(add, moji);
}
結果:
1221112260457771111
12月21日(月)12時26分 0457771111
1221112
startIndex に文字列の長さより大きい値を指定することはできません。
パラメータ名: startIndex260457771111
startIndex に文字列の長さより大きい値を指定することはできません。
パラメータ名: startIndex

Substringを削除すると「startIndex に文字列の長さより大きい値を指定することはできません。」というようなエラーは出てきません。
receivedData = this.serialPort1.ReadExisting();
を文字列を直接代入した場合はエラーは発生しません。

これをどのようにすれば正常に動くのでしょうか。

また、ACKが正常に送信できてないみたいなのも解れば助かります。
よろしくお願いします。

C#でCTI機能の実現を目指しております。
プログラムは以下サイトからDLして改造しています。
http://tmp.junkbox.info/e14.html
しかし、エラーが頻発し原因不明です。

構成、仕様としては、
アロハPC1という機械から電話番号データを受信しPCに受け渡し。
・データを受け取る(ここは問題なし)
データ形式は
STX(02H)、着信日時(月日曜時分9桁)、電話番号(20桁)、ETX(03H)
として送られてきます。
例) 1214112050457771111
・正常データの場合はACK(06H)を返信(これをしない場...続きを読む

Aベストアンサー

>・データを受け取る(ここは問題なし)
確認も無しに断言してはいけません。

このプログラムの問題点は、受信したデータ(receivedDat)が必ずしも31文字にならないことです。
SerialPortのDataReceived()イベントは、1文字受信するたびに発生します。
従って受信したデータには、ReadExisting()した時点でSerialPortに受信されている分しか入りません。
解決方法を2種類示しますが、動作確認はしていません。

◎解決方法1
ReadExisting()する前にBytesToReadをチェックして31文字未満ならReadしない。

◎解決方法2
一度に1文字ずつReadして文字をつないでいく。
このとき、
STXを受信する前は、Readしたデータは捨てる。(受信データは空にする)
STXを受信した後は、Readしたデータを受信データに継ぎ足していく。
ETXを受信したら(継ぎ足したデータがETXなら)、受信データ長を確認してACK送信にすすむ。

QDelphi7でのキーボードの制御について

はじめまして。
Delphi7 + Interbase7でC/Sシステムを開発しているアクアと申します。

テキストボックスに入力した値(数値)をキーボードの↑↓(もしくはテンキーの+-)ボタンによって
入力した値を↑(プラス1)、↓(マイナス1)したいのですが、↑↓キーの判断が分かりません。

KeyPressイベント中で、もし↑キーが押されたら値をプラス1、↓がおされたらマイナス1をする為には、
どー言うコードを書いたらよろしいでしょうか?
もしくは、キーボードのキーをプログラム中で判断する為のコード等がありましたら、教えてください。


よろしくお願い致します。

Aベストアンサー

UpDownコンポーネントを使うと、ほとんどプログラムを書かずに実現できます。

Win32タブにあるUpDownコンポーネントをフォーム上に配置し、
オブジェクトインスペクタからUpDownコンポーネントのAssociateプロパティを
対象となるEditコンポーネントの名前に変えます。
するとUpDownコンポーネントはEditコンポーネントの右側に場所を移します。
UpDownコンポーネントはデフォルトで、Max=100、Min=0、Increment=1に
なっていますが、必要なら変更も可能。
Editコンポーネントのフォーカスがある時に、上下の矢印キーで
Editコンポーネントの中身を増減できます。
テンキーの+-は効かないようですが。


人気Q&Aランキング

おすすめ情報