VisualBasicによる通信制御とWindowsプラットフォームでの通信ソフトウェアの設計方法を具体例を交えて基本的な通信プログラムを提供します。
1992 年に、Crescent Software Inc. は、VB 専用の mscomm.vbx ユーザー通信制御を設計しました。これは、Windows の 16 個のシリアル通信機能すべてによって実現される機能を含むだけでなく、シリアル ポートを介してデータを送受信するためのシリアル通信機能を提供します。 API を使用して、さまざまなユーザーやさまざまなビジネスのニーズを満たすユーザー設計を容易にする、より多くのオブジェクト属性を開発しました。現在、国内の VB 教材にはこの通信制御が紹介されているものはほとんどありません。この記事では、mscomm.vbx の通信制御とプログラミング方法を詳しく紹介し、実際の例に基づいて基本的な通信プログラムを示します。
1mscomm.vbx 通信制御の説明
mscomm.vbx 通信コントロールは、VB ツールボックスからフォーム フォームに直接追加して、通信に使用できます。ツールボックスにそのようなコントロールがない場合は、ツールのカスタム コントロールを使用して、Windows のシステム サブディレクトリから mscomm.vbx を vb のツールボックスに追加します。
1.1 通信方法
mscomm.vbx には、さまざまな通信ソフトウェアの開発および設計の問題を処理および解決する 2 つの異なる方法があります。
1. イベント駆動型。これは、C/C で Windows ソフトウェアを作成する場合のウィンドウ コールバック関数に似ており、問題に対処する強力な方法です。実際の業務では、通信において、回線データがローカルエンドに到着したり、cd 回線や rts 信号線の状態が変化したりしたときに、対応するイベントを使用して処理する必要があることがよくあります。このコントロールは、通信エラーやその他の問題の検出と処理を含む oncomm イベントを実装します。commevent 値は、最新の通信イベントまたはエラー数値コードを返します。通信制御の詳細なエラーとイベントの例は次のとおりです。
mscomm-er-break が 1 つのブレーク信号を受信しました
mscomm-er-cdtocd 信号のタイムアウト
…
mscomm-ev-cdcd 信号の変化
…
2. お問い合わせ方法commevent の値を読み取り、発生したエラーやイベントを処理するのはプログラマの責任です。通常、単純なアプリケーション設計ではこのアプローチを採用できます。
1.2 通信制御の特性
通信制御を使用して通信プログラムをコンパイルする鍵は、通信制御のプロパティを正確に理解して設定することです。 mscomm.vbx は、次のような通信制御に関する 27 のプロパティを提供します。
commport: 通信ポート番号を設定または返します。
設定: データ通信形式を文字列形式で設定または返します: ボー レート、パリティ、データ ビット、およびストップ ビット。
portopen: 通信ポートの状態を設定または返します(通信ポートの開閉を含む)。
…
3. 例
このプログラムのアプリケーションの背景は、1 台の産業用コンピューター (マスター ステーション) と 32 台のマイクロコントローラー (サブステーション) の間の通信問題を解決する dcc95 電気集塵機自動監視システム ソフトウェアです。親局と子局間のバスネットワーク構成はrs-485通信規格を採用しており、一問一答方式でデータ通信を行います。 32台の子局が親局に通信コマンド(ダウンリンクコマンド)を送信するため、親局は子局から返信された応答コマンド(アップリンクコマンド)を受信した後、ダウンリンクコマンドを送信し続けます。システム機能の要件に従って、マスター ステーションは 2 種類のコマンドを送信する必要があります。(1) タイマーによってトリガーされ、ls サイクルごとに 1 回送信される同期コマンド。(2) タイマーによってトリガーされる非周期コマンド。オペレータ 対応するコマンドボタンを移動することにより、非周期的に送信されます。自動監視システムソフトウェアは主局にインストールされ、通信プログラムも自動監視システムソフトウェアの一部として主局にインストールされます。
この記事では、通信プログラムをデバッグする際のテスト用に、基本的なデモ プログラムのリストのみを示します。テスト中、1 台の PC がメイン ステーションとして使用され、もう 1 台の PC が 32 のサブステーションの動作をシミュレートしました。2 台の PC は rs232c シリアル ポート通信を使用しました。メイン ステーションの通信デモ プログラム フォーム (フォーム) に 1 つの通信コントロール、2 つのタイマー コントロール、および 1 つのコマンド ボタン コントロールを追加します。 通信コントロール (mscomm1) は、シリアル ポートにアクセスし、定期的なタイマー コントロール (周期的)は、マスター ステーションを制御して各サブステーションに周期的コマンドを毎秒送信するために使用されます。コマンド ボタン コントロール(非周期的コマンド)と非周期的タイマー コントロール(非周期的)は、非周期的コマンドを送信するために使用されます。データ送信にはイベント ドリブン通信が使用され、rtreshlod 属性がさまざまな送信コマンドに従って設定されるため、oncomm イベントがデータを受信します。
2.1 フォーム内の各コントロールの初期化手順
通信シリアルポートの動作パラメータを設定し、周期タイマーの割り込み間隔を 1 秒、非周期タイマーの割り込み間隔を 0.5 秒に設定します。
サブフォームロード()
mscomm1.commport=2'com2 シリアル ポートを選択します
mscomm1.settings="9600,n8,1"'ボーレート 9600、パリティ ビットなし、8 データ ビット、1 ストップ ビット
mscomm1.inputlen=0'input は受信バッファの内容全体を読み取ります
mscomm1.inbuffersize=1024'受信バッファのバイト長を設定します
mscomm1.portopen=true'通信ポートをオープンします
mscomm1.inbuffercount=0'送信バッファデータをクリア
mscomm1.outbuffercount=0'受信バッファデータをクリアします
periodic.inteval=100'テレメトリ コマンドが ls ごとに 1 回送信されるように、ls タイミング間隔を設定します。
nonperiodic.inteval=500'0.5 秒のタイミング間隔を設定し、コマンド ボタンがアクティブになっているかどうかをクエリして、定期的なコマンドを送信するかどうかを決定します。
command-PRessed=false'コマンド ボタンは非アクティブです
while-periodic=false'定期的なコマンドデータ送信はまだ開始されていません
while-nonperiodic=false'非周期コマンドデータ送信はまだ開始されていません
エンドサブ
2.2 非周期コマンド送信プログラム
コマンドボタンの状態と周期コマンドデータの送信状況に応じて、非周期タイマの割り込みプログラムで非周期コマンドを送信します。
サブ非周期コマンドクリック()
command-pressed=true'コマンド ボタンのアクティブ化
エンドサブ
準非周期タイマー()
ifduring-periodic=trueorcommand-pressed=false
thenexitsub' 定期コマンドデータ送信が終了していない場合、またはコマンドボタンが押下されている場合は、非定期コマンドを送信するプログラムを終了します。
command-pressed=false'コマンド ボタンが非アクティブ状態に戻ります
Callsenddata(nonperiodic-command)'非周期的なコマンドを送信する
mscomm1.rthreshold=r-nonperiodic-byte'非周期コマンドを送信した後、マスター ステーションが設定されたバイト数を受信した後にオンコム イベントをトリガーするように rthreshold 属性を設定します。
エンドサブ
2.3定期タイマープログラム
定期タイマーの割り込みプログラムで定期コマンドを送信します。
サブピリオドタイマー()
ifduring-nonperiodic=truethenexitsub'非周期コマンドデータ送信が終了していない場合は、非周期コマンド送信プログラムを終了する。
while-periodic=true' は、定期的なコマンド データ送信ステータスを進行中に設定します。
callsenddata(periodic-command)'定期的なコマンドを送信します
mscomm1.rthreshold=r-periodic-byte'定期コマンドの送信後、マスター ステーションは r-remot-edata-byte バイトを受信します。これにより、oncomm イベントがトリガーされる可能性があります
エンドサブ
2.4オンコムイベントプログラム
rthreshold 属性の設定値に従って、対応するバイト文字が受信バッファに受信されると、oncomm イベントがトリガーされ、割り込みプログラムでデータが受信されます。
submscomm1-oncomm()
selectcasemscomm1.commevent'ここに、さまざまなエラーやイベントを処理するコードを挿入できます。
casemscomm-ev-receive
受信文字列$=mscomm1.input
selectcasemscomm1.rthreshold
caser-periodic-byte'定期コマンドの応答データ
calldisposdata(periodic-command)'受信したデータを処理します
whileperiodic=false' は、定期的なコマンド データ送信ステータスを終了に設定します。
caser-nonperiodic-byte'非周期コマンド応答データ
calldispositiondata(非定期コマンド)'受信データの処理
while-nonperiodic=false' は、非周期コマンド データ送信ステータスを終了に設定します。
終了選択
終了選択
エンドサブ
vb バージョンの継続的なアップグレードにより、vb は最も速く、使いやすく、強力なアプリケーション開発ツールとなり、エンタープライズ レベルのクライアント/サーバー アプリケーション ソフトウェア開発で最初に選択されるツールの 1 つとなります。 ->