作成した返信
-
著者投稿
-
伊予研究会一般参加者
ご回答ありがとうございました。
ご教示頂いた通り、setPacketValueAt(int,int), setPacketValueAt(int,String)両方で試したところできました。ところで、setPacketValueAtは数値でしかセットすることができません。できましたら先頭に’X’の文字も配列に入れて1回で送信したいのですが、何か良い手段はございますでしょうか。
受け側ではキャラクターコードで判断できるので、Mz側でキャラクターコードにする方法がありましたらご教示ください。よろしくお願いいたします。
伊予研究会一般参加者シリアル通信の送信についてご教示ください。
シリアル通信のメソッドでボードにバイト配列データを出力する(byte[])がありますが、例えば{‘X’, 0x12, 0x15}といった配列データを送る場合メソッド値の設定が分かりません。
byte[] = {‘X’, 0x12, 0x15}の設定は、バイト値格納変数をどのようにして配列にすればよいか、ご教示ください。伊予研究会一般参加者ご回答ありがとうございました。出力側で工夫してみます。
機能を拡張しているとのこと、IntやLongなどはRAMに2バイト, 4バイトの塊で記録しているので、今後Singed, Unsignedを指定して一括で取り込む関数を追加して頂ければ幸いです。
今後のご発展をお祈り申し上げます。伊予研究会一般参加者前回は符号を別に送信していたのですが、それも省略したいと考えております。符号付きのデータを読み取る場合についてもご教示ください。
例えば-32768や32767を読み取る場合、符号を含むとそれぞれ 0x8000, 0x7FFFになりますが、上位バイトには符号が含まれているのでreadByteSingleSignedArrayで読み取ると下位バイトはUnsigned情報となっており正常に読み込むことができません。
readByteModeは0にしましたが、間違っていればそれも含め教えてください。伊予研究会一般参加者ご丁寧な説明、ありがとうございました。
ReadMode とByteReadMode の関係が理解できました。また、イベント発生のタイミングを意識していませんでしたので、取込データがどのようになっているかが分かりすっきりしました。
面倒な質問にご対応いただき、大変ありがとうございました。
伊予研究会一般参加者サンプルの添付、ありがとうございました。使い方がよく分かりました。
次の点についてもう少し、詳しくご教示頂けると助かります。(1) 通信コンポーネントを追加したデフォルトでは、ReadMode = 0 となっており、今回の場合読込モードが常に3とは、どのような場合に3となるのでしょうか? 3を選択する意味が今一つ理解できません。
また、1, 2もあるのでしょうか?(2) ReadByteSingleUnsignedArrayでは、要素配列4としてバイト配列を呼び出していますが、これは呼出時点(Xの次)のデータから保存と解釈してよろしいでしょうか?
よろしくお願いいたします。
伊予研究会一般参加者ご回答ありがとうございました。
まず、文字データの欠落の件ですが、3軸振動センサからデータを取得するプログラムを作っております。データの測定は高速で行うため一旦SRAMに保存し、保存したデータを直接USBケーブルで繋いで、Mzのシリアル通信で取り込もうとしています。文字列データでの取込プログラムではシリアル通信で取り込むメモリ番地を出力して、それに対応したデータを受信するようにしました。1コマンド毎に出力して取り込んだ場合には問題なく受信できていますが、何分データ量が多いため連続して取り込もうとすると、一部データの欠落があるようでした。
その時の、受信フォーマットは
X12Y-16Z362@
等の文字列となっており、X,Y,Zの数値は文字列として送信しているため、数値によってデータ量が変わるのが問題では無いかと考えました。Mzプログラムではデータチェックのため、X,Y,Zの順番で最後に@が有ることもプログラムしています。そこで、送信する数値は-400~400までの整数であることから、今回送信側をバイト単位にすれば固定長のデータになると思いプログラムの変更をしています。
バイト単位では、
X,(数値の符号),(Xの上位ビット),(Xの下位ビット),@
の5byteで(Xデーのみ)で確認しているところです。チェックは固定位置にX,@が有ることを条件としました。ところで、シリアルコンポーネントの属性情報設定でわからないので教えて下さい。
(1) ReadMode に入れる数値は、取込のバイト数と理解してよろしいでしょうか?
(2) ByteReadMode のシングルとダブルの違いは数値のサイズのことでしょうか?
(3) ByteReadMode のシングル符号無しは取込データがプラス、符号有りはマイナスということでしょうか?アドバイスしていただいた
#0: readByteSingleUnsignedArray(2)を入れましたが、入れる場所が悪いのかエラーになってしまいます(添付ファイル serial_ByteRead_1.mzax)。また、serial_ByteRead_2.mzaxでチェックを行ったところ、データの順番は正常に取り込みできましたが、数値が127を超えてしまうとバイトデータがマイナスとなり、ByteReadModeで設定を変えても変わりません。この使い方をご教示下さい。
将来、取込データがマイナスかプラスかで処理を分岐させる予定ですが、プラスの場合はUnSingedで処理してコードを短くしたいと思っております。ちなみに、Arduino UNO をシリアルデータ発信としたスケッチも添付しておきます。
よろしくお願いします。添付ファイル:
伊予研究会一般参加者いろいろ試したところ、キックした後ライセンスチェックでダウンしていたようです。ウイルスバスターを終了させてビルダーを立ち上げたところ、ライセンスチェックのダイアログが表示されました(再インストールしたので、ライセンスはクリアされています)。その後、リブートし直して(ウイルスバスターも起動)もう一度ビルダーをキックすると、ライセンスのダイアログが出ました。ビルダーは期限が切れているので立ち上がりませんでしたが、ローダーでプログラムを動かすことはできました。
ウイルスバスターとの関係は分かっていませんが、対処できたようですのでご報告いたします。
ありがとうございました。伊予研究会一般参加者立ち上がらない状態ですので、ログはできませんでした。
また、ご指導の通りアンインストールし、残ったMZPlatform以下のディレクトリを削除してインストールしなおしましたが、リブートしてもビルダーが立ち上がりません(コマンドプロンプトも同じです)。新しくインストールしたディレクトリには、logのディレクトリが作製されていませんでした。キックした後、すぐにダウンしている状況です。
立ち上がらないノートパソコンと同じ物がもう一台あり(環境も同じ)、こちらの方で試したところ、正常に動きます。違いは、トラブルのあったパソコンでプログラムをシリアル通信で長時間実行していたところ、夜中に途中でMzのプログラムのみダウンしたようです(PCは消費電力設定もしていませんでした)。
よろしくお願いいたします。
伊予研究会一般参加者バージョンは3.6を入れているので、C:\MZPlatform\3.6\PFBuilder.exeでコマンドを入れています。
質問にはA169-1をそのままコピーしてしまい、申し訳ありませんでした。
状況は変わりませんでしたので、再度インストールしなおします。その時は、一度削除した方がよろしいでしょうか。よろしくお願いいたします。
-
著者投稿