B3Mサーボモータを動かそう(C#下準備編)
【関連記事】
第1回 B3Mサーボモータを動かそう(準備編(1))(改訂版)
第5回 B3Mサーボモータを動かそう(Arduino制御編)(改訂版)
第6回 B3Mサーボモータを動かそう(Python編(1))(改訂版)
B3Mサーボモータをプログラムで動かす
B3M Manegerでは、1つのB3Mサーボモータを設定、動かすことができますが、複数のB3Mサーボモータを協調させて動かすことができません。
そこで、プログラムを作成し動かす方法を紹介いたします。
マイコンなどからコマンドを送信することもできますが、ライブラリが用意されているので、
Windowsのプログラムからであれば簡単に動かすことができます。
今回は、そのWindowsのライブラリの使い方とB3Mサーボモータを動かすまでのプログラム作成を解説いたします。
必要なもの
・準備編で紹介したハードウェア一式
・Windows 7 / 8.1 / 10 (32bit/64bit) 搭載のパソコン
下記ソフトウェアの詳しい動作要件はMicrosoft社のホームページにて御確認ください。
・Visual Studio 2015
昔のバージョンでも動かすことができます。
無償版の Communityで動かすことができます。
プログラムの作成前にインストールを行っておいてください。
・B3Mライブラリ
PCからB3Mサーボモータへアクセスするにはコマンドは少ないのですが、メモリマップの構造等を理解し、1から作るのはとても困難です。
弊社では、これらのコマンドを簡単にプログラムできるよう、ライブラリを作成し無償配布しています。
こちらからライブラリ一式をダウンロードできます。
解凍して任意のフォルダに置いてください。
B3Mライブラリの使い方
B3Mライブラリを使うにはVisualStudioで作成したプロジェクトに組み込む必要があります。
使い方はVisualStudio2015 Communityを例に説明します。
(スクリーンショットで表示されている画面の配置はユーザによって変更できるので、実際表示されているところと異なる場合があります)
①Visual Studioでプロジェクトを新規に作成します
Visual Studioを起動させ、C#のWindowsフォームアプリケーションのプロジェクトを作成します。
(WPFでもできますが、フォームアプリケーションで解説します。)
②DLLファイルをわかりやすい位置にコピーします
ダウンロードし、解凍しておいたフォルダの中にB3MLib.dllおよびExtensions.dllがありますので、任意の位置にコピーします。
(今回は、プロジェクトを作成したフォルダに入れました)
③DLLファイルをプロジェクトで使えるようにします
ソリューションエクスプローラの中に参照設定があります。右クリックして、「参照の追加」を選択します。
右下の参照ボタンをクリックすると、下記ウィンドウが現れますので、コピーしたDLLファイルを選択します。
参照マネージャのOKボタンを押すと、ソリューションエクスプローラの参照の中にDLLファイルが読み込まれます。
通信の設定
プログラムからB3Mサーボモータにアクセスするには、Windows標準のSerialPortクラスを用います。まず、作成したプロジェクトのフォームのデザイン画面を開きます。ツールボックス内に「SerialPort」がありますので、作成されたフォームにドラッグアンドドロップします。
次に、SetialPortを設定します。
通信設定はB3Mサーボモータの出荷設定では下記のようになります。
プロパティ名 | 設定値 | 備考 |
BandRate | 1500000 | 通信速度 |
DataBits | 8bit | 1byte送るときのbyte数 |
Parity |
None(パリティなし) | パリティ |
PortName |
RS485USB/シリアル変換アダプター で認識されているCOM番号 |
COM番号 |
StopBit | One(1bit) | ストップビット |
ReadTimeOut | 500(0.5秒) |
受信データが設定時間に来ない場合はエラーになります |
上記表に応じ、配置したseriaPortの設定値を変更します。
下記は例として表記しています。COM番号は11になっていますが、実際にお使いのPCで接続された番号を入力してください。
今回、プログラムの起動と同時にB3Mサーボモータに接続されているserialPortを開き、
プログラムを閉じると同時にserialPortも閉じるようにします。
FormのLoadイベントを発生させ、その中にserialPortを開くよう下記記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
private void Form1_Load(object sender, EventArgs e) { try { serialPort1.Open(); //COMポートを開く } catch { MessageBox.Show("COMが開けません!!"); /// COMが開けない場合は、SerialPortのCOM番号をチェックします /// もしくは他のソフトウェアでSerialPortが占有されていないか確認します serialPort1.Close(); this.Close(); } } |
上記のプログラムは、serialPort1に設定したCOMを開こうとしています。
COM番号が見当たらない等のエラーによりCOMポートが開けない場合はメッセージボックスを表示し、アプリケーションを閉じるようにしています。
閉じる場合は、FormのFromClosingイベントを用い、その中でserialPortを閉じるようにします。
1 2 3 4 |
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { serialPort1.Close(); } |
記述が終了したら、実行してエラーが出ないか確認します。
ここまででは、フォームが表示されるのみで特に何もおきません。
プログラムの設定
以降プログラムを書いていくのですが、ドラックアンドドロップしたSerialPortクラスは頻繁に使用します。
このクラスは正式にはSystem.IO.Ports.SerialPortになっています。
毎回、すべてを書くのは大変ですので、usingで定義をしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; using Extensions.Collections; |
また、Extensionsの中にあるExtensions.Collections.ByteListも頻繁に使用します。
このクラスは動的配列と静的配列を混ぜたようなものになっています。
今回の内容はここまでになります。
下準備ということで、ライブラリの読み込みとB3Mサーボモータの通信設定を行いました。
次回について
次回は、実際にB3Mサーボモータを動かすプログラムを作成していきます。
B3M-SB-1040-Aの詳細をみる B3M-SC-1040-Aの詳細をみる B3M-SC-1170-Aの詳細をみる の詳細をみる RS485USB/シリアル変換アダプターの詳細をみる