Windows C# USB接続でのサンプルコード

ライブラリ

Windows フォームアプリケーションの作成などに使用できる、KeiganMotor KM-1シリーズ用のライブラリです。以下からダウンロード下さい。(2023/3/17)

KeiganMotor_USB.zip

 

角度取得とグラフ化

KeiganMotor KM-1 1台を用いた、Windowsフォームアプリケーションのプロジェクトファイルです。

Others > Interface タブから、USB の箇所にチェック、BLEのチェックを外すことで、KeiganMotorからのUSB経由での通知を有効化します。この状態で、Measurement タブからは、モーターの角度や速度などのグラフを確認することができます。

・角度取得、グラフ化を含むソリューション(開発プログラム)
KeiganMotorKM-1_USB_Test_sample.zip

 

Unity のサンプル

上記の Unity 版サンプルコードになります。

UnityKeiganMotorSample.zip

 

複数台制御

KeiganMotor KM-1 2台を用いた、Windowsフォームアプリケーションのプロジェクトファイルです。
USBシリアル通信により2台を接続し、それぞれ同時に回転させることができます。
本例では、KeiganMotor 2台に対して、36度ずつ回転する相対位置制御を3秒間隔で10回繰り返します。

 

・サンプルプログラムのソリューション(開発プログラム)
KeiganMotorKM-1_Multi_SerialTest

 

サンプルプログラムの使い方

サンプルプログラムを実行します。ボタンの説明は以下を参照下さい。

  • Reload: USB COMポートのリストを更新します。左上のコンボボックスに反映されます。
  • Connect: コンボボックスで接続されたKeiganMotorに接続します。
  • Disconnect: 切断する
  • Enable: モーターの動作を許可する
  • SyncTest: 同期制御のサンプルデモ

手順

以下の順番に操作して下さい。

  1. KeiganMotor KM-1 の接続された COMポートを選択する
  2. Connect にて接続する。(1-2の手順を2セット行い2台接続する)
  3. Enableにて動作許可を行う。
  4. 同期制御を行う。(3秒間隔で 36度ずつ回転を10回繰り返す)

KeiganMotor 制御

概要

Visual Studio IDE と C# 言語を使用した、Windowsフォームアプリケーションの例をご紹介します。
Windows PC の USBポートに接続した KeiganMotor を制御します。

実行ファイルとプロジェクトファイルを掲載しています。

準備

https://visualstudio.microsoft.com にアクセスし、Windows PC に、Visual Studio IDE をインストールします。バージョンは無償の community を選択します。インストール完了後、Visual Studio Installer を開きます。

[変更] をクリックし、変更内容をロードします。
[.NETデスクトップ 開発] をチェックして [変更] をクリックすることにより、インストールします。

シリアルポートの確認

KeiganMotor を接続し、シリアルポートの確認を行って下さい。シリアルポートの番号は、Windows の [デバイスマネージャ] > [ポート] から確認できます。

サンプルプログラム

KeiganMotor KM-1 1台を用いた、Windowsフォームアプリケーションのプロジェクトファイルです。

以下よりサンプルプログラムをダウンロードして実行します。サンプルプログラムの実行ファイル(exeファイル)は、zip解凍後の bin フォルダに存在します。

ダウンロード

以下よりサンプルプログラムをダウンロードします。本サンプルコードはこちらの制御コマンドの例を .NET デスクトップアプリケーション向けに実装したライブラリを含みます。
また、本サンプルプログラムは、.NET Framework 4.6.1 以上を必要とします。必要に応じて、インストールして下さい。

・サンプルプログラムのソリューション(開発プログラム)
KeiganMotorKM-1_Production_SerialTest

・サンプルプログラムの実行ファイル(exeファイル)
KeiganMotorKM-1_Production_SerialTest_exe

サンプルプログラムの実行

上記よりダウンロードした zipファイルを解凍し、フォルダの中にある、Windows ソリューションファイル "KeiganMotorKM-1_Production_SerialTest.sln" を開きます。[開始] ボタンをクリックしてプログラムを実行して下さい。
exe. ファイルの場合はそのままダブルクリックで実行して下さい。

少し時間が経つと、"Form1" というウィンドウが立ち上がります。

※ 実行できない場合、.sln (ソリューション)ファイルのプロパティから、.NET Framework のバージョン 4.6.1 以上を指定することにより改善する場合があります。

サンプルプログラムの使い方

先ほど確認した シリアルポート(COMポート)の番号を選択し、[connect] を押して下さい。KeiganMotor に接続します。その他のボタンの説明は以下を参照下さい。

  • connect: USBポートに接続します
  • enable: モーターの動作を許可します
  • disable: モーターの動作を不許可とします
  • speed(RPM): モーターの速さを RPM 単位で設定します
  • runForward: 正回転を開始します
  • runReverse: 逆回転を開始します
  • moveToPosition: 絶対位置(角度)に移動します
  • moveToDistance: 相対位置(角度)分移動します

C# によるプログラミングの方法

KeiganMotor とシリアル通信を開始する

KeiganMotor との USBシリアル通信を開始するため、先ず、KeiganMotor が接続されたシリアルポート番号を取得する必要があります。
From1_Load メソッドでは、接続された全てのUSBシリアルポート番号を取得して、インタフェースのコンボボックスの選択肢にパスしています。

string[] PortList = SerialPort.GetPortNames();

ComboBox1.Items.Clear();

foreach( string PortName in PortList)
{
    ComboBox1.Items.Add(PortName);
}
if (ComboBox1.Items.Count > 0)
{
    ComboBox1.SelectedIndex = 0;
}

[connect] ボタンを押すと、コンボボックスで選択されたシリアルポート番号のみを取得します。
以下により、接続されたKeiganMotorと通信を開始します。

string portName = ComboBox1.SelectedItem.ToString();
// ...
targetMotor = new KeiganMotor_USB(portName) // シリアルポートを指定して、KeiganMotor のインスタンスを作成
targetMotor.Open(); // シリアルポートの通信を開始

直接ポート番号を指定したい時は、 portNameを、デバイスマネージャーで確認したシリアルポート番号に書き換えて下さい。

targetMotor = new KeiganMotor_USB("COM9");

動作の許可

KeiganMotor を回転させるためには、enable() により動作の許可をする必要があります。
disable() により、動作は不許可となります。

targetMotor.Enable(); // 動作の許可
targetMotor.Disable(); // 動作の不許可

速度制御

テキストボックスで入力したスピードを設定し、正回転または逆回転の動作を行います。

bool valid = float.TryParse(SpeedTextBox.Text.ToString(), out v);
// ...
targetMotor.SpeedRpm(v); // set speed [rpm]
targetMotor.RunForward(); // run forward (ccw)
targetMotor.RunReverse(); // run reverse (cw)

位置制御

絶対位置

テキストボックスで入力した絶対位置 [degree] まで回転動作を行います。事前に、speed の設定が必要です。

bool valid = float.TryParse(PositionTextBox.Text.ToString(), out v);
//...
targetMotor.MoveToPositionDegree(v);

相対位置

テキストボックスで入力した絶対位置 [degree] まで回転動作を行います。事前に、speed の設定が必要です。

bool valid = float.TryParse(DistanceTextBox.Text.ToString(), out v);
//...
targetMotor.MoveByDistanceDegree(v);