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でもできるかやってみました。
※私のプログラム能力は、arduino,mbedのCプログラムを作る程度、ライブラリーは作れません、PC言語だとProcessingとVBA程度ですが、C++をVS2017で使うことについて、記事があるのですが、あまりお勧めではないようです。
https://qiita.com/tadnakam/items/be20c836a122f7fa1b69
ですので、素人が手をだすものではないのかもしれませんので、VB6などもっと
素人が手をだせる言語で、シリアル通信を高速に使える方法を絶えず探してます。
■本記事の読者様の中でVSでC++を使う必然性が無い方へ
私は、VS脱落者なので、マイコンとのシリアル通信は、3つの手段で行っています。
①アプリCPLTを使って迅速にデータを確認。
②VBAでシリアル受信する、EXCELなのでデータ処理がいろいろできるが、受信速度が115200bpsでは無理。=>VB.NETで作れば高速なので検討してます。
CONTEC社様のブログでVB6でシリアル通信プログラムを丁寧解説されてますので
https://www.contec.com/jp/support/basic-knowledge/daq-control/serial-communicatin/application/
これを見ながら、フォームアプリ作ったら1時間で完成しました。その記事です。VS2017でもVS2019でも出来ました。
※2020/10/17
VB.NETのカテゴリーです。
http://shinshu-makers.net/shinshu_makers/category/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/visualstudio/
③Processingでシリアル通信プログラム使うと460800bps程度の高速シリアル通信が超簡単に実現できます。Processingをインストールして短いサンプルプログラムで走らせるまで2時間もあればOKです。VBAとかC++をやったことがあれば、プログラムは読めます。関心のある方はこちらのProcessingでシリアルの記事へどうぞ。
【シリアル通信】Processingで460800bps通信できた<超簡単>
※その前にシリアルってなんだということで事前学習いれてあります。
■シリアルインターフェースってなんだと思ったら
昔からRS232Cって有名ですが、最近は、あまり使われませんが、計測器などはまだRS232C規格のIFで接続されるので、RS232Cが残ってますが、RS232CとマイコンのUARTシリアル通信は、電圧レベルが全く異なります。RS232C規格
RS232Cと接続するものの規格 USB マイコンArduino マイコンmbedと違う
|
RS232C | USB5V TTL,LVTTL | mbed3.3v系 arduino5V系 |
受信0レベル | +3V~+13V(0電位高い) | 0.8V以下 | 0.8V以下 |
受信1レベル | -3V~-13V(1電位低い) | 2V以上 | 2V以上 |
送信0レベル | +5V~+15V(0電位高い) | 0.8V以下 | 0.8V以下 |
送信1レベル | -5V~-15V (1電位低い) | 2V以上 | 2V以上 |
USBシリアル変換ケーブルではRS232CとUSBの電圧レベル変換をした上に、プロトコルもUSBフォーマットに変換して、USBホストであるPCと通信してます。USBホスト変換が結構ボリュームがあるので、変換ケーブルの使用ICチップ(FTxxとかPL23xx)にあわせたドライバをPCへインストールしないと通信できないという手間が介在してます。
シリアル通信で、マイコンーマイコン間、センサーマイコン間は、レベル変換は不必要ですが、
RS232CーPCではPCにシリアルポートがついていればいいですが、現在はシリアルポートは希少品なので
PCとのシリアル通信は、USBシリアル変換ケーブルを使ってRS232C機器とかマイコンと接続してます。
※ここで注意しないとけないのは、マイコンとRS232C機器を接続してシリアル通信をする場合は、
レベル変換ICを介して接続しないと電圧レベルが全く違うので接続できない点が基本です。
レベル変換ICは、アナログデバイスのADM3202が有名です。秋月で変換ボード売ってます。
http://akizukidenshi.com/catalog/g/gK-06464/
■東芝に判り易い解説がありました。
■シリアル通信って簡単だといわれていますが、いざ接続すると
通信できなかったりデータが化けたり初心者にとっては難解な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/
//================================
=>2019年7月29日記
HDDが故障して、新たにVS2017をインストールしたら、2年前のようにビルドが通らなくなりました。現在再現できるように詳細調査してますので、エラーが発生した場合は、こちらを参考にして、検討をお願いいたします。下記MS DOCの記事を読んで再現検討してます。
●サンプルプログラムがVS2008なので古いプロジェクトの使い方を調べてます。
「Visual Studio でネイティブ マルチターゲットを利用し、古いプロジェクトを作成する」(2016/11/4 MS DOC)
●プラットフォームのツールのバージョンが違うというエラーがでてますので、下記を見てます。
「方法: ターゲットフレームワークおよびプラットフォームのツールセットを変更する」(2019/7/24 MS DOC)
//================================
古いのですが、ソリューションファイルごとプロジェクト全部提供してくれてあるので
ダウンロードして読み込むだけで、面倒なプロジェクトの設定を自分でしなくて済みます。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
【2019年6月を迎えて】2019年6月25日記
CPLTは常用してますが、横軸が時間軸でないので、時間をみたいときは、不便です。速い現象は、やはりマイコン上ですべて処理して、結果をログしてそのログデータをPCへ転送する方法しかありません。マイコンのロガーだとarduinoでも16MHzクロックで専用に回せば、2CHで50Kサンプル(20μsec)まで測定できます。
九州工業大学でarduinoでオシロを作った記事が有名です。
https://www.iizuka.kyutech.ac.jp/faculty/physicalcomputing/pc_kitscope#i-4
Hi, I think your blog could be having web browser compatibility problems.
When I look at your web site in Safari, it looks fine however, when opening in I.E., it has some overlapping issues.
I just wanted to give you a quick heads up! Other than that, fantastic blog!
Ahaa, its pleasant conversation regarding this paragraph at
this place at this web site, I have read all that, so at this time me also commenting here.
There is definately a lot to learn about this topic.
I like all the points you’ve made.
I have read so many content concerning the blogger lovers however this post is really a good piece
of writing, keep it up.
Thank you, I’ve recently been looking for info approximately this subject for ages and yours is
the greatest I’ve came upon so far. But, what about the conclusion? Are you certain in regards to
the supply?
Awesome article.
Having read this I believed it was rather enlightening.
I appreciate you finding the time and energy to put this content together.
I once again find myself spending way too much
time both reading and leaving comments. But so what, it was still worth it!
This is a topic which is near to my heart… Thank you! Exactly where are your contact details though?
Great site you have here.. It’s difficult to find quality writing like yours these days.
I seriously appreciate people like you! Take care!!
I couldn’t resist commenting. Perfectly written!
Thanks for sharing your thoughts. I truly appreciate your efforts
and I am waiting for your further write ups thank you
once again.
Thank you for your comments from world,
I am Shinshu-Makers OWNER.
I am not good at english.
I am blogging at http://shinshu-makers.net/shinshu_makers/
This article old version.
New version
http://shinshu-makers.net/shinshu_makers/2017/03/27/%e3%80%80%e3%80%903%e6%9c%8827%e6%97%a5%e3%80%91visual-studio2017%e3%81%84%e3%81%98%e3%82%8b%ef%bc%9c%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%ab%e9%80%9a%e4%bf%a1%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e5%8b%95/
I’m sorry I couldn’t yours reply.
THAK YOU.