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状態を表しています。
デジタル出力の出力状態を取得
同時に複数のプログラムを動作させている場合、出力の状態が変わっている場合があります。デジタル出力の現在の状態を取得するには、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のいいところですね。
コメント