投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/7/13 21:34:44
> Private Delegate Sub Delegate_RcvXDataToTextBox(xdec As String)
> Private Delegate Sub Delegate_RcvYDataToTextBox(xdec As String)
デリゲートを 2 つも用意する必要は無いと思います。

Sub RcvXDataToTextBox(xdec As String) と
Sub RcvYDataToTextBox(xdec As String) は、
戻り値の型、および引数の数と型が同一ですし、
デリゲートは 1 つで十分かと。


> 受信データは連続して送られてきていますが、
> 送信側で、データの最後にCR+LFを入れた方が良いということでしょうか?

送信側に入れるという方針もなくは無いですが、ここで提案しているのは
『送信側』ではなく、『受信側』で入れた方が良いのではないか、という意味です。

マイコンで受信するプログラムは完成していて、今回作っているのは
送信側の様子をPCで確認するための監視ツールという位置づけのようですし、
あまり通信仕様をころころ変えるべきでもないでしょう。


Sub RcvXDataToTextBox(xdec As String) や
Sub RcvYDataToTextBox(xdec As String) の実装は分かりませんが
Sub RcvDataToTextBox(data As String)  '5日12時、5日14時、5日17時、5日18時
Sub RcvDataToTextBox(data As Byte())  '6日17時、7日9時、7日11時、9日15時
Sub RcvDataToTextBox(rdat1 As Byte()) '10日17時
などの状況から、現状は下記に近い処理になっているものと推察します。

> Private Sub RcvDataToTextBox(n As UShort)
>  Dim b1 As String = Convert.ToString(n, 10)
>  RcvTextBox.AppendText(b1)
> End Sub
実際には 引数が String になっていたり、TextBox の名前が
変わっていたりもするでしょうが、それはさておき。


今回は 1023 しか送っていませんが、最終的には 10bit のデータとして、
0~1023 の範囲の値が送られてくるわけですよね?

そうすると、前回の受信データと今回の受信データを単純に AppendText するだけでは、
データの区切りが分からなくなってしまうのでは、と懸念しています。

Public Class Form1
    Private Delegate Sub DelegateSample(xdec As UShort)
    Private Sub RcvDataToTextBox(n As UShort)
        Dim b1 As String = Convert.ToString(n, 10)
        RcvYTextBox.AppendText(b1)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Invoke(New DelegateSample(AddressOf RcvDataToTextBox), 1023us)
        Invoke(New DelegateSample(AddressOf RcvDataToTextBox), 1023us)
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Invoke(New DelegateSample(AddressOf RcvDataToTextBox), 102us)
        Invoke(New DelegateSample(AddressOf RcvDataToTextBox), 310us)
        Invoke(New DelegateSample(AddressOf RcvDataToTextBox), 23us)
    End Sub
End Class


Button1 では「1023」を 2 回渡しており、
Button2 では「102」と「310」と「23」という 3 つの値を渡しています。

しかしどちらを使っても、RcvYTextBox に出力される結果は
"10231023" の 8 文字であり、画面上では見分けがつきません。

ですから AppendText の前にデータを補って、" 1023 1023" とか "102,310,23," などと、
何らかの区切りを挿入しておいた方が良いのではないか、という老婆心です。


先の 2017/7/11 01:33:09 の投稿で、
>>    RcvTextBox.AppendText(Str(rdat))
>>    'RcvTextBox.AppendText(CStr(rdat)) 
と、あえて CStr 関数ではなく Str 関数を使っているのもこれが理由です。
rdat が &H3FF(1023) だった場合、
Str(rdat) は " 1023" の 5 文字を返しますが、
CStr(rdat) は "1023" の 4 文字を返しますので。(Convert.ToString も同様)