PMX PythonLib MemWRITE()
『PMX Library for Python』のMemWRITE()関数について解説します。
【解説】
MemWRITEコマンドは、RAM領域のメモリマップにデータを書き込むためのコマンドです。このコマンドを使用することで各種設定値の書き換えや、サーボのトルク指示、動作指令などを実行することができます。
【構文】
status = MemWRITE(ID, address, dataArray, writeOpt)
【例】
1 2 3 4 5 6 |
# MemWRITE関数を直接使って入力電圧最小値設定に情報を書き込む newMinVoltageLimit = 9500 writeDataArray = newMinVoltageLimit.to_bytes(length=2, byteorder="little", signed=False) print('76番地(入力電圧最小値設定)に[9500](9.5V)を書き込みます') flag = pmx.MemWRITE(ServoID, PMX.RamAddrList.MinVoltageLimit, writeDataArray) print(hex(flag)) |
【パラメータ】
引数1:ID(int型)
第一引数の「ID」はサーボIDです。「ID」は、MemWRITEコマンドの命令の対象になるサーボを指定しています。「ID」を0に指定すると、ID0のサーボを指定することができます。
引数2:address(int型)
第二引数の「address」は先頭アドレスです。「先頭アドレス」とは、メモリマップのアドレスを指し、読み出すデータの先頭のアドレスを指定することができます。上記の例では「PMX.RamAddrList.MinVoltageLimit」と書いていますが、これはライブラリ内で定義された変数で、メモリマップのアドレスを指定しています。「PMX.RamAddrList.MinVoltageLimit」には76が代入されていますので、実行の際は76に変換されます。また数値で76と指定しても同じ番地にデータを書き込むことができます。アドレスは『オンラインマニュアル』をご参照ください。
引数3:dataArray(byteArray型)
第三引数の「dataArray」は書込データです。サーボに書き込むデータを第三引数で渡します。書込データはリトルエンディアンで1バイトずつに分割したデータをバイトオブジェクト(bytes型)で渡します。
引数4:writeOpt(int型)
第四引数の「writeOpt」は、サーボがトルクオンの状態でMemWRITEコマンドの実行を許可するかを指定できます。許可する場合は1、許可しない場合は0を渡します。デフォルト値として0が代入されていますので、トルクオンの状態で実行を許可しない場合は「writeOpt」を省略することが可能です。
【データを用意する方法】
Pythonには、データを分割するためのint.to_bytes()という便利な関数が用意されています。この関数を使用することで簡単にデータをバイトオブジェクト(bytes型)に変換することができます。
1 |
writeDataArray = newMinVoltageLimit.to_bytes(length=2, byteorder="little", signed=False) |
第一引数のlengthは分割するバイト数を指定します。このデータは2バイトに分割するため2を指定します。
第二引数のbyteorderはリトルエンディアンか、ビッグエンディアンを指定できます。PMXサーボのデータはリトルエンディアン形式ですので"little"を指定します。
第三引数のsignedは符号の有無を指定できます。データ範囲が-32768~32767でしたらTrue、0~65535でしたらFalseを指定します。
【戻り値】
戻り値1:status(int型)
戻り値は、サーボとの通信状態とサーボの状態が正常かどうかのステータスを足したものが返ってきます。データが0であれば問題ありません。0以外の場合は、なんらかの問題が発生していますので、ステータス部がエラーの場合はオンラインマニュアルの『5.エラー状態』を、通信部がエラーの場合は『ComError』を参照してください。