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

わんくま同盟

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

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


(過去ログ 126 を表示中)
■75068 / )  シリアル通信 送信コマンド(VB2008)
□投稿者/ ガッキー (1回)-(2015/02/24(Tue) 13:57:19)

分類:[VB.NET/VB2005 以降] 

   仕事で通信プログラムを作る事になったのですが、
   プログラムが初めてなので(まだ3日程)、考え方とコードのご教示頂けないでしょうか。
   
   RS-485通信で送信するプログラムをVB2008で作成しています。

   送信コマンドの仕様ですが
    @STX(HEX)02Hで固定
    ANode No(ASCU)00〜31番までの可変
    BSub Add(ASCU)00と固定
    CSID(ASCU)0で固定
    DMRC(ASCU)01で固定
    ESRC(ASCU)01で固定
    FVAR(ASCU)40orC2の可変
    GReadStAd(ASCU)0000の固定
    HBIT(ASCU)00の固定
    IEle(ASCU)0001or000Bの可変
    JEXT(HEX)03Hで固定
    KBCC(HEX)A〜Jまでの値を利用
   これらをまとめたデータ
    [@STX]+[ANode No]+[BSub Add]+[CSID]+[DEFGHIFINE]+[JEXT]+[KBCC]
   を送信コマンドとして、データを送信します。

   送信はSerialPort.Writeを利用

   私のイメージとしては、
    @入力した文字列をHEX、ASCUコードに変換し、配列の中に代入する。
    A代入された配列の要素を一つに結合して変数に入れる。
    BSerialPort.Write関数を使ってデータを送信する。
   というイメージなのですが、あっていますでしょうか?
   
   途中段階ですが、コードを載せますので、アドバイス等お願い致します。
   
    Dim byttmp(11) As Byte
Dim NodeNo As String
Dim SubAdd As String
Dim SID As String
Dim MRC As String
Dim SRC As String
Dim Var As String
Dim ReadStAd As String
Dim Bit As String
Dim Ele As String
Dim BCC As Byte

'--- 配列初期化
Array.Clear(byttmp, 0, byttmp.Length)

'--- STX
byttmp(0) = 2

'--- Node No(00〜31番)
NodeNo = "00"

'--- サブアドレス
SubAdd = "00"
byttmp(2) = Asc(SubAdd)
byttmp(1) = Asc(NodeNo)

'--- SID
SID = "0"
byttmp(3) = Asc(SID)

'--- MRC
MRC = "01"
byttmp(4) = Asc(MRC)

'--- SRC
SRC = "01"
byttmp(5) = Asc(SRC)

'--- Var
Var = "40"
byttmp(6) = Asc(Var)

'--- ReadStAd
ReadStAd = "0000"
byttmp(7) = Asc(ReadStAd)

'--- Bit
Bit = "00"
byttmp(8) = Asc(Bit)

'--- Ele
Ele = "0001"
byttmp(9) = Asc(Ele)

'--- EXT
byttmp(10) = 3

'--- BCC
Dim i As Integer
For i = 1 To 10
BCC = BCC Xor byttmp(i)
Next

BCC = CByte(BCC)

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


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


   

返信 編集キー/


管理者用

- Child Tree -