PMX ArduinoLib MemREAD()

『PMX Library for Arduino』のMemREAD()関数について解説します。

 

【解説】

MemREADコマンドは、メモリマップのRAM領域から情報を読み出すためのコマンドです。PMXサーボのメモリマップにはRAM領域とROM領域があります。サーボ起動時にROM領域からRAM領域にデータが展開され、サーボの制御にはRAM領域のデータが使用されます。

 

【構文】

byte rxData[];

status = MemREAD(ID, address, readDataSize, rxData[]);

 

【例】

 

【パラメータ】

引数1:ID(byte型)

第一引数の「ID」はサーボIDです。「ID」は、MemREADコマンドの命令の対象になるサーボを指定しています。「ID」を0に指定すると、ID0のサーボを指定することができます。

 

引数2:address(unsigned short型)

第二引数の「address」は先頭アドレスです。「先頭アドレス」とは、メモリマップのアドレスを指し、読み出すデータの先頭のアドレスを指定することができます。上記の例では「PMX::RamAddrList::NowPosition」と書いていますが、これはライブラリ内で定義された変数で、メモリマップのアドレスを指定しています。「PMX::RamAddrList::NowPosition」には300が代入されていますので、実行の際は300に変換されます。また数値で300と指定しても同じ番地からデータを読み出すことができます。アドレスは『オンラインマニュアル』をご参照ください。

 

引数3:readDataSize(int型)

第三引数の「readDataSize」は読出データ数です。例では6が指定されていますので、先頭アドレス300から6バイトのデータを読み出します。

 

引数4:rxData[](byte配列型)

第四引数の「rxData[]」に配列のポインタを渡します。MemREADコマンドで読み出したデータが代入されます。2バイト以上のデータはリトルエンディアンで分割されていますので1つのデータに変換する必要があります。変換方法は、下記の【データ変換】をご参照ください。

 

【戻り値】

戻り値:status(unsigned short型)

戻り値は、サーボとの通信状態とサーボの状態が正常かどうかのステータスを足したものが返ってきます。データが0であれば問題ありません。0以外の場合は、なんらかの問題が発生していますので、ステータス部がエラーの場合はオンラインマニュアルの『5.エラー状態』、または『PmxStatusErrorList』を、通信部がエラーの場合は『ComError』を参照してください。

status = PMXからの返信のステータス(PMX::PmxStatusErrorList) + 送受信の状態(PMX::ComError)

 

【データ変換】

このライブラリには、リトルエンディアンで分割されたデータを組み合わせるために便利な関数が用意されています。

bytesToInt16()で2つに分かれたbyte型のデータを、1つのint型(符号あり)のデータに変換することができます。引数に連結するデータを渡します。今回は例として6バイトのデータを読み出しました。「現在位置」は先頭の2バイトのみですので、別の配列に2バイトのみ分けで代入しましたが、pmx.MemREAD()で2バイトのみ読み出した場合は、そのままrxData[]を引数に渡しても問題ありません。

 

他にもデータの型に合わせて関数を用意しています。

データのサイズと符号の有無については、オンラインマニュアルの「メモリマップ一覧」で確認することができます。

 

 

リファレンスの目次に戻る