PLCとRS232-Cで通信を行っています。VB初心者です。
PLCにデータを送信しOnCommイベントで1文字ずつ受信を行っているのですが、
全て受信してからそれに対する処理を行いたいのですが、全て受信したというタイミングを取ることができません。どうしたらよいでしょうか?
設定は、
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
OnComm内容は、
Private Sub MSComm1_OnComm()
Dim Buffer
Dim t() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
Buffer = MSComm1.Input
Text1.Text = Text1.Text & Buffer
End Select
End Sub
受信した、パケットレングスの長さは、
通常先頭行に書かれているはずですが?
受信した値は、
00FF02(15 30 30 46 46 30 32)
です。特に、パケットレングスはないです。
PLCのほうのプログラムでCRLFをデータの最後に付加させるしかいですかね。。。?
> パケットレングスはないです。
無いということは、パケットロスしたかどうかなども
判断できないということですか?
PLCのデータを読込む場合は、
受信データ
00FF00000DF
であり、最後の2文字DFがサムチェックでデータのチェックを行っています。
上記の受信の場合
00FF02(15 30 30 46 46 30 32)
は、PLCへ書込みをした応答であり特にチェックはありません。
通信仕様が分からないので適当ですが
最初の0x15で電文の最初で次の0x15で電文の最後
その後に来る1バイトのチェックサム受信で電文受信完了と
いうことでいいんじゃないんですか?
よくわからないけど、フォーマットはこうですかね?
・STX + Data部 + ETX + BCC
上記と仮定すると、ETXを受信したら次の1文字を
受信して終了で駄目ですかね?
※この手のフォーマットの場合Data部にSTX/ETXが
来ない様になっている筈。