Python言語でDACSのUSB機器を操作 その1
 

  Python での DACSのUSB機器操作は、とにかくシンプル。

まずは Windowsパソコンに Python をインストール

  Python は、コンパイルが不要なインタープリタ形式の言語で、プログラミング開発が素早くできるメリットがあります。 無償で配布されていますので、インターネットで「Python インストール」にて検索し、そちらを参考にして Python の動作環境を準備してください。 対象となるバージョンは 3.9 です(2021年1月時点)。

デバイスドライバは C言語用のドライバを使用します

  C言語で作成されたサンプルプログラムなどが動作する環境であれば、デバイスドライバを準備する必要はありません。 DACSのUSB機器用デバイスドライバをインストールしていない場合は、弊社HPダウンロードページから デバイスドライバをダウンロードしてインストールしてください。

サンプルプログラムの準備

  こちらをダウンロードしてください -- Python USB機器用サンプルプログラム(2KB)

  解凍すると、 ① d15dio.py (サンプルプログラム) と ② FT.py (関数) の2個のプログラムファイルがありますので、 この2個のファイルを、サンプルを実行する適当なフォルダに一緒に格納します。

  (動作条件1) 接続するDACSデバイスは1個のみとします。
  (動作条件2) FTDI社のUSBチップを使用した他社製品は接続していないものとします。
  (動作条件3) DACS-2500(K)、DACS-1700(K) の各シリーズを対象としています。
                DACS-8200、DACS-9600(K)、DACS-E350-STD は、関数ファイル(FT.py)の一部を
                変更する必要があります。本ページ後半の関数ファイルの説明をご覧ください。

        カウンタ用サンプルプログラムは こちらへ

        モーションコントローラ用サンプルプログラムは こちらへ

        DACS-2600(byteデータ)用サンプルプログラムは こちらへ

        計測ユニット(AD変換)用サンプルプログラムは こちらへ

        PWMパルス出力サンプルプログラムは こちらへ

Python でデバイスを操作

  コマンドプロンプトを開いて、ディレクトリを d15dio.py のあるフォルダに移動し、 d15dio.py と入力してサンプルを実行します。 これで、DACSのUSB機器とデータの送受信ができるようになります。
  コマンドプロンプトの開き方、ディレクトリの移動方法など、Pythonプログラムの実行方法が不明な場合は、 インターネット上の各種情報を参考にしてください。


 
デジタル出力コマンド W0123456 を送信し、デジタル入力データ R0xxxxxx 受信例

  Lチカを試してみましょう。
  DACSのUSBデバイスには緑色のLEDランプがあります。   このLEDはWコマンドでbit23をONにすると点灯します。
  W0800000(enter) で点灯   W0000000(enter) で消灯となります。


サンプルプログラム d15dio.py の内容


import FT

handle = FT.init_dacs(0)
if handle.value == None:
    print('no device')
    exit()

while True:
    writedata = input('keyin = ') + chr(0xd)
    if len(writedata) < 2: break
    print(writedata)
    readdata = FT.transfer_dacs(handle, writedata, 0)
    print(readdata)

FT.close_dacs(handle)

関数ファイル FT.py をインポート
 
デバイス(0番目)をOPEN
デバイスの接続がない場合
  デバイスなしにて終了
 
以下をくり返し実行
  コマンド文字列をキー入力
  enterキーのみのときは終了
  送信文字列を表示
  デバイスに送信し応答を受信
  受信文字列を表示
 
デバイスをclose


サンプルプログラム d15dio.py の動作

  DACSのUSB機器(DACS-2500Kなど)をOPENします。
  キーボードからコマンド文字列を入力し、その文字列に復帰コード(16進数 0xd)を追加します。
      入力するコマンドデータの例   W0000000 (注1を参照)
  writedata をデバイスに送信し、受信したデータを readdata に格納します。
  readdata を画面に表示します。
      受信データの例   R0FFFFFF (注2を参照)
  キー入力がenterのみとなるまで繰り返します。
  終了前にデバイスをcloseします。

  (注1)
  DACSのUSB機器では、送信文字列 (例)W0000000 の最後に、復帰コード(16進数 0xd)が必要です。 キーボードから入力したデータの最後は、復帰改行コード(16進数 0xa)となるため、
