シリアルサーボ制御方法(4) PCから直接制御編(その1)

Posted on 2010.09.17 in

 

はじめに

今回は弊社製シリアルサーボモーターをPCから直接制御する方法およびプログラムについて説明します。

PCからシリアルサーボモーターを制御するには、Dual USBアダプターHS、ICS USBアダプターまたはICS USBアダプターHSを使います。付属の2又ケーブルと延長コードを使って信号線と電源線を接続してください。

 

環境設定

PCではどんな言語を使用しても良いのですが、今回はシリアル通信が簡単にできるような仕組みを持っている、Microsoft社のVisual Basicを使うことにします。Visual BasicはVisual Basic 2010 Express版が無料で使えますので、まずは下記URLにアクセスして、ダウンロードしてください。30日以上使用する場合はMicrosoft社に登録する必要がありますので注意してください。

ダウンロード先 http://www.microsoft.com/japan/msdn/vstudio/express/

ダウンロードが終わったらインストールを行ってください。

 

起動とプログラム作成

準備

インストールが終わったら早速起動してみましょう。スタートメニューの「Microsoft Visual Studio 2010 Express」から「Microsoft Visual Basic 2010 Express」を起動してください。

  1. ファイルメニューから「新しいプロジェクト(P)」を選択します。
  2. 表示された「新しいプロジェクト」ダイアログから、「Windowsフォームアプリケーション」を選択します。
    また、下にある「名前(N)」欄にプロジェクトの名前を入力します。ここでは「IcsSetPosition」と言う名前を付けますが、好きな名前で結構です。名前を入力したらOKボタンを押します。
    IcsVBNewProject クリックで拡大

     

  3. 下記のような起動画面が表示されます(ツールボックスウィンドウはタブをクリックすると開きます)。
    IcsVBStartup クリックで拡大

 

ビルド

Visual Basicは昔ながらのBasic言語ではありません。作成したプログラムを実行するには、ビルド作業が必要です。デバッグメニューの「デバッグ開始」か、F5キーを押してください。

画面上に何もないウィンドウが表示されたらここまでは成功です。終了するにはフォーム上の終了ボタン(×マーク)をクリックするか、デバッグメニューから「デバッグの停止」を選択してください。

Visual Studioの簡単な説明

よく使うウィンドウは、「ツールボックス」ウィンドウと、「ソリューションエクスプローラー」ウィンドウ、「プロパティ」ウィンドウです。これらは「表示」メニューの「その他のウィンドウ」から開いたり閉じたりすることができます。

ウィンドウは取り外し、ドッキングができます。各ウィンドウのタイトルバーにある押しピンアイコンをクリックすると、自動的にウィンドウが隠れるような設定も可能です。

ツールボックス
ボタンなどの部品(コントロールと言います)がリスト表示されています。コントロールをクリックして選択してから、画面上のフォームをクリックすると、選んだコントロールが張り付きます。
ソリューションエクスプローラー
プロジェクトのファイル構成などを表示します。ツリー表示でファイル名を変更することもできます。
プロパティ
フォーム上でクリックしたコントロールのプロパティを表示します。プロパティでは文字の色や大きさを変えたりすることができます。また、プロパティウィンドウのツールバーにある「イベント」ボタン(稲妻マーク)を押すことで、選択したコントロールのイベントを設定できるようになります。

画面をデザインする

まずは画面をデザインしてみましょう。今回は下の手順で動作する、サーボモーター制御プログラムを作成します。

  1. ComboBoxコントロール(入力も可能なプルダウン式メニュー)でシリアルポートを選択する。
  2. 接続ボタンでCOMポート(ICS USBアダプター)と接続する。
  3. ID番号をセットする。
  4. スライドバーを動かすとその通りにサーボモーターが動作する。
  5. 数値を直接代入することもできる。

下のスクリーンショットのように、ツールボックスからTrackBar(スライドバーのこと)、Button、ComboBox(入力もできるメニュー)などを配置してみましょう。コントロールの位置は画面と全く同じにする必要はありませんので、TrackBarを左右にスライドさせてサーボモーターを動かすことをイメージして、好きなように配置してください。TrackBarコントロールなど、ツールボックスウィンドウをぱっと見てもに見当たらないコントロールは、ツールボックスウィンドウの一番上にある「全てのWindowsフォーム」をクリックすると使用できる全コントロールがアルファベット順で表示されますので、そこから探してください。

シリアル通信を行うSerialPortコントロールは、非ビジュアルコントロールですので、フォーム上に貼り付けてもフォーム外(下の方)に配置されます。

IcsVBArrangeControls クリックで拡大

配置が終わったら、ボタンなどのプロパティを設定します。プロパティウィンドウが表示されていない場合は、表示メニュー>その他のウィンドウメニューから開いてください。フォーム上のコントロールをクリックして選択すると、そのプロパティが表示されます。

プロパティウィンドウは左の欄がプロパティの名前で、その右側に値を入れるとコントロールの見た目や動作がリアルタイムに変化します。まずは各コントロールのプロパティ名の欄に対応するプロパティ値を下記表の通りに設定しながら、画面の変化を見てください。

SerialPortコントロールはフォーム上にはありません。フォームが表示されているウィンドウの下方に配置されていますので、注意してください。

