人妻暴雨中被强制侵犯在线,亚洲国产欧美日韩精品一区二区三区,四虎影免看黄,国产无人区二卡三卡四卡不见星空

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 8543|回復(fù): 6

求助:VB6.0 MSComm控件串口通信發(fā)送循環(huán)

[復(fù)制鏈接]
1#
發(fā)表于 2011-3-31 21:03:06 | 只看該作者 |倒序瀏覽 |閱讀模式
項目需要用MSComm控件實現(xiàn)射頻設(shè)備與PC的串口通信。先說一下設(shè)備發(fā)送命令后會返回的相應(yīng)的數(shù)據(jù):- u4 C: h. r) k1 {, r( b3 d

2 l* U4 [' d" N5 O當(dāng)發(fā)送命令"H!i"時,為尋找芯片。% A+ b$ ?/ q: y. [4 n( T
當(dāng)設(shè)備連接正確又無芯片在感應(yīng)區(qū)時,設(shè)備循環(huán)返回:0630 和 15374 b8 ]$ w1 ~; c$ W4 J
當(dāng)設(shè)備當(dāng)設(shè)備連接正確而芯片又在感應(yīng)區(qū)時,設(shè)備返回0630,稍有停頓,繼續(xù)返回4831+其他信息
4 X! R$ f( t2 z( v
1 t/ t$ F8 r: [0 {: {: i當(dāng)芯片在感應(yīng)區(qū)時,發(fā)送命令“R00000016U”,讀取芯片前十六字節(jié)數(shù)據(jù)0 @, B; F8 Y; y6 \3 }
沒有錯誤時,設(shè)備返回:0630- n- _# f+ L+ E/ ~
此時,發(fā)送命令“STX”,或十六進(jìn)制命令“02”
# @& M8 D- z  ^7 v+ A3 P設(shè)備返回前十六字節(jié)數(shù)據(jù)
- ~7 h2 r! J2 ?7 w
  v8 K/ I1 U* p之后繼續(xù)發(fā)送命令“H!i”,尋找下一個芯片5 y- m  u0 ?7 Q3 _1 o8 R
--------------------------------------------------------------------
4 o# R9 F- {$ b. u2 A! @) N- }項目用MSComm進(jìn)行串口通信
7 y5 ]  K5 H4 X0 t% S/ I5 E- @需要將上述幾條命令循環(huán)起來。我用的是比較MSComm1.Input是否為爭取的返回值“4831”和“0630”。* h0 v8 i; d8 g  b" B
用了三個timer來控制三條命令“H!i”、“R00000016U”和“STX”的發(fā)送。把發(fā)送命令都放在了timer_timer下。
7 j' T7 l- C& k8 a. \% v但是這樣的話,就用到了三個Private Sub MSComm1_oncomm()。系統(tǒng)報錯,“發(fā)現(xiàn)二義性名稱”。意思應(yīng)該是不能重復(fù)定義Private Sub MSComm1_oncomm()吧?
1 Y9 a5 l$ ?# i  N1 A6 [- N# @----------------------------------------------------------------------------6 g. w; m* G% {6 q$ ~: E- M
其實程序說簡單些就是:4 I1 K( v8 h% N0 K, ^1 @0 Q
發(fā)送命令—>從數(shù)據(jù)返回區(qū)判定->發(fā)送命令->數(shù)據(jù)返回區(qū)判定->再發(fā)送命令->接收數(shù)據(jù)" J1 p+ r: M$ T& H: f
這個循環(huán)要怎么實現(xiàn)呢?2 R4 v  p/ n% C- H
先謝謝各位!- U" r8 B/ H  @. V' o: f
' a* }+ @$ G0 }7 T
--------------------------------------------------------------------
. s) \  G, _/ t( z2 v+ E) n8 n下面是循環(huán)部分的代碼。系統(tǒng)報錯
6 l3 n! r6 }" M6 F; JPrivate Sub cmdStart_click()+ x% c3 @+ f- h3 @$ M
    Timer1.Enabled = True! y( b& `  ^& L+ x/ b
   
  A. a% b# M: p) h1 p   
9 Q$ R, a( E( V' [% N6 ?' G   
4 w% G( H6 O/ ~End Sub
, U& R0 J, O3 W) G+ s# l# M& Y4 TPrivate Sub timer1_timer()( N  O/ M0 G* u7 c$ e, U
   " {" P. ^9 p+ \; x$ M% m9 u( B
   MSComm1.OutBufferCount = 0 '先清空緩存
: X+ V# K) V# H. h$ v: Q% I   sendbuffer = "H!i"
! ?& w' ?" `; O6 n& z" I0 b   MSComm1.Output = sendbuffer& k, U) r+ x  ~9 V7 @+ P% z
End Sub
+ l$ b6 l5 ^  U6 x" U'結(jié)束6 f5 J/ S& t& I. G7 a* e, Y! j
Private Sub cmdStop_click()5 o# V( ]: M7 K, d5 f' l, J; K# Q
    Timer1.Enabled = False! Y+ G7 u6 I6 Z* x) ~
    Timer2.Enabled = False. P+ L3 x7 S" l" ?$ Q1 z
    Timer3.Enabled = False4 M4 ?2 B* d' k$ y3 S  l
End Sub8 K  l2 a* @) b# q! Q+ b- q
* ~! u% }7 i0 O! E2 K- d
'接收數(shù)據(jù)5 a( R/ G- g! i
Private Sub MSComm1_oncomm()8 @' B5 ]" q+ U9 G3 [
    Dim inbyte() As Byte
- J' T9 W+ Y4 T& G! i    Dim revbuffer As String/ m$ `. V1 W7 |5 ]1 j: v
    Dim a, i, b
0 }: n1 n/ J; f    Select Case MSComm1.CommEvent. g6 p4 z( Q, a! m8 q
       '如果有CT在感應(yīng)區(qū): h$ r- o/ \& x# c
        
: R2 V# z# f( G4 c' V- C4 @- O/ |, H        Case comEvReceive
* \% w3 l* b% S            inbyte = MSComm1.Input
2 Y1 G1 o2 Z0 o) c            For i = LBound(inbyte) To UBound(inbyte)            '返回數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制7 {; J( y2 o/ `6 Z9 J% i
                revbuffer = revbuffer + Hex(inbyte(i))
, p  W% ]& O+ f2 ]' q            Next i
# F7 {2 M- T/ t5 D4 d4 w            txtHex.Text = revbuffer
$ M! `4 ~- E! Z& D$ q5 c- S# Q            If Mid(revbuffer, 1, 6) = "480310" Then" @& _. y- N" F
                Timer1.Enabled = False
6 y) C4 V' c" s1 G/ j                Timer1.Enabled = True
% Y: @0 s9 s% T6 v, q            End If8 u  R. p8 c- r/ z
        End Select3 \- p# d" B  t& _+ i9 C
        Case comEvSend
6 `) d( h/ z) I, r2 B3 _: ?    End Select
. J8 A2 u8 e" c0 z9 sPrivate Sub timer2_timer()
/ J2 ~# I5 }- t        MSComm1.OutBufferCount = 0 '先清空緩存! [* p' ]6 G4 }( h( c
        sendbuffer = "R00000016U"# f$ g0 X' ~* e+ R+ m& b: t' R
        MSComm1.Output = sendbuffer' C" b% C0 r% L( q. \- r, I# C4 |
