WMXはPythonでソフトモーションコントロールもサポートしています。この記事では開発環境についてまとめました。とりあえず動かすためにはどんな感じになるかの雰囲気をお伝えできればと思います。
コーディングと動作中はこんな感じ
Pythonのコンソールアプリケーションで軸を動作させました。コードエディタはVisual Studio Codeを使用しています。現在の座標はWMX3 Consoleで確認できます。
WMX3.6での対応バージョン
Python3.6x 64bit
上記のみになります。32bitや他のPythonバージョンはサポートしていません。
また、WMXの全ての機能をPythonから呼び出す事はできません。
検証環境
OS:Windows10 64bit
WMX3.6
Python 3.6
Anaconda Navigator2.6.0
AnacondaでPythonの環境を構築しています。
開発環境 Anacondaのインストール
仮想環境を作成するアプリになります。Pythonのバージョンを切り替えるのが容易になります。
こちらからインストールします。 Navigator | Anaconda
こちらの記事が参考になります。Anacondaのインストール手順【写真付き手順】 #Python – Qiita
AnacondaでPython 3.6環境の作り方
WindowsスタートメニューからAnacondaを起動します。
Environmentsをクリックします。
新しい環境を作成します。 Createボタンを押します。
以下の設定でCreateを行ってください。
AnacondaでPython 3.6の実行
Anacondaで、先ほど作成した環境を実行します。
ターミナルを開きます。 Dos窓アプリを起動します。
Python ソースコードエディターについて
メモ帳でもコード作成はできますが、私はVisual Studio Codeが好きです。
Visual Studio CodeでPythonのコーディングを行う時は、以下のような追加機能があるとコーディングしやすくなります。お好みでインストールしてください。
WMXソースコードの作成
環境が整いましたので、PythonでWMXを動かしてみましょう。説明を簡単にするために C:\WorkPython\PythonTest ディレクトリをプロジェクトフォルダーとして進めていきます。
ソースファイル作成
VS Codeを右クリックで新しいテキストファイルを作成します。
保存を行うと、名前を付けて保存が出てきますので、適当な名前でファイルに保存してください。
今回のソースコード名は PythonTest.py としました。
テストコードの準備
今回はEtherCATの通信を開始し、1軸を相対移動を行う動作で確認しました。先ほど作成したファイルにコードをコピーしてください。
# WMXに必要なコード
from WMX3ApiPython import *
from time import *
INFINITE = int(0xFFFFFFFF)
def main():
# 制御する軸番号
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)
# ディバイス情報の取得
#devInfo = DevicesInfo()
#ret, devInfo = Wmx3Lib.GetAllDevices()
#print('device Id : %02d Name: %s' % (devInfo.GetDevices(0).id, devInfo.GetDevices(0).name))
#ここでユーザーの処理を記述します。
print('WMXサーボオン')
Wmx3Lib_cm.axisControl.SetServoOn(AXIS_NO, 1)
# サーボがONするまで待機
while True:
ret, CmStatus = Wmx3Lib_cm.GetStatus()
if (CmStatus.GetAxesStatus(0).servoOn):
break
sleep(0.1)
print('相対位置移動')
posCommand = Motion_PosCommand()
posCommand.profile.type = ProfileType.Trapezoidal
posCommand.axis = AXIS_NO
posCommand.target = 10000
posCommand.profile.velocity = 100000
posCommand.profile.acc = 1000000
posCommand.profile.dec = 1000000
Wmx3Lib_cm.motion.StartMov(posCommand)
#移動命令の完了待ち(サーボの位置決め完了ではありません)
Wmx3Lib_cm.motion.Wait(0)
print('待機中。何かキーを押すと終了します。')
input()
print('WMXサーボオフ')
Wmx3Lib_cm.axisControl.SetServoOn(AXIS_NO, 0)
# サーボがOFFするまで待機
while True:
ret, CmStatus = Wmx3Lib_cm.GetStatus()
if (not CmStatus.GetAxesStatus(0).servoOn):
break
sleep(0.1)
#スレーブとの通信終了
Wmx3Lib.StopCommunication(INFINITE)
#WMXの終了
Wmx3Lib.CloseDevice()
print('WMXプログラム終了')
sleep(3)
return 0
if __name__ == '__main__':
main()
Pythonのコードを動作させる準備
ソースコードのみでは動作できません。別途ファイルを準備する必要がります。公式ドキュメントに以下の記載があります。
ファイルの配置
多分みんな思うでしょう。配置しますといわれてもWMX3ApiPythonはどこにあるんや?(笑)
見つけました。 C:\Program Files\SoftServo\WMX3\Lib\PythonApi フォルダー内にありました。
この二つのファイルをプロジェクトフォルダーにコピーします。
.pydファイルは、WindowsアプリケーションでいうDLLと思ってください。
pyファイルは、スクリプト内からファイル名でimportするファイルです。
公式ドキュメントにある3つ目、IMDll.dllはどこにるんや?(笑)
安心してください。こちらにありますので、このファイルをプロジェクトフォルダーにコピーします。32bit用の86もありますが、サポートされていません。
x86フォルダーでない側が64bit用のファイルになります。
ポイント
Pythonで動作させるには以上の3ファイルが必要です。プロジェクトごとにこの作業を行ってください
作成したコードの実行方法
Anacondaで開いたDos窓にコマンドを入れて操作をおこないます。
ディレクトリの移動
実行を行うために、プロンプトのディレクトリーを移動します。cd コマンドで参照先が変わります
cd C:\WorkPython\PythonTest
これでプロジェクトのフォルダーに参照が移動されました。プロンプトの黒い画面の右クリックで貼り付け動作になります。
テストコードの実行
Pythonコマンドを使用します。
Python PythonTest.py
をコンソールに入力してください
テストコードの実行結果
WMXで動作をおこないました。
Pythonコード実行前の状態
軸0サーボをOFF(励磁なし)しています。
軸0の現在位置は123で停止させています。 ※実際に装置で稼働させる時は、電子ギアのユーザー単位設定を行ってください。
Python PythonTest.py を実行した
通信直後に、軸0がサーボがONし、現在位置から10000移動しました。コード通りの動きですね。
printの出力は以下のようになります。
コードはinput()命令で止まっていますので、何かのキーを押すとWMXの残りのコードが処理されます。
サーボがOFFになり、通信も止まりました。
以上で、コーディングから実行まで出来ました。
私が考えるPythonコードの使い方
ソースコードのコンパイルがいらないため、実機でのソフト変更もやりやすいですね。WMXはユーザーが作成したプログラム実行中に、さらに別のプログラムを稼働させる事が出来ます。そのため、だいたいの動きはC#で作っておいて、実験的にある部分のみPythonコードで動かす用途で使えそうです。
コメント