[VB6]MSCommコントロールを.NETの [.NET]SerialPortへ移行

2020年2月10日月曜日

.NET C# VB VB6

t f B! P L

[VB6]MSCommコントロールを.NETの [.NET]SerialPortへ移行

[VB6]MSCommコントロールのプロパティ

.NETのSerialPortコントロールへ移行する前に、VB6のMSCommが持つプロパティを見ていきましょう。VB6のMSDNからMSCommコントロールの主要プロパティを抜粋しました。

CommPort

通信ポート番号を設定または取得します。

1 から 16 までの任意の数値に設定できます。既定値は 1 です。PortOpen プロパティを使ってポートを開くときに、そのポートが存在しなければ、コミュニケーション (MSComm) コントロールによってエラー 68 (Device unavailable) が生成されます。

※ ポートを開く前に、CommPort プロパティを設定する必要があります。

Settings

通信速度、パリティ、データ長、およびストップ ビット長を文字列で設定または取得します。

PortOpen

通信ポートの状態を設定または取得します。ポートの開閉にも使用します。

input

受信バッファから文字列を取得し、その文字列を受信バッファから削除します。

Input プロパティによって読み取られるバイト数は、InputLen プロパティで指定します。InputLen プロパティを 0 に設定すると、Input プロパティ によって受信バッファの内容全体が読み取られます。

InputMode プロパティを使って、Input プロパティによって読み取られるデータの種類を指定できます。InputMode プロパティを comInputModeText に設定すると、Input プロパティによって、テキスト データがバリアント型 (Variant) で読み取られます。InputMode プロパティを comInputModeBinary に設定すると、Input プロパティによって、バイナリ データがバリアント型のバイト配列で読み取られます。

Outpu

文字列を送信バッファに書き込みます。

Output プロパティで、テキスト データまたはバイナリ データを送信できます。Output プロパティを使ってテキスト データを送信する場合は、文字列が格納されているバリアント型 (Variant) データを設定します。Output プロパティを使ってバイナリ データを送信する場合は、バイト配列が格納されているバリアント型データを設定します。

ANSI 文字列をアプリケーションに送信する場合は、通常はテキスト データとして送信できます。送信するデータに、埋め込み制御文字、null 文字などが含まれている場合は、バイナリ データとして送信できます。

InputMode

comInputModeText に設定すると、Input プロパティによって、テキスト データがバリアント型 (Variant) で読み取られます。comInputModeBinary に設定すると、Input プロパティによって、バイナリ データがバリアント型のバイト配列で読み取られます。

Inputlen

InputLen プロパティの既定値は 0 です。InputLen プロパティを 0 に設定すると、Input プロパティを使用したときに、コミュニケーション (MSComm) コントロールによって受信バッファの内容全体が読み取られます。

InputLen プロパティで指定されたバイト数が受信バッファ内にない場合、Input プロパティは長さ 0 の文字列 ("") を返します。InBufferCount プロパティをチェックすると、Input プロパティを使用する前に、必要なバイト数が受信バッファ内に存在するかどうかを調べることができます。

このプロパティは、固定長データ ブロック形式でデータを出力するマシンからデータを読み取る場合に役立ちます。

OutBufferCount

送信バッファに格納されているバイト数を返します。このプロパティを使って、送信バッファをクリアすることもできます。

[.NET]SerialPortコントロールへの移行

ここからは実際に、.NETのSerialPortへ移行する方法を見ていきましょう。プロパティ別に移行方法を解説します。

CommPort

ポート番号の指定は、MSCommでは番号で指定していましたが、SerialPortでは、ポート名を指定します。

【MSComm】
ctrl.CommPort = 4
【SerialPort】
ctrl.CommPort = "COM4"

Settings

MSCommのSettings プロパティには、カンマ区切りで以下の4つの情報を設定します。

"BBBB,P,D,S"
項目 設定内容
BBBB(1カラム目) 通信速度 (bps)
P (2カラム目) パリティ(N:なし、E:偶数、O:奇数、M:マーク、S:スペース)
D(3カラム目) データ長
S(4カラム目) ストップ ビット長

.NETのSerialPortコントロールへの移行は、次のように書きます。

【MSComm】
ctrl.Settings = "9600,N,8,1"
【SerialPort】
ctrl.BaudRate = 9600
ctrl.Parity = Parity.None
ctrl.DataBits = 8
ctrl.StopBits = StopBits.One

PortOpen

  • 接続
【MSComm】
ctrl.PortOpen = True
【SerialPort】
ctrl.Open();
  • 切断
【MSComm】
ctrl.PortOpen = false
【SerialPort】
ctrl.Close();

※ VB6のMSCommでは、通信速度などを指定するSettingsプロパティを設定する前に、PortOpenプロパティをtrueに指定しても問題ありませんでしたが、.NETのSerialPortコントロールのでは、先にSettingsの設定から行う必要があります。

input

【MSComm】
data = ctrl.Input 
【SerialPort】
data = ctrl.ReadExisting()

InputMode

Inputlen

【MSComm】
ctrl.PortOpen = false

Output

【MSComm】
ctrl.Output = commandtext
【SerialPort】
ctrl.Write(commandtext)

OutBufferCount

  • 取得 (Getter)
【MSComm】
If ctrl.OutBufferCount > 0 Then
【SerialPort】
If ctrl.BytesToWrite > 0 Then
  • 設定 (Setter)
【MSComm】
ctrl.OutBufferCount = 0
【SerialPort】
ctrl.DiscardOutBuffer()

SThreshold
DTREnable
EOF
Enable
Handshaking
In Buffer Size

Left
NullDiscard
OutBuffer Size
Parity Replace
RThreshold
RTSEnable

スポンサーリンク

QooQ