タイトル | : Re^3: VB2005でバイナリデータをシリアル通信 |
記事No | : 9735 |
投稿日 | : 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 というデータを送出しており、それぞれで、データが食い違っているようです。
|