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のバージョンが異なる場合、項目やコマンドが異なる場合があります

~Python のプログラム例~
2.1 ファイルの作成 
2.2 Dio関数使用のための設定
2.3 コードの作成
2.4 プログラムの実行

2.1 ファイルの作成

拡張子が.pyのファイルを作成します。
お好みのテキストエディタで、拡張子が.pyのファイルを作成します。
この例ではファイル名をtext.pyにしています。

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

ファイルの追加
Pythonでデバイスドライバの関数を使用するためには、cdio.pyファイルを追加する必要があります。
cdio.pyファイルを使うために、プロジェクトの保存場所にファイルをコピーします。
cdio.pyは「<インストール先フォルダ>¥DIOWDM ¥ Sample ¥Inc」にあります。

コードの追加
追加したcdio.pyを使用するために、以下のコードをソースコード、今回の例ではtest.pyに追加します。

先頭に追加

import	ctypes
import ctypes.wintypes
import cdio

2.3 コードの作成

プロジェクトの作成、 cdio.pyの importが完了したら、プログラムを作成します。
プログラム例では起動したら入力ポート0のスイッチを確認し、出力する値を変更することでポート0のランプを点灯します。
内部処理的には、入力論理ポート0の入力値を確認し、出力論理ポート0に任意値を出力するプログラムを作成します。

■コードの記述

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

Ret = ctypes.c_long()									# 戻り値
Id = ctypes.c_short() # デバイスId
Devicename = ctypes.c_char() # デバイス名
DeviceName = “DIO000” # デバイス名を格納
Ret.value  = cdio.DioInit(DeviceName.encode(), ctypes.byref(Id)) # デバイスIdを取得し、デバイスにアクセス可能にする

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

Data = ctypes.c_ubyte()									# 値
PortNo = ctypes.c_short() # ポート番号
PortNo = 0
Ret.value = cdio.DioInpByte(Id, PortNo, ctypes.byref(Data)) # PortNoから1ポート入力
print(f'DioInpByte port : data = 0x{Data.value:02x}’) # データの表示

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

Data = input("出力値を入れてください(hex) : ")					# 出力するデータを入力
Data = ctypes.c_ubyte(int(Data, 16)) # 出力するデータを設定

• デジタル出力処理
 出力ポートに1バイト(8ビット)出力します。

Ret.value = cdio.DioOutByte(Id, PortNo, Data)					# PortNo,にDataを出力

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

Ret.value = cdio.DioExit(Id)								# Idのデバイスをアクセス不能にします

コード_(test.py)

import ctypes
import ctypes.wintypes
import cdio

#==========================================
# 変数の宣言
#==========================================
Id = ctypes.c_short() # 戻り値
Ret = ctypes.c_long() # デバイスId
DeviceName = ctypes.c_char() # デバイス名
PortNo = ctypes.c_short() # ポート番号
Data = ctypes.c_ubyte() # 値
PortNo = 0
#==========================================
# 初期化処理
#==========================================
DeviceName = "DIO000" # デバイス名を格納
Ret.value = cdio.DioInit(DeviceName.encode(), ctypes.byref(Id))
# デバイスIdを取得し、デバイスにアクセス可能にする
#==========================================
# 入力処理
#==========================================
Ret.value = cdio.DioInpByte(Id, PortNo, ctypes.byref(Data)) # 1ポート入力
print(f'DioInpByte port : data = 0x{Data.value:02x}') # データの表示(16進数)

#==========================================
# 出力処理時のデータ
#==========================================
Data = input("出力値を入れてください(hex) : ") # 出力するデータを入力(16進数)
Data = ctypes.c_ubyte(int(Data, 16)) # 出力するデータを設定(16進数)

#==========================================
# 出力処理
#==========================================
Ret.value = cdio.DioOutByte(Id, PortNo, Data) # Dataを出力

#==========================================
# 終了処理
#==========================================
Ret.value = cdio.DioExit(Id) # Idのデバイスをアクセス不能にします

Ret(戻り値)について

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

ErrorString = ctypes.create_string_buffer(256) 			# エラー文字入力用変数
if (Ret.value != 0) : # 戻り値が正常終了以外の場合
 Ret.value = cdio.DioGetErrorString ( Ret , ErrorString ) # エラー確認

2.4 プログラムの実行

コードが完成したら、プログラムの実行を行います。
コマンドプロンプトを使用して実行します。

  1. スタートボタンをクリック
  2. 検索バーに「cmd」と入力
  3. コマンドプロンプトを選択することで起動できます。

コマンドプロンプトで「cd ファイルの場所」を入力し作成したファイルの場所へ移動後、作成したファイル名(test.py)を入力すると実行されます。

dio_tutorial_5_py_0010

実行するとDIO000のポート0の入力の入力を確認し、コマンドプロンプトに入力した数値を出力ポート0から出力します。

dio_tutorial_5_py_0020

dio_tutorial_1_common_0150

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

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

• Pythonの場合

dio_tutorial_5_py_0030

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