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

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 8542|回復: 6

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

[復制鏈接]
1#
發(fā)表于 2011-3-31 21:03:06 | 只看該作者 |倒序瀏覽 |閱讀模式
項目需要用MSComm控件實現(xiàn)射頻設備與PC的串口通信。先說一下設備發(fā)送命令后會返回的相應的數(shù)據(jù):
3 J0 ]" X/ r9 k2 H7 A' X- K! Z5 b4 c1 o9 e4 I
當發(fā)送命令"H!i"時,為尋找芯片。
1 `" i) }& m3 ^; n. N3 ^' _當設備連接正確又無芯片在感應區(qū)時,設備循環(huán)返回:0630 和 1537+ K6 G9 P  s' W1 j% o
當設備當設備連接正確而芯片又在感應區(qū)時,設備返回0630,稍有停頓,繼續(xù)返回4831+其他信息' N( J6 o2 z7 `; p/ @1 ]
8 Z! A0 I9 h/ t$ ^1 J7 ]
當芯片在感應區(qū)時,發(fā)送命令“R00000016U”,讀取芯片前十六字節(jié)數(shù)據(jù)0 F/ J9 N! c1 b6 w; H
沒有錯誤時,設備返回:0630
, u& j6 ]6 n' v" U, y# n% x此時,發(fā)送命令“STX”,或十六進制命令“02”
/ H6 v3 Z- H3 {! d設備返回前十六字節(jié)數(shù)據(jù)9 V  e( _- z! @
; ?" i2 H6 q( a& g1 v4 ?* M
之后繼續(xù)發(fā)送命令“H!i”,尋找下一個芯片
8 D& }/ D. M+ K0 p- L--------------------------------------------------------------------" J" b/ `' `3 _0 ~& W# f" t, _
項目用MSComm進行串口通信
) c, W4 I. g- b) f需要將上述幾條命令循環(huán)起來。我用的是比較MSComm1.Input是否為爭取的返回值“4831”和“0630”。
2 X  p& x6 `8 ~4 g5 f用了三個timer來控制三條命令“H!i”、“R00000016U”和“STX”的發(fā)送。把發(fā)送命令都放在了timer_timer下。" _6 w  S6 V+ M# n$ H
但是這樣的話,就用到了三個Private Sub MSComm1_oncomm()。系統(tǒng)報錯,“發(fā)現(xiàn)二義性名稱”。意思應該是不能重復定義Private Sub MSComm1_oncomm()吧?& `, H) [( Q% z' i. s1 ~
----------------------------------------------------------------------------( |* C2 }. T  w; A& X* y5 Z
其實程序說簡單些就是:$ J1 v; W4 \0 ~* i! f6 @$ V
發(fā)送命令—>從數(shù)據(jù)返回區(qū)判定->發(fā)送命令->數(shù)據(jù)返回區(qū)判定->再發(fā)送命令->接收數(shù)據(jù)
; S+ F% a4 G6 N6 z" w這個循環(huán)要怎么實現(xiàn)呢?2 C, h* w0 B, t" c
先謝謝各位!
1 P& K/ D/ S1 y( l1 a7 ^# `5 n( ?1 x7 @! A, F0 U9 g
--------------------------------------------------------------------
' \3 U" h& O  ?6 \* j下面是循環(huán)部分的代碼。系統(tǒng)報錯$ P: R' f- M# f3 c* K  A
Private Sub cmdStart_click()
! E6 x0 b/ v% t    Timer1.Enabled = True
( G/ ~" b9 m5 ~    : T  C3 }6 U, D2 F$ N$ I6 w  h- N
   
& p" n) e9 Z) Q* T' Z% d# {    ) Z" ]) f7 T4 ~3 g: ?
End Sub
% y; M5 x! g) r6 P; vPrivate Sub timer1_timer()% g1 \7 m$ k( {; a
   
! y+ {+ R" R  c4 g: e& Z, l   MSComm1.OutBufferCount = 0 '先清空緩存
  k" X9 `) m6 b7 x4 A* J- \   sendbuffer = "H!i"- X, ]  h) W) }3 H0 c6 {
   MSComm1.Output = sendbuffer" t% n1 `2 A" v4 b, o
End Sub: L7 N6 s8 h: `
'結束* I+ o6 F- U4 R$ l1 X
Private Sub cmdStop_click()) c9 I5 T) S6 P( i  E  j! N
    Timer1.Enabled = False  \% [; i" x' Q1 d9 E& g$ x
    Timer2.Enabled = False
0 N1 `7 R# x( x! c) G0 h+ w0 d  u    Timer3.Enabled = False9 B0 ~+ @, P3 W% b( j
End Sub
& `6 z) L9 J7 r% L+ `( S2 K) o+ s
+ a" |" f3 Y% @. @4 r'接收數(shù)據(jù)
+ N$ J' H. i( E8 v* J& yPrivate Sub MSComm1_oncomm()
/ q2 m  w; \6 P) ?1 ]+ }! N    Dim inbyte() As Byte
, N; l  [1 x3 Q; l+ M    Dim revbuffer As String# A- o* y( M: H+ ?
    Dim a, i, b1 F5 S( ~2 A8 o8 b1 v6 y+ R
    Select Case MSComm1.CommEvent
* [" {0 D4 c9 y2 O       '如果有CT在感應區(qū)( Q2 E, c9 r! x( M& _4 V- c
        
* N. m4 E! u2 j6 h/ r# M        Case comEvReceive" d4 s! e! H2 q' K4 x
            inbyte = MSComm1.Input7 J2 U8 i. d/ H. m$ ]" J. i+ u/ x/ O  m
            For i = LBound(inbyte) To UBound(inbyte)            '返回數(shù)據(jù)轉(zhuǎn)換為十六進制0 R' c4 w3 `- U; x) R( J' X
                revbuffer = revbuffer + Hex(inbyte(i))4 M' ?( K; @; r3 F5 n
            Next i  y) @( s$ T3 n) _  ^0 j% y
            txtHex.Text = revbuffer9 i' w1 ]$ i' Y- g. q0 [1 Q1 M
            If Mid(revbuffer, 1, 6) = "480310" Then
! `0 L/ h8 h2 ]                Timer1.Enabled = False, y, U/ S% _! s8 J+ u
                Timer1.Enabled = True; R. O% ]& Z/ I+ K0 V) u7 X
            End If
