USB-PC104シリーズ モーター制御ユニット Pythonサンプルプログラム

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

サンプルプログラム

import sys
import ctypes

# エラーコード(戻り値)
YDU_RESULT_SUCCESS = 0          # 正常終了

# YduOpen
YDU_OPEN_NORMAL = 0             # 通常オープン
YDU_OPEN_OUT_NOT_INIT = 0x01    # 出力初期化しない

# 軸指定
PMC_AXIS_X0 = 0x0001
PMC_AXIS_Y0 = 0x0002
PMC_AXIS_Z0 = 0x0004
PMC_AXIS_U0 = 0x0008
PMC_AXIS_X1 = 0x0010
PMC_AXIS_Y1 = 0x0020
PMC_AXIS_Z1 = 0x0040
PMC_AXIS_U1 = 0x0080

# StartMotion (wStartMode)
PMC_ACC = 0             # 加減速起動
PMC_CONST = 1           # 一定速起動

# StopMotion(wStopMode)
PMC_DEC_STOP = 0        # 減速停止
PMC_IMMEDIATE_STOP = 1  # 即停止

# StartMotion / SetMotion,GetMotion (wMoveMode)
PMC_JOG = 0             # 連続動作
PMC_ORG = 1             # 原点復帰動作
PMC_PTP = 2             # プリセット動作

# SetSensorConfig,GetSensorConfig (wMode)
PMC_LOGIC = 0           # センサ極性
PMC_STA_STP = 1         # STA/STP設定
PMC_SD_CFG = 2          # SD有効無効設定

# SetPulseConfig,GetPulseConfig (wMode)
PMC_PULSE_OUT = 0       # パルス出力論理
PMC_IDLE = 1            # アイドリングパルス
PMC_METHOD = 2          # パルス方式

# GetStatus
PMC_BUSY = 0            # 動作状態
PMC_SENSOR_STATE = 1    # センサ入力状態

# 動作パラメータ設定(SetMotion,GetMotion)
class MOTIONPMCS(ctypes.Structure):
    _fields_ = [('wAccMode', ctypes.c_ushort),  # 加減速モード
                ('dwLowSpeed', ctypes.c_ulong), # 起動時速度
                ('dwSpeed', ctypes.c_ulong),    # 移動速度
                ('wAccTime', ctypes.c_ushort),  # 加減速時間
                ('lStep', ctypes.c_long)]       # 移動パルス数,移動方向

# 動作パラメータ設定(SetMotionEx,GetMotionEx)
class MOTIONEXPMCS(ctypes.Structure):
    _fields_ = [('wSpeedRate', ctypes.c_ushort),    # 速度倍率
                ('wAccMode', ctypes.c_ushort),      # 加減速モード
                ('dwLowSpeed', ctypes.c_ulong),     # 起動時速度
                ('dwSpeed', ctypes.c_ulong),        # 移動速度
                ('wAccTime', ctypes.c_ushort),      # 加減速時間
                ('lStep', ctypes.c_long)]           # 移動パルス数,移動方向

# 加減速モード
PMC_ACC_NORMAL = 0      # 直線加減速
PMC_ACC_SIN = 1         # S字加減速

# 移動方向
PMC_DIR_CW = 1          # CW(+方向)
PMC_DIR_CCW = -1        # CCW(-方向)

# DLL
ydu = ctypes.windll.Ydu

# IDが0に設定されているPMC-S4/00/00A-Uをオープンします
unit_id = 0
result = ydu.YduOpen(unit_id, b'PMC-S4/00/00A-U', YDU_OPEN_NORMAL)
if result != YDU_RESULT_SUCCESS:
    print('オープンできません')
    sys.exit()

# オンで検知するセンサを接続している場合や、リミットスイッチを接続していない場合は
# モーターが動作しません。
# その場合は以下の関数を実行してセンサ設定を"オンで検知"に変更してください。
axis = PMC_AXIS_X0 + PMC_AXIS_Y0 + PMC_AXIS_Z0 + PMC_AXIS_U0
result = ydu.YduPmcsSetSensorConfig(unit_id, axis, PMC_LOGIC, 0x1f)

# X0軸の動作パラメータを設定します
motion = (MOTIONPMCS * 4)()
motion[0].wAccMode = PMC_ACC_NORMAL
motion[0].dwLowSpeed = 200
motion[0].dwSpeed = 2000
motion[0].wAccTime = 300
motion[0].lStep = PMC_DIR_CW
result = ydu.YduPmcsSetMotion(unit_id, PMC_AXIS_X0, PMC_JOG,
                              ctypes.byref(motion))

# モーター動作を開始します
result = ydu.YduPmcsStartMotion(unit_id, PMC_AXIS_X0, PMC_ACC, PMC_JOG)

# モーター動作を停止します
result = ydu.YduPmcsStopMotion(unit_id, PMC_AXIS_X0, PMC_IMMEDIATE_STOP)

# クローズ
result = ydu.YduClose(unit_id)

デジタル入出力のサンプルプログラム

API使用例

