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_2_cs_0010

[新しいプロジェクト]ダイアログボックスのテンプレートから、[Visual C#]の[Windows フォーム アプリケーション]を選択し、次へをクリックします。

dio_tutorial_2_cs_0020

作成するプロジェクトの名前と保存場所を指定します。この例ではプロジェクト名、ソリューション名をtestにしています。
[作成]をクリックすると、プロジェクトが作成されます。

dio_tutorial_2_cs_0030

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

ファイルの追加
Visual C#でデバイスドライバの関数を使用するためには、CdioCs.csファイルを追加する必要があります。
CdiCs.csファイルを使うために、プロジェクトの保存場所にファイルをコピーします。
CdioCs.csは「<インストール先フォルダ>¥DIOWDM ¥ Sample ¥Inc」にあります。
ファイルをプロジェクトの保存場所にコピーした後、「プロジェクト(P)」-[既存項目の追加(G)]からCdioCs.csを追加します。

コードの追加
追加したCdioCs.csを使用するために、以下のコードをC#ソースコード(拡張子.csファイル)、今回の例でtest.csに追加します。

先頭に追加

using CdioCs;

フォームクラスの先頭に追加

Public class Form1 : System.Windows.Forms.Form
{
Cdio dio = new Cdio(); //インスタンスの作成

「アンセーフコードはxxxxxxxでコンパイルした場合のみ有効です」と出た場合

ビルドを行った際、表題(アンセーフコードは…)の文章が表示された場合、プロジェクトの設定を変更します。プロジェクトのプロパティを開きダイアログの画面左側で[ビルド]を選択します。
[アンセーフコードの許可]にチェックを入れて再度ビルドしてみてください。

2.3 コードの作成

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

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

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

dio_tutorial_2_cs_0050

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

dio_tutorial_2_cs_0060

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

Name button
Font 任意
Text Click

dio_tutorial_2_cs_0070

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

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

int 		Ret;						// 戻り値
short 	Id;						// デバイスId
string	DeviceName;				// デバイス名
DeviceName = “DIO000”;				//  デバイス名を格納
Ret = dio.Init(DeviceName, Id);			// デバイスIdを取得し、デバイスにアクセス可能にする

• デジタル入力処理
 入力ポードから1バイト(8ビット)入力します。スイッチの状態がONかOFFかを確認します。

byte		Data;							// 値
short PortNo; // ポート番号
PortNo = 0;
Ret = dio.InpByte(Id, PortNo, Data); // PortNoから1ポート入力

• デジタル出力ポートの状態確認
 出力ポートの状態を1ポート分確認します。現在の出力を確認し、出力処理で出す値を変更します。

Ret = dio.EchoBackByte(Id, PortNo, out Data); 		//  出力の確認
if (Data == 0xAA){ //  出力がAAHの場合
    Data = 0x55; //  55Hを入力
} else { //  出力がAAH以外の場合
    Data = 0xAA; //  AAHを入力
}

• デジタル出力処理
 出力ポートに1バイト(8ビット)出力します。例として出力は55H、またはAAHとします。

Ret = dio.OutByte (Id, PortNo, Data); 			// PortNo,にDataを出力

• 終了処理
 終了処理を行い、デジタル入出力デバイスへのアクセス不能にします。
 DioExit(終了処理)を呼び出すまで各機能関数が使えなくなります。

Ret = dio.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 CdioCs;
 
namespace test
{
    public partial class Form1 : Form
    {
        Cdio dio = new Cdio();
        public Form1()
        {
            InitializeComponent();
        }
        private void Button_Click(object sender, EventArgs e)
        {
         //=========================================
         // 変数の宣言
         //==========================================
            int Ret; // 戻り値
            short Id;                    // デバイスId
            short PortNo;              // ポート番号
            byte Data;                // 入力データ
            string DeviceName;     // デバイス名
            PortNo  = 0; 

         //==========================================
         // 初期化処理
         //==========================================
            DeviceName = "DIO000";                  // デバイス名を格納
            Ret = dio.Init(DeviceName, out Id);  // デバイスIdを取得し
                                                                // デバイスにアクセス可能にする
         //==========================================
         // 入力処理
         //==========================================
            Ret = dio.InpByte(Id, PortNo, out Data); // 1ポート入力
         //==========================================
         // 出力ポート状態
         // ==========================================
            Ret = dio.EchoBackByte(Id, PortNo, out Data); // 現在の出力の確認
         //==========================================
         // 出力処理時のデータ
         //==========================================
            if (Data == 0xAA){ // 出力がAAHの場合
            Data = 0x55; // 16進数で55を入力
            } else { // 出力がAAH以外の場合
            Data = 0xAA; // 16進数でAAを入力
            }
         //==========================================
         // 出力処理
         // ==========================================
            Ret = dio.OutByte(Id, PortNo, Data);  // Dataを出力
         //==========================================
         // 終了処理
         //==========================================
            Ret = dio.Exit(Id);                          // Idのデバイスを
                                                                    //アクセス不能にする
        }
    }
}

Ret(戻り値)について

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

string 	ErrorString							// エラー文字入力用変数
if (ret != 0){ // 戻り値が正常終了以外の場合
dio.GetErrorString(ret, out ErrorString); // エラー確認
}

2.4 プログラムの実行

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

dio_tutorial_2_cs_0080

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

dio_tutorial_2_cs_0090

dio_tutorial_1_common_0150

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

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

• C#の場合

dio_tutorial_2_cs_0100

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