MSCOMM コントロールに関する注意事項
VB5.0/6 の MSComm 通信制御は、シリアル ポート接続の確立を可能にし、他の通信デバイス (モデムなど) に接続できる一連の標準通信コマンド インターフェイスを提供します。
また、コマンドの送信、データの交換、通信プロセス中に発生する可能性のあるさまざまなエラーやイベントの監視と対応も可能で、全二重のイベント駆動型の通信を実現できます。
ダイナミックで効率的かつ実践的なコミュニケーション プログラム。しかし、実際の通信ソフトウェア設計プロセスでは、MSComm 制御は想像されているほど完璧ではなく、制御も簡単ではありません。特に中国語の言語では
95/98 未満で通信するとさらに問題が発生します。以下では、基本的な紹介から始めて、MSComm コントロールのプログラミングで発生する問題とプログラミング テクニックについて徐々に説明します。
1. MSComm コントロールと通信する
1.シリアル通信の基礎知識
一般に、コンピュータには 1 つ以上のシリアル ポート (com1、com2、...) があり、これらのシリアル ポートは、データ転送用の外部デバイスや PC にも提供されます。
手紙の一節。これらのシリアル ポートは、CPU と周辺機器の間のインタープリタとして機能します。文字データが CPU からペリフェラルに送信されると、これらの文字データはシリアル ビットに変換されます。
ストリームデータ。データを受信する場合、ビットストリームデータは文字データに変換され、CPU に渡されます。また、Windows では通信ドライバーが使用されます。
(COMM.DRV) は、データを送受信するために API 関数を呼び出します。通信制御または宣言で API 関数が呼び出される場合、それらは COMM.DRV によって解釈され、デバイス ドライバーに渡されます。
vB プログラマーは、通信プログラムを作成する必要があります。 Windows 通信 AP1 機能への通信制御によって提供されるインターフェイスを知っていれば十分です。つまり、設定して監視するだけです。
コントロールのプロパティとイベントを信頼してください。
2. Mscomm コントロールの使用
MSComm コントロールの使用を開始する前に。まずそのプロパティ、イベント、エラーを理解する必要があります
プロパティの説明
CommPort は通信ポート番号を設定または返します。
設定では、ボーレート、パリティ、データビット、ストップビットを文字列として設定または返します。
PortOpen は、通信ポートのステータスを設定または返します。ポートの開閉も可能
入力は受信バッファ内の文字を返し、削除します。
出力は文字列を送信バッファに書き込みます
CommEvent プロパティは、通信イベントまたはエラーに対して次のいずれかの値を返します。これらの定数は、コントロールのオブジェクト ライブラリにもあります。
定数値の説明
ComEventBreak1001 がブレーク信号を受信しました
ComEventCTSTO1002ClearToSendタイムアウト。文字を送信する場合、システムによって指定されたイベント内で、CTS (ClearToSend) 行は低レベルになります。
ComEventDSRTO1003DataSetReadyタイムアウト。文字を送信する場合、システムによって指定されたイベント内で、DSR (DataSetReady) ラインがローレベルになります。
ComEventFrame1004 データ フレーム エラー。ハードウェアがデータ フレーム エラーを検出しました
ComEventOverrun1006 ポート オーバーフロー。ハードウェア内の文字がまだ読み込まれていないため、次の文字が到着して失われます
ComEventCDTO1007CarrierDetectTime。文字を送信する場合、システムによって指定されたイベント内で CD (CarrierDetect) ラインが Low レベルになります。 CD
RLSD (ReceiveLineSingalDetect、受信回線信号検出) とも呼ばれます。
ComEventRxOver1008 受信バッファ オーバーフロー。受信バッファにスペースがありません
ComEventRxParity1009 パリティ エラー。ハードウェアがパリティ エラー 7 を検出しました
ComEventTxFull1010 送信バッファがいっぱいです。送信文字のキューイング中に、送信バッファがいっぱいになります。
ComEventDCB1011 ポート DCB (DeviceControlBlick) の取得中に予期しないエラーが発生しました。
通信イベントには次の設定が含まれます。
定数値の説明
ComEvSend1 送信バッファ内の文字数が Sthreshold 値を下回っています
ComEvReceive2 は Rthreshold 文字を受信しました。このイベントは、Input プロパティを使用して受信バッファー内のデータが削除されるまで生成され続けます。
ComEvCTS3CTS(ClearToSend) 行が変更されました
ComEvDSR4DSR(DataSetReady) 行が変更されました。このイベントは、DSR が 1 から 0 に変化すると発生します。
ComEvRing6 がリング信号を検出すると、ComEvCD5CD (CarrierDetect) ラインが変化します。一部の URAT(UniversalAsynchronousReceiver-
-トランスミッター、ユニバーサル非同期レシーバー/トランスミッター) はこのイベントをサポートしていません
ComEvEOF7 が EOF 文字 (ASCII 文字 26) を受信しました
エラー メッセージ (MSComm コントロール) 次の表に、MSComm コントロールがキャプチャできるエラー メッセージを示します。
定数値の説明
ComInvalidPropertyValue380 無効なプロパティ値です
ComSetNotSupported383 プロパティ 読み取り専用
ComGetNotSupported394 プロパティ 読み取り専用
ComPortOpen8000 ポートがオープンされている場合、この存在は無効になります。
8001 タイムアウト設定は 0 より大きくなければなりません
ComPortInvalid8002 無効なポート番号です
8003 属性は実行時のみ有効です
8004 プロパティは実行時に読み取り専用です
ComPortAleadyOpen8005 ポートがオープンされました
8006 デバイス識別子が無効であるか、サポートされていません
8007 デバイスのボーレートはサポートされていません
8008 指定されたバイトサイズが無効です
8009 デフォルトパラメータエラー
8010 ハードウェアが利用できません (他のデバイスによってロックされています)
8011 関数はキューを割り当てることができません
ComNoOpen8012 デバイスが開いていません
8013 デバイスはすでに開いています
8014 通信通知は使用できません
ComSetCommStateFailed8015 通信ステータスを設定できません
8016 通信イベントのシールドを設定できません
ComPortNotOpen8018 この存在は、ポートが開いている場合にのみ有効です
8019 デバイスがビジー状態です
ComReadError8020 通信デバイス読み取りエラー
ComDCBError8021 ポートデバイス制御ブロックの取得中に内部エラーが発生しました
上記の基本特性を理解したら、通信許可プログラムの作成を開始できます。 VB5.0/6.0で新規プロジェクトファイルを作成します。 MicrosoftCommControl5.0グループを追加
ファイルを作成し、Simplified Form1 にコマンド ボタンを追加して CmdTest という名前を付け、MSComm コントロールに MSComm1 という名前を付けて、次のプログラム コードを追加します。
PrivateSubcmdTestClick()'シリアルポートをオープンします
MSComl.CommPort=2'Com2 を設定します
IfMSComml.PortOpen=FalseThen
MSComm1.Settings="9600,n,8,1"'9600 ボーレート、パリティなし、8 データ ビット、1 ストップ ビット
MSComm1.PortOpen=True'シリアルポートを開きます
エンディフ
MSComm1.OutBufferCount=0'送信バッファをクリアします
MSComm1.InBufferCount=0'受信バッファをスリップします
'文字データを送信する場合は必ずキャリッジリターン(vbcr)で終了してください
MSComm1.Output="Thisisaqoodbook!"&vbCr
'電話番号をスプラッシュするか、AT コマンドを送信します
MSComm1.Output="ATDT05778191898,&vbCr
'文字配列データを送信する場合は、事前に ByteArray に値を割り当てる必要があることに注意してください
DimByteArrayasbyte()
'動的配列を定義する
ReDimByteArray(1)
'配列サイズを再定義する
バイト配列(0)=0
バイト配列(1)=1
MSComm1.Output=ByteArray
EndSub
privateSubMScommEvent()
SelectCaseMSComm1.CommEvent
CasecomEvReceive
DimBufferAsVariant
MSComm1.InputLen=0
'バイナリデータを受信
MSComm1.InputMode=ComInputModeBinary
バッファ=MSComm1.入力
'キャラクターデータを受信
MSComm1.InputMode=comInputModeText
バッファ=MSComl.Input
カゼルセ
終了選択
エンドサブ
(手順1)
1 2次ページの全文を読む