DAQ-Xシリーズ デジタル入出力ユニット Pythonサンプルプログラム

ソフトウェアマニュアル にPythonのサンプルコードは記載しておりません。
また、ソフトウェアパックにもPythonのサンプルプログラムは含まれておりませんので、Pythonで使用される場合は以下を参考にしてください。

サンプルプログラム

簡易デジタル入出力のサンプル

import sys
from ctypes import *

ydx = windll.LoadLibrary('ydx.dll')

# オープン
id = c_int()
result = ydx.YdxOpen(0, b'DIO-16/16C-USC', 0, byref(id))
# result = ydx.YdxOpen(0, b'DIO-16/16D-UBC', 0, byref(id))
# result = ydx.YdxOpen(0, b'DIO-16/16D-USC', 0, byref(id))
if result != 0:
  print("オープンできませんでした。(code = {0})".format(result))
  sys.exit()

# OUT0-15の出力
output_values = (c_int * 16)(1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1)
result = ydx.YdxDoOutputBit(id, 0, 16, byref(output_values))
if result != 0:
  print("出力に失敗しました。(code = {0})".format(result))
else:
  print("出力しました。")

# IN0-15の入力
input_values = (c_int * 16)()
result = ydx.YdxDiInputBit(id, 0, 16, 1, byref(input_values))
if result != 0:
  print("入力に失敗しました。(code = {0})".format(result))
else:
  print("入力しました。")
  for i, input_value in enumerate(input_values):
      print(' IN{}: {}'.format(i, input_value))

# クローズ
result = ydx.YdxClose(id)
if result != 0:
  print("クローズに失敗しました。(code = {0})".format(result))

高機能デジタル入力のサンプル

def di_polling():
  # データバッファの設定
  result = ydx.YdxDiSetBuffer(id, 0)    # FIFOバッファ
  # result = ydx.YdxDiSetBuffer(id, 1)  # リングバッファ
  if result != 0:
    print("YdxDiSetBuffer: Error (code = {0})".format(result))
    return

  # サンプリングクロックの設定
  result = ydx.YdxDiSetClock(id, 0)   # 内部クロック
  if result != 0:
    print("YdxDiSetClock: Error (code = {0})".format(result))
    return

  # 内部クロック周期の設定
  period = c_double(1000)
  result = ydx.YdxDiSetClockInternal(id, period)    # 1000uSec
  if result != 0:
    print("YdxDiSetClockInternal: Error (code = {0})".format(result))
    return

  # サンプリング開始条件の設定
  result = ydx.YdxDiSetStartCondition(id, 0, 0)   # ソフトウェア
  if result != 0:
    print("YdxDiSetStartCondition: Error (code = {0})".format(result))
    return

  # サンプリング停止条件の設定
  result = ydx.YdxDiSetStopCondition(id, 0, 0)    # サンプル数
  if result != 0:
    print("YdxDiSetStopCondition: Error (code = {0})".format(result))
    return

  # サンプリング停止条件(サンプル数)の設定
  result = ydx.YdxDiSetStopSampleNum(id, 100)
  if result != 0:
    print("YdxDiSetStopSampleNum: Error (code = {0})".format(result))
    return

  # データをクリア
  result = ydx.YdxDiClearData(id)
  if result != 0:
    print("YdxDiClearData: Error (code = {0})".format(result))
    return

  # デジタル入力動作を開始
  result = ydx.YdxDiStart(id)
  if result != 0:
    print("YdxDiStart: Error (code = {0})".format(result))
    return

  print("入力開始 ...")

  YDX_STATUS_BUSY = 0x00000001              # 動作中
  YDX_STATUS_SAMPLE_NUM = 0x00000002        # 監視サンプル数
  YDX_STATUS_START_TRIG = 0x00000004        # 開始条件成立済み
  YDX_STATUS_STOP_TRIG = 0x00000008         # 停止条件成立済み
  YDX_STATUS_SAMPLE_CLOCK_ERR = 0x00010000  # サンプリングクロックエラー発生
  YDX_STATUS_OVERRUN_ERR = 0x00020000       # オーバランエラー発生
  YDX_STATUS_HARDWARE_ERR = 0x00040000      # ハードウェアエラー発生
  YDX_STATUS_COMMUNICATE_ERR = 0x00080000   # 通信エラー発生

  # 動作終了待ち
  # 動作中ステータスがOFFになるまでポーリング
  status = c_int(YDX_STATUS_BUSY)
  sample_count = c_int()
  repeat_count = c_int()

  while (status.value & YDX_STATUS_BUSY) != 0:
    # ステータスの取得
    result = ydx.YdxDiGetStatus(id, byref(status), byref(sample_count), byref(repeat_count))
    if result != 0:
      print("YdxDiGetStatus: Error (code = {0})".format(result))
      return

    if ((status.value & YDX_STATUS_COMMUNICATE_ERR) != 0):
      print("Communicate Error!")
      return
    if ((status.value & YDX_STATUS_HARDWARE_ERR) != 0):
      print("Hardware Error!")
      return
    if ((status.value & YDX_STATUS_OVERRUN_ERR) != 0):
      print("Hardware Error!")
      return
    if ((status.value & YDX_STATUS_SAMPLE_CLOCK_ERR) != 0):
      print("Sample Clock Error!")
      return

  print("入力終了")
  print(" サンプル数={0}".format(sample_count.value))
  print(" リピート回数={0}".format(repeat_count.value))

  # データの読み出し
  input_values = (c_int * sample_count.value)()
  result = ydx.YdxDiGetData(id, byref(sample_count), byref(input_values))
  if result != 0:
    print("YdxDiGetData: Error (code = {0})".format(result))
    return

  ## 表示
  for input_value in input_values:
    print(" " + hex(input_value)[2:].zfill(4), end='')

