当社のデジタル入出力デバイスを使用するための準備から基本的なプログラム開発までの一連の流れをご紹介します。 このチュートリアルでは、デバイスを初めてご使用される方向けに、スイッチ等の外部機器との接続や、ソフトウァのインストール(セットアップ)、デジタル入出力のプログラムの組み方をご紹介しています。 ご紹介する主な内容は、以下となります。
今回使用する条件は以下となります。 その他のOS、デバイスをご使用の場合、オンラインヘルプも合わせてご確認ください。
■目次 1.ハードウェア編セットアップ 1.1 デジタルデバイス~端子台の接続 1.2 外部機器の配線1-スイッチ- 1.3 外部機器の配線2-LEDランプ- 1.4 デバイスのセットアップ 1.5 ハードウェアのインストール 1.6 診断プログラムによる動作確認 2.ソフトウェア編 プログラムの作成 2.1 プロジェクトの作成 Visual C# / VC++ / VB.NET / Python
2.プログラムの作成 この章ではVisual Studio 2019を使用してVisual C# / VC++ / VB.NET / Pythonでのプログラムの作成を行います。 Visual Studioのバージョンが異なる場合、項目やコマンドが異なる場合があります
~Visual C++のプログラム例~ 2.1 プロジェクトの作成 2.2 Dio関数使用のための設定 2.3 コードの作成 2.4 プログラムの実行
Visual Studio 2019でプロジェクトを作成する方法を説明します。Visual Studio 2019を起動し、[ファイル(F)]から[新規作成 (N)]-[プロジェクト(P)]を選択します。
[新しいプロジェクト]ダイアログボックスのテンプレートから、[Visual C++]の[MFC アプリ]を選択し、作成するプロジェクトの名前と保存場所を指定します。 この例ではプロジェクト名、ソリューション名をtestにしています。
[作成]をクリックすると「MFC アプリケーション」が表示されます。
「アプリケーションの種類」を「ダイアログベース」に変更し、「完了」をクリックするとプロジェクトが作成されます。
ファイルの追加 Visual C++でデバイスドライバの関数を使用するためには、ファイルCdio.h、ライブラリCDIO.libを追加する必要があります。それぞれ使用するために、プロジェクトの保存場所にファイルをコピーします。 Cdio.hは「<インストール先フォルダ>¥DIOWDM ¥ Sample ¥Inc」にあります。 CDIO.libは「<インストール先フォルダ>¥DIOWDM ¥ Sample ¥Lib_arm64」または「<インストール先フォルダ>¥DIOWDM ¥ Sample ¥Lib_i386」にあります。 ファイルをプロジェクトの保存場所にコピーした後、「プロジェクト(P)」-[既存項目の追加(G)]からCDIO.Libを追加します。32bit用と64bit用があるため、使用するほうをインクルードしてください。
コードの追加 追加したCdio.hを使用するために、以下のコードをC++ソースコード(拡張子.cppファイル)、今回の例ではtestDlg.cppに追加します。
先頭に追加
#include "Cdio.h"
プロジェクトの作成、デバイスドライバ関数の追加が完了したら、プログラムを作成します。 プログラム例ではボタンを押したら入力ポート0のスイッチを確認し、出力ポート0のランプ指定値を点灯します。 内部処理的には、入力論理ポート0の入力値を確認し、出力論理ポート0に固定値を出力するプログラムを作成します。
■ボタンの配置 フォーム上にボタンを配置します。フォーム画面を開き、以下の手順でボタンを作成します。ボタン作成後にも位置、大きさを変えることができます。
■フォーム名を変更 ダイアログをクリックするとプロパティの設定を行えます。 Captionを「チュートリアルC++」に変更します。 タイトルが指定した名前になります。
同様にボタンをクリックし、以下の項目を変更します。
■コードの記述 ボタンの配置が終わったらコードを書きます。 作成したボタンをダブルクリックするとコードウィンドウが表示されます。ボタンを押されたときの処理として以下を追加します。
• 初期化処理 初期化処理を行い、デバイスIdを取得し、デバイスにアクセス可能にします。DioInit(初期化処理)が正常終了した後、DioExit(終了処理)を呼び出すまで各機能関数が使えるようになります。 デバイス名は"DIO000“としていますが、異なる場合は登録したデバイス名を使用してください。 (デバイスマネージャー>製品のプロパティ>共通設定 で入力した値です。)
long Ret; // 戻り値short Id; // デバイスIdchar * DeviceName; // デバイス名DeviceName = “DIO000”; // デバイス名を格納Ret = DioInit(DeviceName, &Id); // デバイスIdを取得し、 //デバイスにアクセス可能にする
• デジタル入力処理 入力ポードから1バイト(8ビット)入力します。スイッチの状態がONかOFFかを確認します。
byte Data; // 値short PortNo; // ポート番号PortNo = 0;Ret = DioInpByte(Id, PortNo, &Data); // PortNoから1ポート入力
• デジタル出力ポートの状態確認 出力ポートの状態を1ポート分確認します。現在の出力を確認し、出力処理で出す値を変更します。
Ret = DioEchoBackByte(Id, PortNo, &Data); // 出力の確認if (Data == 0xAA){ // 出力がAAHの場合 Data = 0x55; // 55Hを入力} else { // 出力がAAH以外の場合 Data = 0xAA; // AAHを入力}
• デジタル出力処理 出力ポートに1バイト(8ビット)出力します。例として出力は55H、またはAAHとします。
Ret = DioOutByte (Id, PortNo, Data); // PortNo,にDataを出力
• 終了処理 終了処理を行い、デジタル入出力デバイスへのアクセス不能にします。 DioExit(終了処理)を呼び出すまで各機能関数が使えなくなります。
Ret = dio.Exit(Id); // Idのデバイスをアクセス不能にします
include以外の自動生成部分を除くtestDlg.cpp コード_(testDlg.cpp)
// testDlg.cpp : 実装ファイル// #include "pch.h"#include "framework.h"#include "test.h"#include "testDlg.h"#include "afxdialogex.h"#include "CDio.h" void CtestDlg::OnBnClickedButton(){ //========================================== // 変数の宣言 //========================================== long Ret; // 戻り値 short Id; // デバイスId short PortNo; // ポート番号 byte Data; // 入力データ char* Devicename; // デバイス名 PortNo = 0; //========================================== // 初期化処理 //========================================== Devicename = "DIO000"; // デバイス名を格納 Ret = DioInit(Devicename, &Id); // デバイスIdを取得し、 //デバイスにアクセス可能にする //========================================== // 入力処理 //========================================== Ret = DioInpByte(Id, PortNo, &Data); // 1ポート入力 //========================================== // 出力ポート状態 //========================================== Ret = DioEchoBackByte(Id, PortNo, &Data); // 現在の出力の確認 //========================================== // 出力処理時のデータ //========================================== if (Data == 0xAA) { // 出力がAAHの場合 Data = 0x55; // 16進数で55を入力 } else { // 出力がAAH以外の場合 Data = 0xAA; // 16進数でAAを入力 } //========================================== // 出力処理 //========================================== Ret = DioOutByte(Id, PortNo, Data); // Dataを出力 //========================================== // 終了処理 //========================================== Ret = DioExit(Id); // Idのデバイスを //アクセス不能にする}
返ってきた値を確認し正常に終了したかを確認することができます。正常終了の場合0、エラーの場合0以外が返ってきます。 本ページでは割愛していますが、実システムを作成する場合は関数実行後エラー処理のコードを追加するようにしてください。 戻り値処理(例)
char ErrorString[256] // エラー文字入力用変数if (ret != 0){ // 戻り値が正常終了以外の場合 DioGetErrorString(ret, ErrorString); // エラー確認}
コードが完成したら、プログラムの実行を行います。作成したプログラムを保存し、[ビルド(B)]メニュー>ソリューションのビルドを行います。 終わりましたら[デバック(D)]メニュー>デバックの開始ボタンをクリックし、作成したボタンが表示されることを確認します。
画面上のボタンをクリックするとDIO000のポート0の入力を確認し、55HまたはAAHを出力ポート0から出力します。
提供されるAPI関数一覧 デジタル入出力ドライバソフトウェア API-DIO(WDM) は、当社製デジタルデバイスを簡単に制御できるさまざまな関数を用意しています。それぞれの関数は、処理ごとに分かりやすく分類されており、また処理の内容が一目で分かるような名称となっています。これらの関数を使用すれば、さらに高度な処理も可能です。各処理の詳しい内容は「オンラインヘルプ>デジタル入出力用ドライバ>関数リファレンス」をご覧ください。
サンプルプログラム プログラムの例として単純入出力、複数ポート・ビットの入出力、トリガ監視、割り込み(コールバック)など豊富な種類のサンプルプログラムが添付されています。 Visual C++ 版の他にも Visual C #版 や Visual Basic 版、Python版も用意されています。サンプルのコードは以下の場所にあります。 <開発環境をインストールした場所> ¥DIOWDM ¥ Sample ¥ Vc2013
• C++の場合
• Linuxを使用したい場合 Linuxを使用される場合はAPI-DIO(LNX) を使用してください。 インストール方法もWindowsと異なります。(オンラインヘルプ)