シリアル通信ソフトの作り方:Delphiバージョン(その2)
25-May-'08 07:18
Age: 2 yrs



Category: PSoC






5月17日のその1の説明のようにプログラムの初期化と終了処理のコードを書いたら、順序はその前でも良いですが、Form1上に配置した各コンポーネントを右の第1のキャプチャーのように表示されるようにします。このボタンは何をするものか?等々が思い出し易くなるし後々のプログラムの修正が容易になります。

ということで、以下がシリアル通信ターミナルソフトの作り方の手順の続きです:

4)Form1上に配置した各コンポーネントのキャプションを設定しておく

大部分のコンポーネントのプロパーティ・タブのキャプションで表示テキストを設定します。Button1はPortのオンオフです。Button2は受信テキストの保存用です。Button3は受信テキストのクリアー用です。Button4はEdit1に入力したテキストをシリアル送信するときにクリックします。また、Panel1はポート接続インジケーター(表示灯)の代わりをさせるのでキャプションは設定せずにその下のColorを”clGray”にします。

ComboBox1はCOMポートの番号を選択するのに使います。プロパーティのText欄に1を入力します。それからItemsの欄をクリックして右端の”...”のマークのボタンをクリックしてString List Editorを起動してCOMポートの番号(例えば1~20まで)を入力してOKします(右の第2のキャプチャ画像)。同様にして、ComboBox2は通信速度を選択するときに使いますので想定する通信速度をString List Editorで入力しておきます。初期値は例えば9600にしてText欄に入力しておきます。

StatusBar1はシリアル通信の設定値を表示するのに使います。前回指摘したようにプロパーティのPanelsをクリックして右端の”...”をクリックするとパネルエディタが起動されます(右の第3番目のキャプチャ画像)。このエディタの追加ボタンをクリックするとStatusBar1.Panels[0]が追加されます。このStatusBar1.Panels[0]のプロパーティのTextがステータスバーの左に表示されます。

5)MSComm1のOnCommイベントをプログラムする(右の第4番目のキャプチャー画像)

ここがシリアル通信ターミナルソフトの最も肝心なコード部分です。MSComm1のEventsのOnCommの欄の白地をダブルクリックするとプログラムエディタのプロシージャTForm1.MSComm1Commの箇所が表示されます。そこで以下のようにコードを書き込みます。そうすると、MSComm1.commEventの値がcomEvReceiveのとき、つまり何かを受信していれば、MSComm1.Inputの内容をMemo1.Lines.Textに追加してゆきます。

---------------------------------------------------------------
procedure TForm1.MSComm1Comm(Sender: TObject);
var
  buffer :variant;

begin

  case MSComm1.commEvent of
    comEvReceive:
    begin
      buffer := MSComm1.Input;
      Memo1.Lines.Text := Memo1.Lines.Text + buffer;
    end; // of comEvReceive
  end; // of case

end;
---------------------------------------------------------------

これで、後はどこかで(例えば、ポート接続ボタンButton1をクリックしたときに)

MSComm1.PortOpen := true;  // シリアルポートをオープン(オン)

とすれば、初期設定通りにPSoCなどからのシリアルデータを受信してMemo1に表示して行きます。残りのプログラミングはユーザーインターフェースの部分を使い易くするだけです(シリアルポートのオンオフ・ボタンやテキスト送信の部分や受信テキスト保存や受信テキストクリアーなど)。その3に続きます...

補足:Memo1.Lines.Textに追加する代わりに数値を抽出してチャート(TChart)コンポーネントにデータポイントを追加して行けばリアルタイムにデータをグラフ表示するデータロガーができてしまいます。チャートでグラフ表示する要領は2007年1月1日の記事です。








<- Back to: メイン ・セクション

サイト内のページ検索

Searchword:

Search in:


(上のページ検索は通常ページのみでブログ風ニュースの内容は検索できません)