| ■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
|
|