1 l, B/ h: r, _' e        End Select9 f0 H3 Q% N3 ?( J! J- q  c4 b8 q
        Case comEvSend: e6 Y3 w( l/ q+ u9 Q/ ?( R
    End Select
' \& [; a9 z$ B; YPrivate Sub timer2_timer()
, Y; |" s4 p" A' E9 s4 f# W: W        MSComm1.OutBufferCount = 0 '先清空緩存0 O, d& u6 I! J9 |( d  I
        sendbuffer = "R00000016U"
: p* t4 L1 e* ?. j4 b. Z  I        MSComm1.Output = sendbuffer
5 q& ]8 r6 Z) [: }3 cEnd Sub
2 z: ], h' d; i3 y5 e' k4 sPrivate Sub MSComm1_oncomm()
3 Q4 f7 l9 [" a" E    Select Case MSComm1.CommEvent( }; g! z% D8 o
        Case comEvReceive. P/ I, q! V5 A7 X! i
        inbyte = MSComm1.Input
- U: R, Y; X1 Q; @- v        For i = LBound(inbyte) To UBound(inbyte)            '返回數(shù)據(jù)轉(zhuǎn)換為十六進制- i5 b6 q& ~% Z: M5 T4 X
            revbuffer = revbuffer + Hex(inbyte(i))
6 g, C/ N4 A/ J+ b        Next i
5 }  X. }/ }" n! M9 k) r0 y        txtHex.Text = revbuffer" c5 W! I, R$ d% j5 h% I0 j
        If Mid(revbuffer, 1, 4) = "6030" Then% X8 t& ?: M3 |* H+ e
            Timer2.Enabled = False
( ]0 S- Q& q1 W            Timer3.Enabled = True# j% y/ G  A! i3 p; B
        End If( D2 m$ ^6 ~2 t/ K: |3 A
        Case comEvSend9 j/ R' a8 B4 l: N  B: j6 V2 M& a
    End Select) q( N+ r: Y9 \/ j5 \
End Sub
8 }( q9 `5 e, i+ ~. _Private Sub timer3_timer()1 e. o; m( O0 E$ ^% B
    MSComm1.OutBufferCount = 0 '先清空緩存# ~. t) ~1 @  |8 O& d
    sendbuffer = "STX"
8 ?! ?" Q. }. |/ `7 g1 {$ M    MSComm1.Output = sendbuffer, C9 C! u( X" E1 @
    Select Case MSComm1.CommEvent
9 x) m( @" q+ K( d0 E7 G        Case comEvReceive( Q+ K# Y4 R7 j" \) \
            inbyte = MSComm1.Input
# q5 c: S3 u  \  v8 I8 w: H            For i = LBound(inbyte) To UBound(inbyte)            '返回數(shù)據(jù)轉(zhuǎn)換為十六進制
1 e2 o9 V5 K* [: Y( C! r, L6 L: Q$ i                revbuffer = revbuffer + Hex(inbyte(i))
  ~! {7 w, f4 T3 e5 ?0 z            Next i
& j; }0 F% U8 F& c3 Q1 [            txtHex.Text = revbuffer" |/ }/ Z! q( n
            Case comEvSend
3 A+ x' c* X; S% }7 ]    End Select, d( H" {' ]7 y% x
End Sub3 \0 S& v4 e( J* X9 S; S
) z/ ^% z2 u; V' E3 |
& V& y& M' q& R9 D8 B$ w$ D
8 @2 I, {* m. ~* T$ F% V; |8 S
2#
發(fā)表于 2011-4-1 09:22:34 | 只看該作者
這個問題感覺不難,但你描述的有些亂,讓人看不明白。3 G6 r+ @1 f! b
我也用Vb編過一些東西,歡迎交流。

點評

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

點評

大俠博學啊,哈哈  發(fā)表于 2011-4-6 18:37
4#
 樓主| 發(fā)表于 2011-4-6 22:47:31 | 只看該作者
回復 無能 的帖子
( o) h; O' y& D3 n5 r* @" ]1 ^3 E* P/ P6 z- K
快了。
4 T* l% o  c9 n設備通信協(xié)議我沒看清,這個設備的通信不用timer。7 k" U" a& f3 f/ r$ `
5#
發(fā)表于 2011-5-4 22:34:47 | 只看該作者
學習、、、、、、、、、、、、、、、、、、、、
6#
 樓主| 發(fā)表于 2011-8-15 20:09:08 | 只看該作者
后來發(fā)現(xiàn)其實這個通信程序的關鍵在于要弄清收發(fā)信息的格式,也就是MSComm初始設置時,是二進制還是文本。這個很重要,否則通信會出錯。
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 11:01 , Processed in 0.086414 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表