スキップしてメイン コンテンツに移動

[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

コメント

このブログの人気の投稿

axiosの使い方まとめ (GET/POST/例外処理)

axiosの使い方まとめ (GET/POST/例外処理)最近何かとよく使うJavaScriptでAJAX通信を行うaxiosについて、簡単に使い方をまとめました。GETリクエストをaxiosで送るまずはGETリクエストをaxiosで送る方法です。const res =await axios.get('/users') console.log(res.data)分割代入の記法を使うと、以下のようにも書けますconst{data}=await axios.get('/users') console.log(data)クエリパラメータ (URLパラメータ)を指定クエリパラメータを指定する方法は2つあります。1つ目は、axios.getに指定するURLに直接記述する方法です。axios.get('/user?id=123')2つめは、axios.getの第2引数に、オプション指定する方法です。axios.get('/user',{ params:{ id:123}})POSTリクエストをaxiosで送る次はPOSTリクエストをaxiosで送る方法です。JSON形式でPOSTするJSON形式でPOSTする場合は、axios.postの第2引数に、送信するデータをJavaScriptオブジェクトで指定します。const res =await axios.post('/user',{ id:123, name:'Yamada Tarou'})application/x-www-form-urlencoded形式でPOSTするapplication/x-www-form-urlencoded形式でPOSTする場合は、URLSearchParamsを使います。var params =newURLSearchParams() params.append('id',123) params.append('name','Yamada Tarou')const res =await axios.post('/user', params)スポンサーリンク axios でファイルをアップロードする画像などのファイルを、…

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決する

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決するタイトルの通りですが、Windows 8 以降では Windows Form アプリケーションで、コントロールの ImeMode に Katakana や KatakanaHalf を設定しても、カタカナになってくれません。なぜ ImeMode が効かないのか?Windows 8 以降、IME Mode の切り替えは、ユーザー単位で切り替わるようになった為、アプリから IME Mode 制御が出来ないようになりました。
(IME をON にした場合、常に ひらがな モードになます)※ Windows 7までは、IME Modeの切り替えはアプリ単位で行われていた為、問題なくアプリから IME制御が行えました。スポンサーリンク 対処方法Windows 8 以降、IMEの制御は、InputScope クラスの利用が推奨されています。
しかし、InputScope クラスは、WPF、Windows ストアアプリでしか使えない為、Windows Formアプリでは使用できません。
(Windows Form はもう使うな!という事でしょうか (涙) )結論としては、コントールパネルの設定で、IMEの制御をユーザ単位から アプリ単位に変更する事ができます。
これで、Windows Formアプリでも 従来通りIMEの制御を行う事が出来ます。おわりにこの方法だと、アプリをインストールする端末すべてに設定が必要となり、とっても面倒です。。。
しかし、今の所これしか方法がない状態です。
これからは Windows Formではなく、WPFや Windows ストアアプリで作れという事ですかね (^^;)

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]MailKitを使ってメールを送るサンプルコードです。(C#)UTF8/iso-2022-jpのエンコーディング指定、GMail/YahooのSMTPサーバで送るなど、4つのサンプルコードでMailKitの使い方を紹介します。MailKitって何?2017年に.NET標準のSystem.Net.Mail.SmtpClientが廃止予定となり、Microsoftより今後はオープンソースライブラリである、MailKitに置き換えるとアナウンスがありました。既にSmtpClientは非推奨になっており、今後は廃止されていきます。現在、SmtpClientを使用したソースコードには、Visual StudioからMailKitを使うよう警告が出るようになっています。さっそく、MailKitを使ってメールを送信するサンプルコードを作っていきます。UTF8でメールを送信文字エンコーディングを、UTF8でメールを送信するサンプルコードです。
MailKitは、デフォルトの文字エンコーディングがUTF8なっている為、シンプルなコードでメールを送信する事ができます。var host ="<smtp server name>"; var port =25;// or 587using(var smtp =new MailKit.Net.Smtp.SmtpClient()){//SMTPサーバに接続する smtp.Connect(host, port, MailKit.Security.SecureSocketOptions.Auto);//認証が必要な場合は、以下のコメントを解除//smtp.Authenticate("<id>", "<password>");//送信するメールを作成する var mail =new MimeKit.MimeMessage(); var builder =new MimeKit.BodyBuilder(); mail.From.Add(new MimeKit.MailboxAddress("",&quo…