tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル VB2005でバイナリデータをシリアル通信
投稿日: 2009/12/15(Tue) 16:40
投稿者ロージー
初めまして、VB2005を始めて4ヶ月程の者です。
いつもこちらの掲示板を参考にさせていただいてます。

現在、無線機(IC910D)にコマンドを送り周波数を変更するプログラムを作っています。
コマンドを配列に格納し、バイナリデータとしてRS232Cケーブルを経由し送信するというものです。

色々と見ていたら
SerialPort.Write メソッド (Byte[], Int32, Int32)
を用いるのが適切ということですので、こちらを使用しているのですが、なかなか上手くいきません。

コードは全て載せるのは不適切かと思いますので、バイナリデータを送信する箇所のみ載せます。
また、載せるか迷いましたが、周波数データの設定のプログラムは、無線機にデータを送る際、 12345678 → 78563412 という形式にする必要があるため、そのような処理を行っています。


書き込み自体が初めてなので、不備などがあるかと思いますが、どうぞよろしくお願いいたします。


'*************以下コード**************


    '無線機の周波数設定コマンドを送信するプロシージャ
    Sub SendComPort_Ic910(ByRef Frequency As Double)
        '変数宣言
        Dim CH(99) As String '10進数を16進数に変換する配列
        Dim m, n As Byte 'カウンタ
        Dim k As Short 'カウンタ
        Dim frequency2 As Object '周波数を入れる変数
        Dim DA As Object 'データを入れる変数
        Dim bytOut() As Byte

        '無線機に送信するデータを入れる配列

        '10進数を16進数に変換する配列CH()を設定する.
        For m = &H0S To &H9S
            For n = &H0S To &H9S
                CH(&HAS * m + n) = Chr(&H10S * m + n)
            Next n
        Next m

        frequency2 = VB.Right("00000" & Mid(Str(CInt(Frequency * 1000000.0#)), 2), 10)

'周波数データの設定
        For k = 1 To 10 Step 2
            DA = CH(Val(Mid(frequency2, k, 2))) + DA
        Next k

        bytOut = System.Text.UnicodeEncoding.Unicode.GetBytes(Chr(&HFE) & Chr(&HFE) & Chr(&H60) & Chr(&HE0) & Chr(&H5) + DA + Chr(&HFD)) '送信コマンド [ FEFEE005(周波数データ)FD ]

        SerialPort1.Write(bytOut, 0, bytOut.Length)

'************End**************

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。