パソコンから 操作する |
Visual Studio® 2012 Express Edition を起動します。
「ファイル」メニューの「新しいプロジェクト」を選択します。
「新しいプロジェクト」ウィンドウが表示されますので、[テンプレート → Visual C#] から「Windows フォーム アプリケーション」を選択し、「プロジェクト名」に "Sample" と入力します。入力が終わったら「OK」ボタンを押してください。
次に、「TWB.cs」をプロジェクトに追加します。
「TWB.cs」は、「USBMTools」、または、「LANMTools」のインストール時にパソコン内にコピーされます。デフォルトのインストール先は「C:\Program Files(x86)\Technowave\Lib」です。
[プロジェクト → 既存項目の追加] ダイアログでファイルを選択し、「追加」ボタンの右にある三角の印をクリックします。追加方法が表示されますので「リンクとして追加」を選択します。
「ソリューション エクスプローラー」の「Sample」から「Form.cs」を右クリックし、「コードの表示」を選択します。
名前空間に以下の一文を加えます。
Using Techw.IO;
これで、「TWB.cs」の関数が使用可能となります。
上の例の場合、「TWB.cs」はライブラリのインストールフォルダ中のファイルが参照されています。最新の「USBMTools」や「LANMTools」をインストールすることで、ライブラリファイルも更新されますので、プロジェクトからは常に最新のファイルが参照されます。
また、プロジェクトフォルダを移動すると、正しくファイルを参照できなくなる可能性があります。その場合、再度ファイルをプロジェクトに追加してください。また、プロジェクトフォルダを頻繁に移動する場合には、「TWB.cs」ファイルをプロジェクトフォルダにコピーし、そのファイルをプロジェクトに追加するようにします。
ボードを制御するためには、まず接続の操作が必要になります。そこで、作成するプログラムに「接続」ボタンを用意します。
「ツールボックス」を開いて「Button」をドラッグし、「Form1」の上にドロップして、ボタンを1つ配置します。
次に、「プロパティ」ウィンドウ(画面右下)の「(Name)」に "Connect"、「Text」に "接続" と入力してください。
フォーム上の「接続」ボタンをダブルクリックするとコード入力の画面になりますので、下のようにプログラムを入力してください。
public partial class Form1 : Form { IntPtr m_hDev; // ハンドルを格納する変数 private void Connect_Click(object sender, EventArgs e) { // ボードへ接続 TWB.Open(out m_hDev, null, 0, TWB.OPEN_OPT.IF_ANY | TWB.OPEN_OPT.LIST_UPDATE); if (m_hDev != IntPtr.Zero) { TWB.Initialize(m_hDev, TWB.INIT_OPT.ALL); // ボードの初期化 Connect.Enabled = false; // 接続ボタンを無効にする Disconnect.Enabled = true; // 切断ボタンを有効にする MessageBox.Show("ボードに接続しました。"); // メッセージを表示 } else MessageBox.Show("ボードに接続できませんでした。"); } }
リスト中の "TWB" で始まる関数が、マルチファンクションI/Oボードを制御するためのライブラリ関数です。これらの関数は「TWB.dll」というDLLファイルに収められており、「TWBライブラリ」と呼んでいます。
「TWB.Open(out m_hDev, ...)」 がボードに接続する部分です。成功すると m_hDev に 0 以外のある整数が格納されます。格納された整数は一般に「ハンドル」と呼ばれるもので、接続したボードを操作するために必要となりますので、プログラムを通じて参照できるようにグローバルな変数に格納しています。
「TWB.Initialize(m_hDev, ...)」 は、接続したボードを初期化している部分です。以前の操作状態がボードに残っている可能性がありますので、ここで初期状態に戻しています。
次にボードの制御を終了するための「切断」ボタンを用意します。
「Form1」をデザイナで開き、ボタンを1つ配置します。
「接続」ボタン同様に、「プロパティ」ウィンドウの「(Name)」に "Disconnect"、「Text」に "切断" と入力してください。実際に接続しているときだけ、ボタンを有効にしますので、「Enabled」の初期値を "False" に変更してください。
フォーム上の「切断」ボタンをダブルクリックして、以下のプログラムを入力します。
private void Disconnect_Click(object sender, EventArgs e) { if (m_hDev != IntPtr.Zero) { TWB.Close(m_hDev); // 切断 m_hDev = IntPtr.Zero; // ハンドルを0に初期化 Disconnect.Enabled = false; // 切断ボタンを無効にする Connect.Enabled = true; // 接続ボタンを有効にする } }
「TWB_Close(m_hDev)」 が切断処理です。ハンドルの値は無効になりますので、ボードと接続されていないことがわかるように m_hDev を 0 に戻しています。
次にデジタル入力(P40)の端子状態を定期的に読み出して表示を行います。
「Form1」をデザイナで開き、ツールボックスから「Timer」を選択して配置します。
プロパティの「Enabled」を "True" に変更してください。これで、100 msec毎にタイマイベントが発生します。
続いて入力状態を表示するためのチェックボックスを1つ配置します。
「(Name)」を "P40"、「Text」を "P40" に変更してください。
"Timer1" のアイコンをダブルクリックして、以下のプログラムを入力します。
private void timer1_Tick(object sender, EventArgs e) { byte data; TWB.STATUS status; if (m_hDev == IntPtr.Zero) return; // 接続していないときは何もしない status = TWB.PortRead(m_hDev, TWB.RPORT.P4, out data); // ポート4の読み出し if (status != TWB.STATUS.TW_OK) { Disconnect_Click(null, null); // 切断処理の呼び出し // メッセージとエラー番号の表示 MessageBox.Show("エラーが発生しました。: ", status.ToString()); return; } // 読み出したデータの0ビット(P40端子に対応)を調べる if ((data & 0x1) != 0) P40.Checked = true; // 1の場合チェックボックスにチェックを入れる else P40.Checked = false; // 0の場合チェックボックスのチェックを消す }
「status = TWB.PortRead(...)」 の部分がポート4(P40-P47)の端子状態を読み出している部分です。P40 が "Hi" の場合、Data 変数のビット0(最下位ビット)が "1" となり、"Lo" の場合は、Data のビット0が "0" となります。P41 の状態は同様にビット1に格納され、以下同様に P47 までの8ビットが、それぞれビット7(MSB) までの8ビットに格納されます。
TWB.PortRead() 関数が成功した場合、Status には "TW_OK" という定数が入ります。"TW_OK" は「TWB.cs」の中で定義されている定数で、値は 0 になります。関数が失敗した場合には、Status が "TW_OK" 以外(0以外)の値となります。
次にデジタル出力(POUT0#)を変更する処理を追加します。
「Form1」をデザイナで開き、POUT0#端子と対応するチェックボックスを1つ配置します。
「(Name)」を "POUT0"、「Text」を "POUT0" に変更してください。
フォーム上の「POUT0」チェックボックスをダブルクリックして、以下のプログラムを入力します。
private void POUT0_CheckedChanged(object sender, EventArgs e) { // 接続していない場合チェックを外して処理を終わる if (m_hDev == IntPtr.Zero) { POUT0.Checked = false; return; } // チェックされた場合はPOUT0を"1"に、チェックが無い場合POUT0を"0"にする if (POUT0.Checked == true) TWB.PortWrite(m_hDev, TWB.WPORT.POUT, 0x1); else TWB.PortWrite(m_hDev, TWB.WPORT.POUT, 0x0); }
「TWB.PortWrite(..., 0x1)」 の部分が POUT0# の出力を "ON" にしている部分です。 "0x1" の部分には8ビット(Byte)の数値を指定できます。ポート入力の場合と同様にビット0 - ビット7 が、それぞれ、POUT0# - POUT7# 端子に対応しています。POUT# はオープンコレクタ出力となっていますので、"ON" になると端子から GND へ電流を流します。
それでは、作成したプログラムを実行し、動作確認を行います。
M3069評価ボードが利用可能な場合は、評価ボード上にマルチファンクションI/Oボードを取付けてください。評価ボードが無い場合は、「動作確認用の回路」に従って、簡単な回路を構成すれば、動作確認が可能になります。
ボードをパソコン、または、ネットワークに接続し、電源を入れ、通信可能な状態にします。
「デバッグ」メニューから「デバッグ開始」を選択してください。作成したプログラムが起動しますので「接続」ボタンを押してください。成功すると図のようにメッセージが表示されますので「OK」を押してください。
ビルドエラーが発生する場合には、プログラムに誤りがないか確認してください。
「P40」のチェックボックスは、P40端子の入力レベルを表示しています。M3069評価ボードに接続している場合は、SW1のディップスイッチの1番を "ON" にするとチェックが消えます。逆に "OFF" にするとチェックが表示されます。(図1)
動作確認用の回路がある場合も同様に、スイッチを "ON" にすると、チェックが消えます。
「POUT0」にチェックを入れると、POUT0# の出力が "ON" になります。M3069評価ボードに接続している場合は、対応するLEDが点灯します。(図2)
動作確認用の回路がある場合も同様に、接続したLEDが点灯するはずです。
ハードウェアや、各機能の使用方法に関しての詳細は、以下のマニュアルでご案内しています。