コントロール名 プロパティ名 プロパティ値 内容
Form1 Text ICS ポジション設定 ウィンドウのタイトル
Label1 Text ID番号 ラベルの名称
Button1 Text 接続 ボタンのテキスト
NumericUpDown1 Maximum 31 ID最大値
  Minimum 0 ID最小値
TextBox1     特に設定項目はない
TrackBar1 Maximum 11500 ポジション最大値
  Minimum 3500 ポジション最小値
  Value 7500 ニュートラル
  TickFrequency 250 表示目盛りの細かさ
SerialPort1 Baudrate 115200 通信速度
  Parity Even パリティを偶数にする
  ReadTimeout 100 読み込み待ち時間を100msに
ComboBox1     特に設定項目はない

 

set_pos関数を作る

ソフト編で作成したset_pos関数をVisual Basicで作ってみます。まず、フォームの上で右クリックすると「コードの表示」というメニューが出るので、プログラムコードを表示してください。F7キーを押して表示もできます。フォームのデザインに戻るときは「Form1.vb [デザイン]」タブをクリックしてください。

IcsVBShowCode クリックして拡大

画面上に「Public Class Form1 ~ End Class」と表示されますが、プログラムはこの間に記述します。内容はあまり考えずに、下のプログラムを入力してください(前回の「シリアルサーボ制御方法(3) ソフト編」のプログラムとほぼ同じ構成になっていますので比較してみてください)。入力途中で入力候補が表示されたときはTABキーを押すと候補が確定します。プログラムソースコードの緑の部分はコメントですので、入力しなくとも大丈夫です。

プログラムの簡単説明

プログラムを簡単に説明すると、次のような手順となっています。

  1. C言語でのプログラムのように必要な変数を「Dim Tx(3), Rx(6) As Byte」などと準備してから、Txにはポジションコマンドをセットします。
  2. SerialPort1.Write (Tx, 0, 3)」で、Tx変数にセットしたコマンドを3バイト分だけSerialPort1から書き込みます。
  3. ICS規格では、PCから送信した場合は送信多命令と同じものが返ってきますので、受け取りは6バイトになります。これを「For」の繰り返しで1バイトずつ受け取っています。
  4. データ受け取りに失敗した場合はSetPos = -1としています。Visual Basicでは関数の名前に値を代入すると返値となります(C言語ではreturnに相当)。
  5. データ受け取りに成功した場合は、受け取ったデータをポジションデータに戻して、値を返して関数を終了しています。

For i As Integer = 0 To 5 Setp 1」はC言語で書き直せば「int i; for (i = 0; i <= 5; i++)」と言う意味です。

Try ~ Catch

19~24行あたりのTry~Catch節は簡単に言えば「とりあえずTry節を実行してみて、何か問題があったら(例外を受け取ったら)Catch節へ処理を移す」というものです。C言語などで存在していた実行時エラーによるプログラムクラッシュを予防することができるようになっています。

シリアル通信では設定した受信タイムアウト時間を待っても受信できなかったときには、SerialPort.ReadByte関数は「TimeoutException」例外を発生し、Catch節へ処理が移ります。

今回はSerialPort1の受信タイムアウト時間を適当に100msにセットしておきましたので、100ms待ってもサーボモーターから返事がない場合は、Catch節へ移動します。Catch節では受信に失敗しましたよフラグ(Flag)をセットして、Forループを終了(Exit For)しています。

再ビルド

プログラムの入力が完了したら、再度ビルド作業を行います。スクリーンショットのように、フォームが表示されればここまでは成功です。ビルド時にエラーが出たらエラーの文字をダブルクリックすると、エラーが発生した行が表示されますので、間違いを直して再ビルドしてください。

IcsVBBuild クリックして拡大

次回は画面デザイン時に設計した動作をプログラムに追加して、プログラムの完成を目指します。

用語説明

プロジェクト
Visual Basicなどではプログラムソースコードや画面のデザイン、コンパイル条件設定などをまとめて「プロジェクト」という単位で管理しています。従来はテキストエディタでソースコードを記述しコンパイルなどを行っていましたが、現在の開発環境ではあまりメジャーではなくなりました。
フォーム
フォームアプリケーションの、「フォーム」とは、起動時に表示されるウィンドウのことで、ボタンなどの様々なコントロールをこのフォーム上に配置することができます。
非ビジュアルコントロール
ボタンなどと違って、マウスクリックやキー入力などをきっかけにしてプログラムを実行したり、見た目を変化させたりする必要がないコントロールを非ビジュアルコントロールと言います。

シリアルサーボ制御方法(5) PCから直接制御編(その2)
シリアルサーボ制御方法(4) PCから直接制御編(その1)
シリアルサーボ制御方法(3) ソフト編
シリアルサーボ制御方法(2) ICS編
シリアルサーボ制御方法(1) 回路編

 

 

KRS-3301 ICSの詳細をみる KRS-3304 ICSの詳細をみる KRS-3204 ICSの詳細をみる KRS-6003RHV ICSの詳細をみる KRS-2572HV ICSの詳細をみる KRS-4034HV ICSの詳細をみる KRS-4033HV ICSの詳細をみる KRS-4032HV ICSの詳細をみる KRS-4031HV ICSの詳細をみる KRS-2552RHV ICSの詳細をみる KRS-2542HV ICSの詳細をみる KRS-6003HV ICS Red Versionの詳細をみる