※最新状況:2024年6月8日追記
2024年になって、計測データ処理は、Pythonで処理することにしました。昔のBasicみたいに使えます。VisualStucioコードでPython便利です。
Excelで大量のデータを処理する方は、Pythonを覚えたほうが、工数時間効率が3-5倍向上します。
VisualStudioのプログラミングは、マイコンからリアルタイムのデータを受信ログする用途で使います。現在は、FORMアプリでなく
Consoleアプリを使ってます。
メリット1:VisualStudioの使い方がシンプルですみます。1個のファイルxxx.csファイルだけで、動くので、増殖が簡単にできて便利です。
メリット2:リアルタイム処理が超高速です。FORMアプリだとハングしたり遅延してしまう場合でもConsoleアプリならスイスイ動きます。
=>FORMアプリでは、TeraTermのような高速処理アプリ作れませんが、Consoleアプリなら自分用のTeraTermのようなアプリ作れます。
事例:【STA24】UDP無線ログESP32ベースでBNO085とRTKデータ<C#Consoleアプリ表示軽い>
メリット3:UIに悩みません、FORMアプリだとTextBox、ボタンなどオブジェクトで操作しますが、Consoleアプリでは、キー入力文字だけでプログラムを操作するので、操作方法が決まったパターンで使いまわしできるので、効率が良いです。
※本記事は、EXCEL VBAでUserFormを使ったプログラムを作ったご経験がある方を対象としております。私もそうですがVisualStudioが敷居が高くてなかなか使えない方には、本記事でVSでVB.NETを短時間触ってみることで、敷居が低くなるご体験が重要だと存じます。
※マイコンからのシリアル通信データを至急処理したいならこちらです。
※マイコンシリアル通信の基礎学習はこちらの記事にあります。
※VB.NET習得の効果は絶大です。Arduino等マイコン、RasPi linux等へプログラム学習時間を割くならVB.NETに時間を割くのが将来的に正しい方向だと感じてます。何故なら、PCのCPUが高性能なので性能が低いマイコンやRasPiで苦労してプログラムを作成しても、日々高速大容量化するIOTニーズに対して、将来性が無いプログラムになるからです。マイコン類は、最低限のプログラムにしてデータ処理はPCでやらせるのが正解だと感じてます。私の場合、マイコンは2年に一回グレードアップしないと間に合ってません、都度それまでのプログラム資産が無駄になってますが、VB.NETで造ったプログラムは、年々積み重ねが実ってどんどん役立つ機会が増えてます。
更に、精神的な効果もあります。PCが手のひらに載りますので、いろいろなアイデアをどんどん出せるようになって実現できます。
最近の作品、マウス自動クリックPgmC#で作りました。C#もVBとC++ができれば容易に乗り移れます。
※WIN10がRaspiサイズで走る製品がでてきてますので、ラズパイLinuxを習得する必要もなくなると思います。
■本記事のサンプルプログラム概要
CONTEC社様のシリアル通信の解説ページから、コピペした短いプログラムですが、基本部分としてマルチタスク受信部が汎用性があるので将来に渉って便利に使えます。
特にマルチタスクで受信しているSerialPort1_DataReceived()サブルーチンが重要です。
4つの短いサブルーチンで構成されていて全部で30行程度です。
機能 | Sub(サブルーチン)名 | 動作 |
シリアルポートOPEN | Button1_Click() | シリアルポートをOPENします。 |
シリアルポートCLOSE | Button2_Click() | シリアルポートをCLOSEします。 |
シリアル受信タスク | SerialPort1_DataReceived() | 別タスクとして動作、データを絶えず受信して渡す |
データ表示、処理 | PrintData(ByVal sdata As String) | シリアル受信タスクから渡された変数を表示、処理 |
30行のソースコードはGISTにあります。これにFORM(Button2個Textbox2個SerialPort1個)を作れば完成します。
https://gist.github.com/dj1711572002/bd3b2f1e58db04f231bbbcc7aa6715eb
■動画解説
「フォームを作って、codeをコピペだけ」なので簡単で5分でできます。
VS2019の操作手順は動画をご覧になるとわかりやすいです。
1時間はVS2019インストール時間含むです。
用意1:VS2019のインストール済み VisualBasicがインストールされているWin10PC
用意2:マイコン等USBシリアルでPCへデータを入力する機器、ボーレート115200bpsでASCIIデータ
■詳細解説
●VisualStudio 2019をインストール
MSのページにいって、ダウンロードしますが、30分程度時間かかります。
https://visualstudio.microsoft.com/ja/vs/
■WINDOWSフォームアプリケーション(VBAと同じ使い方)
・フォームアプリの導入解説は、MSDOCにあります
https://docs.microsoft.com/ja-jp/visualstudio/ide/create-a-visual-basic-winform-in-visual-studio?view=vs-2019
これは、VBAで使い慣れているプログラム方法です。FORMにオブジェクト(ボタン等)を並べて、オブジェクト単位でSub,関数を作成していくプログラム形式です。
インストールしたら、下記のように新規プロジェクトをVisualBasic のWindowsフォームアプリケーションで作成すればあとは、フォームのプログラム作成に移れます。
●CONTEC社のVB用シリアル通信プログラム解説ページ
=>何故CONTEC社様へ感謝かというと、VB.NETでシリアル通信をマルチタスクするプログラムを解説されているからです。VB素人にはマルチタスクのプログラミングは敷居が高すぎるため、コピペさせていただいて動作できて感謝しております。
https://www.contec.com/jp/support/basic-knowledge/daq-control/serial-communicatin/
タグが順についていて、3個のタグを見ながらプログラムを組めば完成しました。
プログラミングの方法=>オープン、クローズ=>データ受信だけです。
これらを見ながら、いざフォームをつくってプログラムを作ります。
プログラム作りだけなら小一時間で動作確認までできました。その前に
●マイコン側プログラム
マイコンで、9600bpsで文字を送信するプログラムを作っておきます。
私は、mbed で作成しました。”NO.i”を0.2秒ごとに送信します。
計測器からでも、Arduinoでもmbedでもシリアルで9600bps短い文字送信ならなんでもかまいません。
#include “mbed.h”
Serial pc(USBTX,USBRX); int main() { |
●プログラム作業
CONTECのページ順に作りますが、まとめてメモします。
①フォームを作る
メニューの表示ー>ツールボックスでツールボックスウィンドウが現れます。ボタン等のオブジェクトが大量にでてきます。Form1へドラッグ&ドロップして配置していきます。
Button1(接続),Button2(切断)
TEXT1(COM入力),TEXT2(受信データ)
②Serial オブジェクトをドラッグドロップ
これが、VBの良さです。他の言語なら、ライブラリーを呼び出したり登録するのでややこしい記述があるのですが、VBでは、表示ー>ツールボックスからドラッグドロップでボタンとかテキストボックスと同等の扱いでプログラムに登録できます。
③プログラムをコピペ
CONTEC社のプログラムを取捨選択してつなぎ合わせます。
私の場合は、とにかくシンプルなプログラムということで以下のものでとりあえず動作しました。
formオブジェクトを作成してこのコードをコンパイルすれば走ります。
GISTにvbファイルソースアップしてあります。
https://gist.github.com/dj1711572002/bd3b2f1e58db04f231bbbcc7aa6715eb
Imports System.IO.Ports
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived End Sub Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged End Sub |
●意味の分からない命令のLINK(C#で学習してますが未だ頭に入ってないまま使ってます)
Delegateとは、未確認飛行様の解説記事が分かり易いです。MS解説は、いまいち。
Invokeとは、未確認飛行様の解説、Delgateの呼び出しに使うそうです。
Delegate再入門も分かり易いです。感謝。
MSの基本解説がどうも理解できないです。SerialDtaReceivedイベント
イベントの処理と発生を見ろとたらい回しにされて分らなくなってしまいます。
こちらさまの解説が一番理解しやすいかも、感謝です。
②VisualStudioでシリアルを受信しよう☆【Arduino / Visual Studio】
●動作
開始ボタンを押すとフォームが表れて、COM番号を入力して接続ボタンをおすと受信したデータが下のテキストボックスに表示されるはずです。
プログラムを止めるには、デバッグ 停止ボタン茶色■でプログラム終了してください。
次の段階として、プログラムを正常停止する方法をご覧ください。
==上記までが基本のサンプルプログラムです==
※2023年11月 Pythonでシリアル受信するプログラム作りました。IMUの動作を機械学習させる実験用です。
【Python学習】BTシリアル受信してCSVファイル保存<Pythonのメリットデメリット>
※2023/4/10 chatGPTを使ったプログラム学習は、世の中を変革すると思います。私たち素人が最も恩恵を受けると思います。検索する前にchatGPTを使う時代がそこにきてます。【VS2022】chatGPTでC#Serial受信サンプルプログラム作る<Google検索は古い>
※2023/4/13 chatGPTで学習進んでます。【VS2022】シリアル受信中に送信する方法<chatGPTに教えてもらった>
※2023年3月 VisualStudioいじりだして3年半で、現在はC#でグラフ処理プログラムをメインに作ってます。まだまだ初級者で、Serial受信のスレッドの扱いがわからないまま使ってます。VisualStudioは、とにかく覚えることが多すぎて、本来のプログラム作成以前で目いっぱいになってしまうことが初級者にとっては、とっつきにくい原因です。私は、自分のやりたいことだけ覚えることにして、それ以外で、プログラム作成に必要なことで理解できてない部分は、chatGPTやWEBで検索しまくって、似た使い方を探し出して、コピペさせていただくことにしてます。
例えば、GITは使ってません、GIT覚えるのが面倒なので、プログラムの更新では、新規Solutionを作って、FORMファイル3個コピーするだけで使ってきてます。しかし、.NET6になって、SerialPortコントロールがデフォルトでは、入ってなくなったので、毎回SerialPortモジュールをNugetでインストールしなくてはならなくなってしまい面倒くさいことになりました。しかし、古い.NET Frameworkを使えばよいので
新規プロジェクトを選択するときに、フォームアプリの「Windowsフォームアプリ(.NET Framework)」を選択して、.NET 4.xxの以前に戻せば
SerialPortは、ツールボックスに入ってますので、nugetで改めてインストールする必要はありません。これを教えていただいたブログ様に感謝。
※マルチスレッドのプログラム作れなくても、シングルスレッドのアプリを作って、複数個立ち上げて処理すればマルチタスクになります。BluetoothSPP 2CHを同時受信モニタする【STA23】Win10でアプリ2個立ち上げてマルチスレッド代替<スマホ操作>
※2023/4/11 chatGPTでいつまでたっても理解できないスレッドについて教えてもらいました。今までにない知見を得て感謝です。「VB.NET シリアル通信 スレッドの作り方」と聞くだけです。今までこんなに丁寧に解説してある記事に出会ったことはありません。これから、chatGPTで学習していけば難関を超えられそうです。スレッドとは、プログラムが動いている流れです。普通は1本で、プログラムを動かしてます。メインスレッド フォームアプリの場合はUIスレッドと呼ばれてます。問題は、シリアjル受信しているのは別スレッドである点です。別のスレッドなので、UIスレッドできることができません。例えば、SerialPort.DataREcived内でボタンの認識もTextBox内の文字を書いたり読んだりできません。
※2023/4/10 chatGPTを使ったプログラム学習は、世の中を変革すると思います。私たち素人が最も恩恵を受けると思います。検索する前にchatGPTを使う時代がそこにきてます。【VS2022】chatGPTでC#Serial受信サンプルプログラム作る<Google検索は古い>
しかし、chatGPTのおかげで、この記事が読まれなくなるので、chatGPTを超えたコンテンツをめざします。
※2021年9月追加 シリアル通信初めて4年経過しても、トラブルに遭遇することが多いです。
そこで、シリアル通信をロジアナで観察することで、直観的な理解を深める方法を使い始めました。事例としGNSSチップF9Pからの460800bpsの高速データ出力の解析で使ってみました。オシロが無くてもロジアナがあればシリアル通信は鬼に金棒となります。なんと千円台と格安でアマゾンで購入できます。デバイスからのシリアル通信をプログラムする場合は必携のツールであることが判明いたしました。簡単操作でデータ通信が管理できます。
※2021年9月12日TeraTermより使いやすい実用的なロガー作成しました。お使いください。
※2021/6/27 グラフを描画するために PictureBoxIの基本Bitmap入門解説記事を作成しました。
※6月19日追記 リアルタイムグラフを本格的に作りたい場合は下記を参考にしてください。
大きなBITMAPにグラフを記憶しておいて、切り取って表示時するプログラムをつくりました。グラフィックボードがついてないPCでも、リアルタイムで高速表示(回転、移動、拡大、縮小)が自由自在になります。
RTKデータ解析用グラフィック機能開発ー記事1ー<自動追尾機能便利>
※2021年6月13日追記「VBソリューションフォルダーコピーを別名で作る方法」バージョンアップに便利です。
【VB.NET】FormアプリのSolutionフォルダーまるごとコピーする方法<GIT使わない人用>
※2021年6月12日グラフィックの基礎,矩形画像を平行四辺形へ自由変形する学習プログラム、これさえあれば、画像の回転と移動が自由にできます。 画像を自由変形して回転、平行移動<DrawImageを使う>※2021/6/3 グラフの学習を再開しました。大きなデータのグラフをBitmapで作ってしまって、それを切り取ることで高速に表示できる機能を学習しました。以外と簡単にできたので、RTKスキーアニメーションに使っていきます。
【VB.NET】グラフの一部を切り取って高速表示する<dobon.net様に感謝>
※2021/3/25 しばらくぶりに新機能追加 DataGridViewに右クリックで行編集機能追加(行挿入、行削除、行コピー、行ペースト)珍しい機能です。DGVプログラムに追加してください。
※2021/3/12<VB始めて7か月>グラフと映像扱えるようになった。見本動画 MP4フレームとセンサデータの同期方法
※本記事で基本Pgmを卒業されて、リアルタイムグラフに進まれている読者様が増えてきてます。
6chシリアル受信データをリアルタイムグラフできた<Chartでは遅すぎる>
7CHリアルタイムモニターver1.0完成<Serial.CloseでPgmハングする対策済>
※数万行のデータを扱う場合はExcelは時々ハングするので、DataGridViewのほうが安全で超高速です。
【VB.NET】DataGridViewいじってみた<CSV行ではまったが便利です>
■Program作成環境は、住めば都で、慣れれば使えるのですが、慣れるまでどれだけの時間と集中力が必要かという点で、VBAに慣れている私は、3日間x5時間=15時間ほぼ集中して、3本Pgmを作ってVB.NETの敷居を踏み出せました。=>VisualBasicよりC++に慣れている方なら、C#でVS2019に慣れるほうが宜しいかと存じます。MSの分析ではVBとC#両刀使いが多いようです。
■大きな効果
本来の開発テーマを休んで、VB.NET3週間で8本pgm練習したら、今までなかなかできなかったことへ手が届くようになりました。VBの敷居を低くすることで、開発テーマ進捗の大きな一歩となりました。年末にかけて、多分力測定と3次元変位測定データをリアルタイムグラフィックで処理するシステム何本か作れそうです。
=>データが膨大で3次元になると計算処理のシステム開発しないと全体が進みません。
=>ロードバイク走行中の人間の発生する力の測定と風・路面の走行抵抗測定、GNSS_RTK_MovingBase法で屋外運動測定解析(スキー、歩行等)してます
※プログラムを正常停止する方法
この基本プログラムでは、簡素化のために
CLOSEボタンを押して切断した後、ハングしてしまいます。
ハングを抜けるには、デバッグの停止ボタン■を押して止めてください。
なぜハングするかというと、受信部SerialPort1_DataReceived()は別タスクなので、Closeされても受信活動をしてますので、勝手にCloseされたからエラーになってしまうからです。エラーを回避するためには、Closeする前にマルチタスク受信部の動作を止めてしまってから、Closeすれば正常停止できます。ツールボックスでチェックボックス(CheckBox1)とコードでif,Endifの2行追加します。CheckBox1でチェックを外してからClose操作で正常停止します。
(現時点ではこの方法ですが将来もっと良い方法があったら追記します
DataReceived中のInvokeをBeginInvokeに返ればいいかもしれません)
MSサイト:https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.begininvoke?view=netcore-3.1
参考サイト:https://qiita.com/mag2/items/d15bc3c9d66ce0c8f6b1
Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
If CheckBox1.Checked = True Then Try End if |
暇をみて、以下の改良を加えて一歩一歩学習を進めていきます。
コードは、GISTにアップしてあります。(GITが使えないので)
VBのCategoryはこちらです。
■その後学習して機能追加してきてます。
追加機能:ListBox表示、CSVファイル自動保存、リアルタイムグラフ、リアルタイム線形性モニター
マルチポート受信
・現在(2020年8.28~10.28)までの学習記録備忘録
【VB.NET】DataGridViewいじってみた<Excel VBAとは全く違う>
【SCP】SCP校正システムrev071試運転<リアルタイム最小二乗法便利>
【VB.NET】リアルタイム受信Pgmの処理別速度測定した<描画速度ネック>
【VB.NET】USB2ポート16CHリアルタイムモニター作った<PCの性能次第>
【VB.NET】USB_Serial_5ポート同時受信実験<4ポートまでOK>
【VB.NET】多CH線形性モニター作った<実験測定に便利>
【VB.NET】7CHリアルタイムモニターver1.0完成<Serial.CloseでPgmハングする対策>
【VB.NET】リアルタイムグラフ第二弾<折れ線>
【VB.NET】6chシリアル受信データをリアルタイムグラフできた<Chartでは遅すぎる>
【VB.NET】行列計算Imaginsolution様ライブラリ動作確認<動作OK>
【VB.NET】シリアル受信7CHデータをSPLITして個別表示<配列宣言ではまる>
【VB.NET】 Visual Basic .NET を使用して Excel のイベントを処理する方法<Excelオートメーション学習>
【VB.NET】7CH移動平均モジュール作ってみた<表示間隔は30msec以上必要>
▽▽▽▽▽▽▽▽▽▽▽▽改良点▽▽▽▽▽▽▽▽▽▽▽▽
●シリアル受信7CHデータをSPLIT処理でばらして整数配列まで処理しました。解説記事は下記です。
●EXCELのイベントをVBで取得するプログラム8分でできるので動画にしました。
解説記事は、こちら
●改良3:ListBoxを使ってデータをスクロール閲覧する
TextBoxを使ってデータログしようとしたのですが、
改行が難しくて?できなかったので、ListBoxでitemをaddしていく方法でデータをログしました。Propertyでscrollをtrueにしておくだけで、データの閲覧できます。参考にさせていただいた記事
変更はデザインのFORMのTextBoxを消して、ツールボックスでListBoxに代えて、コードも1行だけ変更すればOKです。
Private Sub PrintData(ByVal sdata As String) ‘TextBox1.text=sdata ListBox1.Items.Add(sdata) ’TextBox1をコメントアウトして、ListBox1に代えるだけです。End Sub |
◆改良0:debug.print()を利用
メニュー下の▶スタートの左2個目にdebug,release選択ボックスあるのでdebugにすると
debug.printが使えます。いらなくなったら、releaseにするとdebugが動作しなくなります。実行形式exeが
作成されます。場所 そのプロジェクトフォルダー>bin.releaseにできてるのでコピペして配布できます。
参照:https://www.atmarkit.co.jp/fdotnet/dotnettips/140debugonvs/debugonvs.html
text boxに1回ずつ表示されても、データ全体を確認できないので記録したいのですが、ファイル保存文を作成するのも大変面倒なので、TextBox2.Text = sdataの下にdebug.print(sdata)を1行いれれば
実行開始して停止すると出力ウィンドウに全受信データログされてますので
その場で確認できます。保存したいならctrl+A ctrl+Cでコピーして
EXCELやEDITORにペーストすればOKです。
出力ウィンドウは、動作停止後、表示=>出力 クリックで右側に現れます。
この受信データは、マイコンから460800bpsでデータNoと時刻をマイクロ秒単位で出力されたものです。EXCELにコピーしてデータ欠落を調べます。
◆改良1:SerialPortオブジェクトのPropertyを書き換え
COM番号を入力するのが面倒なら、SerialPortオブジェクトを右クリックしてProperty欄をだしてCOM番号やボーレートをデフォルト設定できます。その場合は SerialPort1.PortName = TextBox1.Text は削除します。
=>フォームアプリの便利さは、フォームオブジェクト類をPropertyで
デフォルト設定できるのでプログラム内で記述しなくても済む部分が多い点です。下記図では、SerialPortオブジェクトのProperty欄で
PortNameをCOM8、
Baud Rateを460800 に設定変更してあります。
◆改良2:大量のデータをログしたい場合はCSVファイル保存します。
CSV保存はdobon.net様のページ https://dobon.net/vb/dotnet/file/writecsvfile.html
※シリアルポート1個の場合は、このプログラムで問題なく動作しておりますが、シリアルポートを複数個同時に受信しようとするとマルチタスク
とかリアルタイムを高速(5-15msec周期)で動作させるには、高性能PCでCPUパワーと高速グラフィックがないと早くなりませんでした。
私のオンボロX230だと50msec周期16CHのリアルタイムグラフが一杯一杯でした。VB.NETよりC++のほうが早いのではないかと思います。.NETを使うことで速度で損しているような気がします。
■VB.NETを使う前の調査
フォームへオブジェクトを貼り付けるだけでUIの発展性がある便利なプログラムが作れますが、
VBAほどの融通性はありませんので、VBAに慣れていると不便です。
C++に慣れていたらC#”のほうが便利かもしれません。
VisualStudioは、プログラムを仕事にしている人が扱うIDEですので、
私のようなソフトウェアのアマチュアの機械屋はとっつきにくいです。
シリアル通信プログラム言語とIDEでなかなか自分にあった便利なものが無いのが現状です。
ご自分の目的と環境に合わせて言語とIDEを選ぶしかないです。
●VBAとVB.NETの違い
ExcelVBAは、インタープリタで昔からのBASICの形態ですが、VB.NETは、VisualStudioの言語として
コンパイラ言語です。.NET FRAMEWORKという環境を使ってますので、C++と同様な速度で実行できる
BASIC言語です。そのかわり、WINDOWSシステムで使うための手続きが入っています。
私が初めて触れるのがスレッド処理です。リアルタイムOSでは、タスクが複数同時に動作するので
スレッド処理をしてプログラムの動作を制御しないとリアルタイムで動かないので、その処理が
VB.NETのシリアル通信プログラムにも必要な点が、相違点として新しい学習ポイントとなります。
同一な点は、フォームアプリケーションであること、フォーム上のオブジェクトのProperty基準で
イベント起動型のプログラム構造になっている点は、同じですので、VBAに慣れた方は入りやすいです。
しかし、Propertyの種類がVBAの何倍もあって、同じ意味のものがあまりありません。
●VB.NETの将来性=>C#のほうが間違いないが似たかよったかである
2020年3月ZDNETで扱ったMSのVB対応記事があります。
マイクロソフト、.NET 5でVisual Basicをサポートするも進化計画はなし
VBユーザーは膨大に存在していて、何故VBかというと、開発チームは下記説明している。
「VBを使用しているプログラマーは非常に多いが、これはこの言語の安定性や記述スタイルが評価されていることを示している」
=>だから、今後も
「今後、Visual Basicを言語として進化させる計画はない」
=>このほうがユーザーが安心して使えて歓迎される
「同社はVisual Basicのユーザーは数十万人に及ぶが、その大部分はC#も知っており、C#のユーザーは数百万人に及ぶと語っていた。」
今後は、
「Visual Basicは優れた言語であり、生産性の高い開発環境だ。Visual Basicの未来には.NET Frameworkと.NET Coreの両方が含まれる。今後は安定性、前述したアプリケーションタイプ、そして.NET Core版VBと.NET Framework版VBの互換性に注力していく」と.NETチームは述べた。
C#がメインだが、VB.NETも限定して継続していくということみたいです。
●EXCELリンク作例)
1)VB.NETのデータ配列をEXCELシートへ書き込むプログラム
EXCELのオブジェクトライブラリーをVB.NETで使う方法を
MSドキュメントで紹介されてます。
配列をシート書き込む
これを動かしてみた記事、CSVファイルをEXCEL読み込む手間
なしで直接シートに書き込めるので、VBAとリンクして自動処理する
プログラムを作ってみたいです。
●経緯
本ブログで最もアクセス数の多い記事の一つが2年前の記事でVS2017 C++でシリアル通信サンプルを動作させる記事ですが。最近2年前の再現でVS2017でビルドしてもエラーがでて記事の内容の再現ができなくなりました。改めて、VSを使ったシリアルプログラミングを調べてみると、素人がC++をいじってWIN32でWINDOWSアプリをつくる意味がないらしいことをしりました。.NET FRAMEWORKを使わないと意味がないということです。
https://qiita.com/tadnakam/items/be20c836a122f7fa1b69
https://www.atmarkit.co.jp/ait/articles/1704/10/news026.html
●VS C++でシリアルプログラムはややこしくて、初心者はとっつきにくい
2年前の記事を見て、本ブログでは、自分のレベル(プログラム素人機械屋)で
VSのC++は、無理だと判断して、新たにVS2019のVisualBasicでシリアル通信プログラム
にトライしてみました。
※本記事は、EXCEL VBA(マクロ)を使ったご経験のある方を対象としております。シリアルデータは、計測器からでもマイコンのプログラムからでいいです。
●以後
このプログラムをベースに表示をかえたりCSVファイル保存や、速度をあげたりいろいろできますので、機会をみていじっていきます。
その後、シリアルの調査をしていたら、WINDOWSでのシリアル通信について詳細な解説がありました。
https://www.technoveins.co.jp/dev/vb2005/serialport.htm
●プログラム組み前にアプリ+EXCELで済むことが多いです。
本記事平日の昼間にアクセス数急増しております、理由はマイコンからUSBシリアルでデータを受信して処理する実験測定を急いでいる方が来訪されているのではないかと存じます。しかし、プログラムを作ること自体で時間を食いますので、30分以内でデータを手のひらに乗せたいなら既存アプリとEXCELで処理するのが一般的な手段です。
①TeraTermでマイコンと接続してデータ受信してCSVファイルでログ
②CPLTでマイコンからのデータをリアルタイムグラフで監視しながらCSVログ
この2つが一番早いログ方法です。そのあとCSVをEXCELで読み込んで
所望の処理をすればアプリのダウンロード開始から30分以内にデータはみられると思いますのでVBでプログラム作るより早くて便利です。これをやってからシリアル受信プログラムを検討されるのが物事の順番です。
=>CPLTの使い方はこちらの記事にあります。
=>私が便利に使っている方法の記事です。
●学習本の紹介もありました
③VB.NET 全体的な解説ブログ
https://itsakura.com/vbnet
※2020年7月末記「時代はローコードプログラミングへ」
一年ぶりにVS2019を触ってみて、やはりVSは、初めての人にはしきいが高すぎると改めて感じました。
私は、VBA、Processing言語とか、arduino,mbedでC++を自由にプログラムできますが、VSでは一切手がでません。プログラムを作るコアの作業までたどり着くことができないからです。VSの対象としているユーザー層はプログラミングを仕事にしていて、一人ではなくチームで仕事をしている人たちに特化していると思います。ですので、趣味のMAKERなど一人で家庭で、プログラミングをしている人には全く不向きなIDEではないかと一年経て一層感じてます。市民開発者の重要性がクローズアップされてきてますので、プログラミング環境もMSがパワープラットフォームという概念を打ち出してます。ローコード言語といって、プログラマーでない人々が使えるプログラム環境です。
「Power Platform は Power Apps、Power Automate、Power BI でデータの収集から解析・予測までロー コーディングで実現するプラットフォームです。Microsoft Office を使い慣れたユーザーであれば、新しい業務アプリケーションの構築を容易に行うことができます。」ということで、2020年8月で、いじってみようかと思います。
https://www.microsoft.com/ja-jp/biz/dynamics/power-platform.aspx
※以下2020年7月以前の状況
==========VS落ちこぼれの私の現状===================
●正直に申しますと、私自身は、VBでなくProcessingを常用してます。IDEがArduinoに似ていて、ArduinoIDEを使っていれば使い勝手似てます。さらに、WINDOWSで作ったプログラムがAndroidスマホとRaspiなどLinuxマシンでも動作するしJAVA同様の処理速度が強みです。
=>VSを使うのはプログラムを仕事にしている人で、たぶん、本記事にたどりついたお方は、プログラムを仕事にしていない方が多いと存じます。そいう場合は、ExcelVBAもしくは、Processing言語をおすすめします。Processingを使う人は、「市民開発者(Citizen Developper)」ではないかと思ってます。VBAはWEB上の検索すれば膨大な記事があります。
YOUTUBEでも丁寧なチュートリアルあるので入門に最適です。
=>私は5年間MAKER活動をして、多軸力覚センサ、GNSS cm級GPSシステム等を開発してますが、マイコンC++とVBAとProcessingで十分対応できてます。大事なのはプログラミングではなく何を目的として開発活動をおこなうかのコト作りであって、モノ作りの手段としてのプログラミング作業で言語IDEなどに縛られて本来の目的であるコト作りがおろそかになると開発全体がうまくいかない経験をしてます。例えば、今マイコンから出てくるセンサデータを処理してログしてグラフにしたいという要求があった場合、既存のアプリでどこまでできるかを調査してからプログラムを作る必要があるかを考えたほうがいいです。大抵は、CPLTで済んでしまう場合が多いです。計算はCPLTでログしたCSVファイルをEXCELで処理すればいいです。プログラムが必要な場合でも、VSは、自由に使えるようになるのに時間がかかりすぎて開発活動に支障が生じたので、結局使わないで済ませるという私の結論です。
◆例えば時系列データの平均ばらつき処理は、マイコンからCPLTでグラフを見ながらログして直後にVBAで簡単に処理できてます、VBAできればマイコンデータ処理の90%はできると思います。
Processingは、EXCELVBAが不得意な数十万行にわたるような大きなデータの一括処理とか115200bps~460800bpsの高速データをUSBポート複数CHリアルタイム受信などの高度なデータログで使ってます。===============================================
※2020年6月記
VBも脱落してしまってので、Processingでシリアル受信 リアルタイムグラフプログラム作ってます。2時間でできてしまうので
VB.NETより速いです。多分史上最速でシリアル受信リアルタイムグラフが作れるのはProcessingだと思います。
こちらが、2時間で作ったプログラムの解説ですVSを使う必然性の無い方はProcessingがおすすめです。
Processingで1本プログラムを作ると、WINDOWS以外にAndroidとかLinux上でも動作するので、スマホのプログラム作れるので超便利です。VSを使っていてもスマホのプログラムを作るのは大変ですが、Processingだとワンタッチでスマホプログラムができます。