【3月29日】PCモニター言語検討<Processing3.3受信処理速い>

現状でEXCEL2003VBAを使って、mbedからデータ受信してデータ処理してますが、シリアル通信受信処理速度が遅いため
VBAの場合は、データサンプリング周期50msecが限界となってます。
50msecでは、ロードセルで静的に近いデータを扱うのには十分ですが、ペダリング動作では、10-20msecは欲しいので、VBAではパワーメーターのデータのモニタができないという課題があります。

●今日の結論:Processingでmbedからのシリアル受信は、使えそうです。とにかく簡単シンプルなのに受信速度周期が数msecまでバッファのデータ落ちが無いのが素晴らしいです。
一連の実験が小一時間でできたことがmbedと相性がいいRapid Prototypingに適していると感じました。これから、シリアル通信プログラムにトライして、モニタープログラム作ってみます。

●経緯
そこで、数ヶ月前から言語を検討してます。
mbedがC++なので、PCでもC++が自然なのでVisualStudioを検討してきたのですが、勉強する範囲が広大で、環境とライブラリーを用意するだけで大変手間と時間がかかります。
WEB上のサンプルプログラムを改造しようとしてますが、
その改造もシリアル通信では、スレッド管理の知識がないと
うまく動作させられないことが判りました。
Prcessingは、mbedユーザーでも使われているのですが、どいうわけか、シリアル接続でなくTCP/IP接続が多いです。
https://developer.mbed.org/users/gltest26/code/BATAKO/wiki/Homepage#batako-test-project

そこで、VBAの欠点を補填できる言語として、VBと
Processingを試し始めてます。

●Processingの検討
https://ja.wikipedia.org/wiki/Processing
JAVAベースのグラフィック専用言語です。

IBMの解説
https://www.ibm.com/developerworks/jp/opensource/library/os-datavis/
aruduinoを正式サポートしていて、シリアル通信が簡単にできる例がWEB上にたくさんあります。
データを受信してグラフにするには、受信部分がきちんといければグラフのプログラムが簡単なので、いろいろなテーマ使えるのではないかと期待してシリアル受信処理速度の実験をしました。

●Processingのインストール

このページが丁寧で分り易かったのでここを見ながら
http://monge.tec.fukuoka-u.ac.jp/cg_processing/0_processing.html#Top

※注意は、WIN32bit版のProcessingをダウンロードすることです。シリアル通信をサポートしてるのは32bit版だけだそうです。
64bitOSでも使えます。
とにかく早く動作させたい人は、下記ブログが最速でいじれます。
http://www.catch.jp/wiki/index.php?Processing%B4%F0%C1%C3%BA%C7%C2%AE%C6%FE%CC%E7

●シリアルサンプルプログラム
公式サイトの命令リファレンスで例文がたくさんあって便利です。Serial libraryが用意してあります。
https://processing.org:8443/reference/libraries/serial/index.html

ここで、mbedからデータは、長い文字列になるので、
readString()コマンドを見にいきました。
https://processing.org:8443/reference/libraries/serial/Serial_readString_.html
ここのサンプルプログラムのコード文字をそのままコピーして
開いてある白紙のsketch_xxxxにペーストします。下記です。

デリミタがどうなっているもかが記述が無いのが不安ですが
バッファそのものが出てきているので確認してみます。
————————Processing  readString Example——————-

// Example by Tom Igoe

import processing.serial.*;

Serial myPort;  // The serial port

void setup() {
  // List all the available serial ports:
  printArray(Serial.list());
  // Open the port you are using at the rate you want:
  myPort = new Serial(this, Serial.list()[1], 9600);
}

void draw() {
  while (myPort.available() > 0) {
    String inBuffer = myPort.readString();   
    if (inBuffer != null) {
      println(inBuffer);
    }
  }
}

※mbedを接続して、このプログラム実行させると、COMポートのリストが下窓に表示されるので、mbedと接続しているCOMポート番号の順番をゼロから数えてSerial/list[]に番号をいれれば接続OKとなります。わたしの場合は、COM4で2番目だったので1をいれてあります。

●受信処理速度測定
mbedプログラム内でWAIT時間を0.01秒に設定すると0.014-0.016秒でした。
データ落ちがないようなのでWAITo.oo1sec(1msec)まで早くしました結果が下記画面です。行頭にWT設定時間がひょうじされていて行末にタイマー時間が記録されてます。
なんと、5-6msec間隔でデータを表示できてますので、
VBAの10倍速いことがわかりました。
しかも、この実験をするのにProcessingのインストールから
測定まで小一時間で出来てしまいましたのでまさに、
mbed Rapid PrototypingにぴったりのPC言語だと感じました。

参考に、mbedのコードもつけておきました。

●mbed側のプログラム
単純にWAIT設定してダミー文字とタイマー時間をシリアル送信するプログラムです。WAIT時間を変えながら何回もコンパイルしました。コメント類なしですみません。
———————————————————–

#include "mbed.h"

Serial pc(USBTX,USBRX);
Timer t;
int main() {
 pc.baud(115200);
 float wt=0.001;
 //pc.printf("A\r\n");
 t.start();
 while(1){
 wait(wt);
 pc.printf("Wait=%4.3f<sec>:XXXX.XXXXX,YYYY.YYYY,ZZZZZ.ZZZZZ,%6.3f<sec>\n\r",wt,t.read());
 
 }
 
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です