tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル続きです
記事No12036
投稿日: 2008/04/17(Thu) 10:46
投稿者VV
びくともしませんでした。。。
Private Sub Form_Click()




MSComm1.InputMode = comInputModeBinary

MSComm1.CommPort = 1
MSComm1.Settings = "1200,N,8,1"
MSComm1.PortOpen = True

MSComm1.Output = Chr(&HFE) & Chr(&HFE)
MSComm1.Output = Chr(&H60)
MSComm1.Output = Chr(&HE0)
MSComm1.Output = Chr(&H5)
MSComm1.Output = "146.000.0"
MSComm1.Output = Chr(&HFD)




MSComm1.PortOpen = False

End Sub

データエリアとされているところの書き方がいまいちわかりません。。。
他にもおかしいのでしょうか?
長くなってすみませんが、おねがいします。

[ツリー表示へ]
タイトルRe: 続きです
記事No12037
投稿日: 2008/04/17(Thu) 12:30
投稿者nobu
IC-910 のマニュアルは見ていますか?
ICOMのHPよりダウンロードしたic-910_d.pdfの81P

> MSComm1.Output = Chr(&HFE) & Chr(&HFE)
> MSComm1.Output = Chr(&H60)
> MSComm1.Output = Chr(&HE0)
> MSComm1.Output = Chr(&H5)
> MSComm1.Output = "146.000.0"
> MSComm1.Output = Chr(&HFD)
> MSComm1.PortOpen = False


> データエリアとされているところの書き方がいまいちわかりません。。。

> MSComm1.Output = "146.000.0"

では無くて16進数で書かなくてはダメでしょうね。

ct-17.pdf の5Pの510行から570行に
N88 Basicのコードがあります。
周波数はMHz単位をHzに直して10桁にしてから2桁毎にChr()で
送り込むようです。

リグのModeのセットの方が簡単のようですのでまずは
Modeのセットをして見て下さい。
USB、LSB,CW、FMとかに変更出来ますか?

[ツリー表示へ]
タイトルRe^2: 続きです
記事No12038
投稿日: 2008/04/17(Thu) 13:15
投稿者VV
nobuさん!
ありがとうございます!そのようですね。
モード変換をしてみることにしたんですが、
これまた動きません。
なにか根本的に違うことがあるんでしょうか??
Private Sub Form_Click()


MSComm1.InputMode = comInputModeBinary

MSComm1.CommPort = 1
MSComm1.Settings = "1200,N,8,1"
MSComm1.PortOpen = True

MSComm1.Output = Chr(&HFE) & Chr(&HFE)
MSComm1.Output = Chr(&H60)
MSComm1.Output = Chr(&HE0)

MSComm1.Output = Chr(&H6)
MSComm1.Output = Chr(&H4)

MSComm1.Output = Chr(&HFD)




MSComm1.PortOpen = False

End Sub

[ツリー表示へ]
タイトルRe: 続きです (通信について)
記事No12039
投稿日: 2008/04/17(Thu) 13:43
投稿者K.J.K.
> MSComm1.Output = Chr(&HE0)

Debug.Print Hex$(Asc(Chr(&HE0)))
を試してみてください。

Dim abBuffer() As Byte
ReDim abBuffer(0& To 0&) As Byte
abBuffer(0&) = &HE0
MSComm1.Output = abBuffer

[ツリー表示へ]
タイトルRe^2: 続きです (通信について)
記事No12041
投稿日: 2008/04/18(Fri) 10:36
投稿者VV
K.J.K.さん、nobuさんありがとうございます!
さっそく試してみます!
おそくなってすみませんでした。。。

nobuさんかぜお大事にしてください。
よくなったらまた見てください!!