YduPmcsSetSensorConfig
# X0,Y0,Z0,U0軸のORG,+SD,-SD,+EL,-ELを「オンで検知」に設定します。
axis = PMC_AXIS_X0 + PMC_AXIS_Y0 + PMC_AXIS_Z0 + PMC_AXIS_U0
result = ydu.YduPmcsSetSensorConfig(unit_id, axis, PMC_LOGIC, 0x1f)
YduPmcsGetSensorConfig
# X0軸のセンサ極性設定を取得します。
axis = PMC_AXIS_X0
config = ctypes.c_ushort()
result = ydu.YduPmcsGetSensorConfig(unit_id, axis, PMC_LOGIC,
                                    ctypes.byref(config))
YduPmcsSetPulseConfig
# X0,Y0,Z0,U0軸のパルス出力論理を負論理に設定します。
axis = PMC_AXIS_X0 + PMC_AXIS_Y0 + PMC_AXIS_Z0 + PMC_AXIS_U0
result = ydu.YduPmcsSetPulseConfig(unit_id, axis, PMC_PULSE_OUT, 0)
YduPmcsGetPulseConfig
# X0軸のパルス出力論理を取得します。
axis = PMC_AXIS_X0
config = ctypes.c_ushort()
result = ydu.YduPmcsGetPulseConfig(unit_id, axis, PMC_PULSE_OUT,
                                   ctypes.byref(config))
YduPmcsSetMotion
# X0軸とZ0軸の動作パラメータを設定します。
axis = PMC_AXIS_X0 + PMC_AXIS_Z0
motion = (MOTIONPMCS * 4)()
motion[0].wAccMode = PMC_ACC_SIN
motion[0].dwLowSpeed = 200
motion[0].dwSpeed = 2000
motion[0].wAccTime = 300
motion[0].lStep = PMC_DIR_CW
motion[2].wAccMode = PMC_ACC_SIN
motion[2].dwLowSpeed = 100
motion[2].dwSpeed = 3000
motion[2].wAccTime = 1000
motion[2].lStep = PMC_DIR_CW
result = ydu.YduPmcsSetMotion(unit_id, axis, PMC_JOG, ctypes.byref(motion))
YduPmcsGetMotion
# X0軸とZ0軸の連続動作の動作パラメータを取得します。
# motion[0]にX0軸、motion[2]にZ0軸の動作パラメータが格納されます。
axis = PMC_AXIS_X0 + PMC_AXIS_Z0
motion = (MOTIONPMCS * 4)()
result = ydu.YduPmcsGetMotion(unit_id, axis, PMC_JOG, ctypes.byref(motion))
YduPmcsSetMotionEx
# X0軸とZ0軸の動作パラメータを設定します。
axis = PMC_AXIS_X0 + PMC_AXIS_Z0
motion_ex = (MOTIONEXPMCS * 4)()
motion_ex[0].wSpeedRate = 1
motion_ex[0].wAccMode = PMC_ACC_SIN
motion_ex[0].dwLowSpeed = 200
motion_ex[0].dwSpeed = 2000
motion_ex[0].wAccTime = 300
motion_ex[0].lStep = PMC_DIR_CW
motion_ex[2].wSpeedRate = 1
motion_ex[2].wAccMode = PMC_ACC_SIN
motion_ex[2].dwLowSpeed = 100
motion_ex[2].dwSpeed = 3000
motion_ex[2].wAccTime = 1000
motion_ex[2].lStep = PMC_DIR_CW
result = ydu.YduPmcsSetMotionEx(unit_id, axis, PMC_JOG,
                                ctypes.byref(motion_ex))
YduPmcsGetMotionEx
# X0軸とZ0軸の連続動作の動作パラメータを取得します。
# motion_ex[0]にX0軸、motion_ex[2]にZ0軸の動作パラメータが格納されます。
axis = PMC_AXIS_X0 + PMC_AXIS_Z0
motion_ex = (MOTIONEXPMCS * 4)()
result = ydu.YduPmcsGetMotionEx(unit_id, axis, PMC_JOG,
                                ctypes.byref(motion_ex))
YduPmcsGetCounter
# X0軸のカウンター値を読み込みます。
axis = PMC_AXIS_X0
data = ctypes.c_ulong()
result = ydu.YduPmcsGetCounter(unit_id, axis, ctypes.byref(data))
YduPmcsGetSpeed
# X0軸の速度データを読み込みます。
axis = PMC_AXIS_X0
data = ctypes.c_ushort()
result = ydu.YduPmcsGetSpeed(unit_id, axis, ctypes.byref(data))
YduPmcsGetStatus
# X0軸の動作状態を取得します。
axis = PMC_AXIS_X0
status = ctypes.c_ushort()
result = ydu.YduPmcsGetStatus(unit_id, axis, PMC_BUSY, ctypes.byref(status))
YduPmcsStartMotion
# X0軸とZ0軸を加減速起動で連続動作を開始します。
axis = PMC_AXIS_X0 + PMC_AXIS_Z0
result = ydu.YduPmcsStartMotion(unit_id, axis, PMC_ACC, PMC_JOG)
YduPmcsStopMotion
# X0軸とZ0軸のモーター動作を即停止します。
axis = PMC_AXIS_X0 + PMC_AXIS_Z0
result = ydu.YduPmcsStopMotion(unit_id, axis, PMC_IMMEDIATE_STOP)
YduPmcsChangeSpeed
# X0軸の速度を1000ppsに変更します。
axis = PMC_AXIS_X0
speed = 1000
result = ydu.YduPmcsChangeSpeed(unit_id, axis, speed)

関連情報

製品情報
ヘルプファイル(ソフトウェア説明書)