C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 126 を表示中)
■75113 / )  Re[3]: シリアル通信 送信コマンド(VB2008)
□投稿者/ ガッキー (4回)-(2015/02/27(Fri) 16:19:53)
お世話になります。

書き込んで頂いた内容を整理しまして、以下のようなコードに修正しました。
また、確認中に出た疑問なのですが
下記のコードで、送信を行うと★部分の箇所で

 「インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。
 パラメータ名: index」

というエラーがbyttmp(i)の箇所で吐き出されます。For文を消してBCC = BCC Xor byttmp(0)にすると吐き出されないのですが、これの出現する原因と対処方法を教えて頂けないでしょうか。


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim byttmp As New List(Of Byte)
        Dim NodeNo As String
        Dim SubAdd As String = "00"
        Dim SID As String = "0"
        Dim MRC As String = "01"
        Dim SRC As String = "01"
        Dim Var As String = "40"
        Dim ReadStAd As String = "0000"
        Dim Bit As String = "00"
        Dim Ele As String = "0001"
        Dim BCC As Byte

        '--- STX
        byttmp.Add(2)

        '--- Node No(00〜31番)
        NodeNo = ComboBox1.Text          '---コンボボックスから値を取得
        byttmp.Add(CByte(Asc(NodeNo(0))))
        byttmp.Add(CByte(Asc(NodeNo(1))))

        '--- サブアドレス
        byttmp.Add(CByte(Asc(SubAdd(0))))
        byttmp.Add(CByte(Asc(SubAdd(1))))

        '--- SID
        byttmp.Add(CByte(Asc(SID(0))))

        '--- MRC
        byttmp.Add(CByte(Asc(MRC(0))))
        byttmp.Add(CByte(Asc(MRC(1))))

        '--- SRC
        byttmp.Add(CByte(Asc(SRC(0))))
        byttmp.Add(CByte(Asc(SRC(1))))

        '--- Var
        byttmp.Add(CByte(Asc(Var(0))))
        byttmp.Add(CByte(Asc(Var(1))))

        '--- ReadStAd
        byttmp.Add(CByte(Asc(ReadStAd(0))))
        byttmp.Add(CByte(Asc(ReadStAd(1))))
        byttmp.Add(CByte(Asc(ReadStAd(2))))
        byttmp.Add(CByte(Asc(ReadStAd(3))))

        '--- Bit
        byttmp.Add(CByte(Asc(Bit(0))))
        byttmp.Add(CByte(Asc(Bit(1))))

        '--- Ele
        byttmp.Add(CByte(Asc(Ele(0))))
        byttmp.Add(CByte(Asc(Ele(1))))
        byttmp.Add(CByte(Asc(Ele(2))))
        byttmp.Add(CByte(Asc(Ele(3))))

        '--- EXT
        byttmp.Add(3)

        '--- BCC
        Dim i As Integer = 0
        BCC = 0
        For i = 0 To byttmp.Count
★            BCC = BCC Xor byttmp(i)
        Next

        byttmp.Add(BCC)


        'シリアルポートをオープンしていない場合、処理を行わない.
        If SerialPort1.IsOpen = False Then
            Return
        End If

        'シリアルポートからデータを送信する.
        SerialPort1.Write(byttmp.ToArray(), 0, byttmp.Count)

    End Sub



返信 編集キー/


管理者用

- Child Tree -