久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

 找回密碼
 注冊(cè)會(huì)員

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
1#
發(fā)表于 2011-3-31 21:03:06 | 只看該作者 |倒序?yàn)g覽 |閱讀模式
項(xiàng)目需要用MSComm控件實(shí)現(xiàn)射頻設(shè)備與PC的串口通信。先說一下設(shè)備發(fā)送命令后會(huì)返回的相應(yīng)的數(shù)據(jù):
8 c7 z( H0 E* w& X& M8 s
: J+ I' ?! S( [當(dāng)發(fā)送命令"H!i"時(shí),為尋找芯片。
1 v: _# j4 t2 }+ f5 }3 y當(dāng)設(shè)備連接正確又無芯片在感應(yīng)區(qū)時(shí),設(shè)備循環(huán)返回:0630 和 15372 |- r& ?$ u! }" q3 w$ c3 |
當(dāng)設(shè)備當(dāng)設(shè)備連接正確而芯片又在感應(yīng)區(qū)時(shí),設(shè)備返回0630,稍有停頓,繼續(xù)返回4831+其他信息
: m) A3 G# w# Q) t
: A5 [- X- Q# ~  |; F當(dāng)芯片在感應(yīng)區(qū)時(shí),發(fā)送命令“R00000016U”,讀取芯片前十六字節(jié)數(shù)據(jù)
6 v5 f( S0 B6 X沒有錯(cuò)誤時(shí),設(shè)備返回:06307 y& k" Q' s/ i/ g' L
此時(shí),發(fā)送命令“STX”,或十六進(jìn)制命令“02”+ n$ E+ t6 x5 o4 G
設(shè)備返回前十六字節(jié)數(shù)據(jù); e& C, {8 M3 o2 z, L
" f( P% c+ ]: H' `4 y# t2 n2 p
之后繼續(xù)發(fā)送命令“H!i”,尋找下一個(gè)芯片
6 s0 [4 E6 _* {$ O! ~1 H--------------------------------------------------------------------
2 x$ v3 }9 ]4 m0 Z' g' V項(xiàng)目用MSComm進(jìn)行串口通信" U# O- L1 B& [. t# I% d- `
需要將上述幾條命令循環(huán)起來。我用的是比較MSComm1.Input是否為爭(zhēng)取的返回值“4831”和“0630”。
% z7 z1 Y3 P) y2 a4 ~) z用了三個(gè)timer來控制三條命令“H!i”、“R00000016U”和“STX”的發(fā)送。把發(fā)送命令都放在了timer_timer下。
1 l% N7 T6 u8 }* x但是這樣的話,就用到了三個(gè)Private Sub MSComm1_oncomm()。系統(tǒng)報(bào)錯(cuò),“發(fā)現(xiàn)二義性名稱”。意思應(yīng)該是不能重復(fù)定義Private Sub MSComm1_oncomm()吧?
4 `) b) \1 X- F2 M" g( k% K$ H# B( g----------------------------------------------------------------------------
( {9 C" u/ V( D9 l( y- D& U其實(shí)程序說簡(jiǎn)單些就是:
0 n% q5 L( n) e) ^) a/ ?9 R( N4 R: S發(fā)送命令—>從數(shù)據(jù)返回區(qū)判定->發(fā)送命令->數(shù)據(jù)返回區(qū)判定->再發(fā)送命令->接收數(shù)據(jù)# U5 k( M) o' ]6 U) F
這個(gè)循環(huán)要怎么實(shí)現(xiàn)呢?- Y5 @5 B9 h7 V! B  _
先謝謝各位!$ K# G! V- _. [  c7 J
. C0 c/ z2 S9 A& z5 m
--------------------------------------------------------------------
" Q0 Y6 I' H, U( }  V下面是循環(huán)部分的代碼。系統(tǒng)報(bào)錯(cuò)
6 {* B0 `* B& @" ]9 e5 oPrivate Sub cmdStart_click()
4 ?) O$ `# |. a2 T3 |$ \& y) F) w    Timer1.Enabled = True
8 B% k( y4 t- G6 Y- q& v   
! h& U3 `+ n' p   
/ p8 h, l9 P/ ]* o0 m! O$ b   
: }2 v; L& `! ^9 i- l* yEnd Sub2 {2 S. a8 ]) O5 r2 m: d
Private Sub timer1_timer()
* k; f, s9 O% ?$ u) R) u0 Q, u$ T   
3 L: ^% I2 E( V/ m5 h( T( J   MSComm1.OutBufferCount = 0 '先清空緩存( R" k0 e9 k+ U  g
   sendbuffer = "H!i"
. R7 P3 p' z' b& r   MSComm1.Output = sendbuffer& @5 X1 K$ K; G$ m( S
End Sub0 G  r, n2 j& |% e7 S5 q/ V' x! I
'結(jié)束
; F; G, y/ z/ K# N! LPrivate Sub cmdStop_click()
8 w" t- v, `1 t) R2 k    Timer1.Enabled = False1 P) _3 |3 }2 M& F, T0 P% p
    Timer2.Enabled = False- F* \$ O/ W% `. y
    Timer3.Enabled = False
" @0 ?- D$ d/ YEnd Sub
& `' N$ J8 r" z7 a& V( [0 o2 ]  w! x0 k  t+ C
'接收數(shù)據(jù)
. ?1 X7 {* r3 b, A  b: e4 sPrivate Sub MSComm1_oncomm()! U# d) j1 ~# y2 Y
    Dim inbyte() As Byte
! C  K6 p1 l5 e' \    Dim revbuffer As String
5 @' C" d) V" K$ l! l3 A    Dim a, i, b" b* Y7 j; a+ {) w4 K: ?1 ~2 {7 o5 W
    Select Case MSComm1.CommEvent. ?9 h8 Y+ R+ }4 ^' h/ ?
       '如果有CT在感應(yīng)區(qū)