[ツリー表示へ]
タイトルRe^3: 続きです (通信について)
記事No12047
投稿日: 2008/04/19(Sat) 02:35
投稿者Starfish
> K.J.K.さん、nobuさんありがとうございます!
> さっそく試してみます!
> おそくなってすみませんでした。。。
>
> nobuさんかぜお大事にしてください。
> よくなったらまた見てください!!

 K.J.K.さんが指摘されているように、バイナリデータを扱うには
Byte型の変数を使う必要があります。

 VVさんのように文字列で処理をすると、Chr関数でAnsiからUnicodeに
変換されます。また、コミュニケーションコントロールで出力するときに、
UnicodeからAnsiに変換されます。テキストデータであれば、この2回の変換で
元のデータに戻りますが、バイナリデータは元のデータに戻らないので
正しいデータが出力されません。

 参考までに、マニュアルを参考に直してみました。

' 周波数変更
Private Sub Command1_Click()
Dim bytData()       As Byte

    MSComm1.InputMode = comInputModeBinary
    
    MSComm1.CommPort = 1
    MSComm1.Settings = "1200,N,8,1"
    MSComm1.PortOpen = True
    
    ReDim bytData(10) As Byte
    
    bytData(0) = &HFE
    bytData(1) = &HFE
    bytData(2) = &H60
    bytData(3) = &HE0
    bytData(4) = &H5
    bytData(5) = &H1
    bytData(6) = &H46
    bytData(7) = &H0
    bytData(8) = &H0
    bytData(9) = &H0
    bytData(10) = &HFD
    
    MSComm1.Output = bytData
    
    MSComm1.PortOpen = False
    
End Sub

' FMモード
Private Sub Command1_Click()
Dim bytData()       As Byte

    MSComm1.InputMode = comInputModeBinary
    
    MSComm1.CommPort = 1
    MSComm1.Settings = "1200,N,8,1"
    MSComm1.PortOpen = True
    
    ReDim bytData(6) As Byte
    
    bytData(0) = &HFE
    bytData(1) = &HFE
    bytData(2) = &H60
    bytData(3) = &HE0
    bytData(4) = &H6
    bytData(5) = &H4
    bytData(6) = &HFD
    
    MSComm1.Output = bytData
    
    MSComm1.PortOpen = False
    
End Sub

[ツリー表示へ]
タイトルRe^4: 続きです (通信について)
記事No12050
投稿日: 2008/04/19(Sat) 21:24
投稿者VV
Starfishさん!!
ご丁寧に本当にどうもありがとうございます!
今試せない状態なのですが、明日実行してみます!!

基本的なことかもしれませんが。。。
送信が完了した後は、受信したものを
テキストファイルに書き込めるようにしようとしています。

いろんなところに書いてあるサンプルを参照に色々ためしては
みたものの、なかなかうまくいきません。
変なところあったら指摘してください!
おねがいします。。。

’表示周波数の読み込み

Private Sub Command1_Click()
Dim bytData()       As Byte

    MSComm1.InputMode = comInputModeBinary
    
    MSComm1.CommPort = 1
    MSComm1.Settings = "1200,N,8,1"
    MSComm1.PortOpen = True
    
    ReDim bytData(10) As Byte
    
    bytData(0) = &HFE
    bytData(1) = &HFE
    bytData(2) = &H60
    bytData(3) = &HE0
    bytData(4) = &H3
    bytData(5) = &HFD
  
    MSComm1.Output = bytData
  ’下記の部分はわけわからず使っているんですが、やはりうまくいきません↓↓
  MSComm1.InputLen = 0
  TxtDisplay.Text = MSComm1.Input
    
    MSComm1.PortOpen = False
    
End Sub

シリアル通信のソフトで、周波数表示のコマンドを送ると、
データのところに、00 98 89 44 01 と表示されて返ってきます。
ちなみに、これは144.899MHzをさしています。
16進数で来ているだけだと思い、計算するとまったく違いました。
なにかこちらもご存知の方いらっしゃいましたら、よろしくお願いします。。。



よろしくお願いします。

