【VS2019】VisualBasicで1時間でシリアル受信Pgmできた<CONTEC社様へ感謝>

本ブログで最もアクセス数の多い記事の一つが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

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

●VS C++でシリアルプログラムはややこしくて、初心者はとっつきにくい
2年前の記事を見て、本ブログでは、自分で実施した記事を基本にしてるので
VSのC++は、無理だと判断して、新たにVS2019のVisualBasicでシリアル通信プログラム
にトライしてみました。

●VBAとVB.NETの違い
 ExcelVBAは、インタープリタで昔からのBASICの形態ですが、VB.NETは、VisualStudioの言語として
コンパイラ言語です。.NET FRAMEWORKという環境を使ってますので、C++と同様な速度で実行できる
BASIC言語です。そのかわり、WINDOWSシステムで使うための手続きが入っています。
私が初めて触れるのがスレッド処理です。リアルタイムOSでは、タスクが複数同時に動作するので
スレッド処理をしてプログラムの動作を制御しないとリアルタイムで動かないので、その処理が
VB.NETのシリアル通信プログラムにも必要な点が、相違点として新しい学習ポイントとなります。
同一な点は、フォームアプリケーションであること、フォーム上のオブジェクトのProperty基準で
イベント起動型のプログラム構造になっている点は、同じですので、VBAに慣れた方は入りやすいです。
しかし、Propertyの種類がVBAの何倍もあって、同じ意味のものがあまりありません。
●VisualStudio 2019をインストール
 MSのページにいって、ダウンロードしますが、30分程度時間かかります。
https://visualstudio.microsoft.com/ja/vs/
 使うのは、WINDOWSフォームアプリケーションですが、私は、SSDの余裕があったのでVS2019全部インストールして50GBになってしまいました。
 インストールしたら、下記のように新規プロジェクトをVisualBasic のWindowsフォームアプリケーションで作成すればあとは、フォームのプログラム作成に移れます。フォームアプリの導入解説は、MSDOCにあります
https://docs.microsoft.com/ja-jp/visualstudio/ide/create-a-visual-basic-winform-in-visual-studio?view=vs-2019

●CONTEC社の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() {
int i=0;
pc.baud(9600);
while(1) {
pc.printf(“No%d\n\r”,i);
i++;
wait(0.2);
}
}

●プログラム作業
CONTECのページ順に作りますが、まとめてメモします。
①フォームを作る
Button1(接続),Button2(切断)
TEXT1(COM入力),TEXT2(受信データ)

②Serial オブジェクトをドラッグドロップ
これが、VBの良さです。他の言語なら、ライブラリーを呼び出したり登録するのでややこしい記述があるのですが、VBでは、TOOLボックスからドラッグドロップでボタンとかテキストボックスと同等の扱いでプログラムに登録できます。

③プログラムをコピペ
CONTEC社のプログラムを取捨選択してつなぎ合わせます。
私の場合は、とにかくシンプルなプログラムということで以下のものでとりあえず動作しました。スレッド処理もわからないので、そっくりコピペです。ソリューションファイルのZIPも添付しておきます。
Serial_WindowsApp1

Imports System.IO.Ports

Public Class Form1
Delegate Sub DataDelegate(ByVal sdata As String)
Private Sub PrintData(ByVal sdata As String)
TextBox2.Text = sdata
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
SerialPort1.PortName = TextBox1.Text ‘オープンするポート名を格納
SerialPort1.Open() ‘ポートオープン
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If SerialPort1.IsOpen = True Then ‘ポートオープン済み
SerialPort1.Close() ‘ポートクローズ
End If
End Sub

Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim ReceivedData As String = ” ” ‘受信データ用変数を宣言します
Try
ReceivedData = SerialPort1.ReadLine ‘データを受信します
Catch ex As Exception
ReceivedData = ex.Message ‘例外処理を行います
End Try
‘Invokeメソッドにより実行されるメソッドへのデリゲートの宣言を行い、受信データを表示します
Dim adre As New DataDelegate(AddressOf PrintData)
Me.Invoke(adre, ReceivedData)

End Sub

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

End Sub
End Class

●動作
開始ボタンを押すとフォームが表れて、COM番号を入力して接続ボタンをおすと
受信したデータが下のテキストボックスに表示されるはずです。

●以後
このプログラムをベースに表示をかえたりCSVファイル保存や、速度をあげたりいろいろできますので、機会をみていじっていきます。
その後、シリアルの調査をしていたら、WINDOWSでのシリアル通信について詳細な解説がありました。
https://www.technoveins.co.jp/dev/vb2005/serialport.htm

コメントを残す

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