リグコントロールの一つ、CI-V(IC-7400)での周波数読込みプログラム(VB6)を紹介します。
プログラムソースも記載していますので興味ある方は、参考にして下さい。
リグからのデータ受信方法はポーリング方式とイベントドリブン方式があるようですが
私は、イベントドリブン方式を使いました。
イベントドリブン方式
MSComm1.RThreshold = 1(受信文字数の値) '例 1文字受信したらイベントを発生させる。
Private Sub MSComm1_OnComm()
Dim Buffer
If MSComm1.CommEvent = comEvReceive Then
Buffer = MSComm1.Input ' 受信バッファ内のデータをすべて取り出す
End If
End Sub
当HPで紹介しているCWYY(Ver1.29)の周波数読込み部分は、下の1.で紹介しているプログラムですが
CWYYの改善の中で下に記載の2.の読込み方を見つけました。
この方法だとCWYY(Ver1.29)でデータ受信処理がうまくいかないUSB-シリアル変換デバイスでも動作可の光が見えてきました。
IC-7400取説のトランシーバーからPCへのデーターフォーマット
@ ABCDE F
FEFEE066XXXXXXXXXXXXFD
@ プリアンブル (2byte)
A 受信アドレス(1byte)
B 送信アドレス(1byte)
C コマンド (1byte)
D サブコマンド (1byte)
E データエリア (4byte)
F ポストアンブル(1byte)
1.このプログラムは、MSComm1.RThreshold = 1で、1文字づつ受信して、文字数が1ならHEX関数処理した後
捉えた文字の前に"0"を連結して22文字受信します。
次に22文字を2文字づつ11個の変数に入れる。フォーマットではデータエリアは4byteだが実際は5byteになっている。
この方法は、動きが速くていいのですが、データ受信処理がうまくいかないUSB-シリアル変換デバイスがあります。
ソース
2.このプログラムは、MSComm1.RThreshold = 11で、11文字一度に受信して、受信した文字をHEX関数処理した後
文字数が1なら文字の前に"0"を連結して変数に代入します。この方法でもフォーマットではデータエリアは4byteだが
実際は5byteになっている。
この方法は、動きは鈍いですが、1.でデータ受信処理がうまくいかないUSB-シリアル変換デバイスの解決が見えてきました。
ソース
試行錯誤の中で、ポイントとなる点がありました。
1.MSComm1.InputMode = comInputModeBinaryにする。
2.MSComm1.RThreshold = 1この値を変えて見る
3.MSComm1.Output = bufの値を変えて見る(DIM buf(10) as byte)
2.と3.の設定を色々変えることにより最適値がつかめる。
現在、CWYY Ver1.29で動作しなかったUSB-シリアル変換デバイスでも動作出来るよう悪戦苦闘しています。