[ツリー表示へ]
タイトルRe^5: 続きです (通信について)
記事No12051
投稿日: 2008/04/20(Sun) 00:33
投稿者GOD
> シリアル通信のソフトで、周波数表示のコマンドを送ると、
> データのところに、00 98 89 44 01 と表示されて返ってきます。
> ちなみに、これは144.899MHzをさしています。
> 16進数で来ているだけだと思い、計算するとまったく違いました。
> なにかこちらもご存知の方いらっしゃいましたら、よろしくお願いします。。。
>
無線機との通信はやったことないけど、見た目通りに来ているのではないですか。
「00 98 89 44 01」を右から読むと「01 44 89 98 00」となり144.899MHzを表しているということではないでしょうか。

[ツリー表示へ]
タイトルRe^6: 続きです (通信について)
記事No12054
投稿日: 2008/04/20(Sun) 09:48
投稿者VV
GODさん!
ホントですね!!
16進数だとばっかり思ってたので全く気付きませんでした↓
ありがとうございます!

[ツリー表示へ]
タイトルRe^5: 続きです (通信について)
記事No12052
投稿日: 2008/04/20(Sun) 01:36
投稿者Starfish

> シリアル通信のソフトで、周波数表示のコマンドを送ると、
> データのところに、00 98 89 44 01 と表示されて返ってきます。
> ちなみに、これは144.899MHzをさしています。
> 16進数で来ているだけだと思い、計算するとまったく違いました。
> なにかこちらもご存知の方いらっしゃいましたら、よろしくお願いします。。。

 逆にセットするんですね。この前の、ソースも逆になっています。
    bytData(5) = &H0
    bytData(6) = &H0
    bytData(7) = &H0
    bytData(8) = &H46
    bytData(9) = &H1

 受信データのある場合です。
Private Sub Command1_Click()
Dim bytSendData()       As Byte
Dim bytInputData()      As Byte
Dim bytRecvData()       As Byte

    MSComm1.InputMode = comInputModeBinary
    
    MSComm1.CommPort = 1
    MSComm1.Settings = "1200,N,8,1"
    MSComm1.PortOpen = True
    
    ' 送信処理
    ReDim bytSendData(5) As Byte   ' 送信するデータの長さに合わせてください。
    
    bytSendData(0) = &HFE
    bytSendData(1) = &HFE
    bytSendData(2) = &H60
    bytSendData(3) = &HE0
    bytSendData(4) = &H3
    bytSendData(5) = &HFD
    MSComm1.Output = bytSendData
  
    ' 受信処理
    bytRecvData = ""
    Do
        DoEvents
        bytInputData = MSComm1.Input
        bytRecvData = CStr(bytRecvData) & CStr(bytInputData)
    Loop Until InStrB(bytRecvData, ChrB(&HFD))

    txtDisplay.Text = Byte2Hex(bytRecvData(9)) & _
                      Byte2Hex(bytRecvData(8)) & _
                      Byte2Hex(bytRecvData(7)) & _
                      Byte2Hex(bytRecvData(6)) & _
                      Byte2Hex(bytRecvData(5))
                      
    MSComm1.PortOpen = False
    
End Sub

Function Byte2Hex(bytInputData As Byte) As String

    Byte2Hex = Right("00" & Hex(bytInputData), 2)
    
End Function

 コンパイルエラーは無くしていますが、実機がないので
これでちゃんと動くかどうかはわかりません。

 なお、通常通信を行うプログラムでは、エラー処理が必要です。
上のサンプルには、エラー処理が含めれませんので自分で追加してください。

[ツリー表示へ]
タイトルRe^6: 続きです (通信について)
記事No12053
投稿日: 2008/04/20(Sun) 08:02
投稿者Starfish
 すみません、1か所修正します。

>     Loop Until InStrB(bytRecvData, ChrB(&HFD))

    Loop Until InStrB(bytRecvData, ChrB(&HFD)) > 1