" ?1 M, B) B# C        
$ ]3 J7 m/ i5 C5 }        Case comEvReceive, J0 _9 M4 A: Z" @0 O
            inbyte = MSComm1.Input
7 K. O/ x! R4 F" c' c4 C# L* }            For i = LBound(inbyte) To UBound(inbyte)            '返回?cái)?shù)據(jù)轉(zhuǎn)換為十六進(jìn)制4 I9 s" b3 r7 ?5 N0 q9 D
                revbuffer = revbuffer + Hex(inbyte(i))6 a# S' s3 [6 _! j7 m5 S9 N. u& o
            Next i
$ d$ {3 G; h( ]$ l6 |' v+ F            txtHex.Text = revbuffer7 S6 p# y; |! s
            If Mid(revbuffer, 1, 6) = "480310" Then* s1 ^3 \# v0 T
                Timer1.Enabled = False
( H6 n5 ~: c: H9 U! v                Timer1.Enabled = True
$ ~0 a- |- y* Z: ]$ o- a5 N            End If
) S8 F5 G- n+ q$ D! G- S        End Select- z" W1 S- i4 V, r4 ]
        Case comEvSend
1 y0 r0 O2 T, H5 k    End Select
5 W* s; w- H+ r* ]Private Sub timer2_timer()
( g! ?/ D: P5 M& k        MSComm1.OutBufferCount = 0 '先清空緩存
7 j3 F" s2 a( n" ^+ h" L1 |        sendbuffer = "R00000016U"
3 z$ o3 r/ \, [  c  `        MSComm1.Output = sendbuffer' w0 [; `6 h0 s
End Sub
" Z7 t$ D9 k  l- w% J- }  `, cPrivate Sub MSComm1_oncomm()5 q1 q/ b9 o" k- O- x9 O# D+ p
    Select Case MSComm1.CommEvent
0 N+ R. q/ M% S5 B, B' c$ }9 x# \        Case comEvReceive
2 B/ d! u" V  @: I% K, g        inbyte = MSComm1.Input
+ P% n" T$ ?7 o( |, F        For i = LBound(inbyte) To UBound(inbyte)            '返回?cái)?shù)據(jù)轉(zhuǎn)換為十六進(jìn)制
' a: M1 ?% V8 G8 [/ z) O$ r: i            revbuffer = revbuffer + Hex(inbyte(i))! p& d' x# W5 M
        Next i$ K" o8 W, Z( V" N% q7 M& o
        txtHex.Text = revbuffer
, t5 t" L/ T' D$ F" X* ]9 Z        If Mid(revbuffer, 1, 4) = "6030" Then; n' l, z7 T/ @0 H+ E/ I
            Timer2.Enabled = False
4 {8 ~* F6 ?& y+ z( W            Timer3.Enabled = True
3 J/ M: M, u, M" |" h+ u        End If
( m+ a+ }6 y; g$ K1 Y9 a        Case comEvSend& [) ?) T! l/ A9 O' @
    End Select, V. y( g; Q$ u; ~( z, Q/ ?9 F
End Sub
% _. {% b3 r% |' W- U6 R6 pPrivate Sub timer3_timer()
# y4 a# q* ^$ p+ f    MSComm1.OutBufferCount = 0 '先清空緩存
3 u4 _) E' @% g    sendbuffer = "STX"0 p  d" n/ d  \
    MSComm1.Output = sendbuffer
1 _$ ^  ?! ?( W: f- H6 A    Select Case MSComm1.CommEvent
6 J$ }( S/ Y3 N. |; }        Case comEvReceive
4 P8 o: ~& B+ Y- v* d& K- [- E8 T            inbyte = MSComm1.Input- @# N3 o0 d( j. b
            For i = LBound(inbyte) To UBound(inbyte)            '返回?cái)?shù)據(jù)轉(zhuǎn)換為十六進(jìn)制
1 S) w; `8 l5 n* c' a4 w4 S# F% H                revbuffer = revbuffer + Hex(inbyte(i))
, ~) L8 E3 W/ p( V, A            Next i
+ V0 c  C6 I' z+ @) Y            txtHex.Text = revbuffer+ ~6 m! [# f8 V7 z- j
            Case comEvSend' E! U* _% n( P  S
    End Select0 f* q+ b+ a" s, f
End Sub1 {( U3 k# k. X  T/ W8 R
* R  P' u+ T5 B% J0 b( C
) [+ A/ X2 R! K6 d  }9 Z
2 N# v7 F; f+ U7 G+ U) K1 Z7 H
回復(fù)

使用道具 舉報(bào)

2#
發(fā)表于 2011-4-1 09:22:34 | 只看該作者
這個(gè)問題感覺不難,但你描述的有些亂,讓人看不明白。' h: d$ ^2 d6 k8 x. ~& a( d1 a
我也用Vb編過一些東西,歡迎交流。

點(diǎn)評(píng)

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

評(píng)分

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

查看全部評(píng)分

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

點(diǎn)評(píng)

大俠博學(xué)啊,哈哈  發(fā)表于 2011-4-6 18:37
4#
 樓主| 發(fā)表于 2011-4-6 22:47:31 | 只看該作者
回復(fù) 無能 的帖子% D& l! l* z5 C( E3 ]0 R2 D3 j( N1 K: ]# o

! K8 V" c7 I6 {1 |5 u% C7 W& {快了。- h0 o( g" K2 h8 b  I
設(shè)備通信協(xié)議我沒看清,這個(gè)設(shè)備的通信不用timer。
9 r. i9 P; D# B3 n$ v  l  f- j! P, W
5#
發(fā)表于 2011-5-4 22:34:47 | 只看該作者
學(xué)習(xí)、、、、、、、、、、、、、、、、、、、、
6#
 樓主| 發(fā)表于 2011-8-15 20:09:08 | 只看該作者
后來發(fā)現(xiàn)其實(shí)這個(gè)通信程序的關(guān)鍵在于要弄清收發(fā)信息的格式,也就是MSComm初始設(shè)置時(shí),是二進(jìn)制還是文本。這個(gè)很重要,否則通信會(huì)出錯(cuò)。
7#
發(fā)表于 2012-11-15 11:31:42 | 只看該作者
讓我想起了,我畢業(yè)論文就搞的這個(gè)。

本版積分規(guī)則

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

GMT+8, 2025-7-15 21:17 , Processed in 0.066304 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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