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

わんくま同盟

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

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


(過去ログ 126 を表示中)
■75069 / )  Re[1]: シリアル通信 送信コマンド(VB2008)
□投稿者/ ぽぴ王子 (20回)-(2015/02/24(Tue) 15:39:07)
ぽぴ王子 さんの Web サイト
No75068 (ガッキー さん) に返信

>     @入力した文字列をHEX、ASCUコードに変換し、配列の中に代入する。

この部分が少し違うかもしれません。
送信コマンドの仕様として

1バイト目 02H
2バイト目 30H "0" 
3バイト目 30H "0" 2バイト目と3バイト目を合わせて Node No.
4バイト目 30H "0" 
5バイト目 30H "0" 4バイト目と5バイト目を合わせて Sub Address
6バイト目 30H "0" SID

という感じになるのだと思われます。
(コマンドで Google 検索をしたらそれらしき機器の説明書が見つかりました)
なので Node No. を代入している部分

>         '--- Node No(00〜31番)
>         NodeNo = "00"
> 
>         '--- サブアドレス
>         SubAdd = "00"
>         byttmp(2) = Asc(SubAdd)
>         byttmp(1) = Asc(NodeNo)

は、このような感じになるかと思います。

>         '--- Node No(00〜31番)
>         NodeNo = "00"
> 
>         '--- サブアドレス
>         SubAdd = "00"
>         byttmp(1) = CByte(Asc(NodeNo.SubString(0,1)))
>         byttmp(2) = CByte(Asc(NodeNo.SubString(1,1)))
>         byttmp(3) = CByte(Asc(SubAdd.SubString(0,1)))
>         byttmp(4) = CByte(Asc(SubAdd.SubString(1,1)))

以下 byttmp のサイズもそれに合わせて大きくなると思います。
この場合は

>         Dim byttmp As List(Of Byte())

のように宣言して

>         '--- Node No(00〜31番)
>         NodeNo = "00"
> 
>         '--- サブアドレス
>         SubAdd = "00"
>         byttmp.Add(CByte(Asc(NodeNo.SubString(0,1))))
>         byttmp.Add(CByte(Asc(NodeNo.SubString(1,1))))
>         byttmp.Add(CByte(Asc(SubAdd.SubString(0,1))))
>         byttmp.Add(CByte(Asc(SubAdd.SubString(1,1))))
(中略)
>         'シリアルポートからデータを送信する.
>         SerialPort1.Write(byttmp.ToArray(), 0, byttmp.Count)

と書いたほうがいいかもしれませんね。

返信 編集キー/


管理者用

- Child Tree -