import sys
from ctypes import *

ydx = windll.LoadLibrary('ydx.dll')

# オープン
id = c_int()
result = ydx.YdxOpen(0, b'DIO-16/16C-USC', 0, byref(id))
# result = ydx.YdxOpen(0, b'DIO-16/16D-UBC', 0, byref(id))
# result = ydx.YdxOpen(0, b'DIO-16/16D-USC', 0, byref(id))
if result != 0:
  print("オープンできませんでした。(code = {0})".format(result))
  sys.exit()

# 連続デジタル入力
di_polling()

# クローズ
result = ydx.YdxClose(id)
if result != 0:
  print("クローズに失敗しました。(code = {0})".format(result))

高機能デジタル出力のサンプル

def do_polling():
  # データバッファの設定
  result = ydx.YdxDoSetBuffer(id, 0)    # FIFOバッファ
  # result = ydx.YdxDoSetBuffer(id, 1)  # リングバッファ
  if result != 0:
    print("YdxDoSetBuffer: Error (code = {0})".format(result))
    return

  # チャネルの設定
  CHANNEL_NUM = 16   # 16チャネルを有効にする
  for channel in range(CHANNEL_NUM):
    result = ydx.YdxDoSetChannel(id, channel, 1)  # 高機能デジタル出力モード
    if result != 0:
      print("YdxDoSetChannel: Error (code = {0})".format(result))
      return

  # サンプリングクロックの設定
  result = ydx.YdxDoSetClock(id, 0)   # 内部クロック
  if result != 0:
    print("YdxDoSetClock: Error (code = {0})".format(result))
    return

  # 内部クロック周期の設定
  period = c_double(1000)
  result = ydx.YdxDoSetClockInternal(id, period)    # 1000uSec
  if result != 0:
    print("YdxDoSetClockInternal: Error (code = {0})".format(result))
    return

  # データの設定
  SAMPLE_NUM = 1000   # サンプル数
  output_values = (c_int * SAMPLE_NUM)()
  for i in range(SAMPLE_NUM):
    output_values[i] = i
  result = ydx.YdxDoSetData(id, SAMPLE_NUM, byref(output_values))
  if result != 0:
    print("YdxDoSetData: Error (code = {0})".format(result))
    return

  # サンプリング開始条件の設定
  result = ydx.YdxDoSetStartCondition(id, 0, 0)   # ソフトウェア
  if result != 0:
    print("YdxDoSetStartCondition: Error (code = {0})".format(result))
    return

  # サンプリング停止条件の設定
  result = ydx.YdxDoSetStopCondition(id, 0, 0)    # データ終了
  if result != 0:
    print("YdxDoSetStopCondition: Error (code = {0})".format(result))
    return

  # デジタル出力動作を開始
  result = ydx.YdxDoStart(id)
  if result != 0:
    print("YdxDoStart: Error (code = {0})".format(result))
    return

  print("出力開始 ...")

  YDX_STATUS_BUSY = 0x00000001              # 動作中
  YDX_STATUS_SAMPLE_NUM = 0x00000002        # 監視サンプル数
  YDX_STATUS_START_TRIG = 0x00000004        # 開始条件成立済み
  YDX_STATUS_STOP_TRIG = 0x00000008         # 停止条件成立済み
  YDX_STATUS_SAMPLE_CLOCK_ERR = 0x00010000  # サンプリングクロックエラー発生
  YDX_STATUS_OVERRUN_ERR = 0x00020000       # オーバランエラー発生
  YDX_STATUS_HARDWARE_ERR = 0x00040000      # ハードウェアエラー発生
  YDX_STATUS_COMMUNICATE_ERR = 0x00080000   # 通信エラー発生

  # 動作終了待ち
  # 動作中ステータスがOFFになるまでポーリング
  status = c_int(YDX_STATUS_BUSY)
  sample_count = c_int()
  repeat_count = c_int()
  not_out_num = c_int()

  while (status.value & YDX_STATUS_BUSY) != 0:
    # ステータスの取得
    result = ydx.YdxDoGetStatus(id, byref(status), byref(sample_count), byref(repeat_count), byref(not_out_num))
    if result != 0:
      print("YdxDoGetStatus: Error (code = {0})".format(result))
      return

    if ((status.value & YDX_STATUS_COMMUNICATE_ERR) != 0):
      print("Communicate Error!")
      return
    if ((status.value & YDX_STATUS_HARDWARE_ERR) != 0):
      print("Hardware Error!")
      return
    if ((status.value & YDX_STATUS_SAMPLE_CLOCK_ERR) != 0):
      print("Sample Clock Error!")
      return

  print("出力終了")
  print(" 出力済みサンプル数={0}".format(sample_count.value))
  print(" 動作済みリピート回数={0}".format(repeat_count.value))
  print(" 未出力サンプル数={0}".format(not_out_num.value))

import sys
from ctypes import *

ydx = windll.LoadLibrary('ydx.dll')

# オープン
id = c_int()
result = ydx.YdxOpen(0, b'DIO-16/16C-USC', 0, byref(id))
# result = ydx.YdxOpen(0, b'DIO-16/16D-UBC', 0, byref(id))
# result = ydx.YdxOpen(0, b'DIO-16/16D-USC', 0, byref(id))
if result != 0:
  print("オープンできませんでした。(code = {0})".format(result))
  sys.exit()

# 連続デジタル出力
do_polling()

# クローズ
result = ydx.YdxClose(id)
if result != 0:
  print("クローズに失敗しました。(code = {0})".format(result))

関連情報

製品情報
ソフトウェアマニュアル