【3月27日】Visual Studio2017いじる<シリアル通信サンプル動作>

VBAを使ってモニター プログラムを作ったのですが、時々ハングしたり遅かったりで、VC++に移行しようとしてます。
以前からVisual Studio2015でkinektをいじっていたのですが、初心者用の教科書も買って用意してあったのですが、教科書通りにやったつもりでもエラー続出でちっとも進捗しませんでした。

そうこうしてるうちに、Visual Studio2017に移行してしまいました。

●学習方針変更
手間と時間がもったいないので、mbed式というべき方法で習うより慣れろということで方針を変更しました。
①目的の機能を持ったサンプルプログラムをWEB上で検索
②Visual Studioで使うときのことも説明してあるものに絞ってダウンロード Solutionファイルごとダウンロードできるものがあればラッキーです。
③見つかればダウンロードしてビルドしてOKならソースを見ながら自分の仕様に変更するだけです。

ということで今回も運よくプログラム発見しました。

Visual C++ 2008 を用いたシリアル通信サンプル

http://www.altemasoft.com/?TIPS%2FProgramming%2FSerialCommunication

古いのですが、ソリューションファイルごとプロジェクト全部提供してくれてあるので
ダウンロードして読み込むだけで、面倒なプロジェクトの設定を自分でしなくて済みます。Visual系は、プログラミング以前に設定作業が大変でそれを学習するだけ時間と手間がかかってしまっていけません。
では、手順をご説明します。
①VisualStudio2017を起動してファイルー開くープロジェクト/ソリューションで
ダウンロードして解凍したフォルダを開いてソリューションファイル 「SerialCommSample.sln」を開く。

②するとバージョンをアップする自動処理がはいります。OKすると

WEBで処理するみたいでブラウザーに変換結果 移行レポートが表示されます。

エラーがないので良しとして次に進みます

③プログラムをビルドする
VS2017のツールバー真ん中下部にある ローカルWindowsデバッガーボタンを押すと
コンパイル、リンク、ビルドが走り始めます。

 

④ビルドが終わるとプログラムが走り出します。SerialCommSampleのフォームが現れて切断中となってますので、接続ボタンをおすとシリアルポート設定フォームが現れます、mbedと接続しているCOMポート番号とボーレートをいれてOKします。

⑤mbedからのデータが表示されます。

●自分の目的にあった変更を加える
シリアル受信のプログラムは、form1.hにあります。
送受信formオブジェクトのコードとして記述されてました。

270行めからのSerialDataRecieved()を書き換えれば所望のデータがえられると思います。

private: System::Void serialPort_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) {
SerialDataRecievedDelegate^ dlgte = gcnew SerialDataRecievedDelegate( this, &SerialCommSample::Form1::SerialDataRecieved );
String^ RecievedData = serialPort->ReadExisting();

//1バイトずつ受信することを前提
if(serialPort->IsOpen == true) { //シリアルポートが開いていることを確認してから。

COMRevieveBuffer = COMRevieveBuffer + RecievedData; //受信バッファに追加
//改行コードを検出する
if(RecievedData == “\r” ) {
RecievedData = RecievedData + “\n”;
COMRevieveBuffer = COMRevieveBuffer + RecievedData;

//受信した一行をテキストボックスに転送する。テキストボックスの操作は別スレッドの関数にする。
this->Invoke(dlgte, COMRevieveBuffer);

COMRevieveBuffer = “”;
}
if(RecievedData == “\n” ) {
RecievedData = RecievedData + “\n”;
COMRevieveBuffer = COMRevieveBuffer + RecievedData;

//受信した一行をテキストボックスに転送する。テキストボックスの操作は別スレッドの関数にする。
this->Invoke(dlgte, COMRevieveBuffer);
COMRevieveBuffer = “”;
}
//エコーを返す
serialPort->Write(RecievedData);

●VC++のいいところ
mbedにはないデバッガーがついてますので、ブレークポイントで止めて
シリアル受信データとバッファの内容を確認しながらデバッグしながらプログラムできますので、初めてでも試行錯誤で完成させられるのではないかと感じました。
デバッグーブレークポイント設定/解除で止めたい行の左横で赤い●をつけて
F5で1周まわって、F11で1行ステップで進みます。止まっているときに
変数にカーソルをあてれば中身が見えます、

デバッガーの解説は下記リンクなどたくさんあります。

http://qiita.com/hart_edsf/items/85cacfa28a7e97fdb2be

●以後
できるだけ早くVC++で高速で安定したモニタープログラムを作って
パワーメーターと6分力計、スキー活動量計の開発ツールとして役立てたいです。

●【2018年を迎えて(2018年1月9日 記)】
本記事にご来訪の大勢の皆様、本年も宜しくお願いいたします。VisualStudio2017は、ご無沙汰してしまってます。
なぜかというともっと、簡単にRP(RapidPrototyping)できることが分かったからです。
①シリアル通信を受信してグラフにするなら
CPLTというソフトを使えば高速で8CHまでグラフが思い通りに描けます。EXCELよりはるかに高速です。

【パワーメーター】リアルタイムグラフで優れモノソフトあった<CPLT>

②シリアル受信してPCとかスマホでデータ処理表示をおこなう
Processingという言語が非常に簡単で、高速にデータ処理できます。グラフィックに特化してますが、ハードウェアのサポートライブラリもJAVAから引っ張ってきてますので、たくさん出てます。私は、WINDOWS PCとAndoroidスマホでシリアル受信、
BlueTooth受信などでデータを受け取って処理するプラグラムが
作れるようになりました。1か月もかからずこのレベルになれるのでVSの出番がありません。processingの記事は下記ですが
http://maru-yo.net/shinshu_makers/category/blueninja/processing/

教えていだける親切なブログがあります。MSLABO様です。

PROCESSING 逆引きリファレンス


コメントを残す

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