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データ)用サンプルプログラムは こちらへ

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 : 送信データ文字列
    引数3 : 受信データ最少文字数 0:無指定 1以上で最少数を指定
    戻り値 : 受信データ文字列
    主な処理
      cp932コード文字列 wdata を、C言語用に 8bitのASCII文字列 wdatabuf に変換します
      FT_Write() で ASCII文字列 wdatabuf をデバイスに送信します
      データを受信するまでしばらく待ちます
      引数3 が 0 のときは、受信までの最少待ち時間を 100ms とします
          受信データ最少文字数を 9 とし、最大で 5s 待ちます
      引数3 が 0以外のときは、受信までの最少待ち時間は 10ms となります
          受信データが指定数または指定数をこえるまで、最大で 500ms 待ちます
      FT_GetStatus() で 受信しているデータ数 rqnum を取得します
      受信しているデータ数 rqnum が指定した受信データ数以上になると、
          128文字分のASCII文字領域 rdatabuf を準備し、
          FT_Read() で、rqnum 分の受信データを rdatabuf に取得します
          rdatabuf ASCII文字列の受信データを受信文字数分だけ抽出し、
          cp932コード文字列に変換して rdata に格納します

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


(完)

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

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

Copyright(C) DACS electronics