End Sub' Y9 W' Y! |- u
Private Sub MSComm1_oncomm()
2 o, a7 s  W- J2 V) ]$ c    Select Case MSComm1.CommEvent- R& y& x+ |9 d/ E; h3 i& q+ k
        Case comEvReceive
) \) T; ?0 Z  T9 A  c6 b0 {: U        inbyte = MSComm1.Input. d, U$ t) ~/ Q6 {) \# K: W) L
        For i = LBound(inbyte) To UBound(inbyte)            '返回數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制8 P4 r2 U$ k, |; `9 A  ]
            revbuffer = revbuffer + Hex(inbyte(i))
) p" c" o& P8 T4 i1 Q        Next i2 d4 x3 X! A2 t9 y4 F
        txtHex.Text = revbuffer
% r8 U  t2 Q/ n4 g        If Mid(revbuffer, 1, 4) = "6030" Then
1 s5 L( p( [5 B* w" _1 b            Timer2.Enabled = False
2 z. g, ^$ v' G( f" f/ Y9 W- `( s            Timer3.Enabled = True" J: l9 ]: P% w$ X
        End If' m# L( B5 \8 N) W; i
        Case comEvSend' }( E$ P7 v8 G4 [  }
    End Select' u0 M$ H- Z& y& G6 |- m: Z
End Sub
- |" a4 @% K5 O) C3 t4 u) hPrivate Sub timer3_timer()
  v8 e8 H! Y- G4 S    MSComm1.OutBufferCount = 0 '先清空緩存
3 s$ h/ b, ?; g+ v5 H# O) Z3 q    sendbuffer = "STX"
2 L: M" x% n; E! j$ Y: X- o    MSComm1.Output = sendbuffer5 ?; }) ]# u+ S' \! c' @7 {) N5 h
    Select Case MSComm1.CommEvent/ L+ w, C7 A4 {$ I, e' O
        Case comEvReceive
4 d! F- T/ p* b% [9 ~3 R3 ]; p+ t            inbyte = MSComm1.Input( r- w9 K3 |: l! w
            For i = LBound(inbyte) To UBound(inbyte)            '返回數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制
: i2 o9 a" C+ b+ W, x) X6 `                revbuffer = revbuffer + Hex(inbyte(i))
0 h2 e& L$ M* l4 [' q            Next i9 |; O4 A2 p9 c
            txtHex.Text = revbuffer  Z& y# R% N8 c
            Case comEvSend; _' N  \, _3 D9 B) [4 `
    End Select( M: `  P4 u' d! b* V
End Sub0 @& f. `% @8 E

0 r- t# J5 M+ y) m. G
" c  ^8 v5 K1 A: \! e
* {5 Q& z) P* [% Q' }
2#
發(fā)表于 2011-4-1 09:22:34 | 只看該作者
這個問題感覺不難,但你描述的有些亂,讓人看不明白。) [9 n: R  L* z8 ~  ]1 o$ ~
我也用Vb編過一些東西,歡迎交流。

點評

只是,直接拿源碼來問,比較浪費人時間。最好是拿流程來問,流程沒問題才考慮語法的問題。  發(fā)表于 2011-4-6 19:41
呵呵,是這樣的,在那壇子里有個ID和大俠的郵箱居然一樣,故有此猜測。那壇子現(xiàn)在注冊要邀請碼,而且居然有人賣ID,可見比較搶手,俺還是頭次見非“黃”網(wǎng)站這樣搞的。 編程,俺多年不上手了。  發(fā)表于 2011-4-6 19:40
g了一下“博學(xué)天下”,還真有這個論壇,看來不是大俠取笑在下了。鄙人以前為了畫圖偷懶,就學(xué)了下編程,后來貿(mào)貿(mào)然想轉(zhuǎn)行程序員,沒成功,但興趣一直不減,見笑了。  發(fā)表于 2011-4-6 16:58
難道大俠在博學(xué)天下有號? 方便幫俺下個標(biāo)準(zhǔn)不?先謝了  發(fā)表于 2011-4-6 16:54
前輩好像是韓劇里面的稱呼啊,鄙人愧不敢當(dāng)……  發(fā)表于 2011-4-1 09:36
謝謝前輩!  發(fā)表于 2011-4-1 09:27

評分

參與人數(shù) 2威望 +2 收起 理由
happqiwei + 1
robi + 1

查看全部評分

3#
發(fā)表于 2011-4-6 16:50:39 | 只看該作者
不知解決的如何了?三個Timer確實很混亂。

點評

大俠博學(xué)啊,哈哈  發(fā)表于 2011-4-6 18:37
4#
 樓主| 發(fā)表于 2011-4-6 22:47:31 | 只看該作者
回復(fù) 無能 的帖子
1 d& h3 H9 F) T: o, v/ z5 M
$ U& U9 w' M' N. A8 l快了。4 b/ S0 K' S$ u* Z- C0 U- M- e
設(shè)備通信協(xié)議我沒看清,這個設(shè)備的通信不用timer。: x4 \% i0 E  [5 @# A# n
5#
發(fā)表于 2011-5-4 22:34:47 | 只看該作者
學(xué)習(xí)、、、、、、、、、、、、、、、、、、、、
6#
 樓主| 發(fā)表于 2011-8-15 20:09:08 | 只看該作者
后來發(fā)現(xiàn)其實這個通信程序的關(guān)鍵在于要弄清收發(fā)信息的格式,也就是MSComm初始設(shè)置時,是二進(jìn)制還是文本。這個很重要,否則通信會出錯。
7#
發(fā)表于 2012-11-15 11:31:42 | 只看該作者
讓我想起了,我畢業(yè)論文就搞的這個。
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

Archiver|手機版|小黑屋|機械社區(qū) ( 京ICP備10217105號-1,京ICP證050210號,浙公網(wǎng)安備33038202004372號 )

GMT+8, 2025-7-20 20:20 , Processed in 0.073116 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回復(fù) 返回頂部 返回列表