Windowsにおけるデジタル入出力デバイスのインストールと使い方

当社のデジタル入出力デバイスを使用するための準備から基本的なプログラム開発までの一連の流れをご紹介します。
このチュートリアルでは、デバイスを初めてご使用される方向けに、スイッチ等の外部機器との接続や、ソフトウァのインストール(セットアップ)、デジタル入出力のプログラムの組み方をご紹介しています。
ご紹介する主な内容は、以下となります。

  • 外部機器との接続例
  • Windowsにおけるデバイスのセットアップ
  • Visual C#, VC++, VB.NET, Python におけるプログラム作成例

今回使用する条件は以下となります。
その他のOS、デバイスをご使用の場合、オンラインヘルプnew windowも合わせてご確認ください。

OS Windows 11
開発環境 Visual Studio 2019
デバイス DIO-1616LX-USBnew window
その他 PCB37PS-Pnew window シールド付きケーブル
※実際の製品型式にはPCB37PS-1.5Pのようにケーブル長の情報が含まれます。
EPD-37new window 中継端子台ターミナルユニット(37ピン)
CM-32new window デジタル入出力信号モニタアクセサリ
外部電源(12V~24V仕様)

■目次
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 プログラムの実行

2.1 プロジェクトの作成

Visual Studio 2019でプロジェクトを作成する方法を説明します。Visual Studio 2019を起動し、[ファイル(F)]から[新規作成 (N)]-[プロジェクト(P)]を選択します。

dio_tutorial_3_cpp_0010

[新しいプロジェクト]ダイアログボックスのテンプレートから、[Visual C++]の[MFC アプリ]を選択し、作成するプロジェクトの名前と保存場所を指定します。
この例ではプロジェクト名、ソリューション名をtestにしています。

dio_tutorial_3_cpp_0011

[作成]をクリックすると「MFC アプリケーション」が表示されます。

dio_tutorial_3_cpp_0012

「アプリケーションの種類」を「ダイアログベース」に変更し、「完了」をクリックするとプロジェクトが作成されます。

dio_tutorial_3_cpp_0013

2.2 Dio関数使用のための設定

ファイルの追加
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"

2.3 コードの作成

プロジェクトの作成、デバイスドライバ関数の追加が完了したら、プログラムを作成します。
プログラム例ではボタンを押したら入力ポート0のスイッチを確認し、出力ポート0のランプ指定値を点灯します。
内部処理的には、入力論理ポート0の入力値を確認し、出力論理ポート0に固定値を出力するプログラムを作成します。

■ボタンの配置
フォーム上にボタンを配置します。フォーム画面を開き、以下の手順でボタンを作成します。ボタン作成後にも位置、大きさを変えることができます。

  1. リソースビューを選択
  2. test>test.rc>Dialog>IDD_TEST_DIALOGを選択
  3. ツールボックスでボタンを選択
  4. フォーム上でクリック
  5. クリックしたままドラッグし、好きなサイズのところで離す

dio_tutorial_3_cpp_0020

■フォーム名を変更
ダイアログをクリックするとプロパティの設定を行えます。
Captionを「チュートリアルC++」に変更します。
タイトルが指定した名前になります。

dio_tutorial_3_cpp_0030

同様にボタンをクリックし、以下の項目を変更します。

Name IDC_BUTTON
Caption Click

dio_tutorial_3_cpp_0040

■コードの記述
ボタンの配置が終わったらコードを書きます。
作成したボタンをダブルクリックするとコードウィンドウが表示されます。ボタンを押されたときの処理として以下を追加します。

• 初期化処理
 初期化処理を行い、デバイスIdを取得し、デバイスにアクセス可能にします。DioInit(初期化処理)が正常終了した後、DioExit(終了処理)を呼び出すまで各機能関数が使えるようになります。 デバイス名は"DIO000“としていますが、異なる場合は登録したデバイス名を使用してください。 (デバイスマネージャー>製品のプロパティ>共通設定 で入力した値です。)

long  Ret;								// 戻り値
short Id; // デバイスId
char * 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のデバイスを
//アクセス不能にする
}

Ret(戻り値)について

返ってきた値を確認し正常に終了したかを確認することができます。正常終了の場合0、エラーの場合0以外が返ってきます。
本ページでは割愛していますが、実システムを作成する場合は関数実行後エラー処理のコードを追加するようにしてください。
戻り値処理(例) 

char		ErrorString[256] 					// エラー文字入力用変数
if (ret != 0){ // 戻り値が正常終了以外の場合
DioGetErrorString(ret, ErrorString); // エラー確認
}

2.4 プログラムの実行

コードが完成したら、プログラムの実行を行います。作成したプログラムを保存し、[ビルド(B)]メニュー>ソリューションのビルドを行います。
終わりましたら[デバック(D)]メニュー>デバックの開始ボタンをクリックし、作成したボタンが表示されることを確認します。

dio_tutorial_3_cpp_0050

画面上のボタンをクリックするとDIO000のポート0の入力を確認し、55HまたはAAHを出力ポート0から出力します。

dio_tutorial_3_cpp_0060

dio_tutorial_1_common_0150

提供されるAPI関数一覧
デジタル入出力ドライバソフトウェア API-DIO(WDM) は、当社製デジタルデバイスを簡単に制御できるさまざまな関数を用意しています。それぞれの関数は、処理ごとに分かりやすく分類されており、また処理の内容が一目で分かるような名称となっています。これらの関数を使用すれば、さらに高度な処理も可能です。各処理の詳しい内容は「オンラインヘルプnew window>デジタル入出力用ドライバ>関数リファレンス」をご覧ください。

サンプルプログラム
プログラムの例として単純入出力、複数ポート・ビットの入出力、トリガ監視、割り込み(コールバック)など豊富な種類のサンプルプログラムが添付されています。
Visual C++ 版の他にも Visual C #版 や Visual Basic 版、Python版も用意されています。サンプルのコードは以下の場所にあります。
<開発環境をインストールした場所> ¥DIOWDM ¥ Sample ¥ Vc2013

• C++の場合

dio_tutorial_3_cpp_0070

• Linuxを使用したい場合
    Linuxを使用される場合はAPI-DIO(LNX) new windowを使用してください。
    インストール方法もWindowsと異なります。(オンラインヘルプnew window