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

機械社區(qū)

標題: 求助:VB6.0 MSComm控件串口通信發(fā)送循環(huán) [打印本頁]

作者: robi    時間: 2011-3-31 21:03
標題: 求助:VB6.0 MSComm控件串口通信發(fā)送循環(huán)
項目需要用MSComm控件實現(xiàn)射頻設備與PC的串口通信。先說一下設備發(fā)送命令后會返回的相應的數(shù)據(jù):( F& ^$ G  y. I& {2 z! i

& N6 }# E/ I6 l4 d3 c* d當發(fā)送命令"H!i"時,為尋找芯片。
  F3 Y2 f% h4 W4 c: D當設備連接正確又無芯片在感應區(qū)時,設備循環(huán)返回:0630 和 1537
4 h) x3 k* D8 L% X當設備當設備連接正確而芯片又在感應區(qū)時,設備返回0630,稍有停頓,繼續(xù)返回4831+其他信息
7 I5 G, o$ M2 E! I* f! @, ]
' K4 R! [, G5 S8 t! o7 I/ B( h當芯片在感應區(qū)時,發(fā)送命令“R00000016U”,讀取芯片前十六字節(jié)數(shù)據(jù)
0 n! v5 N2 V- x3 ]$ w沒有錯誤時,設備返回:06305 g/ H: M3 j( O! @1 z
此時,發(fā)送命令“STX”,或十六進制命令“02”( E: v1 g9 d; _- C- Q
設備返回前十六字節(jié)數(shù)據(jù)2 x6 \! U3 Z0 q% K5 |$ P  b6 l
" v$ _) d. z) x' ?4 [
之后繼續(xù)發(fā)送命令“H!i”,尋找下一個芯片4 S3 W  g% ]( t+ i
--------------------------------------------------------------------6 n& S1 P+ \3 v  [
項目用MSComm進行串口通信
. s/ t5 B  z, s. Z3 r8 @0 b需要將上述幾條命令循環(huán)起來。我用的是比較MSComm1.Input是否為爭取的返回值“4831”和“0630”。
8 ]3 B: e/ G; r* H" C, [- l用了三個timer來控制三條命令“H!i”、“R00000016U”和“STX”的發(fā)送。把發(fā)送命令都放在了timer_timer下。1 I  I2 m/ Z2 T" v
但是這樣的話,就用到了三個Private Sub MSComm1_oncomm()。系統(tǒng)報錯,“發(fā)現(xiàn)二義性名稱”。意思應該是不能重復定義Private Sub MSComm1_oncomm()吧?9 Y+ C3 s& u" k( d6 ~$ W3 p
----------------------------------------------------------------------------
$ H; ]( K3 H) o# D/ \- B+ h其實程序說簡單些就是:) X, }2 q5 k1 n3 z$ u
發(fā)送命令—>從數(shù)據(jù)返回區(qū)判定->發(fā)送命令->數(shù)據(jù)返回區(qū)判定->再發(fā)送命令->接收數(shù)據(jù)
$ l" m7 x; h% B& e: @' Y這個循環(huán)要怎么實現(xiàn)呢?! R. G8 @# F+ e6 ]) i
先謝謝各位!5 a' E% k2 E8 G6 e" c+ n) T4 K

2 B. @! d$ @4 B" l--------------------------------------------------------------------! j" x# _- P8 `7 Z
下面是循環(huán)部分的代碼。系統(tǒng)報錯& N1 D1 g. O6 v! {
Private Sub cmdStart_click()
/ g/ q9 N" v8 L, l) O. ?6 p    Timer1.Enabled = True. [4 N# F6 S3 w, @
   
3 d2 M7 `9 u9 Y7 H/ B- k$ t& ]   
0 i7 j; j! p/ c% U9 o   
0 d' [2 f, I! t& m& l1 n" qEnd Sub, {3 y" L( H0 B* D& \
Private Sub timer1_timer()
6 Y8 \8 S" t% x# I7 X   4 a& ]$ E9 p4 j0 p' h1 O
   MSComm1.OutBufferCount = 0 '先清空緩存
3 Z# w5 |! E4 d/ R# P! z' B   sendbuffer = "H!i"( x2 O( x( C+ \4 O
   MSComm1.Output = sendbuffer4 M8 e; P& F- q3 w/ q% M
End Sub
% W3 G; f8 }# N'結束
' |6 T. o3 E& QPrivate Sub cmdStop_click()
  B& M, u& L$ j; P& V+ q* G    Timer1.Enabled = False* {9 a0 r" t( l) n: z" r
    Timer2.Enabled = False
7 O, T# J. f: E; }5 L/ B; n    Timer3.Enabled = False
7 l  ]; a& q: h, \/ _- J) U# yEnd Sub- B% K6 O. w2 y5 k
' E( a" J5 M7 d( W
'接收數(shù)據(jù)
* ]- R# r# u* u6 qPrivate Sub MSComm1_oncomm()4 A3 j! U' Q* J9 X2 O6 X3 U
    Dim inbyte() As Byte6 l$ A9 A2 A- ?8 I5 g
    Dim revbuffer As String' ?! ^9 |8 `) M, o3 \
    Dim a, i, b6 ^1 O3 h6 I$ W5 I: Q8 T0 y
    Select Case MSComm1.CommEvent1 E$ A% P% |- o6 i: \+ ]: t* d
       '如果有CT在感應區(qū)8 g4 r2 x/ r5 y) I* x) W* l
        : b: J9 m* c* [9 d4 n/ [5 U
        Case comEvReceive
* z5 ^3 M+ ~; F  [) Y            inbyte = MSComm1.Input
+ F( t9 P6 g% x9 l$ b            For i = LBound(inbyte) To UBound(inbyte)            '返回數(shù)據(jù)轉換為十六進制
5 Q' w2 `( |, G. Z  d                revbuffer = revbuffer + Hex(inbyte(i)), z) T& f; E$ w% f- j
            Next i
. p* x& o/ z" J" r/ S2 ^            txtHex.Text = revbuffer
; l5 G- n+ y" C9 ]: o$ d            If Mid(revbuffer, 1, 6) = "480310" Then
, b* O; x# X4 H; V+ C                Timer1.Enabled = False. M0 A2 z* u  T* Q9 v5 T3 r
                Timer1.Enabled = True1 S0 ~* N9 w8 c+ l* X) S# _" x
            End If$ m+ z& g4 T; z0 O
        End Select3 |( l( S/ s8 L# f5 a
        Case comEvSend
$ `! U* V0 z% y) X; G+ g3 ?    End Select6 e+ K7 L# m, O# G9 M. W4 Q; w- u
Private Sub timer2_timer()/ T9 d, }  @, O
        MSComm1.OutBufferCount = 0 '先清空緩存* ]5 L7 u0 T: K! P/ n4 t5 d3 `
        sendbuffer = "R00000016U"6 ~1 Y, e. T( e- B* L! B
        MSComm1.Output = sendbuffer
. m- a  w8 t6 V; |) kEnd Sub8 A7 z( ~2 @% e# |3 I# c/ x# ^/ v6 {
Private Sub MSComm1_oncomm()
8 ~: v/ S1 t3 W) e! B8 h    Select Case MSComm1.CommEvent
) x( l6 a; H# R$ S1 k4 L6 V& P        Case comEvReceive5 L, E9 q, ^( Z( x4 ]
        inbyte = MSComm1.Input& p9 _: L6 u8 E3 d
        For i = LBound(inbyte) To UBound(inbyte)            '返回數(shù)據(jù)轉換為十六進制
6 R7 z/ I6 p1 M5 F9 N            revbuffer = revbuffer + Hex(inbyte(i))& r7 J( m4 O5 b
        Next i& v% r5 B4 S, ~* }! ^; P
        txtHex.Text = revbuffer
" w/ V* ]5 W" ?+ i  q! _5 f2 c        If Mid(revbuffer, 1, 4) = "6030" Then4 C7 p) d7 u* w* @- n
            Timer2.Enabled = False
' g% `: k, u) V            Timer3.Enabled = True
: w' ^- t+ b% o: X5 k6 i, b        End If
- D2 s' Y  v7 r2 Q9 b4 M: R# I        Case comEvSend
3 {, l$ c, k+ A    End Select
- j+ a, c% L( B1 o  }, m; q, s% a' r$ ?End Sub
+ ~0 [) X7 a( T$ H- T! a* ZPrivate Sub timer3_timer()( k& e6 H. q  J: v* Z
    MSComm1.OutBufferCount = 0 '先清空緩存. s$ L( ]- W- Z8 Z' Z/ H
    sendbuffer = "STX"
6 m0 K# A+ ]8 F# n) d    MSComm1.Output = sendbuffer5 H& o  I+ Q  O; J9 j
    Select Case MSComm1.CommEvent
$ n4 N3 l* B# z3 j5 A+ Y        Case comEvReceive
/ r& e/ M) u, i. d. b            inbyte = MSComm1.Input
5 C6 L' h2 v% L- K/ n- w            For i = LBound(inbyte) To UBound(inbyte)            '返回數(shù)據(jù)轉換為十六進制( f3 F4 I' w  K* y8 G
                revbuffer = revbuffer + Hex(inbyte(i))% \  X  b! `; [
            Next i; [2 h0 ]  F' y. N% n
            txtHex.Text = revbuffer
% c* @4 U2 x( b0 n            Case comEvSend0 ~* |" H0 V& |* J, `
    End Select
9 G, J" g7 x8 NEnd Sub# e# _7 c+ v) O$ Z' W

8 A1 t4 K: Q$ A* o& |) A3 Z' O, O
) F0 W: R+ m/ F, m/ [0 {
4 j$ K* O0 _7 D+ b- H
作者: 無能    時間: 2011-4-1 09:22
這個問題感覺不難,但你描述的有些亂,讓人看不明白。
1 }4 i! _9 E- L# E6 n) d3 z我也用Vb編過一些東西,歡迎交流。
作者: 無能    時間: 2011-4-6 16:50
不知解決的如何了?三個Timer確實很混亂。
作者: robi    時間: 2011-4-6 22:47
回復 無能 的帖子
5 S- W  f, n+ k& k8 \  h( x# h, J6 p6 Z! V
快了。$ w: p! P9 [" o9 _/ t
設備通信協(xié)議我沒看清,這個設備的通信不用timer。
  p. j/ C' i# ~2 E0 v4 G
作者: 1393065141    時間: 2011-5-4 22:34
學習、、、、、、、、、、、、、、、、、、、、
作者: robi    時間: 2011-8-15 20:09
后來發(fā)現(xiàn)其實這個通信程序的關鍵在于要弄清收發(fā)信息的格式,也就是MSComm初始設置時,是二進制還是文本。這個很重要,否則通信會出錯。
作者: 機械電氣編程    時間: 2012-11-15 11:31
讓我想起了,我畢業(yè)論文就搞的這個。




歡迎光臨 機械社區(qū) (http://www.xa-space.com/) Powered by Discuz! X3.5