投稿日 | : 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)でエラーとなります。