入力データの最後に chr(0xd) を追加していることに注視してください。 ユーザプログラミングでも、送信文字列の最後には、必ず chr(0xd) を追加してください。 これにより文字列の最後は 0xd と 0xa の2文字分がつながることになりますが、 DACSのUSB機器では、復帰改行コード(16進数 0xa)は不要のため、 関数 FT.transfer_dacs() にて、0xa を削除してデバイスに送信しています。
  (注2)
  受信文字列の最後には、復帰コード(16進数 0xd)が追加になって、受信文字数に含まれています。


関数ファイル FT.py について

  関数 FT.init_dacs, FT.transfer_dacs, FT.close_dacs の内容を詳しく知りたい方、 また、DACS-8200、DACS-9600(K)、DACS-E350-STD など、 ボード内部のシリアル通信設定が必要となるデバイスの場合は、以下の説明をご覧ください。


関数ファイル FT.py の内容

  全体の内容は、FT.py をテキストエディタなどで開いてご覧ください。

  import ctypes   C言語プログラムとの変数の橋渡し役です
  import time     コマンド送信からレスポンス受信までの時間待ちに使用します

  ・関数 init_dacs(devnum)
 
    引数 : devnum デバイス番号(int型)   (例) 1個のみ接続しているときは 0
    戻り値 : デバイスハンドル
    主な処理
      res = dll.FT_Open(ctypes.c_uint(devnum), ctypes.pointer(hdl))
          指定番のデバイスを OPEN し、hdl にデバイスハンドルを取得します
      res = dll.FT_SetChars(hdl, 0xd, 1, 0, 0)           区切り文字(0xd)を指定します
      res = dll.FT_SetTimeouts(hdl, 100, 100)         タイムアウト時間(msec)を指定します
    DACS-8200などは、ボード内部のシリアル通信の追加設定が必要です。
    各デバイスの #res = dll.FT_setBaudRate 以下3行の#を削除して実行可としてください。

  ・関数 transfer_dacs(hdl, wdata, rnum)
 
    引数1 : デバイスハンドル
    引数2 : 送信データ文字列   送信データ文字列長が0のときは送信処理なし
    引数3 : 受信データ文字数
            0: 無指定   100ms無条件にwait後、すべての受信データを取得
            1以上: 取得文字数を指定
              指定文字数の受信データがあれば、直ちにデータを取得して戻る
              指定文字数のデータを受信するまで、最大500msのwait
            -1: 受信処理なし
    戻り値 : 受信データ文字列
    主な処理
      ・送信処理
      cp932コード文字列 wdata を、C言語用に 8bitのASCII文字列 wdatabuf に変換します
      FT_Write() で ASCII文字列 wdatabuf をデバイスに送信します
      ・受信待ち時間について
      引数3 が 0 のとき
            受信データの有無にかかわらず、受信までの待ち時間を 100ms とします。
      引数3 が 1以上のとき
            指定文字数の受信データがあれば、待ち時間はありません。
            受信データが指定数または指定数をこえるまで、最大で 500ms 待ちます。
      ・受信処理
      FT_GetStatus() で 受信しているデータ数 rqnum を取得します
      受信しているデータ数 rqnum が指定した受信データ数以上になると、
          1024文字分のASCII文字領域 rdatabuf を準備し、
          FT_Read() で、指定文字数分の受信データを rdatabuf に取得します。
          指定文字数を超えるデータは、そのまま残しておきます。
          引数3 が 0 のときは、すべての受信データを取得します。
          rdatabuf ASCII文字列の受信データを cp932コード文字列に変換して rdata に格納します。

  ・関数 close_dacs(hdl)     引数 : デバイスハンドル   戻り値 : 正常終了のとき0


(完)

  このページに直接こられた方は、こちらをクリックして、
  ダックス技研株式会社 計測制御用電子機器のHOMEに移動してください。
  USB接続のDIO、計測ユニットなどDACS製品を掲載しています。

    ダックス技研株式会社     〒709-0721 岡山県赤磐市桜が丘東5-5-380

Copyright(C) DACS electronics