VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/07/26(Tue) 00:47
投稿者G13
Eメール
URL
タイトルRe^7: MSCommのOn_Comm受信

よこやりスミマセン。
参考になればと思い、投稿致します。
#過去ログ詳しく見ていないので重複した質問があるかも知れません・・・。

受信フォーマットはこんな感じでしょうか?。

&H10(DLE)
&H71(SEL) *1
&H10(DLE)
&H80(HA)
&H10(DLE)
&H8A(UA)
&H10(DLE)
&H02(STX) *2
&H10(DLE)
&H**(LENGTH_HIGH) *3
&H10(DLE)
&H**(LENGTH_LOW) *3

データ(可変長)

&H10(DLE)
&H03(ETX) *4
&H**(BCC) *5

フレームを検定するのに必要そうな箇所を洗い出しました。
それぞれ細かくなりますが、質問があります。

*1:ポーリングに対する応答か否定応答(NAK)を判別する種別コード見ないな感じですか?。
*2:データ長の算出開始位置ですか?
*3:データ長(High/Low)は、どこからどこまでの長さが指定されていますか?。
*4:フレームの最終を示すコードですか?
*5:BCCは、どこからどこまでをどう計算した値ですか?

シリアルのMSCommでOn_Commを使用すると、8バイト以上を受信する場合、8バイト毎に1回
のOn_Commイベントが発生する事が多いです(伝送速度やハードにもよります)。

ですので、可変長が8バイト以下の場合、今回で言うと「NAK」の場合がそれにあたりますが、
現在の受信処理であれば、1回のOn_Commイベントで処理が行えるのは、8バイト以下のフレー
ムのみですから、上手く受信できます。
しかし、SELフレームの場合、8バイト以上のようですから、長いデータ長のフレームを受信
する場合、最初のDLE〜BCCまでを受信するまでは、幾度かのOn_Commイベントが発生し、その
間に受信したデータは、フレームが完全に受信しきるまでは何らかのバイト配列のグローバ
ル変数へ確保する必要があります。
その後、1フレームが受信完了した時点、各コードのチェックやBCCの検定を行うことが必要です。

#ReDim/ReDim Preserveを参照

エラーになる原因:
他の方々から回答もあるように・・・。
今のコードでは1回のイベントで受信したデータのみで全フレームのコートを検定しているので、
On_Commイベント内のまだ受信していないBuffer(8)でエラーとなります。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -