【VB.Net】ハードウェアとシリアル通信をする方法

どうも!リョクちゃです。

今回はVB.Netで何らかの機器とシリアル通信をする方法について、

例を交えて簡単に紹介していきます。

シリアル通信を学んで様々な機器と接続をし、危機からのデータの取得や

機器の制御などができるようになるお手伝いができればなと思っております。

ちなみに前回はこちら

Chartコントロールを使うことでWindowsフォームアプリケーションでグラフを作成・表示ができます。ここではChartの使い方を簡単に、疑似的に生成されたデータをボタンを押すたびにプロットしていくといった例を交えて紹介しています。



目次

準備編

VisualStudio2019を使って、Windowsフォームアプリケーションを作成していきます。

最初の手順については、下記記事をご参照ください。

VisualStudioを使ってWindowsアプリケーションを開発していく流れを紹介します。 以前に、簡単にざっくりと教える機会があった...
スポンサーリンク




シリアル通信とは

インターネットで検索すると、以下のような回答がヒットします。

シリアル通信(シリアルつうしん、Serial communication)は、電気通信において伝送路上を一度に1ビットずつ、逐次的にデータを送ることをいう。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

1ビットは0や1のデータを指します。

シリアル通信には以下の規格があります。

  • RS-232C
    D-Sub25ピンまたはD-Sub9ピン(接続コネクタ)
    正式名称:ANSI/EIA-232-E
  • RS-422A
    各信号線の目的やタイミングは規定されています。
    接続コネクタの規定はありません。
    主にD-Sub25ピンやD-Sub9ピンが採用されています。
  • RS-485
    RS-422Aの上位互換の規格
    正式名称:EIA-485

といった規格があり、主にはRS-232やRS-485が使われているのではないでしょうか。

主なパラメータごとの特徴は以下のようになります。

パラメータRS-232CRS-422ARS-485
伝送モードシンプレックスマルチポイント
シンプレックス
マルチポイント
マルチプレックス
最大接続台数1ドライバ
1レシーバ
1ドライバ
10レシーバ
32ドライバ
32レシーバ
最大伝送速度20[kbps]10[Mbps]10[Mbps]
最大ケーブル長15[m]1200[m]1200[m]
特徴短距離
全2重通信
1:1
長距離
全2重半2重通信
1:N
長距離
全2重半2重
N:N

フォームの作成

今回、以下のフォームを作成します。

各1~21までのコントロールの名称やテキストは以下のように設定しています。

Noコントロール名前テキスト
1GroupBoxgbBaudrateボーレート(bit/sec)
2RadioButtonrb5760056700
3RadioButtonrbs3840038400
4RadioButtonrbs1920019200
5RadioButtonrbs96009600
6RadioButtonrbs48004800
7GroupBoxgbDataLengthデータ長
8GroupBoxgbParityパリティ
9RadioButtonrbSeven7ビット
10RadioButtonrbEight8ビット
11RadioButtonrbEven偶数
12RadioButtonrbOdd奇数
13RadioButtonrbNoneなし
14GroupBoxgbStopBitストップビット
15LabellbComPortCOMポート名
16RadioButtonrbOne1ビット
17RadioButtonrbTwo2ビット
18ButtonbtnConnect接続
19ComboBoxcbComport
20ButtonbtClose非接続
21RitchTextBoxrtxSerial

実行環境

筆者の実行環境は、

  • VisualStudio2019
  • Windows 10 64bit
  • .Net Framework 4.5.1

になります。

※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。

アプリケーションの目的

各通信パラメータを選択し、接続ボタンを押すことで機器との接続が成功した場合には、

rtxSerialに接続成功が出ることを確認し、

データが受信できる機器であれば受信ができることを目的とします。

受信ができない場合は、接続のみ確認できることを目的とします。

プログラム編

定数・変数宣言

定数と変数には、それぞれ通信パラメータで必要となる変数を準備します。

#Region~#End Regionと書くことで、コードをわかりやすいように

ブロックごとに分けています。(今までの記事では書いていませんでした。。。)

通信速度用に以下の列挙体を準備しておきます。

フォーム起動時の処理

フォーム起動時には以下の処理を行います。

PCに接続されているCOMポートを取得する関数を作成し、呼び出しています。

COMポート取得関数

COMポートを取得し、コンボボックスのcbComportに値をセットしています。

ボタン押下時の処理

ボタンが押されたら、以下の処理を行います。

  • SerialPort変数の初期化
  • 各通信パラメータ(ストップビット、パリティ除く)入力値チェック
  • シリアル通信開始
  • 成功時、接続成功とrtxSerialに表示



通信パラメータに関する処理

シリアル通信の接続をするにあたって、通信時のパラメータがあります。

このパラメータが通信側の機器とあっていないと正しく通信ができないので、

注意が必要です。

通信パラメータには主に以下の項目があります。

  • 通信速度(ボーレート[bit/sec])
  • データ長(DataBits)
  • パリティ(Parity)
  • ストップビット(StopBits)
  • COMポート

各通信パラメータのラジオボタンがチェックされたとき、以下の処理をそれぞれ行います。

ボーレート(通信速度)

データ長(データビット)

ストップビット

パリティ

データ受信に関する処理

機器から何らかのデータを受信したとき、以下の処理を行います。

このアプリケーションでは、受け取った値をConsole.WriteLine()で出力します。

SerialPort.ReadLine()

と記述することで通信された機器からデータを受信することができます。

また、mSerialPort.DataReceivedのイベントを書くことで、

機器からデータを受信したときにイベントが発生がされるので逐一データの出力がされます。

実行編

それでは実行していきます。

プログラム起動時

通信パラメータ選択時

接続ボタン押下後、接続成功メッセージを表示

データ受信に関しては、手元になかったので後日改めて実行後書き足していきます。。。

続編として、以下の記事を作成しました。

ArduinoProMini互換機からデータを受信する記事になっています。

Arduinoとは、イタリアで産まれた教育用のマイコンボードです。今回はArdunioProMiniの互換機とされるAE-ATMEGA328-MINIを使って、VB.Netでシリアル通信をし、ATMEGA328MINIからデータを受信する方法を紹介しています。

まとめ

VB.Netによるシリアル通信の接続や通信先の機器からデータの受信について、

紹介していきました。

シリアル通信では通信先のパラメータが正しく合致していないと

通信が正常に行われないので通信先のパラメータを

よく確認したうえで通信をするようにしましょう。

たとえ通信ができてもボーレートの違いによってデータの受信に失敗することもあります。

読者の方の少しでも参考になれば嬉しいです。

最後までご覧いただきありがとうございます。

・こちらの書籍を参考にVB.Net勉強しています。

スポンサーリンク