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

タイトル Re^3: VB2005でバイナリデータをシリアル通信
投稿日: 2009/12/17(Thu) 10:19
投稿者魔界の仮面弁士
> VB6のコードなのですが、これをVB2005に修正したいと考えています。
元のコードからして、実装が怪しい気がします。

たとえば、Frequency → fre の変換処理の部分では、現在の実装では
    0.000012 → "0000000012"
 1234.987654 → "1234987654"
 9876.987654 → エラー("9876987654" にならない)
となってしまいます。
まぁ、そういう値が来る事は無いのかも知れませんが。


> 色々と見てきましたが、ChrB$の箇所がどうも上手く書き換えられない状況です。
> 他も間違っている箇所があるかもしれませんので、合わせてご教示願いたいです。
ごっそり書き替えてみました。

Dim fre As String = Math.Abs(Frequency * 1000000).ToString("0000000000")

'送信コマンド [ FEFE60E005(周波数データ)FD ]
Dim header() As Byte = {&HFE, &HFE, &H60, &HE0, &H5}
Dim footer() As Byte = {&HFD}

Dim data As New List(Of Byte)()
For i As Integer = 1 To fre.Length Step 2
    data.Insert(0, Convert.ToByte(Mid(fre, i, 2), 16))
Next

data.InsertRange(0, header)
data.AddRange(footer)

'Debug.WriteLine(BitConverter.ToString(data.ToArray()))
SerialPort1.Write(data.ToArray(), 0, data.Count)


なお、変数 header/footer の内容が違うようなら、適宜書き換えてください。

何が正しいのか良く分からないのですが、 No9720 を見ると、
> '送信コマンド [ FEFEE005(周波数データ)FD ]
というコメントと
> Chr(&HFE) & Chr(&HFE) & Chr(&H60) & Chr(&HE0) & Chr(&H5) + DA + Chr(&HFD)
というコードがありましたよね。ここで &H60 が登場しているのは何故でしょうか?

一方、 No9731 については、
> ChrB$(&HFE) + ChrB$(&HFE) + ChrB$(&H60) + ChrB$(&HE0) + ChrB$(&H0) + DA + ChrB$(&HFD)
です。

No9720 の VB.NET 版のコメントを見る限りでは、
  FE,FE,E0,05,(周波数データ),FD
というデータ列を期待しているようですが、実際の VB.NET コードでは、
  FE,FE,60,E0,05,(周波数データ),FD
というデータを作ろうとしているかのように見えますし、No9731 の VB6 版では、
  FE,FE,60,E0,00,(周波数データ),FD
というデータを送出しており、それぞれで、データが食い違っているようです。

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

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