タイトル : 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************** |