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

Visual Studio2017にバージョンアップされてますが、WEBや教科書類が2015が多いので2015を使ってます。入門書買ってやり始めているのですが、エラーがでまくっていてばかばかしくなってきたので、mbed式学習に切り替えてます。
mbed式とは、目的に近いサンプルプログラムをWEBから落としてきて実行させて、動作したら、そのソースを自分の目的に合わせてちょい変更して、作ってしまうというやり方です。

WEBでさがして、Visual Studio2008版のシリアル通信サンプルがありました。
作者AltemaSoftのHaseko様が皆さまのためにgithubにアップしていただきました。
[https://github.com/hasekou/SerialCommVS/]
これは、ソリューションファイルからまるごとサンプルzipとなっていて、Visual Studio2015でソリューションファイルだけ読み込んで、VS内で自動でバージョンの違いを修正してくれてなWARNINGだらけになりますが、とりあえず、ビルドが通って、実行すれば、
WINDOWS FORM画面が現れて、シリアルのポートNoとボーレートを設定しすれば、mbedからのデータを表示してくれました。

やり方 VisualStudio2015は、入手が大変なので2017でもできるかやってみました。

■シリアルインターフェースってなんだと思ったら

東芝に判り易い解説がありました。

https://toshiba.semicon-storage.com/jp/design-support/e-learning/mcupark/village/serial-interface-2.html

■シリアル通信って簡単だといわれていますが、いざ接続すると
通信できなかったりデータが化けたり初心者にとっては難解なIFだと感じてます。IFモノは初心者には扱いにくいです。ですので、基本を学習してからプログラムをいじったほうが将来的には良いと感じてます。
※大事なのはシリアル通信って非同期通信だということです。VisualStudioの学習よりシリアル通信の原理の学習が重要だとおもいます。こちらのブログ様の説明が分かり易かったです。
http://www5b.biglobe.ne.jp/~kouta_y/news/newsvb/vb14.html
以前からVisual Studio2015でkinektをいじっていたのですが、初心者用の教科書も買って用意してあったのですが、教科書通りにやったつもりでもエラー続出でちっとも進捗しませんでした。
そうこうしてるうちに、Visual Studio2017に移行してしまいました。VSに限らず、PCマイコンプログラム業界は、次々とバージョンアップして改良改善してくるので、使い方チュートリアル記事が役にたたなくなってしまうことが多々あって、初心者は、困惑してしまいます。いたちごっこを何とかこなす手として
本記事のやり方もありかと思います。

=>接続トラブルに遭遇した場合
<IFモノは原因箇所が多数あるので大変手間がかかります。慌てずに余裕をもって対策>
私の経験1:PCのDriverがおかしくなった=>再起動、再インストール
私の経験2:マイコンプログラムのシリアル設定とPCがあってない=>ボーレート,PORT番号
私の経験3:マイコンプログラムが動かない=>サンプルプログラムで動作確認する
私の経験4:USBシリアルケーブルの接触不良=>予備ケーブルでテスト
私の経験5:マイコンピンがクロス接続になってない=>通信はクロスが原則
私の経験6:どうしようもないときはオシロで信号をみる=>TXとRXをみて動いているかみる

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

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

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

作者AltemaSoftのHasekou様からリンク先変更のご連絡をいただきました。githubに設置していただけたようです。皆さんダウンロードして活用していただければ幸いです。

https://github.com/hasekou/SerialCommVS/

 

古いのですが、ソリューションファイルごとプロジェクト全部提供してくれてあるので
ダウンロードして読み込むだけで、面倒なプロジェクトの設定を自分でしなくて済みます。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);

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

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

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

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

●追伸(2018年1月20日)
シリアル通信は、非同期通信と言われてますが、他の同期通信と
どう違うのかを知っておくことが重要です。

●【2018年を迎えて(2018年1月9日 記)】
本記事にご来訪の大勢の皆様、本年も宜しくお願いいたします。VisualStudio2017は、ご無沙汰してしまってます。
なぜかというともっと、簡単にRP(RapidPrototyping)できることが分かったからです。このAI時代にバージョンアップごとに使い勝手が変わって無駄な時間を消費するという作業は、AI化とともに消えていくと期待してます。ですので、苦労してVSを覚えるよりも楽して目標に早く到達する開発を心がけてます。
①シリアル通信を受信してグラフにするなら
CPLTというソフトを使えば高速で8CHまでグラフが思い通りに描けます。EXCELよりはるかに高速です。
http://www.datatecno.co.jp/cplt/cplt-download.htm

コメントを残す

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