[ツリー表示へ]
タイトルRe^7: 続きです (通信について)
記事No12055
投稿日: 2008/04/20(Sun) 09:59
投稿者VV
Starfishさん
本当にありがとうございました!!
感謝しっぱなしです。
逆から書いてあることに全く気付きませんでした!

あとは受信のほうなのですが、
いただいたコードを一生懸命解読はしたんですが、
わからないところが多々あって。
質問させてください(>_<)

色々ためして、やっと受信できるようになったんです!
でも、なぜか8個しか受信できなくて。。。
数字を増やしてみたり、並び変えたりしたんですが。
(7)まで、受信可能で、(8)にすると受信ができなくなるんです。。。

エラーは、インデックスが有効範囲内ではありませんとでます。
8個以上出そうと思うとこのエラーになります。
なんなんでしょうか。。。。


知らないことばっかで、応用力なくてすみません。。。
よろしくお願いします。

[ツリー表示へ]
タイトルRe^8: 続きです (通信について)
記事No12056
投稿日: 2008/04/20(Sun) 18:54
投稿者Starfish

> エラーは、インデックスが有効範囲内ではありませんとでます。
> 8個以上出そうと思うとこのエラーになります。
> なんなんでしょうか。。。。

 単に、受信したデータが8バイトしかないのでは?

[ツリー表示へ]
タイトルRe^9: 続きです (通信について)
記事No12057
投稿日: 2008/04/20(Sun) 19:42
投稿者VV
Starfishさんありがとうございます!

受信される予定のデータは、
FEFE60E004FD FEFEE0600401FD
なんです!で、2回目のFE のとこまでしか受信できないんですよ。。。
8バイトしかないっていうのは、プログラムの
中の定義かなんかで変えられるんですか??

[ツリー表示へ]
タイトルRe^10: 続きです (通信について)
記事No12063
投稿日: 2008/04/20(Sun) 22:51
投稿者Starfish
> Starfishさんありがとうございます!
>
> 受信される予定のデータは、
> FEFE60E004FD FEFEE0600401FD
> なんです!で、2回目のFE のとこまでしか受信できないんですよ。。。
> 8バイトしかないっていうのは、プログラムの
> 中の定義かなんかで変えられるんですか??

 以下の部分が受信の終了条件です。

>     Loop Until InStrB(bytRecvData, ChrB(&HFD)) > 1

 現在のところでは、送信したデータが返ってくるとは思わなかったので
&HFD のデータを取り込んだところで終了させています。

 この部分を変えれば、対応できます。たとえば、以下のようにすると、
13バイト以上受信したところで受信を終了します。

>     Loop Until LenB(bytRecvData) > 12

[ツリー表示へ]
タイトルRe^11: 続きです (通信について)
記事No12065
投稿日: 2008/04/20(Sun) 23:54
投稿者VV
2個おくっちゃいました。
すみません

[ツリー表示へ]
タイトルRe^11: 続きです (通信について)
記事No12066
投稿日: 2008/04/20(Sun) 23:54
投稿者VV
> > Starfishさんありがとうございます!
何度も何度もすみませんでした!!
無事できました!
本当に本当に本当にありがとうございます。

また何かあったらお願いします!!

[ツリー表示へ]
タイトルRe^3: 続きです
記事No12040
投稿日: 2008/04/17(Thu) 16:00
投稿者nobu
COMの設定はリグとソフトであっていますか?
COM番号、ボーレート、StopBit など。
リグのセットモードでの「トランシーブON/OFF」を変えるとどうですか?

細切れに送らないで下記ではどうなりますか?

MSComm1.Output = Chr(&HFE) & Chr(&HFE) &  Chr(&H60) &  Chr(&HE0) &  Chr(&H6) & chr(&H4) & Chr(&HFD)

風邪をひいてしまったので返信が暫く書けないかも知れません。

[ツリー表示へ]