Python デジタルI/Oの制御

コーディング

Visual StudioをインストールしないPCで、ちょっとしたWMXのモーションの検証をしたいときにPythonを使うのがいいですね。今回は制御の基礎として、センサの入力と信号出力のコードをご紹介します。

※この記事ではWMX3.6/Python3.6で動作確認を行っています。

デジタル出力の制御方法

Pythonでデジタル出力を行うコードはWmx3Lib_Io.SetOutBit(0x00, 0x01, 0x01) 関数を使用します。

1つ目の引数は対象スレーブのアドレスです。(下図.の前側の値=0)

2つ目の引数は対象スレーブのBitアドレスです。(下図.の後ろの値=1)

3つ目の引数は出力値です。1を指定するとスレーブの出力がON。0を指定するとOFFになります。

コードの動作結果は、WMXの標準ツールで確認できます。緑色がON状態を表しています。

WMX3 このアプリケーションの使い方はこちら

デジタル出力の出力状態を取得

同時に複数のプログラムを動作させている場合、出力の状態が変わっている場合があります。デジタル出力の現在の状態を取得するには、Wmx3Lib_Io.GetInBit(0x00, 0x02)関数を使用します。

1つ目の引数がアドレスになります。

2つ目の引数がBitの指定になります。

戻り値が出力値になります。1で出力ON。0でOFFになります。

デジタル入力の値を取得

inData = Wmx3Lib_Io.GetInBit(0x00, 0x02)

1つ目の引数がアドレスになります。

2つ目の引数がBitの指定になります。

戻り値が出力値になります。1で出力ON。0でOFFになります。

サンプルコード

bit単位の制御は以下のコードを使用します

このコードはWindowsスレッドで動作するので、リアルタイム処理ではありません。※WMX3.6で検証したコード

# WMXに必要なコード
from WMX3ApiPython import *
from time import *
INFINITE = int(0xFFFFFFFF)
def main():
    # 制御する軸番号(0から始まります。)
    AXIS_NO = 0
    print('WMXプログラムスタート ディバイスを作成します')
    # WMXを使用するおまじない
    Wmx3Lib = WMX3Api()
    Wmx3Lib.CreateDevice('C:\\Program Files\\SoftServo\\WMX3\\', DeviceType.DeviceTypeNormal, INFINITE)
    Wmx3Lib.SetDeviceName('devicePython')
    Wmx3Lib_cm = CoreMotion(Wmx3Lib)
    #スレーブとの通信開始
    ret = Wmx3Lib.StartCommunication(INFINITE)
    
    #ここでユーザーの処理を記述します。
    
    # デジタル出力の状態を取得
    Wmx3Lib_Io = Io(Wmx3Lib)
    ret, outData = Wmx3Lib_Io.GetOutBit(0x00, 0x01)
    print('デジタル出力(0x01)の状態=' + str(outData))
    # デジタル出力
    Wmx3Lib_Io.SetOutBit(0x00, 0x01, 0x01)
    
    # デジタル出力の状態を取得
    ret, outData = Wmx3Lib_Io.GetOutBit(0x00, 0x01)
    print('デジタル出力(0x01)の状態=' + str(outData))
    
    # デジタル入力の値を取得
    ret, inData = Wmx3Lib_Io.GetInBit(0x00, 0x02)
    print('デジタル入力(0x02)の値=' + str(inData))
    
    print('待機中。何かキーを押すと終了します。')
    input()
    #スレーブとの通信終了
    Wmx3Lib.StopCommunication(INFINITE)
    #WMXの終了
    Wmx3Lib.CloseDevice()
    print('WMXプログラム終了')
    
    sleep(3)
    return 0
    
if __name__ == '__main__':
    main()

スレーブの通信終了関数を呼ばなければ、別のWMXコードが走っていてもこのコードを実行できます。※アプリは複数実行できるのがWMXのいいところですね。

コメント

タイトルとURLをコピーしました