当社のアナログ入出力デバイスを使用するための準備から基本的なプログラム開発までの一連の流れをご紹介します。 このチュートリアルでは、デバイスを初めてご使用される方にファンクションジェネレータ等の外部機器との接続や、ソフトウェアのインストール(セットアップ)、アナログ入出力のプログラムの組み方を紹介しています。 ご紹介する主な内容は、以下となります。
今回使用する条件は以下となります。 その他のOS、デバイスをご使用の場合、オンラインヘルプも合わせてご確認ください。
■目次 1.セットアップ 1.1 外部機器との接続 1.2 ソフトウェアのインストール 1.3 ハードウェアのインストール 1.4 診断プログラムによる動作確認 2.プログラムの作成 Visual C# / VC++ / VB.NET / Python
2.プログラムの作成 この章ではVisual Studio 2019を使用してVisual C# / VC++ / VB.NET / Pythonでのプログラムの作成を行います。 Visual Studioのバージョンが異なる場合、項目やコマンドが異なる場合があります。
~Visual C#のプログラム例~ 2.1 プロジェクトの作成 2.2 Aio関数使用のための設定 2.3 コードの作成 2.4 プログラムの実行
Visual Studio 2019でプロジェクトを作成する方法を説明します。 Visual Studio 2019を起動し、[ファイル(F)]メニューから[新規作成(N)]-[プロジェクト(P)]を選択します。
[新しいプロジェクト]ダイアログボックスのテンプレートから、[Visual C#]の[Windows フォーム アプリケーション]を選択し、作成するプロジェクトの名前と保存場所を指定します。
この例ではプロジェクト名、ソリューション名をtestにしています。[作成]をクリックすると、プロジェクトが作成されます。
ファイルの追加 Visual C#でデバイスドライバの関数を使用するためには、CaioCs.csファイルを追加する必要があります。CaiCs.csファイルを使うために、プロジェクトの保存場所にファイルをコピーします。CaioCs.csは「<インストール先フォルダ>¥AIOWDM ¥ Sample ¥Inc」にあります。
ファイルをプロジェクトの保存場所にコピーした後、「プロジェクト(P)」-[既存項目の追加(G)]からCaioCs.csを追加します。
プロジェクトの設定を変更します。プロジェクトのプロパティを開きダイアログの画面左側で[ビルド]を選択します。コールバック対応として必要なため[アンセーフコードの許可]にチェックを入れ、OKを押します。
コードの追加 追加したCaioCs.csを使用するため、以下のコードをC#ソースコード(拡張子.csファイル)、に追加します。
先頭に追加
using CaioCs;
フォームクラスの先頭に追加
Public class Form1 : System.Windows.Forms.Form { Caio aio = new Caio(); //インスタンスの作成
プロジェクトの作成、ファイルの追加/コードの追加が完了したら、プログラムを作成します。 プログラム例ではボタンを押したら入力ch0の値を確認し、出力ch0に-1を乗算した値を出力します。
■ボタンの配置 フォーム上にボタンを配置します。フォーム画面を開き、以下の手順でボタンを作成します。ボタン作成後にも位置、大きさを変えることができます。
■フォーム名を変更します。 フォームクリックするとプロパティの設定を行えます。 表示テキストを「チュートリアルC#」に変更します。 タイトルが指定した名前になります。
同様にボタンをクリックし、以下の項目を変更します。
■コードの記述 ボタンの配置が終わったらコードを書きます。 作成したボタンをダブルクリックするとコードウィンドウが表示されます。ボタンを押されたときの処理として以下を追加します。
• 初期化処理 初期化処理を行い、デバイスIdを取得し、デバイスにアクセス可能にします。AioInit(初期化処理)が正常終了した後、AioExit(終了処理)を呼び出すまで各機能関数が使えるようになります。 デバイス名は"AIO000“としていますが、異なる場合は登録したデバイス名を使用してください。
int Ret; // 戻り値 short Id; // デバイスId string DeviceName; // デバイス名 DeviceName = "AIO000"; // デバイス名を格納 Ret = aio.Init ( DeviceName , out Id ); // デバイスIdを取得し、デバイスにアクセス可能にする
• 入力処理 現在の入力されているデータを確認します。
float Data; // 値 short ChNo; // チャネル番号 ChNo = 0; // チャネル番号に0を代入 Ret = aio.SingleAiEx ( Id , 0 , out Data ); // ChNoから1回アナログ入力
• 出力処理 出力Chに確認時の入力値を出力します。入力値をそのまま出力しても構いませんが、今回は入力値に-1を掛ける処理を行い、入力値とは異なる値を出力します。
Data *= -1; // 入力値に-1を乗算 Ret = aio.SingleAoEx (Id, ChNo, Data); // ChNo,に1回アナログ出力
• 終了処理 終了処理を行い、デバイスをアクセス不能にします。 AioExit(終了処理)を呼び出すまで、各機能関数が使えます。
Ret = aio.Exit(Id); // Idのデバイスをアクセス不能にします
コード_(Form1.cs)
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 CaioCs; // デバイスドライバ関数使用のために追加 namespace test { public partial class Form1 : Form { Caio aio = new Caio(); // デバイスドライバ関数使用のために追加 public Form1() { InitializeComponent(); } private void Button_Click(object sender, EventArgs e) // ボタンをクリックした場合の処理を記載 { //========================================= // 変数の宣言 //========================================== int Ret; // 戻り値 short Id; // デバイスId short ChNo; // チャネル番号 float Data; // 入力データ string DeviceName; // デバイス名 ChNo = 0; // チャネル番号に0を代入(例として入力、出力のch0を使用するため) //========================================== // 初期化処理 //========================================== DeviceName = "AIO000"; // デバイス名を格納 Ret = aio.Init(DeviceName, out Id); // デバイスIdを取得し、 デバイスにアクセス可能にする //========================================== // 入力処理 //========================================== Ret = aio.SingleAiEx(Id, ChNo, out Data); // ChNoから1回アナログ入力 //========================================== // 出力処理 // ========================================== Data *= -1; Ret = aio.SingleAoEx(Id, ChNo, Data); // ChNo,に1回アナログ出力 //========================================== // 終了処理 //========================================== Ret = aio.Exit(Id); // Idのデバイスをアクセス不能にする } } }
関数の戻り値を確認できれば、処理が正常に終了しています。正常終了の場合0、エラーの場合0以外が返ってきます。 本ページでは割愛していますが、実システムを作成する場合は関数実行後エラー処理のコードを追加するようにしてください。 戻り値処理(例)
string ErrorString; // エラー文字入力用変数 if (ret != 0){ // 戻り値が正常終了以外の場合 aio.GetErrorString(ret, out ErrorString); // エラー確認 xxx.Text = ErrorString; // xxxにエラー内容を表示 }
コードが完成したら、プログラムの実行を行います。作成したプログラムを保存し、[ビルド(B)]メニュー>ソリューションのビルドを行います。 終わりましたら[デバック(D)]メニュー>デバックの開始ボタンをクリックし、作成したボタンが表示されることを確認します。
画面上のボタンをクリックするとAIO000の入力ch0の入力を確認し、出力ch0から確認した値に-1をかけたものを出力します。
提供されるAPI関数一覧 アナログ入出力ドライバソフトウェア API-AIO(WDM) は、当社製アナログデバイスを簡単に制御できる、さまざまな関数を用意しています。それぞれの関数は、処理ごとに分かりやすく分類されており、また処理の内容が一目で分かるような名称となっています。これらの関数を使用すれば、さらに高度な処理も可能です。各処理の詳しい内容は「オンラインヘルプ> ホーム > アナログ入出力ドライバ > 関数リファレンス」をご覧ください。
サンプルプログラム プログラムの例として簡易入出力、高機能入出力、など豊富な種類のサンプルプログラムが添付されています。 Visual C# 版の他にも Visual C++ 版 や Visual Basic 版、Python版も用意されています。
サンプルのコードは以下の場所にあります。 <開発環境をインストールした場所> ¥AIOWDM ¥ Sample ¥ Vcs2010
• C#の場合
Python以外の各言語サンプルフォルダ ┃ ┣━━━Ai アナログ入力用サンプルフォルダ ┃ ┃ ┃ ┣━━DevBuf デバイスバッファ用サンプルフォルダ ┃ ┣━━MultiAi 簡易入力サンプル(複数チャネル) ┃ ┣━━SingleAi 簡易入力サンプル(1チャネル) ┃ ┗━━UsrBuf ユーザバッファ用サンプルフォルダ ┃ ┣━━━Ao アナログ出力用サンプルフォルダ ┃ ┃ ┃ ┣━━DevBuf デバイスバッファ用サンプルフォルダ ┃ ┣━━MultiAo 簡易出力サンプル(複数チャネル) ┃ ┣━━SingleAo 簡易出力サンプル(1チャネル) ┃ ┗━━UsrBuf ユーザバッファ用サンプルフォルダ ┃ ┣━━━Cnt カウンタ、タイマ用サンプルフォルダ ┃ ┃ ┃ ┣━━Counter ┃ ┣━━Interval ┃ ┗━━Watch ┃ ┣━━━Dio デジタル入出力用サンプルフォルダ ┃ ┃ ┃ ┣━━DioBit ┃ ┣━━DioByte ┃ ┗━━━Other その他のサンプル用フォルダ ┃ ┣━━Convert ┗━━Multi1
• Linuxを使用したい場合 Linuxを使用される場合はAPI-AIO(LNX) を使用してください。 インストール方法もWindowsと異なります。(オンラインヘルプ)
~Visual C++のプログラム例~ 2.1 プロジェクトの作成 2.2 Aio関数使用のための設定 2.3 コードの作成 2.4 プログラムの実行
Visual Studio 2019でプロジェクトを作成する方法を説明します。 Visual Studio 2019を起動し、[ファイル(F)]から[新規作成(N)]-[プロジェクト(P)]を選択します。
[新しいプロジェクト]ダイアログボックスのテンプレートから、[Visual C++]の[MFC アプリ]を選択し、作成するプロジェクトの名前と保存場所を指定します。
この例ではプロジェクト名、ソリューション名をtestにしています。[作成]をクリックすると「MFC アプリケーション」が表示されます。
「アプリケーションの種類」を「ダイアログベース」に変更し、「完了」をクリックするとプロジェクトが作成されます。
ファイルの追加 Visual C++でデバイスドライバの関数を使用するためには、ヘッダファイルCaio.h、ライブラリCAIO.libを追加する必要があります。それぞれ使用するために、プロジェクトの保存場所にファイルをコピーします。 Caio.hは「<インストール先フォルダ>¥AIOWDM ¥ Sample ¥Inc」にあります。 CAIO.libは「<インストール先フォルダ>¥AIOWDM ¥ Sample ¥Lib_amd64」または「<インストール先フォルダ>¥AIOWDM ¥ Sample ¥Lib_i386」にあります。32bit用は「¥Lib_i386」、64bit用は「¥Lib_amd64」にあるため、使用するほうをインクルードしてください。
ファイルをプロジェクトの保存場所にコピーした後、「プロジェクト(P)」-[既存項目の追加(G)]からCAIO.Libを追加します。
コードの追加 追加したCaio.hを使用するために、以下のコードをC++ソースコード(拡張子.cppファイル)に追加します。
includeが書かれているところに追加します。
#include "Caio.h"
プロジェクトの作成、デバイスドライバ関数の追加が完了したら、プログラムを作成します。 プログラム例ではボタンを押したら入力ch0の値を確認し、出力ch0に-1を乗算した値を出力します。
■ダイアログ名を変更 ダイアログをクリックするとプロパティの設定を行えます。 Captionを「チュートリアルC++」に変更します。 タイトルが指定した名前になります。
long Ret; // 戻り値 short Id; // デバイスId char * DeviceName; // デバイス名 DeviceName = "AIO000"; // デバイス名を格納 Ret = AioInit(DeviceName, &Id); // デバイスIdを取得し、デバイスにアクセス可能にする
float Data; // 入力データ short ChNo; // チャネル番号 ChNo = 0; Ret = AioSingleAiEx(Id, ChNo, &Data); // 入力値の確認
Data *= -1; // 入力値に-1を乗算 Ret = AioSingleAoEx(Id, ChNo, Data); // ChNo,に1回アナログ出力
• 終了処理 終了処理を行い、デバイスをアクセス不能にします AioExit(終了処理)を呼び出すまで、各機能関数が使えます。
Ret = AioExit(Id); // Idのデバイスをアクセス不能にします
コード_(testDlg.cpp)
// testDlg.cpp : 実装ファイル // #include "pch.h" #include "framework.h" #include "test.h" #include "testDlg.h" #include "afxdialogex.h" #include "CAio.h" void CtestDlg::OnBnClickedButton() { //========================================= // 変数の宣言 //========================================== int Ret; // 戻り値 short Id; // デバイスId short ChNo; // チャネル番号 float Data; // 入力データ char * DeviceName; // デバイス名 ChNo = 0; //チャネル番号に0を代入 //========================================== // 初期化処理 //========================================== DeviceName = "AIO000"; // デバイス名を格納 Ret = AioInit(DeviceName, &Id); // デバイスIdを取得し、デバイスにアクセス可能にする //========================================== // 入力処理 //========================================== Ret = AioSingleAiEx(Id, ChNo, &Data); // ChNoから1回アナログ入力 //========================================== // 出力処理 // ========================================== Data *= -1; Ret = AioSingleAoEx(Id, ChNo, Data); // ChNo,に1回アナログ出力 //========================================== // 終了処理 //========================================== Ret = AioExit(Id); // Idのデバイスをアクセス不能にする }
char ErrorString[256]; // エラー文字入力用変数 if (ret != 0){ // 戻り値が正常終了以外の場合 AioGetErrorString(ret, ErrorString); // エラー確認 }
サンプルプログラム プログラムの例として簡易入出力、高機能入出力、など豊富な種類のサンプルプログラムが添付されています。 Visual C++ 版の他にも Visual C# 版 や Visual Basic 版、Python版も用意されています。
サンプルのコードは以下の場所にあります。 <開発環境をインストールした場所> ¥AIOWDM ¥ Sample ¥ Vc2013
• C++の場合
~Visual Basic .Net のプログラム例~ 2.1 プロジェクトの作成 2.2 Aio関数使用のための設定 2.3 コードの作成 2.4 プログラムの実行
[新しいプロジェクト]ダイアログボックスのテンプレートから、[Visual Basic .Net]の[Windows フォーム アプリケーション]を選択します。
作成するプロジェクトの名前と保存場所を指定します。この例ではプロジェクト名、ソリューション名をtestにしています。 [作成]をクリックすると、プロジェクトが作成されます。
ファイルの追加 Visual Basic.NETでデバイスドライバの関数を使用するためには、Caio.vbファイルを追加する必要があります。Caio.vbファイルを使うために、プロジェクトの保存場所にファイルをコピーします。 Caio.vbは「<インストール先フォルダ>¥AIOWDM ¥ Sample ¥Inc」にあります。
ファイルをプロジェクトの保存場所にコピーした後、「プロジェクト(P)」-[既存項目の追加(G)]からCaio.vbを追加します。
■フォーム名を変更 フォームクリックするとプロパティの設定を行えます。 表示テキストを「チュートリアルVB」に変更します。 タイトルが指定した名前になります。
Dim Ret As Integer ' 戻り値 Dim Id As Short ' デバイスId Dim DeviceName As String ' デバイス名 DeviceName = "AIO000" ' デバイス名を格納 Ret = AioInit(DeviceName, Id) ' デバイスIdを取得し、デバイスにアクセス可能にする
Dim Data As Single ' 値 Dim ChNo As Integer ' チャネル番号 ChNo = 0 'チャネル番号に0を代入 Ret = AioSingleAiEx(Id, ChNo, Data) ' ChNoから1回アナログ入力
Data *= -1 '入力値に-1を乗算 Ret = AioSingleAoEx (Id, ChNo, Data) ' ChNo,に1回アナログ出力
Ret = AioExit(Id) ' Idのデバイスをアクセス不能にします
コード_(Form1.vb)
Public Class Form1 '========================================== ' 変数の宣言 '========================================== Dim Id As Short ' 戻り値 Dim Ret As Integer ' デバイスId Dim ChNo As Integer ' チャネル番号 Dim Data As Single ' 入力データ Dim Devicename As String ' デバイス名 Private Sub Button_Click(sender As Object, e As EventArgs) Handles button.Click ChNo = 0 '========================================== ' 初期化処理 '========================================== Devicename = "AIO000" ' デバイス名を格納 Ret = AioInit(Devicename, Id) ' デバイスIdを取得し、デバイスにアクセス可能にする '========================================== ' 入力処理 '========================================== Ret = AioSingleAiEx(Id, ChNo, Data) ' ChNoから1回アナログ入力 '========================================== ' 出力処理 '========================================== Data *= -1 Ret = AioSingleAoEx(Id, ChNo, Data) ' ChNo,に1回アナログ出力 '========================================== ' 終了処理 '========================================== Ret = AioExit(Id) End Sub End Class
関数の戻り値を確認し正常に終了したかを確認することができます。正常終了の場合0、エラーの場合0以外が返ってきます。 関数の戻り値を確認し正常に終了したかを確認することができます。正常終了の場合0、エラーの場合0以外が返ってきます。 戻り値処理(例)
Dim ErrorString As New StringBuilder("", 256) ' エラー文字入力用変数 if (ret <> 0) Then ' 戻り値が正常終了以外の場合 AioGetErrorString(ret, ErrorString) ' エラー確認 }
画面上のボタンをクリックするとAIO000の入力ch0の入力を確認し、同じ値に-1をかけたものを出力ch0から出力します。
サンプルプログラム プログラムの例として簡易入出力、高機能入出力、など豊富な種類のサンプルプログラムが添付されています。 Visual Basic 版の他にも Visual C++ 版 や Visual C# 版、Python版も用意されています。
サンプルのコードは以下の場所にあります。 <開発環境をインストールした場所> ¥AIOWDM ¥ Sample ¥ Vb2010
• VBの場合
~Python のプログラム例~ 2.1 プロジェクトの作成 2.2 Aio関数使用のための設定 2.3 コードの作成 2.4 プログラムの実行
拡張子が.pyのファイルを作成します。お好みのテキストエディタで、拡張子が.pyのファイルを作成します。 この例ではファイル名をtest.pyにしています。
ファイルの追加 Pythonでデバイスドライバの関数を使用するためには、caio.pyファイルを追加する必要があります。caio.pyファイルを使うために、プロジェクトの保存場所にファイルをコピーします。caio.pyは「<インストール先フォルダ>¥AIOWDM ¥ Sample ¥Inc」にあります。
モジュールのインクルード 追加したcaio.pyを使用するために、以下のソースコードをtest.pyに追加します。
import ctypes import ctypes.wintypes import caio
プロジェクトの作成、 caio.pyの importが完了したら、プログラムを作成します。 プログラム例では実行後自動で入力ch0の値を確認し、出力ch0に任意の値を出力します。
Ret = ctypes.c_long() # 戻り値 Id = ctypes.c_short() # デバイスId DeviceName = ctypes.c_char() # デバイス名 DeviceName = "AIO000" # デバイス名を格納 Ret.value = caio.AioInit(DeviceName.encode(), ctypes.byref(Id)) # デバイスIdを取得し、デバイスにアクセス可能にする
Data = ctypes.c_float() # 値 ChNo = ctypes.c_short() # ポート番号 ChNo = 0 Ret.value = caio.AioSingleAiEx(Id, ChNo, ctypes.byref(Data)) # ChNoから1回アナログ入力 print(f'AioSIngleAiEx ch : data = 0x{Data}') # データの表示
• 出力処理 出力Chに確認時の入力値を出力します。出力値は指定された値を出します。
Data = input("出力値を入れてください: ") # 出力するデータを入力 Data = ctypes.c_float(int(Data)) # 出力するデータを設定 Ret = caio.AioSingleAoEx (Id, ChNo, Data) # ChNo,に1回アナログ出力
Ret = caio.AioExit(Id) # Idのデバイスをアクセス不能にします
コード_(test.py)
import ctypes import ctypes.wintypes import caio #========================================== # 変数の宣言 #========================================== Id = ctypes.c_short() # 戻り値 Ret = ctypes.c_long() # デバイスId DeviceName = ctypes.c_char() # デバイス名 ChNo = ctypes.c_short() # ポート番号 Data = ctypes.c_float() # 値 PortNo = 0 #========================================== # 初期化処理 #========================================== DeviceName = "AIO000" # デバイス名を格納 Ret.value = caio.AioInit(DeviceName.encode(), ctypes.byref(Id)) # デバイスIdを取得し、デバイスにアクセス可能 #========================================== # 入力処理 #========================================== Ret.value = caio.AioSIngleAiEx(Id, ChNo, ctypes.byref(Data)) # 1回アナログ入力 print(f'AioSIngleAiEx ch : data = 0x{Data}') # データの表示 #========================================== # 出力処理時のデータ #========================================== Data = input("出力値を入れてください: ") # 出力するデータを入力 Data = ctypes.c_float(int(Data)) # 出力するデータを設定 #========================================== # 出力処理 #========================================== Ret.value = caio.AioSingleAoEx(Id,ChNo, Data) # 1回アナログ出力 #========================================== # 終了処理 #========================================== Ret.value = caio.AioExit(Id) # Idのデバイスをアクセス不能
関数の戻り値を確認し正常に終了したかを確認することができます。正常終了の場合0、エラーの場合0以外が返ってきます。 本ページでは割愛していますが、実システムを作成する場合は関数実行後エラー処理のコードを追加するようにしてください。 戻り値処理(例)
ErrorString = ctypes.create_string_buffer(256) # エラー文字入力用変数 if (Ret.value != 0) : # 戻り値が正常終了以外の場合 Ret.value = caio.AioGetErrorString ( Ret , ErrorString ) # エラー確認
コードが完成したら、プログラムの実行を行います。PowerShellを使用して実行します。今回の説明ではPowerShell背説明をしますがコマンドプロンプトでpythonを実行することもできます。
コマンドプロンプトは
することで起動できます。
コマンドプロンプトで「cd ファイルの場所」を入力し作成したファイルの場所へ移動後、[python.exe 作成したファイル名(test.py)]を入力すると実行されます。
実行するとAIO000の入力ch0の値を確認し、出力ch0に任意の値を出力します。
サンプルプログラム プログラムの例として簡易入出力、高機能入出力、など豊富な種類のサンプルプログラムが添付されています。 Python 版の他にも Visual C++ 版 や Visual C# 版、Visual Basic版も用意されています。
サンプルのコードは以下の場所にあります。 <開発環境をインストールした場所> ¥AIOWDM ¥ Sample ¥ Python3
• Pythonの場合
Pythonサンプルフォルダ ┃ ┣━━━Ai アナログ入力用サンプルフォルダ ┃ ┃ ┃ ┣━━DevBuf デバイスバッファ用サンプルフォルダ ┃ ┣━━MultiAi 簡易入力サンプル(複数チャネル) ┃ ┗━━SingleAi 簡易入力サンプル(1チャネル) ┃ ┗━━━Ao アナログ出力用サンプルフォルダ ┃ ┣━━DevBuf デバイスバッファ用サンプルフォルダ ┣━━MultiAo 簡易入力サンプル(複数チャネル) ┗━━SingleAo 簡易入力サンプル(1チャネル)